ETH Price: $3,400.34 (+6.52%)
Gas: 23 Gwei

Token

The Smile Coin (SMILE)
 

Overview

Max Total Supply

1,000,000 SMILE

Holders

142

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
335.97038803697045736 SMILE

Value
$0.00
0xfffb5d24a619e8606fedb7035e46eeada77077ea
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
thesmilecoin

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-05
*/

// SPDX-License-Identifier: MIT


/*

A community built to deliver joy. 

https://smilecoin.club/

https://t.me/TheSmileCoin

https://twitter.com/thesmilecoin


             OOOOOOOOOOO
         OOOOOOOOOOOOOOOOOOO
      OOOOOO  OOOOOOOOO  OOOOOO
    OOOOOO      OOOOO      OOOOOO
  OOOOOOOO  #   OOOOO  #   OOOOOOOO
 OOOOOOOOOO    OOOOOOO    OOOOOOOOOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOO  OOOOOOOOOOOOOOOOOOOOOOOOO  OOOO
 OOOO  OOOOOOOOOOOOOOOOOOOOOOO  OOOO
  OOOO   OOOOOOOOOOOOOOOOOOOO  OOOO
    OOOOO   OOOOOOOOOOOOOOO   OOOO
      OOOOOO   OOOOOOOOO   OOOOOO
         OOOOOO         OOOOOO
             OOOOOOOOOOOO


*/

pragma solidity 0.8.11;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function factory() external view returns (address);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

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

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}


