S Price: $0.544458 (-8.79%)

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
1,970.32875974083626736 FARM

Value
$0.00
0x95503A306cD81e08c0c43C49FAae71165937d175
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-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
    uint256 private constant MIN_TOKENS_FOR_PROCESS = 100 * 10**18; // 100 token minimum

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

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

    // Events
    event LiquidityAdded(uint256 tokenAmount, uint256 sonicAmount);
    event AirdropDistributed(uint256 amount, uint256 holdersCount);
    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);

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

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

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

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

        _mint(address(this), TOTAL_SUPPLY);
    }

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

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

    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 {
        if (from == owner() || to == owner() || from == address(this) || to == address(this)) {
            super._transfer(from, to, amount);
            _updateHolder(from);
            _updateHolder(to);
            return;
        }

        bool isSellOrBuy = to == liquidityPair || from == liquidityPair;
        if (isSellOrBuy) {
            uint256 totalTax = (amount * TAX_RATE) / 100;
            uint256 liquidityTax = (amount * LIQUIDITY_TAX) / 1000;
            uint256 airdropTax = (amount * AIRDROP_TAX) / 1000;
            
            super._transfer(from, address(this), totalTax);
            super._transfer(from, to, amount - totalTax);

            _pendingLiquidityTokens += liquidityTax;
            _pendingAirdropTokens += airdropTax;

            if ((_pendingLiquidityTokens >= MIN_TOKENS_FOR_PROCESS || _pendingAirdropTokens >= MIN_TOKENS_FOR_PROCESS) && 
                holders.length > 0) {
                _processLiquidityAndAirdrop();
            }
        } else {
            super._transfer(from, to, amount);
        }
        
        _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 _processSwap(uint256 totalTokens) private returns (uint256) {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = sonicToken;

        uint256 farmAllowance = IERC20(address(this)).allowance(address(this), address(metropolisRouter));
        if (farmAllowance < totalTokens) {
            _approve(address(this), address(metropolisRouter), 0);
            _approve(address(this), address(metropolisRouter), type(uint256).max);
        }

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

        uint256 pairWethAllowance = IERC20(sonicToken).allowance(liquidityPair, address(this));
        if (pairWethAllowance == 0) {
            try IERC20(sonicToken).approve(address(this), type(uint256).max) {} catch {}
        }

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

    function _processLiquidity(uint256 tokensForLiquidity, uint256 wethForLiquidity) private {
        if (wethForLiquidity > 0) {
            uint256 wethAllowance = IERC20(sonicToken).allowance(address(this), address(metropolisRouter));
            if (wethAllowance < wethForLiquidity) {
                IERC20(sonicToken).approve(address(metropolisRouter), 0);
                IERC20(sonicToken).approve(address(metropolisRouter), type(uint256).max);
            }

            uint256 farmAllowance = IERC20(address(this)).allowance(address(this), address(metropolisRouter));
            if (farmAllowance < tokensForLiquidity) {
                _approve(address(this), address(metropolisRouter), 0);
                _approve(address(this), address(metropolisRouter), type(uint256).max);
            }

            try metropolisRouter.addLiquidity(
                address(this),
                sonicToken,
                tokensForLiquidity,
                wethForLiquidity,
                0,
                0,
                address(this),
                block.timestamp + 300
            ) {
                emit LiquidityAdded(tokensForLiquidity, wethForLiquidity);
            } catch Error(string memory reason) {
                emit LiquidityAddFailed(reason);
                _pendingLiquidityTokens = tokensForLiquidity;
            } catch {
                emit LiquidityAddFailed("Unknown error in addLiquidity");
                _pendingLiquidityTokens = tokensForLiquidity;
            }
        }
    }

    function _processAirdrop(uint256 wethForAirdrop) private {
        if (wethForAirdrop > 0 && holders.length > 0) {
            uint256 amountPerHolder = wethForAirdrop / holders.length;
            
            if (amountPerHolder > 0) {
                for (uint256 i = 0; i < holders.length && i < 100; i++) {
                    try IERC20(sonicToken).transfer(holders[i], amountPerHolder) {
                        // Transfer successful
                    } catch Error(string memory reason) {
                        emit AirdropFailed(reason);
                        continue;
                    } catch {
                        emit AirdropFailed("Unknown error in WETH transfer");
                        continue;
                    }
                }
                
                emit AirdropDistributed(wethForAirdrop, holders.length);
            }
        }
    }

    function _processLiquidityAndAirdrop() private {
        uint256 tokensForLiquidity = _pendingLiquidityTokens;
        uint256 tokensForAirdrop = _pendingAirdropTokens;
        uint256 totalTokens = tokensForLiquidity + tokensForAirdrop;
        
        emit ProcessStarted(tokensForLiquidity, tokensForAirdrop);

        uint256 contractBalance = IERC20(address(this)).balanceOf(address(this));
        require(contractBalance >= totalTokens, "Insufficient token balance for swap");

        _pendingLiquidityTokens = 0;
        _pendingAirdropTokens = 0;
        
        uint256 currentAllowance = IERC20(address(this)).allowance(address(this), address(metropolisRouter));
        if (currentAllowance < totalTokens) {
            _approve(address(this), address(metropolisRouter), 0);
            _approve(address(this), address(metropolisRouter), TOTAL_SUPPLY);
        }

        address pair = IMetropolisFactory(metropolisRouter.factory()).getPair(address(this), sonicToken);
        require(pair != address(0), "Liquidity pair does not exist");
        require(pair == liquidityPair, "Invalid liquidity pair");

        uint256 wethBalance = _processSwap(totalTokens);
        if (wethBalance > 0) {
            uint256 wethForLiquidity = (wethBalance * tokensForLiquidity) / totalTokens;
            uint256 wethForAirdrop = wethBalance - wethForLiquidity;

            _processLiquidity(tokensForLiquidity, wethForLiquidity);
            _processAirdrop(wethForAirdrop);
        } else {
            _pendingLiquidityTokens = tokensForLiquidity;
            _pendingAirdropTokens = tokensForAirdrop;
        }
    }

    // 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;
    }

    // Process liquidity and airdrop manually if needed
    function processLiquidityAndAirdrop() external onlyOwner {
        require(_pendingLiquidityTokens > 0 || _pendingAirdropTokens > 0, "No pending tokens");
        require(holders.length > 0, "No holders");
        _processLiquidityAndAirdrop();
    }

    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 {}
    }

    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"}],"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"},{"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":[],"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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawTokensToOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b50336040518060400160405280600681526020017f4641524d455200000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4641524d00000000000000000000000000000000000000000000000000000000815250816003908162000090919062000832565b508060049081620000a2919062000832565b5050506001600581905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200011f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000116906200097a565b60405180910390fd5b62000130816200034b60201b60201c565b5060007395a7e403d7cf20f675ff9273d66e94d35ba49fa390506000731570300e9cfec66c9fb0c8bc14366c86eb170ad09050600073039e2fb66102314ce7b64ce5ce3e5183bc94ad389050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015620001e75750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015620002215750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b62000263576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200025a90620009ec565b60405180910390fd5b82600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003423069d3c21bcecceda10000006200041160201b60201c565b50505062000b18565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000483576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200047a9062000a5e565b60405180910390fd5b62000497600083836200057e60201b60201c565b8060026000828254620004ab919062000aaf565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200055e919062000afb565b60405180910390a36200057a600083836200059660201b60201c565b5050565b62000591838383620005ae60201b60201c565b505050565b620005a9838383620005b360201b60201c565b505050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200063a57607f821691505b60208210810362000650576200064f620005f2565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620006ba7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200067b565b620006c686836200067b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620007136200070d6200070784620006de565b620006e8565b620006de565b9050919050565b6000819050919050565b6200072f83620006f2565b620007476200073e826200071a565b84845462000688565b825550505050565b600090565b6200075e6200074f565b6200076b81848462000724565b505050565b5b8181101562000793576200078760008262000754565b60018101905062000771565b5050565b601f821115620007e257620007ac8162000656565b620007b7846200066b565b81016020851015620007c7578190505b620007df620007d6856200066b565b83018262000770565b50505b505050565b600082821c905092915050565b60006200080760001984600802620007e7565b1980831691505092915050565b6000620008228383620007f4565b9150826002028217905092915050565b6200083d82620005b8565b67ffffffffffffffff811115620008595762000858620005c3565b5b62000865825462000621565b6200087282828562000797565b600060209050601f831160018114620008aa576000841562000895578287015190505b620008a1858262000814565b86555062000911565b601f198416620008ba8662000656565b60005b82811015620008e457848901518255600182019150602085019450602081019050620008bd565b8683101562000904578489015162000900601f891682620007f4565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f4f31000000000000000000000000000000000000000000000000000000000000600082015250565b60006200096260028362000919565b91506200096f826200092a565b602082019050919050565b60006020820190508181036000830152620009958162000953565b9050919050565b7f4631000000000000000000000000000000000000000000000000000000000000600082015250565b6000620009d460028362000919565b9150620009e1826200099c565b602082019050919050565b6000602082019050818103600083015262000a0781620009c5565b9050919050565b7f4533000000000000000000000000000000000000000000000000000000000000600082015250565b600062000a4660028362000919565b915062000a538262000a0e565b602082019050919050565b6000602082019050818103600083015262000a798162000a37565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000abc82620006de565b915062000ac983620006de565b925082820190508082111562000ae45762000ae362000a80565b5b92915050565b62000af581620006de565b82525050565b600060208201905062000b12600083018462000aea565b92915050565b615dcb8062000b286000396000f3fe6080604052600436106101e75760003560e01c80637136982b11610102578063a9059cbb11610095578063dd62ed3e11610064578063dd62ed3e146106da578063ed9cacfe14610717578063f2fde38b1461072e578063fd7c9fab14610757576101ee565b8063a9059cbb14610620578063c026d93a1461065d578063c0d7865514610674578063d4d7b19a1461069d576101ee565b80638129fc1c116100d15780638129fc1c146105875780638da5cb5b1461059e57806395d89b41146105c95780639df93f6c146105f4576101ee565b80637136982b146104f157806379304bec1461051c5780637ac84fc114610545578063808a54571461055c576101ee565b8063313ce5671161017a5780635d76b04c116101495780635d76b04c146104335780635fe8e7cc1461045e57806362b6327a1461048957806370a08231146104b4576101ee565b8063313ce5671461039857806341a22cc2146103c3578063461a3a95146103df578063573761981461040a576101ee565b80631b26c80d116101b65780631b26c80d146102b157806323b872dd146102e1578063298926cb1461031e5780632a11ced01461035b576101ee565b806306fdde03146101f357806308dee2b41461021e578063095ea7b31461024957806318160ddd14610286576101ee565b366101ee57005b600080fd5b3480156101ff57600080fd5b50610208610782565b604051610215919061463c565b60405180910390f35b34801561022a57600080fd5b50610233610814565b6040516102409190614677565b60405180910390f35b34801561025557600080fd5b50610270600480360381019061026b919061472b565b61081e565b60405161027d9190614786565b60405180910390f35b34801561029257600080fd5b5061029b61083a565b6040516102a89190614677565b60405180910390f35b3480156102bd57600080fd5b506102c6610844565b6040516102d8969594939291906147b0565b60405180910390f35b3480156102ed57600080fd5b5061030860048036038101906103039190614811565b610ade565b6040516103159190614786565b60405180910390f35b34801561032a57600080fd5b5061034560048036038101906103409190614864565b610b06565b6040516103529190614677565b60405180910390f35b34801561036757600080fd5b50610382600480360381019061037d9190614864565b610b8e565b60405161038f9190614891565b60405180910390f35b3480156103a457600080fd5b506103ad610bcd565b6040516103ba91906148c8565b60405180910390f35b6103dd60048036038101906103d89190614864565b610bd6565b005b3480156103eb57600080fd5b506103f4610ef3565b6040516104019190614891565b60405180910390f35b34801561041657600080fd5b50610431600480360381019061042c919061472b565b610f19565b005b34801561043f57600080fd5b50610448611019565b6040516104559190614677565b60405180910390f35b34801561046a57600080fd5b50610473611023565b60405161048091906149a1565b60405180910390f35b34801561049557600080fd5b5061049e6110b1565b6040516104ab9190614a22565b60405180910390f35b3480156104c057600080fd5b506104db60048036038101906104d69190614a3d565b6110d7565b6040516104e89190614677565b60405180910390f35b3480156104fd57600080fd5b5061050661111f565b6040516105139190614677565b60405180910390f35b34801561052857600080fd5b50610543600480360381019061053e9190614864565b61112c565b005b34801561055157600080fd5b5061055a6111fe565b005b34801561056857600080fd5b506105716112aa565b60405161057e9190614891565b60405180910390f35b34801561059357600080fd5b5061059c6112d0565b005b3480156105aa57600080fd5b506105b36118af565b6040516105c09190614891565b60405180910390f35b3480156105d557600080fd5b506105de6118d9565b6040516105eb919061463c565b60405180910390f35b34801561060057600080fd5b5061060961196b565b604051610617929190614a6a565b60405180910390f35b34801561062c57600080fd5b506106476004803603810190610642919061472b565b611b2b565b6040516106549190614786565b60405180910390f35b34801561066957600080fd5b50610672611b47565b005b34801561068057600080fd5b5061069b60048036038101906106969190614a3d565b611e9a565b005b3480156106a957600080fd5b506106c460048036038101906106bf9190614a3d565b611f55565b6040516106d19190614786565b60405180910390f35b3480156106e657600080fd5b5061070160048036038101906106fc9190614a93565b611f75565b60405161070e9190614677565b60405180910390f35b34801561072357600080fd5b5061072c611ffc565b005b34801561073a57600080fd5b5061075560048036038101906107509190614a3d565b6122d8565b005b34801561076357600080fd5b5061076c61235b565b6040516107799190614af4565b60405180910390f35b60606003805461079190614b3e565b80601f01602080910402602001604051908101604052809291908181526020018280546107bd90614b3e565b801561080a5780601f106107df5761010080835404028352916020019161080a565b820191906000526020600020905b8154815290600101906020018083116107ed57829003601f168201915b5050505050905090565b6000600d54905090565b60008033905061082f818585612381565b600191505092915050565b6000600254905090565b6000806000806000803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016108869190614891565b602060405180830381865afa1580156108a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c79190614b84565b95503073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401610926929190614bb1565b602060405180830381865afa158015610943573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109679190614b84565b9450600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fa9190614bef565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390530600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401610a56929190614bb1565b602060405180830381865afa158015610a73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a979190614bef565b9250600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614159350600d549150600e549050909192939495565b600080339050610aef858285612515565b610afa8585856125a1565b60019150509392505050565b6000806000610b1361196b565b915091506000821480610b265750600081145b15610b3657600092505050610b89565b60006103e585610b469190614c4b565b905060008282610b569190614c4b565b90506000826103e886610b699190614c4b565b610b739190614c8d565b90508082610b819190614cf0565b955050505050505b919050565b600c8181548110610b9e57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b610bde612877565b60003411610c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1890614d93565b60405180910390fd5b60008111610c64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5b90614e25565b60405180910390fd5b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c9e9190614891565b602060405180830381865afa158015610cbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cdf9190614b84565b1015610d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1790614eb7565b60405180910390fd5b610d4d30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612381565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71934308460008033426040518863ffffffff1660e01b8152600401610db496959493929190614f12565b60606040518083038185885af193505050508015610df057506040513d601f19601f82011682018060405250810190610ded9190614f73565b60015b610e5d57610e2230600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000612381565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5490615012565b60405180910390fd5b5050507f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b8134604051610e91929190614a6a565b60405180910390a160004790506000811115610eef573373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610eed573d6000803e3d6000fd5b505b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610f21612877565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f869061507e565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610fb36118af565b836040518363ffffffff1660e01b8152600401610fd192919061509e565b6020604051808303816000875af1158015610ff0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101491906150f3565b505050565b6000600e54905090565b6060600c8054806020026020016040519081016040528092919081815260200182805480156110a757602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161105d575b5050505050905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600c80549050905090565b611134612877565b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161116e9190614891565b602060405180830381865afa15801561118b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111af9190614b84565b10156111f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e79061516c565b60405180910390fd5b6111fb3033836125a1565b50565b611206612877565b6000600d54118061121957506000600e54115b611258576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124f906151d8565b60405180910390fd5b6000600c80549050116112a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129790615244565b60405180910390fd5b6112a86128ee565b565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112d8612877565b600f60009054906101000a900460ff1615611328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131f906152b0565b60405180910390fd5b6001600f60006101000a81548160ff021916908315150217905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016113c2929190614bb1565b6020604051808303816000875af11580156113e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114059190614bef565b600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036114d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cd9061531c565b60405180910390fd5b61152330600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612381565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016115c292919061509e565b6020604051808303816000875af11580156115e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160591906150f3565b611644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163b90615388565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016116e392919061509e565b6020604051808303816000875af1158015611702573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172691906150f3565b503073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016117a492919061509e565b6020604051808303816000875af11580156117c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e791906150f3565b507f1aee311dae12417944704a8411a039c41e8ae395e0c0075565cb1c93934babc4600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516118a594939291906153a8565b60405180910390a1565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546118e890614b3e565b80601f016020809104026020016040519081016040528092919081815260200182805461191490614b3e565b80156119615780601f1061193657610100808354040283529160200191611961565b820191906000526020600020905b81548152906001019060200180831161194457829003601f168201915b5050505050905090565b600080600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156119de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a02919061546f565b50915091506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a9a9190614bef565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611afd57826dffffffffffffffffffffffffffff16826dffffffffffffffffffffffffffff1694509450505050611b27565b816dffffffffffffffffffffffffffff16836dffffffffffffffffffffffffffff16945094505050505b9091565b600080339050611b3c8185856125a1565b600191505092915050565b611b4f612877565b60003073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611bae929190614bb1565b602060405180830381865afa158015611bcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bef9190614b84565b905069d3c21bcecceda1000000811015611c3b57611c3a30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1669d3c21bcecceda1000000612381565b5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611c989190614891565b602060405180830381865afa158015611cb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd99190614b84565b90506000811115611e96576000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611d65929190614bb1565b602060405180830381865afa158015611d82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da69190614b84565b905081811015611e9457600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611e4f92919061509e565b6020604051808303816000875af1158015611e6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9291906150f3565b505b505b5050565b611ea2612877565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f089061550e565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b6020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612004612877565b61205130600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612381565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016120f092919061509e565b6020604051808303816000875af115801561210f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213391906150f3565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016121d392919061509e565b6020604051808303816000875af192505050801561220f57506040513d601f19601f8201168201806040525081019061220c91906150f3565b60015b1561221657505b3073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b815260040161229392919061509e565b6020604051808303816000875af19250505080156122cf57506040513d601f19601f820116820180604052508101906122cc91906150f3565b60015b156122d657505b565b6122e0612877565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361234f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123469061557a565b60405180910390fd5b61235881612dca565b50565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123eb5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61242a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612421906155e6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125089190614677565b60405180910390a3505050565b60006125218484611f75565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461259b578181101561258d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258490615652565b60405180910390fd5b61259a8484848403612381565b5b50505050565b6125a96118af565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061261457506125e56118af565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8061264a57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8061268057503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156126a757612690838383612e90565b612699836130d1565b6126a2826130d1565b612872565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806127525750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b90508015612852576000606460058461276b9190614c4b565b6127759190614cf0565b905060006103e86019856127899190614c4b565b6127939190614cf0565b905060006103e86019866127a79190614c4b565b6127b19190614cf0565b90506127be873085612e90565b6127d4878785886127cf9190615672565b612e90565b81600d60008282546127e69190614c8d565b9250508190555080600e60008282546127ff9190614c8d565b9250508190555068056bc75e2d63100000600d5410158061282b575068056bc75e2d63100000600e5410155b801561283c57506000600c80549050115b1561284a576128496128ee565b5b50505061285e565b61285d848484612e90565b5b612867846130d1565b612870836130d1565b505b505050565b3373ffffffffffffffffffffffffffffffffffffffff166128966118af565b73ffffffffffffffffffffffffffffffffffffffff16146128ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e3906156f2565b60405180910390fd5b565b6000600d5490506000600e5490506000818361290a9190614c8d565b90507f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd838360405161293d929190614a6a565b60405180910390a160003073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016129809190614891565b602060405180830381865afa15801561299d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c19190614b84565b905081811015612a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fd90615784565b60405180910390fd5b6000600d819055506000600e8190555060003073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401612a75929190614bb1565b602060405180830381865afa158015612a92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab69190614b84565b905082811015612b2657612aee30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000612381565b612b2530600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1669d3c21bcecceda1000000612381565b5b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bb99190614bef565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390530600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401612c15929190614bb1565b602060405180830381865afa158015612c32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c569190614bef565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cbe906157f0565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612d57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4e9061585c565b60405180910390fd5b6000612d628561331b565b90506000811115612db2576000858883612d7c9190614c4b565b612d869190614cf0565b905060008183612d969190615672565b9050612da28983613c5a565b612dab816141c9565b5050612dc1565b86600d8190555085600e819055505b50505050505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612efa5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b612f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f30906158c8565b60405180910390fd5b612f448383836143f2565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc190615934565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516130b89190614677565b60405180910390a36130cb848484614402565b50505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561315b57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b1561331857600061316b826110d7565b90506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050678ac7230489e8000082101580156131d4575080155b15613299576001600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600c839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613315565b678ac7230489e80000821080156132ad5750805b15613314576000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061331383614412565b5b5b50505b50565b600080600267ffffffffffffffff81111561333957613338615954565b5b6040519080825280602002602001820160405280156133675781602001602082028036833780820191505090505b509050308160008151811061337f5761337e615983565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106133f0576133ef615983565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060003073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401613489929190614bb1565b602060405180830381865afa1580156134a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ca9190614b84565b9050838110156135505761350230600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000612381565b61354f30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612381565b5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016135d1929190614bb1565b602060405180830381865afa1580156135ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136129190614b84565b90506000810361370057600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016136bb92919061509e565b6020604051808303816000875af11580156136da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136fe91906150f3565b505b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b8152600401613781929190614bb1565b602060405180830381865afa15801561379e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c29190614b84565b90506000810361388d57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3307fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b815260040161384992919061509e565b6020604051808303816000875af192505050801561388557506040513d601f19601f8201168201806040525081019061388291906150f3565b60015b1561388c57505b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d79587600087600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661012c426139009190614c8d565b6040518663ffffffff1660e01b81526004016139209594939291906159b2565b600060405180830381600087803b15801561393a57600080fd5b505af192505050801561394b575060015b6139ff57613957615a19565b806308c379a0036139bb575061396b615a6c565b8061397657506139bd565b7f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec0723816040516139a5919061463c565b60405180910390a1600095505050505050613c55565b505b7f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec07236040516139ea90615b48565b60405180910390a16000945050505050613c55565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401613a7e9190614891565b602060405180830381865afa158015613a9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613abf9190614b84565b90506000811115613c4b57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630846040518463ffffffff1660e01b8152600401613b4b93929190615b68565b6020604051808303816000875af1925050508015613b8757506040513d601f19601f82011682018060405250810190613b8491906150f3565b60015b613c0457613b93615a19565b806308c379a003613bf85750613ba7615a6c565b80613bb25750613bfa565b7f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072381604051613be1919061463c565b60405180910390a160009650505050505050613c55565b505b3d6000803e3d6000fd5b507fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc018782604051613c36929190614a6a565b60405180910390a18095505050505050613c55565b6000955050505050505b919050565b60008111156141c5576000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401613ce4929190614bb1565b602060405180830381865afa158015613d01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d259190614b84565b905081811015613ed757600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660006040518363ffffffff1660e01b8152600401613daf929190615b9f565b6020604051808303816000875af1158015613dce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613df291906150f3565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401613e9292919061509e565b6020604051808303816000875af1158015613eb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ed591906150f3565b505b60003073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401613f36929190614bb1565b602060405180830381865afa158015613f53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f779190614b84565b905083811015613ffd57613faf30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000612381565b613ffc30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612381565b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e3370030600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1687876000803061012c426140739190614c8d565b6040518963ffffffff1660e01b8152600401614096989796959493929190615bc8565b6060604051808303816000875af19250505080156140d257506040513d601f19601f820116820180604052508101906140cf9190614f73565b60015b614185576140de615a19565b806308c379a00361414157506140f2615a6c565b806140fd5750614143565b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad8160405161412c919061463c565b60405180910390a184600d8190555050614180565b505b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad60405161417090615c92565b60405180910390a183600d819055505b6141c2565b5050507f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b84846040516141b9929190614a6a565b60405180910390a15b50505b5050565b6000811180156141de57506000600c80549050115b156143ef576000600c80549050826141f69190614cf0565b905060008111156143ed5760005b600c80549050811080156142185750606481105b156143ad57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600c838154811061426f5761426e615983565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b81526004016142b892919061509e565b6020604051808303816000875af19250505080156142f457506040513d601f19601f820116820180604052508101906142f191906150f3565b60015b61439857614300615a19565b806308c379a00361435c5750614314615a6c565b8061431f575061435e565b7fa38bdb001325b55fb77601b29dc4c8f483a0d03519ba5bea9ca2ee06e8b116148160405161434e919061463c565b60405180910390a15061439a565b505b7fa38bdb001325b55fb77601b29dc4c8f483a0d03519ba5bea9ca2ee06e8b1161460405161438b90615cfe565b60405180910390a161439a565b505b80806143a590615d1e565b915050614204565b507f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c21782600c805490506040516143e4929190614a6a565b60405180910390a15b505b50565b6143fd8383836145a2565b505050565b61440d8383836145a7565b505050565b60005b600c8054905081101561459e578173ffffffffffffffffffffffffffffffffffffffff16600c828154811061444d5761444c615983565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361458b57600c6001600c805490506144a79190615672565b815481106144b8576144b7615983565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c82815481106144f7576144f6615983565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600c80548061455157614550615d66565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561459e565b808061459690615d1e565b915050614415565b5050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156145e65780820151818401526020810190506145cb565b60008484015250505050565b6000601f19601f8301169050919050565b600061460e826145ac565b61461881856145b7565b93506146288185602086016145c8565b614631816145f2565b840191505092915050565b600060208201905081810360008301526146568184614603565b905092915050565b6000819050919050565b6146718161465e565b82525050565b600060208201905061468c6000830184614668565b92915050565b6000604051905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006146cc826146a1565b9050919050565b6146dc816146c1565b81146146e757600080fd5b50565b6000813590506146f9816146d3565b92915050565b6147088161465e565b811461471357600080fd5b50565b600081359050614725816146ff565b92915050565b600080604083850312156147425761474161469c565b5b6000614750858286016146ea565b925050602061476185828601614716565b9150509250929050565b60008115159050919050565b6147808161476b565b82525050565b600060208201905061479b6000830184614777565b92915050565b6147aa816146c1565b82525050565b600060c0820190506147c56000830189614668565b6147d26020830188614668565b6147df6040830187614777565b6147ec60608301866147a1565b6147f96080830185614668565b61480660a0830184614668565b979650505050505050565b60008060006060848603121561482a5761482961469c565b5b6000614838868287016146ea565b9350506020614849868287016146ea565b925050604061485a86828701614716565b9150509250925092565b60006020828403121561487a5761487961469c565b5b600061488884828501614716565b91505092915050565b60006020820190506148a660008301846147a1565b92915050565b600060ff82169050919050565b6148c2816148ac565b82525050565b60006020820190506148dd60008301846148b9565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614918816146c1565b82525050565b600061492a838361490f565b60208301905092915050565b6000602082019050919050565b600061494e826148e3565b61495881856148ee565b9350614963836148ff565b8060005b8381101561499457815161497b888261491e565b975061498683614936565b925050600181019050614967565b5085935050505092915050565b600060208201905081810360008301526149bb8184614943565b905092915050565b6000819050919050565b60006149e86149e36149de846146a1565b6149c3565b6146a1565b9050919050565b60006149fa826149cd565b9050919050565b6000614a0c826149ef565b9050919050565b614a1c81614a01565b82525050565b6000602082019050614a376000830184614a13565b92915050565b600060208284031215614a5357614a5261469c565b5b6000614a61848285016146ea565b91505092915050565b6000604082019050614a7f6000830185614668565b614a8c6020830184614668565b9392505050565b60008060408385031215614aaa57614aa961469c565b5b6000614ab8858286016146ea565b9250506020614ac9858286016146ea565b9150509250929050565b6000614ade826149ef565b9050919050565b614aee81614ad3565b82525050565b6000602082019050614b096000830184614ae5565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614b5657607f821691505b602082108103614b6957614b68614b0f565b5b50919050565b600081519050614b7e816146ff565b92915050565b600060208284031215614b9a57614b9961469c565b5b6000614ba884828501614b6f565b91505092915050565b6000604082019050614bc660008301856147a1565b614bd360208301846147a1565b9392505050565b600081519050614be9816146d3565b92915050565b600060208284031215614c0557614c0461469c565b5b6000614c1384828501614bda565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614c568261465e565b9150614c618361465e565b9250828202614c6f8161465e565b91508282048414831517614c8657614c85614c1c565b5b5092915050565b6000614c988261465e565b9150614ca38361465e565b9250828201905080821115614cbb57614cba614c1c565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614cfb8261465e565b9150614d068361465e565b925082614d1657614d15614cc1565b5b828204905092915050565b7f4d7573742070726f766964652045544820666f7220696e697469616c206c697160008201527f7569646974790000000000000000000000000000000000000000000000000000602082015250565b6000614d7d6026836145b7565b9150614d8882614d21565b604082019050919050565b60006020820190508181036000830152614dac81614d70565b9050919050565b7f4d7573742070726f7669646520746f6b656e20616d6f756e7420666f7220696e60008201527f697469616c206c69717569646974790000000000000000000000000000000000602082015250565b6000614e0f602f836145b7565b9150614e1a82614db3565b604082019050919050565b60006020820190508181036000830152614e3e81614e02565b9050919050565b7f496e73756666696369656e7420746f6b656e2062616c616e636520696e20636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b6000614ea16026836145b7565b9150614eac82614e45565b604082019050919050565b60006020820190508181036000830152614ed081614e94565b9050919050565b6000819050919050565b6000614efc614ef7614ef284614ed7565b6149c3565b61465e565b9050919050565b614f0c81614ee1565b82525050565b600060c082019050614f2760008301896147a1565b614f346020830188614668565b614f416040830187614f03565b614f4e6060830186614f03565b614f5b60808301856147a1565b614f6860a0830184614668565b979650505050505050565b600080600060608486031215614f8c57614f8b61469c565b5b6000614f9a86828701614b6f565b9350506020614fab86828701614b6f565b9250506040614fbc86828701614b6f565b9150509250925092565b7f4661696c656420746f20616464206c6971756964697479000000000000000000600082015250565b6000614ffc6017836145b7565b915061500782614fc6565b602082019050919050565b6000602082019050818103600083015261502b81614fef565b9050919050565b7f43616e6e6f7420726573637565204641524d455220746f6b656e730000000000600082015250565b6000615068601b836145b7565b915061507382615032565b602082019050919050565b600060208201905081810360008301526150978161505b565b9050919050565b60006040820190506150b360008301856147a1565b6150c06020830184614668565b9392505050565b6150d08161476b565b81146150db57600080fd5b50565b6000815190506150ed816150c7565b92915050565b6000602082840312156151095761510861469c565b5b6000615117848285016150de565b91505092915050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b60006151566014836145b7565b915061516182615120565b602082019050919050565b6000602082019050818103600083015261518581615149565b9050919050565b7f4e6f2070656e64696e6720746f6b656e73000000000000000000000000000000600082015250565b60006151c26011836145b7565b91506151cd8261518c565b602082019050919050565b600060208201905081810360008301526151f1816151b5565b9050919050565b7f4e6f20686f6c6465727300000000000000000000000000000000000000000000600082015250565b600061522e600a836145b7565b9150615239826151f8565b602082019050919050565b6000602082019050818103600083015261525d81615221565b9050919050565b7f4632000000000000000000000000000000000000000000000000000000000000600082015250565b600061529a6002836145b7565b91506152a582615264565b602082019050919050565b600060208201905081810360008301526152c98161528d565b9050919050565b7f4633000000000000000000000000000000000000000000000000000000000000600082015250565b60006153066002836145b7565b9150615311826152d0565b602082019050919050565b60006020820190508181036000830152615335816152f9565b9050919050565b7f4634000000000000000000000000000000000000000000000000000000000000600082015250565b60006153726002836145b7565b915061537d8261533c565b602082019050919050565b600060208201905081810360008301526153a181615365565b9050919050565b60006080820190506153bd60008301876147a1565b6153ca60208301866147a1565b6153d760408301856147a1565b6153e460608301846147a1565b95945050505050565b60006dffffffffffffffffffffffffffff82169050919050565b615410816153ed565b811461541b57600080fd5b50565b60008151905061542d81615407565b92915050565b600063ffffffff82169050919050565b61544c81615433565b811461545757600080fd5b50565b60008151905061546981615443565b92915050565b6000806000606084860312156154885761548761469c565b5b60006154968682870161541e565b93505060206154a78682870161541e565b92505060406154b88682870161545a565b9150509250925092565b7f496e76616c696420726f75746572206164647265737300000000000000000000600082015250565b60006154f86016836145b7565b9150615503826154c2565b602082019050919050565b60006020820190508181036000830152615527816154eb565b9050919050565b7f4f31000000000000000000000000000000000000000000000000000000000000600082015250565b60006155646002836145b7565b915061556f8261552e565b602082019050919050565b6000602082019050818103600083015261559381615557565b9050919050565b7f4534000000000000000000000000000000000000000000000000000000000000600082015250565b60006155d06002836145b7565b91506155db8261559a565b602082019050919050565b600060208201905081810360008301526155ff816155c3565b9050919050565b7f4535000000000000000000000000000000000000000000000000000000000000600082015250565b600061563c6002836145b7565b915061564782615606565b602082019050919050565b6000602082019050818103600083015261566b8161562f565b9050919050565b600061567d8261465e565b91506156888361465e565b92508282039050818111156156a05761569f614c1c565b5b92915050565b7f4f32000000000000000000000000000000000000000000000000000000000000600082015250565b60006156dc6002836145b7565b91506156e7826156a6565b602082019050919050565b6000602082019050818103600083015261570b816156cf565b9050919050565b7f496e73756666696369656e7420746f6b656e2062616c616e636520666f72207360008201527f7761700000000000000000000000000000000000000000000000000000000000602082015250565b600061576e6023836145b7565b915061577982615712565b604082019050919050565b6000602082019050818103600083015261579d81615761565b9050919050565b7f4c6971756964697479207061697220646f6573206e6f74206578697374000000600082015250565b60006157da601d836145b7565b91506157e5826157a4565b602082019050919050565b60006020820190508181036000830152615809816157cd565b9050919050565b7f496e76616c6964206c6971756964697479207061697200000000000000000000600082015250565b60006158466016836145b7565b915061585182615810565b602082019050919050565b6000602082019050818103600083015261587581615839565b9050919050565b7f4531000000000000000000000000000000000000000000000000000000000000600082015250565b60006158b26002836145b7565b91506158bd8261587c565b602082019050919050565b600060208201905081810360008301526158e1816158a5565b9050919050565b7f4532000000000000000000000000000000000000000000000000000000000000600082015250565b600061591e6002836145b7565b9150615929826158e8565b602082019050919050565b6000602082019050818103600083015261594d81615911565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060a0820190506159c76000830188614668565b6159d46020830187614f03565b81810360408301526159e68186614943565b90506159f560608301856147a1565b615a026080830184614668565b9695505050505050565b60008160e01c9050919050565b600060033d1115615a385760046000803e615a35600051615a0c565b90505b90565b615a44826145f2565b810181811067ffffffffffffffff82111715615a6357615a62615954565b5b80604052505050565b600060443d10615af957615a7e614692565b60043d036004823e80513d602482011167ffffffffffffffff82111715615aa6575050615af9565b808201805167ffffffffffffffff811115615ac45750505050615af9565b80602083010160043d038501811115615ae1575050505050615af9565b615af082602001850186615a3b565b82955050505050505b90565b7f556e6b6e6f776e206572726f7220696e20737761700000000000000000000000600082015250565b6000615b326015836145b7565b9150615b3d82615afc565b602082019050919050565b60006020820190508181036000830152615b6181615b25565b9050919050565b6000606082019050615b7d60008301866147a1565b615b8a60208301856147a1565b615b976040830184614668565b949350505050565b6000604082019050615bb460008301856147a1565b615bc16020830184614f03565b9392505050565b600061010082019050615bde600083018b6147a1565b615beb602083018a6147a1565b615bf86040830189614668565b615c056060830188614668565b615c126080830187614f03565b615c1f60a0830186614f03565b615c2c60c08301856147a1565b615c3960e0830184614668565b9998505050505050505050565b7f556e6b6e6f776e206572726f7220696e206164644c6971756964697479000000600082015250565b6000615c7c601d836145b7565b9150615c8782615c46565b602082019050919050565b60006020820190508181036000830152615cab81615c6f565b9050919050565b7f556e6b6e6f776e206572726f7220696e2057455448207472616e736665720000600082015250565b6000615ce8601e836145b7565b9150615cf382615cb2565b602082019050919050565b60006020820190508181036000830152615d1781615cdb565b9050919050565b6000615d298261465e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615d5b57615d5a614c1c565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220982a5176db5287e5cd2bf7412196755223321416817f3a1532589e8381b66a2a64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106101e75760003560e01c80637136982b11610102578063a9059cbb11610095578063dd62ed3e11610064578063dd62ed3e146106da578063ed9cacfe14610717578063f2fde38b1461072e578063fd7c9fab14610757576101ee565b8063a9059cbb14610620578063c026d93a1461065d578063c0d7865514610674578063d4d7b19a1461069d576101ee565b80638129fc1c116100d15780638129fc1c146105875780638da5cb5b1461059e57806395d89b41146105c95780639df93f6c146105f4576101ee565b80637136982b146104f157806379304bec1461051c5780637ac84fc114610545578063808a54571461055c576101ee565b8063313ce5671161017a5780635d76b04c116101495780635d76b04c146104335780635fe8e7cc1461045e57806362b6327a1461048957806370a08231146104b4576101ee565b8063313ce5671461039857806341a22cc2146103c3578063461a3a95146103df578063573761981461040a576101ee565b80631b26c80d116101b65780631b26c80d146102b157806323b872dd146102e1578063298926cb1461031e5780632a11ced01461035b576101ee565b806306fdde03146101f357806308dee2b41461021e578063095ea7b31461024957806318160ddd14610286576101ee565b366101ee57005b600080fd5b3480156101ff57600080fd5b50610208610782565b604051610215919061463c565b60405180910390f35b34801561022a57600080fd5b50610233610814565b6040516102409190614677565b60405180910390f35b34801561025557600080fd5b50610270600480360381019061026b919061472b565b61081e565b60405161027d9190614786565b60405180910390f35b34801561029257600080fd5b5061029b61083a565b6040516102a89190614677565b60405180910390f35b3480156102bd57600080fd5b506102c6610844565b6040516102d8969594939291906147b0565b60405180910390f35b3480156102ed57600080fd5b5061030860048036038101906103039190614811565b610ade565b6040516103159190614786565b60405180910390f35b34801561032a57600080fd5b5061034560048036038101906103409190614864565b610b06565b6040516103529190614677565b60405180910390f35b34801561036757600080fd5b50610382600480360381019061037d9190614864565b610b8e565b60405161038f9190614891565b60405180910390f35b3480156103a457600080fd5b506103ad610bcd565b6040516103ba91906148c8565b60405180910390f35b6103dd60048036038101906103d89190614864565b610bd6565b005b3480156103eb57600080fd5b506103f4610ef3565b6040516104019190614891565b60405180910390f35b34801561041657600080fd5b50610431600480360381019061042c919061472b565b610f19565b005b34801561043f57600080fd5b50610448611019565b6040516104559190614677565b60405180910390f35b34801561046a57600080fd5b50610473611023565b60405161048091906149a1565b60405180910390f35b34801561049557600080fd5b5061049e6110b1565b6040516104ab9190614a22565b60405180910390f35b3480156104c057600080fd5b506104db60048036038101906104d69190614a3d565b6110d7565b6040516104e89190614677565b60405180910390f35b3480156104fd57600080fd5b5061050661111f565b6040516105139190614677565b60405180910390f35b34801561052857600080fd5b50610543600480360381019061053e9190614864565b61112c565b005b34801561055157600080fd5b5061055a6111fe565b005b34801561056857600080fd5b506105716112aa565b60405161057e9190614891565b60405180910390f35b34801561059357600080fd5b5061059c6112d0565b005b3480156105aa57600080fd5b506105b36118af565b6040516105c09190614891565b60405180910390f35b3480156105d557600080fd5b506105de6118d9565b6040516105eb919061463c565b60405180910390f35b34801561060057600080fd5b5061060961196b565b604051610617929190614a6a565b60405180910390f35b34801561062c57600080fd5b506106476004803603810190610642919061472b565b611b2b565b6040516106549190614786565b60405180910390f35b34801561066957600080fd5b50610672611b47565b005b34801561068057600080fd5b5061069b60048036038101906106969190614a3d565b611e9a565b005b3480156106a957600080fd5b506106c460048036038101906106bf9190614a3d565b611f55565b6040516106d19190614786565b60405180910390f35b3480156106e657600080fd5b5061070160048036038101906106fc9190614a93565b611f75565b60405161070e9190614677565b60405180910390f35b34801561072357600080fd5b5061072c611ffc565b005b34801561073a57600080fd5b5061075560048036038101906107509190614a3d565b6122d8565b005b34801561076357600080fd5b5061076c61235b565b6040516107799190614af4565b60405180910390f35b60606003805461079190614b3e565b80601f01602080910402602001604051908101604052809291908181526020018280546107bd90614b3e565b801561080a5780601f106107df5761010080835404028352916020019161080a565b820191906000526020600020905b8154815290600101906020018083116107ed57829003601f168201915b5050505050905090565b6000600d54905090565b60008033905061082f818585612381565b600191505092915050565b6000600254905090565b6000806000806000803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016108869190614891565b602060405180830381865afa1580156108a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c79190614b84565b95503073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401610926929190614bb1565b602060405180830381865afa158015610943573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109679190614b84565b9450600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fa9190614bef565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390530600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401610a56929190614bb1565b602060405180830381865afa158015610a73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a979190614bef565b9250600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614159350600d549150600e549050909192939495565b600080339050610aef858285612515565b610afa8585856125a1565b60019150509392505050565b6000806000610b1361196b565b915091506000821480610b265750600081145b15610b3657600092505050610b89565b60006103e585610b469190614c4b565b905060008282610b569190614c4b565b90506000826103e886610b699190614c4b565b610b739190614c8d565b90508082610b819190614cf0565b955050505050505b919050565b600c8181548110610b9e57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b610bde612877565b60003411610c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1890614d93565b60405180910390fd5b60008111610c64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5b90614e25565b60405180910390fd5b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c9e9190614891565b602060405180830381865afa158015610cbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cdf9190614b84565b1015610d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1790614eb7565b60405180910390fd5b610d4d30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612381565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71934308460008033426040518863ffffffff1660e01b8152600401610db496959493929190614f12565b60606040518083038185885af193505050508015610df057506040513d601f19601f82011682018060405250810190610ded9190614f73565b60015b610e5d57610e2230600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000612381565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5490615012565b60405180910390fd5b5050507f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b8134604051610e91929190614a6a565b60405180910390a160004790506000811115610eef573373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610eed573d6000803e3d6000fd5b505b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610f21612877565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f869061507e565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610fb36118af565b836040518363ffffffff1660e01b8152600401610fd192919061509e565b6020604051808303816000875af1158015610ff0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101491906150f3565b505050565b6000600e54905090565b6060600c8054806020026020016040519081016040528092919081815260200182805480156110a757602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161105d575b5050505050905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600c80549050905090565b611134612877565b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161116e9190614891565b602060405180830381865afa15801561118b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111af9190614b84565b10156111f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e79061516c565b60405180910390fd5b6111fb3033836125a1565b50565b611206612877565b6000600d54118061121957506000600e54115b611258576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124f906151d8565b60405180910390fd5b6000600c80549050116112a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129790615244565b60405180910390fd5b6112a86128ee565b565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112d8612877565b600f60009054906101000a900460ff1615611328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131f906152b0565b60405180910390fd5b6001600f60006101000a81548160ff021916908315150217905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016113c2929190614bb1565b6020604051808303816000875af11580156113e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114059190614bef565b600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036114d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cd9061531c565b60405180910390fd5b61152330600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612381565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016115c292919061509e565b6020604051808303816000875af11580156115e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160591906150f3565b611644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163b90615388565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016116e392919061509e565b6020604051808303816000875af1158015611702573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172691906150f3565b503073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016117a492919061509e565b6020604051808303816000875af11580156117c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e791906150f3565b507f1aee311dae12417944704a8411a039c41e8ae395e0c0075565cb1c93934babc4600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516118a594939291906153a8565b60405180910390a1565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546118e890614b3e565b80601f016020809104026020016040519081016040528092919081815260200182805461191490614b3e565b80156119615780601f1061193657610100808354040283529160200191611961565b820191906000526020600020905b81548152906001019060200180831161194457829003601f168201915b5050505050905090565b600080600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156119de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a02919061546f565b50915091506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a9a9190614bef565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611afd57826dffffffffffffffffffffffffffff16826dffffffffffffffffffffffffffff1694509450505050611b27565b816dffffffffffffffffffffffffffff16836dffffffffffffffffffffffffffff16945094505050505b9091565b600080339050611b3c8185856125a1565b600191505092915050565b611b4f612877565b60003073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611bae929190614bb1565b602060405180830381865afa158015611bcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bef9190614b84565b905069d3c21bcecceda1000000811015611c3b57611c3a30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1669d3c21bcecceda1000000612381565b5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611c989190614891565b602060405180830381865afa158015611cb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd99190614b84565b90506000811115611e96576000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611d65929190614bb1565b602060405180830381865afa158015611d82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da69190614b84565b905081811015611e9457600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611e4f92919061509e565b6020604051808303816000875af1158015611e6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9291906150f3565b505b505b5050565b611ea2612877565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f089061550e565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b6020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612004612877565b61205130600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612381565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016120f092919061509e565b6020604051808303816000875af115801561210f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213391906150f3565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016121d392919061509e565b6020604051808303816000875af192505050801561220f57506040513d601f19601f8201168201806040525081019061220c91906150f3565b60015b1561221657505b3073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b815260040161229392919061509e565b6020604051808303816000875af19250505080156122cf57506040513d601f19601f820116820180604052508101906122cc91906150f3565b60015b156122d657505b565b6122e0612877565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361234f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123469061557a565b60405180910390fd5b61235881612dca565b50565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123eb5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61242a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612421906155e6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125089190614677565b60405180910390a3505050565b60006125218484611f75565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461259b578181101561258d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258490615652565b60405180910390fd5b61259a8484848403612381565b5b50505050565b6125a96118af565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061261457506125e56118af565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8061264a57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8061268057503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156126a757612690838383612e90565b612699836130d1565b6126a2826130d1565b612872565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806127525750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b90508015612852576000606460058461276b9190614c4b565b6127759190614cf0565b905060006103e86019856127899190614c4b565b6127939190614cf0565b905060006103e86019866127a79190614c4b565b6127b19190614cf0565b90506127be873085612e90565b6127d4878785886127cf9190615672565b612e90565b81600d60008282546127e69190614c8d565b9250508190555080600e60008282546127ff9190614c8d565b9250508190555068056bc75e2d63100000600d5410158061282b575068056bc75e2d63100000600e5410155b801561283c57506000600c80549050115b1561284a576128496128ee565b5b50505061285e565b61285d848484612e90565b5b612867846130d1565b612870836130d1565b505b505050565b3373ffffffffffffffffffffffffffffffffffffffff166128966118af565b73ffffffffffffffffffffffffffffffffffffffff16146128ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e3906156f2565b60405180910390fd5b565b6000600d5490506000600e5490506000818361290a9190614c8d565b90507f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd838360405161293d929190614a6a565b60405180910390a160003073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016129809190614891565b602060405180830381865afa15801561299d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c19190614b84565b905081811015612a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fd90615784565b60405180910390fd5b6000600d819055506000600e8190555060003073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401612a75929190614bb1565b602060405180830381865afa158015612a92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab69190614b84565b905082811015612b2657612aee30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000612381565b612b2530600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1669d3c21bcecceda1000000612381565b5b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bb99190614bef565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390530600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401612c15929190614bb1565b602060405180830381865afa158015612c32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c569190614bef565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cbe906157f0565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612d57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4e9061585c565b60405180910390fd5b6000612d628561331b565b90506000811115612db2576000858883612d7c9190614c4b565b612d869190614cf0565b905060008183612d969190615672565b9050612da28983613c5a565b612dab816141c9565b5050612dc1565b86600d8190555085600e819055505b50505050505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612efa5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b612f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f30906158c8565b60405180910390fd5b612f448383836143f2565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc190615934565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516130b89190614677565b60405180910390a36130cb848484614402565b50505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561315b57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b1561331857600061316b826110d7565b90506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050678ac7230489e8000082101580156131d4575080155b15613299576001600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600c839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613315565b678ac7230489e80000821080156132ad5750805b15613314576000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061331383614412565b5b5b50505b50565b600080600267ffffffffffffffff81111561333957613338615954565b5b6040519080825280602002602001820160405280156133675781602001602082028036833780820191505090505b509050308160008151811061337f5761337e615983565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106133f0576133ef615983565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060003073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401613489929190614bb1565b602060405180830381865afa1580156134a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ca9190614b84565b9050838110156135505761350230600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000612381565b61354f30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612381565b5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016135d1929190614bb1565b602060405180830381865afa1580156135ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136129190614b84565b90506000810361370057600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016136bb92919061509e565b6020604051808303816000875af11580156136da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136fe91906150f3565b505b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b8152600401613781929190614bb1565b602060405180830381865afa15801561379e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c29190614b84565b90506000810361388d57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3307fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b815260040161384992919061509e565b6020604051808303816000875af192505050801561388557506040513d601f19601f8201168201806040525081019061388291906150f3565b60015b1561388c57505b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d79587600087600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661012c426139009190614c8d565b6040518663ffffffff1660e01b81526004016139209594939291906159b2565b600060405180830381600087803b15801561393a57600080fd5b505af192505050801561394b575060015b6139ff57613957615a19565b806308c379a0036139bb575061396b615a6c565b8061397657506139bd565b7f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec0723816040516139a5919061463c565b60405180910390a1600095505050505050613c55565b505b7f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec07236040516139ea90615b48565b60405180910390a16000945050505050613c55565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401613a7e9190614891565b602060405180830381865afa158015613a9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613abf9190614b84565b90506000811115613c4b57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630846040518463ffffffff1660e01b8152600401613b4b93929190615b68565b6020604051808303816000875af1925050508015613b8757506040513d601f19601f82011682018060405250810190613b8491906150f3565b60015b613c0457613b93615a19565b806308c379a003613bf85750613ba7615a6c565b80613bb25750613bfa565b7f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072381604051613be1919061463c565b60405180910390a160009650505050505050613c55565b505b3d6000803e3d6000fd5b507fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc018782604051613c36929190614a6a565b60405180910390a18095505050505050613c55565b6000955050505050505b919050565b60008111156141c5576000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401613ce4929190614bb1565b602060405180830381865afa158015613d01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d259190614b84565b905081811015613ed757600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660006040518363ffffffff1660e01b8152600401613daf929190615b9f565b6020604051808303816000875af1158015613dce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613df291906150f3565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401613e9292919061509e565b6020604051808303816000875af1158015613eb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ed591906150f3565b505b60003073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401613f36929190614bb1565b602060405180830381865afa158015613f53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f779190614b84565b905083811015613ffd57613faf30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000612381565b613ffc30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612381565b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e3370030600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1687876000803061012c426140739190614c8d565b6040518963ffffffff1660e01b8152600401614096989796959493929190615bc8565b6060604051808303816000875af19250505080156140d257506040513d601f19601f820116820180604052508101906140cf9190614f73565b60015b614185576140de615a19565b806308c379a00361414157506140f2615a6c565b806140fd5750614143565b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad8160405161412c919061463c565b60405180910390a184600d8190555050614180565b505b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad60405161417090615c92565b60405180910390a183600d819055505b6141c2565b5050507f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b84846040516141b9929190614a6a565b60405180910390a15b50505b5050565b6000811180156141de57506000600c80549050115b156143ef576000600c80549050826141f69190614cf0565b905060008111156143ed5760005b600c80549050811080156142185750606481105b156143ad57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600c838154811061426f5761426e615983565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b81526004016142b892919061509e565b6020604051808303816000875af19250505080156142f457506040513d601f19601f820116820180604052508101906142f191906150f3565b60015b61439857614300615a19565b806308c379a00361435c5750614314615a6c565b8061431f575061435e565b7fa38bdb001325b55fb77601b29dc4c8f483a0d03519ba5bea9ca2ee06e8b116148160405161434e919061463c565b60405180910390a15061439a565b505b7fa38bdb001325b55fb77601b29dc4c8f483a0d03519ba5bea9ca2ee06e8b1161460405161438b90615cfe565b60405180910390a161439a565b505b80806143a590615d1e565b915050614204565b507f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c21782600c805490506040516143e4929190614a6a565b60405180910390a15b505b50565b6143fd8383836145a2565b505050565b61440d8383836145a7565b505050565b60005b600c8054905081101561459e578173ffffffffffffffffffffffffffffffffffffffff16600c828154811061444d5761444c615983565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361458b57600c6001600c805490506144a79190615672565b815481106144b8576144b7615983565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c82815481106144f7576144f6615983565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600c80548061455157614550615d66565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561459e565b808061459690615d1e565b915050614415565b5050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156145e65780820151818401526020810190506145cb565b60008484015250505050565b6000601f19601f8301169050919050565b600061460e826145ac565b61461881856145b7565b93506146288185602086016145c8565b614631816145f2565b840191505092915050565b600060208201905081810360008301526146568184614603565b905092915050565b6000819050919050565b6146718161465e565b82525050565b600060208201905061468c6000830184614668565b92915050565b6000604051905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006146cc826146a1565b9050919050565b6146dc816146c1565b81146146e757600080fd5b50565b6000813590506146f9816146d3565b92915050565b6147088161465e565b811461471357600080fd5b50565b600081359050614725816146ff565b92915050565b600080604083850312156147425761474161469c565b5b6000614750858286016146ea565b925050602061476185828601614716565b9150509250929050565b60008115159050919050565b6147808161476b565b82525050565b600060208201905061479b6000830184614777565b92915050565b6147aa816146c1565b82525050565b600060c0820190506147c56000830189614668565b6147d26020830188614668565b6147df6040830187614777565b6147ec60608301866147a1565b6147f96080830185614668565b61480660a0830184614668565b979650505050505050565b60008060006060848603121561482a5761482961469c565b5b6000614838868287016146ea565b9350506020614849868287016146ea565b925050604061485a86828701614716565b9150509250925092565b60006020828403121561487a5761487961469c565b5b600061488884828501614716565b91505092915050565b60006020820190506148a660008301846147a1565b92915050565b600060ff82169050919050565b6148c2816148ac565b82525050565b60006020820190506148dd60008301846148b9565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614918816146c1565b82525050565b600061492a838361490f565b60208301905092915050565b6000602082019050919050565b600061494e826148e3565b61495881856148ee565b9350614963836148ff565b8060005b8381101561499457815161497b888261491e565b975061498683614936565b925050600181019050614967565b5085935050505092915050565b600060208201905081810360008301526149bb8184614943565b905092915050565b6000819050919050565b60006149e86149e36149de846146a1565b6149c3565b6146a1565b9050919050565b60006149fa826149cd565b9050919050565b6000614a0c826149ef565b9050919050565b614a1c81614a01565b82525050565b6000602082019050614a376000830184614a13565b92915050565b600060208284031215614a5357614a5261469c565b5b6000614a61848285016146ea565b91505092915050565b6000604082019050614a7f6000830185614668565b614a8c6020830184614668565b9392505050565b60008060408385031215614aaa57614aa961469c565b5b6000614ab8858286016146ea565b9250506020614ac9858286016146ea565b9150509250929050565b6000614ade826149ef565b9050919050565b614aee81614ad3565b82525050565b6000602082019050614b096000830184614ae5565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614b5657607f821691505b602082108103614b6957614b68614b0f565b5b50919050565b600081519050614b7e816146ff565b92915050565b600060208284031215614b9a57614b9961469c565b5b6000614ba884828501614b6f565b91505092915050565b6000604082019050614bc660008301856147a1565b614bd360208301846147a1565b9392505050565b600081519050614be9816146d3565b92915050565b600060208284031215614c0557614c0461469c565b5b6000614c1384828501614bda565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614c568261465e565b9150614c618361465e565b9250828202614c6f8161465e565b91508282048414831517614c8657614c85614c1c565b5b5092915050565b6000614c988261465e565b9150614ca38361465e565b9250828201905080821115614cbb57614cba614c1c565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614cfb8261465e565b9150614d068361465e565b925082614d1657614d15614cc1565b5b828204905092915050565b7f4d7573742070726f766964652045544820666f7220696e697469616c206c697160008201527f7569646974790000000000000000000000000000000000000000000000000000602082015250565b6000614d7d6026836145b7565b9150614d8882614d21565b604082019050919050565b60006020820190508181036000830152614dac81614d70565b9050919050565b7f4d7573742070726f7669646520746f6b656e20616d6f756e7420666f7220696e60008201527f697469616c206c69717569646974790000000000000000000000000000000000602082015250565b6000614e0f602f836145b7565b9150614e1a82614db3565b604082019050919050565b60006020820190508181036000830152614e3e81614e02565b9050919050565b7f496e73756666696369656e7420746f6b656e2062616c616e636520696e20636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b6000614ea16026836145b7565b9150614eac82614e45565b604082019050919050565b60006020820190508181036000830152614ed081614e94565b9050919050565b6000819050919050565b6000614efc614ef7614ef284614ed7565b6149c3565b61465e565b9050919050565b614f0c81614ee1565b82525050565b600060c082019050614f2760008301896147a1565b614f346020830188614668565b614f416040830187614f03565b614f4e6060830186614f03565b614f5b60808301856147a1565b614f6860a0830184614668565b979650505050505050565b600080600060608486031215614f8c57614f8b61469c565b5b6000614f9a86828701614b6f565b9350506020614fab86828701614b6f565b9250506040614fbc86828701614b6f565b9150509250925092565b7f4661696c656420746f20616464206c6971756964697479000000000000000000600082015250565b6000614ffc6017836145b7565b915061500782614fc6565b602082019050919050565b6000602082019050818103600083015261502b81614fef565b9050919050565b7f43616e6e6f7420726573637565204641524d455220746f6b656e730000000000600082015250565b6000615068601b836145b7565b915061507382615032565b602082019050919050565b600060208201905081810360008301526150978161505b565b9050919050565b60006040820190506150b360008301856147a1565b6150c06020830184614668565b9392505050565b6150d08161476b565b81146150db57600080fd5b50565b6000815190506150ed816150c7565b92915050565b6000602082840312156151095761510861469c565b5b6000615117848285016150de565b91505092915050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b60006151566014836145b7565b915061516182615120565b602082019050919050565b6000602082019050818103600083015261518581615149565b9050919050565b7f4e6f2070656e64696e6720746f6b656e73000000000000000000000000000000600082015250565b60006151c26011836145b7565b91506151cd8261518c565b602082019050919050565b600060208201905081810360008301526151f1816151b5565b9050919050565b7f4e6f20686f6c6465727300000000000000000000000000000000000000000000600082015250565b600061522e600a836145b7565b9150615239826151f8565b602082019050919050565b6000602082019050818103600083015261525d81615221565b9050919050565b7f4632000000000000000000000000000000000000000000000000000000000000600082015250565b600061529a6002836145b7565b91506152a582615264565b602082019050919050565b600060208201905081810360008301526152c98161528d565b9050919050565b7f4633000000000000000000000000000000000000000000000000000000000000600082015250565b60006153066002836145b7565b9150615311826152d0565b602082019050919050565b60006020820190508181036000830152615335816152f9565b9050919050565b7f4634000000000000000000000000000000000000000000000000000000000000600082015250565b60006153726002836145b7565b915061537d8261533c565b602082019050919050565b600060208201905081810360008301526153a181615365565b9050919050565b60006080820190506153bd60008301876147a1565b6153ca60208301866147a1565b6153d760408301856147a1565b6153e460608301846147a1565b95945050505050565b60006dffffffffffffffffffffffffffff82169050919050565b615410816153ed565b811461541b57600080fd5b50565b60008151905061542d81615407565b92915050565b600063ffffffff82169050919050565b61544c81615433565b811461545757600080fd5b50565b60008151905061546981615443565b92915050565b6000806000606084860312156154885761548761469c565b5b60006154968682870161541e565b93505060206154a78682870161541e565b92505060406154b88682870161545a565b9150509250925092565b7f496e76616c696420726f75746572206164647265737300000000000000000000600082015250565b60006154f86016836145b7565b9150615503826154c2565b602082019050919050565b60006020820190508181036000830152615527816154eb565b9050919050565b7f4f31000000000000000000000000000000000000000000000000000000000000600082015250565b60006155646002836145b7565b915061556f8261552e565b602082019050919050565b6000602082019050818103600083015261559381615557565b9050919050565b7f4534000000000000000000000000000000000000000000000000000000000000600082015250565b60006155d06002836145b7565b91506155db8261559a565b602082019050919050565b600060208201905081810360008301526155ff816155c3565b9050919050565b7f4535000000000000000000000000000000000000000000000000000000000000600082015250565b600061563c6002836145b7565b915061564782615606565b602082019050919050565b6000602082019050818103600083015261566b8161562f565b9050919050565b600061567d8261465e565b91506156888361465e565b92508282039050818111156156a05761569f614c1c565b5b92915050565b7f4f32000000000000000000000000000000000000000000000000000000000000600082015250565b60006156dc6002836145b7565b91506156e7826156a6565b602082019050919050565b6000602082019050818103600083015261570b816156cf565b9050919050565b7f496e73756666696369656e7420746f6b656e2062616c616e636520666f72207360008201527f7761700000000000000000000000000000000000000000000000000000000000602082015250565b600061576e6023836145b7565b915061577982615712565b604082019050919050565b6000602082019050818103600083015261579d81615761565b9050919050565b7f4c6971756964697479207061697220646f6573206e6f74206578697374000000600082015250565b60006157da601d836145b7565b91506157e5826157a4565b602082019050919050565b60006020820190508181036000830152615809816157cd565b9050919050565b7f496e76616c6964206c6971756964697479207061697200000000000000000000600082015250565b60006158466016836145b7565b915061585182615810565b602082019050919050565b6000602082019050818103600083015261587581615839565b9050919050565b7f4531000000000000000000000000000000000000000000000000000000000000600082015250565b60006158b26002836145b7565b91506158bd8261587c565b602082019050919050565b600060208201905081810360008301526158e1816158a5565b9050919050565b7f4532000000000000000000000000000000000000000000000000000000000000600082015250565b600061591e6002836145b7565b9150615929826158e8565b602082019050919050565b6000602082019050818103600083015261594d81615911565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060a0820190506159c76000830188614668565b6159d46020830187614f03565b81810360408301526159e68186614943565b90506159f560608301856147a1565b615a026080830184614668565b9695505050505050565b60008160e01c9050919050565b600060033d1115615a385760046000803e615a35600051615a0c565b90505b90565b615a44826145f2565b810181811067ffffffffffffffff82111715615a6357615a62615954565b5b80604052505050565b600060443d10615af957615a7e614692565b60043d036004823e80513d602482011167ffffffffffffffff82111715615aa6575050615af9565b808201805167ffffffffffffffff811115615ac45750505050615af9565b80602083010160043d038501811115615ae1575050505050615af9565b615af082602001850186615a3b565b82955050505050505b90565b7f556e6b6e6f776e206572726f7220696e20737761700000000000000000000000600082015250565b6000615b326015836145b7565b9150615b3d82615afc565b602082019050919050565b60006020820190508181036000830152615b6181615b25565b9050919050565b6000606082019050615b7d60008301866147a1565b615b8a60208301856147a1565b615b976040830184614668565b949350505050565b6000604082019050615bb460008301856147a1565b615bc16020830184614f03565b9392505050565b600061010082019050615bde600083018b6147a1565b615beb602083018a6147a1565b615bf86040830189614668565b615c056060830188614668565b615c126080830187614f03565b615c1f60a0830186614f03565b615c2c60c08301856147a1565b615c3960e0830184614668565b9998505050505050505050565b7f556e6b6e6f776e206572726f7220696e206164644c6971756964697479000000600082015250565b6000615c7c601d836145b7565b9150615c8782615c46565b602082019050919050565b60006020820190508181036000830152615cab81615c6f565b9050919050565b7f556e6b6e6f776e206572726f7220696e2057455448207472616e736665720000600082015250565b6000615ce8601e836145b7565b9150615cf382615cb2565b602082019050919050565b60006020820190508181036000830152615d1781615cdb565b9050919050565b6000615d298261465e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615d5b57615d5a614c1c565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220982a5176db5287e5cd2bf7412196755223321416817f3a1532589e8381b66a2a64736f6c63430008130033

