S Price: $0.578109 (-3.16%)

Contract

0x63BED26814b281FA53Ae1d08b37d04EAE05C9B76

Overview

S Balance

Sonic LogoSonic LogoSonic Logo0 S

S Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Process Liquidit...112366942025-03-02 18:27:392 days ago1740940059IN
0x63BED268...AE05C9B76
0 S0.0075920355
Approve112363352025-03-02 18:25:432 days ago1740939943IN
0x63BED268...AE05C9B76
0 S0.0028844261.05
Initialize112363192025-03-02 18:25:372 days ago1740939937IN
0x63BED268...AE05C9B76
0 S0.010331255
Add Initial Liqu...112362952025-03-02 18:25:302 days ago1740939930IN
0x63BED268...AE05C9B76
50 S0.1380166755
Approve112362662025-03-02 18:25:212 days ago1740939921IN
0x63BED268...AE05C9B76
0 S0.0025820855

Latest 1 internal transaction

Parent Transaction Hash Block From To
112362952025-03-02 18:25:302 days ago1740939930
0x63BED268...AE05C9B76
50 S
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FARMER

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at SonicScan.org on 2025-03-02
*/

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

// OpenZeppelin Contracts v5.0.1

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, 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 from, address to, 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);
}

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 */
abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;
    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        require(_status != _ENTERED, "R1");
        _status = _ENTERED;
        _;
        _status = _NOT_ENTERED;
    }
}

/**
 * @dev Contract module which provides a basic access control mechanism
 */
abstract contract Ownable {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert("O1");
        }
        _transferOwnership(initialOwner);
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    function _checkOwner() internal view virtual {
        require(owner() == msg.sender, "O2");
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "O1");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

/**
 * @dev Implementation of the {IERC20} interface.
 */
abstract contract ERC20 is IERC20 {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual returns (string memory) {
        return _name;
    }

    function symbol() public view virtual returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual returns (uint256) {
        return _balances[account];
    }

    function transfer(address to, uint256 amount) public virtual returns (bool) {
        address owner = msg.sender;
        _transfer(owner, to, amount);
        return true;
    }

    function allowance(address owner, address spender) public view virtual returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public virtual returns (bool) {
        address owner = msg.sender;
        _approve(owner, spender, amount);
        return true;
    }

    function transferFrom(address from, address to, uint256 amount) public virtual returns (bool) {
        address spender = msg.sender;
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0) && to != address(0), "E0");
        _beforeTokenTransfer(from, to, amount);
        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "E2");
        unchecked {
            _balances[from] = fromBalance - amount;
            _balances[to] += amount;
        }
        emit Transfer(from, to, amount);
        _afterTokenTransfer(from, to, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "E3");
        _beforeTokenTransfer(address(0), account, amount);
        _totalSupply += amount;
        unchecked {
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);
        _afterTokenTransfer(address(0), account, amount);
    }

    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0) && spender != address(0), "E4");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "E5");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

interface IMetropolisRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    
    // Mevcut fonksiyonlar
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

    // Yeni eklenen fonksiyonlar
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

interface IMetropolisFactory {
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

// Pair interface'ini de ekleyelim
interface IMetropolisPair {
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function sync() external;
}

// FARMER Token Contract
contract FARMER is ERC20, ReentrancyGuard, Ownable {
    // Constants
    uint256 private constant TOTAL_SUPPLY = 1_000_000 * 10**18;
    uint256 private constant TAX_RATE = 5; // 5%
    uint256 private constant LIQUIDITY_TAX = 25; // 2.5%
    uint256 private constant AIRDROP_TAX = 25; // 2.5%
    uint256 private constant MIN_HOLDER_AMOUNT = 10 * 10**18; // 10 tokens minimum for holder status
    uint256 private constant MIN_TOKENS_FOR_PROCESS = 100 * 10**18; // 100 tokens minimum for processing
    uint256 private constant SWAP_PERCENTAGE = 75; // 75% will be swapped
    uint256 private constant LIQUIDITY_PERCENTAGE = 25; // 25% will be used for liquidity
    uint256 private constant MAX_SLIPPAGE = 30; // 30% slippage tolerance

    // Metropolis DEX addresses
    IMetropolisRouter public metropolisRouter;
    IMetropolisFactory public metropolisFactory;
    address public sonicToken;
    address public liquidityPair;

    // Holder tracking
    mapping(address => bool) public isHolder;
    address[] public holders;

    // Optimize events
    event LiquidityAdded(uint256 indexed tokenAmount, uint256 indexed sonicAmount);
    event AirdropDistributed(uint256 indexed amount, uint256 indexed holdersCount);
    event SwapFailed(string indexed reason);
    event ProcessStarted(uint256 indexed tokensForLiquidity, uint256 indexed tokensForAirdrop);
    event SwapSuccessful(uint256 indexed tokensSwapped, uint256 indexed wethReceived);
    event PairReservesUpdated(uint256 indexed farmReserve, uint256 indexed wethReserve);
    event ContractInitialized(address indexed router, address indexed factory, address indexed sonic);

    uint256 private _pendingLiquidityTokens;
    uint256 private _pendingAirdropTokens;
    bool private _initialized;

    constructor() ERC20("FARMER", "FARM") Ownable(msg.sender) {
        address _metropolisRouter = 0x95a7e403d7cF20F675fF9273D66e94d35ba49fA3;
        address _metropolisFactory = 0x1570300e9cFEC66c9Fb0C8bc14366C86EB170Ad0;
        address _sonicToken = 0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38;

        require(_metropolisRouter != address(0) && _metropolisFactory != address(0) && _sonicToken != address(0), "E1");

        metropolisRouter = IMetropolisRouter(_metropolisRouter);
        metropolisFactory = IMetropolisFactory(_metropolisFactory);
        sonicToken = _sonicToken;

        _mint(address(this), TOTAL_SUPPLY);
    }

    function initialize() external onlyOwner {
        require(!_initialized, "E1");
        _initialized = true;

        // Try to get existing pair first
        liquidityPair = metropolisFactory.getPair(address(this), sonicToken);
        
        // If pair doesn't exist, create it
        if (liquidityPair == address(0)) {
            liquidityPair = metropolisFactory.createPair(address(this), sonicToken);
        }
        
        require(liquidityPair != address(0), "E5");

        _approve(address(this), address(metropolisRouter), type(uint256).max);
        
        require(IERC20(sonicToken).approve(address(metropolisRouter), type(uint256).max), "E4");
        IERC20(sonicToken).approve(liquidityPair, type(uint256).max);
        IERC20(address(this)).approve(liquidityPair, type(uint256).max);

        emit ContractInitialized(address(metropolisRouter), address(metropolisFactory), sonicToken);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        // Boş implementasyon kaldırıldı
    }

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        // Boş implementasyon kaldırıldı
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        require(from != address(0) && to != address(0), "E0");
        
        // Skip tax for owner and contract transfers
        if (from == owner() || to == owner() || from == address(this) || to == address(this) || !_initialized) {
            super._transfer(from, to, amount);
            _updateHolder(from);
            _updateHolder(to);
            return;
        }

        bool isSellOrBuy = to == liquidityPair || from == liquidityPair;
        if (isSellOrBuy) {
            // Calculate tax amount (5%)
            uint256 totalTax = (amount * TAX_RATE) / 100;
            uint256 transferAmount = amount - totalTax;
            
            // First transfer main amount to recipient
            super._transfer(from, to, transferAmount);
            
            // Then transfer tax to contract
            super._transfer(from, address(this), totalTax);

            // Split tax between liquidity and airdrop (2.5% each)
            _pendingLiquidityTokens += (totalTax * LIQUIDITY_TAX) / 100;  // 2.5% for liquidity
            _pendingAirdropTokens += (totalTax * AIRDROP_TAX) / 100;    // 2.5% for airdrop

            // Try to process if we have enough tokens
            if ((_pendingLiquidityTokens >= MIN_TOKENS_FOR_PROCESS || 
                _pendingAirdropTokens >= MIN_TOKENS_FOR_PROCESS) && 
                holders.length > 0) {
                // Refresh router approvals first
                _approve(address(this), address(metropolisRouter), type(uint256).max);
                IERC20(sonicToken).approve(address(metropolisRouter), type(uint256).max);
                
                // Then refresh pair approvals
                IERC20(sonicToken).approve(liquidityPair, type(uint256).max);
                IERC20(address(this)).approve(liquidityPair, type(uint256).max);
                
                try this.processLiquidityAndAirdrop() {
                    // Process successful
                } catch Error(string memory reason) {
                    emit SwapFailed(string(abi.encodePacked("Auto process failed: ", reason)));
                } catch {
                    emit SwapFailed("Unknown error in automatic processing");
                }
            }
        } else {
            // Normal transfer without tax
            super._transfer(from, to, amount);
        }
        
        // Update holder status for both addresses
        _updateHolder(from);
        _updateHolder(to);
    }

    function _updateHolder(address account) private {
        if (account != liquidityPair && account != address(this)) {
            uint256 balance = balanceOf(account);
            bool isCurrentlyHolder = isHolder[account];
            
            if (balance >= MIN_HOLDER_AMOUNT && !isCurrentlyHolder) {
                isHolder[account] = true;
                holders.push(account);
            } else if (balance < MIN_HOLDER_AMOUNT && isCurrentlyHolder) {
                isHolder[account] = false;
                _removeHolder(account);
            }
        }
    }

    function _removeHolder(address account) private {
        for (uint256 i = 0; i < holders.length; i++) {
            if (holders[i] == account) {
                holders[i] = holders[holders.length - 1];
                holders.pop();
                break;
            }
        }
    }

    function processLiquidityAndAirdrop() external nonReentrant {
        require(_pendingLiquidityTokens > 0 || _pendingAirdropTokens > 0, "E5");
        require(holders.length > 0, "E6");
        
        uint256 totalTokens = _pendingLiquidityTokens + _pendingAirdropTokens;
        require(totalTokens >= MIN_TOKENS_FOR_PROCESS, "E7");
        
        emit ProcessStarted(_pendingLiquidityTokens, _pendingAirdropTokens);

        // Reset pending amounts
        uint256 tempLiquidityTokens = _pendingLiquidityTokens;
        uint256 tempAirdropTokens = _pendingAirdropTokens;
        _pendingLiquidityTokens = 0;
        _pendingAirdropTokens = 0;

        // Keep 25% of tokens for liquidity
        uint256 tokensForLiquidity = (totalTokens * LIQUIDITY_PERCENTAGE) / 100;
        uint256 tokensToSwap = totalTokens - tokensForLiquidity;

        // First swap 75% of tokens to SONIC
        uint256 sonicReceived = _processSwap(tokensToSwap);
        if (sonicReceived == 0) {
            // If swap fails, restore pending amounts
            _pendingLiquidityTokens = tempLiquidityTokens;
            _pendingAirdropTokens = tempAirdropTokens;
            return;
        }

        // Add liquidity with 25% of FARMER tokens and 25% of received SONIC
        uint256 sonicForLiquidity = (sonicReceived * LIQUIDITY_PERCENTAGE) / 100;
        if (sonicForLiquidity > 0) {
            _processLiquidity(tokensForLiquidity, sonicForLiquidity);
        }

        // Distribute remaining SONIC as airdrop (75% of received SONIC)
        uint256 sonicForAirdrop = sonicReceived - sonicForLiquidity;
        if (sonicForAirdrop > 0) {
            _processAirdrop(sonicForAirdrop);
        }
    }