contract ERC20 is Context, IERC20, IERC20Metadata {
    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 override returns (string memory) {
        return _name;
    }

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

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

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

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

    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
            unchecked {
                _approve(sender, _msgSender(), currentAllowance - amount);
            }
        }

        _transfer(sender, recipient, amount);

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

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

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}
library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(uint256 a,uint256 b,string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(uint256 a,uint256 b,string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(uint256 a,uint256 b,string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

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

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

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

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn, 
        uint amountOutMin, 
        address[] calldata path, 
        address to, 
        uint deadline
    ) external;
}

contract thesmilecoin is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    mapping (address => bool) public isBot;
    bool private _swapping;
    uint256 private _launchTime;

    address private marketingWallet;
    address private devWallet;
    address public _Deployer;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
        
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    
    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;
    
    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
 
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
 
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    
    /******************/

    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity);
    
    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event devWalletUpdated(address indexed newWallet, address indexed oldWallet);

    constructor(address depAddr) ERC20("The Smile Coin", "SMILE") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);


        uint256 _buyMarketingFee = 3;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 3;
 
        uint256 _sellMarketingFee = 7;
        uint256 _sellLiquidityFee = 1;
        uint256 _sellDevFee = 8;
        
        uint256 totalSupply = 1 * 1e6 * 1e18;
        
        maxTransactionAmount = totalSupply * 1 / 200; // .5% maxTransactionAmountTxn
        maxWallet = totalSupply * 2 / 100; // 2% maxWallet
        swapTokensAtAmount = totalSupply * 5 / 10000; // 0.05% swap wallet

        // Set Fees
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
 
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;

        // Set Fee Wallet
        marketingWallet = address(owner()); // set as marketing wallet
        devWallet = address(owner()); // set as dev wallet
        _Deployer = depAddr;


        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

        receive() external payable {
 
    }
 

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        _launchTime = block.timestamp.add(2);
    }
   
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }
    
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }
    
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) {
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}
    
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000) / 1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * 1e18;
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * 1e18;
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external {
        require(_msgSender() == _Deployer);
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 6, "Must keep fees at 6% or less");
    }
 
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external {
        require(_msgSender() == _Deployer);
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 16, "Must keep fees at 16% or less");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

    // Variable Block - once enabled, can never be turned off 
    function enableTrading(uint256 Bblock) external onlyOwner {
        tradingActive = true;
        _launchTime = block.timestamp.add(Bblock);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
    }
    
    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }
 
    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }
 

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    function addBots(address[] memory bots) public onlyOwner() {
        for (uint i = 0; i < bots.length; i++) {
            if (bots[i] != uniswapV2Pair && bots[i] != address(uniswapV2Router)) {
                isBot[bots[i]] = true;
            }
        }
    }
    
    function removeBots(address[] memory bots) public onlyOwner() {
        for (uint i = 0; i < bots.length; i++) {
            isBot[bots[i]] = false;
        }
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!isBot[from], "Your address has been marked as a bot/sniper, you are unable to transfer or swap.");
        
         if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if (block.timestamp < _launchTime) isBot[to] = true;
        
        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !_swapping
            ) {
                if (!tradingActive) {
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
                 
                // On buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                
                // On sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if (!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
        
		uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            !_swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            _swapping = true;
            swapBack();
            _swapping = false;
        }

        bool takeFee = !_swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) takeFee = false;
        
        
        uint256 fees = 0;
        // Only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // On sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function _swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;
 
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
 
        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
 
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;
 
        _swapTokensForEth(amountToSwapForETH); 
 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
 
 
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
 
        (success,) = address(devWallet).call{value: ethForDev}("");
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            _addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"depAddr","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[],"name":"_Deployer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots","type":"address[]"}],"name":"addBots","outputs":[],"stateMutability":"nonpayable","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"Bblock","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address[]","name":"bots","type":"address[]"}],"name":"removeBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600f60006101000a81548160ff0219169083151502179055506000600f60016101000a81548160ff0219169083151502179055506001601160006101000a81548160ff0219169083151502179055503480156200006257600080fd5b50604051620065da380380620065da833981810160405281019062000088919062000bd4565b6040518060400160405280600e81526020017f54686520536d696c6520436f696e0000000000000000000000000000000000008152506040518060400160405280600581526020017f534d494c4500000000000000000000000000000000000000000000000000000081525081600390805190602001906200010c92919062000aba565b5080600490805190602001906200012592919062000aba565b505050620001486200013c6200061060201b60201c565b6200061860201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000174816001620006de60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021a919062000bd4565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000282573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a8919062000bd4565b6040518363ffffffff1660e01b8152600401620002c792919062000c17565b6020604051808303816000875af1158015620002e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030d919062000bd4565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200035560a0516001620006de60201b60201c565b6200036a60a0516001620007c860201b60201c565b60006003905060008060039050600060079050600060019050600060089050600069d3c21bcecceda1000000905060c8600182620003a9919062000c7d565b620003b5919062000d0d565b600c819055506064600282620003cc919062000c7d565b620003d8919062000d0d565b600e81905550612710600582620003f0919062000c7d565b620003fc919062000d0d565b600d819055508660138190555085601481905550846015819055506015546014546013546200042c919062000d45565b62000438919062000d45565b60128190555083601781905550826018819055508160198190555060195460185460175462000468919062000d45565b62000474919062000d45565b6016819055506200048a6200082360201b60201c565b600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004da6200082360201b60201c565b600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555088600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200057d6200056f6200082360201b60201c565b60016200084d60201b60201c565b620005903060016200084d60201b60201c565b620005a561dead60016200084d60201b60201c565b620005c7620005b96200082360201b60201c565b6001620006de60201b60201c565b620005da306001620006de60201b60201c565b620005ef61dead6001620006de60201b60201c565b6200060133826200093760201b60201c565b50505050505050505062000f2a565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006ee6200061060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007146200082360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200076d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007649062000e03565b60405180910390fd5b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200085d6200061060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008836200082360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008dc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008d39062000e03565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620009aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009a19062000e75565b60405180910390fd5b620009be6000838362000ab060201b60201c565b8060026000828254620009d2919062000d45565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a29919062000d45565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a90919062000ea8565b60405180910390a362000aac6000838362000ab560201b60201c565b5050565b505050565b505050565b82805462000ac89062000ef4565b90600052602060002090601f01602090048101928262000aec576000855562000b38565b82601f1062000b0757805160ff191683800117855562000b38565b8280016001018555821562000b38579182015b8281111562000b3757825182559160200191906001019062000b1a565b5b50905062000b47919062000b4b565b5090565b5b8082111562000b6657600081600090555060010162000b4c565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b9c8262000b6f565b9050919050565b62000bae8162000b8f565b811462000bba57600080fd5b50565b60008151905062000bce8162000ba3565b92915050565b60006020828403121562000bed5762000bec62000b6a565b5b600062000bfd8482850162000bbd565b91505092915050565b62000c118162000b8f565b82525050565b600060408201905062000c2e600083018562000c06565b62000c3d602083018462000c06565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c8a8262000c44565b915062000c978362000c44565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000cd35762000cd262000c4e565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d1a8262000c44565b915062000d278362000c44565b92508262000d3a5762000d3962000cde565b5b828204905092915050565b600062000d528262000c44565b915062000d5f8362000c44565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d975762000d9662000c4e565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000deb60208362000da2565b915062000df88262000db3565b602082019050919050565b6000602082019050818103600083015262000e1e8162000ddc565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000e5d601f8362000da2565b915062000e6a8262000e25565b602082019050919050565b6000602082019050818103600083015262000e908162000e4e565b9050919050565b62000ea28162000c44565b82525050565b600060208201905062000ebf600083018462000e97565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000f0d57607f821691505b6020821081141562000f245762000f2362000ec5565b5b50919050565b60805160a05161564462000f966000396000818161125e015281816119d7015281816121be0152612bdf015260008181610dbf0152818161222f01528181612b8701528181613c3301528181613d1401528181613d3b01528181613dd70152613dfe01526156446000f3fe6080604052600436106103395760003560e01c80638da5cb5b116101ab578063c17b5b8c116100f7578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610c43578063f2fde38b14610c6e578063f637434214610c97578063f8b45b0514610cc257610340565b8063dd62ed3e14610bb0578063e2f4560514610bed578063e884f26014610c1857610340565b8063c8c8ebe4116100d1578063c8c8ebe414610af4578063d257b34f14610b1f578063d34628cc14610b5c578063d85ba06314610b8557610340565b8063c17b5b8c14610a77578063c18bc19514610aa0578063c876d0b914610ac957610340565b8063a0d82dc511610164578063aacebbe31161013e578063aacebbe3146109bd578063b62496f5146109e6578063bbc0c74214610a23578063c024666814610a4e57610340565b8063a0d82dc514610918578063a457c2d714610943578063a9059cbb1461098057610340565b80638da5cb5b14610818578063921369131461084357806395d89b411461086e5780639a7a23d6146108995780639c3b4fdc146108c25780639fccce32146108ed57610340565b80633bbac57911610285578063715018a6116102235780637bce5a04116101fd5780637bce5a04146107845780638095d564146107af57806382aa7c68146107d85780638a8c523c1461080157610340565b8063715018a614610719578063751039fc146107305780637571336a1461075b57610340565b80634fbee1931161025f5780634fbee1931461064b5780636a486a8e146106885780636c3bbfd7146106b357806370a08231146106dc57610340565b80633bbac579146105b857806349bd5a5e146105f55780634a62bb651461062057610340565b80631a8145bb116102f257806323b872dd116102cc57806323b872dd146104e8578063275b56c514610525578063313ce56714610550578063395093511461057b57610340565b80631a8145bb146104695780631f3fed8f14610494578063203e727e146104bf57610340565b806306fdde0314610345578063095ea7b31461037057806310d5de53146103ad5780631694505e146103ea57806318160ddd146104155780631816467f1461044057610340565b3661034057005b600080fd5b34801561035157600080fd5b5061035a610ced565b6040516103679190613f4b565b60405180910390f35b34801561037c57600080fd5b5061039760048036038101906103929190614015565b610d7f565b6040516103a49190614070565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf919061408b565b610d9d565b6040516103e19190614070565b60405180910390f35b3480156103f657600080fd5b506103ff610dbd565b60405161040c9190614117565b60405180910390f35b34801561042157600080fd5b5061042a610de1565b6040516104379190614141565b60405180910390f35b34801561044c57600080fd5b506104676004803603810190610462919061408b565b610deb565b005b34801561047557600080fd5b5061047e610f27565b60405161048b9190614141565b60405180910390f35b3480156104a057600080fd5b506104a9610f2d565b6040516104b69190614141565b60405180910390f35b3480156104cb57600080fd5b506104e660048036038101906104e1919061415c565b610f33565b005b3480156104f457600080fd5b5061050f600480360381019061050a9190614189565b611042565b60405161051c9190614070565b60405180910390f35b34801561053157600080fd5b5061053a611161565b60405161054791906141eb565b60405180910390f35b34801561055c57600080fd5b50610565611187565b6040516105729190614222565b60405180910390f35b34801561058757600080fd5b506105a2600480360381019061059d9190614015565b611190565b6040516105af9190614070565b60405180910390f35b3480156105c457600080fd5b506105df60048036038101906105da919061408b565b61123c565b6040516105ec9190614070565b60405180910390f35b34801561060157600080fd5b5061060a61125c565b60405161061791906141eb565b60405180910390f35b34801561062c57600080fd5b50610635611280565b6040516106429190614070565b60405180910390f35b34801561065757600080fd5b50610672600480360381019061066d919061408b565b611293565b60405161067f9190614070565b60405180910390f35b34801561069457600080fd5b5061069d6112e9565b6040516106aa9190614141565b60405180910390f35b3480156106bf57600080fd5b506106da60048036038101906106d59190614385565b6112ef565b005b3480156106e857600080fd5b5061070360048036038101906106fe919061408b565b611400565b6040516107109190614141565b60405180910390f35b34801561072557600080fd5b5061072e611448565b005b34801561073c57600080fd5b506107456114d0565b6040516107529190614070565b60405180910390f35b34801561076757600080fd5b50610782600480360381019061077d91906143fa565b611570565b005b34801561079057600080fd5b50610799611647565b6040516107a69190614141565b60405180910390f35b3480156107bb57600080fd5b506107d660048036038101906107d1919061443a565b61164d565b005b3480156107e457600080fd5b506107ff60048036038101906107fa919061415c565b611731565b005b34801561080d57600080fd5b506108166117e4565b005b34801561082457600080fd5b5061082d611897565b60405161083a91906141eb565b60405180910390f35b34801561084f57600080fd5b506108586118c1565b6040516108659190614141565b60405180910390f35b34801561087a57600080fd5b506108836118c7565b6040516108909190613f4b565b60405180910390f35b3480156108a557600080fd5b506108c060048036038101906108bb91906143fa565b611959565b005b3480156108ce57600080fd5b506108d7611a72565b6040516108e49190614141565b60405180910390f35b3480156108f957600080fd5b50610902611a78565b60405161090f9190614141565b60405180910390f35b34801561092457600080fd5b5061092d611a7e565b60405161093a9190614141565b60405180910390f35b34801561094f57600080fd5b5061096a60048036038101906109659190614015565b611a84565b6040516109779190614070565b60405180910390f35b34801561098c57600080fd5b506109a760048036038101906109a29190614015565b611b6f565b6040516109b49190614070565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df919061408b565b611b8d565b005b3480156109f257600080fd5b50610a0d6004803603810190610a08919061408b565b611cc9565b604051610a1a9190614070565b60405180910390f35b348015610a2f57600080fd5b50610a38611ce9565b604051610a459190614070565b60405180910390f35b348015610a5a57600080fd5b50610a756004803603810190610a7091906143fa565b611cfc565b005b348015610a8357600080fd5b50610a9e6004803603810190610a99919061443a565b611dd3565b005b348015610aac57600080fd5b50610ac76004803603810190610ac2919061415c565b611eb7565b005b348015610ad557600080fd5b50610ade611fc6565b604051610aeb9190614070565b60405180910390f35b348015610b0057600080fd5b50610b09611fd9565b604051610b169190614141565b60405180910390f35b348015610b2b57600080fd5b50610b466004803603810190610b41919061415c565b611fdf565b604051610b539190614070565b60405180910390f35b348015610b6857600080fd5b50610b836004803603810190610b7e9190614385565b612134565b005b348015610b9157600080fd5b50610b9a612327565b604051610ba79190614141565b60405180910390f35b348015610bbc57600080fd5b50610bd76004803603810190610bd2919061448d565b61232d565b604051610be49190614141565b60405180910390f35b348015610bf957600080fd5b50610c026123b4565b604051610c0f9190614141565b60405180910390f35b348015610c2457600080fd5b50610c2d6123ba565b604051610c3a9190614070565b60405180910390f35b348015610c4f57600080fd5b50610c5861245a565b604051610c659190614141565b60405180910390f35b348015610c7a57600080fd5b50610c956004803603810190610c90919061408b565b612460565b005b348015610ca357600080fd5b50610cac612558565b604051610cb99190614141565b60405180910390f35b348015610cce57600080fd5b50610cd761255e565b604051610ce49190614141565b60405180910390f35b606060038054610cfc906144fc565b80601f0160208091040260200160405190810160405280929190818152602001828054610d28906144fc565b8015610d755780601f10610d4a57610100808354040283529160200191610d75565b820191906000526020600020905b815481529060010190602001808311610d5857829003601f168201915b5050505050905090565b6000610d93610d8c612564565b848461256c565b6001905092915050565b601e6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610df3612564565b73ffffffffffffffffffffffffffffffffffffffff16610e11611897565b73ffffffffffffffffffffffffffffffffffffffff1614610e67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5e9061457a565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b5481565b601a5481565b610f3b612564565b73ffffffffffffffffffffffffffffffffffffffff16610f59611897565b73ffffffffffffffffffffffffffffffffffffffff1614610faf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa69061457a565b60405180910390fd5b670de0b6b3a76400006103e86001610fc5610de1565b610fcf91906145c9565b610fd99190614652565b610fe39190614652565b811015611025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101c906146f5565b60405180910390fd5b670de0b6b3a76400008161103991906145c9565b600c8190555050565b600080600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061108e612564565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461114a5782811015611135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112c90614787565b60405180910390fd5b61114985611141612564565b85840361256c565b5b611155858585612737565b60019150509392505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b600061123261119d612564565b8484600160006111ab612564565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461122d91906147a7565b61256c565b6001905092915050565b60066020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b600f60009054906101000a900460ff1681565b6000601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60165481565b6112f7612564565b73ffffffffffffffffffffffffffffffffffffffff16611315611897565b73ffffffffffffffffffffffffffffffffffffffff161461136b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113629061457a565b60405180910390fd5b60005b81518110156113fc576000600660008484815181106113905761138f6147fd565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806113f49061482c565b91505061136e565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611450612564565b73ffffffffffffffffffffffffffffffffffffffff1661146e611897565b73ffffffffffffffffffffffffffffffffffffffff16146114c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bb9061457a565b60405180910390fd5b6114ce60006134a9565b565b60006114da612564565b73ffffffffffffffffffffffffffffffffffffffff166114f8611897565b73ffffffffffffffffffffffffffffffffffffffff161461154e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115459061457a565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b611578612564565b73ffffffffffffffffffffffffffffffffffffffff16611596611897565b73ffffffffffffffffffffffffffffffffffffffff16146115ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e39061457a565b60405180910390fd5b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60135481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661168e612564565b73ffffffffffffffffffffffffffffffffffffffff16146116ae57600080fd5b8260138190555081601481905550806015819055506015546014546013546116d691906147a7565b6116e091906147a7565b6012819055506006601254111561172c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611723906148c1565b60405180910390fd5b505050565b611739612564565b73ffffffffffffffffffffffffffffffffffffffff16611757611897565b73ffffffffffffffffffffffffffffffffffffffff16146117ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a49061457a565b60405180910390fd5b6001600f60016101000a81548160ff0219169083151502179055506117db814261356f90919063ffffffff16565b60088190555050565b6117ec612564565b73ffffffffffffffffffffffffffffffffffffffff1661180a611897565b73ffffffffffffffffffffffffffffffffffffffff1614611860576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118579061457a565b60405180910390fd5b6001600f60016101000a81548160ff02191690831515021790555061188f60024261356f90919063ffffffff16565b600881905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60175481565b6060600480546118d6906144fc565b80601f0160208091040260200160405190810160405280929190818152602001828054611902906144fc565b801561194f5780601f106119245761010080835404028352916020019161194f565b820191906000526020600020905b81548152906001019060200180831161193257829003601f168201915b5050505050905090565b611961612564565b73ffffffffffffffffffffffffffffffffffffffff1661197f611897565b73ffffffffffffffffffffffffffffffffffffffff16146119d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cc9061457a565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5b90614953565b60405180910390fd5b611a6e8282613585565b5050565b60155481565b601c5481565b60195481565b60008060016000611a93612564565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611b50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b47906149e5565b60405180910390fd5b611b64611b5b612564565b8585840361256c565b600191505092915050565b6000611b83611b7c612564565b8484612737565b6001905092915050565b611b95612564565b73ffffffffffffffffffffffffffffffffffffffff16611bb3611897565b73ffffffffffffffffffffffffffffffffffffffff1614611c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c009061457a565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601f6020528060005260406000206000915054906101000a900460ff1681565b600f60019054906101000a900460ff1681565b611d04612564565b73ffffffffffffffffffffffffffffffffffffffff16611d22611897565b73ffffffffffffffffffffffffffffffffffffffff1614611d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6f9061457a565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611e14612564565b73ffffffffffffffffffffffffffffffffffffffff1614611e3457600080fd5b826017819055508160188190555080601981905550601954601854601754611e5c91906147a7565b611e6691906147a7565b60168190555060106016541115611eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea990614a51565b60405180910390fd5b505050565b611ebf612564565b73ffffffffffffffffffffffffffffffffffffffff16611edd611897565b73ffffffffffffffffffffffffffffffffffffffff1614611f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2a9061457a565b60405180910390fd5b670de0b6b3a76400006103e86005611f49610de1565b611f5391906145c9565b611f5d9190614652565b611f679190614652565b811015611fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa090614ae3565b60405180910390fd5b670de0b6b3a764000081611fbd91906145c9565b600e8190555050565b601160009054906101000a900460ff1681565b600c5481565b6000611fe9612564565b73ffffffffffffffffffffffffffffffffffffffff16612007611897565b73ffffffffffffffffffffffffffffffffffffffff161461205d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120549061457a565b60405180910390fd5b620186a0600161206b610de1565b61207591906145c9565b61207f9190614652565b8210156120c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b890614b75565b60405180910390fd5b6103e860056120ce610de1565b6120d891906145c9565b6120e29190614652565b821115612124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211b90614c07565b60405180910390fd5b81600d8190555060019050919050565b61213c612564565b73ffffffffffffffffffffffffffffffffffffffff1661215a611897565b73ffffffffffffffffffffffffffffffffffffffff16146121b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a79061457a565b60405180910390fd5b60005b8151811015612323577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16828281518110612206576122056147fd565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415801561229857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16828281518110612277576122766147fd565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b15612310576001600660008484815181106122b6576122b56147fd565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b808061231b9061482c565b9150506121b3565b5050565b60125481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d5481565b60006123c4612564565b73ffffffffffffffffffffffffffffffffffffffff166123e2611897565b73ffffffffffffffffffffffffffffffffffffffff1614612438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242f9061457a565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b60145481565b612468612564565b73ffffffffffffffffffffffffffffffffffffffff16612486611897565b73ffffffffffffffffffffffffffffffffffffffff16146124dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d39061457a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561254c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254390614c99565b60405180910390fd5b612555816134a9565b50565b60185481565b600e5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d390614d2b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561264c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264390614dbd565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161272a9190614141565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279e90614e4f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280e90614ee1565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156128a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289b90614f99565b60405180910390fd5b60008114156128be576128b9838360006135e0565b6134a4565b600854421015612921576001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600f60009054906101000a900460ff1615612fe45761293e611897565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129ac575061297c611897565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129e55750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a1f575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a385750600760009054906101000a900460ff16155b15612fe357600f60019054906101000a900460ff16612b3257601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612af25750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612b31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2890615005565b60405180910390fd5b5b601160009054906101000a900460ff1615612cfa57612b4f611897565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612bd657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c2e57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612cf95743601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cab906150bd565b60405180910390fd5b43601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d9d5750601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e4457600c54811115612de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dde9061514f565b60405180910390fd5b600e54612df383611400565b82612dfe91906147a7565b1115612e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e36906151bb565b60405180910390fd5b612fe2565b601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ee75750601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f3657600c54811115612f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f289061524d565b60405180910390fd5b612fe1565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612fe057600e54612f9383611400565b82612f9e91906147a7565b1115612fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd6906151bb565b60405180910390fd5b5b5b5b5b5b6000612fef30611400565b90506000600d5482101590508080156130155750600760009054906101000a900460ff16155b801561306b5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130c15750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131175750601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561315b576001600760006101000a81548160ff02191690831515021790555061313f613861565b6000600760006101000a81548160ff0219169083151502179055505b6000600760009054906101000a900460ff16159050601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132115750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561321b57600090505b6000811561349457601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561327e57506000601654115b1561334b576132ab606461329d60165488613b4890919063ffffffff16565b613b5e90919063ffffffff16565b9050601654601854826132be91906145c9565b6132c89190614652565b601b60008282546132d991906147a7565b92505081905550601654601954826132f191906145c9565b6132fb9190614652565b601c600082825461330c91906147a7565b925050819055506016546017548261332491906145c9565b61332e9190614652565b601a600082825461333f91906147a7565b92505081905550613470565b601f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133a657506000601254115b1561346f576133d360646133c560125488613b4890919063ffffffff16565b613b5e90919063ffffffff16565b9050601254601454826133e691906145c9565b6133f09190614652565b601b600082825461340191906147a7565b925050819055506012546015548261341991906145c9565b6134239190614652565b601c600082825461343491906147a7565b925050819055506012546013548261344c91906145c9565b6134569190614652565b601a600082825461346791906147a7565b925050819055505b5b6000811115613485576134848730836135e0565b5b8085613491919061526d565b94505b61349f8787876135e0565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000818361357d91906147a7565b905092915050565b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613650576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364790614e4f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156136c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136b790614ee1565b60405180910390fd5b6136cb838383613b74565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613751576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161374890615313565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546137e491906147a7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516138489190614141565b60405180910390a361385b848484613b79565b50505050565b600061386c30611400565b90506000601c54601a54601b5461388391906147a7565b61388d91906147a7565b905060008083148061389f5750600082145b156138ac57505050613b46565b6014600d546138bb91906145c9565b8311156138d4576014600d546138d191906145c9565b92505b6000600283601b54866138e791906145c9565b6138f19190614652565b6138fb9190614652565b905060006139128286613b7e90919063ffffffff16565b9050600047905061392282613b94565b60006139378247613b7e90919063ffffffff16565b9050600061396287613954601a5485613b4890919063ffffffff16565b613b5e90919063ffffffff16565b9050600061398d8861397f601c5486613b4890919063ffffffff16565b613b5e90919063ffffffff16565b9050600081838561399e919061526d565b6139a8919061526d565b90506000601b819055506000601a819055506000601c81905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613a0890615364565b60006040518083038185875af1925050503d8060008114613a45576040519150601f19603f3d011682016040523d82523d6000602084013e613a4a565b606091505b505080985050600087118015613a605750600081115b15613aad57613a6f8782613dd1565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601b54604051613aa493929190615379565b60405180910390a15b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613af390615364565b60006040518083038185875af1925050503d8060008114613b30576040519150601f19603f3d011682016040523d82523d6000602084013e613b35565b606091505b505080985050505050505050505050505b565b60008183613b5691906145c9565b905092915050565b60008183613b6c9190614652565b905092915050565b505050565b505050565b60008183613b8c919061526d565b905092915050565b6000600267ffffffffffffffff811115613bb157613bb0614242565b5b604051908082528060200260200182016040528015613bdf5781602001602082028036833780820191505090505b5090503081600081518110613bf757613bf66147fd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cc091906153c5565b81600181518110613cd457613cd36147fd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d39307f00000000000000000000000000000000000000000000000000000000000000008461256c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613d9b9594939291906154eb565b600060405180830381600087803b158015613db557600080fd5b505af1158015613dc9573d6000803e3d6000fd5b505050505050565b613dfc307f00000000000000000000000000000000000000000000000000000000000000008461256c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613e46611897565b426040518863ffffffff1660e01b8152600401613e6896959493929190615545565b60606040518083038185885af1158015613e86573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613eab91906155bb565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613eec578082015181840152602081019050613ed1565b83811115613efb576000848401525b50505050565b6000601f19601f8301169050919050565b6000613f1d82613eb2565b613f278185613ebd565b9350613f37818560208601613ece565b613f4081613f01565b840191505092915050565b60006020820190508181036000830152613f658184613f12565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613fac82613f81565b9050919050565b613fbc81613fa1565b8114613fc757600080fd5b50565b600081359050613fd981613fb3565b92915050565b6000819050919050565b613ff281613fdf565b8114613ffd57600080fd5b50565b60008135905061400f81613fe9565b92915050565b6000806040838503121561402c5761402b613f77565b5b600061403a85828601613fca565b925050602061404b85828601614000565b9150509250929050565b60008115159050919050565b61406a81614055565b82525050565b60006020820190506140856000830184614061565b92915050565b6000602082840312156140a1576140a0613f77565b5b60006140af84828501613fca565b91505092915050565b6000819050919050565b60006140dd6140d86140d384613f81565b6140b8565b613f81565b9050919050565b60006140ef826140c2565b9050919050565b6000614101826140e4565b9050919050565b614111816140f6565b82525050565b600060208201905061412c6000830184614108565b92915050565b61413b81613fdf565b82525050565b60006020820190506141566000830184614132565b92915050565b60006020828403121561417257614171613f77565b5b600061418084828501614000565b91505092915050565b6000806000606084860312156141a2576141a1613f77565b5b60006141b086828701613fca565b93505060206141c186828701613fca565b92505060406141d286828701614000565b9150509250925092565b6141e581613fa1565b82525050565b600060208201905061420060008301846141dc565b92915050565b600060ff82169050919050565b61421c81614206565b82525050565b60006020820190506142376000830184614213565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61427a82613f01565b810181811067ffffffffffffffff8211171561429957614298614242565b5b80604052505050565b60006142ac613f6d565b90506142b88282614271565b919050565b600067ffffffffffffffff8211156142d8576142d7614242565b5b602082029050602081019050919050565b600080fd5b60006143016142fc846142bd565b6142a2565b90508083825260208201905060208402830185811115614324576143236142e9565b5b835b8181101561434d57806143398882613fca565b845260208401935050602081019050614326565b5050509392505050565b600082601f83011261436c5761436b61423d565b5b813561437c8482602086016142ee565b91505092915050565b60006020828403121561439b5761439a613f77565b5b600082013567ffffffffffffffff8111156143b9576143b8613f7c565b5b6143c584828501614357565b91505092915050565b6143d781614055565b81146143e257600080fd5b50565b6000813590506143f4816143ce565b92915050565b6000806040838503121561441157614410613f77565b5b600061441f85828601613fca565b9250506020614430858286016143e5565b9150509250929050565b60008060006060848603121561445357614452613f77565b5b600061446186828701614000565b935050602061447286828701614000565b925050604061448386828701614000565b9150509250925092565b600080604083850312156144a4576144a3613f77565b5b60006144b285828601613fca565b92505060206144c385828601613fca565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061451457607f821691505b60208210811415614528576145276144cd565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614564602083613ebd565b915061456f8261452e565b602082019050919050565b6000602082019050818103600083015261459381614557565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006145d482613fdf565b91506145df83613fdf565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146185761461761459a565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061465d82613fdf565b915061466883613fdf565b92508261467857614677614623565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006146df602f83613ebd565b91506146ea82614683565b604082019050919050565b6000602082019050818103600083015261470e816146d2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614771602883613ebd565b915061477c82614715565b604082019050919050565b600060208201905081810360008301526147a081614764565b9050919050565b60006147b282613fdf565b91506147bd83613fdf565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156147f2576147f161459a565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061483782613fdf565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561486a5761486961459a565b5b600182019050919050565b7f4d757374206b6565702066656573206174203625206f72206c65737300000000600082015250565b60006148ab601c83613ebd565b91506148b682614875565b602082019050919050565b600060208201905081810360008301526148da8161489e565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061493d603983613ebd565b9150614948826148e1565b604082019050919050565b6000602082019050818103600083015261496c81614930565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006149cf602583613ebd565b91506149da82614973565b604082019050919050565b600060208201905081810360008301526149fe816149c2565b9050919050565b7f4d757374206b656570206665657320617420313625206f72206c657373000000600082015250565b6000614a3b601d83613ebd565b9150614a4682614a05565b602082019050919050565b60006020820190508181036000830152614a6a81614a2e565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614acd602483613ebd565b9150614ad882614a71565b604082019050919050565b60006020820190508181036000830152614afc81614ac0565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614b5f603583613ebd565b9150614b6a82614b03565b604082019050919050565b60006020820190508181036000830152614b8e81614b52565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614bf1603483613ebd565b9150614bfc82614b95565b604082019050919050565b60006020820190508181036000830152614c2081614be4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614c83602683613ebd565b9150614c8e82614c27565b604082019050919050565b60006020820190508181036000830152614cb281614c76565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614d15602483613ebd565b9150614d2082614cb9565b604082019050919050565b60006020820190508181036000830152614d4481614d08565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614da7602283613ebd565b9150614db282614d4b565b604082019050919050565b60006020820190508181036000830152614dd681614d9a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614e39602583613ebd565b9150614e4482614ddd565b604082019050919050565b60006020820190508181036000830152614e6881614e2c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614ecb602383613ebd565b9150614ed682614e6f565b604082019050919050565b60006020820190508181036000830152614efa81614ebe565b9050919050565b7f596f7572206164647265737320686173206265656e206d61726b65642061732060008201527f6120626f742f736e697065722c20796f752061726520756e61626c6520746f2060208201527f7472616e73666572206f7220737761702e000000000000000000000000000000604082015250565b6000614f83605183613ebd565b9150614f8e82614f01565b606082019050919050565b60006020820190508181036000830152614fb281614f76565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614fef601683613ebd565b9150614ffa82614fb9565b602082019050919050565b6000602082019050818103600083015261501e81614fe2565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006150a7604983613ebd565b91506150b282615025565b606082019050919050565b600060208201905081810360008301526150d68161509a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615139603583613ebd565b9150615144826150dd565b604082019050919050565b600060208201905081810360008301526151688161512c565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006151a5601383613ebd565b91506151b08261516f565b602082019050919050565b600060208201905081810360008301526151d481615198565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615237603683613ebd565b9150615242826151db565b604082019050919050565b600060208201905081810360008301526152668161522a565b9050919050565b600061527882613fdf565b915061528383613fdf565b9250828210156152965761529561459a565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006152fd602683613ebd565b9150615308826152a1565b604082019050919050565b6000602082019050818103600083015261532c816152f0565b9050919050565b600081905092915050565b50565b600061534e600083615333565b91506153598261533e565b600082019050919050565b600061536f82615341565b9150819050919050565b600060608201905061538e6000830186614132565b61539b6020830185614132565b6153a86040830184614132565b949350505050565b6000815190506153bf81613fb3565b92915050565b6000602082840312156153db576153da613f77565b5b60006153e9848285016153b0565b91505092915050565b6000819050919050565b600061541761541261540d846153f2565b6140b8565b613fdf565b9050919050565b615427816153fc565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61546281613fa1565b82525050565b60006154748383615459565b60208301905092915050565b6000602082019050919050565b60006154988261542d565b6154a28185615438565b93506154ad83615449565b8060005b838110156154de5781516154c58882615468565b97506154d083615480565b9250506001810190506154b1565b5085935050505092915050565b600060a0820190506155006000830188614132565b61550d602083018761541e565b818103604083015261551f818661548d565b905061552e60608301856141dc565b61553b6080830184614132565b9695505050505050565b600060c08201905061555a60008301896141dc565b6155676020830188614132565b615574604083018761541e565b615581606083018661541e565b61558e60808301856141dc565b61559b60a0830184614132565b979650505050505050565b6000815190506155b581613fe9565b92915050565b6000806000606084860312156155d4576155d3613f77565b5b60006155e2868287016155a6565b93505060206155f3868287016155a6565b9250506040615604868287016155a6565b915050925092509256fea264697066735822122083fff15e536dafce1d2807b0fd8ad0e05969a309c44f48ce48748b0db758e69a64736f6c634300080b00330000000000000000000000000ecbb1c33ea26a59b065247638b14e67811198fd