Deployed Bytecode Sourcemap

8351:17411:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2810:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22327:118;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3677:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3104:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23616:654;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;3875:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24806:472;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9095:24;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3012:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20485:1074;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8955:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21761:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22453:114;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20311:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8857:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3211:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20201:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22010:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22632:254;;;;;;;;;;;;;:::i;:::-;;8987:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10768:709;;;;;;;;;;;;;:::i;:::-;;1789:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2909:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24315:427;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;3337:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22894:691;;;;;;;;;;;;;:::i;:::-;;21567:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9048:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3527:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25316:406;;;;;;;;;;;;;:::i;:::-;;1992:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8905:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2810:91;2855:13;2888:5;2881:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2810:91;:::o;22327:118::-;22387:7;22414:23;;22407:30;;22327:118;:::o;3677:190::-;3751:4;3768:13;3784:10;3768:26;;3805:32;3814:5;3821:7;3830:6;3805:8;:32::i;:::-;3855:4;3848:11;;;3677:190;;;;:::o;3104:99::-;3156:7;3183:12;;3176:19;;3104:99;:::o;23616:654::-;23672:23;23706;23740:15;23766:12;23789:18;23818:22;23892:4;23877:31;;;23917:4;23877:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23859:64;;23967:4;23952:31;;;23992:4;24007:16;;;;;;;;;;;23952:73;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23934:91;;24062:16;;;;;;;;;;;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24043:54;;;24106:4;24113:10;;;;;;;;;;;24043:81;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24036:88;;24164:1;24148:18;;:4;:18;;;;24135:31;;24190:23;;24177:36;;24241:21;;24224:38;;23616:654;;;;;;:::o;3875:250::-;3963:4;3980:15;3998:10;3980:28;;4019:38;4035:4;4041:7;4050:6;4019:15;:38::i;:::-;4068:27;4078:4;4084:2;4088:6;4068:9;:27::i;:::-;4113:4;4106:11;;;3875:250;;;;;:::o;24806:472::-;24871:7;24892:19;24913;24936:17;:15;:17::i;:::-;24891:62;;;;24983:1;24968:11;:16;:36;;;;25003:1;24988:11;:16;24968:36;24964:50;;;25013:1;25006:8;;;;;;24964:50;25035:23;25072:3;25061:8;:14;;;;:::i;:::-;25035:40;;25109:17;25147:11;25129:15;:29;;;;:::i;:::-;25109:49;;25169:19;25214:15;25206:4;25192:11;:18;;;;:::i;:::-;25191:38;;;;:::i;:::-;25169:60;;25259:11;25247:9;:23;;;;:::i;:::-;25240:30;;;;;;;24806:472;;;;:::o;9095:24::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3012:84::-;3061:5;3086:2;3079:9;;3012:84;:::o;20485:1074::-;1748:13;:11;:13::i;:::-;20593:1:::1;20581:9;:13;20573:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;20670:1;20656:11;:15;20648:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;20816:11;20781:4;20766:31;;;20806:4;20766:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;20744:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;20906:63;20923:4;20938:16;;;;;;;;;;;20957:11;20906:8;:63::i;:::-;20986:16;;;;;;;;;;;:32;;;21026:9;21059:4;21079:11;21105:1;21121::::0;21137:10:::1;21162:15;20986:202;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;20982:412;;21281:53;21298:4;21313:16;;;;;;;;;;;21332:1;21281:8;:53::i;:::-;21349:33;;;;;;;;;;:::i;:::-;;;;;;;;20982:412;;;;21209:38;21224:11;21237:9;21209:38;;;;;;;:::i;:::-;;;;;;;;21406:20;21429:21;21406:44;;21480:1;21465:12;:16;21461:91;;;21506:10;21498:28;;:42;21527:12;21498:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;21461:91;20562:997;20485:1074:::0;:::o;8955:25::-;;;;;;;;;;;;;:::o;21761:208::-;1748:13;:11;:13::i;:::-;21872:4:::1;21854:23;;:6;:23;;::::0;21846:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;21927:6;21920:23;;;21944:7;:5;:7::i;:::-;21953;21920:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21761:208:::0;;:::o;22453:114::-;22511:7;22538:21;;22531:28;;22453:114;:::o;20311:96::-;20356:16;20392:7;20385:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20311:96;:::o;8857:41::-;;;;;;;;;;;;;:::o;3211:118::-;3276:7;3303:9;:18;3313:7;3303:18;;;;;;;;;;;;;;;;3296:25;;3211:118;;;:::o;20201:98::-;20250:7;20277;:14;;;;20270:21;;20201:98;:::o;22010:266::-;1748:13;:11;:13::i;:::-;22159:6:::1;22124:4;22109:31;;;22149:4;22109:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;22087:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;22224:44;22242:4;22249:10;22261:6;22224:9;:44::i;:::-;22010:266:::0;:::o;22632:254::-;1748:13;:11;:13::i;:::-;22734:1:::1;22708:23;;:27;:56;;;;22763:1;22739:21;;:25;22708:56;22700:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;22822:1;22805:7;:14;;;;:18;22797:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;22849:29;:27;:29::i;:::-;22632:254::o:0;8987:28::-;;;;;;;;;;;;;:::o;10768:709::-;1748:13;:11;:13::i;:::-;10829:12:::1;;;;;;;;;;;10828:13;10820:28;;;;;;;;;;;;:::i;:::-;;;;;;;;;10874:4;10859:12;;:19;;;;;;;;;;;;;;;;;;10907:17;;;;;;;;;;;:28;;;10944:4;10951:10;;;;;;;;;;;10907:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10891:13;;:71;;;;;;;;;;;;;;;;;;11006:1;10981:27;;:13;;;;;;;;;;;:27;;::::0;10973:42:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;11028:69;11045:4;11060:16;;;;;;;;;;;11079:17;11028:8;:69::i;:::-;11133:10;;;;;;;;;;;11126:26;;;11161:16;;;;;;;;;;;11180:17;11126:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11118:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;11223:10;;;;;;;;;;;11216:26;;;11243:13;;;;;;;;;;;11258:17;11216:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11302:4;11287:29;;;11317:13;;;;;;;;;;;11332:17;11287:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11368:101;11396:16;;;;;;;;;;;11423:17;;;;;;;;;;;11443:10;;;;;;;;;;;11455:13;;;;;;;;;;;11368:101;;;;;;;;;:::i;:::-;;;;;;;;10768:709::o:0;1789:87::-;1835:7;1862:6;;;;;;;;;;;1855:13;;1789:87;:::o;2909:95::-;2956:13;2989:7;2982:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2909:95;:::o;24315:427::-;24363:19;24384;24417:16;24435;24472:13;;;;;;;;;;;24456:42;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24416:84;;;;;24511:14;24544:13;;;;;;;;;;;24528:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24511:56;;24600:4;24582:23;;:6;:23;;;24578:101;;24638:8;24630:17;;24657:8;24649:17;;24622:45;;;;;;;;;24578:101;24705:8;24697:17;;24724:8;24716:17;;24689:45;;;;;;;24315:427;;;:::o;3337:182::-;3407:4;3424:13;3440:10;3424:26;;3461:28;3471:5;3478:2;3482:6;3461:9;:28::i;:::-;3507:4;3500:11;;;3337:182;;;;:::o;22894:691::-;1748:13;:11;:13::i;:::-;22961:21:::1;23000:4;22985:31;;;23025:4;23040:16;;;;;;;;;;;22985:73;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22961:97;;8467:18;23073:13;:28;23069:125;;;23118:64;23135:4;23150:16;;;;;;;;;;;8467:18;23118:8;:64::i;:::-;23069:125;23206:19;23235:10;;;;;;;;;;;23228:28;;;23265:4;23228:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23206:65;;23300:1;23286:11;:15;23282:296;;;23318:21;23349:10;;;;;;;;;;;23342:28;;;23379:4;23394:16;;;;;;;;;;;23342:70;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23318:94;;23447:11;23431:13;:27;23427:140;;;23486:10;;;;;;;;;;;23479:26;;;23514:16;;;;;;;;;;;23533:17;23479:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23427:140;23303:275;23282:296;22950:635;;22894:691::o:0;21567:186::-;1748:13;:11;:13::i;:::-;21660:1:::1;21641:21;;:7;:21;;::::0;21633:56:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;21737:7;21700:16;;:45;;;;;;;;;;;;;;;;;;21567:186:::0;:::o;9048:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;3527:142::-;3607:7;3634:11;:18;3646:5;3634:18;;;;;;;;;;;;;;;:27;3653:7;3634:27;;;;;;;;;;;;;;;;3627:34;;3527:142;;;;:::o;25316:406::-;1748:13;:11;:13::i;:::-;25377:69:::1;25394:4;25409:16;;;;;;;;;;;25428:17;25377:8;:69::i;:::-;25464:10;;;;;;;;;;;25457:26;;;25492:16;;;;;;;;;;;25511:17;25457:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25561:10;;;;;;;;;;;25554:26;;;25581:13;;;;;;;;;;;25596:17;25554:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;25550:76:::0;::::1;;;;25655:4;25640:29;;;25670:13;;;;;;;;;;;25685:17;25640:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;25636:79:::0;::::1;;;;25316:406::o:0;1992:165::-;1748:13;:11;:13::i;:::-;2101:1:::1;2081:22;;:8;:22;;::::0;2073:37:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2121:28;2140:8;2121:18;:28::i;:::-;1992:165:::0;:::o;8905:43::-;;;;;;;;;;;;;:::o;5056:256::-;5175:1;5158:19;;:5;:19;;;;:44;;;;;5200:1;5181:21;;:7;:21;;;;5158:44;5150:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;5250:6;5220:11;:18;5232:5;5220:18;;;;;;;;;;;;;;;:27;5239:7;5220:27;;;;;;;;;;;;;;;:36;;;;5288:7;5272:32;;5281:5;5272:32;;;5297:6;5272:32;;;;;;:::i;:::-;;;;;;;;5056:256;;;:::o;5320:392::-;5421:24;5448:25;5458:5;5465:7;5448:9;:25::i;:::-;5421:52;;5508:17;5488:16;:37;5484:221;;5570:6;5550:16;:26;;5542:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;5627:51;5636:5;5643:7;5671:6;5652:16;:25;5627:8;:51::i;:::-;5484:221;5410:302;5320:392;;;:::o;11889:1282::-;12033:7;:5;:7::i;:::-;12025:15;;:4;:15;;;:32;;;;12050:7;:5;:7::i;:::-;12044:13;;:2;:13;;;12025:32;:57;;;;12077:4;12061:21;;:4;:21;;;12025:57;:80;;;;12100:4;12086:19;;:2;:19;;;12025:80;12021:233;;;12122:33;12138:4;12144:2;12148:6;12122:15;:33::i;:::-;12170:19;12184:4;12170:13;:19::i;:::-;12204:17;12218:2;12204:13;:17::i;:::-;12236:7;;12021:233;12266:16;12291:13;;;;;;;;;;;12285:19;;:2;:19;;;:44;;;;12316:13;;;;;;;;;;;12308:21;;:4;:21;;;12285:44;12266:63;;12344:11;12340:756;;;12372:16;12413:3;8528:1;12392:6;:17;;;;:::i;:::-;12391:25;;;;:::i;:::-;12372:44;;12431:20;12481:4;8583:2;12455:6;:22;;;;:::i;:::-;12454:31;;;;:::i;:::-;12431:54;;12500:18;12546:4;8639:2;12522:6;:20;;;;:::i;:::-;12521:29;;;;:::i;:::-;12500:50;;12579:46;12595:4;12609;12616:8;12579:15;:46::i;:::-;12640:44;12656:4;12662:2;12675:8;12666:6;:17;;;;:::i;:::-;12640:15;:44::i;:::-;12728:12;12701:23;;:39;;;;;;;:::i;:::-;;;;;;;;12780:10;12755:21;;:35;;;;;;;:::i;:::-;;;;;;;;8782:12;12812:23;;:49;;:100;;;;8782:12;12865:21;;:47;;12812:100;12811:142;;;;;12952:1;12935:7;:14;;;;:18;12811:142;12807:212;;;12974:29;:27;:29::i;:::-;12807:212;12357:673;;;12340:756;;;13051:33;13067:4;13073:2;13077:6;13051:15;:33::i;:::-;12340:756;13116:19;13130:4;13116:13;:19::i;:::-;13146:17;13160:2;13146:13;:17::i;:::-;12010:1161;11889:1282;;;;:::o;1884:100::-;1959:10;1948:21;;:7;:5;:7::i;:::-;:21;;;1940:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;1884:100::o;18509:1661::-;18567:26;18596:23;;18567:52;;18630:24;18657:21;;18630:48;;18689:19;18732:16;18711:18;:37;;;;:::i;:::-;18689:59;;18774:52;18789:18;18809:16;18774:52;;;;;;;:::i;:::-;;;;;;;;18839:23;18880:4;18865:31;;;18905:4;18865:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18839:72;;18949:11;18930:15;:30;;18922:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;19039:1;19013:23;:27;;;;19075:1;19051:21;:25;;;;19097:24;19139:4;19124:31;;;19164:4;19179:16;;;;;;;;;;;19124:73;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19097:100;;19231:11;19212:16;:30;19208:195;;;19259:53;19276:4;19291:16;;;;;;;;;;;19310:1;19259:8;:53::i;:::-;19327:64;19344:4;19359:16;;;;;;;;;;;8467:18;19327:8;:64::i;:::-;19208:195;19415:12;19449:16;;;;;;;;;;;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19430:54;;;19493:4;19500:10;;;;;;;;;;;19430:81;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19415:96;;19546:1;19530:18;;:4;:18;;;19522:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;19609:13;;;;;;;;;;;19601:21;;:4;:21;;;19593:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;19662:19;19684:25;19697:11;19684:12;:25::i;:::-;19662:47;;19738:1;19724:11;:15;19720:443;;;19756:24;19820:11;19798:18;19784:11;:32;;;;:::i;:::-;19783:48;;;;:::i;:::-;19756:75;;19846:22;19885:16;19871:11;:30;;;;:::i;:::-;19846:55;;19918;19936:18;19956:16;19918:17;:55::i;:::-;19988:31;20004:14;19988:15;:31::i;:::-;19741:290;;19720:443;;;20078:18;20052:23;:44;;;;20135:16;20111:21;:40;;;;19720:443;18556:1614;;;;;;;18509:1661::o;2165:191::-;2239:16;2258:6;;;;;;;;;;;2239:25;;2284:8;2275:6;;:17;;;;;;;;;;;;;;;;;;2339:8;2308:40;;2329:8;2308:40;;;;;;;;;;;;2228:128;2165:191;:::o;4133:507::-;4246:1;4230:18;;:4;:18;;;;:38;;;;;4266:1;4252:16;;:2;:16;;;;4230:38;4222:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;4286:38;4307:4;4313:2;4317:6;4286:20;:38::i;:::-;4335:19;4357:9;:15;4367:4;4357:15;;;;;;;;;;;;;;;;4335:37;;4406:6;4391:11;:21;;4383:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;4487:6;4473:11;:20;4455:9;:15;4465:4;4455:15;;;;;;;;;;;;;;;:38;;;;4525:6;4508:9;:13;4518:2;4508:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;4573:2;4558:26;;4567:4;4558:26;;;4577:6;4558:26;;;;;;:::i;:::-;;;;;;;;4595:37;4615:4;4621:2;4625:6;4595:19;:37::i;:::-;4211:429;4133:507;;;:::o;13179:588::-;13253:13;;;;;;;;;;;13242:24;;:7;:24;;;;:52;;;;;13289:4;13270:24;;:7;:24;;;;13242:52;13238:522;;;13311:15;13329:18;13339:7;13329:9;:18::i;:::-;13311:36;;13362:22;13387:8;:17;13396:7;13387:17;;;;;;;;;;;;;;;;;;;;;;;;;13362:42;;8701:11;13437:7;:28;;:50;;;;;13470:17;13469:18;13437:50;13433:316;;;13528:4;13508:8;:17;13517:7;13508:17;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;13551:7;13564;13551:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13433:316;;;8701:11;13598:7;:27;:48;;;;;13629:17;13598:48;13594:155;;;13687:5;13667:8;:17;13676:7;13667:17;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;13711:22;13725:7;13711:13;:22::i;:::-;13594:155;13433:316;13296:464;;13238:522;13179:588;:::o;14078:1941::-;14138:7;14158:21;14196:1;14182:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14158:40;;14227:4;14209;14214:1;14209:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;14253:10;;;;;;;;;;;14243:4;14248:1;14243:7;;;;;;;;:::i;:::-;;;;;;;:20;;;;;;;;;;;14276:21;14315:4;14300:31;;;14340:4;14355:16;;;;;;;;;;;14300:73;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14276:97;;14404:11;14388:13;:27;14384:197;;;14432:53;14449:4;14464:16;;;;;;;;;;;14483:1;14432:8;:53::i;:::-;14500:69;14517:4;14532:16;;;;;;;;;;;14551:17;14500:8;:69::i;:::-;14384:197;14593:21;14624:10;;;;;;;;;;;14617:28;;;14654:4;14669:16;;;;;;;;;;;14617:70;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14593:94;;14719:1;14702:13;:18;14698:123;;14744:10;;;;;;;;;;;14737:26;;;14772:16;;;;;;;;;;;14791:17;14737:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14698:123;14833:25;14868:10;;;;;;;;;;;14861:28;;;14890:13;;;;;;;;;;;14913:4;14861:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14833:86;;14955:1;14934:17;:22;14930:130;;14984:10;;;;;;;;;;;14977:26;;;15012:4;15019:17;14977:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;14973:76;;;;;14930:130;15076:16;;;;;;;;;;;:70;;;15161:11;15187:1;15203:4;15222:13;;;;;;;;;;;15268:3;15250:15;:21;;;;:::i;:::-;15076:206;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15072:940;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;15862:18;15873:6;15862:18;;;;;;:::i;:::-;;;;;;;;15902:1;15895:8;;;;;;;;;15072:940;;;15942:35;;;;;;:::i;:::-;;;;;;;;15999:1;15992:8;;;;;;;;15072:940;15298:19;15327:10;;;;;;;;;;;15320:28;;;15349:13;;;;;;;;;;;15320:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15298:65;;15396:1;15382:11;:15;15378:395;;;15429:10;;;;;;;;;;;15422:31;;;15454:13;;;;;;;;;;;15477:4;15484:11;15422:74;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;15418:340;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;15689:18;15700:6;15689:18;;;;;;:::i;:::-;;;;;;;;15737:1;15730:8;;;;;;;;;;15418:340;;;;;;;;;;;;15525:40;15540:11;15553;15525:40;;;;;;;:::i;:::-;;;;;;;;15595:11;15588:18;;;;;;;;;15378:395;15794:1;15787:8;;;;;;;14078:1941;;;;:::o;16027:1559::-;16150:1;16131:16;:20;16127:1452;;;16168:21;16199:10;;;;;;;;;;;16192:28;;;16229:4;16244:16;;;;;;;;;;;16192:70;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16168:94;;16297:16;16281:13;:32;16277:220;;;16341:10;;;;;;;;;;;16334:26;;;16369:16;;;;;;;;;;;16388:1;16334:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16416:10;;;;;;;;;;;16409:26;;;16444:16;;;;;;;;;;;16463:17;16409:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16277:220;16513:21;16552:4;16537:31;;;16577:4;16592:16;;;;;;;;;;;16537:73;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16513:97;;16645:18;16629:13;:34;16625:216;;;16684:53;16701:4;16716:16;;;;;;;;;;;16735:1;16684:8;:53::i;:::-;16756:69;16773:4;16788:16;;;;;;;;;;;16807:17;16756:8;:69::i;:::-;16625:216;16861:16;;;;;;;;;;;:29;;;16917:4;16941:10;;;;;;;;;;;16970:18;17007:16;17042:1;17062;17090:4;17132:3;17114:15;:21;;;;:::i;:::-;16861:289;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;16857:711;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;17302:26;17321:6;17302:26;;;;;;:::i;:::-;;;;;;;;17373:18;17347:23;:44;;;;17244:163;16857:711;;;;;17438:51;;;;;;:::i;:::-;;;;;;;;17534:18;17508:23;:44;;;;16857:711;;;;;;;17175:52;17190:18;17210:16;17175:52;;;;;;;:::i;:::-;;;;;;;;16857:711;16153:1426;;16127:1452;16027:1559;;:::o;17594:907::-;17683:1;17666:14;:18;:40;;;;;17705:1;17688:7;:14;;;;:18;17666:40;17662:832;;;17723:23;17766:7;:14;;;;17749;:31;;;;:::i;:::-;17723:57;;17831:1;17813:15;:19;17809:674;;;17858:9;17853:523;17877:7;:14;;;;17873:1;:18;:29;;;;;17899:3;17895:1;:7;17873:29;17853:523;;;17943:10;;;;;;;;;;;17936:27;;;17964:7;17972:1;17964:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17976:15;17936:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;17932:425;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;18132:21;18146:6;18132:21;;;;;;:::i;:::-;;;;;;;;18180:8;;;17932:425;;;18251:47;;;;;;:::i;:::-;;;;;;;;18325:8;;17932:425;;17853:523;17904:3;;;;;:::i;:::-;;;;17853:523;;;;18417:50;18436:14;18452:7;:14;;;;18417:50;;;;;;;:::i;:::-;;;;;;;;17809:674;17708:786;17662:832;17594:907;:::o;11485:195::-;11628:44;11655:4;11661:2;11665:6;11628:26;:44::i;:::-;11485:195;;;:::o;11688:193::-;11830:43;11856:4;11862:2;11866:6;11830:25;:43::i;:::-;11688:193;;;:::o;13775:295::-;13839:9;13834:229;13858:7;:14;;;;13854:1;:18;13834:229;;;13912:7;13898:21;;:7;13906:1;13898:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:21;;;13894:158;;13953:7;13978:1;13961:7;:14;;;;:18;;;;:::i;:::-;13953:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13940:7;13948:1;13940:10;;;;;;;;:::i;:::-;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;13999:7;:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;14031:5;;13894:158;13874:3;;;;;:::i;:::-;;;;13834:229;;;;13775:295;:::o;5720:91::-;;;;:::o;5819: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:225::-;14248:34;14244:1;14236:6;14232:14;14225:58;14317:8;14312:2;14304:6;14300:15;14293:33;14108:225;:::o;14339:366::-;14481:3;14502:67;14566:2;14561:3;14502:67;:::i;:::-;14495:74;;14578:93;14667:3;14578:93;:::i;:::-;14696:2;14691:3;14687:12;14680:19;;14339:366;;;:::o;14711:419::-;14877:4;14915:2;14904:9;14900:18;14892:26;;14964:9;14958:4;14954:20;14950:1;14939:9;14935:17;14928:47;14992:131;15118:4;14992:131;:::i;:::-;14984:139;;14711:419;;;:::o;15136:234::-;15276:34;15272:1;15264:6;15260:14;15253:58;15345:17;15340:2;15332:6;15328:15;15321:42;15136:234;:::o;15376:366::-;15518:3;15539:67;15603:2;15598:3;15539:67;:::i;:::-;15532:74;;15615:93;15704:3;15615:93;:::i;:::-;15733:2;15728:3;15724:12;15717:19;;15376:366;;;:::o;15748:419::-;15914:4;15952:2;15941:9;15937:18;15929:26;;16001:9;15995:4;15991:20;15987:1;15976:9;15972:17;15965:47;16029:131;16155:4;16029:131;:::i;:::-;16021:139;;15748:419;;;:::o;16173:225::-;16313:34;16309:1;16301:6;16297:14;16290:58;16382:8;16377:2;16369:6;16365:15;16358:33;16173:225;:::o;16404:366::-;16546:3;16567:67;16631:2;16626:3;16567:67;:::i;:::-;16560:74;;16643:93;16732:3;16643:93;:::i;:::-;16761:2;16756:3;16752:12;16745:19;;16404:366;;;:::o;16776:419::-;16942:4;16980:2;16969:9;16965:18;16957:26;;17029:9;17023:4;17019:20;17015:1;17004:9;17000:17;16993:47;17057:131;17183:4;17057:131;:::i;:::-;17049:139;;16776:419;;;:::o;17201:85::-;17246:7;17275:5;17264:16;;17201:85;;;:::o;17292:158::-;17350:9;17383:61;17401:42;17410:32;17436:5;17410:32;:::i;:::-;17401:42;:::i;:::-;17383:61;:::i;:::-;17370:74;;17292:158;;;:::o;17456:147::-;17551:45;17590:5;17551:45;:::i;:::-;17546:3;17539:58;17456:147;;:::o;17609:807::-;17858:4;17896:3;17885:9;17881:19;17873:27;;17910:71;17978:1;17967:9;17963:17;17954:6;17910:71;:::i;:::-;17991:72;18059:2;18048:9;18044:18;18035:6;17991:72;:::i;:::-;18073:80;18149:2;18138:9;18134:18;18125:6;18073:80;:::i;:::-;18163;18239:2;18228:9;18224:18;18215:6;18163:80;:::i;:::-;18253:73;18321:3;18310:9;18306:19;18297:6;18253:73;:::i;:::-;18336;18404:3;18393:9;18389:19;18380:6;18336:73;:::i;:::-;17609:807;;;;;;;;;:::o;18422:663::-;18510:6;18518;18526;18575:2;18563:9;18554:7;18550:23;18546:32;18543:119;;;18581:79;;:::i;:::-;18543:119;18701:1;18726:64;18782:7;18773:6;18762:9;18758:22;18726:64;:::i;:::-;18716:74;;18672:128;18839:2;18865:64;18921:7;18912:6;18901:9;18897:22;18865:64;:::i;:::-;18855:74;;18810:129;18978:2;19004:64;19060:7;19051:6;19040:9;19036:22;19004:64;:::i;:::-;18994:74;;18949:129;18422:663;;;;;:::o;19091:173::-;19231:25;19227:1;19219:6;19215:14;19208:49;19091:173;:::o;19270:366::-;19412:3;19433:67;19497:2;19492:3;19433:67;:::i;:::-;19426:74;;19509:93;19598:3;19509:93;:::i;:::-;19627:2;19622:3;19618:12;19611:19;;19270:366;;;:::o;19642:419::-;19808:4;19846:2;19835:9;19831:18;19823:26;;19895:9;19889:4;19885:20;19881:1;19870:9;19866:17;19859:47;19923:131;20049:4;19923:131;:::i;:::-;19915:139;;19642:419;;;:::o;20067:177::-;20207:29;20203:1;20195:6;20191:14;20184:53;20067:177;:::o;20250:366::-;20392:3;20413:67;20477:2;20472:3;20413:67;:::i;:::-;20406:74;;20489:93;20578:3;20489:93;:::i;:::-;20607:2;20602:3;20598:12;20591:19;;20250:366;;;:::o;20622:419::-;20788:4;20826:2;20815:9;20811:18;20803:26;;20875:9;20869:4;20865:20;20861:1;20850:9;20846:17;20839:47;20903:131;21029:4;20903:131;:::i;:::-;20895:139;;20622:419;;;:::o;21047:332::-;21168:4;21206:2;21195:9;21191:18;21183:26;;21219:71;21287:1;21276:9;21272:17;21263:6;21219:71;:::i;:::-;21300:72;21368:2;21357:9;21353:18;21344:6;21300:72;:::i;:::-;21047:332;;;;;:::o;21385:116::-;21455:21;21470:5;21455:21;:::i;:::-;21448:5;21445:32;21435:60;;21491:1;21488;21481:12;21435:60;21385:116;:::o;21507:137::-;21561:5;21592:6;21586:13;21577:22;;21608:30;21632:5;21608:30;:::i;:::-;21507:137;;;;:::o;21650:345::-;21717:6;21766:2;21754:9;21745:7;21741:23;21737:32;21734:119;;;21772:79;;:::i;:::-;21734:119;21892:1;21917:61;21970:7;21961:6;21950:9;21946:22;21917:61;:::i;:::-;21907:71;;21863:125;21650:345;;;;:::o;22001:170::-;22141:22;22137:1;22129:6;22125:14;22118:46;22001:170;:::o;22177:366::-;22319:3;22340:67;22404:2;22399:3;22340:67;:::i;:::-;22333:74;;22416:93;22505:3;22416:93;:::i;:::-;22534:2;22529:3;22525:12;22518:19;;22177:366;;;:::o;22549:419::-;22715:4;22753:2;22742:9;22738:18;22730:26;;22802:9;22796:4;22792:20;22788:1;22777:9;22773:17;22766:47;22830:131;22956:4;22830:131;:::i;:::-;22822:139;;22549:419;;;:::o;22974:167::-;23114:19;23110:1;23102:6;23098:14;23091:43;22974:167;:::o;23147:366::-;23289:3;23310:67;23374:2;23369:3;23310:67;:::i;:::-;23303:74;;23386:93;23475:3;23386:93;:::i;:::-;23504:2;23499:3;23495:12;23488:19;;23147:366;;;:::o;23519:419::-;23685:4;23723:2;23712:9;23708:18;23700:26;;23772:9;23766:4;23762:20;23758:1;23747:9;23743:17;23736:47;23800:131;23926:4;23800:131;:::i;:::-;23792:139;;23519:419;;;:::o;23944:160::-;24084:12;24080:1;24072:6;24068:14;24061:36;23944:160;:::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:152::-;26001:4;25997:1;25989:6;25985:14;25978:28;25861:152;:::o;26019:365::-;26161:3;26182:66;26246:1;26241:3;26182:66;:::i;:::-;26175:73;;26257:93;26346:3;26257:93;:::i;:::-;26375:2;26370:3;26366:12;26359:19;;26019:365;;;:::o;26390:419::-;26556:4;26594:2;26583:9;26579:18;26571:26;;26643:9;26637:4;26633:20;26629:1;26618:9;26614:17;26607:47;26671:131;26797:4;26671:131;:::i;:::-;26663:139;;26390:419;;;:::o;26815:152::-;26955:4;26951:1;26943:6;26939:14;26932:28;26815:152;:::o;26973:365::-;27115:3;27136:66;27200:1;27195:3;27136:66;:::i;:::-;27129:73;;27211:93;27300:3;27211:93;:::i;:::-;27329:2;27324:3;27320:12;27313:19;;26973:365;;;:::o;27344:419::-;27510:4;27548:2;27537:9;27533:18;27525:26;;27597:9;27591:4;27587:20;27583:1;27572:9;27568:17;27561:47;27625:131;27751:4;27625:131;:::i;:::-;27617:139;;27344:419;;;:::o;27769:553::-;27946:4;27984:3;27973:9;27969:19;27961:27;;27998:71;28066:1;28055:9;28051:17;28042:6;27998:71;:::i;:::-;28079:72;28147:2;28136:9;28132:18;28123:6;28079:72;:::i;:::-;28161;28229:2;28218:9;28214:18;28205:6;28161:72;:::i;:::-;28243;28311:2;28300:9;28296:18;28287:6;28243:72;:::i;:::-;27769:553;;;;;;;:::o;28328:114::-;28365:7;28405:30;28398:5;28394:42;28383:53;;28328:114;;;:::o;28448:122::-;28521:24;28539:5;28521:24;:::i;:::-;28514:5;28511:35;28501:63;;28560:1;28557;28550:12;28501:63;28448:122;:::o;28576:143::-;28633:5;28664:6;28658:13;28649:22;;28680:33;28707:5;28680:33;:::i;:::-;28576:143;;;;:::o;28725:93::-;28761:7;28801:10;28794:5;28790:22;28779:33;;28725:93;;;:::o;28824:120::-;28896:23;28913:5;28896:23;:::i;:::-;28889:5;28886:34;28876:62;;28934:1;28931;28924:12;28876:62;28824:120;:::o;28950:141::-;29006:5;29037:6;29031:13;29022:22;;29053:32;29079:5;29053:32;:::i;:::-;28950:141;;;;:::o;29097:661::-;29184:6;29192;29200;29249:2;29237:9;29228:7;29224:23;29220:32;29217:119;;;29255:79;;:::i;:::-;29217:119;29375:1;29400:64;29456:7;29447:6;29436:9;29432:22;29400:64;:::i;:::-;29390:74;;29346:128;29513:2;29539:64;29595:7;29586:6;29575:9;29571:22;29539:64;:::i;:::-;29529:74;;29484:129;29652:2;29678:63;29733:7;29724:6;29713:9;29709:22;29678:63;:::i;:::-;29668:73;;29623:128;29097:661;;;;;:::o;29764:172::-;29904:24;29900:1;29892:6;29888:14;29881:48;29764:172;:::o;29942:366::-;30084:3;30105:67;30169:2;30164:3;30105:67;:::i;:::-;30098:74;;30181:93;30270:3;30181:93;:::i;:::-;30299:2;30294:3;30290:12;30283:19;;29942:366;;;:::o;30314:419::-;30480:4;30518:2;30507:9;30503:18;30495:26;;30567:9;30561:4;30557:20;30553:1;30542:9;30538:17;30531:47;30595:131;30721:4;30595:131;:::i;:::-;30587:139;;30314:419;;;:::o;30739:152::-;30879:4;30875:1;30867:6;30863:14;30856:28;30739:152;:::o;30897:365::-;31039:3;31060:66;31124:1;31119:3;31060:66;:::i;:::-;31053:73;;31135:93;31224:3;31135:93;:::i;:::-;31253:2;31248:3;31244:12;31237:19;;30897:365;;;:::o;31268:419::-;31434:4;31472:2;31461:9;31457:18;31449:26;;31521:9;31515:4;31511:20;31507:1;31496:9;31492:17;31485:47;31549:131;31675:4;31549:131;:::i;:::-;31541:139;;31268:419;;;:::o;31693:152::-;31833:4;31829:1;31821:6;31817:14;31810:28;31693:152;:::o;31851:365::-;31993:3;32014:66;32078:1;32073:3;32014:66;:::i;:::-;32007:73;;32089:93;32178:3;32089:93;:::i;:::-;32207:2;32202:3;32198:12;32191:19;;31851:365;;;:::o;32222:419::-;32388:4;32426:2;32415:9;32411:18;32403:26;;32475:9;32469:4;32465:20;32461:1;32450:9;32446:17;32439:47;32503:131;32629:4;32503:131;:::i;:::-;32495:139;;32222:419;;;:::o;32647:152::-;32787:4;32783:1;32775:6;32771:14;32764:28;32647:152;:::o;32805:365::-;32947:3;32968:66;33032:1;33027:3;32968:66;:::i;:::-;32961:73;;33043:93;33132:3;33043:93;:::i;:::-;33161:2;33156:3;33152:12;33145:19;;32805:365;;;:::o;33176:419::-;33342:4;33380:2;33369:9;33365:18;33357:26;;33429:9;33423:4;33419:20;33415:1;33404:9;33400:17;33393:47;33457:131;33583:4;33457:131;:::i;:::-;33449:139;;33176:419;;;:::o;33601:194::-;33641:4;33661:20;33679:1;33661:20;:::i;:::-;33656:25;;33695:20;33713:1;33695:20;:::i;:::-;33690:25;;33739:1;33736;33732:9;33724:17;;33763:1;33757:4;33754:11;33751:37;;;33768:18;;:::i;:::-;33751:37;33601:194;;;;:::o;33801:152::-;33941:4;33937:1;33929:6;33925:14;33918:28;33801:152;:::o;33959:365::-;34101:3;34122:66;34186:1;34181:3;34122:66;:::i;:::-;34115:73;;34197:93;34286:3;34197:93;:::i;:::-;34315:2;34310:3;34306:12;34299:19;;33959:365;;;:::o;34330:419::-;34496:4;34534:2;34523:9;34519:18;34511:26;;34583:9;34577:4;34573:20;34569:1;34558:9;34554:17;34547:47;34611:131;34737:4;34611:131;:::i;:::-;34603:139;;34330:419;;;:::o;34755:222::-;34895:34;34891:1;34883:6;34879:14;34872:58;34964:5;34959:2;34951:6;34947:15;34940:30;34755:222;:::o;34983:366::-;35125:3;35146:67;35210:2;35205:3;35146:67;:::i;:::-;35139:74;;35222:93;35311:3;35222:93;:::i;:::-;35340:2;35335:3;35331:12;35324:19;;34983:366;;;:::o;35355:419::-;35521:4;35559:2;35548:9;35544:18;35536:26;;35608:9;35602:4;35598:20;35594:1;35583:9;35579:17;35572:47;35636:131;35762:4;35636:131;:::i;:::-;35628:139;;35355:419;;;:::o;35780:179::-;35920:31;35916:1;35908:6;35904:14;35897:55;35780:179;:::o;35965:366::-;36107:3;36128:67;36192:2;36187:3;36128:67;:::i;:::-;36121:74;;36204:93;36293:3;36204:93;:::i;:::-;36322:2;36317:3;36313:12;36306:19;;35965:366;;;:::o;36337:419::-;36503:4;36541:2;36530:9;36526:18;36518:26;;36590:9;36584:4;36580:20;36576:1;36565:9;36561:17;36554:47;36618:131;36744:4;36618:131;:::i;:::-;36610:139;;36337:419;;;:::o;36762:172::-;36902:24;36898:1;36890:6;36886:14;36879:48;36762:172;:::o;36940:366::-;37082:3;37103:67;37167:2;37162:3;37103:67;:::i;:::-;37096:74;;37179:93;37268:3;37179:93;:::i;:::-;37297:2;37292:3;37288:12;37281:19;;36940:366;;;:::o;37312:419::-;37478:4;37516:2;37505:9;37501:18;37493:26;;37565:9;37559:4;37555:20;37551:1;37540:9;37536:17;37529:47;37593:131;37719:4;37593:131;:::i;:::-;37585:139;;37312:419;;;:::o;37737:152::-;37877:4;37873:1;37865:6;37861:14;37854:28;37737:152;:::o;37895:365::-;38037:3;38058:66;38122:1;38117:3;38058:66;:::i;:::-;38051:73;;38133:93;38222:3;38133:93;:::i;:::-;38251:2;38246:3;38242:12;38235:19;;37895:365;;;:::o;38266:419::-;38432:4;38470:2;38459:9;38455:18;38447:26;;38519:9;38513:4;38509:20;38505:1;38494:9;38490:17;38483:47;38547:131;38673:4;38547:131;:::i;:::-;38539:139;;38266:419;;;:::o;38691:152::-;38831:4;38827:1;38819:6;38815:14;38808:28;38691:152;:::o;38849:365::-;38991:3;39012:66;39076:1;39071:3;39012:66;:::i;:::-;39005:73;;39087:93;39176:3;39087:93;:::i;:::-;39205:2;39200:3;39196:12;39189:19;;38849:365;;;:::o;39220:419::-;39386:4;39424:2;39413:9;39409:18;39401:26;;39473:9;39467:4;39463:20;39459:1;39448:9;39444:17;39437:47;39501:131;39627:4;39501:131;:::i;:::-;39493:139;;39220:419;;;:::o;39645:180::-;39693:77;39690:1;39683:88;39790:4;39787:1;39780:15;39814:4;39811:1;39804:15;39831:180;39879:77;39876:1;39869:88;39976:4;39973:1;39966:15;40000:4;39997:1;39990:15;40017:831;40280:4;40318:3;40307:9;40303:19;40295:27;;40332:71;40400:1;40389:9;40385:17;40376:6;40332:71;:::i;:::-;40413:80;40489:2;40478:9;40474:18;40465:6;40413:80;:::i;:::-;40540:9;40534:4;40530:20;40525:2;40514:9;40510:18;40503:48;40568:108;40671:4;40662:6;40568:108;:::i;:::-;40560:116;;40686:72;40754:2;40743:9;40739:18;40730:6;40686:72;:::i;:::-;40768:73;40836:3;40825:9;40821:19;40812:6;40768:73;:::i;:::-;40017:831;;;;;;;;:::o;40854:106::-;40898:8;40947:5;40942:3;40938:15;40917:36;;40854:106;;;:::o;40966:183::-;41001:3;41039:1;41021:16;41018:23;41015:128;;;41077:1;41074;41071;41056:23;41099:34;41130:1;41124:8;41099:34;:::i;:::-;41092:41;;41015:128;40966:183;:::o;41155:281::-;41238:27;41260:4;41238:27;:::i;:::-;41230:6;41226:40;41368:6;41356:10;41353:22;41332:18;41320:10;41317:34;41314:62;41311:88;;;41379:18;;:::i;:::-;41311:88;41419:10;41415:2;41408:22;41198:238;41155:281;;:::o;41442:711::-;41481:3;41519:4;41501:16;41498:26;41527:5;41495:39;41556:20;;:::i;:::-;41631:1;41613:16;41609:24;41606:1;41600:4;41585:49;41664:4;41658:11;41763:16;41756:4;41748:6;41744:17;41741:39;41708:18;41700:6;41697:30;41681:113;41678:146;;;41809:5;;;;41678:146;41855:6;41849:4;41845:17;41891:3;41885:10;41918:18;41910:6;41907:30;41904:43;;;41940:5;;;;;;41904:43;41988:6;41981:4;41976:3;41972:14;41968:27;42047:1;42029:16;42025:24;42019:4;42015:35;42010:3;42007:44;42004:57;;;42054:5;;;;;;;42004:57;42071;42119:6;42113:4;42109:17;42101:6;42097:30;42091:4;42071:57;:::i;:::-;42144:3;42137:10;;41485:668;;;;;41442:711;;:::o;42159:171::-;42299:23;42295:1;42287:6;42283:14;42276:47;42159:171;:::o;42336:366::-;42478:3;42499:67;42563:2;42558:3;42499:67;:::i;:::-;42492:74;;42575:93;42664:3;42575:93;:::i;:::-;42693:2;42688:3;42684:12;42677:19;;42336:366;;;:::o;42708:419::-;42874:4;42912:2;42901:9;42897:18;42889:26;;42961:9;42955:4;42951:20;42947:1;42936:9;42932:17;42925:47;42989:131;43115:4;42989:131;:::i;:::-;42981:139;;42708:419;;;:::o;43133:442::-;43282:4;43320:2;43309:9;43305:18;43297:26;;43333:71;43401:1;43390:9;43386:17;43377:6;43333:71;:::i;:::-;43414:72;43482:2;43471:9;43467:18;43458:6;43414:72;:::i;:::-;43496;43564:2;43553:9;43549:18;43540:6;43496:72;:::i;:::-;43133:442;;;;;;:::o;43581:348::-;43710:4;43748:2;43737:9;43733:18;43725:26;;43761:71;43829:1;43818:9;43814:17;43805:6;43761:71;:::i;:::-;43842:80;43918:2;43907:9;43903:18;43894:6;43842:80;:::i;:::-;43581:348;;;;;:::o;43935:1029::-;44240:4;44278:3;44267:9;44263:19;44255:27;;44292:71;44360:1;44349:9;44345:17;44336:6;44292:71;:::i;:::-;44373:72;44441:2;44430:9;44426:18;44417:6;44373:72;:::i;:::-;44455;44523:2;44512:9;44508:18;44499:6;44455:72;:::i;:::-;44537;44605:2;44594:9;44590:18;44581:6;44537:72;:::i;:::-;44619:81;44695:3;44684:9;44680:19;44671:6;44619:81;:::i;:::-;44710;44786:3;44775:9;44771:19;44762:6;44710:81;:::i;:::-;44801:73;44869:3;44858:9;44854:19;44845:6;44801:73;:::i;:::-;44884;44952:3;44941:9;44937:19;44928:6;44884:73;:::i;:::-;43935:1029;;;;;;;;;;;:::o;44970:179::-;45110:31;45106:1;45098:6;45094:14;45087:55;44970:179;:::o;45155:366::-;45297:3;45318:67;45382:2;45377:3;45318:67;:::i;:::-;45311:74;;45394:93;45483:3;45394:93;:::i;:::-;45512:2;45507:3;45503:12;45496:19;;45155:366;;;:::o;45527:419::-;45693:4;45731:2;45720:9;45716:18;45708:26;;45780:9;45774:4;45770:20;45766:1;45755:9;45751:17;45744:47;45808:131;45934:4;45808:131;:::i;:::-;45800:139;;45527:419;;;:::o;45952:180::-;46092:32;46088:1;46080:6;46076:14;46069:56;45952:180;:::o;46138:366::-;46280:3;46301:67;46365:2;46360:3;46301:67;:::i;:::-;46294:74;;46377:93;46466:3;46377:93;:::i;:::-;46495:2;46490:3;46486:12;46479:19;;46138:366;;;:::o;46510:419::-;46676:4;46714:2;46703:9;46699:18;46691:26;;46763:9;46757:4;46753:20;46749:1;46738:9;46734:17;46727:47;46791:131;46917:4;46791:131;:::i;:::-;46783:139;;46510:419;;;:::o;46935:233::-;46974:3;46997:24;47015:5;46997:24;:::i;:::-;46988:33;;47043:66;47036:5;47033:77;47030:103;;47113:18;;:::i;:::-;47030:103;47160:1;47153:5;47149:13;47142:20;;46935:233;;;:::o;47174:180::-;47222:77;47219:1;47212:88;47319:4;47316:1;47309:15;47343:4;47340:1;47333:15

Swarm Source

ipfs://982a5176db5287e5cd2bf7412196755223321416817f3a1532589e8381b66a2a
[ 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.