S Price: $0.522855 (-12.41%)

Token

FARMER (FARM)

Overview

Max Total Supply

1,000,000 FARM

Holders

6

Market

Price

$0.00 @ 0.000000 S

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
35,046.724415838818189182 FARM

Value
$0.00
0x90f70aafb542dde87a0d8f429a6852632eba3e89
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

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-03
*/

/**
 *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), "E1");
        _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;
}

// 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
    uint256 private constant TREASURY_PERCENTAGE = 25; // 25% of Sonic tokens to treasury
    uint256 private constant HOLDERS_PERCENTAGE = 75; // 75% of Sonic tokens to holders

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

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

    // Events
    event LiquidityAdded(uint256 tokenAmount, uint256 sonicAmount);
    event AirdropDistributed(uint256 amount, uint256 holdersCount);
    event TreasuryTransfer(uint256 amount);
    event SwapFailed(string reason);
    event LiquidityAddFailed(string reason);
    event AirdropFailed(string reason);
    event ProcessStarted(uint256 tokensForLiquidity, uint256 tokensForAirdrop);
    event SwapSuccessful(uint256 tokensSwapped, uint256 wethReceived);
    event SwapAndLiquidityProcessed(
        uint256 tokensSwapped,
        uint256 wethReceived,
        uint256 tokensIntoLiquidity,
        uint256 wethIntoLiquidity
    );
    event PairReservesUpdated(uint256 farmReserve, uint256 wethReserve);
    event ApprovalRefreshed(address token, address spender, uint256 amount);
    event ContractInitialized(address router, address factory, address sonic, address pair, address treasury);
    event TreasuryWalletUpdated(address oldTreasury, address newTreasury);

    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;
        address _treasuryWallet = 0x95503A306cD81e08c0c43C49FAae71165937d175;

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

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

        _mint(address(this), TOTAL_SUPPLY);
    }

    function initialize() external onlyOwner {
        require(!_initialized, "F2");
        _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), "F3");

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

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

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, amount);
    }

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        super._afterTokenTransfer(from, to, amount);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        require(from != address(0) && to != address(0), "Transfer to/from zero address");
        
        // 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) {
                try this.processLiquidityAndAirdrop() {
                    // Process successful
                } catch {
                    // If processing fails, continue with transfer
                    emit ProcessStarted(_pendingLiquidityTokens, _pendingAirdropTokens);
                }
            }
        } 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, "No pending tokens");
        require(holders.length > 0, "No holders");
        
        uint256 totalTokens = _pendingLiquidityTokens + _pendingAirdropTokens;
        require(totalTokens >= MIN_TOKENS_FOR_PROCESS, "Insufficient tokens for processing");
        
        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) {
            // Send 25% to treasury and 75% to holders
            uint256 sonicForTreasury = (sonicForAirdrop * TREASURY_PERCENTAGE) / 100;
            uint256 sonicForHolders = sonicForAirdrop - sonicForTreasury;
            
            // Send to treasury first
            if (sonicForTreasury > 0) {
                _processTreasuryTransfer(sonicForTreasury);
            }
            
            // Then distribute to holders
            if (sonicForHolders > 0) {
                _processAirdrop(sonicForHolders);
            }
        }
    }

    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);

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

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

        try metropolisRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            totalTokens,
            0,
            path,
            address(this),
            block.timestamp + 300
        ) {
            uint256 finalSonicBalance = IERC20(sonicToken).balanceOf(address(this));
            uint256 sonicReceived = finalSonicBalance - initialSonicBalance;
            emit SwapSuccessful(totalTokens, sonicReceived);
            return sonicReceived;
        } catch Error(string memory reason) {
            emit SwapFailed(reason);
            return 0;
        } catch {
            emit SwapFailed("Unknown error in swap");
            return 0;
        }
    }

    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 LiquidityAddFailed(reason);
        } catch {
            emit LiquidityAddFailed("Unknown error in addLiquidity");
        }
    }

    function _processTreasuryTransfer(uint256 sonicAmount) private {
        if (sonicAmount == 0 || treasuryWallet == address(0)) return;
        
        try IERC20(sonicToken).transfer(treasuryWallet, sonicAmount) {
            emit TreasuryTransfer(sonicAmount);
        } catch {
            emit SwapFailed("Treasury transfer failed");
        }
    }

    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, "Must provide ETH for initial liquidity");
        require(tokenAmount > 0, "Must provide token amount for initial liquidity");
        
        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), "Invalid router address");
        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, "No pending tokens");
        require(holders.length > 0, "No holders");
        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() external view returns (
        uint256 contractBalance,
        uint256 routerAllowance,
        bool pairExists,
        address pair,
        uint256 pendingLiq,
        uint256 pendingAirdrop
    ) {
        contractBalance = IERC20(address(this)).balanceOf(address(this));
        routerAllowance = IERC20(address(this)).allowance(address(this), address(metropolisRouter));
        pair = IMetropolisFactory(metropolisRouter.factory()).getPair(address(this), sonicToken);
        pairExists = pair != address(0);
        pendingLiq = _pendingLiquidityTokens;
        pendingAirdrop = _pendingAirdropTokens;
    }

    // Pair rezervlerini kontrol et
    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));
    }

    // Swap için minimum çıktı miktarını hesapla
    function getMinimumOutput(uint256 amountIn) public view returns (uint256) {
        (uint256 farmReserve, uint256 wethReserve) = getPairReserves();
        if (farmReserve == 0 || wethReserve == 0) return 0;
        
        uint256 amountInWithFee = amountIn * 997; // %0.3 işlem ücreti
        uint256 numerator = amountInWithFee * wethReserve;
        uint256 denominator = (farmReserve * 1000) + amountInWithFee;
        return numerator / denominator;
    }

    // Tüm onayları yenile
    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 {}
    }

    // Set treasury wallet (only owner)
    function setTreasuryWallet(address _treasuryWallet) external onlyOwner {
        require(_treasuryWallet != address(0), "Invalid treasury address");
        address oldTreasury = treasuryWallet;
        treasuryWallet = _treasuryWallet;
        emit TreasuryWalletUpdated(oldTreasury, _treasuryWallet);
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"holdersCount","type":"uint256"}],"name":"AirdropDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"AirdropFailed","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":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ApprovalRefreshed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"router","type":"address"},{"indexed":false,"internalType":"address","name":"factory","type":"address"},{"indexed":false,"internalType":"address","name":"sonic","type":"address"},{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"address","name":"treasury","type":"address"}],"name":"ContractInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"LiquidityAddFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"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":false,"internalType":"uint256","name":"farmReserve","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"wethReserve","type":"uint256"}],"name":"PairReservesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensForLiquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensForAirdrop","type":"uint256"}],"name":"ProcessStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"wethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"wethIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquidityProcessed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"SwapFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TreasuryTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldTreasury","type":"address"},{"indexed":false,"internalType":"address","name":"newTreasury","type":"address"}],"name":"TreasuryWalletUpdated","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":"getMinimumOutput","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":"contractBalance","type":"uint256"},{"internalType":"uint256","name":"routerAllowance","type":"uint256"},{"internalType":"bool","name":"pairExists","type":"bool"},{"internalType":"address","name":"pair","type":"address"},{"internalType":"uint256","name":"pendingLiq","type":"uint256"},{"internalType":"uint256","name":"pendingAirdrop","type":"uint256"}],"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":[{"internalType":"address","name":"_treasuryWallet","type":"address"}],"name":"setTreasuryWallet","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":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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"}]

60806040523480156200001157600080fd5b50336040518060400160405280600681526020017f4641524d455200000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4641524d000000000000000000000000000000000000000000000000000000008152508160039081620000909190620008c7565b508060049081620000a29190620008c7565b5050506001600581905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200011f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001169062000a0f565b60405180910390fd5b6200013081620003e060201b60201c565b5060007395a7e403d7cf20f675ff9273d66e94d35ba49fa390506000731570300e9cfec66c9fb0c8bc14366c86eb170ad09050600073039e2fb66102314ce7b64ce5ce3e5183bc94ad38905060007395503a306cd81e08c0c43c49faae71165937d1759050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015620002005750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156200023a5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015620002745750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b620002b6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002ad9062000a81565b60405180910390fd5b83600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003d63069d3c21bcecceda1000000620004a660201b60201c565b5050505062000bad565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000518576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200050f9062000af3565b60405180910390fd5b6200052c600083836200061360201b60201c565b806002600082825462000540919062000b44565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620005f3919062000b90565b60405180910390a36200060f600083836200062b60201b60201c565b5050565b620006268383836200064360201b60201c565b505050565b6200063e8383836200064860201b60201c565b505050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620006cf57607f821691505b602082108103620006e557620006e462000687565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200074f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000710565b6200075b868362000710565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620007a8620007a26200079c8462000773565b6200077d565b62000773565b9050919050565b6000819050919050565b620007c48362000787565b620007dc620007d382620007af565b8484546200071d565b825550505050565b600090565b620007f3620007e4565b62000800818484620007b9565b505050565b5b8181101562000828576200081c600082620007e9565b60018101905062000806565b5050565b601f82111562000877576200084181620006eb565b6200084c8462000700565b810160208510156200085c578190505b620008746200086b8562000700565b83018262000805565b50505b505050565b600082821c905092915050565b60006200089c600019846008026200087c565b1980831691505092915050565b6000620008b7838362000889565b9150826002028217905092915050565b620008d2826200064d565b67ffffffffffffffff811115620008ee57620008ed62000658565b5b620008fa8254620006b6565b620009078282856200082c565b600060209050601f8311600181146200093f57600084156200092a578287015190505b620009368582620008a9565b865550620009a6565b601f1984166200094f86620006eb565b60005b82811015620009795784890151825560018201915060208501945060208101905062000952565b8683101562000999578489015162000995601f89168262000889565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f4f31000000000000000000000000000000000000000000000000000000000000600082015250565b6000620009f7600283620009ae565b915062000a0482620009bf565b602082019050919050565b6000602082019050818103600083015262000a2a81620009e8565b9050919050565b7f4631000000000000000000000000000000000000000000000000000000000000600082015250565b600062000a69600283620009ae565b915062000a768262000a31565b602082019050919050565b6000602082019050818103600083015262000a9c8162000a5a565b9050919050565b7f4533000000000000000000000000000000000000000000000000000000000000600082015250565b600062000adb600283620009ae565b915062000ae88262000aa3565b602082019050919050565b6000602082019050818103600083015262000b0e8162000acc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000b518262000773565b915062000b5e8362000773565b925082820190508082111562000b795762000b7862000b15565b5b92915050565b62000b8a8162000773565b82525050565b600060208201905062000ba7600083018462000b7f565b92915050565b615be28062000bbd6000396000f3fe6080604052600436106102085760003560e01c806370a0823111610118578063a8602fea116100a0578063d4d7b19a1161006f578063d4d7b19a14610729578063dd62ed3e14610766578063ed9cacfe146107a3578063f2fde38b146107ba578063fd7c9fab146107e35761020f565b8063a8602fea14610683578063a9059cbb146106ac578063c026d93a146106e9578063c0d78655146107005761020f565b8063808a5457116100e7578063808a5457146105bf5780638129fc1c146105ea5780638da5cb5b1461060157806395d89b411461062c5780639df93f6c146106575761020f565b806370a08231146105175780637136982b1461055457806379304bec1461057f5780637ac84fc1146105a85761020f565b8063313ce5671161019b5780634626402b1161016a5780634626402b14610442578063573761981461046d5780635d76b04c146104965780635fe8e7cc146104c157806362b6327a146104ec5761020f565b8063313ce567146103b9578063397883d2146103e457806341a22cc2146103fb578063461a3a95146104175761020f565b80631b26c80d116101d75780631b26c80d146102d257806323b872dd14610302578063298926cb1461033f5780632a11ced01461037c5761020f565b806306fdde031461021457806308dee2b41461023f578063095ea7b31461026a57806318160ddd146102a75761020f565b3661020f57005b600080fd5b34801561022057600080fd5b5061022961080e565b6040516102369190614439565b60405180910390f35b34801561024b57600080fd5b506102546108a0565b6040516102619190614474565b60405180910390f35b34801561027657600080fd5b50610291600480360381019061028c9190614528565b6108aa565b60405161029e9190614583565b60405180910390f35b3480156102b357600080fd5b506102bc6108c6565b6040516102c99190614474565b60405180910390f35b3480156102de57600080fd5b506102e76108d0565b6040516102f9969594939291906145ad565b60405180910390f35b34801561030e57600080fd5b506103296004803603810190610324919061460e565b610b6a565b6040516103369190614583565b60405180910390f35b34801561034b57600080fd5b5061036660048036038101906103619190614661565b610b92565b6040516103739190614474565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e9190614661565b610c1a565b6040516103b0919061468e565b60405180910390f35b3480156103c557600080fd5b506103ce610c59565b6040516103db91906146c5565b60405180910390f35b3480156103f057600080fd5b506103f9610c62565b005b61041560048036038101906104109190614661565b610da6565b005b34801561042357600080fd5b5061042c6110c3565b604051610439919061468e565b60405180910390f35b34801561044e57600080fd5b506104576110e9565b604051610464919061468e565b60405180910390f35b34801561047957600080fd5b50610494600480360381019061048f9190614528565b61110f565b005b3480156104a257600080fd5b506104ab61120f565b6040516104b89190614474565b60405180910390f35b3480156104cd57600080fd5b506104d6611219565b6040516104e3919061479e565b60405180910390f35b3480156104f857600080fd5b506105016112a7565b60405161050e919061481f565b60405180910390f35b34801561052357600080fd5b5061053e6004803603810190610539919061483a565b6112cd565b60405161054b9190614474565b60405180910390f35b34801561056057600080fd5b50610569611315565b6040516105769190614474565b60405180910390f35b34801561058b57600080fd5b506105a660048036038101906105a19190614661565b611322565b005b3480156105b457600080fd5b506105bd6113f4565b005b3480156105cb57600080fd5b506105d46116a4565b6040516105e1919061468e565b60405180910390f35b3480156105f657600080fd5b506105ff6116ca565b005b34801561060d57600080fd5b50610616611e24565b604051610623919061468e565b60405180910390f35b34801561063857600080fd5b50610641611e4e565b60405161064e9190614439565b60405180910390f35b34801561066357600080fd5b5061066c611ee0565b60405161067a929190614867565b60405180910390f35b34801561068f57600080fd5b506106aa60048036038101906106a5919061483a565b6120a0565b005b3480156106b857600080fd5b506106d360048036038101906106ce9190614528565b6121bc565b6040516106e09190614583565b60405180910390f35b3480156106f557600080fd5b506106fe6121d8565b005b34801561070c57600080fd5b506107276004803603810190610722919061483a565b61252b565b005b34801561073557600080fd5b50610750600480360381019061074b919061483a565b6125e6565b60405161075d9190614583565b60405180910390f35b34801561077257600080fd5b5061078d60048036038101906107889190614890565b612606565b60405161079a9190614474565b60405180910390f35b3480156107af57600080fd5b506107b861268d565b005b3480156107c657600080fd5b506107e160048036038101906107dc919061483a565b612969565b005b3480156107ef57600080fd5b506107f86129ec565b60405161080591906148f1565b60405180910390f35b60606003805461081d9061493b565b80601f01602080910402602001604051908101604052809291908181526020018280546108499061493b565b80156108965780601f1061086b57610100808354040283529160200191610896565b820191906000526020600020905b81548152906001019060200180831161087957829003601f168201915b5050505050905090565b6000600e54905090565b6000803390506108bb818585612a12565b600191505092915050565b6000600254905090565b6000806000806000803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610912919061468e565b602060405180830381865afa15801561092f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109539190614981565b95503073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016109b29291906149ae565b602060405180830381865afa1580156109cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f39190614981565b9450600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8691906149ec565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390530600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401610ae29291906149ae565b602060405180830381865afa158015610aff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2391906149ec565b9250600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614159350600e549150600f549050909192939495565b600080339050610b7b858285612ba6565b610b86858585612c32565b60019150509392505050565b6000806000610b9f611ee0565b915091506000821480610bb25750600081145b15610bc257600092505050610c15565b60006103e585610bd29190614a48565b905060008282610be29190614a48565b90506000826103e886610bf59190614a48565b610bff9190614a8a565b90508082610c0d9190614aed565b955050505050505b919050565b600d8181548110610c2a57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b610c6a613059565b6000600e541180610c7d57506000600f54115b610cbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb390614b6a565b60405180910390fd5b6000600d8054905011610d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfb90614bd6565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610d4c57600080fd5b505af1925050508015610d5d575060015b610da3577f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd600e54600f54604051610d96929190614867565b60405180910390a1610da4565b5b565b610dae613059565b60003411610df1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de890614c68565b60405180910390fd5b60008111610e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2b90614cfa565b60405180910390fd5b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e6e919061468e565b602060405180830381865afa158015610e8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eaf9190614981565b1015610ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee790614d8c565b60405180910390fd5b610f1d30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612a12565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71934308460008033426040518863ffffffff1660e01b8152600401610f8496959493929190614de7565b60606040518083038185885af193505050508015610fc057506040513d601f19601f82011682018060405250810190610fbd9190614e48565b60015b61102d57610ff230600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000612a12565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102490614ee7565b60405180910390fd5b5050507f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b8134604051611061929190614867565b60405180910390a1600047905060008111156110bf573373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156110bd573d6000803e3d6000fd5b505b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611117613059565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117c90614f53565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6111a9611e24565b836040518363ffffffff1660e01b81526004016111c7929190614f73565b6020604051808303816000875af11580156111e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120a9190614fc8565b505050565b6000600f54905090565b6060600d80548060200260200160405190810160405280929190818152602001828054801561129d57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611253575b5050505050905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600d80549050905090565b61132a613059565b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611364919061468e565b602060405180830381865afa158015611381573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a59190614981565b10156113e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113dd90615041565b60405180910390fd5b6113f1303383612c32565b50565b600260055403611439576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611430906150ad565b60405180910390fd5b60026005819055506000600e54118061145457506000600f54115b611493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148a90614b6a565b60405180910390fd5b6000600d80549050116114db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d290614bd6565b60405180910390fd5b6000600f54600e546114ed9190614a8a565b905068056bc75e2d6310000081101561153b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115329061513f565b60405180910390fd5b7f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd600e54600f54604051611570929190614867565b60405180910390a16000600e5490506000600f5490506000600e819055506000600f81905550600060646019856115a79190614a48565b6115b19190614aed565b9050600081856115c1919061515f565b905060006115ce826130d0565b9050600081036115f15784600e8190555083600f8190555050505050505061169a565b600060646019836116029190614a48565b61160c9190614aed565b90506000811115611622576116218482613602565b5b60008183611630919061515f565b90506000811115611691576000606460198361164c9190614a48565b6116569190614aed565b905060008183611666919061515f565b9050600082111561167b5761167a82613908565b5b600081111561168e5761168d81613a9f565b5b50505b50505050505050505b6001600581905550565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116d2613059565b601060009054906101000a900460ff1615611722576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611719906151df565b60405180910390fd5b6001601060006101000a81548160ff021916908315150217905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e6a4390530600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016117bc9291906149ae565b602060405180830381865afa1580156117d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117fd91906149ec565b600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361199657600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016119129291906149ae565b6020604051808303816000875af1158015611931573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195591906149ec565b600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1e9061524b565b60405180910390fd5b611a7430600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612a12565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611b13929190614f73565b6020604051808303816000875af1158015611b32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b569190614fc8565b611b95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8c906152b7565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611c34929190614f73565b6020604051808303816000875af1158015611c53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c779190614fc8565b503073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611cf5929190614f73565b6020604051808303816000875af1158015611d14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d389190614fc8565b507f8d67c51ad2717c9a8f4320324d93821d96e6c0dc958ef2439cb0305cbd24703b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051611e1a9594939291906152d7565b60405180910390a1565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611e5d9061493b565b80601f0160208091040260200160405190810160405280929190818152602001828054611e899061493b565b8015611ed65780601f10611eab57610100808354040283529160200191611ed6565b820191906000526020600020905b815481529060010190602001808311611eb957829003601f168201915b5050505050905090565b600080600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611f53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7791906153ac565b50915091506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611feb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200f91906149ec565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361207257826dffffffffffffffffffffffffffff16826dffffffffffffffffffffffffffff169450945050505061209c565b816dffffffffffffffffffffffffffff16836dffffffffffffffffffffffffffff16945094505050505b9091565b6120a8613059565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612117576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210e9061544b565b60405180910390fd5b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa982575859d7ad2f390dc12b23f7dab8bbda047f9d0140ac68344b27bf34bfb481836040516121b09291906149ae565b60405180910390a15050565b6000803390506121cd818585612c32565b600191505092915050565b6121e0613059565b60003073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b815260040161223f9291906149ae565b602060405180830381865afa15801561225c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122809190614981565b905069d3c21bcecceda10000008110156122cc576122cb30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1669d3c21bcecceda1000000612a12565b5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612329919061468e565b602060405180830381865afa158015612346573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236a9190614981565b90506000811115612527576000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016123f69291906149ae565b602060405180830381865afa158015612413573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124379190614981565b90508181101561252557600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016124e0929190614f73565b6020604051808303816000875af11580156124ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125239190614fc8565b505b505b5050565b612533613059565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612599906154b7565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c6020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612695613059565b6126e230600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612a12565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612781929190614f73565b6020604051808303816000875af11580156127a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c49190614fc8565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612864929190614f73565b6020604051808303816000875af19250505080156128a057506040513d601f19601f8201168201806040525081019061289d9190614fc8565b60015b156128a757505b3073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612924929190614f73565b6020604051808303816000875af192505050801561296057506040513d601f19601f8201168201806040525081019061295d9190614fc8565b60015b1561296757505b565b612971613059565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036129e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d790615523565b60405180910390fd5b6129e981613c9e565b50565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a7c5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b612abb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab29061558f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b999190614474565b60405180910390a3505050565b6000612bb28484612606565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612c2c5781811015612c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c15906155fb565b60405180910390fd5b612c2b8484848403612a12565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c9c5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b612cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd290615667565b60405180910390fd5b612ce3611e24565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612d4e5750612d1f611e24565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612d8457503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80612dba57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612dd25750601060009054906101000a900460ff16155b15612df957612de2838383613d64565b612deb83613fa5565b612df482613fa5565b613054565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612ea45750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b905080156130345760006064600584612ebd9190614a48565b612ec79190614aed565b905060008184612ed7919061515f565b9050612ee4868683613d64565b612eef863084613d64565b6064601983612efe9190614a48565b612f089190614aed565b600e6000828254612f199190614a8a565b925050819055506064601983612f2f9190614a48565b612f399190614aed565b600f6000828254612f4a9190614a8a565b9250508190555068056bc75e2d63100000600e54101580612f76575068056bc75e2d63100000600f5410155b8015612f8757506000600d80549050115b1561302d573073ffffffffffffffffffffffffffffffffffffffff16637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612fd457600080fd5b505af1925050508015612fe5575060015b61302b577f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd600e54600f5460405161301e929190614867565b60405180910390a161302c565b5b5b5050613040565b61303f848484613d64565b5b61304984613fa5565b61305283613fa5565b505b505050565b3373ffffffffffffffffffffffffffffffffffffffff16613078611e24565b73ffffffffffffffffffffffffffffffffffffffff16146130ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c5906156d3565b60405180910390fd5b565b60008082036130e257600090506135fd565b61312f30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612a12565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016131ce929190614f73565b6020604051808303816000875af11580156131ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132119190614fc8565b506000600267ffffffffffffffff81111561322f5761322e6156f3565b5b60405190808252806020026020018201604052801561325d5781602001602082028036833780820191505090505b509050308160008151811061327557613274615722565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106132e6576132e5615722565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161337d919061468e565b602060405180830381865afa15801561339a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133be9190614981565b9050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d795856000853061012c426134119190614a8a565b6040518663ffffffff1660e01b8152600401613431959493929190615751565b600060405180830381600087803b15801561344b57600080fd5b505af192505050801561345c575060015b61350c576134686157b8565b806308c379a0036134ca575061347c61580b565b8061348757506134cc565b7f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec0723816040516134b69190614439565b60405180910390a1600093505050506135fd565b505b7f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec07236040516134f9906158e7565b60405180910390a16000925050506135fd565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613569919061468e565b602060405180830381865afa158015613586573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135aa9190614981565b9050600082826135ba919061515f565b90507fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc0186826040516135ed929190614867565b60405180910390a1809450505050505b919050565b60008214806136115750600081145b6139045761364230600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612a12565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016136c1929190614f73565b6020604051808303816000875af11580156136e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137049190614fc8565b50600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e3370030600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685856064601e6064613779919061515f565b896137849190614a48565b61378e9190614aed565b6064601e606461379e919061515f565b896137a99190614a48565b6137b39190614aed565b3061012c426137c29190614a8a565b6040518963ffffffff1660e01b81526004016137e5989796959493929190615907565b6060604051808303816000875af192505050801561382157506040513d601f19601f8201168201806040525081019061381e9190614e48565b60015b6138c65761382d6157b8565b806308c379a003613889575061384161580b565b8061384c575061388b565b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad8160405161387b9190614439565b60405180910390a1506138c1565b505b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad6040516138b8906159d1565b60405180910390a15b613903565b5050507f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b82826040516138fa929190614867565b60405180910390a15b5b5050565b60008114806139655750600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b613a9c57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016139e8929190614f73565b6020604051808303816000875af1925050508015613a2457506040513d601f19601f82011682018060405250810190613a219190614fc8565b60015b613a62577f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec0723604051613a5590615a3d565b60405180910390a1613a9b565b507f81f40cfa7691027044b117aa50764b33eaa2223ca9f761d5ff1c316a33d65ad281604051613a929190614474565b60405180910390a15b5b50565b6000811480613ab357506000600d80549050145b613c9b576000600d8054905082613aca9190614aed565b905060008103613ada5750613c9b565b60005b600d8054905081108015613af15750606481105b15613c5a57600073ffffffffffffffffffffffffffffffffffffffff16600d8281548110613b2257613b21615722565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613c4657600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600d8381548110613bba57613bb9615722565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401613c03929190614f73565b6020604051808303816000875af1925050508015613c3f57506040513d601f19601f82011682018060405250810190613c3c9190614fc8565b60015b15613c4757505b5b8080613c5290615a5d565b915050613add565b507f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c21782600d80549050604051613c91929190614867565b60405180910390a1505b50565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613dce5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b613e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e0490615af1565b60405180910390fd5b613e188383836141ef565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e9590615b5d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613f8c9190614474565b60405180910390a3613f9f8484846141ff565b50505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561402f57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b156141ec57600061403f826112cd565b90506000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050678ac7230489e8000082101580156140a8575080155b1561416d576001600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600d839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506141e9565b678ac7230489e80000821080156141815750805b156141e8576000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506141e78361420f565b5b5b50505b50565b6141fa83838361439f565b505050565b61420a8383836143a4565b505050565b60005b600d8054905081101561439b578173ffffffffffffffffffffffffffffffffffffffff16600d828154811061424a57614249615722565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361438857600d6001600d805490506142a4919061515f565b815481106142b5576142b4615722565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d82815481106142f4576142f3615722565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600d80548061434e5761434d615b7d565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561439b565b808061439390615a5d565b915050614212565b5050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156143e35780820151818401526020810190506143c8565b60008484015250505050565b6000601f19601f8301169050919050565b600061440b826143a9565b61441581856143b4565b93506144258185602086016143c5565b61442e816143ef565b840191505092915050565b600060208201905081810360008301526144538184614400565b905092915050565b6000819050919050565b61446e8161445b565b82525050565b60006020820190506144896000830184614465565b92915050565b6000604051905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006144c98261449e565b9050919050565b6144d9816144be565b81146144e457600080fd5b50565b6000813590506144f6816144d0565b92915050565b6145058161445b565b811461451057600080fd5b50565b600081359050614522816144fc565b92915050565b6000806040838503121561453f5761453e614499565b5b600061454d858286016144e7565b925050602061455e85828601614513565b9150509250929050565b60008115159050919050565b61457d81614568565b82525050565b60006020820190506145986000830184614574565b92915050565b6145a7816144be565b82525050565b600060c0820190506145c26000830189614465565b6145cf6020830188614465565b6145dc6040830187614574565b6145e9606083018661459e565b6145f66080830185614465565b61460360a0830184614465565b979650505050505050565b60008060006060848603121561462757614626614499565b5b6000614635868287016144e7565b9350506020614646868287016144e7565b925050604061465786828701614513565b9150509250925092565b60006020828403121561467757614676614499565b5b600061468584828501614513565b91505092915050565b60006020820190506146a3600083018461459e565b92915050565b600060ff82169050919050565b6146bf816146a9565b82525050565b60006020820190506146da60008301846146b6565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614715816144be565b82525050565b6000614727838361470c565b60208301905092915050565b6000602082019050919050565b600061474b826146e0565b61475581856146eb565b9350614760836146fc565b8060005b83811015614791578151614778888261471b565b975061478383614733565b925050600181019050614764565b5085935050505092915050565b600060208201905081810360008301526147b88184614740565b905092915050565b6000819050919050565b60006147e56147e06147db8461449e565b6147c0565b61449e565b9050919050565b60006147f7826147ca565b9050919050565b6000614809826147ec565b9050919050565b614819816147fe565b82525050565b60006020820190506148346000830184614810565b92915050565b6000602082840312156148505761484f614499565b5b600061485e848285016144e7565b91505092915050565b600060408201905061487c6000830185614465565b6148896020830184614465565b9392505050565b600080604083850312156148a7576148a6614499565b5b60006148b5858286016144e7565b92505060206148c6858286016144e7565b9150509250929050565b60006148db826147ec565b9050919050565b6148eb816148d0565b82525050565b600060208201905061490660008301846148e2565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061495357607f821691505b6020821081036149665761496561490c565b5b50919050565b60008151905061497b816144fc565b92915050565b60006020828403121561499757614996614499565b5b60006149a58482850161496c565b91505092915050565b60006040820190506149c3600083018561459e565b6149d0602083018461459e565b9392505050565b6000815190506149e6816144d0565b92915050565b600060208284031215614a0257614a01614499565b5b6000614a10848285016149d7565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614a538261445b565b9150614a5e8361445b565b9250828202614a6c8161445b565b91508282048414831517614a8357614a82614a19565b5b5092915050565b6000614a958261445b565b9150614aa08361445b565b9250828201905080821115614ab857614ab7614a19565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614af88261445b565b9150614b038361445b565b925082614b1357614b12614abe565b5b828204905092915050565b7f4e6f2070656e64696e6720746f6b656e73000000000000000000000000000000600082015250565b6000614b546011836143b4565b9150614b5f82614b1e565b602082019050919050565b60006020820190508181036000830152614b8381614b47565b9050919050565b7f4e6f20686f6c6465727300000000000000000000000000000000000000000000600082015250565b6000614bc0600a836143b4565b9150614bcb82614b8a565b602082019050919050565b60006020820190508181036000830152614bef81614bb3565b9050919050565b7f4d7573742070726f766964652045544820666f7220696e697469616c206c697160008201527f7569646974790000000000000000000000000000000000000000000000000000602082015250565b6000614c526026836143b4565b9150614c5d82614bf6565b604082019050919050565b60006020820190508181036000830152614c8181614c45565b9050919050565b7f4d7573742070726f7669646520746f6b656e20616d6f756e7420666f7220696e60008201527f697469616c206c69717569646974790000000000000000000000000000000000602082015250565b6000614ce4602f836143b4565b9150614cef82614c88565b604082019050919050565b60006020820190508181036000830152614d1381614cd7565b9050919050565b7f496e73756666696369656e7420746f6b656e2062616c616e636520696e20636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b6000614d766026836143b4565b9150614d8182614d1a565b604082019050919050565b60006020820190508181036000830152614da581614d69565b9050919050565b6000819050919050565b6000614dd1614dcc614dc784614dac565b6147c0565b61445b565b9050919050565b614de181614db6565b82525050565b600060c082019050614dfc600083018961459e565b614e096020830188614465565b614e166040830187614dd8565b614e236060830186614dd8565b614e30608083018561459e565b614e3d60a0830184614465565b979650505050505050565b600080600060608486031215614e6157614e60614499565b5b6000614e6f8682870161496c565b9350506020614e808682870161496c565b9250506040614e918682870161496c565b9150509250925092565b7f4661696c656420746f20616464206c6971756964697479000000000000000000600082015250565b6000614ed16017836143b4565b9150614edc82614e9b565b602082019050919050565b60006020820190508181036000830152614f0081614ec4565b9050919050565b7f43616e6e6f7420726573637565204641524d455220746f6b656e730000000000600082015250565b6000614f3d601b836143b4565b9150614f4882614f07565b602082019050919050565b60006020820190508181036000830152614f6c81614f30565b9050919050565b6000604082019050614f88600083018561459e565b614f956020830184614465565b9392505050565b614fa581614568565b8114614fb057600080fd5b50565b600081519050614fc281614f9c565b92915050565b600060208284031215614fde57614fdd614499565b5b6000614fec84828501614fb3565b91505092915050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b600061502b6014836143b4565b915061503682614ff5565b602082019050919050565b6000602082019050818103600083015261505a8161501e565b9050919050565b7f5231000000000000000000000000000000000000000000000000000000000000600082015250565b60006150976002836143b4565b91506150a282615061565b602082019050919050565b600060208201905081810360008301526150c68161508a565b9050919050565b7f496e73756666696369656e7420746f6b656e7320666f722070726f636573736960008201527f6e67000000000000000000000000000000000000000000000000000000000000602082015250565b60006151296022836143b4565b9150615134826150cd565b604082019050919050565b600060208201905081810360008301526151588161511c565b9050919050565b600061516a8261445b565b91506151758361445b565b925082820390508181111561518d5761518c614a19565b5b92915050565b7f4632000000000000000000000000000000000000000000000000000000000000600082015250565b60006151c96002836143b4565b91506151d482615193565b602082019050919050565b600060208201905081810360008301526151f8816151bc565b9050919050565b7f4633000000000000000000000000000000000000000000000000000000000000600082015250565b60006152356002836143b4565b9150615240826151ff565b602082019050919050565b6000602082019050818103600083015261526481615228565b9050919050565b7f4634000000000000000000000000000000000000000000000000000000000000600082015250565b60006152a16002836143b4565b91506152ac8261526b565b602082019050919050565b600060208201905081810360008301526152d081615294565b9050919050565b600060a0820190506152ec600083018861459e565b6152f9602083018761459e565b615306604083018661459e565b615313606083018561459e565b615320608083018461459e565b9695505050505050565b60006dffffffffffffffffffffffffffff82169050919050565b61534d8161532a565b811461535857600080fd5b50565b60008151905061536a81615344565b92915050565b600063ffffffff82169050919050565b61538981615370565b811461539457600080fd5b50565b6000815190506153a681615380565b92915050565b6000806000606084860312156153c5576153c4614499565b5b60006153d38682870161535b565b93505060206153e48682870161535b565b92505060406153f586828701615397565b9150509250925092565b7f496e76616c696420747265617375727920616464726573730000000000000000600082015250565b60006154356018836143b4565b9150615440826153ff565b602082019050919050565b6000602082019050818103600083015261546481615428565b9050919050565b7f496e76616c696420726f75746572206164647265737300000000000000000000600082015250565b60006154a16016836143b4565b91506154ac8261546b565b602082019050919050565b600060208201905081810360008301526154d081615494565b9050919050565b7f4f31000000000000000000000000000000000000000000000000000000000000600082015250565b600061550d6002836143b4565b9150615518826154d7565b602082019050919050565b6000602082019050818103600083015261553c81615500565b9050919050565b7f4534000000000000000000000000000000000000000000000000000000000000600082015250565b60006155796002836143b4565b915061558482615543565b602082019050919050565b600060208201905081810360008301526155a88161556c565b9050919050565b7f4535000000000000000000000000000000000000000000000000000000000000600082015250565b60006155e56002836143b4565b91506155f0826155af565b602082019050919050565b60006020820190508181036000830152615614816155d8565b9050919050565b7f5472616e7366657220746f2f66726f6d207a65726f2061646472657373000000600082015250565b6000615651601d836143b4565b915061565c8261561b565b602082019050919050565b6000602082019050818103600083015261568081615644565b9050919050565b7f4f32000000000000000000000000000000000000000000000000000000000000600082015250565b60006156bd6002836143b4565b91506156c882615687565b602082019050919050565b600060208201905081810360008301526156ec816156b0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060a0820190506157666000830188614465565b6157736020830187614dd8565b81810360408301526157858186614740565b9050615794606083018561459e565b6157a16080830184614465565b9695505050505050565b60008160e01c9050919050565b600060033d11156157d75760046000803e6157d46000516157ab565b90505b90565b6157e3826143ef565b810181811067ffffffffffffffff82111715615802576158016156f3565b5b80604052505050565b600060443d106158985761581d61448f565b60043d036004823e80513d602482011167ffffffffffffffff82111715615845575050615898565b808201805167ffffffffffffffff8111156158635750505050615898565b80602083010160043d038501811115615880575050505050615898565b61588f826020018501866157da565b82955050505050505b90565b7f556e6b6e6f776e206572726f7220696e20737761700000000000000000000000600082015250565b60006158d16015836143b4565b91506158dc8261589b565b602082019050919050565b60006020820190508181036000830152615900816158c4565b9050919050565b60006101008201905061591d600083018b61459e565b61592a602083018a61459e565b6159376040830189614465565b6159446060830188614465565b6159516080830187614465565b61595e60a0830186614465565b61596b60c083018561459e565b61597860e0830184614465565b9998505050505050505050565b7f556e6b6e6f776e206572726f7220696e206164644c6971756964697479000000600082015250565b60006159bb601d836143b4565b91506159c682615985565b602082019050919050565b600060208201905081810360008301526159ea816159ae565b9050919050565b7f5472656173757279207472616e73666572206661696c65640000000000000000600082015250565b6000615a276018836143b4565b9150615a32826159f1565b602082019050919050565b60006020820190508181036000830152615a5681615a1a565b9050919050565b6000615a688261445b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615a9a57615a99614a19565b5b600182019050919050565b7f4531000000000000000000000000000000000000000000000000000000000000600082015250565b6000615adb6002836143b4565b9150615ae682615aa5565b602082019050919050565b60006020820190508181036000830152615b0a81615ace565b9050919050565b7f4532000000000000000000000000000000000000000000000000000000000000600082015250565b6000615b476002836143b4565b9150615b5282615b11565b602082019050919050565b60006020820190508181036000830152615b7681615b3a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220aff8bb6d40094de6a762242079e37e9f59855ca136ec2ebf1022aacd2b682b5a64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102085760003560e01c806370a0823111610118578063a8602fea116100a0578063d4d7b19a1161006f578063d4d7b19a14610729578063dd62ed3e14610766578063ed9cacfe146107a3578063f2fde38b146107ba578063fd7c9fab146107e35761020f565b8063a8602fea14610683578063a9059cbb146106ac578063c026d93a146106e9578063c0d78655146107005761020f565b8063808a5457116100e7578063808a5457146105bf5780638129fc1c146105ea5780638da5cb5b1461060157806395d89b411461062c5780639df93f6c146106575761020f565b806370a08231146105175780637136982b1461055457806379304bec1461057f5780637ac84fc1146105a85761020f565b8063313ce5671161019b5780634626402b1161016a5780634626402b14610442578063573761981461046d5780635d76b04c146104965780635fe8e7cc146104c157806362b6327a146104ec5761020f565b8063313ce567146103b9578063397883d2146103e457806341a22cc2146103fb578063461a3a95146104175761020f565b80631b26c80d116101d75780631b26c80d146102d257806323b872dd14610302578063298926cb1461033f5780632a11ced01461037c5761020f565b806306fdde031461021457806308dee2b41461023f578063095ea7b31461026a57806318160ddd146102a75761020f565b3661020f57005b600080fd5b34801561022057600080fd5b5061022961080e565b6040516102369190614439565b60405180910390f35b34801561024b57600080fd5b506102546108a0565b6040516102619190614474565b60405180910390f35b34801561027657600080fd5b50610291600480360381019061028c9190614528565b6108aa565b60405161029e9190614583565b60405180910390f35b3480156102b357600080fd5b506102bc6108c6565b6040516102c99190614474565b60405180910390f35b3480156102de57600080fd5b506102e76108d0565b6040516102f9969594939291906145ad565b60405180910390f35b34801561030e57600080fd5b506103296004803603810190610324919061460e565b610b6a565b6040516103369190614583565b60405180910390f35b34801561034b57600080fd5b5061036660048036038101906103619190614661565b610b92565b6040516103739190614474565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e9190614661565b610c1a565b6040516103b0919061468e565b60405180910390f35b3480156103c557600080fd5b506103ce610c59565b6040516103db91906146c5565b60405180910390f35b3480156103f057600080fd5b506103f9610c62565b005b61041560048036038101906104109190614661565b610da6565b005b34801561042357600080fd5b5061042c6110c3565b604051610439919061468e565b60405180910390f35b34801561044e57600080fd5b506104576110e9565b604051610464919061468e565b60405180910390f35b34801561047957600080fd5b50610494600480360381019061048f9190614528565b61110f565b005b3480156104a257600080fd5b506104ab61120f565b6040516104b89190614474565b60405180910390f35b3480156104cd57600080fd5b506104d6611219565b6040516104e3919061479e565b60405180910390f35b3480156104f857600080fd5b506105016112a7565b60405161050e919061481f565b60405180910390f35b34801561052357600080fd5b5061053e6004803603810190610539919061483a565b6112cd565b60405161054b9190614474565b60405180910390f35b34801561056057600080fd5b50610569611315565b6040516105769190614474565b60405180910390f35b34801561058b57600080fd5b506105a660048036038101906105a19190614661565b611322565b005b3480156105b457600080fd5b506105bd6113f4565b005b3480156105cb57600080fd5b506105d46116a4565b6040516105e1919061468e565b60405180910390f35b3480156105f657600080fd5b506105ff6116ca565b005b34801561060d57600080fd5b50610616611e24565b604051610623919061468e565b60405180910390f35b34801561063857600080fd5b50610641611e4e565b60405161064e9190614439565b60405180910390f35b34801561066357600080fd5b5061066c611ee0565b60405161067a929190614867565b60405180910390f35b34801561068f57600080fd5b506106aa60048036038101906106a5919061483a565b6120a0565b005b3480156106b857600080fd5b506106d360048036038101906106ce9190614528565b6121bc565b6040516106e09190614583565b60405180910390f35b3480156106f557600080fd5b506106fe6121d8565b005b34801561070c57600080fd5b506107276004803603810190610722919061483a565b61252b565b005b34801561073557600080fd5b50610750600480360381019061074b919061483a565b6125e6565b60405161075d9190614583565b60405180910390f35b34801561077257600080fd5b5061078d60048036038101906107889190614890565b612606565b60405161079a9190614474565b60405180910390f35b3480156107af57600080fd5b506107b861268d565b005b3480156107c657600080fd5b506107e160048036038101906107dc919061483a565b612969565b005b3480156107ef57600080fd5b506107f86129ec565b60405161080591906148f1565b60405180910390f35b60606003805461081d9061493b565b80601f01602080910402602001604051908101604052809291908181526020018280546108499061493b565b80156108965780601f1061086b57610100808354040283529160200191610896565b820191906000526020600020905b81548152906001019060200180831161087957829003601f168201915b5050505050905090565b6000600e54905090565b6000803390506108bb818585612a12565b600191505092915050565b6000600254905090565b6000806000806000803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610912919061468e565b602060405180830381865afa15801561092f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109539190614981565b95503073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016109b29291906149ae565b602060405180830381865afa1580156109cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f39190614981565b9450600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8691906149ec565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390530600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401610ae29291906149ae565b602060405180830381865afa158015610aff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2391906149ec565b9250600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614159350600e549150600f549050909192939495565b600080339050610b7b858285612ba6565b610b86858585612c32565b60019150509392505050565b6000806000610b9f611ee0565b915091506000821480610bb25750600081145b15610bc257600092505050610c15565b60006103e585610bd29190614a48565b905060008282610be29190614a48565b90506000826103e886610bf59190614a48565b610bff9190614a8a565b90508082610c0d9190614aed565b955050505050505b919050565b600d8181548110610c2a57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b610c6a613059565b6000600e541180610c7d57506000600f54115b610cbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb390614b6a565b60405180910390fd5b6000600d8054905011610d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfb90614bd6565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610d4c57600080fd5b505af1925050508015610d5d575060015b610da3577f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd600e54600f54604051610d96929190614867565b60405180910390a1610da4565b5b565b610dae613059565b60003411610df1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de890614c68565b60405180910390fd5b60008111610e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2b90614cfa565b60405180910390fd5b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e6e919061468e565b602060405180830381865afa158015610e8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eaf9190614981565b1015610ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee790614d8c565b60405180910390fd5b610f1d30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612a12565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71934308460008033426040518863ffffffff1660e01b8152600401610f8496959493929190614de7565b60606040518083038185885af193505050508015610fc057506040513d601f19601f82011682018060405250810190610fbd9190614e48565b60015b61102d57610ff230600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000612a12565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102490614ee7565b60405180910390fd5b5050507f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b8134604051611061929190614867565b60405180910390a1600047905060008111156110bf573373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156110bd573d6000803e3d6000fd5b505b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611117613059565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117c90614f53565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6111a9611e24565b836040518363ffffffff1660e01b81526004016111c7929190614f73565b6020604051808303816000875af11580156111e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120a9190614fc8565b505050565b6000600f54905090565b6060600d80548060200260200160405190810160405280929190818152602001828054801561129d57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611253575b5050505050905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600d80549050905090565b61132a613059565b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611364919061468e565b602060405180830381865afa158015611381573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a59190614981565b10156113e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113dd90615041565b60405180910390fd5b6113f1303383612c32565b50565b600260055403611439576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611430906150ad565b60405180910390fd5b60026005819055506000600e54118061145457506000600f54115b611493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148a90614b6a565b60405180910390fd5b6000600d80549050116114db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d290614bd6565b60405180910390fd5b6000600f54600e546114ed9190614a8a565b905068056bc75e2d6310000081101561153b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115329061513f565b60405180910390fd5b7f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd600e54600f54604051611570929190614867565b60405180910390a16000600e5490506000600f5490506000600e819055506000600f81905550600060646019856115a79190614a48565b6115b19190614aed565b9050600081856115c1919061515f565b905060006115ce826130d0565b9050600081036115f15784600e8190555083600f8190555050505050505061169a565b600060646019836116029190614a48565b61160c9190614aed565b90506000811115611622576116218482613602565b5b60008183611630919061515f565b90506000811115611691576000606460198361164c9190614a48565b6116569190614aed565b905060008183611666919061515f565b9050600082111561167b5761167a82613908565b5b600081111561168e5761168d81613a9f565b5b50505b50505050505050505b6001600581905550565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116d2613059565b601060009054906101000a900460ff1615611722576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611719906151df565b60405180910390fd5b6001601060006101000a81548160ff021916908315150217905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e6a4390530600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016117bc9291906149ae565b602060405180830381865afa1580156117d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117fd91906149ec565b600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361199657600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016119129291906149ae565b6020604051808303816000875af1158015611931573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195591906149ec565b600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1e9061524b565b60405180910390fd5b611a7430600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612a12565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611b13929190614f73565b6020604051808303816000875af1158015611b32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b569190614fc8565b611b95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8c906152b7565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611c34929190614f73565b6020604051808303816000875af1158015611c53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c779190614fc8565b503073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611cf5929190614f73565b6020604051808303816000875af1158015611d14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d389190614fc8565b507f8d67c51ad2717c9a8f4320324d93821d96e6c0dc958ef2439cb0305cbd24703b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051611e1a9594939291906152d7565b60405180910390a1565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611e5d9061493b565b80601f0160208091040260200160405190810160405280929190818152602001828054611e899061493b565b8015611ed65780601f10611eab57610100808354040283529160200191611ed6565b820191906000526020600020905b815481529060010190602001808311611eb957829003601f168201915b5050505050905090565b600080600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611f53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7791906153ac565b50915091506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611feb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200f91906149ec565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361207257826dffffffffffffffffffffffffffff16826dffffffffffffffffffffffffffff169450945050505061209c565b816dffffffffffffffffffffffffffff16836dffffffffffffffffffffffffffff16945094505050505b9091565b6120a8613059565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612117576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210e9061544b565b60405180910390fd5b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa982575859d7ad2f390dc12b23f7dab8bbda047f9d0140ac68344b27bf34bfb481836040516121b09291906149ae565b60405180910390a15050565b6000803390506121cd818585612c32565b600191505092915050565b6121e0613059565b60003073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b815260040161223f9291906149ae565b602060405180830381865afa15801561225c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122809190614981565b905069d3c21bcecceda10000008110156122cc576122cb30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1669d3c21bcecceda1000000612a12565b5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612329919061468e565b602060405180830381865afa158015612346573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236a9190614981565b90506000811115612527576000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016123f69291906149ae565b602060405180830381865afa158015612413573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124379190614981565b90508181101561252557600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016124e0929190614f73565b6020604051808303816000875af11580156124ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125239190614fc8565b505b505b5050565b612533613059565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612599906154b7565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c6020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612695613059565b6126e230600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612a12565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612781929190614f73565b6020604051808303816000875af11580156127a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c49190614fc8565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612864929190614f73565b6020604051808303816000875af19250505080156128a057506040513d601f19601f8201168201806040525081019061289d9190614fc8565b60015b156128a757505b3073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612924929190614f73565b6020604051808303816000875af192505050801561296057506040513d601f19601f8201168201806040525081019061295d9190614fc8565b60015b1561296757505b565b612971613059565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036129e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d790615523565b60405180910390fd5b6129e981613c9e565b50565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a7c5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b612abb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab29061558f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b999190614474565b60405180910390a3505050565b6000612bb28484612606565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612c2c5781811015612c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c15906155fb565b60405180910390fd5b612c2b8484848403612a12565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c9c5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b612cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd290615667565b60405180910390fd5b612ce3611e24565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612d4e5750612d1f611e24565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612d8457503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80612dba57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612dd25750601060009054906101000a900460ff16155b15612df957612de2838383613d64565b612deb83613fa5565b612df482613fa5565b613054565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612ea45750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b905080156130345760006064600584612ebd9190614a48565b612ec79190614aed565b905060008184612ed7919061515f565b9050612ee4868683613d64565b612eef863084613d64565b6064601983612efe9190614a48565b612f089190614aed565b600e6000828254612f199190614a8a565b925050819055506064601983612f2f9190614a48565b612f399190614aed565b600f6000828254612f4a9190614a8a565b9250508190555068056bc75e2d63100000600e54101580612f76575068056bc75e2d63100000600f5410155b8015612f8757506000600d80549050115b1561302d573073ffffffffffffffffffffffffffffffffffffffff16637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612fd457600080fd5b505af1925050508015612fe5575060015b61302b577f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd600e54600f5460405161301e929190614867565b60405180910390a161302c565b5b5b5050613040565b61303f848484613d64565b5b61304984613fa5565b61305283613fa5565b505b505050565b3373ffffffffffffffffffffffffffffffffffffffff16613078611e24565b73ffffffffffffffffffffffffffffffffffffffff16146130ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c5906156d3565b60405180910390fd5b565b60008082036130e257600090506135fd565b61312f30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612a12565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016131ce929190614f73565b6020604051808303816000875af11580156131ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132119190614fc8565b506000600267ffffffffffffffff81111561322f5761322e6156f3565b5b60405190808252806020026020018201604052801561325d5781602001602082028036833780820191505090505b509050308160008151811061327557613274615722565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106132e6576132e5615722565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161337d919061468e565b602060405180830381865afa15801561339a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133be9190614981565b9050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d795856000853061012c426134119190614a8a565b6040518663ffffffff1660e01b8152600401613431959493929190615751565b600060405180830381600087803b15801561344b57600080fd5b505af192505050801561345c575060015b61350c576134686157b8565b806308c379a0036134ca575061347c61580b565b8061348757506134cc565b7f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec0723816040516134b69190614439565b60405180910390a1600093505050506135fd565b505b7f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec07236040516134f9906158e7565b60405180910390a16000925050506135fd565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613569919061468e565b602060405180830381865afa158015613586573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135aa9190614981565b9050600082826135ba919061515f565b90507fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc0186826040516135ed929190614867565b60405180910390a1809450505050505b919050565b60008214806136115750600081145b6139045761364230600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612a12565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016136c1929190614f73565b6020604051808303816000875af11580156136e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137049190614fc8565b50600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e3370030600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685856064601e6064613779919061515f565b896137849190614a48565b61378e9190614aed565b6064601e606461379e919061515f565b896137a99190614a48565b6137b39190614aed565b3061012c426137c29190614a8a565b6040518963ffffffff1660e01b81526004016137e5989796959493929190615907565b6060604051808303816000875af192505050801561382157506040513d601f19601f8201168201806040525081019061381e9190614e48565b60015b6138c65761382d6157b8565b806308c379a003613889575061384161580b565b8061384c575061388b565b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad8160405161387b9190614439565b60405180910390a1506138c1565b505b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad6040516138b8906159d1565b60405180910390a15b613903565b5050507f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b82826040516138fa929190614867565b60405180910390a15b5b5050565b60008114806139655750600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b613a9c57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016139e8929190614f73565b6020604051808303816000875af1925050508015613a2457506040513d601f19601f82011682018060405250810190613a219190614fc8565b60015b613a62577f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec0723604051613a5590615a3d565b60405180910390a1613a9b565b507f81f40cfa7691027044b117aa50764b33eaa2223ca9f761d5ff1c316a33d65ad281604051613a929190614474565b60405180910390a15b5b50565b6000811480613ab357506000600d80549050145b613c9b576000600d8054905082613aca9190614aed565b905060008103613ada5750613c9b565b60005b600d8054905081108015613af15750606481105b15613c5a57600073ffffffffffffffffffffffffffffffffffffffff16600d8281548110613b2257613b21615722565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613c4657600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600d8381548110613bba57613bb9615722565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401613c03929190614f73565b6020604051808303816000875af1925050508015613c3f57506040513d601f19601f82011682018060405250810190613c3c9190614fc8565b60015b15613c4757505b5b8080613c5290615a5d565b915050613add565b507f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c21782600d80549050604051613c91929190614867565b60405180910390a1505b50565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613dce5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b613e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e0490615af1565b60405180910390fd5b613e188383836141ef565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e9590615b5d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613f8c9190614474565b60405180910390a3613f9f8484846141ff565b50505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561402f57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b156141ec57600061403f826112cd565b90506000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050678ac7230489e8000082101580156140a8575080155b1561416d576001600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600d839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506141e9565b678ac7230489e80000821080156141815750805b156141e8576000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506141e78361420f565b5b5b50505b50565b6141fa83838361439f565b505050565b61420a8383836143a4565b505050565b60005b600d8054905081101561439b578173ffffffffffffffffffffffffffffffffffffffff16600d828154811061424a57614249615722565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361438857600d6001600d805490506142a4919061515f565b815481106142b5576142b4615722565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d82815481106142f4576142f3615722565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600d80548061434e5761434d615b7d565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561439b565b808061439390615a5d565b915050614212565b5050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156143e35780820151818401526020810190506143c8565b60008484015250505050565b6000601f19601f8301169050919050565b600061440b826143a9565b61441581856143b4565b93506144258185602086016143c5565b61442e816143ef565b840191505092915050565b600060208201905081810360008301526144538184614400565b905092915050565b6000819050919050565b61446e8161445b565b82525050565b60006020820190506144896000830184614465565b92915050565b6000604051905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006144c98261449e565b9050919050565b6144d9816144be565b81146144e457600080fd5b50565b6000813590506144f6816144d0565b92915050565b6145058161445b565b811461451057600080fd5b50565b600081359050614522816144fc565b92915050565b6000806040838503121561453f5761453e614499565b5b600061454d858286016144e7565b925050602061455e85828601614513565b9150509250929050565b60008115159050919050565b61457d81614568565b82525050565b60006020820190506145986000830184614574565b92915050565b6145a7816144be565b82525050565b600060c0820190506145c26000830189614465565b6145cf6020830188614465565b6145dc6040830187614574565b6145e9606083018661459e565b6145f66080830185614465565b61460360a0830184614465565b979650505050505050565b60008060006060848603121561462757614626614499565b5b6000614635868287016144e7565b9350506020614646868287016144e7565b925050604061465786828701614513565b9150509250925092565b60006020828403121561467757614676614499565b5b600061468584828501614513565b91505092915050565b60006020820190506146a3600083018461459e565b92915050565b600060ff82169050919050565b6146bf816146a9565b82525050565b60006020820190506146da60008301846146b6565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614715816144be565b82525050565b6000614727838361470c565b60208301905092915050565b6000602082019050919050565b600061474b826146e0565b61475581856146eb565b9350614760836146fc565b8060005b83811015614791578151614778888261471b565b975061478383614733565b925050600181019050614764565b5085935050505092915050565b600060208201905081810360008301526147b88184614740565b905092915050565b6000819050919050565b60006147e56147e06147db8461449e565b6147c0565b61449e565b9050919050565b60006147f7826147ca565b9050919050565b6000614809826147ec565b9050919050565b614819816147fe565b82525050565b60006020820190506148346000830184614810565b92915050565b6000602082840312156148505761484f614499565b5b600061485e848285016144e7565b91505092915050565b600060408201905061487c6000830185614465565b6148896020830184614465565b9392505050565b600080604083850312156148a7576148a6614499565b5b60006148b5858286016144e7565b92505060206148c6858286016144e7565b9150509250929050565b60006148db826147ec565b9050919050565b6148eb816148d0565b82525050565b600060208201905061490660008301846148e2565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061495357607f821691505b6020821081036149665761496561490c565b5b50919050565b60008151905061497b816144fc565b92915050565b60006020828403121561499757614996614499565b5b60006149a58482850161496c565b91505092915050565b60006040820190506149c3600083018561459e565b6149d0602083018461459e565b9392505050565b6000815190506149e6816144d0565b92915050565b600060208284031215614a0257614a01614499565b5b6000614a10848285016149d7565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614a538261445b565b9150614a5e8361445b565b9250828202614a6c8161445b565b91508282048414831517614a8357614a82614a19565b5b5092915050565b6000614a958261445b565b9150614aa08361445b565b9250828201905080821115614ab857614ab7614a19565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614af88261445b565b9150614b038361445b565b925082614b1357614b12614abe565b5b828204905092915050565b7f4e6f2070656e64696e6720746f6b656e73000000000000000000000000000000600082015250565b6000614b546011836143b4565b9150614b5f82614b1e565b602082019050919050565b60006020820190508181036000830152614b8381614b47565b9050919050565b7f4e6f20686f6c6465727300000000000000000000000000000000000000000000600082015250565b6000614bc0600a836143b4565b9150614bcb82614b8a565b602082019050919050565b60006020820190508181036000830152614bef81614bb3565b9050919050565b7f4d7573742070726f766964652045544820666f7220696e697469616c206c697160008201527f7569646974790000000000000000000000000000000000000000000000000000602082015250565b6000614c526026836143b4565b9150614c5d82614bf6565b604082019050919050565b60006020820190508181036000830152614c8181614c45565b9050919050565b7f4d7573742070726f7669646520746f6b656e20616d6f756e7420666f7220696e60008201527f697469616c206c69717569646974790000000000000000000000000000000000602082015250565b6000614ce4602f836143b4565b9150614cef82614c88565b604082019050919050565b60006020820190508181036000830152614d1381614cd7565b9050919050565b7f496e73756666696369656e7420746f6b656e2062616c616e636520696e20636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b6000614d766026836143b4565b9150614d8182614d1a565b604082019050919050565b60006020820190508181036000830152614da581614d69565b9050919050565b6000819050919050565b6000614dd1614dcc614dc784614dac565b6147c0565b61445b565b9050919050565b614de181614db6565b82525050565b600060c082019050614dfc600083018961459e565b614e096020830188614465565b614e166040830187614dd8565b614e236060830186614dd8565b614e30608083018561459e565b614e3d60a0830184614465565b979650505050505050565b600080600060608486031215614e6157614e60614499565b5b6000614e6f8682870161496c565b9350506020614e808682870161496c565b9250506040614e918682870161496c565b9150509250925092565b7f4661696c656420746f20616464206c6971756964697479000000000000000000600082015250565b6000614ed16017836143b4565b9150614edc82614e9b565b602082019050919050565b60006020820190508181036000830152614f0081614ec4565b9050919050565b7f43616e6e6f7420726573637565204641524d455220746f6b656e730000000000600082015250565b6000614f3d601b836143b4565b9150614f4882614f07565b602082019050919050565b60006020820190508181036000830152614f6c81614f30565b9050919050565b6000604082019050614f88600083018561459e565b614f956020830184614465565b9392505050565b614fa581614568565b8114614fb057600080fd5b50565b600081519050614fc281614f9c565b92915050565b600060208284031215614fde57614fdd614499565b5b6000614fec84828501614fb3565b91505092915050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b600061502b6014836143b4565b915061503682614ff5565b602082019050919050565b6000602082019050818103600083015261505a8161501e565b9050919050565b7f5231000000000000000000000000000000000000000000000000000000000000600082015250565b60006150976002836143b4565b91506150a282615061565b602082019050919050565b600060208201905081810360008301526150c68161508a565b9050919050565b7f496e73756666696369656e7420746f6b656e7320666f722070726f636573736960008201527f6e67000000000000000000000000000000000000000000000000000000000000602082015250565b60006151296022836143b4565b9150615134826150cd565b604082019050919050565b600060208201905081810360008301526151588161511c565b9050919050565b600061516a8261445b565b91506151758361445b565b925082820390508181111561518d5761518c614a19565b5b92915050565b7f4632000000000000000000000000000000000000000000000000000000000000600082015250565b60006151c96002836143b4565b91506151d482615193565b602082019050919050565b600060208201905081810360008301526151f8816151bc565b9050919050565b7f4633000000000000000000000000000000000000000000000000000000000000600082015250565b60006152356002836143b4565b9150615240826151ff565b602082019050919050565b6000602082019050818103600083015261526481615228565b9050919050565b7f4634000000000000000000000000000000000000000000000000000000000000600082015250565b60006152a16002836143b4565b91506152ac8261526b565b602082019050919050565b600060208201905081810360008301526152d081615294565b9050919050565b600060a0820190506152ec600083018861459e565b6152f9602083018761459e565b615306604083018661459e565b615313606083018561459e565b615320608083018461459e565b9695505050505050565b60006dffffffffffffffffffffffffffff82169050919050565b61534d8161532a565b811461535857600080fd5b50565b60008151905061536a81615344565b92915050565b600063ffffffff82169050919050565b61538981615370565b811461539457600080fd5b50565b6000815190506153a681615380565b92915050565b6000806000606084860312156153c5576153c4614499565b5b60006153d38682870161535b565b93505060206153e48682870161535b565b92505060406153f586828701615397565b9150509250925092565b7f496e76616c696420747265617375727920616464726573730000000000000000600082015250565b60006154356018836143b4565b9150615440826153ff565b602082019050919050565b6000602082019050818103600083015261546481615428565b9050919050565b7f496e76616c696420726f75746572206164647265737300000000000000000000600082015250565b60006154a16016836143b4565b91506154ac8261546b565b602082019050919050565b600060208201905081810360008301526154d081615494565b9050919050565b7f4f31000000000000000000000000000000000000000000000000000000000000600082015250565b600061550d6002836143b4565b9150615518826154d7565b602082019050919050565b6000602082019050818103600083015261553c81615500565b9050919050565b7f4534000000000000000000000000000000000000000000000000000000000000600082015250565b60006155796002836143b4565b915061558482615543565b602082019050919050565b600060208201905081810360008301526155a88161556c565b9050919050565b7f4535000000000000000000000000000000000000000000000000000000000000600082015250565b60006155e56002836143b4565b91506155f0826155af565b602082019050919050565b60006020820190508181036000830152615614816155d8565b9050919050565b7f5472616e7366657220746f2f66726f6d207a65726f2061646472657373000000600082015250565b6000615651601d836143b4565b915061565c8261561b565b602082019050919050565b6000602082019050818103600083015261568081615644565b9050919050565b7f4f32000000000000000000000000000000000000000000000000000000000000600082015250565b60006156bd6002836143b4565b91506156c882615687565b602082019050919050565b600060208201905081810360008301526156ec816156b0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060a0820190506157666000830188614465565b6157736020830187614dd8565b81810360408301526157858186614740565b9050615794606083018561459e565b6157a16080830184614465565b9695505050505050565b60008160e01c9050919050565b600060033d11156157d75760046000803e6157d46000516157ab565b90505b90565b6157e3826143ef565b810181811067ffffffffffffffff82111715615802576158016156f3565b5b80604052505050565b600060443d106158985761581d61448f565b60043d036004823e80513d602482011167ffffffffffffffff82111715615845575050615898565b808201805167ffffffffffffffff8111156158635750505050615898565b80602083010160043d038501811115615880575050505050615898565b61588f826020018501866157da565b82955050505050505b90565b7f556e6b6e6f776e206572726f7220696e20737761700000000000000000000000600082015250565b60006158d16015836143b4565b91506158dc8261589b565b602082019050919050565b60006020820190508181036000830152615900816158c4565b9050919050565b60006101008201905061591d600083018b61459e565b61592a602083018a61459e565b6159376040830189614465565b6159446060830188614465565b6159516080830187614465565b61595e60a0830186614465565b61596b60c083018561459e565b61597860e0830184614465565b9998505050505050505050565b7f556e6b6e6f776e206572726f7220696e206164644c6971756964697479000000600082015250565b60006159bb601d836143b4565b91506159c682615985565b602082019050919050565b600060208201905081810360008301526159ea816159ae565b9050919050565b7f5472656173757279207472616e73666572206661696c65640000000000000000600082015250565b6000615a276018836143b4565b9150615a32826159f1565b602082019050919050565b60006020820190508181036000830152615a5681615a1a565b9050919050565b6000615a688261445b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615a9a57615a99614a19565b5b600182019050919050565b7f4531000000000000000000000000000000000000000000000000000000000000600082015250565b6000615adb6002836143b4565b9150615ae682615aa5565b602082019050919050565b60006020820190508181036000830152615b0a81615ace565b9050919050565b7f4532000000000000000000000000000000000000000000000000000000000000600082015250565b6000615b476002836143b4565b9150615b5282615b11565b602082019050919050565b60006020820190508181036000830152615b7681615b3a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220aff8bb6d40094de6a762242079e37e9f59855ca136ec2ebf1022aacd2b682b5a64736f6c63430008130033

Deployed Bytecode Sourcemap

8423:19327:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2882:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23812:118;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3749:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3176:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25242:654;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;3947:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26432:472;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9666:24;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3084:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24111:401;;;;;;;;;;;;;:::i;:::-;;21970:1074;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9490:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9557:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23246:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23938:114;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21796:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9392:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3283:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21686:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23495:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16035:2293;;;;;;;;;;;;;:::i;:::-;;9522:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11633:971;;;;;;;;;;;;;:::i;:::-;;1861:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2981:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25941:427;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;27397:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3409:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24520:691;;;;;;;;;;;;;:::i;:::-;;23052:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9619:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3599:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26942:406;;;;;;;;;;;;;:::i;:::-;;2064:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9440:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2882:91;2927:13;2960:5;2953:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2882:91;:::o;23812:118::-;23872:7;23899:23;;23892:30;;23812:118;:::o;3749:190::-;3823:4;3840:13;3856:10;3840:26;;3877:32;3886:5;3893:7;3902:6;3877:8;:32::i;:::-;3927:4;3920:11;;;3749:190;;;;:::o;3176:99::-;3228:7;3255:12;;3248:19;;3176:99;:::o;25242:654::-;25298:23;25332;25366:15;25392:12;25415:18;25444:22;25518:4;25503:31;;;25543:4;25503:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25485:64;;25593:4;25578:31;;;25618:4;25633:16;;;;;;;;;;;25578:73;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25560:91;;25688:16;;;;;;;;;;;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25669:54;;;25732:4;25739:10;;;;;;;;;;;25669:81;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25662:88;;25790:1;25774:18;;:4;:18;;;;25761:31;;25816:23;;25803:36;;25867:21;;25850:38;;25242:654;;;;;;:::o;3947:250::-;4035:4;4052:15;4070:10;4052:28;;4091:38;4107:4;4113:7;4122:6;4091:15;:38::i;:::-;4140:27;4150:4;4156:2;4160:6;4140:9;:27::i;:::-;4185:4;4178:11;;;3947:250;;;;;:::o;26432:472::-;26497:7;26518:19;26539;26562:17;:15;:17::i;:::-;26517:62;;;;26609:1;26594:11;:16;:36;;;;26629:1;26614:11;:16;26594:36;26590:50;;;26639:1;26632:8;;;;;;26590:50;26661:23;26698:3;26687:8;:14;;;;:::i;:::-;26661:40;;26735:17;26773:11;26755:15;:29;;;;:::i;:::-;26735:49;;26795:19;26840:15;26832:4;26818:11;:18;;;;:::i;:::-;26817:38;;;;:::i;:::-;26795:60;;26885:11;26873:9;:23;;;;:::i;:::-;26866:30;;;;;;;26432:472;;;;:::o;9666:24::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3084:84::-;3133:5;3158:2;3151:9;;3084:84;:::o;24111:401::-;1820:13;:11;:13::i;:::-;24204:1:::1;24178:23;;:27;:56;;;;24233:1;24209:21;;:25;24178:56;24170:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;24292:1;24275:7;:14;;;;:18;24267:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;24323:4;:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;24319:186;;24431:62;24446:23;;24471:21;;24431:62;;;;;;;:::i;:::-;;;;;;;;24319:186;;;;24111:401::o:0;21970:1074::-;1820:13;:11;:13::i;:::-;22078:1:::1;22066:9;:13;22058:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22155:1;22141:11;:15;22133:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;22301:11;22266:4;22251:31;;;22291:4;22251:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;22229:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;22391:63;22408:4;22423:16;;;;;;;;;;;22442:11;22391:8;:63::i;:::-;22471:16;;;;;;;;;;;:32;;;22511:9;22544:4;22564:11;22590:1;22606::::0;22622:10:::1;22647:15;22471:202;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;22467:412;;22766:53;22783:4;22798:16;;;;;;;;;;;22817:1;22766:8;:53::i;:::-;22834:33;;;;;;;;;;:::i;:::-;;;;;;;;22467:412;;;;22694:38;22709:11;22722:9;22694:38;;;;;;;:::i;:::-;;;;;;;;22891:20;22914:21;22891:44;;22965:1;22950:12;:16;22946:91;;;22991:10;22983:28;;:42;23012:12;22983:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;22946:91;22047:997;21970:1074:::0;:::o;9490:25::-;;;;;;;;;;;;;:::o;9557:29::-;;;;;;;;;;;;;:::o;23246:208::-;1820:13;:11;:13::i;:::-;23357:4:::1;23339:23;;:6;:23;;::::0;23331:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23412:6;23405:23;;;23429:7;:5;:7::i;:::-;23438;23405:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23246:208:::0;;:::o;23938:114::-;23996:7;24023:21;;24016:28;;23938:114;:::o;21796:96::-;21841:16;21877:7;21870:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21796:96;:::o;9392:41::-;;;;;;;;;;;;;:::o;3283:118::-;3348:7;3375:9;:18;3385:7;3375:18;;;;;;;;;;;;;;;;3368:25;;3283:118;;;:::o;21686:98::-;21735:7;21762;:14;;;;21755:21;;21686:98;:::o;23495:266::-;1820:13;:11;:13::i;:::-;23644:6:::1;23609:4;23594:31;;;23634:4;23594:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;23572:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;23709:44;23727:4;23734:10;23746:6;23709:9;:44::i;:::-;23495:266:::0;:::o;16035:2293::-;1114:1;1260:7;;:19;1252:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;1114:1;1297:7;:18;;;;16140:1:::1;16114:23;;:27;:56;;;;16169:1;16145:21;;:25;16114:56;16106:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;16228:1;16211:7;:14;;;;:18;16203:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;16265:19;16313:21;;16287:23;;:47;;;;:::i;:::-;16265:69;;8880:12;16353:11;:37;;16345:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;16455:62;16470:23;;16495:21;;16455:62;;;;;;;:::i;:::-;;;;;;;;16564:27;16594:23;;16564:53;;16628:25;16656:21;;16628:49;;16714:1;16688:23;:27;;;;16750:1;16726:21;:25;;;;16809:26;16877:3;9059:2;16839:11;:34;;;;:::i;:::-;16838:42;;;;:::i;:::-;16809:71;;16891:20;16928:18;16914:11;:32;;;;:::i;:::-;16891:55;;17005:21;17029:26;17042:12;17029;:26::i;:::-;17005:50;;17087:1;17070:13;:18:::0;17066:228:::1;;17186:19;17160:23;:45;;;;17244:17;17220:21;:41;;;;17276:7;;;;;;;;17066:228;17384:25;17453:3;9059:2;17413:13;:36;;;;:::i;:::-;17412:44;;;;:::i;:::-;17384:72;;17491:1;17471:17;:21;17467:110;;;17509:56;17527:18;17547:17;17509;:56::i;:::-;17467:110;17663:23;17705:17;17689:13;:33;;;;:::i;:::-;17663:59;;17755:1;17737:15;:19;17733:588;;;17829:24;17898:3;9224:2;17857:15;:37;;;;:::i;:::-;17856:45;;;;:::i;:::-;17829:72;;17916:23;17960:16;17942:15;:34;;;;:::i;:::-;17916:60;;18067:1;18048:16;:20;18044:103;;;18089:42;18114:16;18089:24;:42::i;:::-;18044:103;18240:1;18222:15;:19;18218:92;;;18262:32;18278:15;18262;:32::i;:::-;18218:92;17758:563;;17733:588;16095:2233;;;;;;;;1326:1;1070::::0;1338:7;:22;;;;16035:2293::o;9522:28::-;;;;;;;;;;;;;:::o;11633:971::-;1820:13;:11;:13::i;:::-;11694:12:::1;;;;;;;;;;;11693:13;11685:28;;;;;;;;;;;;:::i;:::-;;;;;;;;;11739:4;11724:12;;:19;;;;;;;;;;;;;;;;;;11815:17;;;;;;;;;;;:25;;;11849:4;11856:10;;;;;;;;;;;11815:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11799:13;;:68;;;;;;;;;;;;;;;;;;11962:1;11937:27;;:13;;;;;;;;;;;:27;;::::0;11933:131:::1;;11997:17;;;;;;;;;;;:28;;;12034:4;12041:10;;;;;;;;;;;11997:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11981:13;;:71;;;;;;;;;;;;;;;;;;11933:131;12117:1;12092:27;;:13;;;;;;;;;;;:27;;::::0;12084:42:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;12139:69;12156:4;12171:16;;;;;;;;;;;12190:17;12139:8;:69::i;:::-;12244:10;;;;;;;;;;;12237:26;;;12272:16;;;;;;;;;;;12291:17;12237:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12229:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;12334:10;;;;;;;;;;;12327:26;;;12354:13;;;;;;;;;;;12369:17;12327:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12413:4;12398:29;;;12428:13;;;;;;;;;;;12443:17;12398:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12479:117;12507:16;;;;;;;;;;;12534:17;;;;;;;;;;;12554:10;;;;;;;;;;;12566:13;;;;;;;;;;;12581:14;;;;;;;;;;;12479:117;;;;;;;;;;:::i;:::-;;;;;;;;11633:971::o:0;1861:87::-;1907:7;1934:6;;;;;;;;;;;1927:13;;1861:87;:::o;2981:95::-;3028:13;3061:7;3054:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2981:95;:::o;25941:427::-;25989:19;26010;26043:16;26061;26098:13;;;;;;;;;;;26082:42;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26042:84;;;;;26137:14;26170:13;;;;;;;;;;;26154:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26137:56;;26226:4;26208:23;;:6;:23;;;26204:101;;26264:8;26256:17;;26283:8;26275:17;;26248:45;;;;;;;;;26204:101;26331:8;26323:17;;26350:8;26342:17;;26315:45;;;;;;;25941:427;;;:::o;27397:313::-;1820:13;:11;:13::i;:::-;27514:1:::1;27487:29;;:15;:29;;::::0;27479:66:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;27556:19;27578:14;;;;;;;;;;;27556:36;;27620:15;27603:14;;:32;;;;;;;;;;;;;;;;;;27651:51;27673:11;27686:15;27651:51;;;;;;;:::i;:::-;;;;;;;;27468:242;27397:313:::0;:::o;3409:182::-;3479:4;3496:13;3512:10;3496:26;;3533:28;3543:5;3550:2;3554:6;3533:9;:28::i;:::-;3579:4;3572:11;;;3409:182;;;;:::o;24520:691::-;1820:13;:11;:13::i;:::-;24587:21:::1;24626:4;24611:31;;;24651:4;24666:16;;;;;;;;;;;24611:73;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24587:97;;8539:18;24699:13;:28;24695:125;;;24744:64;24761:4;24776:16;;;;;;;;;;;8539:18;24744:8;:64::i;:::-;24695:125;24832:19;24861:10;;;;;;;;;;;24854:28;;;24891:4;24854:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24832:65;;24926:1;24912:11;:15;24908:296;;;24944:21;24975:10;;;;;;;;;;;24968:28;;;25005:4;25020:16;;;;;;;;;;;24968:70;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24944:94;;25073:11;25057:13;:27;25053:140;;;25112:10;;;;;;;;;;;25105:26;;;25140:16;;;;;;;;;;;25159:17;25105:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25053:140;24929:275;24908:296;24576:635;;24520:691::o:0;23052:186::-;1820:13;:11;:13::i;:::-;23145:1:::1;23126:21;;:7;:21;;::::0;23118:56:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23222:7;23185:16;;:45;;;;;;;;;;;;;;;;;;23052:186:::0;:::o;9619:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;3599:142::-;3679:7;3706:11;:18;3718:5;3706:18;;;;;;;;;;;;;;;:27;3725:7;3706:27;;;;;;;;;;;;;;;;3699:34;;3599:142;;;;:::o;26942:406::-;1820:13;:11;:13::i;:::-;27003:69:::1;27020:4;27035:16;;;;;;;;;;;27054:17;27003:8;:69::i;:::-;27090:10;;;;;;;;;;;27083:26;;;27118:16;;;;;;;;;;;27137:17;27083:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27187:10;;;;;;;;;;;27180:26;;;27207:13;;;;;;;;;;;27222:17;27180:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;27176:76:::0;::::1;;;;27281:4;27266:29;;;27296:13;;;;;;;;;;;27311:17;27266:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;27262:79:::0;::::1;;;;26942:406::o:0;2064:165::-;1820:13;:11;:13::i;:::-;2173:1:::1;2153:22;;:8;:22;;::::0;2145:37:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2193:28;2212:8;2193:18;:28::i;:::-;2064:165:::0;:::o;9440:43::-;;;;;;;;;;;;;:::o;5128:256::-;5247:1;5230:19;;:5;:19;;;;:44;;;;;5272:1;5253:21;;:7;:21;;;;5230:44;5222:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;5322:6;5292:11;:18;5304:5;5292:18;;;;;;;;;;;;;;;:27;5311:7;5292:27;;;;;;;;;;;;;;;:36;;;;5360:7;5344:32;;5353:5;5344:32;;;5369:6;5344:32;;;;;;:::i;:::-;;;;;;;;5128:256;;;:::o;5392:392::-;5493:24;5520:25;5530:5;5537:7;5520:9;:25::i;:::-;5493:52;;5580:17;5560:16;:37;5556:221;;5642:6;5622:16;:26;;5614:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;5699:51;5708:5;5715:7;5743:6;5724:16;:25;5699:8;:51::i;:::-;5556:221;5482:302;5392:392;;;:::o;13016:2112::-;13172:1;13156:18;;:4;:18;;;;:38;;;;;13192:1;13178:16;;:2;:16;;;;13156:38;13148:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;13315:7;:5;:7::i;:::-;13307:15;;:4;:15;;;:32;;;;13332:7;:5;:7::i;:::-;13326:13;;:2;:13;;;13307:32;:57;;;;13359:4;13343:21;;:4;:21;;;13307:57;:80;;;;13382:4;13368:19;;:2;:19;;;13307:80;:97;;;;13392:12;;;;;;;;;;;13391:13;13307:97;13303:250;;;13421:33;13437:4;13443:2;13447:6;13421:15;:33::i;:::-;13469:19;13483:4;13469:13;:19::i;:::-;13503:17;13517:2;13503:13;:17::i;:::-;13535:7;;13303:250;13565:16;13590:13;;;;;;;;;;;13584:19;;:2;:19;;;:44;;;;13615:13;;;;;;;;;;;13607:21;;:4;:21;;;13584:44;13565:63;;13643:11;13639:1362;;;13713:16;13754:3;8600:1;13733:6;:17;;;;:::i;:::-;13732:25;;;;:::i;:::-;13713:44;;13772:22;13806:8;13797:6;:17;;;;:::i;:::-;13772:42;;13899:41;13915:4;13921:2;13925:14;13899:15;:41::i;:::-;14015:46;14031:4;14045;14052:8;14015:15;:46::i;:::-;14202:3;8655:2;14174:8;:24;;;;:::i;:::-;14173:32;;;;:::i;:::-;14146:23;;:59;;;;;;;:::i;:::-;;;;;;;;14295:3;8711:2;14269:8;:22;;;;:::i;:::-;14268:30;;;;:::i;:::-;14243:21;;:55;;;;;;;:::i;:::-;;;;;;;;8880:12;14399:23;;:49;;:118;;;;8880:12;14470:21;;:47;;14399:118;14398:160;;;;;14557:1;14540:7;:14;;;;:18;14398:160;14394:486;;;14583:4;:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14579:286;;14783:62;14798:23;;14823:21;;14783:62;;;;;;;:::i;:::-;;;;;;;;14579:286;;;;14394:486;13656:1235;;13639:1362;;;14956:33;14972:4;14978:2;14982:6;14956:15;:33::i;:::-;13639:1362;15073:19;15087:4;15073:13;:19::i;:::-;15103:17;15117:2;15103:13;:17::i;:::-;13137:1991;13016:2112;;;;:::o;1956:100::-;2031:10;2020:21;;:7;:5;:7::i;:::-;:21;;;2012:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;1956:100::o;18336:1224::-;18396:7;18435:1;18420:11;:16;18416:30;;18445:1;18438:8;;;;18416:30;18495:69;18512:4;18527:16;;;;;;;;;;;18546:17;18495:8;:69::i;:::-;18582:10;;;;;;;;;;;18575:26;;;18610:16;;;;;;;;;;;18629:17;18575:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18660:21;18698:1;18684:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18660:40;;18729:4;18711;18716:1;18711:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;18755:10;;;;;;;;;;;18745:4;18750:1;18745:7;;;;;;;;:::i;:::-;;;;;;;:20;;;;;;;;;;;18778:27;18815:10;;;;;;;;;;;18808:28;;;18845:4;18808:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18778:73;;18868:16;;;;;;;;;;;:70;;;18953:11;18979:1;18995:4;19022;19060:3;19042:15;:21;;;;:::i;:::-;18868:206;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18864:689;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;19403:18;19414:6;19403:18;;;;;;:::i;:::-;;;;;;;;19443:1;19436:8;;;;;;;18864:689;;;19483:35;;;;;;:::i;:::-;;;;;;;;19540:1;19533:8;;;;;;18864:689;19090:25;19125:10;;;;;;;;;;;19118:28;;;19155:4;19118:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19090:71;;19176:21;19220:19;19200:17;:39;;;;:::i;:::-;19176:63;;19259:42;19274:11;19287:13;19259:42;;;;;;;:::i;:::-;;;;;;;;19323:13;19316:20;;;;;;18336:1224;;;;:::o;19568:1054::-;19695:1;19673:18;:23;:49;;;;19721:1;19700:17;:22;19673:49;19724:7;19669:62;19778:70;19795:4;19810:16;;;;;;;;;;;19829:18;19778:8;:70::i;:::-;19866:10;;;;;;;;;;;19859:26;;;19894:16;;;;;;;;;;;19913:17;19859:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19948:16;;;;;;;;;;;:29;;;20000:4;20020:10;;;;;;;;;;;20045:18;20078:17;20154:3;9142:2;20132:3;:18;;;;:::i;:::-;20110;:41;;;;:::i;:::-;:47;;;;:::i;:::-;20241:3;9142:2;20219:3;:18;;;;:::i;:::-;20198:17;:40;;;;:::i;:::-;:46;;;;:::i;:::-;20294:4;20332:3;20314:15;:21;;;;:::i;:::-;19948:398;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;19944:671;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;20487:26;20506:6;20487:26;;;;;;:::i;:::-;;;;;;;;20433:92;19944:671;;;;;20552:51;;;;;;:::i;:::-;;;;;;;;19944:671;;;;;;;20367:53;20382:18;20402:17;20367:53;;;;;;;:::i;:::-;;;;;;;;19944:671;19568:1054;;;:::o;20630:361::-;20723:1;20708:11;:16;:48;;;;20754:1;20728:28;;:14;;;;;;;;;;;:28;;;20708:48;20758:7;20704:61;20796:10;;;;;;;;;;;20789:27;;;20817:14;;;;;;;;;;;20833:11;20789:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;20785:199;;20934:38;;;;;;:::i;:::-;;;;;;;;20785:199;;;;20866:29;20883:11;20866:29;;;;;;:::i;:::-;;;;;;;;20785:199;20630:361;;:::o;20999:656::-;21083:1;21068:11;:16;:39;;;;21106:1;21088:7;:14;;;;:19;21068:39;21109:7;21064:52;21136:23;21176:7;:14;;;;21162:11;:28;;;;:::i;:::-;21136:54;;21224:1;21205:15;:20;21201:33;;21227:7;;;21201:33;21251:9;21246:329;21270:7;:14;;;;21266:1;:18;:29;;;;;21292:3;21288:1;:7;21266:29;21246:329;;;21343:1;21321:24;;:7;21329:1;21321:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:24;;;21317:247;;21377:10;;;;;;;;;;;21370:27;;;21398:7;21406:1;21398:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21410:15;21370:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;21366:183;21521:8;21366:183;;21317:247;21246:329;21297:3;;;;;:::i;:::-;;;;21246:329;;;;21600:47;21619:11;21632:7;:14;;;;21600:47;;;;;;;:::i;:::-;;;;;;;;21053:602;20999:656;;:::o;2237:191::-;2311:16;2330:6;;;;;;;;;;;2311:25;;2356:8;2347:6;;:17;;;;;;;;;;;;;;;;;;2411:8;2380:40;;2401:8;2380:40;;;;;;;;;;;;2300:128;2237:191;:::o;4205:507::-;4318:1;4302:18;;:4;:18;;;;:38;;;;;4338:1;4324:16;;:2;:16;;;;4302:38;4294:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;4358:38;4379:4;4385:2;4389:6;4358:20;:38::i;:::-;4407:19;4429:9;:15;4439:4;4429:15;;;;;;;;;;;;;;;;4407:37;;4478:6;4463:11;:21;;4455:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;4559:6;4545:11;:20;4527:9;:15;4537:4;4527:15;;;;;;;;;;;;;;;:38;;;;4597:6;4580:9;:13;4590:2;4580:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;4645:2;4630:26;;4639:4;4630:26;;;4649:6;4630:26;;;;;;:::i;:::-;;;;;;;;4667:37;4687:4;4693:2;4697:6;4667:19;:37::i;:::-;4283:429;4205:507;;;:::o;15136:588::-;15210:13;;;;;;;;;;;15199:24;;:7;:24;;;;:52;;;;;15246:4;15227:24;;:7;:24;;;;15199:52;15195:522;;;15268:15;15286:18;15296:7;15286:9;:18::i;:::-;15268:36;;15319:22;15344:8;:17;15353:7;15344:17;;;;;;;;;;;;;;;;;;;;;;;;;15319:42;;8773:11;15394:7;:28;;:50;;;;;15427:17;15426:18;15394:50;15390:316;;;15485:4;15465:8;:17;15474:7;15465:17;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;15508:7;15521;15508:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15390:316;;;8773:11;15555:7;:27;:48;;;;;15586:17;15555:48;15551:155;;;15644:5;15624:8;:17;15633:7;15624:17;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;15668:22;15682:7;15668:13;:22::i;:::-;15551:155;15390:316;15253:464;;15195:522;15136:588;:::o;12612:195::-;12755:44;12782:4;12788:2;12792:6;12755:26;:44::i;:::-;12612:195;;;:::o;12815:193::-;12957:43;12983:4;12989:2;12993:6;12957:25;:43::i;:::-;12815:193;;;:::o;15732:295::-;15796:9;15791:229;15815:7;:14;;;;15811:1;:18;15791:229;;;15869:7;15855:21;;:7;15863:1;15855:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:21;;;15851:158;;15910:7;15935:1;15918:7;:14;;;;:18;;;;:::i;:::-;15910:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15897:7;15905:1;15897:10;;;;;;;;:::i;:::-;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;15956:7;:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;15988:5;;15851:158;15831:3;;;;;:::i;:::-;;;;15791:229;;;;15732:295;:::o;5792:91::-;;;;:::o;5891:90::-;;;;:::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:763::-;4149:4;4187:3;4176:9;4172:19;4164:27;;4201:71;4269:1;4258:9;4254:17;4245:6;4201:71;:::i;:::-;4282:72;4350:2;4339:9;4335:18;4326:6;4282:72;:::i;:::-;4364:66;4426:2;4415:9;4411:18;4402:6;4364:66;:::i;:::-;4440:72;4508:2;4497:9;4493:18;4484:6;4440:72;:::i;:::-;4522:73;4590:3;4579:9;4575:19;4566:6;4522:73;:::i;:::-;4605;4673:3;4662:9;4658:19;4649:6;4605:73;:::i;:::-;3922:763;;;;;;;;;:::o;4691:619::-;4768:6;4776;4784;4833:2;4821:9;4812:7;4808:23;4804:32;4801:119;;;4839:79;;:::i;:::-;4801:119;4959:1;4984:53;5029:7;5020:6;5009:9;5005:22;4984:53;:::i;:::-;4974:63;;4930:117;5086:2;5112:53;5157:7;5148:6;5137:9;5133:22;5112:53;:::i;:::-;5102:63;;5057:118;5214:2;5240:53;5285:7;5276:6;5265:9;5261:22;5240:53;:::i;:::-;5230:63;;5185:118;4691:619;;;;;:::o;5316:329::-;5375:6;5424:2;5412:9;5403:7;5399:23;5395:32;5392:119;;;5430:79;;:::i;:::-;5392:119;5550:1;5575:53;5620:7;5611:6;5600:9;5596:22;5575:53;:::i;:::-;5565:63;;5521:117;5316:329;;;;:::o;5651:222::-;5744:4;5782:2;5771:9;5767:18;5759:26;;5795:71;5863:1;5852:9;5848:17;5839:6;5795:71;:::i;:::-;5651:222;;;;:::o;5879:86::-;5914:7;5954:4;5947:5;5943:16;5932:27;;5879:86;;;:::o;5971:112::-;6054:22;6070:5;6054:22;:::i;:::-;6049:3;6042:35;5971:112;;:::o;6089:214::-;6178:4;6216:2;6205:9;6201:18;6193:26;;6229:67;6293:1;6282:9;6278:17;6269:6;6229:67;:::i;:::-;6089:214;;;;:::o;6309:114::-;6376:6;6410:5;6404:12;6394:22;;6309:114;;;:::o;6429:184::-;6528:11;6562:6;6557:3;6550:19;6602:4;6597:3;6593:14;6578:29;;6429:184;;;;:::o;6619:132::-;6686:4;6709:3;6701:11;;6739:4;6734:3;6730:14;6722:22;;6619:132;;;:::o;6757:108::-;6834:24;6852:5;6834:24;:::i;:::-;6829:3;6822:37;6757:108;;:::o;6871:179::-;6940:10;6961:46;7003:3;6995:6;6961:46;:::i;:::-;7039:4;7034:3;7030:14;7016:28;;6871:179;;;;:::o;7056:113::-;7126:4;7158;7153:3;7149:14;7141:22;;7056:113;;;:::o;7205:732::-;7324:3;7353:54;7401:5;7353:54;:::i;:::-;7423:86;7502:6;7497:3;7423:86;:::i;:::-;7416:93;;7533:56;7583:5;7533:56;:::i;:::-;7612:7;7643:1;7628:284;7653:6;7650:1;7647:13;7628:284;;;7729:6;7723:13;7756:63;7815:3;7800:13;7756:63;:::i;:::-;7749:70;;7842:60;7895:6;7842:60;:::i;:::-;7832:70;;7688:224;7675:1;7672;7668:9;7663:14;;7628:284;;;7632:14;7928:3;7921:10;;7329:608;;;7205:732;;;;:::o;7943:373::-;8086:4;8124:2;8113:9;8109:18;8101:26;;8173:9;8167:4;8163:20;8159:1;8148:9;8144:17;8137:47;8201:108;8304:4;8295:6;8201:108;:::i;:::-;8193:116;;7943:373;;;;:::o;8322:60::-;8350:3;8371:5;8364:12;;8322:60;;;:::o;8388:142::-;8438:9;8471:53;8489:34;8498:24;8516:5;8498:24;:::i;:::-;8489:34;:::i;:::-;8471:53;:::i;:::-;8458:66;;8388:142;;;:::o;8536:126::-;8586:9;8619:37;8650:5;8619:37;:::i;:::-;8606:50;;8536:126;;;:::o;8668:151::-;8743:9;8776:37;8807:5;8776:37;:::i;:::-;8763:50;;8668:151;;;:::o;8825:181::-;8937:62;8993:5;8937:62;:::i;:::-;8932:3;8925:75;8825:181;;:::o;9012:272::-;9130:4;9168:2;9157:9;9153:18;9145:26;;9181:96;9274:1;9263:9;9259:17;9250:6;9181:96;:::i;:::-;9012:272;;;;:::o;9290:329::-;9349:6;9398:2;9386:9;9377:7;9373:23;9369:32;9366:119;;;9404:79;;:::i;:::-;9366:119;9524:1;9549:53;9594:7;9585:6;9574:9;9570:22;9549:53;:::i;:::-;9539:63;;9495:117;9290:329;;;;:::o;9625:332::-;9746:4;9784:2;9773:9;9769:18;9761:26;;9797:71;9865:1;9854:9;9850:17;9841:6;9797:71;:::i;:::-;9878:72;9946:2;9935:9;9931:18;9922:6;9878:72;:::i;:::-;9625:332;;;;;:::o;9963:474::-;10031:6;10039;10088:2;10076:9;10067:7;10063:23;10059:32;10056:119;;;10094:79;;:::i;:::-;10056:119;10214:1;10239:53;10284:7;10275:6;10264:9;10260:22;10239:53;:::i;:::-;10229:63;;10185:117;10341:2;10367:53;10412:7;10403:6;10392:9;10388:22;10367:53;:::i;:::-;10357:63;;10312:118;9963:474;;;;;:::o;10443:152::-;10519:9;10552:37;10583:5;10552:37;:::i;:::-;10539:50;;10443:152;;;:::o;10601:183::-;10714:63;10771:5;10714:63;:::i;:::-;10709:3;10702:76;10601:183;;:::o;10790:274::-;10909:4;10947:2;10936:9;10932:18;10924:26;;10960:97;11054:1;11043:9;11039:17;11030:6;10960:97;:::i;:::-;10790:274;;;;:::o;11070:180::-;11118:77;11115:1;11108:88;11215:4;11212:1;11205:15;11239:4;11236:1;11229:15;11256:320;11300:6;11337:1;11331:4;11327:12;11317:22;;11384:1;11378:4;11374:12;11405:18;11395:81;;11461:4;11453:6;11449:17;11439:27;;11395:81;11523:2;11515:6;11512:14;11492:18;11489:38;11486:84;;11542:18;;:::i;:::-;11486:84;11307:269;11256:320;;;:::o;11582:143::-;11639:5;11670:6;11664:13;11655:22;;11686:33;11713:5;11686:33;:::i;:::-;11582:143;;;;:::o;11731:351::-;11801:6;11850:2;11838:9;11829:7;11825:23;11821:32;11818:119;;;11856:79;;:::i;:::-;11818:119;11976:1;12001:64;12057:7;12048:6;12037:9;12033:22;12001:64;:::i;:::-;11991:74;;11947:128;11731:351;;;;:::o;12088:332::-;12209:4;12247:2;12236:9;12232:18;12224:26;;12260:71;12328:1;12317:9;12313:17;12304:6;12260:71;:::i;:::-;12341:72;12409:2;12398:9;12394:18;12385:6;12341:72;:::i;:::-;12088:332;;;;;:::o;12426:143::-;12483:5;12514:6;12508:13;12499:22;;12530:33;12557:5;12530:33;:::i;:::-;12426:143;;;;:::o;12575:351::-;12645:6;12694:2;12682:9;12673:7;12669:23;12665:32;12662:119;;;12700:79;;:::i;:::-;12662:119;12820:1;12845:64;12901:7;12892:6;12881:9;12877:22;12845:64;:::i;:::-;12835:74;;12791:128;12575:351;;;;:::o;12932:180::-;12980:77;12977:1;12970:88;13077:4;13074:1;13067:15;13101:4;13098:1;13091:15;13118:410;13158:7;13181:20;13199:1;13181:20;:::i;:::-;13176:25;;13215:20;13233:1;13215:20;:::i;:::-;13210:25;;13270:1;13267;13263:9;13292:30;13310:11;13292:30;:::i;:::-;13281:41;;13471:1;13462:7;13458:15;13455:1;13452:22;13432:1;13425:9;13405:83;13382:139;;13501:18;;:::i;:::-;13382:139;13166:362;13118:410;;;;:::o;13534:191::-;13574:3;13593:20;13611:1;13593:20;:::i;:::-;13588:25;;13627:20;13645:1;13627:20;:::i;:::-;13622:25;;13670:1;13667;13663:9;13656:16;;13691:3;13688:1;13685:10;13682:36;;;13698:18;;:::i;:::-;13682:36;13534:191;;;;:::o;13731:180::-;13779:77;13776:1;13769:88;13876:4;13873:1;13866:15;13900:4;13897:1;13890:15;13917:185;13957:1;13974:20;13992:1;13974:20;:::i;:::-;13969:25;;14008:20;14026:1;14008:20;:::i;:::-;14003:25;;14047:1;14037:35;;14052:18;;:::i;:::-;14037:35;14094:1;14091;14087:9;14082:14;;13917:185;;;;:::o;14108:167::-;14248:19;14244:1;14236:6;14232:14;14225:43;14108:167;:::o;14281:366::-;14423:3;14444:67;14508:2;14503:3;14444:67;:::i;:::-;14437:74;;14520:93;14609:3;14520:93;:::i;:::-;14638:2;14633:3;14629:12;14622:19;;14281:366;;;:::o;14653:419::-;14819:4;14857:2;14846:9;14842:18;14834:26;;14906:9;14900:4;14896:20;14892:1;14881:9;14877:17;14870:47;14934:131;15060:4;14934:131;:::i;:::-;14926:139;;14653:419;;;:::o;15078:160::-;15218:12;15214:1;15206:6;15202:14;15195:36;15078:160;:::o;15244:366::-;15386:3;15407:67;15471:2;15466:3;15407:67;:::i;:::-;15400:74;;15483:93;15572:3;15483:93;:::i;:::-;15601:2;15596:3;15592:12;15585:19;;15244:366;;;:::o;15616:419::-;15782:4;15820:2;15809:9;15805:18;15797:26;;15869:9;15863:4;15859:20;15855:1;15844:9;15840:17;15833:47;15897:131;16023:4;15897:131;:::i;:::-;15889:139;;15616:419;;;:::o;16041:225::-;16181:34;16177:1;16169:6;16165:14;16158:58;16250:8;16245:2;16237:6;16233:15;16226:33;16041:225;:::o;16272:366::-;16414:3;16435:67;16499:2;16494:3;16435:67;:::i;:::-;16428:74;;16511:93;16600:3;16511:93;:::i;:::-;16629:2;16624:3;16620:12;16613:19;;16272:366;;;:::o;16644:419::-;16810:4;16848:2;16837:9;16833:18;16825:26;;16897:9;16891:4;16887:20;16883:1;16872:9;16868:17;16861:47;16925:131;17051:4;16925:131;:::i;:::-;16917:139;;16644:419;;;:::o;17069:234::-;17209:34;17205:1;17197:6;17193:14;17186:58;17278:17;17273:2;17265:6;17261:15;17254:42;17069:234;:::o;17309:366::-;17451:3;17472:67;17536:2;17531:3;17472:67;:::i;:::-;17465:74;;17548:93;17637:3;17548:93;:::i;:::-;17666:2;17661:3;17657:12;17650:19;;17309:366;;;:::o;17681:419::-;17847:4;17885:2;17874:9;17870:18;17862:26;;17934:9;17928:4;17924:20;17920:1;17909:9;17905:17;17898:47;17962:131;18088:4;17962:131;:::i;:::-;17954:139;;17681:419;;;:::o;18106:225::-;18246:34;18242:1;18234:6;18230:14;18223:58;18315:8;18310:2;18302:6;18298:15;18291:33;18106:225;:::o;18337:366::-;18479:3;18500:67;18564:2;18559:3;18500:67;:::i;:::-;18493:74;;18576:93;18665:3;18576:93;:::i;:::-;18694:2;18689:3;18685:12;18678:19;;18337:366;;;:::o;18709:419::-;18875:4;18913:2;18902:9;18898:18;18890:26;;18962:9;18956:4;18952:20;18948:1;18937:9;18933:17;18926:47;18990:131;19116:4;18990:131;:::i;:::-;18982:139;;18709:419;;;:::o;19134:85::-;19179:7;19208:5;19197:16;;19134:85;;;:::o;19225:158::-;19283:9;19316:61;19334:42;19343:32;19369:5;19343:32;:::i;:::-;19334:42;:::i;:::-;19316:61;:::i;:::-;19303:74;;19225:158;;;:::o;19389:147::-;19484:45;19523:5;19484:45;:::i;:::-;19479:3;19472:58;19389:147;;:::o;19542:807::-;19791:4;19829:3;19818:9;19814:19;19806:27;;19843:71;19911:1;19900:9;19896:17;19887:6;19843:71;:::i;:::-;19924:72;19992:2;19981:9;19977:18;19968:6;19924:72;:::i;:::-;20006:80;20082:2;20071:9;20067:18;20058:6;20006:80;:::i;:::-;20096;20172:2;20161:9;20157:18;20148:6;20096:80;:::i;:::-;20186:73;20254:3;20243:9;20239:19;20230:6;20186:73;:::i;:::-;20269;20337:3;20326:9;20322:19;20313:6;20269:73;:::i;:::-;19542:807;;;;;;;;;:::o;20355:663::-;20443:6;20451;20459;20508:2;20496:9;20487:7;20483:23;20479:32;20476:119;;;20514:79;;:::i;:::-;20476:119;20634:1;20659:64;20715:7;20706:6;20695:9;20691:22;20659:64;:::i;:::-;20649:74;;20605:128;20772:2;20798:64;20854:7;20845:6;20834:9;20830:22;20798:64;:::i;:::-;20788:74;;20743:129;20911:2;20937:64;20993:7;20984:6;20973:9;20969:22;20937:64;:::i;:::-;20927:74;;20882:129;20355:663;;;;;:::o;21024:173::-;21164:25;21160:1;21152:6;21148:14;21141:49;21024:173;:::o;21203:366::-;21345:3;21366:67;21430:2;21425:3;21366:67;:::i;:::-;21359:74;;21442:93;21531:3;21442:93;:::i;:::-;21560:2;21555:3;21551:12;21544:19;;21203:366;;;:::o;21575:419::-;21741:4;21779:2;21768:9;21764:18;21756:26;;21828:9;21822:4;21818:20;21814:1;21803:9;21799:17;21792:47;21856:131;21982:4;21856:131;:::i;:::-;21848:139;;21575:419;;;:::o;22000:177::-;22140:29;22136:1;22128:6;22124:14;22117:53;22000:177;:::o;22183:366::-;22325:3;22346:67;22410:2;22405:3;22346:67;:::i;:::-;22339:74;;22422:93;22511:3;22422:93;:::i;:::-;22540:2;22535:3;22531:12;22524:19;;22183:366;;;:::o;22555:419::-;22721:4;22759:2;22748:9;22744:18;22736:26;;22808:9;22802:4;22798:20;22794:1;22783:9;22779:17;22772:47;22836:131;22962:4;22836:131;:::i;:::-;22828:139;;22555:419;;;:::o;22980:332::-;23101:4;23139:2;23128:9;23124:18;23116:26;;23152:71;23220:1;23209:9;23205:17;23196:6;23152:71;:::i;:::-;23233:72;23301:2;23290:9;23286:18;23277:6;23233:72;:::i;:::-;22980:332;;;;;:::o;23318:116::-;23388:21;23403:5;23388:21;:::i;:::-;23381:5;23378:32;23368:60;;23424:1;23421;23414:12;23368:60;23318:116;:::o;23440:137::-;23494:5;23525:6;23519:13;23510:22;;23541:30;23565:5;23541:30;:::i;:::-;23440:137;;;;:::o;23583:345::-;23650:6;23699:2;23687:9;23678:7;23674:23;23670:32;23667:119;;;23705:79;;:::i;:::-;23667:119;23825:1;23850:61;23903:7;23894:6;23883:9;23879:22;23850:61;:::i;:::-;23840:71;;23796:125;23583:345;;;;:::o;23934:170::-;24074:22;24070:1;24062:6;24058:14;24051:46;23934:170;:::o;24110:366::-;24252:3;24273:67;24337:2;24332:3;24273:67;:::i;:::-;24266:74;;24349:93;24438:3;24349:93;:::i;:::-;24467:2;24462:3;24458:12;24451:19;;24110:366;;;:::o;24482:419::-;24648:4;24686:2;24675:9;24671:18;24663:26;;24735:9;24729:4;24725:20;24721:1;24710:9;24706:17;24699:47;24763:131;24889:4;24763:131;:::i;:::-;24755:139;;24482:419;;;:::o;24907:152::-;25047:4;25043:1;25035:6;25031:14;25024:28;24907:152;:::o;25065:365::-;25207:3;25228:66;25292:1;25287:3;25228:66;:::i;:::-;25221:73;;25303:93;25392:3;25303:93;:::i;:::-;25421:2;25416:3;25412:12;25405:19;;25065:365;;;:::o;25436:419::-;25602:4;25640:2;25629:9;25625:18;25617:26;;25689:9;25683:4;25679:20;25675:1;25664:9;25660:17;25653:47;25717:131;25843:4;25717:131;:::i;:::-;25709:139;;25436:419;;;:::o;25861:221::-;26001:34;25997:1;25989:6;25985:14;25978:58;26070:4;26065:2;26057:6;26053:15;26046:29;25861:221;:::o;26088:366::-;26230:3;26251:67;26315:2;26310:3;26251:67;:::i;:::-;26244:74;;26327:93;26416:3;26327:93;:::i;:::-;26445:2;26440:3;26436:12;26429:19;;26088:366;;;:::o;26460:419::-;26626:4;26664:2;26653:9;26649:18;26641:26;;26713:9;26707:4;26703:20;26699:1;26688:9;26684:17;26677:47;26741:131;26867:4;26741:131;:::i;:::-;26733:139;;26460:419;;;:::o;26885:194::-;26925:4;26945:20;26963:1;26945:20;:::i;:::-;26940:25;;26979:20;26997:1;26979:20;:::i;:::-;26974:25;;27023:1;27020;27016:9;27008:17;;27047:1;27041:4;27038:11;27035:37;;;27052:18;;:::i;:::-;27035:37;26885:194;;;;:::o;27085:152::-;27225:4;27221:1;27213:6;27209:14;27202:28;27085:152;:::o;27243:365::-;27385:3;27406:66;27470:1;27465:3;27406:66;:::i;:::-;27399:73;;27481:93;27570:3;27481:93;:::i;:::-;27599:2;27594:3;27590:12;27583:19;;27243:365;;;:::o;27614:419::-;27780:4;27818:2;27807:9;27803:18;27795:26;;27867:9;27861:4;27857:20;27853:1;27842:9;27838:17;27831:47;27895:131;28021:4;27895:131;:::i;:::-;27887:139;;27614:419;;;:::o;28039:152::-;28179:4;28175:1;28167:6;28163:14;28156:28;28039:152;:::o;28197:365::-;28339:3;28360:66;28424:1;28419:3;28360:66;:::i;:::-;28353:73;;28435:93;28524:3;28435:93;:::i;:::-;28553:2;28548:3;28544:12;28537:19;;28197:365;;;:::o;28568:419::-;28734:4;28772:2;28761:9;28757:18;28749:26;;28821:9;28815:4;28811:20;28807:1;28796:9;28792:17;28785:47;28849:131;28975:4;28849:131;:::i;:::-;28841:139;;28568:419;;;:::o;28993:152::-;29133:4;29129:1;29121:6;29117:14;29110:28;28993:152;:::o;29151:365::-;29293:3;29314:66;29378:1;29373:3;29314:66;:::i;:::-;29307:73;;29389:93;29478:3;29389:93;:::i;:::-;29507:2;29502:3;29498:12;29491:19;;29151:365;;;:::o;29522:419::-;29688:4;29726:2;29715:9;29711:18;29703:26;;29775:9;29769:4;29765:20;29761:1;29750:9;29746:17;29739:47;29803:131;29929:4;29803:131;:::i;:::-;29795:139;;29522:419;;;:::o;29947:664::-;30152:4;30190:3;30179:9;30175:19;30167:27;;30204:71;30272:1;30261:9;30257:17;30248:6;30204:71;:::i;:::-;30285:72;30353:2;30342:9;30338:18;30329:6;30285:72;:::i;:::-;30367;30435:2;30424:9;30420:18;30411:6;30367:72;:::i;:::-;30449;30517:2;30506:9;30502:18;30493:6;30449:72;:::i;:::-;30531:73;30599:3;30588:9;30584:19;30575:6;30531:73;:::i;:::-;29947:664;;;;;;;;:::o;30617:114::-;30654:7;30694:30;30687:5;30683:42;30672:53;;30617:114;;;:::o;30737:122::-;30810:24;30828:5;30810:24;:::i;:::-;30803:5;30800:35;30790:63;;30849:1;30846;30839:12;30790:63;30737:122;:::o;30865:143::-;30922:5;30953:6;30947:13;30938:22;;30969:33;30996:5;30969:33;:::i;:::-;30865:143;;;;:::o;31014:93::-;31050:7;31090:10;31083:5;31079:22;31068:33;;31014:93;;;:::o;31113:120::-;31185:23;31202:5;31185:23;:::i;:::-;31178:5;31175:34;31165:62;;31223:1;31220;31213:12;31165:62;31113:120;:::o;31239:141::-;31295:5;31326:6;31320:13;31311:22;;31342:32;31368:5;31342:32;:::i;:::-;31239:141;;;;:::o;31386:661::-;31473:6;31481;31489;31538:2;31526:9;31517:7;31513:23;31509:32;31506:119;;;31544:79;;:::i;:::-;31506:119;31664:1;31689:64;31745:7;31736:6;31725:9;31721:22;31689:64;:::i;:::-;31679:74;;31635:128;31802:2;31828:64;31884:7;31875:6;31864:9;31860:22;31828:64;:::i;:::-;31818:74;;31773:129;31941:2;31967:63;32022:7;32013:6;32002:9;31998:22;31967:63;:::i;:::-;31957:73;;31912:128;31386:661;;;;;:::o;32053:174::-;32193:26;32189:1;32181:6;32177:14;32170:50;32053:174;:::o;32233:366::-;32375:3;32396:67;32460:2;32455:3;32396:67;:::i;:::-;32389:74;;32472:93;32561:3;32472:93;:::i;:::-;32590:2;32585:3;32581:12;32574:19;;32233:366;;;:::o;32605:419::-;32771:4;32809:2;32798:9;32794:18;32786:26;;32858:9;32852:4;32848:20;32844:1;32833:9;32829:17;32822:47;32886:131;33012:4;32886:131;:::i;:::-;32878:139;;32605:419;;;:::o;33030:172::-;33170:24;33166:1;33158:6;33154:14;33147:48;33030:172;:::o;33208:366::-;33350:3;33371:67;33435:2;33430:3;33371:67;:::i;:::-;33364:74;;33447:93;33536:3;33447:93;:::i;:::-;33565:2;33560:3;33556:12;33549:19;;33208:366;;;:::o;33580:419::-;33746:4;33784:2;33773:9;33769:18;33761:26;;33833:9;33827:4;33823:20;33819:1;33808:9;33804:17;33797:47;33861:131;33987:4;33861:131;:::i;:::-;33853:139;;33580:419;;;:::o;34005:152::-;34145:4;34141:1;34133:6;34129:14;34122:28;34005:152;:::o;34163:365::-;34305:3;34326:66;34390:1;34385:3;34326:66;:::i;:::-;34319:73;;34401:93;34490:3;34401:93;:::i;:::-;34519:2;34514:3;34510:12;34503:19;;34163:365;;;:::o;34534:419::-;34700:4;34738:2;34727:9;34723:18;34715:26;;34787:9;34781:4;34777:20;34773:1;34762:9;34758:17;34751:47;34815:131;34941:4;34815:131;:::i;:::-;34807:139;;34534:419;;;:::o;34959:152::-;35099:4;35095:1;35087:6;35083:14;35076:28;34959:152;:::o;35117:365::-;35259:3;35280:66;35344:1;35339:3;35280:66;:::i;:::-;35273:73;;35355:93;35444:3;35355:93;:::i;:::-;35473:2;35468:3;35464:12;35457:19;;35117:365;;;:::o;35488:419::-;35654:4;35692:2;35681:9;35677:18;35669:26;;35741:9;35735:4;35731:20;35727:1;35716:9;35712:17;35705:47;35769:131;35895:4;35769:131;:::i;:::-;35761:139;;35488:419;;;:::o;35913:152::-;36053:4;36049:1;36041:6;36037:14;36030:28;35913:152;:::o;36071:365::-;36213:3;36234:66;36298:1;36293:3;36234:66;:::i;:::-;36227:73;;36309:93;36398:3;36309:93;:::i;:::-;36427:2;36422:3;36418:12;36411:19;;36071:365;;;:::o;36442:419::-;36608:4;36646:2;36635:9;36631:18;36623:26;;36695:9;36689:4;36685:20;36681:1;36670:9;36666:17;36659:47;36723:131;36849:4;36723:131;:::i;:::-;36715:139;;36442:419;;;:::o;36867:179::-;37007:31;37003:1;36995:6;36991:14;36984:55;36867:179;:::o;37052:366::-;37194:3;37215:67;37279:2;37274:3;37215:67;:::i;:::-;37208:74;;37291:93;37380:3;37291:93;:::i;:::-;37409:2;37404:3;37400:12;37393:19;;37052:366;;;:::o;37424:419::-;37590:4;37628:2;37617:9;37613:18;37605:26;;37677:9;37671:4;37667:20;37663:1;37652:9;37648:17;37641:47;37705:131;37831:4;37705:131;:::i;:::-;37697:139;;37424:419;;;:::o;37849:152::-;37989:4;37985:1;37977:6;37973:14;37966:28;37849:152;:::o;38007:365::-;38149:3;38170:66;38234:1;38229:3;38170:66;:::i;:::-;38163:73;;38245:93;38334:3;38245:93;:::i;:::-;38363:2;38358:3;38354:12;38347:19;;38007:365;;;:::o;38378:419::-;38544:4;38582:2;38571:9;38567:18;38559:26;;38631:9;38625:4;38621:20;38617:1;38606:9;38602:17;38595:47;38659:131;38785:4;38659:131;:::i;:::-;38651:139;;38378:419;;;:::o;38803:180::-;38851:77;38848:1;38841:88;38948:4;38945:1;38938:15;38972:4;38969:1;38962:15;38989:180;39037:77;39034:1;39027:88;39134:4;39131:1;39124:15;39158:4;39155:1;39148:15;39175:831;39438:4;39476:3;39465:9;39461:19;39453:27;;39490:71;39558:1;39547:9;39543:17;39534:6;39490:71;:::i;:::-;39571:80;39647:2;39636:9;39632:18;39623:6;39571:80;:::i;:::-;39698:9;39692:4;39688:20;39683:2;39672:9;39668:18;39661:48;39726:108;39829:4;39820:6;39726:108;:::i;:::-;39718:116;;39844:72;39912:2;39901:9;39897:18;39888:6;39844:72;:::i;:::-;39926:73;39994:3;39983:9;39979:19;39970:6;39926:73;:::i;:::-;39175:831;;;;;;;;:::o;40012:106::-;40056:8;40105:5;40100:3;40096:15;40075:36;;40012:106;;;:::o;40124:183::-;40159:3;40197:1;40179:16;40176:23;40173:128;;;40235:1;40232;40229;40214:23;40257:34;40288:1;40282:8;40257:34;:::i;:::-;40250:41;;40173:128;40124:183;:::o;40313:281::-;40396:27;40418:4;40396:27;:::i;:::-;40388:6;40384:40;40526:6;40514:10;40511:22;40490:18;40478:10;40475:34;40472:62;40469:88;;;40537:18;;:::i;:::-;40469:88;40577:10;40573:2;40566:22;40356:238;40313:281;;:::o;40600:711::-;40639:3;40677:4;40659:16;40656:26;40685:5;40653:39;40714:20;;:::i;:::-;40789:1;40771:16;40767:24;40764:1;40758:4;40743:49;40822:4;40816:11;40921:16;40914:4;40906:6;40902:17;40899:39;40866:18;40858:6;40855:30;40839:113;40836:146;;;40967:5;;;;40836:146;41013:6;41007:4;41003:17;41049:3;41043:10;41076:18;41068:6;41065:30;41062:43;;;41098:5;;;;;;41062:43;41146:6;41139:4;41134:3;41130:14;41126:27;41205:1;41187:16;41183:24;41177:4;41173:35;41168:3;41165:44;41162:57;;;41212:5;;;;;;;41162:57;41229;41277:6;41271:4;41267:17;41259:6;41255:30;41249:4;41229:57;:::i;:::-;41302:3;41295:10;;40643:668;;;;;40600:711;;:::o;41317:171::-;41457:23;41453:1;41445:6;41441:14;41434:47;41317:171;:::o;41494:366::-;41636:3;41657:67;41721:2;41716:3;41657:67;:::i;:::-;41650:74;;41733:93;41822:3;41733:93;:::i;:::-;41851:2;41846:3;41842:12;41835:19;;41494:366;;;:::o;41866:419::-;42032:4;42070:2;42059:9;42055:18;42047:26;;42119:9;42113:4;42109:20;42105:1;42094:9;42090:17;42083:47;42147:131;42273:4;42147:131;:::i;:::-;42139:139;;41866:419;;;:::o;42291:997::-;42580:4;42618:3;42607:9;42603:19;42595:27;;42632:71;42700:1;42689:9;42685:17;42676:6;42632:71;:::i;:::-;42713:72;42781:2;42770:9;42766:18;42757:6;42713:72;:::i;:::-;42795;42863:2;42852:9;42848:18;42839:6;42795:72;:::i;:::-;42877;42945:2;42934:9;42930:18;42921:6;42877:72;:::i;:::-;42959:73;43027:3;43016:9;43012:19;43003:6;42959:73;:::i;:::-;43042;43110:3;43099:9;43095:19;43086:6;43042:73;:::i;:::-;43125;43193:3;43182:9;43178:19;43169:6;43125:73;:::i;:::-;43208;43276:3;43265:9;43261:19;43252:6;43208:73;:::i;:::-;42291:997;;;;;;;;;;;:::o;43294:179::-;43434:31;43430:1;43422:6;43418:14;43411:55;43294:179;:::o;43479:366::-;43621:3;43642:67;43706:2;43701:3;43642:67;:::i;:::-;43635:74;;43718:93;43807:3;43718:93;:::i;:::-;43836:2;43831:3;43827:12;43820:19;;43479:366;;;:::o;43851:419::-;44017:4;44055:2;44044:9;44040:18;44032:26;;44104:9;44098:4;44094:20;44090:1;44079:9;44075:17;44068:47;44132:131;44258:4;44132:131;:::i;:::-;44124:139;;43851:419;;;:::o;44276:174::-;44416:26;44412:1;44404:6;44400:14;44393:50;44276:174;:::o;44456:366::-;44598:3;44619:67;44683:2;44678:3;44619:67;:::i;:::-;44612:74;;44695:93;44784:3;44695:93;:::i;:::-;44813:2;44808:3;44804:12;44797:19;;44456:366;;;:::o;44828:419::-;44994:4;45032:2;45021:9;45017:18;45009:26;;45081:9;45075:4;45071:20;45067:1;45056:9;45052:17;45045:47;45109:131;45235:4;45109:131;:::i;:::-;45101:139;;44828:419;;;:::o;45253:233::-;45292:3;45315:24;45333:5;45315:24;:::i;:::-;45306:33;;45361:66;45354:5;45351:77;45348:103;;45431:18;;:::i;:::-;45348:103;45478:1;45471:5;45467:13;45460:20;;45253:233;;;:::o;45492:152::-;45632:4;45628:1;45620:6;45616:14;45609:28;45492:152;:::o;45650:365::-;45792:3;45813:66;45877:1;45872:3;45813:66;:::i;:::-;45806:73;;45888:93;45977:3;45888:93;:::i;:::-;46006:2;46001:3;45997:12;45990:19;;45650:365;;;:::o;46021:419::-;46187:4;46225:2;46214:9;46210:18;46202:26;;46274:9;46268:4;46264:20;46260:1;46249:9;46245:17;46238:47;46302:131;46428:4;46302:131;:::i;:::-;46294:139;;46021:419;;;:::o;46446:152::-;46586:4;46582:1;46574:6;46570:14;46563:28;46446:152;:::o;46604:365::-;46746:3;46767:66;46831:1;46826:3;46767:66;:::i;:::-;46760:73;;46842:93;46931:3;46842:93;:::i;:::-;46960:2;46955:3;46951:12;46944:19;;46604:365;;;:::o;46975:419::-;47141:4;47179:2;47168:9;47164:18;47156:26;;47228:9;47222:4;47218:20;47214:1;47203:9;47199:17;47192:47;47256:131;47382:4;47256:131;:::i;:::-;47248:139;;46975:419;;;:::o;47400:180::-;47448:77;47445:1;47438:88;47545:4;47542:1;47535:15;47569:4;47566:1;47559:15

Swarm Source

ipfs://aff8bb6d40094de6a762242079e37e9f59855ca136ec2ebf1022aacd2b682b5a
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.