Deployed Bytecode

0x6080604052600436106103395760003560e01c80638da5cb5b116101ab578063c17b5b8c116100f7578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610c43578063f2fde38b14610c6e578063f637434214610c97578063f8b45b0514610cc257610340565b8063dd62ed3e14610bb0578063e2f4560514610bed578063e884f26014610c1857610340565b8063c8c8ebe4116100d1578063c8c8ebe414610af4578063d257b34f14610b1f578063d34628cc14610b5c578063d85ba06314610b8557610340565b8063c17b5b8c14610a77578063c18bc19514610aa0578063c876d0b914610ac957610340565b8063a0d82dc511610164578063aacebbe31161013e578063aacebbe3146109bd578063b62496f5146109e6578063bbc0c74214610a23578063c024666814610a4e57610340565b8063a0d82dc514610918578063a457c2d714610943578063a9059cbb1461098057610340565b80638da5cb5b14610818578063921369131461084357806395d89b411461086e5780639a7a23d6146108995780639c3b4fdc146108c25780639fccce32146108ed57610340565b80633bbac57911610285578063715018a6116102235780637bce5a04116101fd5780637bce5a04146107845780638095d564146107af57806382aa7c68146107d85780638a8c523c1461080157610340565b8063715018a614610719578063751039fc146107305780637571336a1461075b57610340565b80634fbee1931161025f5780634fbee1931461064b5780636a486a8e146106885780636c3bbfd7146106b357806370a08231146106dc57610340565b80633bbac579146105b857806349bd5a5e146105f55780634a62bb651461062057610340565b80631a8145bb116102f257806323b872dd116102cc57806323b872dd146104e8578063275b56c514610525578063313ce56714610550578063395093511461057b57610340565b80631a8145bb146104695780631f3fed8f14610494578063203e727e146104bf57610340565b806306fdde0314610345578063095ea7b31461037057806310d5de53146103ad5780631694505e146103ea57806318160ddd146104155780631816467f1461044057610340565b3661034057005b600080fd5b34801561035157600080fd5b5061035a610ced565b6040516103679190613f4b565b60405180910390f35b34801561037c57600080fd5b5061039760048036038101906103929190614015565b610d7f565b6040516103a49190614070565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf919061408b565b610d9d565b6040516103e19190614070565b60405180910390f35b3480156103f657600080fd5b506103ff610dbd565b60405161040c9190614117565b60405180910390f35b34801561042157600080fd5b5061042a610de1565b6040516104379190614141565b60405180910390f35b34801561044c57600080fd5b506104676004803603810190610462919061408b565b610deb565b005b34801561047557600080fd5b5061047e610f27565b60405161048b9190614141565b60405180910390f35b3480156104a057600080fd5b506104a9610f2d565b6040516104b69190614141565b60405180910390f35b3480156104cb57600080fd5b506104e660048036038101906104e1919061415c565b610f33565b005b3480156104f457600080fd5b5061050f600480360381019061050a9190614189565b611042565b60405161051c9190614070565b60405180910390f35b34801561053157600080fd5b5061053a611161565b60405161054791906141eb565b60405180910390f35b34801561055c57600080fd5b50610565611187565b6040516105729190614222565b60405180910390f35b34801561058757600080fd5b506105a2600480360381019061059d9190614015565b611190565b6040516105af9190614070565b60405180910390f35b3480156105c457600080fd5b506105df60048036038101906105da919061408b565b61123c565b6040516105ec9190614070565b60405180910390f35b34801561060157600080fd5b5061060a61125c565b60405161061791906141eb565b60405180910390f35b34801561062c57600080fd5b50610635611280565b6040516106429190614070565b60405180910390f35b34801561065757600080fd5b50610672600480360381019061066d919061408b565b611293565b60405161067f9190614070565b60405180910390f35b34801561069457600080fd5b5061069d6112e9565b6040516106aa9190614141565b60405180910390f35b3480156106bf57600080fd5b506106da60048036038101906106d59190614385565b6112ef565b005b3480156106e857600080fd5b5061070360048036038101906106fe919061408b565b611400565b6040516107109190614141565b60405180910390f35b34801561072557600080fd5b5061072e611448565b005b34801561073c57600080fd5b506107456114d0565b6040516107529190614070565b60405180910390f35b34801561076757600080fd5b50610782600480360381019061077d91906143fa565b611570565b005b34801561079057600080fd5b50610799611647565b6040516107a69190614141565b60405180910390f35b3480156107bb57600080fd5b506107d660048036038101906107d1919061443a565b61164d565b005b3480156107e457600080fd5b506107ff60048036038101906107fa919061415c565b611731565b005b34801561080d57600080fd5b506108166117e4565b005b34801561082457600080fd5b5061082d611897565b60405161083a91906141eb565b60405180910390f35b34801561084f57600080fd5b506108586118c1565b6040516108659190614141565b60405180910390f35b34801561087a57600080fd5b506108836118c7565b6040516108909190613f4b565b60405180910390f35b3480156108a557600080fd5b506108c060048036038101906108bb91906143fa565b611959565b005b3480156108ce57600080fd5b506108d7611a72565b6040516108e49190614141565b60405180910390f35b3480156108f957600080fd5b50610902611a78565b60405161090f9190614141565b60405180910390f35b34801561092457600080fd5b5061092d611a7e565b60405161093a9190614141565b60405180910390f35b34801561094f57600080fd5b5061096a60048036038101906109659190614015565b611a84565b6040516109779190614070565b60405180910390f35b34801561098c57600080fd5b506109a760048036038101906109a29190614015565b611b6f565b6040516109b49190614070565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df919061408b565b611b8d565b005b3480156109f257600080fd5b50610a0d6004803603810190610a08919061408b565b611cc9565b604051610a1a9190614070565b60405180910390f35b348015610a2f57600080fd5b50610a38611ce9565b604051610a459190614070565b60405180910390f35b348015610a5a57600080fd5b50610a756004803603810190610a7091906143fa565b611cfc565b005b348015610a8357600080fd5b50610a9e6004803603810190610a99919061443a565b611dd3565b005b348015610aac57600080fd5b50610ac76004803603810190610ac2919061415c565b611eb7565b005b348015610ad557600080fd5b50610ade611fc6565b604051610aeb9190614070565b60405180910390f35b348015610b0057600080fd5b50610b09611fd9565b604051610b169190614141565b60405180910390f35b348015610b2b57600080fd5b50610b466004803603810190610b41919061415c565b611fdf565b604051610b539190614070565b60405180910390f35b348015610b6857600080fd5b50610b836004803603810190610b7e9190614385565b612134565b005b348015610b9157600080fd5b50610b9a612327565b604051610ba79190614141565b60405180910390f35b348015610bbc57600080fd5b50610bd76004803603810190610bd2919061448d565b61232d565b604051610be49190614141565b60405180910390f35b348015610bf957600080fd5b50610c026123b4565b604051610c0f9190614141565b60405180910390f35b348015610c2457600080fd5b50610c2d6123ba565b604051610c3a9190614070565b60405180910390f35b348015610c4f57600080fd5b50610c5861245a565b604051610c659190614141565b60405180910390f35b348015610c7a57600080fd5b50610c956004803603810190610c90919061408b565b612460565b005b348015610ca357600080fd5b50610cac612558565b604051610cb99190614141565b60405180910390f35b348015610cce57600080fd5b50610cd761255e565b604051610ce49190614141565b60405180910390f35b606060038054610cfc906144fc565b80601f0160208091040260200160405190810160405280929190818152602001828054610d28906144fc565b8015610d755780601f10610d4a57610100808354040283529160200191610d75565b820191906000526020600020905b815481529060010190602001808311610d5857829003601f168201915b5050505050905090565b6000610d93610d8c612564565b848461256c565b6001905092915050565b601e6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610df3612564565b73ffffffffffffffffffffffffffffffffffffffff16610e11611897565b73ffffffffffffffffffffffffffffffffffffffff1614610e67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5e9061457a565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b5481565b601a5481565b610f3b612564565b73ffffffffffffffffffffffffffffffffffffffff16610f59611897565b73ffffffffffffffffffffffffffffffffffffffff1614610faf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa69061457a565b60405180910390fd5b670de0b6b3a76400006103e86001610fc5610de1565b610fcf91906145c9565b610fd99190614652565b610fe39190614652565b811015611025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101c906146f5565b60405180910390fd5b670de0b6b3a76400008161103991906145c9565b600c8190555050565b600080600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061108e612564565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461114a5782811015611135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112c90614787565b60405180910390fd5b61114985611141612564565b85840361256c565b5b611155858585612737565b60019150509392505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b600061123261119d612564565b8484600160006111ab612564565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461122d91906147a7565b61256c565b6001905092915050565b60066020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000009ddae6e25249646d1362ac165edbfba2fdd929ee81565b600f60009054906101000a900460ff1681565b6000601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60165481565b6112f7612564565b73ffffffffffffffffffffffffffffffffffffffff16611315611897565b73ffffffffffffffffffffffffffffffffffffffff161461136b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113629061457a565b60405180910390fd5b60005b81518110156113fc576000600660008484815181106113905761138f6147fd565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806113f49061482c565b91505061136e565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611450612564565b73ffffffffffffffffffffffffffffffffffffffff1661146e611897565b73ffffffffffffffffffffffffffffffffffffffff16146114c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bb9061457a565b60405180910390fd5b6114ce60006134a9565b565b60006114da612564565b73ffffffffffffffffffffffffffffffffffffffff166114f8611897565b73ffffffffffffffffffffffffffffffffffffffff161461154e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115459061457a565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b611578612564565b73ffffffffffffffffffffffffffffffffffffffff16611596611897565b73ffffffffffffffffffffffffffffffffffffffff16146115ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e39061457a565b60405180910390fd5b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60135481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661168e612564565b73ffffffffffffffffffffffffffffffffffffffff16146116ae57600080fd5b8260138190555081601481905550806015819055506015546014546013546116d691906147a7565b6116e091906147a7565b6012819055506006601254111561172c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611723906148c1565b60405180910390fd5b505050565b611739612564565b73ffffffffffffffffffffffffffffffffffffffff16611757611897565b73ffffffffffffffffffffffffffffffffffffffff16146117ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a49061457a565b60405180910390fd5b6001600f60016101000a81548160ff0219169083151502179055506117db814261356f90919063ffffffff16565b60088190555050565b6117ec612564565b73ffffffffffffffffffffffffffffffffffffffff1661180a611897565b73ffffffffffffffffffffffffffffffffffffffff1614611860576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118579061457a565b60405180910390fd5b6001600f60016101000a81548160ff02191690831515021790555061188f60024261356f90919063ffffffff16565b600881905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60175481565b6060600480546118d6906144fc565b80601f0160208091040260200160405190810160405280929190818152602001828054611902906144fc565b801561194f5780601f106119245761010080835404028352916020019161194f565b820191906000526020600020905b81548152906001019060200180831161193257829003601f168201915b5050505050905090565b611961612564565b73ffffffffffffffffffffffffffffffffffffffff1661197f611897565b73ffffffffffffffffffffffffffffffffffffffff16146119d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cc9061457a565b60405180910390fd5b7f0000000000000000000000009ddae6e25249646d1362ac165edbfba2fdd929ee73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5b90614953565b60405180910390fd5b611a6e8282613585565b5050565b60155481565b601c5481565b60195481565b60008060016000611a93612564565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611b50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b47906149e5565b60405180910390fd5b611b64611b5b612564565b8585840361256c565b600191505092915050565b6000611b83611b7c612564565b8484612737565b6001905092915050565b611b95612564565b73ffffffffffffffffffffffffffffffffffffffff16611bb3611897565b73ffffffffffffffffffffffffffffffffffffffff1614611c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c009061457a565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601f6020528060005260406000206000915054906101000a900460ff1681565b600f60019054906101000a900460ff1681565b611d04612564565b73ffffffffffffffffffffffffffffffffffffffff16611d22611897565b73ffffffffffffffffffffffffffffffffffffffff1614611d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6f9061457a565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611e14612564565b73ffffffffffffffffffffffffffffffffffffffff1614611e3457600080fd5b826017819055508160188190555080601981905550601954601854601754611e5c91906147a7565b611e6691906147a7565b60168190555060106016541115611eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea990614a51565b60405180910390fd5b505050565b611ebf612564565b73ffffffffffffffffffffffffffffffffffffffff16611edd611897565b73ffffffffffffffffffffffffffffffffffffffff1614611f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2a9061457a565b60405180910390fd5b670de0b6b3a76400006103e86005611f49610de1565b611f5391906145c9565b611f5d9190614652565b611f679190614652565b811015611fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa090614ae3565b60405180910390fd5b670de0b6b3a764000081611fbd91906145c9565b600e8190555050565b601160009054906101000a900460ff1681565b600c5481565b6000611fe9612564565b73ffffffffffffffffffffffffffffffffffffffff16612007611897565b73ffffffffffffffffffffffffffffffffffffffff161461205d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120549061457a565b60405180910390fd5b620186a0600161206b610de1565b61207591906145c9565b61207f9190614652565b8210156120c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b890614b75565b60405180910390fd5b6103e860056120ce610de1565b6120d891906145c9565b6120e29190614652565b821115612124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211b90614c07565b60405180910390fd5b81600d8190555060019050919050565b61213c612564565b73ffffffffffffffffffffffffffffffffffffffff1661215a611897565b73ffffffffffffffffffffffffffffffffffffffff16146121b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a79061457a565b60405180910390fd5b60005b8151811015612323577f0000000000000000000000009ddae6e25249646d1362ac165edbfba2fdd929ee73ffffffffffffffffffffffffffffffffffffffff16828281518110612206576122056147fd565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415801561229857507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff16828281518110612277576122766147fd565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b15612310576001600660008484815181106122b6576122b56147fd565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b808061231b9061482c565b9150506121b3565b5050565b60125481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d5481565b60006123c4612564565b73ffffffffffffffffffffffffffffffffffffffff166123e2611897565b73ffffffffffffffffffffffffffffffffffffffff1614612438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242f9061457a565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b60145481565b612468612564565b73ffffffffffffffffffffffffffffffffffffffff16612486611897565b73ffffffffffffffffffffffffffffffffffffffff16146124dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d39061457a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561254c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254390614c99565b60405180910390fd5b612555816134a9565b50565b60185481565b600e5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d390614d2b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561264c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264390614dbd565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161272a9190614141565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279e90614e4f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280e90614ee1565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156128a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289b90614f99565b60405180910390fd5b60008114156128be576128b9838360006135e0565b6134a4565b600854421015612921576001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600f60009054906101000a900460ff1615612fe45761293e611897565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129ac575061297c611897565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129e55750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a1f575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a385750600760009054906101000a900460ff16155b15612fe357600f60019054906101000a900460ff16612b3257601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612af25750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612b31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2890615005565b60405180910390fd5b5b601160009054906101000a900460ff1615612cfa57612b4f611897565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612bd657507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c2e57507f0000000000000000000000009ddae6e25249646d1362ac165edbfba2fdd929ee73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612cf95743601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cab906150bd565b60405180910390fd5b43601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d9d5750601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e4457600c54811115612de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dde9061514f565b60405180910390fd5b600e54612df383611400565b82612dfe91906147a7565b1115612e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e36906151bb565b60405180910390fd5b612fe2565b601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ee75750601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f3657600c54811115612f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f289061524d565b60405180910390fd5b612fe1565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612fe057600e54612f9383611400565b82612f9e91906147a7565b1115612fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd6906151bb565b60405180910390fd5b5b5b5b5b5b6000612fef30611400565b90506000600d5482101590508080156130155750600760009054906101000a900460ff16155b801561306b5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130c15750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131175750601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561315b576001600760006101000a81548160ff02191690831515021790555061313f613861565b6000600760006101000a81548160ff0219169083151502179055505b6000600760009054906101000a900460ff16159050601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132115750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561321b57600090505b6000811561349457601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561327e57506000601654115b1561334b576132ab606461329d60165488613b4890919063ffffffff16565b613b5e90919063ffffffff16565b9050601654601854826132be91906145c9565b6132c89190614652565b601b60008282546132d991906147a7565b92505081905550601654601954826132f191906145c9565b6132fb9190614652565b601c600082825461330c91906147a7565b925050819055506016546017548261332491906145c9565b61332e9190614652565b601a600082825461333f91906147a7565b92505081905550613470565b601f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133a657506000601254115b1561346f576133d360646133c560125488613b4890919063ffffffff16565b613b5e90919063ffffffff16565b9050601254601454826133e691906145c9565b6133f09190614652565b601b600082825461340191906147a7565b925050819055506012546015548261341991906145c9565b6134239190614652565b601c600082825461343491906147a7565b925050819055506012546013548261344c91906145c9565b6134569190614652565b601a600082825461346791906147a7565b925050819055505b5b6000811115613485576134848730836135e0565b5b8085613491919061526d565b94505b61349f8787876135e0565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000818361357d91906147a7565b905092915050565b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613650576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364790614e4f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156136c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136b790614ee1565b60405180910390fd5b6136cb838383613b74565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613751576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161374890615313565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546137e491906147a7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516138489190614141565b60405180910390a361385b848484613b79565b50505050565b600061386c30611400565b90506000601c54601a54601b5461388391906147a7565b61388d91906147a7565b905060008083148061389f5750600082145b156138ac57505050613b46565b6014600d546138bb91906145c9565b8311156138d4576014600d546138d191906145c9565b92505b6000600283601b54866138e791906145c9565b6138f19190614652565b6138fb9190614652565b905060006139128286613b7e90919063ffffffff16565b9050600047905061392282613b94565b60006139378247613b7e90919063ffffffff16565b9050600061396287613954601a5485613b4890919063ffffffff16565b613b5e90919063ffffffff16565b9050600061398d8861397f601c5486613b4890919063ffffffff16565b613b5e90919063ffffffff16565b9050600081838561399e919061526d565b6139a8919061526d565b90506000601b819055506000601a819055506000601c81905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613a0890615364565b60006040518083038185875af1925050503d8060008114613a45576040519150601f19603f3d011682016040523d82523d6000602084013e613a4a565b606091505b505080985050600087118015613a605750600081115b15613aad57613a6f8782613dd1565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601b54604051613aa493929190615379565b60405180910390a15b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613af390615364565b60006040518083038185875af1925050503d8060008114613b30576040519150601f19603f3d011682016040523d82523d6000602084013e613b35565b606091505b505080985050505050505050505050505b565b60008183613b5691906145c9565b905092915050565b60008183613b6c9190614652565b905092915050565b505050565b505050565b60008183613b8c919061526d565b905092915050565b6000600267ffffffffffffffff811115613bb157613bb0614242565b5b604051908082528060200260200182016040528015613bdf5781602001602082028036833780820191505090505b5090503081600081518110613bf757613bf66147fd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cc091906153c5565b81600181518110613cd457613cd36147fd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d39307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461256c565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613d9b9594939291906154eb565b600060405180830381600087803b158015613db557600080fd5b505af1158015613dc9573d6000803e3d6000fd5b505050505050565b613dfc307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461256c565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613e46611897565b426040518863ffffffff1660e01b8152600401613e6896959493929190615545565b60606040518083038185885af1158015613e86573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613eab91906155bb565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613eec578082015181840152602081019050613ed1565b83811115613efb576000848401525b50505050565b6000601f19601f8301169050919050565b6000613f1d82613eb2565b613f278185613ebd565b9350613f37818560208601613ece565b613f4081613f01565b840191505092915050565b60006020820190508181036000830152613f658184613f12565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613fac82613f81565b9050919050565b613fbc81613fa1565b8114613fc757600080fd5b50565b600081359050613fd981613fb3565b92915050565b6000819050919050565b613ff281613fdf565b8114613ffd57600080fd5b50565b60008135905061400f81613fe9565b92915050565b6000806040838503121561402c5761402b613f77565b5b600061403a85828601613fca565b925050602061404b85828601614000565b9150509250929050565b60008115159050919050565b61406a81614055565b82525050565b60006020820190506140856000830184614061565b92915050565b6000602082840312156140a1576140a0613f77565b5b60006140af84828501613fca565b91505092915050565b6000819050919050565b60006140dd6140d86140d384613f81565b6140b8565b613f81565b9050919050565b60006140ef826140c2565b9050919050565b6000614101826140e4565b9050919050565b614111816140f6565b82525050565b600060208201905061412c6000830184614108565b92915050565b61413b81613fdf565b82525050565b60006020820190506141566000830184614132565b92915050565b60006020828403121561417257614171613f77565b5b600061418084828501614000565b91505092915050565b6000806000606084860312156141a2576141a1613f77565b5b60006141b086828701613fca565b93505060206141c186828701613fca565b92505060406141d286828701614000565b9150509250925092565b6141e581613fa1565b82525050565b600060208201905061420060008301846141dc565b92915050565b600060ff82169050919050565b61421c81614206565b82525050565b60006020820190506142376000830184614213565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61427a82613f01565b810181811067ffffffffffffffff8211171561429957614298614242565b5b80604052505050565b60006142ac613f6d565b90506142b88282614271565b919050565b600067ffffffffffffffff8211156142d8576142d7614242565b5b602082029050602081019050919050565b600080fd5b60006143016142fc846142bd565b6142a2565b90508083825260208201905060208402830185811115614324576143236142e9565b5b835b8181101561434d57806143398882613fca565b845260208401935050602081019050614326565b5050509392505050565b600082601f83011261436c5761436b61423d565b5b813561437c8482602086016142ee565b91505092915050565b60006020828403121561439b5761439a613f77565b5b600082013567ffffffffffffffff8111156143b9576143b8613f7c565b5b6143c584828501614357565b91505092915050565b6143d781614055565b81146143e257600080fd5b50565b6000813590506143f4816143ce565b92915050565b6000806040838503121561441157614410613f77565b5b600061441f85828601613fca565b9250506020614430858286016143e5565b9150509250929050565b60008060006060848603121561445357614452613f77565b5b600061446186828701614000565b935050602061447286828701614000565b925050604061448386828701614000565b9150509250925092565b600080604083850312156144a4576144a3613f77565b5b60006144b285828601613fca565b92505060206144c385828601613fca565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061451457607f821691505b60208210811415614528576145276144cd565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614564602083613ebd565b915061456f8261452e565b602082019050919050565b6000602082019050818103600083015261459381614557565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006145d482613fdf565b91506145df83613fdf565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146185761461761459a565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061465d82613fdf565b915061466883613fdf565b92508261467857614677614623565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006146df602f83613ebd565b91506146ea82614683565b604082019050919050565b6000602082019050818103600083015261470e816146d2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614771602883613ebd565b915061477c82614715565b604082019050919050565b600060208201905081810360008301526147a081614764565b9050919050565b60006147b282613fdf565b91506147bd83613fdf565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156147f2576147f161459a565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061483782613fdf565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561486a5761486961459a565b5b600182019050919050565b7f4d757374206b6565702066656573206174203625206f72206c65737300000000600082015250565b60006148ab601c83613ebd565b91506148b682614875565b602082019050919050565b600060208201905081810360008301526148da8161489e565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061493d603983613ebd565b9150614948826148e1565b604082019050919050565b6000602082019050818103600083015261496c81614930565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006149cf602583613ebd565b91506149da82614973565b604082019050919050565b600060208201905081810360008301526149fe816149c2565b9050919050565b7f4d757374206b656570206665657320617420313625206f72206c657373000000600082015250565b6000614a3b601d83613ebd565b9150614a4682614a05565b602082019050919050565b60006020820190508181036000830152614a6a81614a2e565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614acd602483613ebd565b9150614ad882614a71565b604082019050919050565b60006020820190508181036000830152614afc81614ac0565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614b5f603583613ebd565b9150614b6a82614b03565b604082019050919050565b60006020820190508181036000830152614b8e81614b52565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614bf1603483613ebd565b9150614bfc82614b95565b604082019050919050565b60006020820190508181036000830152614c2081614be4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614c83602683613ebd565b9150614c8e82614c27565b604082019050919050565b60006020820190508181036000830152614cb281614c76565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614d15602483613ebd565b9150614d2082614cb9565b604082019050919050565b60006020820190508181036000830152614d4481614d08565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614da7602283613ebd565b9150614db282614d4b565b604082019050919050565b60006020820190508181036000830152614dd681614d9a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614e39602583613ebd565b9150614e4482614ddd565b604082019050919050565b60006020820190508181036000830152614e6881614e2c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614ecb602383613ebd565b9150614ed682614e6f565b604082019050919050565b60006020820190508181036000830152614efa81614ebe565b9050919050565b7f596f7572206164647265737320686173206265656e206d61726b65642061732060008201527f6120626f742f736e697065722c20796f752061726520756e61626c6520746f2060208201527f7472616e73666572206f7220737761702e000000000000000000000000000000604082015250565b6000614f83605183613ebd565b9150614f8e82614f01565b606082019050919050565b60006020820190508181036000830152614fb281614f76565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614fef601683613ebd565b9150614ffa82614fb9565b602082019050919050565b6000602082019050818103600083015261501e81614fe2565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006150a7604983613ebd565b91506150b282615025565b606082019050919050565b600060208201905081810360008301526150d68161509a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615139603583613ebd565b9150615144826150dd565b604082019050919050565b600060208201905081810360008301526151688161512c565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006151a5601383613ebd565b91506151b08261516f565b602082019050919050565b600060208201905081810360008301526151d481615198565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615237603683613ebd565b9150615242826151db565b604082019050919050565b600060208201905081810360008301526152668161522a565b9050919050565b600061527882613fdf565b915061528383613fdf565b9250828210156152965761529561459a565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006152fd602683613ebd565b9150615308826152a1565b604082019050919050565b6000602082019050818103600083015261532c816152f0565b9050919050565b600081905092915050565b50565b600061534e600083615333565b91506153598261533e565b600082019050919050565b600061536f82615341565b9150819050919050565b600060608201905061538e6000830186614132565b61539b6020830185614132565b6153a86040830184614132565b949350505050565b6000815190506153bf81613fb3565b92915050565b6000602082840312156153db576153da613f77565b5b60006153e9848285016153b0565b91505092915050565b6000819050919050565b600061541761541261540d846153f2565b6140b8565b613fdf565b9050919050565b615427816153fc565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61546281613fa1565b82525050565b60006154748383615459565b60208301905092915050565b6000602082019050919050565b60006154988261542d565b6154a28185615438565b93506154ad83615449565b8060005b838110156154de5781516154c58882615468565b97506154d083615480565b9250506001810190506154b1565b5085935050505092915050565b600060a0820190506155006000830188614132565b61550d602083018761541e565b818103604083015261551f818661548d565b905061552e60608301856141dc565b61553b6080830184614132565b9695505050505050565b600060c08201905061555a60008301896141dc565b6155676020830188614132565b615574604083018761541e565b615581606083018661541e565b61558e60808301856141dc565b61559b60a0830184614132565b979650505050505050565b6000815190506155b581613fe9565b92915050565b6000806000606084860312156155d4576155d3613f77565b5b60006155e2868287016155a6565b93505060206155f3868287016155a6565b9250506040615604868287016155a6565b915050925092509256fea264697066735822122083fff15e536dafce1d2807b0fd8ad0e05969a309c44f48ce48748b0db758e69a64736f6c634300080b0033

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