    function _processSwap(uint256 totalTokens) private returns (uint256) {
        if (totalTokens == 0) return 0;

        // Refresh approvals first
        _approve(address(this), address(metropolisRouter), type(uint256).max);
        IERC20(sonicToken).approve(address(metropolisRouter), type(uint256).max);

        // Sync pair first and check success
        try IMetropolisPair(liquidityPair).sync() {
            (uint256 farmReserve, uint256 wethReserve) = getPairReserves();
            emit PairReservesUpdated(farmReserve, wethReserve);
        } catch Error(string memory reason) {
            emit SwapFailed(string(abi.encodePacked("Pair sync failed: ", reason)));
            return 0;
        }

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = sonicToken;

        uint256 initialSonicBalance = IERC20(sonicToken).balanceOf(address(this));
        uint256 minOutput = getMinimumOutputWithSlippage(totalTokens);

        try metropolisRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            totalTokens,
            minOutput,
            path,
            address(this), // Contract should receive the tokens
            block.timestamp + 300
        ) {
            uint256 finalSonicBalance = IERC20(sonicToken).balanceOf(address(this));
            uint256 sonicReceived = finalSonicBalance - initialSonicBalance;
            
            // Check if swap was successful
            if (sonicReceived == 0) {
                emit SwapFailed("No SONIC received after swap");
                return 0;
            }
            
            if (sonicReceived < minOutput) {
                emit SwapFailed(string(abi.encodePacked("Received less than minimum output: ", 
                                                       uint2str(sonicReceived), " < ", 
                                                       uint2str(minOutput))));
                return 0;
            }
            
            emit SwapSuccessful(totalTokens, sonicReceived);
            return sonicReceived;
        } catch Error(string memory reason) {
            emit SwapFailed(string(abi.encodePacked("Swap failed: ", reason)));
            return 0;
        } catch {
            emit SwapFailed("Unknown error in swap");
            return 0;
        }
    }

    // Helper function to convert uint to string
    function uint2str(uint256 _i) internal pure returns (string memory str) {
        if (_i == 0) return "0";
        uint256 j = _i;
        uint256 length;
        while (j != 0) {
            length++;
            j /= 10;
        }
        bytes memory bstr = new bytes(length);
        while (_i != 0) {
            bstr[--length] = bytes1(uint8(48 + _i % 10));
            _i /= 10;
        }
        str = string(bstr);
    }

    function _processLiquidity(uint256 tokensForLiquidity, uint256 sonicForLiquidity) private {
        if (tokensForLiquidity == 0 || sonicForLiquidity == 0) return;

        // Check router approvals
        _approve(address(this), address(metropolisRouter), tokensForLiquidity);
        IERC20(sonicToken).approve(address(metropolisRouter), sonicForLiquidity);

        try metropolisRouter.addLiquidity(
            address(this),
            sonicToken,
            tokensForLiquidity,
            sonicForLiquidity,
            tokensForLiquidity * (100 - MAX_SLIPPAGE) / 100, // 30% slippage tolerance
            sonicForLiquidity * (100 - MAX_SLIPPAGE) / 100,  // 30% slippage tolerance
            address(this),
            block.timestamp + 300
        ) {
            emit LiquidityAdded(tokensForLiquidity, sonicForLiquidity);
        } catch Error(string memory reason) {
            emit SwapFailed(reason);
        } catch {
            emit SwapFailed("Unknown error in addLiquidity");
        }
    }

    function _processAirdrop(uint256 sonicAmount) private {
        if (sonicAmount == 0 || holders.length == 0) return;
        
        uint256 amountPerHolder = sonicAmount / holders.length;
        if (amountPerHolder == 0) return;

        for (uint256 i = 0; i < holders.length && i < 100; i++) {
            if (holders[i] != address(0)) {
                try IERC20(sonicToken).transfer(holders[i], amountPerHolder) {
                    // Transfer successful
                } catch {
                    continue;
                }
            }
        }
        
        emit AirdropDistributed(sonicAmount, holders.length);
    }

    // View functions
    function getHolderCount() external view returns (uint256) {
        return holders.length;
    }
    
    function getHolders() external view returns (address[] memory) {
        return holders;
    }

    // Initial liquidity function (must be called by owner with ETH)
    function addInitialLiquidity(uint256 tokenAmount) external payable onlyOwner {
        require(msg.value > 0, "E8");
        require(tokenAmount > 0, "E9");
        
        require(
            IERC20(address(this)).balanceOf(address(this)) >= tokenAmount,
            "Insufficient token balance in contract"
        );

        _approve(address(this), address(metropolisRouter), tokenAmount);

        try metropolisRouter.addLiquidityETH{value: msg.value}(
            address(this),
            tokenAmount,
            0,
            0,
            msg.sender,
            block.timestamp
        ) {
            emit LiquidityAdded(tokenAmount, msg.value);
        } catch {
            _approve(address(this), address(metropolisRouter), 0);
            revert("Failed to add liquidity");
        }

        uint256 remainingETH = address(this).balance;
        if (remainingETH > 0) {
            payable(msg.sender).transfer(remainingETH);
        }
    }

    function setRouter(address _router) external onlyOwner {
        require(_router != address(0), "E11");
        metropolisRouter = IMetropolisRouter(_router);
    }

    function rescueTokens(address _token, uint256 _amount) external onlyOwner {
        require(_token != address(this), "Cannot rescue FARMER tokens");
        IERC20(_token).transfer(owner(), _amount);
    }

    // Transfer tokens to owner
    function withdrawTokensToOwner(uint256 amount) external onlyOwner {
        require(
            IERC20(address(this)).balanceOf(address(this)) >= amount,
            "Insufficient balance"
        );
        _transfer(address(this), msg.sender, amount);
    }

    // View functions for pending amounts
    function getPendingLiquidityTokens() external view returns (uint256) {
        return _pendingLiquidityTokens;
    }

    function getPendingAirdropTokens() external view returns (uint256) {
        return _pendingAirdropTokens;
    }

    // Manual trigger for processing (only owner)
    function triggerProcessing() external onlyOwner {
        require(_pendingLiquidityTokens > 0 || _pendingAirdropTokens > 0, "E5");
        require(holders.length > 0, "E6");
        try this.processLiquidityAndAirdrop() {
            // Process successful
        } catch {
            emit ProcessStarted(_pendingLiquidityTokens, _pendingAirdropTokens);
        }
    }

    function checkAndRefreshAllowances() external onlyOwner {
        uint256 farmAllowance = IERC20(address(this)).allowance(address(this), address(metropolisRouter));
        if (farmAllowance < TOTAL_SUPPLY) {
            _approve(address(this), address(metropolisRouter), TOTAL_SUPPLY);
        }

        uint256 wethBalance = IERC20(sonicToken).balanceOf(address(this));
        if (wethBalance > 0) {
            uint256 wethAllowance = IERC20(sonicToken).allowance(address(this), address(metropolisRouter));
            if (wethAllowance < wethBalance) {
                IERC20(sonicToken).approve(address(metropolisRouter), type(uint256).max);
            }
        }
    }

    // Debug function
    function getSwapInfo() public view returns (uint256, uint256, bool, address) {
        return (
            balanceOf(address(this)),
            IERC20(sonicToken).allowance(address(this), address(metropolisRouter)),
            liquidityPair != address(0),
            liquidityPair
        );
    }

    function getPairReserves() public view returns (uint256 farmReserve, uint256 wethReserve) {
        (uint112 reserve0, uint112 reserve1,) = IMetropolisPair(liquidityPair).getReserves();
        address token0 = IMetropolisPair(liquidityPair).token0();
        if (token0 == address(this)) {
            return (uint256(reserve0), uint256(reserve1));
        }
        return (uint256(reserve1), uint256(reserve0));
    }

    function getMinimumOutputWithSlippage(uint256 amountIn) public view returns (uint256) {
        (uint256 farmReserve, uint256 wethReserve) = getPairReserves();
        if (farmReserve == 0 || wethReserve == 0) return 0;
        
        uint256 amountInWithFee = amountIn * 997; // 0.3% fee
        uint256 numerator = amountInWithFee * wethReserve;
        uint256 denominator = (farmReserve * 1000) + amountInWithFee;
        uint256 amountOut = numerator / denominator;
        
        // Apply slippage tolerance (30%)
        return amountOut * (100 - MAX_SLIPPAGE) / 100;
    }

    // aprov all
    function refreshAllApprovals() external onlyOwner {
        _approve(address(this), address(metropolisRouter), type(uint256).max);
        IERC20(sonicToken).approve(address(metropolisRouter), type(uint256).max);
        
        try IERC20(sonicToken).approve(liquidityPair, type(uint256).max) {} catch {}
        try IERC20(address(this)).approve(liquidityPair, type(uint256).max) {} catch {}
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"holdersCount","type":"uint256"}],"name":"AirdropDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"router","type":"address"},{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"indexed":true,"internalType":"address","name":"sonic","type":"address"}],"name":"ContractInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"sonicAmount","type":"uint256"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"farmReserve","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"wethReserve","type":"uint256"}],"name":"PairReservesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokensForLiquidity","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"tokensForAirdrop","type":"uint256"}],"name":"ProcessStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"reason","type":"string"}],"name":"SwapFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"wethReceived","type":"uint256"}],"name":"SwapSuccessful","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"addInitialLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkAndRefreshAllowances","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHolderCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHolders","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"getMinimumOutputWithSlippage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPairReserves","outputs":[{"internalType":"uint256","name":"farmReserve","type":"uint256"},{"internalType":"uint256","name":"wethReserve","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPendingAirdropTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPendingLiquidityTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSwapInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"holders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isHolder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metropolisFactory","outputs":[{"internalType":"contract IMetropolisFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metropolisRouter","outputs":[{"internalType":"contract IMetropolisRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"processLiquidityAndAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"refreshAllApprovals","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sonicToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"triggerProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawTokensToOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b50336040518060400160405280600681526020017f4641524d455200000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4641524d00000000000000000000000000000000000000000000000000000000815250816003908162000090919062000802565b508060049081620000a2919062000802565b5050506001600581905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200011f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000116906200094a565b60405180910390fd5b62000130816200034b60201b60201c565b5060007395a7e403d7cf20f675ff9273d66e94d35ba49fa390506000731570300e9cfec66c9fb0c8bc14366c86eb170ad09050600073039e2fb66102314ce7b64ce5ce3e5183bc94ad389050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015620001e75750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015620002215750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b62000263576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200025a90620009bc565b60405180910390fd5b82600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003423069d3c21bcecceda10000006200041160201b60201c565b50505062000ae8565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000483576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200047a9062000a2e565b60405180910390fd5b62000497600083836200057e60201b60201c565b8060026000828254620004ab919062000a7f565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200055e919062000acb565b60405180910390a36200057a600083836200058360201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200060a57607f821691505b60208210810362000620576200061f620005c2565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200068a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200064b565b6200069686836200064b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620006e3620006dd620006d784620006ae565b620006b8565b620006ae565b9050919050565b6000819050919050565b620006ff83620006c2565b620007176200070e82620006ea565b84845462000658565b825550505050565b600090565b6200072e6200071f565b6200073b818484620006f4565b505050565b5b8181101562000763576200075760008262000724565b60018101905062000741565b5050565b601f821115620007b2576200077c8162000626565b62000787846200063b565b8101602085101562000797578190505b620007af620007a6856200063b565b83018262000740565b50505b505050565b600082821c905092915050565b6000620007d760001984600802620007b7565b1980831691505092915050565b6000620007f28383620007c4565b9150826002028217905092915050565b6200080d8262000588565b67ffffffffffffffff81111562000829576200082862000593565b5b620008358254620005f1565b6200084282828562000767565b600060209050601f8311600181146200087a576000841562000865578287015190505b620008718582620007e4565b865550620008e1565b601f1984166200088a8662000626565b60005b82811015620008b4578489015182556001820191506020850194506020810190506200088d565b86831015620008d45784890151620008d0601f891682620007c4565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f4f31000000000000000000000000000000000000000000000000000000000000600082015250565b600062000932600283620008e9565b91506200093f82620008fa565b602082019050919050565b60006020820190508181036000830152620009658162000923565b9050919050565b7f4531000000000000000000000000000000000000000000000000000000000000600082015250565b6000620009a4600283620008e9565b9150620009b1826200096c565b602082019050919050565b60006020820190508181036000830152620009d78162000995565b9050919050565b7f4533000000000000000000000000000000000000000000000000000000000000600082015250565b600062000a16600283620008e9565b915062000a2382620009de565b602082019050919050565b6000602082019050818103600083015262000a498162000a07565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000a8c82620006ae565b915062000a9983620006ae565b925082820190508082111562000ab45762000ab362000a50565b5b92915050565b62000ac581620006ae565b82525050565b600060208201905062000ae2600083018462000aba565b92915050565b615e728062000af86000396000f3fe6080604052600436106101f25760003560e01c80637136982b1161010d578063a9059cbb116100a0578063dd62ed3e1161006f578063dd62ed3e146106bd578063ed9cacfe146106fa578063f2fde38b14610711578063f4ea42de1461073a578063fd7c9fab14610777576101f9565b8063a9059cbb14610603578063c026d93a14610640578063c0d7865514610657578063d4d7b19a14610680576101f9565b80638129fc1c116100dc5780638129fc1c1461056a5780638da5cb5b1461058157806395d89b41146105ac5780639df93f6c146105d7576101f9565b80637136982b146104d457806379304bec146104ff5780637ac84fc114610528578063808a54571461053f576101f9565b8063397883d2116101855780635d76b04c116101545780635d76b04c146104165780635fe8e7cc1461044157806362b6327a1461046c57806370a0823114610497576101f9565b8063397883d21461038f57806341a22cc2146103a6578063461a3a95146103c257806357376198146103ed576101f9565b80631b26c80d116101c15780631b26c80d146102bc57806323b872dd146102ea5780632a11ced014610327578063313ce56714610364576101f9565b806306fdde03146101fe57806308dee2b414610229578063095ea7b31461025457806318160ddd14610291576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b506102136107a2565b6040516102209190614671565b60405180910390f35b34801561023557600080fd5b5061023e610834565b60405161024b91906146ac565b60405180910390f35b34801561026057600080fd5b5061027b60048036038101906102769190614760565b61083e565b60405161028891906147bb565b60405180910390f35b34801561029d57600080fd5b506102a661085a565b6040516102b391906146ac565b60405180910390f35b3480156102c857600080fd5b506102d1610864565b6040516102e194939291906147e5565b60405180910390f35b3480156102f657600080fd5b50610311600480360381019061030c919061482a565b6109b7565b60405161031e91906147bb565b60405180910390f35b34801561033357600080fd5b5061034e6004803603810190610349919061487d565b6109df565b60405161035b91906148aa565b60405180910390f35b34801561037057600080fd5b50610379610a1e565b60405161038691906148e1565b60405180910390f35b34801561039b57600080fd5b506103a4610a27565b005b6103c060048036038101906103bb919061487d565b610b60565b005b3480156103ce57600080fd5b506103d7610e72565b6040516103e491906148aa565b60405180910390f35b3480156103f957600080fd5b50610414600480360381019061040f9190614760565b610e98565b005b34801561042257600080fd5b5061042b610f98565b60405161043891906146ac565b60405180910390f35b34801561044d57600080fd5b50610456610fa2565b60405161046391906149ba565b60405180910390f35b34801561047857600080fd5b50610481611030565b60405161048e9190614a3b565b60405180910390f35b3480156104a357600080fd5b506104be60048036038101906104b99190614a56565b611056565b6040516104cb91906146ac565b60405180910390f35b3480156104e057600080fd5b506104e961109e565b6040516104f691906146ac565b60405180910390f35b34801561050b57600080fd5b506105266004803603810190610521919061487d565b6110ab565b005b34801561053457600080fd5b5061053d61117d565b005b34801561054b57600080fd5b506105546113d6565b60405161056191906148aa565b60405180910390f35b34801561057657600080fd5b5061057f6113fc565b005b34801561058d57600080fd5b50610596611b44565b6040516105a391906148aa565b60405180910390f35b3480156105b857600080fd5b506105c1611b6e565b6040516105ce9190614671565b60405180910390f35b3480156105e357600080fd5b506105ec611c00565b6040516105fa929190614a83565b60405180910390f35b34801561060f57600080fd5b5061062a60048036038101906106259190614760565b611dc0565b60405161063791906147bb565b60405180910390f35b34801561064c57600080fd5b50610655611ddc565b005b34801561066357600080fd5b5061067e60048036038101906106799190614a56565b61212f565b005b34801561068c57600080fd5b506106a760048036038101906106a29190614a56565b6121ea565b6040516106b491906147bb565b60405180910390f35b3480156106c957600080fd5b506106e460048036038101906106df9190614aac565b61220a565b6040516106f191906146ac565b60405180910390f35b34801561070657600080fd5b5061070f612291565b005b34801561071d57600080fd5b5061073860048036038101906107339190614a56565b61256d565b005b34801561074657600080fd5b50610761600480360381019061075c919061487d565b6125f0565b60405161076e91906146ac565b60405180910390f35b34801561078357600080fd5b5061078c6126a2565b6040516107999190614b0d565b60405180910390f35b6060600380546107b190614b57565b80601f01602080910402602001604051908101604052809291908181526020018280546107dd90614b57565b801561082a5780601f106107ff5761010080835404028352916020019161082a565b820191906000526020600020905b81548152906001019060200180831161080d57829003601f168201915b5050505050905090565b6000600d54905090565b60008033905061084f8185856126c8565b600191505092915050565b6000600254905090565b60008060008061087330611056565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016108f2929190614b88565b602060405180830381865afa15801561090f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109339190614bc6565b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16935093509350935090919293565b6000803390506109c885828561285c565b6109d38585856128e8565b60019150509392505050565b600c81815481106109ef57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b610a2f613077565b6000600d541180610a4257506000600e54115b610a81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7890614c3f565b60405180910390fd5b6000600c8054905011610ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac090614cab565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b1157600080fd5b505af1925050508015610b22575060015b610b5d57600e54600d547f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd60405160405180910390a3610b5e565b5b565b610b68613077565b60003411610bab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba290614d17565b60405180910390fd5b60008111610bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be590614d83565b60405180910390fd5b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c2891906148aa565b602060405180830381865afa158015610c45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c699190614bc6565b1015610caa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca190614e15565b60405180910390fd5b610cd730600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836126c8565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71934308460008033426040518863ffffffff1660e01b8152600401610d3e96959493929190614e70565b60606040518083038185885af193505050508015610d7a57506040513d601f19601f82011682018060405250810190610d779190614ed1565b60015b610de757610dac30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660006126c8565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dde90614f70565b60405180910390fd5b50505034817f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b60405160405180910390a360004790506000811115610e6e573373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e6c573d6000803e3d6000fd5b505b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610ea0613077565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0590614fdc565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610f32611b44565b836040518363ffffffff1660e01b8152600401610f50929190614ffc565b6020604051808303816000875af1158015610f6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f939190615051565b505050565b6000600e54905090565b6060600c80548060200260200160405190810160405280929190818152602001828054801561102657602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610fdc575b5050505050905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600c80549050905090565b6110b3613077565b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110ed91906148aa565b602060405180830381865afa15801561110a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112e9190614bc6565b101561116f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611166906150ca565b60405180910390fd5b61117a3033836128e8565b50565b6002600554036111c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b990615136565b60405180910390fd5b60026005819055506000600d5411806111dd57506000600e54115b61121c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121390614c3f565b60405180910390fd5b6000600c8054905011611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b90614cab565b60405180910390fd5b6000600e54600d546112769190615185565b905068056bc75e2d631000008110156112c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bb90615205565b60405180910390fd5b600e54600d547f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd60405160405180910390a36000600d5490506000600e5490506000600d819055506000600e81905550600060646019856113259190615225565b61132f9190615296565b90506000818561133f91906152c7565b9050600061134c826130ee565b90506000810361136f5784600d8190555083600e819055505050505050506113cc565b600060646019836113809190615225565b61138a9190615296565b905060008111156113a05761139f8482613894565b5b600081836113ae91906152c7565b905060008111156113c3576113c281613ba5565b5b50505050505050505b6001600581905550565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611404613077565b600f60009054906101000a900460ff1615611454576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144b90615347565b60405180910390fd5b6001600f60006101000a81548160ff021916908315150217905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e6a4390530600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016114ee929190614b88565b602060405180830381865afa15801561150b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152f919061537c565b600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036116c857600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611644929190614b88565b6020604051808303816000875af1158015611663573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611687919061537c565b600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175090614c3f565b60405180910390fd5b6117a630600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6126c8565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611845929190614ffc565b6020604051808303816000875af1158015611864573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118889190615051565b6118c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118be906153f5565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611966929190614ffc565b6020604051808303816000875af1158015611985573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a99190615051565b503073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611a27929190614ffc565b6020604051808303816000875af1158015611a46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6a9190615051565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f4ca662a5f1f012e4d740b256559dce10a6b72cdec96be0142f5e2eb49dd37a6e60405160405180910390a4565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611b7d90614b57565b80601f0160208091040260200160405190810160405280929190818152602001828054611ba990614b57565b8015611bf65780601f10611bcb57610100808354040283529160200191611bf6565b820191906000526020600020905b815481529060010190602001808311611bd957829003601f168201915b5050505050905090565b600080600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611c73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c979190615497565b50915091506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2f919061537c565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d9257826dffffffffffffffffffffffffffff16826dffffffffffffffffffffffffffff1694509450505050611dbc565b816dffffffffffffffffffffffffffff16836dffffffffffffffffffffffffffff16945094505050505b9091565b600080339050611dd18185856128e8565b600191505092915050565b611de4613077565b60003073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611e43929190614b88565b602060405180830381865afa158015611e60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e849190614bc6565b905069d3c21bcecceda1000000811015611ed057611ecf30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1669d3c21bcecceda10000006126c8565b5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611f2d91906148aa565b602060405180830381865afa158015611f4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6e9190614bc6565b9050600081111561212b576000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611ffa929190614b88565b602060405180830381865afa158015612017573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203b9190614bc6565b90508181101561212957600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016120e4929190614ffc565b6020604051808303816000875af1158015612103573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121279190615051565b505b505b5050565b612137613077565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219d90615536565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b6020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612299613077565b6122e630600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6126c8565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612385929190614ffc565b6020604051808303816000875af11580156123a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c89190615051565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612468929190614ffc565b6020604051808303816000875af19250505080156124a457506040513d601f19601f820116820180604052508101906124a19190615051565b60015b156124ab57505b3073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612528929190614ffc565b6020604051808303816000875af192505050801561256457506040513d601f19601f820116820180604052508101906125619190615051565b60015b1561256b57505b565b612575613077565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125db906155a2565b60405180910390fd5b6125ed81613d99565b50565b60008060006125fd611c00565b9150915060008214806126105750600081145b156126205760009250505061269d565b60006103e5856126309190615225565b9050600082826126409190615225565b90506000826103e8866126539190615225565b61265d9190615185565b90506000818361266d9190615296565b90506064601e606461267f91906152c7565b8261268a9190615225565b6126949190615296565b96505050505050505b919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156127325750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b612771576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612768906153f5565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161284f91906146ac565b60405180910390a3505050565b6000612868848461220a565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146128e257818110156128d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cb90614c3f565b60405180910390fd5b6128e184848484036126c8565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129525750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b612991576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129889061560e565b60405180910390fd5b612999611b44565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612a0457506129d5611b44565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612a3a57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80612a7057503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612a885750600f60009054906101000a900460ff16155b15612aaf57612a98838383613e5f565b612aa1836140a0565b612aaa826140a0565b613072565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612b5a5750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b905080156130525760006064600584612b739190615225565b612b7d9190615296565b905060008184612b8d91906152c7565b9050612b9a868683613e5f565b612ba5863084613e5f565b6064601983612bb49190615225565b612bbe9190615296565b600d6000828254612bcf9190615185565b925050819055506064601983612be59190615225565b612bef9190615296565b600e6000828254612c009190615185565b9250508190555068056bc75e2d63100000600d54101580612c2c575068056bc75e2d63100000600e5410155b8015612c3d57506000600c80549050115b1561304b57612c8f30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6126c8565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612d2e929190614ffc565b6020604051808303816000875af1158015612d4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d719190615051565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612e11929190614ffc565b6020604051808303816000875af1158015612e30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e549190615051565b503073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612ed2929190614ffc565b6020604051808303816000875af1158015612ef1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f159190615051565b503073ffffffffffffffffffffffffffffffffffffffff16637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612f5e57600080fd5b505af1925050508015612f6f575060015b61304957612f7b61563b565b806308c379a0036130015750612f8f6156bd565b80612f9a5750613003565b80604051602001612fab91906157d5565b604051602081830303815290604052604051612fc791906157f7565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a250613044565b505b60405161300f90615880565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a25b61304a565b5b5b505061305e565b61305d848484613e5f565b5b613067846140a0565b613070836140a0565b505b505050565b3373ffffffffffffffffffffffffffffffffffffffff16613096611b44565b73ffffffffffffffffffffffffffffffffffffffff16146130ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e3906158e1565b60405180910390fd5b565b6000808203613100576000905061388f565b61314d30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6126c8565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016131ec929190614ffc565b6020604051808303816000875af115801561320b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061322f9190615051565b50600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561329a57600080fd5b505af19250505080156132ab575060015b61334d576132b761563b565b806308c379a00361334157506132cb6156bd565b806132d65750613343565b806040516020016132e7919061594d565b60405160208183030381529060405260405161330391906157f7565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a2600091505061388f565b505b3d6000803e3d6000fd5b600080613358611c00565b9150915080827f5e9e475d0268bd6813a61d283a670a9cc62d0b8cab38b2b1ae98d442f65a93e160405160405180910390a350506000600267ffffffffffffffff8111156133a9576133a861565d565b5b6040519080825280602002602001820160405280156133d75781602001602082028036833780820191505090505b50905030816000815181106133ef576133ee61596f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106134605761345f61596f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016134f791906148aa565b602060405180830381865afa158015613514573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135389190614bc6565b90506000613545856125f0565b9050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d7958683863061012c426135979190615185565b6040518663ffffffff1660e01b81526004016135b795949392919061599e565b600060405180830381600087803b1580156135d157600080fd5b505af19250505080156135e2575060015b6136c9576135ee61563b565b806308c379a00361367b57506136026156bd565b8061360d575061367d565b8060405160200161361e9190615a44565b60405160208183030381529060405260405161363a91906157f7565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a2600094505050505061388f565b505b60405161368990615ab2565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a26000935050505061388f565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161372691906148aa565b602060405180830381865afa158015613743573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137679190614bc6565b90506000838261377791906152c7565b9050600081036137cf5760405161378d90615b13565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a260009550505050505061388f565b82811015613858576137e0816142ea565b6137e9846142ea565b6040516020016137fa929190615be6565b60405160208183030381529060405260405161381691906157f7565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a260009550505050505061388f565b80877fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc0160405160405180910390a380955050505050505b919050565b60008214806138a35750600081145b613ba1576138d430600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846126c8565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401613953929190614ffc565b6020604051808303816000875af1158015613972573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139969190615051565b50600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e3370030600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685856064601e6064613a0b91906152c7565b89613a169190615225565b613a209190615296565b6064601e6064613a3091906152c7565b89613a3b9190615225565b613a459190615296565b3061012c42613a549190615185565b6040518963ffffffff1660e01b8152600401613a77989796959493929190615c20565b6060604051808303816000875af1925050508015613ab357506040513d601f19601f82011682018060405250810190613ab09190614ed1565b60015b613b6e57613abf61563b565b806308c379a003613b265750613ad36156bd565b80613ade5750613b28565b80604051613aec91906157f7565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a250613b69565b505b604051613b3490615cea565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a25b613ba0565b50505080827f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b60405160405180910390a35b5b5050565b6000811480613bb957506000600c80549050145b613d96576000600c8054905082613bd09190615296565b905060008103613be05750613d96565b60005b600c8054905081108015613bf75750606481105b15613d6057600073ffffffffffffffffffffffffffffffffffffffff16600c8281548110613c2857613c2761596f565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613d4c57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600c8381548110613cc057613cbf61596f565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401613d09929190614ffc565b6020604051808303816000875af1925050508015613d4557506040513d601f19601f82011682018060405250810190613d429190615051565b60015b15613d4d57505b5b8080613d5890615cff565b915050613be3565b50600c80549050827f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c21760405160405180910390a3505b50565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613ec95750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b613f08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613eff9061560e565b60405180910390fd5b613f13838383614447565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f9090615d93565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161408791906146ac565b60405180910390a361409a84848461444c565b50505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561412a57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b156142e757600061413a82611056565b90506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050678ac7230489e8000082101580156141a3575080155b15614268576001600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600c839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506142e4565b678ac7230489e800008210801561427c5750805b156142e3576000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506142e283614451565b5b5b50505b50565b606060008203614331576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050614442565b600082905060005b6000821461436357808061434c90615cff565b915050600a8261435c9190615296565b9150614339565b60008167ffffffffffffffff81111561437f5761437e61565d565b5b6040519080825280601f01601f1916602001820160405280156143b15781602001600182028036833780820191505090505b5090505b6000851461443b57600a856143ca9190615db3565b60306143d69190615185565b60f81b81836143e490615de4565b935083815181106143f8576143f761596f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856144349190615296565b94506143b5565b8093505050505b919050565b505050565b505050565b60005b600c805490508110156145dd578173ffffffffffffffffffffffffffffffffffffffff16600c828154811061448c5761448b61596f565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036145ca57600c6001600c805490506144e691906152c7565b815481106144f7576144f661596f565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c82815481106145365761453561596f565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600c8054806145905761458f615e0d565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556145dd565b80806145d590615cff565b915050614454565b5050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561461b578082015181840152602081019050614600565b60008484015250505050565b6000601f19601f8301169050919050565b6000614643826145e1565b61464d81856145ec565b935061465d8185602086016145fd565b61466681614627565b840191505092915050565b6000602082019050818103600083015261468b8184614638565b905092915050565b6000819050919050565b6146a681614693565b82525050565b60006020820190506146c1600083018461469d565b92915050565b6000604051905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614701826146d6565b9050919050565b614711816146f6565b811461471c57600080fd5b50565b60008135905061472e81614708565b92915050565b61473d81614693565b811461474857600080fd5b50565b60008135905061475a81614734565b92915050565b60008060408385031215614777576147766146d1565b5b60006147858582860161471f565b92505060206147968582860161474b565b9150509250929050565b60008115159050919050565b6147b5816147a0565b82525050565b60006020820190506147d060008301846147ac565b92915050565b6147df816146f6565b82525050565b60006080820190506147fa600083018761469d565b614807602083018661469d565b61481460408301856147ac565b61482160608301846147d6565b95945050505050565b600080600060608486031215614843576148426146d1565b5b60006148518682870161471f565b93505060206148628682870161471f565b92505060406148738682870161474b565b9150509250925092565b600060208284031215614893576148926146d1565b5b60006148a18482850161474b565b91505092915050565b60006020820190506148bf60008301846147d6565b92915050565b600060ff82169050919050565b6148db816148c5565b82525050565b60006020820190506148f660008301846148d2565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614931816146f6565b82525050565b60006149438383614928565b60208301905092915050565b6000602082019050919050565b6000614967826148fc565b6149718185614907565b935061497c83614918565b8060005b838110156149ad5781516149948882614937565b975061499f8361494f565b925050600181019050614980565b5085935050505092915050565b600060208201905081810360008301526149d4818461495c565b905092915050565b6000819050919050565b6000614a016149fc6149f7846146d6565b6149dc565b6146d6565b9050919050565b6000614a13826149e6565b9050919050565b6000614a2582614a08565b9050919050565b614a3581614a1a565b82525050565b6000602082019050614a506000830184614a2c565b92915050565b600060208284031215614a6c57614a6b6146d1565b5b6000614a7a8482850161471f565b91505092915050565b6000604082019050614a98600083018561469d565b614aa5602083018461469d565b9392505050565b60008060408385031215614ac357614ac26146d1565b5b6000614ad18582860161471f565b9250506020614ae28582860161471f565b9150509250929050565b6000614af782614a08565b9050919050565b614b0781614aec565b82525050565b6000602082019050614b226000830184614afe565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614b6f57607f821691505b602082108103614b8257614b81614b28565b5b50919050565b6000604082019050614b9d60008301856147d6565b614baa60208301846147d6565b9392505050565b600081519050614bc081614734565b92915050565b600060208284031215614bdc57614bdb6146d1565b5b6000614bea84828501614bb1565b91505092915050565b7f4535000000000000000000000000000000000000000000000000000000000000600082015250565b6000614c296002836145ec565b9150614c3482614bf3565b602082019050919050565b60006020820190508181036000830152614c5881614c1c565b9050919050565b7f4536000000000000000000000000000000000000000000000000000000000000600082015250565b6000614c956002836145ec565b9150614ca082614c5f565b602082019050919050565b60006020820190508181036000830152614cc481614c88565b9050919050565b7f4538000000000000000000000000000000000000000000000000000000000000600082015250565b6000614d016002836145ec565b9150614d0c82614ccb565b602082019050919050565b60006020820190508181036000830152614d3081614cf4565b9050919050565b7f4539000000000000000000000000000000000000000000000000000000000000600082015250565b6000614d6d6002836145ec565b9150614d7882614d37565b602082019050919050565b60006020820190508181036000830152614d9c81614d60565b9050919050565b7f496e73756666696369656e7420746f6b656e2062616c616e636520696e20636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b6000614dff6026836145ec565b9150614e0a82614da3565b604082019050919050565b60006020820190508181036000830152614e2e81614df2565b9050919050565b6000819050919050565b6000614e5a614e55614e5084614e35565b6149dc565b614693565b9050919050565b614e6a81614e3f565b82525050565b600060c082019050614e8560008301896147d6565b614e92602083018861469d565b614e9f6040830187614e61565b614eac6060830186614e61565b614eb960808301856147d6565b614ec660a083018461469d565b979650505050505050565b600080600060608486031215614eea57614ee96146d1565b5b6000614ef886828701614bb1565b9350506020614f0986828701614bb1565b9250506040614f1a86828701614bb1565b9150509250925092565b7f4661696c656420746f20616464206c6971756964697479000000000000000000600082015250565b6000614f5a6017836145ec565b9150614f6582614f24565b602082019050919050565b60006020820190508181036000830152614f8981614f4d565b9050919050565b7f43616e6e6f7420726573637565204641524d455220746f6b656e730000000000600082015250565b6000614fc6601b836145ec565b9150614fd182614f90565b602082019050919050565b60006020820190508181036000830152614ff581614fb9565b9050919050565b600060408201905061501160008301856147d6565b61501e602083018461469d565b9392505050565b61502e816147a0565b811461503957600080fd5b50565b60008151905061504b81615025565b92915050565b600060208284031215615067576150666146d1565b5b60006150758482850161503c565b91505092915050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b60006150b46014836145ec565b91506150bf8261507e565b602082019050919050565b600060208201905081810360008301526150e3816150a7565b9050919050565b7f5231000000000000000000000000000000000000000000000000000000000000600082015250565b60006151206002836145ec565b915061512b826150ea565b602082019050919050565b6000602082019050818103600083015261514f81615113565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061519082614693565b915061519b83614693565b92508282019050808211156151b3576151b2615156565b5b92915050565b7f4537000000000000000000000000000000000000000000000000000000000000600082015250565b60006151ef6002836145ec565b91506151fa826151b9565b602082019050919050565b6000602082019050818103600083015261521e816151e2565b9050919050565b600061523082614693565b915061523b83614693565b925082820261524981614693565b915082820484148315176152605761525f615156565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006152a182614693565b91506152ac83614693565b9250826152bc576152bb615267565b5b828204905092915050565b60006152d282614693565b91506152dd83614693565b92508282039050818111156152f5576152f4615156565b5b92915050565b7f4531000000000000000000000000000000000000000000000000000000000000600082015250565b60006153316002836145ec565b915061533c826152fb565b602082019050919050565b6000602082019050818103600083015261536081615324565b9050919050565b60008151905061537681614708565b92915050565b600060208284031215615392576153916146d1565b5b60006153a084828501615367565b91505092915050565b7f4534000000000000000000000000000000000000000000000000000000000000600082015250565b60006153df6002836145ec565b91506153ea826153a9565b602082019050919050565b6000602082019050818103600083015261540e816153d2565b9050919050565b60006dffffffffffffffffffffffffffff82169050919050565b61543881615415565b811461544357600080fd5b50565b6000815190506154558161542f565b92915050565b600063ffffffff82169050919050565b6154748161545b565b811461547f57600080fd5b50565b6000815190506154918161546b565b92915050565b6000806000606084860312156154b0576154af6146d1565b5b60006154be86828701615446565b93505060206154cf86828701615446565b92505060406154e086828701615482565b9150509250925092565b7f4531310000000000000000000000000000000000000000000000000000000000600082015250565b60006155206003836145ec565b915061552b826154ea565b602082019050919050565b6000602082019050818103600083015261554f81615513565b9050919050565b7f4f31000000000000000000000000000000000000000000000000000000000000600082015250565b600061558c6002836145ec565b915061559782615556565b602082019050919050565b600060208201905081810360008301526155bb8161557f565b9050919050565b7f4530000000000000000000000000000000000000000000000000000000000000600082015250565b60006155f86002836145ec565b9150615603826155c2565b602082019050919050565b60006020820190508181036000830152615627816155eb565b9050919050565b60008160e01c9050919050565b600060033d111561565a5760046000803e61565760005161562e565b90505b90565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61569582614627565b810181811067ffffffffffffffff821117156156b4576156b361565d565b5b80604052505050565b600060443d1061574a576156cf6146c7565b60043d036004823e80513d602482011167ffffffffffffffff821117156156f757505061574a565b808201805167ffffffffffffffff811115615715575050505061574a565b80602083010160043d03850181111561573257505050505061574a565b6157418260200185018661568c565b82955050505050505b90565b600081905092915050565b7f4175746f2070726f63657373206661696c65643a200000000000000000000000600082015250565b600061578e60158361574d565b915061579982615758565b601582019050919050565b60006157af826145e1565b6157b9818561574d565b93506157c98185602086016145fd565b80840191505092915050565b60006157e082615781565b91506157ec82846157a4565b915081905092915050565b600061580382846157a4565b915081905092915050565b7f556e6b6e6f776e206572726f7220696e206175746f6d617469632070726f636560008201527f7373696e67000000000000000000000000000000000000000000000000000000602082015250565b600061586a60258361574d565b91506158758261580e565b602582019050919050565b600061588b8261585d565b9150819050919050565b7f4f32000000000000000000000000000000000000000000000000000000000000600082015250565b60006158cb6002836145ec565b91506158d682615895565b602082019050919050565b600060208201905081810360008301526158fa816158be565b9050919050565b7f506169722073796e63206661696c65643a200000000000000000000000000000600082015250565b600061593760128361574d565b915061594282615901565b601282019050919050565b60006159588261592a565b915061596482846157a4565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060a0820190506159b3600083018861469d565b6159c0602083018761469d565b81810360408301526159d2818661495c565b90506159e160608301856147d6565b6159ee608083018461469d565b9695505050505050565b7f53776170206661696c65643a2000000000000000000000000000000000000000600082015250565b6000615a2e600d8361574d565b9150615a39826159f8565b600d82019050919050565b6000615a4f82615a21565b9150615a5b82846157a4565b915081905092915050565b7f556e6b6e6f776e206572726f7220696e20737761700000000000000000000000600082015250565b6000615a9c60158361574d565b9150615aa782615a66565b601582019050919050565b6000615abd82615a8f565b9150819050919050565b7f4e6f20534f4e4943207265636569766564206166746572207377617000000000600082015250565b6000615afd601c8361574d565b9150615b0882615ac7565b601c82019050919050565b6000615b1e82615af0565b9150819050919050565b7f5265636569766564206c657373207468616e206d696e696d756d206f7574707560008201527f743a200000000000000000000000000000000000000000000000000000000000602082015250565b6000615b8460238361574d565b9150615b8f82615b28565b602382019050919050565b7f203c200000000000000000000000000000000000000000000000000000000000600082015250565b6000615bd060038361574d565b9150615bdb82615b9a565b600382019050919050565b6000615bf182615b77565b9150615bfd82856157a4565b9150615c0882615bc3565b9150615c1482846157a4565b91508190509392505050565b600061010082019050615c36600083018b6147d6565b615c43602083018a6147d6565b615c50604083018961469d565b615c5d606083018861469d565b615c6a608083018761469d565b615c7760a083018661469d565b615c8460c08301856147d6565b615c9160e083018461469d565b9998505050505050505050565b7f556e6b6e6f776e206572726f7220696e206164644c6971756964697479000000600082015250565b6000615cd4601d8361574d565b9150615cdf82615c9e565b601d82019050919050565b6000615cf582615cc7565b9150819050919050565b6000615d0a82614693565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615d3c57615d3b615156565b5b600182019050919050565b7f4532000000000000000000000000000000000000000000000000000000000000600082015250565b6000615d7d6002836145ec565b9150615d8882615d47565b602082019050919050565b60006020820190508181036000830152615dac81615d70565b9050919050565b6000615dbe82614693565b9150615dc983614693565b925082615dd957615dd8615267565b5b828206905092915050565b6000615def82614693565b915060008203615e0257615e01615156565b5b600182039050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122041534edca246659624d81412cfc09a0dd4e2cd50eea3f842b5dd7f629126216d64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106101f25760003560e01c80637136982b1161010d578063a9059cbb116100a0578063dd62ed3e1161006f578063dd62ed3e146106bd578063ed9cacfe146106fa578063f2fde38b14610711578063f4ea42de1461073a578063fd7c9fab14610777576101f9565b8063a9059cbb14610603578063c026d93a14610640578063c0d7865514610657578063d4d7b19a14610680576101f9565b80638129fc1c116100dc5780638129fc1c1461056a5780638da5cb5b1461058157806395d89b41146105ac5780639df93f6c146105d7576101f9565b80637136982b146104d457806379304bec146104ff5780637ac84fc114610528578063808a54571461053f576101f9565b8063397883d2116101855780635d76b04c116101545780635d76b04c146104165780635fe8e7cc1461044157806362b6327a1461046c57806370a0823114610497576101f9565b8063397883d21461038f57806341a22cc2146103a6578063461a3a95146103c257806357376198146103ed576101f9565b80631b26c80d116101c15780631b26c80d146102bc57806323b872dd146102ea5780632a11ced014610327578063313ce56714610364576101f9565b806306fdde03146101fe57806308dee2b414610229578063095ea7b31461025457806318160ddd14610291576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b506102136107a2565b6040516102209190614671565b60405180910390f35b34801561023557600080fd5b5061023e610834565b60405161024b91906146ac565b60405180910390f35b34801561026057600080fd5b5061027b60048036038101906102769190614760565b61083e565b60405161028891906147bb565b60405180910390f35b34801561029d57600080fd5b506102a661085a565b6040516102b391906146ac565b60405180910390f35b3480156102c857600080fd5b506102d1610864565b6040516102e194939291906147e5565b60405180910390f35b3480156102f657600080fd5b50610311600480360381019061030c919061482a565b6109b7565b60405161031e91906147bb565b60405180910390f35b34801561033357600080fd5b5061034e6004803603810190610349919061487d565b6109df565b60405161035b91906148aa565b60405180910390f35b34801561037057600080fd5b50610379610a1e565b60405161038691906148e1565b60405180910390f35b34801561039b57600080fd5b506103a4610a27565b005b6103c060048036038101906103bb919061487d565b610b60565b005b3480156103ce57600080fd5b506103d7610e72565b6040516103e491906148aa565b60405180910390f35b3480156103f957600080fd5b50610414600480360381019061040f9190614760565b610e98565b005b34801561042257600080fd5b5061042b610f98565b60405161043891906146ac565b60405180910390f35b34801561044d57600080fd5b50610456610fa2565b60405161046391906149ba565b60405180910390f35b34801561047857600080fd5b50610481611030565b60405161048e9190614a3b565b60405180910390f35b3480156104a357600080fd5b506104be60048036038101906104b99190614a56565b611056565b6040516104cb91906146ac565b60405180910390f35b3480156104e057600080fd5b506104e961109e565b6040516104f691906146ac565b60405180910390f35b34801561050b57600080fd5b506105266004803603810190610521919061487d565b6110ab565b005b34801561053457600080fd5b5061053d61117d565b005b34801561054b57600080fd5b506105546113d6565b60405161056191906148aa565b60405180910390f35b34801561057657600080fd5b5061057f6113fc565b005b34801561058d57600080fd5b50610596611b44565b6040516105a391906148aa565b60405180910390f35b3480156105b857600080fd5b506105c1611b6e565b6040516105ce9190614671565b60405180910390f35b3480156105e357600080fd5b506105ec611c00565b6040516105fa929190614a83565b60405180910390f35b34801561060f57600080fd5b5061062a60048036038101906106259190614760565b611dc0565b60405161063791906147bb565b60405180910390f35b34801561064c57600080fd5b50610655611ddc565b005b34801561066357600080fd5b5061067e60048036038101906106799190614a56565b61212f565b005b34801561068c57600080fd5b506106a760048036038101906106a29190614a56565b6121ea565b6040516106b491906147bb565b60405180910390f35b3480156106c957600080fd5b506106e460048036038101906106df9190614aac565b61220a565b6040516106f191906146ac565b60405180910390f35b34801561070657600080fd5b5061070f612291565b005b34801561071d57600080fd5b5061073860048036038101906107339190614a56565b61256d565b005b34801561074657600080fd5b50610761600480360381019061075c919061487d565b6125f0565b60405161076e91906146ac565b60405180910390f35b34801561078357600080fd5b5061078c6126a2565b6040516107999190614b0d565b60405180910390f35b6060600380546107b190614b57565b80601f01602080910402602001604051908101604052809291908181526020018280546107dd90614b57565b801561082a5780601f106107ff5761010080835404028352916020019161082a565b820191906000526020600020905b81548152906001019060200180831161080d57829003601f168201915b5050505050905090565b6000600d54905090565b60008033905061084f8185856126c8565b600191505092915050565b6000600254905090565b60008060008061087330611056565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016108f2929190614b88565b602060405180830381865afa15801561090f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109339190614bc6565b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16935093509350935090919293565b6000803390506109c885828561285c565b6109d38585856128e8565b60019150509392505050565b600c81815481106109ef57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b610a2f613077565b6000600d541180610a4257506000600e54115b610a81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7890614c3f565b60405180910390fd5b6000600c8054905011610ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac090614cab565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b1157600080fd5b505af1925050508015610b22575060015b610b5d57600e54600d547f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd60405160405180910390a3610b5e565b5b565b610b68613077565b60003411610bab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba290614d17565b60405180910390fd5b60008111610bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be590614d83565b60405180910390fd5b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c2891906148aa565b602060405180830381865afa158015610c45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c699190614bc6565b1015610caa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca190614e15565b60405180910390fd5b610cd730600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836126c8565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71934308460008033426040518863ffffffff1660e01b8152600401610d3e96959493929190614e70565b60606040518083038185885af193505050508015610d7a57506040513d601f19601f82011682018060405250810190610d779190614ed1565b60015b610de757610dac30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660006126c8565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dde90614f70565b60405180910390fd5b50505034817f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b60405160405180910390a360004790506000811115610e6e573373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e6c573d6000803e3d6000fd5b505b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610ea0613077565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0590614fdc565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610f32611b44565b836040518363ffffffff1660e01b8152600401610f50929190614ffc565b6020604051808303816000875af1158015610f6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f939190615051565b505050565b6000600e54905090565b6060600c80548060200260200160405190810160405280929190818152602001828054801561102657602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610fdc575b5050505050905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600c80549050905090565b6110b3613077565b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110ed91906148aa565b602060405180830381865afa15801561110a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112e9190614bc6565b101561116f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611166906150ca565b60405180910390fd5b61117a3033836128e8565b50565b6002600554036111c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b990615136565b60405180910390fd5b60026005819055506000600d5411806111dd57506000600e54115b61121c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121390614c3f565b60405180910390fd5b6000600c8054905011611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b90614cab565b60405180910390fd5b6000600e54600d546112769190615185565b905068056bc75e2d631000008110156112c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bb90615205565b60405180910390fd5b600e54600d547f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd60405160405180910390a36000600d5490506000600e5490506000600d819055506000600e81905550600060646019856113259190615225565b61132f9190615296565b90506000818561133f91906152c7565b9050600061134c826130ee565b90506000810361136f5784600d8190555083600e819055505050505050506113cc565b600060646019836113809190615225565b61138a9190615296565b905060008111156113a05761139f8482613894565b5b600081836113ae91906152c7565b905060008111156113c3576113c281613ba5565b5b50505050505050505b6001600581905550565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611404613077565b600f60009054906101000a900460ff1615611454576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144b90615347565b60405180910390fd5b6001600f60006101000a81548160ff021916908315150217905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e6a4390530600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016114ee929190614b88565b602060405180830381865afa15801561150b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152f919061537c565b600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036116c857600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611644929190614b88565b6020604051808303816000875af1158015611663573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611687919061537c565b600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175090614c3f565b60405180910390fd5b6117a630600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6126c8565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611845929190614ffc565b6020604051808303816000875af1158015611864573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118889190615051565b6118c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118be906153f5565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611966929190614ffc565b6020604051808303816000875af1158015611985573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a99190615051565b503073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611a27929190614ffc565b6020604051808303816000875af1158015611a46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6a9190615051565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f4ca662a5f1f012e4d740b256559dce10a6b72cdec96be0142f5e2eb49dd37a6e60405160405180910390a4565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611b7d90614b57565b80601f0160208091040260200160405190810160405280929190818152602001828054611ba990614b57565b8015611bf65780601f10611bcb57610100808354040283529160200191611bf6565b820191906000526020600020905b815481529060010190602001808311611bd957829003601f168201915b5050505050905090565b600080600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611c73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c979190615497565b50915091506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2f919061537c565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d9257826dffffffffffffffffffffffffffff16826dffffffffffffffffffffffffffff1694509450505050611dbc565b816dffffffffffffffffffffffffffff16836dffffffffffffffffffffffffffff16945094505050505b9091565b600080339050611dd18185856128e8565b600191505092915050565b611de4613077565b60003073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611e43929190614b88565b602060405180830381865afa158015611e60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e849190614bc6565b905069d3c21bcecceda1000000811015611ed057611ecf30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1669d3c21bcecceda10000006126c8565b5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611f2d91906148aa565b602060405180830381865afa158015611f4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6e9190614bc6565b9050600081111561212b576000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611ffa929190614b88565b602060405180830381865afa158015612017573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203b9190614bc6565b90508181101561212957600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016120e4929190614ffc565b6020604051808303816000875af1158015612103573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121279190615051565b505b505b5050565b612137613077565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219d90615536565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b6020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612299613077565b6122e630600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6126c8565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612385929190614ffc565b6020604051808303816000875af11580156123a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c89190615051565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612468929190614ffc565b6020604051808303816000875af19250505080156124a457506040513d601f19601f820116820180604052508101906124a19190615051565b60015b156124ab57505b3073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612528929190614ffc565b6020604051808303816000875af192505050801561256457506040513d601f19601f820116820180604052508101906125619190615051565b60015b1561256b57505b565b612575613077565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125db906155a2565b60405180910390fd5b6125ed81613d99565b50565b60008060006125fd611c00565b9150915060008214806126105750600081145b156126205760009250505061269d565b60006103e5856126309190615225565b9050600082826126409190615225565b90506000826103e8866126539190615225565b61265d9190615185565b90506000818361266d9190615296565b90506064601e606461267f91906152c7565b8261268a9190615225565b6126949190615296565b96505050505050505b919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156127325750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b612771576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612768906153f5565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161284f91906146ac565b60405180910390a3505050565b6000612868848461220a565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146128e257818110156128d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cb90614c3f565b60405180910390fd5b6128e184848484036126c8565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129525750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b612991576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129889061560e565b60405180910390fd5b612999611b44565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612a0457506129d5611b44565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612a3a57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80612a7057503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612a885750600f60009054906101000a900460ff16155b15612aaf57612a98838383613e5f565b612aa1836140a0565b612aaa826140a0565b613072565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612b5a5750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b905080156130525760006064600584612b739190615225565b612b7d9190615296565b905060008184612b8d91906152c7565b9050612b9a868683613e5f565b612ba5863084613e5f565b6064601983612bb49190615225565b612bbe9190615296565b600d6000828254612bcf9190615185565b925050819055506064601983612be59190615225565b612bef9190615296565b600e6000828254612c009190615185565b9250508190555068056bc75e2d63100000600d54101580612c2c575068056bc75e2d63100000600e5410155b8015612c3d57506000600c80549050115b1561304b57612c8f30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6126c8565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612d2e929190614ffc565b6020604051808303816000875af1158015612d4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d719190615051565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612e11929190614ffc565b6020604051808303816000875af1158015612e30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e549190615051565b503073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612ed2929190614ffc565b6020604051808303816000875af1158015612ef1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f159190615051565b503073ffffffffffffffffffffffffffffffffffffffff16637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612f5e57600080fd5b505af1925050508015612f6f575060015b61304957612f7b61563b565b806308c379a0036130015750612f8f6156bd565b80612f9a5750613003565b80604051602001612fab91906157d5565b604051602081830303815290604052604051612fc791906157f7565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a250613044565b505b60405161300f90615880565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a25b61304a565b5b5b505061305e565b61305d848484613e5f565b5b613067846140a0565b613070836140a0565b505b505050565b3373ffffffffffffffffffffffffffffffffffffffff16613096611b44565b73ffffffffffffffffffffffffffffffffffffffff16146130ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e3906158e1565b60405180910390fd5b565b6000808203613100576000905061388f565b61314d30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6126c8565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016131ec929190614ffc565b6020604051808303816000875af115801561320b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061322f9190615051565b50600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561329a57600080fd5b505af19250505080156132ab575060015b61334d576132b761563b565b806308c379a00361334157506132cb6156bd565b806132d65750613343565b806040516020016132e7919061594d565b60405160208183030381529060405260405161330391906157f7565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a2600091505061388f565b505b3d6000803e3d6000fd5b600080613358611c00565b9150915080827f5e9e475d0268bd6813a61d283a670a9cc62d0b8cab38b2b1ae98d442f65a93e160405160405180910390a350506000600267ffffffffffffffff8111156133a9576133a861565d565b5b6040519080825280602002602001820160405280156133d75781602001602082028036833780820191505090505b50905030816000815181106133ef576133ee61596f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106134605761345f61596f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016134f791906148aa565b602060405180830381865afa158015613514573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135389190614bc6565b90506000613545856125f0565b9050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d7958683863061012c426135979190615185565b6040518663ffffffff1660e01b81526004016135b795949392919061599e565b600060405180830381600087803b1580156135d157600080fd5b505af19250505080156135e2575060015b6136c9576135ee61563b565b806308c379a00361367b57506136026156bd565b8061360d575061367d565b8060405160200161361e9190615a44565b60405160208183030381529060405260405161363a91906157f7565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a2600094505050505061388f565b505b60405161368990615ab2565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a26000935050505061388f565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161372691906148aa565b602060405180830381865afa158015613743573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137679190614bc6565b90506000838261377791906152c7565b9050600081036137cf5760405161378d90615b13565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a260009550505050505061388f565b82811015613858576137e0816142ea565b6137e9846142ea565b6040516020016137fa929190615be6565b60405160208183030381529060405260405161381691906157f7565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a260009550505050505061388f565b80877fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc0160405160405180910390a380955050505050505b919050565b60008214806138a35750600081145b613ba1576138d430600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846126c8565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401613953929190614ffc565b6020604051808303816000875af1158015613972573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139969190615051565b50600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e3370030600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685856064601e6064613a0b91906152c7565b89613a169190615225565b613a209190615296565b6064601e6064613a3091906152c7565b89613a3b9190615225565b613a459190615296565b3061012c42613a549190615185565b6040518963ffffffff1660e01b8152600401613a77989796959493929190615c20565b6060604051808303816000875af1925050508015613ab357506040513d601f19601f82011682018060405250810190613ab09190614ed1565b60015b613b6e57613abf61563b565b806308c379a003613b265750613ad36156bd565b80613ade5750613b28565b80604051613aec91906157f7565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a250613b69565b505b604051613b3490615cea565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a25b613ba0565b50505080827f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b60405160405180910390a35b5b5050565b6000811480613bb957506000600c80549050145b613d96576000600c8054905082613bd09190615296565b905060008103613be05750613d96565b60005b600c8054905081108015613bf75750606481105b15613d6057600073ffffffffffffffffffffffffffffffffffffffff16600c8281548110613c2857613c2761596f565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613d4c57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600c8381548110613cc057613cbf61596f565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401613d09929190614ffc565b6020604051808303816000875af1925050508015613d4557506040513d601f19601f82011682018060405250810190613d429190615051565b60015b15613d4d57505b5b8080613d5890615cff565b915050613be3565b50600c80549050827f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c21760405160405180910390a3505b50565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613ec95750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b613f08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613eff9061560e565b60405180910390fd5b613f13838383614447565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f9090615d93565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161408791906146ac565b60405180910390a361409a84848461444c565b50505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561412a57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b156142e757600061413a82611056565b90506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050678ac7230489e8000082101580156141a3575080155b15614268576001600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600c839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506142e4565b678ac7230489e800008210801561427c5750805b156142e3576000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506142e283614451565b5b5b50505b50565b606060008203614331576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050614442565b600082905060005b6000821461436357808061434c90615cff565b915050600a8261435c9190615296565b9150614339565b60008167ffffffffffffffff81111561437f5761437e61565d565b5b6040519080825280601f01601f1916602001820160405280156143b15781602001600182028036833780820191505090505b5090505b6000851461443b57600a856143ca9190615db3565b60306143d69190615185565b60f81b81836143e490615de4565b935083815181106143f8576143f761596f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856144349190615296565b94506143b5565b8093505050505b919050565b505050565b505050565b60005b600c805490508110156145dd578173ffffffffffffffffffffffffffffffffffffffff16600c828154811061448c5761448b61596f565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036145ca57600c6001600c805490506144e691906152c7565b815481106144f7576144f661596f565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c82815481106145365761453561596f565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600c8054806145905761458f615e0d565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556145dd565b80806145d590615cff565b915050614454565b5050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561461b578082015181840152602081019050614600565b60008484015250505050565b6000601f19601f8301169050919050565b6000614643826145e1565b61464d81856145ec565b935061465d8185602086016145fd565b61466681614627565b840191505092915050565b6000602082019050818103600083015261468b8184614638565b905092915050565b6000819050919050565b6146a681614693565b82525050565b60006020820190506146c1600083018461469d565b92915050565b6000604051905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614701826146d6565b9050919050565b614711816146f6565b811461471c57600080fd5b50565b60008135905061472e81614708565b92915050565b61473d81614693565b811461474857600080fd5b50565b60008135905061475a81614734565b92915050565b60008060408385031215614777576147766146d1565b5b60006147858582860161471f565b92505060206147968582860161474b565b9150509250929050565b60008115159050919050565b6147b5816147a0565b82525050565b60006020820190506147d060008301846147ac565b92915050565b6147df816146f6565b82525050565b60006080820190506147fa600083018761469d565b614807602083018661469d565b61481460408301856147ac565b61482160608301846147d6565b95945050505050565b600080600060608486031215614843576148426146d1565b5b60006148518682870161471f565b93505060206148628682870161471f565b92505060406148738682870161474b565b9150509250925092565b600060208284031215614893576148926146d1565b5b60006148a18482850161474b565b91505092915050565b60006020820190506148bf60008301846147d6565b92915050565b600060ff82169050919050565b6148db816148c5565b82525050565b60006020820190506148f660008301846148d2565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614931816146f6565b82525050565b60006149438383614928565b60208301905092915050565b6000602082019050919050565b6000614967826148fc565b6149718185614907565b935061497c83614918565b8060005b838110156149ad5781516149948882614937565b975061499f8361494f565b925050600181019050614980565b5085935050505092915050565b600060208201905081810360008301526149d4818461495c565b905092915050565b6000819050919050565b6000614a016149fc6149f7846146d6565b6149dc565b6146d6565b9050919050565b6000614a13826149e6565b9050919050565b6000614a2582614a08565b9050919050565b614a3581614a1a565b82525050565b6000602082019050614a506000830184614a2c565b92915050565b600060208284031215614a6c57614a6b6146d1565b5b6000614a7a8482850161471f565b91505092915050565b6000604082019050614a98600083018561469d565b614aa5602083018461469d565b9392505050565b60008060408385031215614ac357614ac26146d1565b5b6000614ad18582860161471f565b9250506020614ae28582860161471f565b9150509250929050565b6000614af782614a08565b9050919050565b614b0781614aec565b82525050565b6000602082019050614b226000830184614afe565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614b6f57607f821691505b602082108103614b8257614b81614b28565b5b50919050565b6000604082019050614b9d60008301856147d6565b614baa60208301846147d6565b9392505050565b600081519050614bc081614734565b92915050565b600060208284031215614bdc57614bdb6146d1565b5b6000614bea84828501614bb1565b91505092915050565b7f4535000000000000000000000000000000000000000000000000000000000000600082015250565b6000614c296002836145ec565b9150614c3482614bf3565b602082019050919050565b60006020820190508181036000830152614c5881614c1c565b9050919050565b7f4536000000000000000000000000000000000000000000000000000000000000600082015250565b6000614c956002836145ec565b9150614ca082614c5f565b602082019050919050565b60006020820190508181036000830152614cc481614c88565b9050919050565b7f4538000000000000000000000000000000000000000000000000000000000000600082015250565b6000614d016002836145ec565b9150614d0c82614ccb565b602082019050919050565b60006020820190508181036000830152614d3081614cf4565b9050919050565b7f4539000000000000000000000000000000000000000000000000000000000000600082015250565b6000614d6d6002836145ec565b9150614d7882614d37565b602082019050919050565b60006020820190508181036000830152614d9c81614d60565b9050919050565b7f496e73756666696369656e7420746f6b656e2062616c616e636520696e20636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b6000614dff6026836145ec565b9150614e0a82614da3565b604082019050919050565b60006020820190508181036000830152614e2e81614df2565b9050919050565b6000819050919050565b6000614e5a614e55614e5084614e35565b6149dc565b614693565b9050919050565b614e6a81614e3f565b82525050565b600060c082019050614e8560008301896147d6565b614e92602083018861469d565b614e9f6040830187614e61565b614eac6060830186614e61565b614eb960808301856147d6565b614ec660a083018461469d565b979650505050505050565b600080600060608486031215614eea57614ee96146d1565b5b6000614ef886828701614bb1565b9350506020614f0986828701614bb1565b9250506040614f1a86828701614bb1565b9150509250925092565b7f4661696c656420746f20616464206c6971756964697479000000000000000000600082015250565b6000614f5a6017836145ec565b9150614f6582614f24565b602082019050919050565b60006020820190508181036000830152614f8981614f4d565b9050919050565b7f43616e6e6f7420726573637565204641524d455220746f6b656e730000000000600082015250565b6000614fc6601b836145ec565b9150614fd182614f90565b602082019050919050565b60006020820190508181036000830152614ff581614fb9565b9050919050565b600060408201905061501160008301856147d6565b61501e602083018461469d565b9392505050565b61502e816147a0565b811461503957600080fd5b50565b60008151905061504b81615025565b92915050565b600060208284031215615067576150666146d1565b5b60006150758482850161503c565b91505092915050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b60006150b46014836145ec565b91506150bf8261507e565b602082019050919050565b600060208201905081810360008301526150e3816150a7565b9050919050565b7f5231000000000000000000000000000000000000000000000000000000000000600082015250565b60006151206002836145ec565b915061512b826150ea565b602082019050919050565b6000602082019050818103600083015261514f81615113565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061519082614693565b915061519b83614693565b92508282019050808211156151b3576151b2615156565b5b92915050565b7f4537000000000000000000000000000000000000000000000000000000000000600082015250565b60006151ef6002836145ec565b91506151fa826151b9565b602082019050919050565b6000602082019050818103600083015261521e816151e2565b9050919050565b600061523082614693565b915061523b83614693565b925082820261524981614693565b915082820484148315176152605761525f615156565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006152a182614693565b91506152ac83614693565b9250826152bc576152bb615267565b5b828204905092915050565b60006152d282614693565b91506152dd83614693565b92508282039050818111156152f5576152f4615156565b5b92915050565b7f4531000000000000000000000000000000000000000000000000000000000000600082015250565b60006153316002836145ec565b915061533c826152fb565b602082019050919050565b6000602082019050818103600083015261536081615324565b9050919050565b60008151905061537681614708565b92915050565b600060208284031215615392576153916146d1565b5b60006153a084828501615367565b91505092915050565b7f4534000000000000000000000000000000000000000000000000000000000000600082015250565b60006153df6002836145ec565b91506153ea826153a9565b602082019050919050565b6000602082019050818103600083015261540e816153d2565b9050919050565b60006dffffffffffffffffffffffffffff82169050919050565b61543881615415565b811461544357600080fd5b50565b6000815190506154558161542f565b92915050565b600063ffffffff82169050919050565b6154748161545b565b811461547f57600080fd5b50565b6000815190506154918161546b565b92915050565b6000806000606084860312156154b0576154af6146d1565b5b60006154be86828701615446565b93505060206154cf86828701615446565b92505060406154e086828701615482565b9150509250925092565b7f4531310000000000000000000000000000000000000000000000000000000000600082015250565b60006155206003836145ec565b915061552b826154ea565b602082019050919050565b6000602082019050818103600083015261554f81615513565b9050919050565b7f4f31000000000000000000000000000000000000000000000000000000000000600082015250565b600061558c6002836145ec565b915061559782615556565b602082019050919050565b600060208201905081810360008301526155bb8161557f565b9050919050565b7f4530000000000000000000000000000000000000000000000000000000000000600082015250565b60006155f86002836145ec565b9150615603826155c2565b602082019050919050565b60006020820190508181036000830152615627816155eb565b9050919050565b60008160e01c9050919050565b600060033d111561565a5760046000803e61565760005161562e565b90505b90565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61569582614627565b810181811067ffffffffffffffff821117156156b4576156b361565d565b5b80604052505050565b600060443d1061574a576156cf6146c7565b60043d036004823e80513d602482011167ffffffffffffffff821117156156f757505061574a565b808201805167ffffffffffffffff811115615715575050505061574a565b80602083010160043d03850181111561573257505050505061574a565b6157418260200185018661568c565b82955050505050505b90565b600081905092915050565b7f4175746f2070726f63657373206661696c65643a200000000000000000000000600082015250565b600061578e60158361574d565b915061579982615758565b601582019050919050565b60006157af826145e1565b6157b9818561574d565b93506157c98185602086016145fd565b80840191505092915050565b60006157e082615781565b91506157ec82846157a4565b915081905092915050565b600061580382846157a4565b915081905092915050565b7f556e6b6e6f776e206572726f7220696e206175746f6d617469632070726f636560008201527f7373696e67000000000000000000000000000000000000000000000000000000602082015250565b600061586a60258361574d565b91506158758261580e565b602582019050919050565b600061588b8261585d565b9150819050919050565b7f4f32000000000000000000000000000000000000000000000000000000000000600082015250565b60006158cb6002836145ec565b91506158d682615895565b602082019050919050565b600060208201905081810360008301526158fa816158be565b9050919050565b7f506169722073796e63206661696c65643a200000000000000000000000000000600082015250565b600061593760128361574d565b915061594282615901565b601282019050919050565b60006159588261592a565b915061596482846157a4565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060a0820190506159b3600083018861469d565b6159c0602083018761469d565b81810360408301526159d2818661495c565b90506159e160608301856147d6565b6159ee608083018461469d565b9695505050505050565b7f53776170206661696c65643a2000000000000000000000000000000000000000600082015250565b6000615a2e600d8361574d565b9150615a39826159f8565b600d82019050919050565b6000615a4f82615a21565b9150615a5b82846157a4565b915081905092915050565b7f556e6b6e6f776e206572726f7220696e20737761700000000000000000000000600082015250565b6000615a9c60158361574d565b9150615aa782615a66565b601582019050919050565b6000615abd82615a8f565b9150819050919050565b7f4e6f20534f4e4943207265636569766564206166746572207377617000000000600082015250565b6000615afd601c8361574d565b9150615b0882615ac7565b601c82019050919050565b6000615b1e82615af0565b9150819050919050565b7f5265636569766564206c657373207468616e206d696e696d756d206f7574707560008201527f743a200000000000000000000000000000000000000000000000000000000000602082015250565b6000615b8460238361574d565b9150615b8f82615b28565b602382019050919050565b7f203c200000000000000000000000000000000000000000000000000000000000600082015250565b6000615bd060038361574d565b9150615bdb82615b9a565b600382019050919050565b6000615bf182615b77565b9150615bfd82856157a4565b9150615c0882615bc3565b9150615c1482846157a4565b91508190509392505050565b600061010082019050615c36600083018b6147d6565b615c43602083018a6147d6565b615c50604083018961469d565b615c5d606083018861469d565b615c6a608083018761469d565b615c7760a083018661469d565b615c8460c08301856147d6565b615c9160e083018461469d565b9998505050505050505050565b7f556e6b6e6f776e206572726f7220696e206164644c6971756964697479000000600082015250565b6000615cd4601d8361574d565b9150615cdf82615c9e565b601d82019050919050565b6000615cf582615cc7565b9150819050919050565b6000615d0a82614693565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615d3c57615d3b615156565b5b600182019050919050565b7f4532000000000000000000000000000000000000000000000000000000000000600082015250565b6000615d7d6002836145ec565b9150615d8882615d47565b602082019050919050565b60006020820190508181036000830152615dac81615d70565b9050919050565b6000615dbe82614693565b9150615dc983614693565b925082615dd957615dd8615267565b5b828206905092915050565b6000615def82614693565b915060008203615e0257615e01615156565b5b600182039050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122041534edca246659624d81412cfc09a0dd4e2cd50eea3f842b5dd7f629126216d64736f6c63430008130033

Deployed Bytecode Sourcemap

8450:18953:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2810:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24178:118;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3677:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3104:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25585:308;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;3875:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9477:24;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3012:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24477:378;;;;;;;;;;;;;:::i;:::-;;22436:993;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9337:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23612:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24304:114;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22262:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9239:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3211:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22152:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23861:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15785:1734;;;;;;;;;;;;;:::i;:::-;;9369:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10910:940;;;;;;;;;;;;;:::i;:::-;;1789:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2909:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25901:427;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;3337:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24863:691;;;;;;;;;;;;;:::i;:::-;;23437:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9430:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3527:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26957:406;;;;;;;;;;;;;:::i;:::-;;1992:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26336:595;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9287:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2810:91;2855:13;2888:5;2881:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2810:91;:::o;24178:118::-;24238:7;24265:23;;24258:30;;24178:118;:::o;3677:190::-;3751:4;3768:13;3784:10;3768:26;;3805:32;3814:5;3821:7;3830:6;3805:8;:32::i;:::-;3855:4;3848:11;;;3677:190;;;;:::o;3104:99::-;3156:7;3183:12;;3176:19;;3104:99;:::o;25585:308::-;25629:7;25638;25647:4;25653:7;25695:24;25713:4;25695:9;:24::i;:::-;25741:10;;;;;;;;;;;25734:28;;;25771:4;25786:16;;;;;;;;;;;25734:70;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25844:1;25819:27;;:13;;;;;;;;;;;:27;;;;25861:13;;;;;;;;;;;25673:212;;;;;;;;25585:308;;;;:::o;3875:250::-;3963:4;3980:15;3998:10;3980:28;;4019:38;4035:4;4041:7;4050:6;4019:15;:38::i;:::-;4068:27;4078:4;4084:2;4088:6;4068:9;:27::i;:::-;4113:4;4106:11;;;3875:250;;;;;:::o;9477:24::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3012:84::-;3061:5;3086:2;3079:9;;3012:84;:::o;24477:378::-;1748:13;:11;:13::i;:::-;24570:1:::1;24544:23;;:27;:56;;;;24599:1;24575:21;;:25;24544:56;24536:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24643:1;24626:7;:14;;;;:18;24618:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;24666:4;:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;24662:186;;24814:21;;24789:23;;24774:62;;;;;;;;;;24662:186;;;;24477:378::o:0;22436:993::-;1748:13;:11;:13::i;:::-;22544:1:::1;22532:9;:13;22524:28;;;;;;;;;;;;:::i;:::-;;;;;;;;;22585:1;22571:11;:15;22563:30;;;;;;;;;;;;:::i;:::-;;;;;;;;;22686:11;22651:4;22636:31;;;22676:4;22636:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;22614:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;22776:63;22793:4;22808:16;;;;;;;;;;;22827:11;22776:8;:63::i;:::-;22856:16;;;;;;;;;;;:32;;;22896:9;22929:4;22949:11;22975:1;22991::::0;23007:10:::1;23032:15;22856:202;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;22852:412;;23151:53;23168:4;23183:16;;;;;;;;;;;23202:1;23151:8;:53::i;:::-;23219:33;;;;;;;;;;:::i;:::-;;;;;;;;22852:412;;;;23107:9;23094:11;23079:38;;;;;;;;;;23276:20;23299:21;23276:44;;23350:1;23335:12;:16;23331:91;;;23376:10;23368:28;;:42;23397:12;23368:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;23331:91;22513:916;22436:993:::0;:::o;9337:25::-;;;;;;;;;;;;;:::o;23612:208::-;1748:13;:11;:13::i;:::-;23723:4:::1;23705:23;;:6;:23;;::::0;23697:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23778:6;23771:23;;;23795:7;:5;:7::i;:::-;23804;23771:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23612:208:::0;;:::o;24304:114::-;24362:7;24389:21;;24382:28;;24304:114;:::o;22262:96::-;22307:16;22343:7;22336:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22262:96;:::o;9239:41::-;;;;;;;;;;;;;:::o;3211:118::-;3276:7;3303:9;:18;3313:7;3303:18;;;;;;;;;;;;;;;;3296:25;;3211:118;;;:::o;22152:98::-;22201:7;22228;:14;;;;22221:21;;22152:98;:::o;23861:266::-;1748:13;:11;:13::i;:::-;24010:6:::1;23975:4;23960:31;;;24000:4;23960:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;23938:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;24075:44;24093:4;24100:10;24112:6;24075:9;:44::i;:::-;23861:266:::0;:::o;15785:1734::-;1042:1;1188:7;;:19;1180:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;1042:1;1225:7;:18;;;;15890:1:::1;15864:23;;:27;:56;;;;15919:1;15895:21;;:25;15864:56;15856:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;15963:1;15946:7;:14;;;;:18;15938:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;15992:19;16040:21;;16014:23;;:47;;;;:::i;:::-;15992:69;;8907:12;16080:11;:37;;16072:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;16190:21;;16165:23;;16150:62;;;;;;;;;;16259:27;16289:23;;16259:53;;16323:25;16351:21;;16323:49;;16409:1;16383:23;:27;;;;16445:1;16421:21;:25;;;;16504:26;16572:3;9086:2;16534:11;:34;;;;:::i;:::-;16533:42;;;;:::i;:::-;16504:71;;16586:20;16623:18;16609:11;:32;;;;:::i;:::-;16586:55;;16700:21;16724:26;16737:12;16724;:26::i;:::-;16700:50;;16782:1;16765:13;:18:::0;16761:228:::1;;16881:19;16855:23;:45;;;;16939:17;16915:21;:41;;;;16971:7;;;;;;;;16761:228;17079:25;17148:3;9086:2;17108:13;:36;;;;:::i;:::-;17107:44;;;;:::i;:::-;17079:72;;17186:1;17166:17;:21;17162:110;;;17204:56;17222:18;17242:17;17204;:56::i;:::-;17162:110;17358:23;17400:17;17384:13;:33;;;;:::i;:::-;17358:59;;17450:1;17432:15;:19;17428:84;;;17468:32;17484:15;17468;:32::i;:::-;17428:84;15845:1674;;;;;;;;1254:1;998::::0;1266:7;:22;;;;15785:1734::o;9369:28::-;;;;;;;;;;;;;:::o;10910:940::-;1748:13;:11;:13::i;:::-;10971:12:::1;;;;;;;;;;;10970:13;10962:28;;;;;;;;;;;;:::i;:::-;;;;;;;;;11016:4;11001:12;;:19;;;;;;;;;;;;;;;;;;11092:17;;;;;;;;;;;:25;;;11126:4;11133:10;;;;;;;;;;;11092:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11076:13;;:68;;;;;;;;;;;;;;;;;;11239:1;11214:27;;:13;;;;;;;;;;;:27;;::::0;11210:131:::1;;11274:17;;;;;;;;;;;:28;;;11311:4;11318:10;;;;;;;;;;;11274:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11258:13;;:71;;;;;;;;;;;;;;;;;;11210:131;11394:1;11369:27;;:13;;;;;;;;;;;:27;;::::0;11361:42:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;11416:69;11433:4;11448:16;;;;;;;;;;;11467:17;11416:8;:69::i;:::-;11521:10;;;;;;;;;;;11514:26;;;11549:16;;;;;;;;;;;11568:17;11514:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11506:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;11611:10;;;;;;;;;;;11604:26;;;11631:13;;;;;;;;;;;11646:17;11604:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11690:4;11675:29;;;11705:13;;;;;;;;;;;11720:17;11675:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11831:10;;;;;;;;;;;11756:86;;11811:17;;;;;;;;;;;11756:86;;11784:16;;;;;;;;;;;11756:86;;;;;;;;;;;;10910:940::o:0;1789:87::-;1835:7;1862:6;;;;;;;;;;;1855:13;;1789:87;:::o;2909:95::-;2956:13;2989:7;2982:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2909:95;:::o;25901:427::-;25949:19;25970;26003:16;26021;26058:13;;;;;;;;;;;26042:42;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26002:84;;;;;26097:14;26130:13;;;;;;;;;;;26114:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26097:56;;26186:4;26168:23;;:6;:23;;;26164:101;;26224:8;26216:17;;26243:8;26235:17;;26208:45;;;;;;;;;26164:101;26291:8;26283:17;;26310:8;26302:17;;26275:45;;;;;;;25901:427;;;:::o;3337:182::-;3407:4;3424:13;3440:10;3424:26;;3461:28;3471:5;3478:2;3482:6;3461:9;:28::i;:::-;3507:4;3500:11;;;3337:182;;;;:::o;24863:691::-;1748:13;:11;:13::i;:::-;24930:21:::1;24969:4;24954:31;;;24994:4;25009:16;;;;;;;;;;;24954:73;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24930:97;;8566:18;25042:13;:28;25038:125;;;25087:64;25104:4;25119:16;;;;;;;;;;;8566:18;25087:8;:64::i;:::-;25038:125;25175:19;25204:10;;;;;;;;;;;25197:28;;;25234:4;25197:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25175:65;;25269:1;25255:11;:15;25251:296;;;25287:21;25318:10;;;;;;;;;;;25311:28;;;25348:4;25363:16;;;;;;;;;;;25311:70;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25287:94;;25416:11;25400:13;:27;25396:140;;;25455:10;;;;;;;;;;;25448:26;;;25483:16;;;;;;;;;;;25502:17;25448:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25396:140;25272:275;25251:296;24919:635;;24863:691::o:0;23437:167::-;1748:13;:11;:13::i;:::-;23530:1:::1;23511:21;;:7;:21;;::::0;23503:37:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23588:7;23551:16;;:45;;;;;;;;;;;;;;;;;;23437:167:::0;:::o;9430:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;3527:142::-;3607:7;3634:11;:18;3646:5;3634:18;;;;;;;;;;;;;;;:27;3653:7;3634:27;;;;;;;;;;;;;;;;3627:34;;3527:142;;;;:::o;26957:406::-;1748:13;:11;:13::i;:::-;27018:69:::1;27035:4;27050:16;;;;;;;;;;;27069:17;27018:8;:69::i;:::-;27105:10;;;;;;;;;;;27098:26;;;27133:16;;;;;;;;;;;27152:17;27098:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27202:10;;;;;;;;;;;27195:26;;;27222:13;;;;;;;;;;;27237:17;27195:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;27191:76:::0;::::1;;;;27296:4;27281:29;;;27311:13;;;;;;;;;;;27326:17;27281:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;27277:79:::0;::::1;;;;26957:406::o:0;1992:165::-;1748:13;:11;:13::i;:::-;2101:1:::1;2081:22;;:8;:22;;::::0;2073:37:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2121:28;2140:8;2121:18;:28::i;:::-;1992:165:::0;:::o;26336:595::-;26413:7;26434:19;26455;26478:17;:15;:17::i;:::-;26433:62;;;;26525:1;26510:11;:16;:36;;;;26545:1;26530:11;:16;26510:36;26506:50;;;26555:1;26548:8;;;;;;26506:50;26577:23;26614:3;26603:8;:14;;;;:::i;:::-;26577:40;;26640:17;26678:11;26660:15;:29;;;;:::i;:::-;26640:49;;26700:19;26745:15;26737:4;26723:11;:18;;;;:::i;:::-;26722:38;;;;:::i;:::-;26700:60;;26771:17;26803:11;26791:9;:23;;;;:::i;:::-;26771:43;;26920:3;9169:2;26898:3;:18;;;;:::i;:::-;26885:9;:32;;;;:::i;:::-;:38;;;;:::i;:::-;26878:45;;;;;;;;26336:595;;;;:::o;9287:43::-;;;;;;;;;;;;;:::o;5056:256::-;5175:1;5158:19;;:5;:19;;;;:44;;;;;5200:1;5181:21;;:7;:21;;;;5158:44;5150:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;5250:6;5220:11;:18;5232:5;5220:18;;;;;;;;;;;;;;;:27;5239:7;5220:27;;;;;;;;;;;;;;;:36;;;;5288:7;5272:32;;5281:5;5272:32;;;5297:6;5272:32;;;;;;:::i;:::-;;;;;;;;5056:256;;;:::o;5320:392::-;5421:24;5448:25;5458:5;5465:7;5448:9;:25::i;:::-;5421:52;;5508:17;5488:16;:37;5484:221;;5570:6;5550:16;:26;;5542:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;5627:51;5636:5;5643:7;5671:6;5652:16;:25;5627:8;:51::i;:::-;5484:221;5410:302;5320:392;;;:::o;12245:2633::-;12401:1;12385:18;;:4;:18;;;;:38;;;;;12421:1;12407:16;;:2;:16;;;;12385:38;12377:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;12517:7;:5;:7::i;:::-;12509:15;;:4;:15;;;:32;;;;12534:7;:5;:7::i;:::-;12528:13;;:2;:13;;;12509:32;:57;;;;12561:4;12545:21;;:4;:21;;;12509:57;:80;;;;12584:4;12570:19;;:2;:19;;;12509:80;:97;;;;12594:12;;;;;;;;;;;12593:13;12509:97;12505:250;;;12623:33;12639:4;12645:2;12649:6;12623:15;:33::i;:::-;12671:19;12685:4;12671:13;:19::i;:::-;12705:17;12719:2;12705:13;:17::i;:::-;12737:7;;12505:250;12767:16;12792:13;;;;;;;;;;;12786:19;;:2;:19;;;:44;;;;12817:13;;;;;;;;;;;12809:21;;:4;:21;;;12786:44;12767:63;;12845:11;12841:1910;;;12915:16;12956:3;8627:1;12935:6;:17;;;;:::i;:::-;12934:25;;;;:::i;:::-;12915:44;;12974:22;13008:8;12999:6;:17;;;;:::i;:::-;12974:42;;13101:41;13117:4;13123:2;13127:14;13101:15;:41::i;:::-;13217:46;13233:4;13247;13254:8;13217:15;:46::i;:::-;13404:3;8682:2;13376:8;:24;;;;:::i;:::-;13375:32;;;;:::i;:::-;13348:23;;:59;;;;;;;:::i;:::-;;;;;;;;13497:3;8738:2;13471:8;:22;;;;:::i;:::-;13470:30;;;;:::i;:::-;13445:21;;:55;;;;;;;:::i;:::-;;;;;;;;8907:12;13601:23;;:49;;:118;;;;8907:12;13672:21;;:47;;13601:118;13600:160;;;;;13759:1;13742:7;:14;;;;:18;13600:160;13596:1034;;;13832:69;13849:4;13864:16;;;;;;;;;;;13883:17;13832:8;:69::i;:::-;13927:10;;;;;;;;;;;13920:26;;;13955:16;;;;;;;;;;;13974:17;13920:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14084:10;;;;;;;;;;;14077:26;;;14104:13;;;;;;;;;;;14119:17;14077:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14171:4;14156:29;;;14186:13;;;;;;;;;;;14201:17;14156:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14260:4;:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14256:359;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;14480:6;14438:49;;;;;;;;:::i;:::-;;;;;;;;;;;;;14420:69;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;14358:151;14256:359;;;;;14544:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;14256:359;;;;;13596:1034;12858:1783;;12841:1910;;;14706:33;14722:4;14728:2;14732:6;14706:15;:33::i;:::-;12841:1910;14823:19;14837:4;14823:13;:19::i;:::-;14853:17;14867:2;14853:13;:17::i;:::-;12366:2512;12245:2633;;;;:::o;1884:100::-;1959:10;1948:21;;:7;:5;:7::i;:::-;:21;;;1940:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;1884:100::o;17527:2383::-;17587:7;17626:1;17611:11;:16;17607:30;;17636:1;17629:8;;;;17607:30;17686:69;17703:4;17718:16;;;;;;;;;;;17737:17;17686:8;:69::i;:::-;17773:10;;;;;;;;;;;17766:26;;;17801:16;;;;;;;;;;;17820:17;17766:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17917:13;;;;;;;;;;;17901:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17897:352;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;18205:6;18166:46;;;;;;;;:::i;:::-;;;;;;;;;;;;;18148:66;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;18236:1;18229:8;;;;;17897:352;;;;;;;;;;;17955:19;17976;17999:17;:15;:17::i;:::-;17954:62;;;;18069:11;18056;18036:45;;;;;;;;;;17939:154;;18261:21;18299:1;18285:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18261:40;;18330:4;18312;18317:1;18312:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;18356:10;;;;;;;;;;;18346:4;18351:1;18346:7;;;;;;;;:::i;:::-;;;;;;;:20;;;;;;;;;;;18379:27;18416:10;;;;;;;;;;;18409:28;;;18446:4;18409:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18379:73;;18463:17;18483:41;18512:11;18483:28;:41::i;:::-;18463:61;;18541:16;;;;;;;;;;;:70;;;18626:11;18652:9;18676:4;18703;18779:3;18761:15;:21;;;;:::i;:::-;18541:252;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18537:1366;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;19762:6;19728:41;;;;;;;;:::i;:::-;;;;;;;;;;;;;19710:61;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;19793:1;19786:8;;;;;;;;18537:1366;;;19833:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;19890:1;19883:8;;;;;;;18537:1366;18809:25;18844:10;;;;;;;;;;;18837:28;;;18874:4;18837:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18809:71;;18895:21;18939:19;18919:17;:39;;;;:::i;:::-;18895:63;;19053:1;19036:13;:18;19032:133;;19080:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;19148:1;19141:8;;;;;;;;;19032:133;19213:9;19197:13;:25;19193:340;;;19379:23;19388:13;19379:8;:23::i;:::-;19468:19;19477:9;19468:8;:19::i;:::-;19266:222;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19248:242;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;19516:1;19509:8;;;;;;;;;19193:340;19594:13;19581:11;19566:42;;;;;;;;;;19630:13;19623:20;;;;;;;17527:2383;;;;:::o;20419:1038::-;20546:1;20524:18;:23;:49;;;;20572:1;20551:17;:22;20524:49;20575:7;20520:62;20629:70;20646:4;20661:16;;;;;;;;;;;20680:18;20629:8;:70::i;:::-;20717:10;;;;;;;;;;;20710:26;;;20745:16;;;;;;;;;;;20764:17;20710:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20799:16;;;;;;;;;;;:29;;;20851:4;20871:10;;;;;;;;;;;20896:18;20929:17;21005:3;9169:2;20983:3;:18;;;;:::i;:::-;20961;:41;;;;:::i;:::-;:47;;;;:::i;:::-;21092:3;9169:2;21070:3;:18;;;;:::i;:::-;21049:17;:40;;;;:::i;:::-;:46;;;;:::i;:::-;21145:4;21183:3;21165:15;:21;;;;:::i;:::-;20799:398;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;20795:655;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;21349:6;21338:18;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;21284:84;20795:655;;;;;21395:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;20795:655;;;;;;;21253:17;21233:18;21218:53;;;;;;;;;;20795:655;20419:1038;;;:::o;21465:656::-;21549:1;21534:11;:16;:39;;;;21572:1;21554:7;:14;;;;:19;21534:39;21575:7;21530:52;21602:23;21642:7;:14;;;;21628:11;:28;;;;:::i;:::-;21602:54;;21690:1;21671:15;:20;21667:33;;21693:7;;;21667:33;21717:9;21712:329;21736:7;:14;;;;21732:1;:18;:29;;;;;21758:3;21754:1;:7;21732:29;21712:329;;;21809:1;21787:24;;:7;21795:1;21787:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:24;;;21783:247;;21843:10;;;;;;;;;;;21836:27;;;21864:7;21872:1;21864:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21876:15;21836:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;21832:183;21987:8;21832:183;;21783:247;21712:329;21763:3;;;;;:::i;:::-;;;;21712:329;;;;22098:7;:14;;;;22085:11;22066:47;;;;;;;;;;21519:602;21465:656;;:::o;2165:191::-;2239:16;2258:6;;;;;;;;;;;2239:25;;2284:8;2275:6;;:17;;;;;;;;;;;;;;;;;;2339:8;2308:40;;2329:8;2308:40;;;;;;;;;;;;2228:128;2165:191;:::o;4133:507::-;4246:1;4230:18;;:4;:18;;;;:38;;;;;4266:1;4252:16;;:2;:16;;;;4230:38;4222:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;4286:38;4307:4;4313:2;4317:6;4286:20;:38::i;:::-;4335:19;4357:9;:15;4367:4;4357:15;;;;;;;;;;;;;;;;4335:37;;4406:6;4391:11;:21;;4383:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;4487:6;4473:11;:20;4455:9;:15;4465:4;4455:15;;;;;;;;;;;;;;;:38;;;;4525:6;4508:9;:13;4518:2;4508:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;4573:2;4558:26;;4567:4;4558:26;;;4577:6;4558:26;;;;;;:::i;:::-;;;;;;;;4595:37;4615:4;4621:2;4625:6;4595:19;:37::i;:::-;4211:429;4133:507;;;:::o;14886:588::-;14960:13;;;;;;;;;;;14949:24;;:7;:24;;;;:52;;;;;14996:4;14977:24;;:7;:24;;;;14949:52;14945:522;;;15018:15;15036:18;15046:7;15036:9;:18::i;:::-;15018:36;;15069:22;15094:8;:17;15103:7;15094:17;;;;;;;;;;;;;;;;;;;;;;;;;15069:42;;8800:11;15144:7;:28;;:50;;;;;15177:17;15176:18;15144:50;15140:316;;;15235:4;15215:8;:17;15224:7;15215:17;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;15258:7;15271;15258:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15140:316;;;8800:11;15305:7;:27;:48;;;;;15336:17;15305:48;15301:155;;;15394:5;15374:8;:17;15383:7;15374:17;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;15418:22;15432:7;15418:13;:22::i;:::-;15301:155;15140:316;15003:464;;14945:522;14886:588;:::o;19968:443::-;20021:17;20061:1;20055:2;:7;20051:23;;20064:10;;;;;;;;;;;;;;;;;;;;;20051:23;20085:9;20097:2;20085:14;;20110;20135:72;20147:1;20142;:6;20135:72;;20165:8;;;;;:::i;:::-;;;;20193:2;20188:7;;;;;:::i;:::-;;;20135:72;;;20217:17;20247:6;20237:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20217:37;;20265:110;20278:1;20272:2;:7;20265:110;;20336:2;20331;:7;;;;:::i;:::-;20326:2;:12;;;;:::i;:::-;20313:27;;20296:4;20301:8;;;;:::i;:::-;;;;20296:14;;;;;;;;:::i;:::-;;;;;:44;;;;;;;;;;;20361:2;20355:8;;;;;:::i;:::-;;;20265:110;;;20398:4;20385:18;;20040:371;;;19968:443;;;;:::o;11858:186::-;;;;:::o;12052:185::-;;;;:::o;15482:295::-;15546:9;15541:229;15565:7;:14;;;;15561:1;:18;15541:229;;;15619:7;15605:21;;:7;15613:1;15605:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:21;;;15601:158;;15660:7;15685:1;15668:7;:14;;;;:18;;;;:::i;:::-;15660:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15647:7;15655:1;15647:10;;;;;;;;:::i;:::-;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;15706:7;:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;15738:5;;15601:158;15581:3;;;;;:::i;:::-;;;;15541:229;;;;15482:295;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:77::-;1386:7;1415:5;1404:16;;1349:77;;;:::o;1432:118::-;1519:24;1537:5;1519:24;:::i;:::-;1514:3;1507:37;1432:118;;:::o;1556:222::-;1649:4;1687:2;1676:9;1672:18;1664:26;;1700:71;1768:1;1757:9;1753:17;1744:6;1700:71;:::i;:::-;1556:222;;;;:::o;1784:75::-;1817:6;1850:2;1844:9;1834:19;;1784:75;:::o;1865:117::-;1974:1;1971;1964:12;2111:126;2148:7;2188:42;2181:5;2177:54;2166:65;;2111:126;;;:::o;2243:96::-;2280:7;2309:24;2327:5;2309:24;:::i;:::-;2298:35;;2243:96;;;:::o;2345:122::-;2418:24;2436:5;2418:24;:::i;:::-;2411:5;2408:35;2398:63;;2457:1;2454;2447:12;2398:63;2345:122;:::o;2473:139::-;2519:5;2557:6;2544:20;2535:29;;2573:33;2600:5;2573:33;:::i;:::-;2473:139;;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:118::-;3885:24;3903:5;3885:24;:::i;:::-;3880:3;3873:37;3798:118;;:::o;3922:541::-;4093:4;4131:3;4120:9;4116:19;4108:27;;4145:71;4213:1;4202:9;4198:17;4189:6;4145:71;:::i;:::-;4226:72;4294:2;4283:9;4279:18;4270:6;4226:72;:::i;:::-;4308:66;4370:2;4359:9;4355:18;4346:6;4308:66;:::i;:::-;4384:72;4452:2;4441:9;4437:18;4428:6;4384:72;:::i;:::-;3922:541;;;;;;;:::o;4469:619::-;4546:6;4554;4562;4611:2;4599:9;4590:7;4586:23;4582:32;4579:119;;;4617:79;;:::i;:::-;4579:119;4737:1;4762:53;4807:7;4798:6;4787:9;4783:22;4762:53;:::i;:::-;4752:63;;4708:117;4864:2;4890:53;4935:7;4926:6;4915:9;4911:22;4890:53;:::i;:::-;4880:63;;4835:118;4992:2;5018:53;5063:7;5054:6;5043:9;5039:22;5018:53;:::i;:::-;5008:63;;4963:118;4469:619;;;;;:::o;5094:329::-;5153:6;5202:2;5190:9;5181:7;5177:23;5173:32;5170:119;;;5208:79;;:::i;:::-;5170:119;5328:1;5353:53;5398:7;5389:6;5378:9;5374:22;5353:53;:::i;:::-;5343:63;;5299:117;5094:329;;;;:::o;5429:222::-;5522:4;5560:2;5549:9;5545:18;5537:26;;5573:71;5641:1;5630:9;5626:17;5617:6;5573:71;:::i;:::-;5429:222;;;;:::o;5657:86::-;5692:7;5732:4;5725:5;5721:16;5710:27;;5657:86;;;:::o;5749:112::-;5832:22;5848:5;5832:22;:::i;:::-;5827:3;5820:35;5749:112;;:::o;5867:214::-;5956:4;5994:2;5983:9;5979:18;5971:26;;6007:67;6071:1;6060:9;6056:17;6047:6;6007:67;:::i;:::-;5867:214;;;;:::o;6087:114::-;6154:6;6188:5;6182:12;6172:22;;6087:114;;;:::o;6207:184::-;6306:11;6340:6;6335:3;6328:19;6380:4;6375:3;6371:14;6356:29;;6207:184;;;;:::o;6397:132::-;6464:4;6487:3;6479:11;;6517:4;6512:3;6508:14;6500:22;;6397:132;;;:::o;6535:108::-;6612:24;6630:5;6612:24;:::i;:::-;6607:3;6600:37;6535:108;;:::o;6649:179::-;6718:10;6739:46;6781:3;6773:6;6739:46;:::i;:::-;6817:4;6812:3;6808:14;6794:28;;6649:179;;;;:::o;6834:113::-;6904:4;6936;6931:3;6927:14;6919:22;;6834:113;;;:::o;6983:732::-;7102:3;7131:54;7179:5;7131:54;:::i;:::-;7201:86;7280:6;7275:3;7201:86;:::i;:::-;7194:93;;7311:56;7361:5;7311:56;:::i;:::-;7390:7;7421:1;7406:284;7431:6;7428:1;7425:13;7406:284;;;7507:6;7501:13;7534:63;7593:3;7578:13;7534:63;:::i;:::-;7527:70;;7620:60;7673:6;7620:60;:::i;:::-;7610:70;;7466:224;7453:1;7450;7446:9;7441:14;;7406:284;;;7410:14;7706:3;7699:10;;7107:608;;;6983:732;;;;:::o;7721:373::-;7864:4;7902:2;7891:9;7887:18;7879:26;;7951:9;7945:4;7941:20;7937:1;7926:9;7922:17;7915:47;7979:108;8082:4;8073:6;7979:108;:::i;:::-;7971:116;;7721:373;;;;:::o;8100:60::-;8128:3;8149:5;8142:12;;8100:60;;;:::o;8166:142::-;8216:9;8249:53;8267:34;8276:24;8294:5;8276:24;:::i;:::-;8267:34;:::i;:::-;8249:53;:::i;:::-;8236:66;;8166:142;;;:::o;8314:126::-;8364:9;8397:37;8428:5;8397:37;:::i;:::-;8384:50;;8314:126;;;:::o;8446:151::-;8521:9;8554:37;8585:5;8554:37;:::i;:::-;8541:50;;8446:151;;;:::o;8603:181::-;8715:62;8771:5;8715:62;:::i;:::-;8710:3;8703:75;8603:181;;:::o;8790:272::-;8908:4;8946:2;8935:9;8931:18;8923:26;;8959:96;9052:1;9041:9;9037:17;9028:6;8959:96;:::i;:::-;8790:272;;;;:::o;9068:329::-;9127:6;9176:2;9164:9;9155:7;9151:23;9147:32;9144:119;;;9182:79;;:::i;:::-;9144:119;9302:1;9327:53;9372:7;9363:6;9352:9;9348:22;9327:53;:::i;:::-;9317:63;;9273:117;9068:329;;;;:::o;9403:332::-;9524:4;9562:2;9551:9;9547:18;9539:26;;9575:71;9643:1;9632:9;9628:17;9619:6;9575:71;:::i;:::-;9656:72;9724:2;9713:9;9709:18;9700:6;9656:72;:::i;:::-;9403:332;;;;;:::o;9741:474::-;9809:6;9817;9866:2;9854:9;9845:7;9841:23;9837:32;9834:119;;;9872:79;;:::i;:::-;9834:119;9992:1;10017:53;10062:7;10053:6;10042:9;10038:22;10017:53;:::i;:::-;10007:63;;9963:117;10119:2;10145:53;10190:7;10181:6;10170:9;10166:22;10145:53;:::i;:::-;10135:63;;10090:118;9741:474;;;;;:::o;10221:152::-;10297:9;10330:37;10361:5;10330:37;:::i;:::-;10317:50;;10221:152;;;:::o;10379:183::-;10492:63;10549:5;10492:63;:::i;:::-;10487:3;10480:76;10379:183;;:::o;10568:274::-;10687:4;10725:2;10714:9;10710:18;10702:26;;10738:97;10832:1;10821:9;10817:17;10808:6;10738:97;:::i;:::-;10568:274;;;;:::o;10848:180::-;10896:77;10893:1;10886:88;10993:4;10990:1;10983:15;11017:4;11014:1;11007:15;11034:320;11078:6;11115:1;11109:4;11105:12;11095:22;;11162:1;11156:4;11152:12;11183:18;11173:81;;11239:4;11231:6;11227:17;11217:27;;11173:81;11301:2;11293:6;11290:14;11270:18;11267:38;11264:84;;11320:18;;:::i;:::-;11264:84;11085:269;11034:320;;;:::o;11360:332::-;11481:4;11519:2;11508:9;11504:18;11496:26;;11532:71;11600:1;11589:9;11585:17;11576:6;11532:71;:::i;:::-;11613:72;11681:2;11670:9;11666:18;11657:6;11613:72;:::i;:::-;11360:332;;;;;:::o;11698:143::-;11755:5;11786:6;11780:13;11771:22;;11802:33;11829:5;11802:33;:::i;:::-;11698:143;;;;:::o;11847:351::-;11917:6;11966:2;11954:9;11945:7;11941:23;11937:32;11934:119;;;11972:79;;:::i;:::-;11934:119;12092:1;12117:64;12173:7;12164:6;12153:9;12149:22;12117:64;:::i;:::-;12107:74;;12063:128;11847:351;;;;:::o;12204:152::-;12344:4;12340:1;12332:6;12328:14;12321:28;12204:152;:::o;12362:365::-;12504:3;12525:66;12589:1;12584:3;12525:66;:::i;:::-;12518:73;;12600:93;12689:3;12600:93;:::i;:::-;12718:2;12713:3;12709:12;12702:19;;12362:365;;;:::o;12733:419::-;12899:4;12937:2;12926:9;12922:18;12914:26;;12986:9;12980:4;12976:20;12972:1;12961:9;12957:17;12950:47;13014:131;13140:4;13014:131;:::i;:::-;13006:139;;12733:419;;;:::o;13158:152::-;13298:4;13294:1;13286:6;13282:14;13275:28;13158:152;:::o;13316:365::-;13458:3;13479:66;13543:1;13538:3;13479:66;:::i;:::-;13472:73;;13554:93;13643:3;13554:93;:::i;:::-;13672:2;13667:3;13663:12;13656:19;;13316:365;;;:::o;13687:419::-;13853:4;13891:2;13880:9;13876:18;13868:26;;13940:9;13934:4;13930:20;13926:1;13915:9;13911:17;13904:47;13968:131;14094:4;13968:131;:::i;:::-;13960:139;;13687:419;;;:::o;14112:152::-;14252:4;14248:1;14240:6;14236:14;14229:28;14112:152;:::o;14270:365::-;14412:3;14433:66;14497:1;14492:3;14433:66;:::i;:::-;14426:73;;14508:93;14597:3;14508:93;:::i;:::-;14626:2;14621:3;14617:12;14610:19;;14270:365;;;:::o;14641:419::-;14807:4;14845:2;14834:9;14830:18;14822:26;;14894:9;14888:4;14884:20;14880:1;14869:9;14865:17;14858:47;14922:131;15048:4;14922:131;:::i;:::-;14914:139;;14641:419;;;:::o;15066:152::-;15206:4;15202:1;15194:6;15190:14;15183:28;15066:152;:::o;15224:365::-;15366:3;15387:66;15451:1;15446:3;15387:66;:::i;:::-;15380:73;;15462:93;15551:3;15462:93;:::i;:::-;15580:2;15575:3;15571:12;15564:19;;15224:365;;;:::o;15595:419::-;15761:4;15799:2;15788:9;15784:18;15776:26;;15848:9;15842:4;15838:20;15834:1;15823:9;15819:17;15812:47;15876:131;16002:4;15876:131;:::i;:::-;15868:139;;15595:419;;;:::o;16020:225::-;16160:34;16156:1;16148:6;16144:14;16137:58;16229:8;16224:2;16216:6;16212:15;16205:33;16020:225;:::o;16251:366::-;16393:3;16414:67;16478:2;16473:3;16414:67;:::i;:::-;16407:74;;16490:93;16579:3;16490:93;:::i;:::-;16608:2;16603:3;16599:12;16592:19;;16251:366;;;:::o;16623:419::-;16789:4;16827:2;16816:9;16812:18;16804:26;;16876:9;16870:4;16866:20;16862:1;16851:9;16847:17;16840:47;16904:131;17030:4;16904:131;:::i;:::-;16896:139;;16623:419;;;:::o;17048:85::-;17093:7;17122:5;17111:16;;17048:85;;;:::o;17139:158::-;17197:9;17230:61;17248:42;17257:32;17283:5;17257:32;:::i;:::-;17248:42;:::i;:::-;17230:61;:::i;:::-;17217:74;;17139:158;;;:::o;17303:147::-;17398:45;17437:5;17398:45;:::i;:::-;17393:3;17386:58;17303:147;;:::o;17456:807::-;17705:4;17743:3;17732:9;17728:19;17720:27;;17757:71;17825:1;17814:9;17810:17;17801:6;17757:71;:::i;:::-;17838:72;17906:2;17895:9;17891:18;17882:6;17838:72;:::i;:::-;17920:80;17996:2;17985:9;17981:18;17972:6;17920:80;:::i;:::-;18010;18086:2;18075:9;18071:18;18062:6;18010:80;:::i;:::-;18100:73;18168:3;18157:9;18153:19;18144:6;18100:73;:::i;:::-;18183;18251:3;18240:9;18236:19;18227:6;18183:73;:::i;:::-;17456:807;;;;;;;;;:::o;18269:663::-;18357:6;18365;18373;18422:2;18410:9;18401:7;18397:23;18393:32;18390:119;;;18428:79;;:::i;:::-;18390:119;18548:1;18573:64;18629:7;18620:6;18609:9;18605:22;18573:64;:::i;:::-;18563:74;;18519:128;18686:2;18712:64;18768:7;18759:6;18748:9;18744:22;18712:64;:::i;:::-;18702:74;;18657:129;18825:2;18851:64;18907:7;18898:6;18887:9;18883:22;18851:64;:::i;:::-;18841:74;;18796:129;18269:663;;;;;:::o;18938:173::-;19078:25;19074:1;19066:6;19062:14;19055:49;18938:173;:::o;19117:366::-;19259:3;19280:67;19344:2;19339:3;19280:67;:::i;:::-;19273:74;;19356:93;19445:3;19356:93;:::i;:::-;19474:2;19469:3;19465:12;19458:19;;19117:366;;;:::o;19489:419::-;19655:4;19693:2;19682:9;19678:18;19670:26;;19742:9;19736:4;19732:20;19728:1;19717:9;19713:17;19706:47;19770:131;19896:4;19770:131;:::i;:::-;19762:139;;19489:419;;;:::o;19914:177::-;20054:29;20050:1;20042:6;20038:14;20031:53;19914:177;:::o;20097:366::-;20239:3;20260:67;20324:2;20319:3;20260:67;:::i;:::-;20253:74;;20336:93;20425:3;20336:93;:::i;:::-;20454:2;20449:3;20445:12;20438:19;;20097:366;;;:::o;20469:419::-;20635:4;20673:2;20662:9;20658:18;20650:26;;20722:9;20716:4;20712:20;20708:1;20697:9;20693:17;20686:47;20750:131;20876:4;20750:131;:::i;:::-;20742:139;;20469:419;;;:::o;20894:332::-;21015:4;21053:2;21042:9;21038:18;21030:26;;21066:71;21134:1;21123:9;21119:17;21110:6;21066:71;:::i;:::-;21147:72;21215:2;21204:9;21200:18;21191:6;21147:72;:::i;:::-;20894:332;;;;;:::o;21232:116::-;21302:21;21317:5;21302:21;:::i;:::-;21295:5;21292:32;21282:60;;21338:1;21335;21328:12;21282:60;21232:116;:::o;21354:137::-;21408:5;21439:6;21433:13;21424:22;;21455:30;21479:5;21455:30;:::i;:::-;21354:137;;;;:::o;21497:345::-;21564:6;21613:2;21601:9;21592:7;21588:23;21584:32;21581:119;;;21619:79;;:::i;:::-;21581:119;21739:1;21764:61;21817:7;21808:6;21797:9;21793:22;21764:61;:::i;:::-;21754:71;;21710:125;21497:345;;;;:::o;21848:170::-;21988:22;21984:1;21976:6;21972:14;21965:46;21848:170;:::o;22024:366::-;22166:3;22187:67;22251:2;22246:3;22187:67;:::i;:::-;22180:74;;22263:93;22352:3;22263:93;:::i;:::-;22381:2;22376:3;22372:12;22365:19;;22024:366;;;:::o;22396:419::-;22562:4;22600:2;22589:9;22585:18;22577:26;;22649:9;22643:4;22639:20;22635:1;22624:9;22620:17;22613:47;22677:131;22803:4;22677:131;:::i;:::-;22669:139;;22396:419;;;:::o;22821:152::-;22961:4;22957:1;22949:6;22945:14;22938:28;22821:152;:::o;22979:365::-;23121:3;23142:66;23206:1;23201:3;23142:66;:::i;:::-;23135:73;;23217:93;23306:3;23217:93;:::i;:::-;23335:2;23330:3;23326:12;23319:19;;22979:365;;;:::o;23350:419::-;23516:4;23554:2;23543:9;23539:18;23531:26;;23603:9;23597:4;23593:20;23589:1;23578:9;23574:17;23567:47;23631:131;23757:4;23631:131;:::i;:::-;23623:139;;23350:419;;;:::o;23775:180::-;23823:77;23820:1;23813:88;23920:4;23917:1;23910:15;23944:4;23941:1;23934:15;23961:191;24001:3;24020:20;24038:1;24020:20;:::i;:::-;24015:25;;24054:20;24072:1;24054:20;:::i;:::-;24049:25;;24097:1;24094;24090:9;24083:16;;24118:3;24115:1;24112:10;24109:36;;;24125:18;;:::i;:::-;24109:36;23961:191;;;;:::o;24158:152::-;24298:4;24294:1;24286:6;24282:14;24275:28;24158:152;:::o;24316:365::-;24458:3;24479:66;24543:1;24538:3;24479:66;:::i;:::-;24472:73;;24554:93;24643:3;24554:93;:::i;:::-;24672:2;24667:3;24663:12;24656:19;;24316:365;;;:::o;24687:419::-;24853:4;24891:2;24880:9;24876:18;24868:26;;24940:9;24934:4;24930:20;24926:1;24915:9;24911:17;24904:47;24968:131;25094:4;24968:131;:::i;:::-;24960:139;;24687:419;;;:::o;25112:410::-;25152:7;25175:20;25193:1;25175:20;:::i;:::-;25170:25;;25209:20;25227:1;25209:20;:::i;:::-;25204:25;;25264:1;25261;25257:9;25286:30;25304:11;25286:30;:::i;:::-;25275:41;;25465:1;25456:7;25452:15;25449:1;25446:22;25426:1;25419:9;25399:83;25376:139;;25495:18;;:::i;:::-;25376:139;25160:362;25112:410;;;;:::o;25528:180::-;25576:77;25573:1;25566:88;25673:4;25670:1;25663:15;25697:4;25694:1;25687:15;25714:185;25754:1;25771:20;25789:1;25771:20;:::i;:::-;25766:25;;25805:20;25823:1;25805:20;:::i;:::-;25800:25;;25844:1;25834:35;;25849:18;;:::i;:::-;25834:35;25891:1;25888;25884:9;25879:14;;25714:185;;;;:::o;25905:194::-;25945:4;25965:20;25983:1;25965:20;:::i;:::-;25960:25;;25999:20;26017:1;25999:20;:::i;:::-;25994:25;;26043:1;26040;26036:9;26028:17;;26067:1;26061:4;26058:11;26055:37;;;26072:18;;:::i;:::-;26055:37;25905:194;;;;:::o;26105:152::-;26245:4;26241:1;26233:6;26229:14;26222:28;26105:152;:::o;26263:365::-;26405:3;26426:66;26490:1;26485:3;26426:66;:::i;:::-;26419:73;;26501:93;26590:3;26501:93;:::i;:::-;26619:2;26614:3;26610:12;26603:19;;26263:365;;;:::o;26634:419::-;26800:4;26838:2;26827:9;26823:18;26815:26;;26887:9;26881:4;26877:20;26873:1;26862:9;26858:17;26851:47;26915:131;27041:4;26915:131;:::i;:::-;26907:139;;26634:419;;;:::o;27059:143::-;27116:5;27147:6;27141:13;27132:22;;27163:33;27190:5;27163:33;:::i;:::-;27059:143;;;;:::o;27208:351::-;27278:6;27327:2;27315:9;27306:7;27302:23;27298:32;27295:119;;;27333:79;;:::i;:::-;27295:119;27453:1;27478:64;27534:7;27525:6;27514:9;27510:22;27478:64;:::i;:::-;27468:74;;27424:128;27208:351;;;;:::o;27565:152::-;27705:4;27701:1;27693:6;27689:14;27682:28;27565:152;:::o;27723:365::-;27865:3;27886:66;27950:1;27945:3;27886:66;:::i;:::-;27879:73;;27961:93;28050:3;27961:93;:::i;:::-;28079:2;28074:3;28070:12;28063:19;;27723:365;;;:::o;28094:419::-;28260:4;28298:2;28287:9;28283:18;28275:26;;28347:9;28341:4;28337:20;28333:1;28322:9;28318:17;28311:47;28375:131;28501:4;28375:131;:::i;:::-;28367:139;;28094:419;;;:::o;28519:114::-;28556:7;28596:30;28589:5;28585:42;28574:53;;28519:114;;;:::o;28639:122::-;28712:24;28730:5;28712:24;:::i;:::-;28705:5;28702:35;28692:63;;28751:1;28748;28741:12;28692:63;28639:122;:::o;28767:143::-;28824:5;28855:6;28849:13;28840:22;;28871:33;28898:5;28871:33;:::i;:::-;28767:143;;;;:::o;28916:93::-;28952:7;28992:10;28985:5;28981:22;28970:33;;28916:93;;;:::o;29015:120::-;29087:23;29104:5;29087:23;:::i;:::-;29080:5;29077:34;29067:62;;29125:1;29122;29115:12;29067:62;29015:120;:::o;29141:141::-;29197:5;29228:6;29222:13;29213:22;;29244:32;29270:5;29244:32;:::i;:::-;29141:141;;;;:::o;29288:661::-;29375:6;29383;29391;29440:2;29428:9;29419:7;29415:23;29411:32;29408:119;;;29446:79;;:::i;:::-;29408:119;29566:1;29591:64;29647:7;29638:6;29627:9;29623:22;29591:64;:::i;:::-;29581:74;;29537:128;29704:2;29730:64;29786:7;29777:6;29766:9;29762:22;29730:64;:::i;:::-;29720:74;;29675:129;29843:2;29869:63;29924:7;29915:6;29904:9;29900:22;29869:63;:::i;:::-;29859:73;;29814:128;29288:661;;;;;:::o;29955:153::-;30095:5;30091:1;30083:6;30079:14;30072:29;29955:153;:::o;30114:365::-;30256:3;30277:66;30341:1;30336:3;30277:66;:::i;:::-;30270:73;;30352:93;30441:3;30352:93;:::i;:::-;30470:2;30465:3;30461:12;30454:19;;30114:365;;;:::o;30485:419::-;30651:4;30689:2;30678:9;30674:18;30666:26;;30738:9;30732:4;30728:20;30724:1;30713:9;30709:17;30702:47;30766:131;30892:4;30766:131;:::i;:::-;30758:139;;30485:419;;;:::o;30910:152::-;31050:4;31046:1;31038:6;31034:14;31027:28;30910:152;:::o;31068:365::-;31210:3;31231:66;31295:1;31290:3;31231:66;:::i;:::-;31224:73;;31306:93;31395:3;31306:93;:::i;:::-;31424:2;31419:3;31415:12;31408:19;;31068:365;;;:::o;31439:419::-;31605:4;31643:2;31632:9;31628:18;31620:26;;31692:9;31686:4;31682:20;31678:1;31667:9;31663:17;31656:47;31720:131;31846:4;31720:131;:::i;:::-;31712:139;;31439:419;;;:::o;31864:152::-;32004:4;32000:1;31992:6;31988:14;31981:28;31864:152;:::o;32022:365::-;32164:3;32185:66;32249:1;32244:3;32185:66;:::i;:::-;32178:73;;32260:93;32349:3;32260:93;:::i;:::-;32378:2;32373:3;32369:12;32362:19;;32022:365;;;:::o;32393:419::-;32559:4;32597:2;32586:9;32582:18;32574:26;;32646:9;32640:4;32636:20;32632:1;32621:9;32617:17;32610:47;32674:131;32800:4;32674:131;:::i;:::-;32666:139;;32393:419;;;:::o;32818:106::-;32862:8;32911:5;32906:3;32902:15;32881:36;;32818:106;;;:::o;32930:183::-;32965:3;33003:1;32985:16;32982:23;32979:128;;;33041:1;33038;33035;33020:23;33063:34;33094:1;33088:8;33063:34;:::i;:::-;33056:41;;32979:128;32930:183;:::o;33119:180::-;33167:77;33164:1;33157:88;33264:4;33261:1;33254:15;33288:4;33285:1;33278:15;33305:281;33388:27;33410:4;33388:27;:::i;:::-;33380:6;33376:40;33518:6;33506:10;33503:22;33482:18;33470:10;33467:34;33464:62;33461:88;;;33529:18;;:::i;:::-;33461:88;33569:10;33565:2;33558:22;33348:238;33305:281;;:::o;33592:711::-;33631:3;33669:4;33651:16;33648:26;33677:5;33645:39;33706:20;;:::i;:::-;33781:1;33763:16;33759:24;33756:1;33750:4;33735:49;33814:4;33808:11;33913:16;33906:4;33898:6;33894:17;33891:39;33858:18;33850:6;33847:30;33831:113;33828:146;;;33959:5;;;;33828:146;34005:6;33999:4;33995:17;34041:3;34035:10;34068:18;34060:6;34057:30;34054:43;;;34090:5;;;;;;34054:43;34138:6;34131:4;34126:3;34122:14;34118:27;34197:1;34179:16;34175:24;34169:4;34165:35;34160:3;34157:44;34154:57;;;34204:5;;;;;;;34154:57;34221;34269:6;34263:4;34259:17;34251:6;34247:30;34241:4;34221:57;:::i;:::-;34294:3;34287:10;;33635:668;;;;;33592:711;;:::o;34309:148::-;34411:11;34448:3;34433:18;;34309:148;;;;:::o;34463:171::-;34603:23;34599:1;34591:6;34587:14;34580:47;34463:171;:::o;34640:402::-;34800:3;34821:85;34903:2;34898:3;34821:85;:::i;:::-;34814:92;;34915:93;35004:3;34915:93;:::i;:::-;35033:2;35028:3;35024:12;35017:19;;34640:402;;;:::o;35048:390::-;35154:3;35182:39;35215:5;35182:39;:::i;:::-;35237:89;35319:6;35314:3;35237:89;:::i;:::-;35230:96;;35335:65;35393:6;35388:3;35381:4;35374:5;35370:16;35335:65;:::i;:::-;35425:6;35420:3;35416:16;35409:23;;35158:280;35048:390;;;;:::o;35444:541::-;35677:3;35699:148;35843:3;35699:148;:::i;:::-;35692:155;;35864:95;35955:3;35946:6;35864:95;:::i;:::-;35857:102;;35976:3;35969:10;;35444:541;;;;:::o;35991:275::-;36123:3;36145:95;36236:3;36227:6;36145:95;:::i;:::-;36138:102;;36257:3;36250:10;;35991:275;;;;:::o;36272:224::-;36412:34;36408:1;36400:6;36396:14;36389:58;36481:7;36476:2;36468:6;36464:15;36457:32;36272:224;:::o;36502:402::-;36662:3;36683:85;36765:2;36760:3;36683:85;:::i;:::-;36676:92;;36777:93;36866:3;36777:93;:::i;:::-;36895:2;36890:3;36886:12;36879:19;;36502:402;;;:::o;36910:381::-;37095:3;37117:148;37261:3;37117:148;:::i;:::-;37110:155;;37282:3;37275:10;;36910:381;;;:::o;37297:152::-;37437:4;37433:1;37425:6;37421:14;37414:28;37297:152;:::o;37455:365::-;37597:3;37618:66;37682:1;37677:3;37618:66;:::i;:::-;37611:73;;37693:93;37782:3;37693:93;:::i;:::-;37811:2;37806:3;37802:12;37795:19;;37455:365;;;:::o;37826:419::-;37992:4;38030:2;38019:9;38015:18;38007:26;;38079:9;38073:4;38069:20;38065:1;38054:9;38050:17;38043:47;38107:131;38233:4;38107:131;:::i;:::-;38099:139;;37826:419;;;:::o;38251:168::-;38391:20;38387:1;38379:6;38375:14;38368:44;38251:168;:::o;38425:402::-;38585:3;38606:85;38688:2;38683:3;38606:85;:::i;:::-;38599:92;;38700:93;38789:3;38700:93;:::i;:::-;38818:2;38813:3;38809:12;38802:19;;38425:402;;;:::o;38833:541::-;39066:3;39088:148;39232:3;39088:148;:::i;:::-;39081:155;;39253:95;39344:3;39335:6;39253:95;:::i;:::-;39246:102;;39365:3;39358:10;;38833:541;;;;:::o;39380:180::-;39428:77;39425:1;39418:88;39525:4;39522:1;39515:15;39549:4;39546:1;39539:15;39566:815;39821:4;39859:3;39848:9;39844:19;39836:27;;39873:71;39941:1;39930:9;39926:17;39917:6;39873:71;:::i;:::-;39954:72;40022:2;40011:9;40007:18;39998:6;39954:72;:::i;:::-;40073:9;40067:4;40063:20;40058:2;40047:9;40043:18;40036:48;40101:108;40204:4;40195:6;40101:108;:::i;:::-;40093:116;;40219:72;40287:2;40276:9;40272:18;40263:6;40219:72;:::i;:::-;40301:73;40369:3;40358:9;40354:19;40345:6;40301:73;:::i;:::-;39566:815;;;;;;;;:::o;40387:163::-;40527:15;40523:1;40515:6;40511:14;40504:39;40387:163;:::o;40556:402::-;40716:3;40737:85;40819:2;40814:3;40737:85;:::i;:::-;40730:92;;40831:93;40920:3;40831:93;:::i;:::-;40949:2;40944:3;40940:12;40933:19;;40556:402;;;:::o;40964:541::-;41197:3;41219:148;41363:3;41219:148;:::i;:::-;41212:155;;41384:95;41475:3;41466:6;41384:95;:::i;:::-;41377:102;;41496:3;41489:10;;40964:541;;;;:::o;41511:171::-;41651:23;41647:1;41639:6;41635:14;41628:47;41511:171;:::o;41688:402::-;41848:3;41869:85;41951:2;41946:3;41869:85;:::i;:::-;41862:92;;41963:93;42052:3;41963:93;:::i;:::-;42081:2;42076:3;42072:12;42065:19;;41688:402;;;:::o;42096:381::-;42281:3;42303:148;42447:3;42303:148;:::i;:::-;42296:155;;42468:3;42461:10;;42096:381;;;:::o;42483:178::-;42623:30;42619:1;42611:6;42607:14;42600:54;42483:178;:::o;42667:402::-;42827:3;42848:85;42930:2;42925:3;42848:85;:::i;:::-;42841:92;;42942:93;43031:3;42942:93;:::i;:::-;43060:2;43055:3;43051:12;43044:19;;42667:402;;;:::o;43075:381::-;43260:3;43282:148;43426:3;43282:148;:::i;:::-;43275:155;;43447:3;43440:10;;43075:381;;;:::o;43462:222::-;43602:34;43598:1;43590:6;43586:14;43579:58;43671:5;43666:2;43658:6;43654:15;43647:30;43462:222;:::o;43690:402::-;43850:3;43871:85;43953:2;43948:3;43871:85;:::i;:::-;43864:92;;43965:93;44054:3;43965:93;:::i;:::-;44083:2;44078:3;44074:12;44067:19;;43690:402;;;:::o;44098:153::-;44238:5;44234:1;44226:6;44222:14;44215:29;44098:153;:::o;44257:400::-;44417:3;44438:84;44520:1;44515:3;44438:84;:::i;:::-;44431:91;;44531:93;44620:3;44531:93;:::i;:::-;44649:1;44644:3;44640:11;44633:18;;44257:400;;;:::o;44663:967::-;45045:3;45067:148;45211:3;45067:148;:::i;:::-;45060:155;;45232:95;45323:3;45314:6;45232:95;:::i;:::-;45225:102;;45344:148;45488:3;45344:148;:::i;:::-;45337:155;;45509:95;45600:3;45591:6;45509:95;:::i;:::-;45502:102;;45621:3;45614:10;;44663:967;;;;;:::o;45636:997::-;45925:4;45963:3;45952:9;45948:19;45940:27;;45977:71;46045:1;46034:9;46030:17;46021:6;45977:71;:::i;:::-;46058:72;46126:2;46115:9;46111:18;46102:6;46058:72;:::i;:::-;46140;46208:2;46197:9;46193:18;46184:6;46140:72;:::i;:::-;46222;46290:2;46279:9;46275:18;46266:6;46222:72;:::i;:::-;46304:73;46372:3;46361:9;46357:19;46348:6;46304:73;:::i;:::-;46387;46455:3;46444:9;46440:19;46431:6;46387:73;:::i;:::-;46470;46538:3;46527:9;46523:19;46514:6;46470:73;:::i;:::-;46553;46621:3;46610:9;46606:19;46597:6;46553:73;:::i;:::-;45636:997;;;;;;;;;;;:::o;46639:179::-;46779:31;46775:1;46767:6;46763:14;46756:55;46639:179;:::o;46824:402::-;46984:3;47005:85;47087:2;47082:3;47005:85;:::i;:::-;46998:92;;47099:93;47188:3;47099:93;:::i;:::-;47217:2;47212:3;47208:12;47201:19;;46824:402;;;:::o;47232:381::-;47417:3;47439:148;47583:3;47439:148;:::i;:::-;47432:155;;47604:3;47597:10;;47232:381;;;:::o;47619:233::-;47658:3;47681:24;47699:5;47681:24;:::i;:::-;47672:33;;47727:66;47720:5;47717:77;47714:103;;47797:18;;:::i;:::-;47714:103;47844:1;47837:5;47833:13;47826:20;;47619:233;;;:::o;47858:152::-;47998:4;47994:1;47986:6;47982:14;47975:28;47858:152;:::o;48016:365::-;48158:3;48179:66;48243:1;48238:3;48179:66;:::i;:::-;48172:73;;48254:93;48343:3;48254:93;:::i;:::-;48372:2;48367:3;48363:12;48356:19;;48016:365;;;:::o;48387:419::-;48553:4;48591:2;48580:9;48576:18;48568:26;;48640:9;48634:4;48630:20;48626:1;48615:9;48611:17;48604:47;48668:131;48794:4;48668:131;:::i;:::-;48660:139;;48387:419;;;:::o;48812:176::-;48844:1;48861:20;48879:1;48861:20;:::i;:::-;48856:25;;48895:20;48913:1;48895:20;:::i;:::-;48890:25;;48934:1;48924:35;;48939:18;;:::i;:::-;48924:35;48980:1;48977;48973:9;48968:14;;48812:176;;;;:::o;48994:171::-;49033:3;49056:24;49074:5;49056:24;:::i;:::-;49047:33;;49102:4;49095:5;49092:15;49089:41;;49110:18;;:::i;:::-;49089:41;49157:1;49150:5;49146:13;49139:20;;48994:171;;;:::o;49171:180::-;49219:77;49216:1;49209:88;49316:4;49313:1;49306:15;49340:4;49337:1;49330:15

Swarm Source

ipfs://41534edca246659624d81412cfc09a0dd4e2cd50eea3f842b5dd7f629126216d

Block Transaction Gas Used Reward
view all blocks produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]
[ 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.