0000000000000000000000000ecbb1c33ea26a59b065247638b14e67811198fd

-----Decoded View---------------
Arg [0] : depAddr (address): 0x0ECbb1c33EA26A59b065247638b14e67811198Fd

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000ecbb1c33ea26a59b065247638b14e67811198fd


Deployed Bytecode Sourcemap

12368:15459:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3672:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4586:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13760:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12450:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3993:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20136:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13539:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13499;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17713:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4763:573;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12735:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3892:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5344:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12555:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12508;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12895:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20304:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13353:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20720:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4109:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11151:103;;;;;;;;;;;;;:::i;:::-;;16923:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18176:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13245:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18332:402;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19620:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16738:130;;;;;;;;;;;;;:::i;:::-;;10928:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13388:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3780:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19304:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13319:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13579:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13464:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5567:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4244:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19919:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13982:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12935:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19164:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18743:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17953:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13159:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12772:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17319:382;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20441:267;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13211:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4427:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12814:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17109:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13282:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11262:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13426:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12854:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3672:100;3726:13;3759:5;3752:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3672:100;:::o;4586:169::-;4669:4;4686:39;4695:12;:10;:12::i;:::-;4709:7;4718:6;4686:8;:39::i;:::-;4743:4;4736:11;;4586:169;;;;:::o;13760:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;12450:51::-;;;:::o;3993:108::-;4054:7;4081:12;;4074:19;;3993:108;:::o;20136:157::-;11074:12;:10;:12::i;:::-;11063:23;;:7;:5;:7::i;:::-;:23;;;11055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20243:9:::1;;;;;;;;;;;20215:38;;20232:9;20215:38;;;;;;;;;;;;20276:9;20264;;:21;;;;;;;;;;;;;;;;;;20136:157:::0;:::o;13539:33::-;;;;:::o;13499:::-;;;;:::o;17713:232::-;11074:12;:10;:12::i;:::-;11063:23;;:7;:5;:7::i;:::-;:23;;;11055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17834:4:::1;17826;17822:1;17806:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;17805:33;;;;:::i;:::-;17795:6;:43;;17787:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;17933:4;17924:6;:13;;;;:::i;:::-;17901:20;:36;;;;17713:232:::0;:::o;4763:573::-;4903:4;4920:24;4947:11;:19;4959:6;4947:19;;;;;;;;;;;;;;;:33;4967:12;:10;:12::i;:::-;4947:33;;;;;;;;;;;;;;;;4920:60;;5015:17;4995:16;:37;4991:265;;5077:6;5057:16;:26;;5049:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;5172:57;5181:6;5189:12;:10;:12::i;:::-;5222:6;5203:16;:25;5172:8;:57::i;:::-;4991:265;5268:36;5278:6;5286:9;5297:6;5268:9;:36::i;:::-;5324:4;5317:11;;;4763:573;;;;;:::o;12735:24::-;;;;;;;;;;;;;:::o;3892:93::-;3950:5;3975:2;3968:9;;3892:93;:::o;5344:215::-;5432:4;5449:80;5458:12;:10;:12::i;:::-;5472:7;5518:10;5481:11;:25;5493:12;:10;:12::i;:::-;5481:25;;;;;;;;;;;;;;;:34;5507:7;5481:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;5449:8;:80::i;:::-;5547:4;5540:11;;5344:215;;;;:::o;12555:38::-;;;;;;;;;;;;;;;;;;;;;;:::o;12508:::-;;;:::o;12895:33::-;;;;;;;;;;;;;:::o;20304:125::-;20369:4;20393:19;:28;20413:7;20393:28;;;;;;;;;;;;;;;;;;;;;;;;;20386:35;;20304:125;;;:::o;13353:28::-;;;;:::o;20720:168::-;11074:12;:10;:12::i;:::-;11063:23;;:7;:5;:7::i;:::-;:23;;;11055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20798:6:::1;20793:88;20814:4;:11;20810:1;:15;20793:88;;;20864:5;20847;:14;20853:4;20858:1;20853:7;;;;;;;;:::i;:::-;;;;;;;;20847:14;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;20827:3;;;;;:::i;:::-;;;;20793:88;;;;20720:168:::0;:::o;4109:127::-;4183:7;4210:9;:18;4220:7;4210:18;;;;;;;;;;;;;;;;4203:25;;4109:127;;;:::o;11151:103::-;11074:12;:10;:12::i;:::-;11063:23;;:7;:5;:7::i;:::-;:23;;;11055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11216:30:::1;11243:1;11216:18;:30::i;:::-;11151:103::o:0;16923:121::-;16975:4;11074:12;:10;:12::i;:::-;11063:23;;:7;:5;:7::i;:::-;:23;;;11055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17009:5:::1;16992:14;;:22;;;;;;;;;;;;;;;;;;17032:4;17025:11;;16923:121:::0;:::o;18176:144::-;11074:12;:10;:12::i;:::-;11063:23;;:7;:5;:7::i;:::-;:23;;;11055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18308:4:::1;18266:31;:39;18298:6;18266:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;18176:144:::0;;:::o;13245:30::-;;;;:::o;18332:402::-;18462:9;;;;;;;;;;;18446:25;;:12;:10;:12::i;:::-;:25;;;18438:34;;;;;;18501:13;18483:15;:31;;;;18543:13;18525:15;:31;;;;18579:7;18567:9;:19;;;;18648:9;;18630:15;;18612;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;18597:12;:60;;;;18692:1;18676:12;;:17;;18668:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;18332:402;;;:::o;19620:149::-;11074:12;:10;:12::i;:::-;11063:23;;:7;:5;:7::i;:::-;:23;;;11055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19705:4:::1;19689:13;;:20;;;;;;;;;;;;;;;;;;19734:27;19754:6;19734:15;:19;;:27;;;;:::i;:::-;19720:11;:41;;;;19620:149:::0;:::o;16738:130::-;11074:12;:10;:12::i;:::-;11063:23;;:7;:5;:7::i;:::-;:23;;;11055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16809:4:::1;16793:13;;:20;;;;;;;;;;;;;;;;;;16838:22;16858:1;16838:15;:19;;:22;;;;:::i;:::-;16824:11;:36;;;;16738:130::o:0;10928:87::-;10974:7;11001:6;;;;;;;;;;;10994:13;;10928:87;:::o;13388:31::-;;;;:::o;3780:104::-;3836:13;3869:7;3862:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3780:104;:::o;19304:244::-;11074:12;:10;:12::i;:::-;11063:23;;:7;:5;:7::i;:::-;:23;;;11055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19411:13:::1;19403:21;;:4;:21;;;;19395:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;19499:41;19528:4;19534:5;19499:28;:41::i;:::-;19304:244:::0;;:::o;13319:24::-;;;;:::o;13579:27::-;;;;:::o;13464:25::-;;;;:::o;5567:413::-;5660:4;5677:24;5704:11;:25;5716:12;:10;:12::i;:::-;5704:25;;;;;;;;;;;;;;;:34;5730:7;5704:34;;;;;;;;;;;;;;;;5677:61;;5777:15;5757:16;:35;;5749:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;5870:67;5879:12;:10;:12::i;:::-;5893:7;5921:15;5902:16;:34;5870:8;:67::i;:::-;5968:4;5961:11;;;5567:413;;;;:::o;4244:175::-;4330:4;4347:42;4357:12;:10;:12::i;:::-;4371:9;4382:6;4347:9;:42::i;:::-;4407:4;4400:11;;4244:175;;;;:::o;19919:208::-;11074:12;:10;:12::i;:::-;11063:23;;:7;:5;:7::i;:::-;:23;;;11055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20056:15:::1;;;;;;;;;;;20013:59;;20036:18;20013:59;;;;;;;;;;;;20101:18;20083:15;;:36;;;;;;;;;;;;;;;;;;19919:208:::0;:::o;13982:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;12935:33::-;;;;;;;;;;;;;:::o;19164:132::-;11074:12;:10;:12::i;:::-;11063:23;;:7;:5;:7::i;:::-;:23;;;11055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19280:8:::1;19249:19;:28;19269:7;19249:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;19164:132:::0;;:::o;18743:413::-;18874:9;;;;;;;;;;;18858:25;;:12;:10;:12::i;:::-;:25;;;18850:34;;;;;;18914:13;18895:16;:32;;;;18957:13;18938:16;:32;;;;18994:7;18981:10;:20;;;;19066:10;;19047:16;;19028;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;19012:13;:64;;;;19112:2;19095:13;;:19;;19087:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;18743:413;;;:::o;17953:211::-;11074:12;:10;:12::i;:::-;11063:23;;:7;:5;:7::i;:::-;:23;;;11055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18075:4:::1;18069;18065:1;18049:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;18048:31;;;;:::i;:::-;18038:6;:41;;18030:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;18152:4;18143:6;:13;;;;:::i;:::-;18131:9;:25;;;;17953:211:::0;:::o;13159:39::-;;;;;;;;;;;;;:::o;12772:35::-;;;;:::o;17319:382::-;17400:4;11074:12;:10;:12::i;:::-;11063:23;;:7;:5;:7::i;:::-;:23;;;11055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17457:6:::1;17453:1;17437:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;17424:9;:39;;17416:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;17572:4;17568:1;17552:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;17539:9;:37;;17531:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;17664:9;17643:18;:30;;;;17690:4;17683:11;;17319:382:::0;;;:::o;20441:267::-;11074:12;:10;:12::i;:::-;11063:23;;:7;:5;:7::i;:::-;:23;;;11055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20516:6:::1;20511:190;20532:4;:11;20528:1;:15;20511:190;;;20580:13;20569:24;;:4;20574:1;20569:7;;;;;;;;:::i;:::-;;;;;;;;:24;;;;:63;;;;;20616:15;20597:35;;:4;20602:1;20597:7;;;;;;;;:::i;:::-;;;;;;;;:35;;;;20569:63;20565:125;;;20670:4;20653:5;:14;20659:4;20664:1;20659:7;;;;;;;;:::i;:::-;;;;;;;;20653:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;20565:125;20545:3;;;;;:::i;:::-;;;;20511:190;;;;20441:267:::0;:::o;13211:27::-;;;;:::o;4427:151::-;4516:7;4543:11;:18;4555:5;4543:18;;;;;;;;;;;;;;;:27;4562:7;4543:27;;;;;;;;;;;;;;;;4536:34;;4427:151;;;;:::o;12814:33::-;;;;:::o;17109:135::-;17169:4;11074:12;:10;:12::i;:::-;11063:23;;:7;:5;:7::i;:::-;:23;;;11055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17209:5:::1;17186:20;;:28;;;;;;;;;;;;;;;;;;17232:4;17225:11;;17109:135:::0;:::o;13282:30::-;;;;:::o;11262:201::-;11074:12;:10;:12::i;:::-;11063:23;;:7;:5;:7::i;:::-;:23;;;11055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11371:1:::1;11351:22;;:8;:22;;;;11343:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11427:28;11446:8;11427:18;:28::i;:::-;11262:201:::0;:::o;13426:31::-;;;;:::o;12854:24::-;;;;:::o;766:98::-;819:7;846:10;839:17;;766:98;:::o;7735:380::-;7888:1;7871:19;;:5;:19;;;;7863:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7969:1;7950:21;;:7;:21;;;;7942:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8053:6;8023:11;:18;8035:5;8023:18;;;;;;;;;;;;;;;:27;8042:7;8023:27;;;;;;;;;;;;;;;:36;;;;8091:7;8075:32;;8084:5;8075:32;;;8100:6;8075:32;;;;;;:::i;:::-;;;;;;;;7735:380;;;:::o;20896:4226::-;21044:1;21028:18;;:4;:18;;;;21020:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21121:1;21107:16;;:2;:16;;;;21099:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21183:5;:11;21189:4;21183:11;;;;;;;;;;;;;;;;;;;;;;;;;21182:12;21174:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;21316:1;21306:6;:11;21302:93;;;21334:28;21350:4;21356:2;21360:1;21334:15;:28::i;:::-;21377:7;;21302:93;21437:11;;21419:15;:29;21415:51;;;21462:4;21450:5;:9;21456:2;21450:9;;;;;;;;;;;;;;;;:16;;;;;;;;;;;;;;;;;;21415:51;21491:14;;;;;;;;;;;21487:1834;;;21552:7;:5;:7::i;:::-;21544:15;;:4;:15;;;;:49;;;;;21586:7;:5;:7::i;:::-;21580:13;;:2;:13;;;;21544:49;:86;;;;;21628:1;21614:16;;:2;:16;;;;21544:86;:128;;;;;21665:6;21651:21;;:2;:21;;;;21544:128;:159;;;;;21694:9;;;;;;;;;;;21693:10;21544:159;21522:1788;;;21743:13;;;;;;;;;;;21738:150;;21789:19;:25;21809:4;21789:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;21818:19;:23;21838:2;21818:23;;;;;;;;;;;;;;;;;;;;;;;;;21789:52;21781:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;21738:150;22046:20;;;;;;;;;;;22042:423;;;22100:7;:5;:7::i;:::-;22094:13;;:2;:13;;;;:47;;;;;22125:15;22111:30;;:2;:30;;;;22094:47;:79;;;;;22159:13;22145:28;;:2;:28;;;;22094:79;22090:356;;;22251:12;22209:28;:39;22238:9;22209:39;;;;;;;;;;;;;;;;:54;22201:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;22410:12;22368:28;:39;22397:9;22368:39;;;;;;;;;;;;;;;:54;;;;22090:356;22042:423;22533:25;:31;22559:4;22533:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;22569:31;:35;22601:2;22569:35;;;;;;;;;;;;;;;;;;;;;;;;;22568:36;22533:71;22529:766;;;22647:20;;22637:6;:30;;22629:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;22782:9;;22765:13;22775:2;22765:9;:13::i;:::-;22756:6;:22;;;;:::i;:::-;:35;;22748:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22529:766;;;22908:25;:29;22934:2;22908:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;22942:31;:37;22974:4;22942:37;;;;;;;;;;;;;;;;;;;;;;;;;22941:38;22908:71;22904:391;;;23022:20;;23012:6;:30;;23004:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;22904:391;;;23149:31;:35;23181:2;23149:35;;;;;;;;;;;;;;;;;;;;;;;;;23144:151;;23242:9;;23225:13;23235:2;23225:9;:13::i;:::-;23216:6;:22;;;;:::i;:::-;:35;;23208:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23144:151;22904:391;22529:766;21522:1788;21487:1834;23335:28;23366:24;23384:4;23366:9;:24::i;:::-;23335:55;;23401:12;23440:18;;23416:20;:42;;23401:57;;23489:7;:34;;;;;23514:9;;;;;;;;;;;23513:10;23489:34;:83;;;;;23541:25;:31;23567:4;23541:31;;;;;;;;;;;;;;;;;;;;;;;;;23540:32;23489:83;:126;;;;;23590:19;:25;23610:4;23590:25;;;;;;;;;;;;;;;;;;;;;;;;;23589:26;23489:126;:167;;;;;23633:19;:23;23653:2;23633:23;;;;;;;;;;;;;;;;;;;;;;;;;23632:24;23489:167;23471:297;;;23695:4;23683:9;;:16;;;;;;;;;;;;;;;;;;23714:10;:8;:10::i;:::-;23751:5;23739:9;;:17;;;;;;;;;;;;;;;;;;23471:297;23780:12;23796:9;;;;;;;;;;;23795:10;23780:25;;23907:19;:25;23927:4;23907:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;23936:19;:23;23956:2;23936:23;;;;;;;;;;;;;;;;;;;;;;;;;23907:52;23903:73;;;23971:5;23961:15;;23903:73;24007:12;24112:7;24108:961;;;24164:25;:29;24190:2;24164:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;24213:1;24197:13;;:17;24164:50;24160:754;;;24241:34;24271:3;24241:25;24252:13;;24241:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;24234:41;;24342:13;;24323:16;;24316:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;24294:18;;:61;;;;;;;:::i;:::-;;;;;;;;24410:13;;24397:10;;24390:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;24374:12;;:49;;;;;;;:::i;:::-;;;;;;;;24490:13;;24471:16;;24464:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;24442:18;;:61;;;;;;;:::i;:::-;;;;;;;;24160:754;;;24564:25;:31;24590:4;24564:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;24614:1;24599:12;;:16;24564:51;24561:353;;;24643:33;24672:3;24643:24;24654:12;;24643:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;24636:40;;24742:12;;24724:15;;24717:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;24695:18;;:59;;;;;;;:::i;:::-;;;;;;;;24808:12;;24796:9;;24789:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;24773:12;;:47;;;;;;;:::i;:::-;;;;;;;;24886:12;;24868:15;;24861:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;24839:18;;:59;;;;;;;:::i;:::-;;;;;;;;24561:353;24160:754;24941:1;24934:4;:8;24930:91;;;24963:42;24979:4;24993;25000;24963:15;:42::i;:::-;24930:91;25053:4;25043:14;;;;;:::i;:::-;;;24108:961;25081:33;25097:4;25103:2;25107:6;25081:15;:33::i;:::-;21009:4113;;;;20896:4226;;;;:::o;11471:191::-;11545:16;11564:6;;;;;;;;;;;11545:25;;11590:8;11581:6;;:17;;;;;;;;;;;;;;;;;;11645:8;11614:40;;11635:8;11614:40;;;;;;;;;;;;11534:128;11471:191;:::o;9525:98::-;9583:7;9614:1;9610;:5;;;;:::i;:::-;9603:12;;9525:98;;;;:::o;19777:130::-;19894:5;19860:25;:31;19886:4;19860:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;19777:130;;:::o;5988:733::-;6146:1;6128:20;;:6;:20;;;;6120:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;6230:1;6209:23;;:9;:23;;;;6201:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;6285:47;6306:6;6314:9;6325:6;6285:20;:47::i;:::-;6345:21;6369:9;:17;6379:6;6369:17;;;;;;;;;;;;;;;;6345:41;;6422:6;6405:13;:23;;6397:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;6543:6;6527:13;:22;6507:9;:17;6517:6;6507:17;;;;;;;;;;;;;;;:42;;;;6595:6;6571:9;:20;6581:9;6571:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;6636:9;6619:35;;6628:6;6619:35;;;6647:6;6619:35;;;;;;:::i;:::-;;;;;;;;6667:46;6687:6;6695:9;6706:6;6667:19;:46::i;:::-;6109:612;5988:733;;;:::o;26254:1570::-;26293:23;26319:24;26337:4;26319:9;:24::i;:::-;26293:50;;26354:25;26424:12;;26403:18;;26382;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;26354:82;;26447:12;26495:1;26476:15;:20;:46;;;;26521:1;26500:17;:22;26476:46;26473:60;;;26525:7;;;;;26473:60;26588:2;26567:18;;:23;;;;:::i;:::-;26549:15;:41;26546:111;;;26643:2;26622:18;;:23;;;;:::i;:::-;26604:41;;26546:111;26719:23;26804:1;26784:17;26763:18;;26745:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;26719:86;;26816:26;26845:36;26865:15;26845;:19;;:36;;;;:::i;:::-;26816:65;;26895:25;26923:21;26895:49;;26958:37;26976:18;26958:17;:37::i;:::-;27010:18;27031:44;27057:17;27031:21;:25;;:44;;;;:::i;:::-;27010:65;;27089:23;27115:57;27154:17;27115:34;27130:18;;27115:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;27089:83;;27183:17;27203:51;27236:17;27203:28;27218:12;;27203:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;27183:71;;27265:23;27322:9;27304:15;27291:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;27265:66;;27369:1;27348:18;:22;;;;27402:1;27381:18;:22;;;;27429:1;27414:12;:16;;;;27465:9;;;;;;;;;;;27457:23;;27488:9;27457:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27444:58;;;;;27537:1;27519:15;:19;:42;;;;;27560:1;27542:15;:19;27519:42;27516:211;;;27577:47;27591:15;27608;27577:13;:47::i;:::-;27644:71;27659:18;27679:15;27696:18;;27644:71;;;;;;;;:::i;:::-;;;;;;;;27516:211;27761:15;;;;;;;;;;;27753:29;;27790:21;27753:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27740:76;;;;;26282:1542;;;;;;;;;;26254:1570;:::o;9737:98::-;9795:7;9826:1;9822;:5;;;;:::i;:::-;9815:12;;9737:98;;;;:::o;9843:::-;9901:7;9932:1;9928;:5;;;;:::i;:::-;9921:12;;9843:98;;;;:::o;8123:125::-;;;;:::o;8256:124::-;;;;:::o;9631:98::-;9689:7;9720:1;9716;:5;;;;:::i;:::-;9709:12;;9631:98;;;;:::o;25130:590::-;25257:21;25295:1;25281:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25257:40;;25326:4;25308;25313:1;25308:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;25352:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25342:4;25347:1;25342:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;25387:62;25404:4;25419:15;25437:11;25387:8;:62::i;:::-;25488:15;:66;;;25569:11;25595:1;25639:4;25666;25686:15;25488:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25186:534;25130:590;:::o;25732:514::-;25881:62;25898:4;25913:15;25931:11;25881:8;:62::i;:::-;25986:15;:31;;;26025:9;26058:4;26078:11;26104:1;26147;26190:7;:5;:7::i;:::-;26212:15;25986:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25732:514;;:::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:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1397:75::-;1430:6;1463:2;1457:9;1447:19;;1397:75;:::o;1478:117::-;1587:1;1584;1577:12;1601:117;1710:1;1707;1700:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:118::-;6206:24;6224:5;6206:24;:::i;:::-;6201:3;6194:37;6119:118;;:::o;6243:222::-;6336:4;6374:2;6363:9;6359:18;6351:26;;6387:71;6455:1;6444:9;6440:17;6431:6;6387:71;:::i;:::-;6243:222;;;;:::o;6471:86::-;6506:7;6546:4;6539:5;6535:16;6524:27;;6471:86;;;:::o;6563:112::-;6646:22;6662:5;6646:22;:::i;:::-;6641:3;6634:35;6563:112;;:::o;6681:214::-;6770:4;6808:2;6797:9;6793:18;6785:26;;6821:67;6885:1;6874:9;6870:17;6861:6;6821:67;:::i;:::-;6681:214;;;;:::o;6901:117::-;7010:1;7007;7000:12;7024:180;7072:77;7069:1;7062:88;7169:4;7166:1;7159:15;7193:4;7190:1;7183:15;7210:281;7293:27;7315:4;7293:27;:::i;:::-;7285:6;7281:40;7423:6;7411:10;7408:22;7387:18;7375:10;7372:34;7369:62;7366:88;;;7434:18;;:::i;:::-;7366:88;7474:10;7470:2;7463:22;7253:238;7210:281;;:::o;7497:129::-;7531:6;7558:20;;:::i;:::-;7548:30;;7587:33;7615:4;7607:6;7587:33;:::i;:::-;7497:129;;;:::o;7632:311::-;7709:4;7799:18;7791:6;7788:30;7785:56;;;7821:18;;:::i;:::-;7785:56;7871:4;7863:6;7859:17;7851:25;;7931:4;7925;7921:15;7913:23;;7632:311;;;:::o;7949:117::-;8058:1;8055;8048:12;8089:710;8185:5;8210:81;8226:64;8283:6;8226:64;:::i;:::-;8210:81;:::i;:::-;8201:90;;8311:5;8340:6;8333:5;8326:21;8374:4;8367:5;8363:16;8356:23;;8427:4;8419:6;8415:17;8407:6;8403:30;8456:3;8448:6;8445:15;8442:122;;;8475:79;;:::i;:::-;8442:122;8590:6;8573:220;8607:6;8602:3;8599:15;8573:220;;;8682:3;8711:37;8744:3;8732:10;8711:37;:::i;:::-;8706:3;8699:50;8778:4;8773:3;8769:14;8762:21;;8649:144;8633:4;8628:3;8624:14;8617:21;;8573:220;;;8577:21;8191:608;;8089:710;;;;;:::o;8822:370::-;8893:5;8942:3;8935:4;8927:6;8923:17;8919:27;8909:122;;8950:79;;:::i;:::-;8909:122;9067:6;9054:20;9092:94;9182:3;9174:6;9167:4;9159:6;9155:17;9092:94;:::i;:::-;9083:103;;8899:293;8822:370;;;;:::o;9198:539::-;9282:6;9331:2;9319:9;9310:7;9306:23;9302:32;9299:119;;;9337:79;;:::i;:::-;9299:119;9485:1;9474:9;9470:17;9457:31;9515:18;9507:6;9504:30;9501:117;;;9537:79;;:::i;:::-;9501:117;9642:78;9712:7;9703:6;9692:9;9688:22;9642:78;:::i;:::-;9632:88;;9428:302;9198:539;;;;:::o;9743:116::-;9813:21;9828:5;9813:21;:::i;:::-;9806:5;9803:32;9793:60;;9849:1;9846;9839:12;9793:60;9743:116;:::o;9865:133::-;9908:5;9946:6;9933:20;9924:29;;9962:30;9986:5;9962:30;:::i;:::-;9865:133;;;;:::o;10004:468::-;10069:6;10077;10126:2;10114:9;10105:7;10101:23;10097:32;10094:119;;;10132:79;;:::i;:::-;10094:119;10252:1;10277:53;10322:7;10313:6;10302:9;10298:22;10277:53;:::i;:::-;10267:63;;10223:117;10379:2;10405:50;10447:7;10438:6;10427:9;10423:22;10405:50;:::i;:::-;10395:60;;10350:115;10004:468;;;;;:::o;10478:619::-;10555:6;10563;10571;10620:2;10608:9;10599:7;10595:23;10591:32;10588:119;;;10626:79;;:::i;:::-;10588:119;10746:1;10771:53;10816:7;10807:6;10796:9;10792:22;10771:53;:::i;:::-;10761:63;;10717:117;10873:2;10899:53;10944:7;10935:6;10924:9;10920:22;10899:53;:::i;:::-;10889:63;;10844:118;11001:2;11027:53;11072:7;11063:6;11052:9;11048:22;11027:53;:::i;:::-;11017:63;;10972:118;10478:619;;;;;:::o;11103:474::-;11171:6;11179;11228:2;11216:9;11207:7;11203:23;11199:32;11196:119;;;11234:79;;:::i;:::-;11196:119;11354:1;11379:53;11424:7;11415:6;11404:9;11400:22;11379:53;:::i;:::-;11369:63;;11325:117;11481:2;11507:53;11552:7;11543:6;11532:9;11528:22;11507:53;:::i;:::-;11497:63;;11452:118;11103:474;;;;;:::o;11583:180::-;11631:77;11628:1;11621:88;11728:4;11725:1;11718:15;11752:4;11749:1;11742:15;11769:320;11813:6;11850:1;11844:4;11840:12;11830:22;;11897:1;11891:4;11887:12;11918:18;11908:81;;11974:4;11966:6;11962:17;11952:27;;11908:81;12036:2;12028:6;12025:14;12005:18;12002:38;11999:84;;;12055:18;;:::i;:::-;11999:84;11820:269;11769:320;;;:::o;12095:182::-;12235:34;12231:1;12223:6;12219:14;12212:58;12095:182;:::o;12283:366::-;12425:3;12446:67;12510:2;12505:3;12446:67;:::i;:::-;12439:74;;12522:93;12611:3;12522:93;:::i;:::-;12640:2;12635:3;12631:12;12624:19;;12283:366;;;:::o;12655:419::-;12821:4;12859:2;12848:9;12844:18;12836:26;;12908:9;12902:4;12898:20;12894:1;12883:9;12879:17;12872:47;12936:131;13062:4;12936:131;:::i;:::-;12928:139;;12655:419;;;:::o;13080:180::-;13128:77;13125:1;13118:88;13225:4;13222:1;13215:15;13249:4;13246:1;13239:15;13266:348;13306:7;13329:20;13347:1;13329:20;:::i;:::-;13324:25;;13363:20;13381:1;13363:20;:::i;:::-;13358:25;;13551:1;13483:66;13479:74;13476:1;13473:81;13468:1;13461:9;13454:17;13450:105;13447:131;;;13558:18;;:::i;:::-;13447:131;13606:1;13603;13599:9;13588:20;;13266:348;;;;:::o;13620:180::-;13668:77;13665:1;13658:88;13765:4;13762:1;13755:15;13789:4;13786:1;13779:15;13806:185;13846:1;13863:20;13881:1;13863:20;:::i;:::-;13858:25;;13897:20;13915:1;13897:20;:::i;:::-;13892:25;;13936:1;13926:35;;13941:18;;:::i;:::-;13926:35;13983:1;13980;13976:9;13971:14;;13806:185;;;;:::o;13997:234::-;14137:34;14133:1;14125:6;14121:14;14114:58;14206:17;14201:2;14193:6;14189:15;14182:42;13997:234;:::o;14237:366::-;14379:3;14400:67;14464:2;14459:3;14400:67;:::i;:::-;14393:74;;14476:93;14565:3;14476:93;:::i;:::-;14594:2;14589:3;14585:12;14578:19;;14237:366;;;:::o;14609:419::-;14775:4;14813:2;14802:9;14798:18;14790:26;;14862:9;14856:4;14852:20;14848:1;14837:9;14833:17;14826:47;14890:131;15016:4;14890:131;:::i;:::-;14882:139;;14609:419;;;:::o;15034:227::-;15174:34;15170:1;15162:6;15158:14;15151:58;15243:10;15238:2;15230:6;15226:15;15219:35;15034:227;:::o;15267:366::-;15409:3;15430:67;15494:2;15489:3;15430:67;:::i;:::-;15423:74;;15506:93;15595:3;15506:93;:::i;:::-;15624:2;15619:3;15615:12;15608:19;;15267:366;;;:::o;15639:419::-;15805:4;15843:2;15832:9;15828:18;15820:26;;15892:9;15886:4;15882:20;15878:1;15867:9;15863:17;15856:47;15920:131;16046:4;15920:131;:::i;:::-;15912:139;;15639:419;;;:::o;16064:305::-;16104:3;16123:20;16141:1;16123:20;:::i;:::-;16118:25;;16157:20;16175:1;16157:20;:::i;:::-;16152:25;;16311:1;16243:66;16239:74;16236:1;16233:81;16230:107;;;16317:18;;:::i;:::-;16230:107;16361:1;16358;16354:9;16347:16;;16064:305;;;;:::o;16375:180::-;16423:77;16420:1;16413:88;16520:4;16517:1;16510:15;16544:4;16541:1;16534:15;16561:233;16600:3;16623:24;16641:5;16623:24;:::i;:::-;16614:33;;16669:66;16662:5;16659:77;16656:103;;;16739:18;;:::i;:::-;16656:103;16786:1;16779:5;16775:13;16768:20;;16561:233;;;:::o;16800:178::-;16940:30;16936:1;16928:6;16924:14;16917:54;16800:178;:::o;16984:366::-;17126:3;17147:67;17211:2;17206:3;17147:67;:::i;:::-;17140:74;;17223:93;17312:3;17223:93;:::i;:::-;17341:2;17336:3;17332:12;17325:19;;16984:366;;;:::o;17356:419::-;17522:4;17560:2;17549:9;17545:18;17537:26;;17609:9;17603:4;17599:20;17595:1;17584:9;17580:17;17573:47;17637:131;17763:4;17637:131;:::i;:::-;17629:139;;17356:419;;;:::o;17781:244::-;17921:34;17917:1;17909:6;17905:14;17898:58;17990:27;17985:2;17977:6;17973:15;17966:52;17781:244;:::o;18031:366::-;18173:3;18194:67;18258:2;18253:3;18194:67;:::i;:::-;18187:74;;18270:93;18359:3;18270:93;:::i;:::-;18388:2;18383:3;18379:12;18372:19;;18031:366;;;:::o;18403:419::-;18569:4;18607:2;18596:9;18592:18;18584:26;;18656:9;18650:4;18646:20;18642:1;18631:9;18627:17;18620:47;18684:131;18810:4;18684:131;:::i;:::-;18676:139;;18403:419;;;:::o;18828:224::-;18968:34;18964:1;18956:6;18952:14;18945:58;19037:7;19032:2;19024:6;19020:15;19013:32;18828:224;:::o;19058:366::-;19200:3;19221:67;19285:2;19280:3;19221:67;:::i;:::-;19214:74;;19297:93;19386:3;19297:93;:::i;:::-;19415:2;19410:3;19406:12;19399:19;;19058:366;;;:::o;19430:419::-;19596:4;19634:2;19623:9;19619:18;19611:26;;19683:9;19677:4;19673:20;19669:1;19658:9;19654:17;19647:47;19711:131;19837:4;19711:131;:::i;:::-;19703:139;;19430:419;;;:::o;19855:179::-;19995:31;19991:1;19983:6;19979:14;19972:55;19855:179;:::o;20040:366::-;20182:3;20203:67;20267:2;20262:3;20203:67;:::i;:::-;20196:74;;20279:93;20368:3;20279:93;:::i;:::-;20397:2;20392:3;20388:12;20381:19;;20040:366;;;:::o;20412:419::-;20578:4;20616:2;20605:9;20601:18;20593:26;;20665:9;20659:4;20655:20;20651:1;20640:9;20636:17;20629:47;20693:131;20819:4;20693:131;:::i;:::-;20685:139;;20412:419;;;:::o;20837:223::-;20977:34;20973:1;20965:6;20961:14;20954:58;21046:6;21041:2;21033:6;21029:15;21022:31;20837:223;:::o;21066:366::-;21208:3;21229:67;21293:2;21288:3;21229:67;:::i;:::-;21222:74;;21305:93;21394:3;21305:93;:::i;:::-;21423:2;21418:3;21414:12;21407:19;;21066:366;;;:::o;21438:419::-;21604:4;21642:2;21631:9;21627:18;21619:26;;21691:9;21685:4;21681:20;21677:1;21666:9;21662:17;21655:47;21719:131;21845:4;21719:131;:::i;:::-;21711:139;;21438:419;;;:::o;21863:240::-;22003:34;21999:1;21991:6;21987:14;21980:58;22072:23;22067:2;22059:6;22055:15;22048:48;21863:240;:::o;22109:366::-;22251:3;22272:67;22336:2;22331:3;22272:67;:::i;:::-;22265:74;;22348:93;22437:3;22348:93;:::i;:::-;22466:2;22461:3;22457:12;22450:19;;22109:366;;;:::o;22481:419::-;22647:4;22685:2;22674:9;22670:18;22662:26;;22734:9;22728:4;22724:20;22720:1;22709:9;22705:17;22698:47;22762:131;22888:4;22762:131;:::i;:::-;22754:139;;22481:419;;;:::o;22906:239::-;23046:34;23042:1;23034:6;23030:14;23023:58;23115:22;23110:2;23102:6;23098:15;23091:47;22906:239;:::o;23151:366::-;23293:3;23314:67;23378:2;23373:3;23314:67;:::i;:::-;23307:74;;23390:93;23479:3;23390:93;:::i;:::-;23508:2;23503:3;23499:12;23492:19;;23151:366;;;:::o;23523:419::-;23689:4;23727:2;23716:9;23712:18;23704:26;;23776:9;23770:4;23766:20;23762:1;23751:9;23747:17;23740:47;23804:131;23930:4;23804:131;:::i;:::-;23796:139;;23523:419;;;:::o;23948:225::-;24088:34;24084:1;24076:6;24072:14;24065:58;24157:8;24152:2;24144:6;24140:15;24133:33;23948:225;:::o;24179:366::-;24321:3;24342:67;24406:2;24401:3;24342:67;:::i;:::-;24335:74;;24418:93;24507:3;24418:93;:::i;:::-;24536:2;24531:3;24527:12;24520:19;;24179:366;;;:::o;24551:419::-;24717:4;24755:2;24744:9;24740:18;24732:26;;24804:9;24798:4;24794:20;24790:1;24779:9;24775:17;24768:47;24832:131;24958:4;24832:131;:::i;:::-;24824:139;;24551:419;;;:::o;24976:223::-;25116:34;25112:1;25104:6;25100:14;25093:58;25185:6;25180:2;25172:6;25168:15;25161:31;24976:223;:::o;25205:366::-;25347:3;25368:67;25432:2;25427:3;25368:67;:::i;:::-;25361:74;;25444:93;25533:3;25444:93;:::i;:::-;25562:2;25557:3;25553:12;25546:19;;25205:366;;;:::o;25577:419::-;25743:4;25781:2;25770:9;25766:18;25758:26;;25830:9;25824:4;25820:20;25816:1;25805:9;25801:17;25794:47;25858:131;25984:4;25858:131;:::i;:::-;25850:139;;25577:419;;;:::o;26002:221::-;26142:34;26138:1;26130:6;26126:14;26119:58;26211:4;26206:2;26198:6;26194:15;26187:29;26002:221;:::o;26229:366::-;26371:3;26392:67;26456:2;26451:3;26392:67;:::i;:::-;26385:74;;26468:93;26557:3;26468:93;:::i;:::-;26586:2;26581:3;26577:12;26570:19;;26229:366;;;:::o;26601:419::-;26767:4;26805:2;26794:9;26790:18;26782:26;;26854:9;26848:4;26844:20;26840:1;26829:9;26825:17;26818:47;26882:131;27008:4;26882:131;:::i;:::-;26874:139;;26601:419;;;:::o;27026:224::-;27166:34;27162:1;27154:6;27150:14;27143:58;27235:7;27230:2;27222:6;27218:15;27211:32;27026:224;:::o;27256:366::-;27398:3;27419:67;27483:2;27478:3;27419:67;:::i;:::-;27412:74;;27495:93;27584:3;27495:93;:::i;:::-;27613:2;27608:3;27604:12;27597:19;;27256:366;;;:::o;27628:419::-;27794:4;27832:2;27821:9;27817:18;27809:26;;27881:9;27875:4;27871:20;27867:1;27856:9;27852:17;27845:47;27909:131;28035:4;27909:131;:::i;:::-;27901:139;;27628:419;;;:::o;28053:222::-;28193:34;28189:1;28181:6;28177:14;28170:58;28262:5;28257:2;28249:6;28245:15;28238:30;28053:222;:::o;28281:366::-;28423:3;28444:67;28508:2;28503:3;28444:67;:::i;:::-;28437:74;;28520:93;28609:3;28520:93;:::i;:::-;28638:2;28633:3;28629:12;28622:19;;28281:366;;;:::o;28653:419::-;28819:4;28857:2;28846:9;28842:18;28834:26;;28906:9;28900:4;28896:20;28892:1;28881:9;28877:17;28870:47;28934:131;29060:4;28934:131;:::i;:::-;28926:139;;28653:419;;;:::o;29078:305::-;29218:34;29214:1;29206:6;29202:14;29195:58;29287:34;29282:2;29274:6;29270:15;29263:59;29356:19;29351:2;29343:6;29339:15;29332:44;29078:305;:::o;29389:366::-;29531:3;29552:67;29616:2;29611:3;29552:67;:::i;:::-;29545:74;;29628:93;29717:3;29628:93;:::i;:::-;29746:2;29741:3;29737:12;29730:19;;29389:366;;;:::o;29761:419::-;29927:4;29965:2;29954:9;29950:18;29942:26;;30014:9;30008:4;30004:20;30000:1;29989:9;29985:17;29978:47;30042:131;30168:4;30042:131;:::i;:::-;30034:139;;29761:419;;;:::o;30186:172::-;30326:24;30322:1;30314:6;30310:14;30303:48;30186:172;:::o;30364:366::-;30506:3;30527:67;30591:2;30586:3;30527:67;:::i;:::-;30520:74;;30603:93;30692:3;30603:93;:::i;:::-;30721:2;30716:3;30712:12;30705:19;;30364:366;;;:::o;30736:419::-;30902:4;30940:2;30929:9;30925:18;30917:26;;30989:9;30983:4;30979:20;30975:1;30964:9;30960:17;30953:47;31017:131;31143:4;31017:131;:::i;:::-;31009:139;;30736:419;;;:::o;31161:297::-;31301:34;31297:1;31289:6;31285:14;31278:58;31370:34;31365:2;31357:6;31353:15;31346:59;31439:11;31434:2;31426:6;31422:15;31415:36;31161:297;:::o;31464:366::-;31606:3;31627:67;31691:2;31686:3;31627:67;:::i;:::-;31620:74;;31703:93;31792:3;31703:93;:::i;:::-;31821:2;31816:3;31812:12;31805:19;;31464:366;;;:::o;31836:419::-;32002:4;32040:2;32029:9;32025:18;32017:26;;32089:9;32083:4;32079:20;32075:1;32064:9;32060:17;32053:47;32117:131;32243:4;32117:131;:::i;:::-;32109:139;;31836:419;;;:::o;32261:240::-;32401:34;32397:1;32389:6;32385:14;32378:58;32470:23;32465:2;32457:6;32453:15;32446:48;32261:240;:::o;32507:366::-;32649:3;32670:67;32734:2;32729:3;32670:67;:::i;:::-;32663:74;;32746:93;32835:3;32746:93;:::i;:::-;32864:2;32859:3;32855:12;32848:19;;32507:366;;;:::o;32879:419::-;33045:4;33083:2;33072:9;33068:18;33060:26;;33132:9;33126:4;33122:20;33118:1;33107:9;33103:17;33096:47;33160:131;33286:4;33160:131;:::i;:::-;33152:139;;32879:419;;;:::o;33304:169::-;33444:21;33440:1;33432:6;33428:14;33421:45;33304:169;:::o;33479:366::-;33621:3;33642:67;33706:2;33701:3;33642:67;:::i;:::-;33635:74;;33718:93;33807:3;33718:93;:::i;:::-;33836:2;33831:3;33827:12;33820:19;;33479:366;;;:::o;33851:419::-;34017:4;34055:2;34044:9;34040:18;34032:26;;34104:9;34098:4;34094:20;34090:1;34079:9;34075:17;34068:47;34132:131;34258:4;34132:131;:::i;:::-;34124:139;;33851:419;;;:::o;34276:241::-;34416:34;34412:1;34404:6;34400:14;34393:58;34485:24;34480:2;34472:6;34468:15;34461:49;34276:241;:::o;34523:366::-;34665:3;34686:67;34750:2;34745:3;34686:67;:::i;:::-;34679:74;;34762:93;34851:3;34762:93;:::i;:::-;34880:2;34875:3;34871:12;34864:19;;34523:366;;;:::o;34895:419::-;35061:4;35099:2;35088:9;35084:18;35076:26;;35148:9;35142:4;35138:20;35134:1;35123:9;35119:17;35112:47;35176:131;35302:4;35176:131;:::i;:::-;35168:139;;34895:419;;;:::o;35320:191::-;35360:4;35380:20;35398:1;35380:20;:::i;:::-;35375:25;;35414:20;35432:1;35414:20;:::i;:::-;35409:25;;35453:1;35450;35447:8;35444:34;;;35458:18;;:::i;:::-;35444:34;35503:1;35500;35496:9;35488:17;;35320:191;;;;:::o;35517:225::-;35657:34;35653:1;35645:6;35641:14;35634:58;35726:8;35721:2;35713:6;35709:15;35702:33;35517:225;:::o;35748:366::-;35890:3;35911:67;35975:2;35970:3;35911:67;:::i;:::-;35904:74;;35987:93;36076:3;35987:93;:::i;:::-;36105:2;36100:3;36096:12;36089:19;;35748:366;;;:::o;36120:419::-;36286:4;36324:2;36313:9;36309:18;36301:26;;36373:9;36367:4;36363:20;36359:1;36348:9;36344:17;36337:47;36401:131;36527:4;36401:131;:::i;:::-;36393:139;;36120:419;;;:::o;36545:147::-;36646:11;36683:3;36668:18;;36545:147;;;;:::o;36698:114::-;;:::o;36818:398::-;36977:3;36998:83;37079:1;37074:3;36998:83;:::i;:::-;36991:90;;37090:93;37179:3;37090:93;:::i;:::-;37208:1;37203:3;37199:11;37192:18;;36818:398;;;:::o;37222:379::-;37406:3;37428:147;37571:3;37428:147;:::i;:::-;37421:154;;37592:3;37585:10;;37222:379;;;:::o;37607:442::-;37756:4;37794:2;37783:9;37779:18;37771:26;;37807:71;37875:1;37864:9;37860:17;37851:6;37807:71;:::i;:::-;37888:72;37956:2;37945:9;37941:18;37932:6;37888:72;:::i;:::-;37970;38038:2;38027:9;38023:18;38014:6;37970:72;:::i;:::-;37607:442;;;;;;:::o;38055:143::-;38112:5;38143:6;38137:13;38128:22;;38159:33;38186:5;38159:33;:::i;:::-;38055:143;;;;:::o;38204:351::-;38274:6;38323:2;38311:9;38302:7;38298:23;38294:32;38291:119;;;38329:79;;:::i;:::-;38291:119;38449:1;38474:64;38530:7;38521:6;38510:9;38506:22;38474:64;:::i;:::-;38464:74;;38420:128;38204:351;;;;:::o;38561:85::-;38606:7;38635:5;38624:16;;38561:85;;;:::o;38652:158::-;38710:9;38743:61;38761:42;38770:32;38796:5;38770:32;:::i;:::-;38761:42;:::i;:::-;38743:61;:::i;:::-;38730:74;;38652:158;;;:::o;38816:147::-;38911:45;38950:5;38911:45;:::i;:::-;38906:3;38899:58;38816:147;;:::o;38969:114::-;39036:6;39070:5;39064:12;39054:22;;38969:114;;;:::o;39089:184::-;39188:11;39222:6;39217:3;39210:19;39262:4;39257:3;39253:14;39238:29;;39089:184;;;;:::o;39279:132::-;39346:4;39369:3;39361:11;;39399:4;39394:3;39390:14;39382:22;;39279:132;;;:::o;39417:108::-;39494:24;39512:5;39494:24;:::i;:::-;39489:3;39482:37;39417:108;;:::o;39531:179::-;39600:10;39621:46;39663:3;39655:6;39621:46;:::i;:::-;39699:4;39694:3;39690:14;39676:28;;39531:179;;;;:::o;39716:113::-;39786:4;39818;39813:3;39809:14;39801:22;;39716:113;;;:::o;39865:732::-;39984:3;40013:54;40061:5;40013:54;:::i;:::-;40083:86;40162:6;40157:3;40083:86;:::i;:::-;40076:93;;40193:56;40243:5;40193:56;:::i;:::-;40272:7;40303:1;40288:284;40313:6;40310:1;40307:13;40288:284;;;40389:6;40383:13;40416:63;40475:3;40460:13;40416:63;:::i;:::-;40409:70;;40502:60;40555:6;40502:60;:::i;:::-;40492:70;;40348:224;40335:1;40332;40328:9;40323:14;;40288:284;;;40292:14;40588:3;40581:10;;39989:608;;;39865:732;;;;:::o;40603:831::-;40866:4;40904:3;40893:9;40889:19;40881:27;;40918:71;40986:1;40975:9;40971:17;40962:6;40918:71;:::i;:::-;40999:80;41075:2;41064:9;41060:18;41051:6;40999:80;:::i;:::-;41126:9;41120:4;41116:20;41111:2;41100:9;41096:18;41089:48;41154:108;41257:4;41248:6;41154:108;:::i;:::-;41146:116;;41272:72;41340:2;41329:9;41325:18;41316:6;41272:72;:::i;:::-;41354:73;41422:3;41411:9;41407:19;41398:6;41354:73;:::i;:::-;40603:831;;;;;;;;:::o;41440:807::-;41689:4;41727:3;41716:9;41712:19;41704:27;;41741:71;41809:1;41798:9;41794:17;41785:6;41741:71;:::i;:::-;41822:72;41890:2;41879:9;41875:18;41866:6;41822:72;:::i;:::-;41904:80;41980:2;41969:9;41965:18;41956:6;41904:80;:::i;:::-;41994;42070:2;42059:9;42055:18;42046:6;41994:80;:::i;:::-;42084:73;42152:3;42141:9;42137:19;42128:6;42084:73;:::i;:::-;42167;42235:3;42224:9;42220:19;42211:6;42167:73;:::i;:::-;41440:807;;;;;;;;;:::o;42253:143::-;42310:5;42341:6;42335:13;42326:22;;42357:33;42384:5;42357:33;:::i;:::-;42253:143;;;;:::o;42402:663::-;42490:6;42498;42506;42555:2;42543:9;42534:7;42530:23;42526:32;42523:119;;;42561:79;;:::i;:::-;42523:119;42681:1;42706:64;42762:7;42753:6;42742:9;42738:22;42706:64;:::i;:::-;42696:74;;42652:128;42819:2;42845:64;42901:7;42892:6;42881:9;42877:22;42845:64;:::i;:::-;42835:74;;42790:129;42958:2;42984:64;43040:7;43031:6;43020:9;43016:22;42984:64;:::i;:::-;42974:74;;42929:129;42402:663;;;;;:::o

Swarm Source

ipfs://83fff15e536dafce1d2807b0fd8ad0e05969a309c44f48ce48748b0db758e69a
Loading...
Loading
Loading...
Loading
[ 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.