ETH Price: $3,324.22 (-2.96%)

Token

APC (APC)
 

Overview

Max Total Supply

100,000,000,000 APC

Holders

46

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
220,000,000 APC

Value
$0.00
0x6f90e334bc1a6e9d71fe4c3f0d33655c1608d93f
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:
ApothecaryINU

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-22
*/

// WE ALL GONNA MAKE IT 
// https://t.me/Apothecaryercc
// http://Apothecaryinu.com


// SPDX-License-Identifier: MIT                                                                                                                                                             
                                                    
pragma solidity 0.8.10;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability partyning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IUSV2Pair {
    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);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IUSV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

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 {
    using SafeMath for uint256;
    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) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        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);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(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 = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(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);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(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 {}
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

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

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    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);
    }
}

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}

interface IUSV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUSV2Router02 is IUSV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

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

contract ApothecaryINU is ERC20, Ownable {
    using SafeMath for uint256;
    
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _totalSupply = 100000000000 * 1e18;

    IUSV2Router02 private usV2Router;
    address public usV2Pair;

    bool private inTheZone; //swap
    bool private misa = true; 

    address public theBank;
    address public liqOwner; //this is where the auto LP created will go - set to go to 0xDEAD at launch
    
    uint256 public maxTx;
    uint256 public tokenToEth;
    uint256 public maxWallet;
    
    // bot, snipe and whale control protections
    bool public restrictions = true;
    bool public tradesPermit = false;
    bool public waxOn = false;

    mapping (address => bool) private bots;
    mapping(address => uint256) private _lastTrans; 
    bool public timeRugEnabled = true;
    bool private boughtEarly = true;
    uint256 private _firstBlock;
    uint256 private _botBlocks;

    uint256 public buyTotalFees;
    uint256 public buyTheBankFee;
    uint256 public buyLiqFee;
    
    uint256 public sellTotalFees;
    uint256 public sellTheBankFee;
    uint256 public sellLiqFee;
    
    uint256 private tokensForBank;
    uint256 private tokensForLiq;

    uint256 _buyTheBankFee = 7;
    uint256 _buyLiqFee = 5;

    uint256 _sellTheBankFee = 9;
    uint256 _sellLiqFee = 5;


    // exlcusions
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTx;
    event ExcludeFromFees(address indexed account, bool isExcluded);

    event theBankUpdated(address indexed newWallet, address indexed oldWallet);
    event liqOwnerUpdated(address indexed newWallet, address indexed oldWallet);
    
    event EndedBoughtEarly(bool boughtEarly);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );


    constructor() ERC20("APC", "APC") {
        
        IUSV2Router02 _usV2Router = IUSV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        excludeFromMaxTx(address(_usV2Router), true);
        usV2Router = _usV2Router;
        
        _approve(address(this), address(usV2Router), _totalSupply);

        usV2Pair = IUSV2Factory(_usV2Router.factory()).createPair(address(this), _usV2Router.WETH());
        IERC20(usV2Pair).approve(address(usV2Router),type(uint256).max);

        excludeFromMaxTx(address(usV2Pair), true);      

        maxTx = 1500000000 * 1e18; // 0.25% of supply max transaction allowed at launch
        maxWallet = 3000000000 * 1e18; // 2% of supply max wallet
        tokenToEth = 6000000000 * 1e18; // 0.05% is the amount of tokens collected before selling for eth

        buyTheBankFee = _buyTheBankFee;
        buyLiqFee = _buyLiqFee;
        buyTotalFees = buyTheBankFee + buyLiqFee;
        
        sellTheBankFee = _sellTheBankFee;
        sellLiqFee = _sellLiqFee;
        sellTotalFees = sellTheBankFee + sellLiqFee;
        
        //update this or you are going to donate all your fees to 0xDead
        theBank = payable(0x692108f04fDA0dCdB213a48906474A88Fc6B7Dd3); 
        liqOwner = payable(0x692108f04fDA0dCdB213a48906474A88Fc6B7Dd3);
        
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(theBank), true);
        excludeFromFees(address(liqOwner), true);
        
        excludeFromMaxTx(owner(), true);
        excludeFromMaxTx(address(this), true);
        excludeFromMaxTx(address(theBank), true);
        excludeFromMaxTx(address(liqOwner), true);
       
       _mint(msg.sender, _totalSupply); //internal transfer to be called once
    }

    receive() external payable {

  	}
    
    // disable Transfer delay - cannot be reenabled
    function disableTimeRug() external onlyOwner returns (bool){
        timeRugEnabled = false;
        return true;
    }
    
     // change the minimum amount of tokens to sell from fees
    function updateTokensToEth(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.");
  	    tokenToEth = newAmount;
  	    return true;
  	}
    
    function updateMaxTxAmount(uint256 newNum) external onlyOwner {
        maxTx = newNum * (1e18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        maxWallet = newNum * (1e18);
    }
    
    function excludeFromMaxTx(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTx[updAds] = isEx;
    }
    
    function updateBuyFees(uint256 _theBankFee, uint256 _liqFee) external onlyOwner {
        buyTheBankFee = _theBankFee;
        buyLiqFee = _liqFee;
        buyTotalFees = buyTheBankFee + buyLiqFee;
        require(buyTotalFees <= 49, "Must keep fees at 49% or less");
    }
    
    function updateSellFees(uint256 _theBankFee, uint256 _liqFee) external onlyOwner {
        sellTheBankFee = _theBankFee;
        sellLiqFee = _liqFee;
        sellTotalFees = sellTheBankFee + sellLiqFee;
        require(sellTotalFees <= 49, "Must keep fees at 49% or less");
    }

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

    function updateTheBankWallet(address newTheBankWallet) external onlyOwner {
        emit theBankUpdated(newTheBankWallet, theBank);
        theBank = newTheBankWallet;
    }

    function updateLiqOwner(address newLiqOwner) external onlyOwner {
        emit liqOwnerUpdated(newLiqOwner, liqOwner);
        liqOwner = newLiqOwner;
    }
    
    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");
        
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(restrictions){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0x692108f04fDA0dCdB213a48906474A88Fc6B7Dd3) &&
                !inTheZone
            ){
                if (from == usV2Pair && to != address(usV2Router)) {
                
                    if (block.number <= _firstBlock.add(_botBlocks)) {
                        bots[to] = true;
                    }                        

                }

                if(!tradesPermit){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                if (timeRugEnabled){
                    if (to != owner() && to != address(usV2Router) && to != address(usV2Pair)){
                        require(_lastTrans[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _lastTrans[tx.origin] = block.number;
                    }
                }
                 
                //when buy
                if (from == usV2Pair) {
                        require(amount <= maxTx, "Buy transfer amount exceeds the maxTx.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                
                //when sell
                else if (to == usV2Pair && !_isExcludedMaxTx[from] && !bots[from] && !bots[to]) {
                        require(amount <= maxTx, "Sell transfer amount exceeds the maxTx.");
        
                }
                else if(!_isExcludedMaxTx[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
        
		uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= tokenToEth;

        if (canSwap && waxOn && !inTheZone && from != usV2Pair && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            inTheZone = true;
            switchIt();
            inTheZone = false;
        }

        bool takeFee = !inTheZone;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        //transfers are free
        if(takeFee){
            // on sell
            if (to == usV2Pair && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiq += fees * sellLiqFee / sellTotalFees;
                tokensForBank += fees * sellTheBankFee / sellTotalFees;
            }
            // on buy
            else if(from == usV2Pair && buyTotalFees > 0) {
        	    fees = amount.mul(buyTotalFees).div(100);
        	    tokensForLiq += fees * buyLiqFee / buyTotalFees;
                tokensForBank += fees * buyTheBankFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {

        // generate the us pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = usV2Router.WETH();

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

        // make the swap
        usV2Router.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(usV2Router), tokenAmount);

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

    function switchIt() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiq + tokensForBank;
        bool success;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > tokenToEth * 20){
          contractBalance = tokenToEth * 20;
        }
        
        uint256 liqTokens = contractBalance * tokensForLiq / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liqTokens);
        uint256 initialETHBalance = address(this).balance;
        swapTokensForEth(amountToSwapForETH); 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForTheBank = ethBalance.mul(tokensForBank).div(totalTokensToSwap);
        uint256 ethForLiq = ethBalance - ethForTheBank;
        
        tokensForLiq = 0;
        tokensForBank = 0;
        
        if(liqTokens > 0 && ethForLiq > 0){
            addLiquidity(liqTokens, ethForLiq);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiq, tokensForLiq);
        }
        
        (success,) = address(theBank).call{value: address(this).balance}("");
    }

    function badBots(address[] memory bots_) public onlyOwner {
        for (uint256 i = 0; i < bots_.length; i++) {
            bots[bots_[i]] = true;
        }
    }
 
    function notaBot(address notbot) public onlyOwner {
        bots[notbot] = false;
    }

    function partyBegins(uint256 botBlocks) private {
        _firstBlock = block.number;
        _botBlocks = botBlocks;
        tradesPermit = true;
    }

    // this begins the contract and once enabled, it cannot be disabled
    function startTrading(uint256 botBlocks) external onlyOwner() {
        require(botBlocks <= 1, "don't catch humans");
        waxOn = true;
        require(boughtEarly == true, "done");
        boughtEarly = false;
        partyBegins(botBlocks);
        emit EndedBoughtEarly(boughtEarly);
    }

    function airdrop(address[] memory airdropWallets, uint256[] memory amounts) external onlyOwner {
        require(airdropWallets.length < 200, "Can only airdrop 200 wallets per txn due to gas limits"); // allows for airdrop
        for(uint256 i = 0; i < airdropWallets.length; i++){
            address wallet = airdropWallets[i];
            uint256 amount = amounts[i] * 1e18;
            _transfer(msg.sender, wallet, amount);
        }
    }


}

Contract Security Audit

Contract ABI

[{"inputs":[],"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":false,"internalType":"bool","name":"boughtEarly","type":"bool"}],"name":"EndedBoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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":"liqOwnerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"theBankUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdrop","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":"bots_","type":"address[]"}],"name":"badBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiqFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTheBankFee","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":"disableTimeRug","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"excludeFromMaxTx","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":[],"name":"liqOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTx","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":[{"internalType":"address","name":"notbot","type":"address"}],"name":"notaBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"restrictions","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiqFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTheBankFee","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":"uint256","name":"botBlocks","type":"uint256"}],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"theBank","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeRugEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenToEth","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":"tradesPermit","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":[{"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":[{"internalType":"uint256","name":"_theBankFee","type":"uint256"},{"internalType":"uint256","name":"_liqFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiqOwner","type":"address"}],"name":"updateLiqOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_theBankFee","type":"uint256"},{"internalType":"uint256","name":"_liqFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTheBankWallet","type":"address"}],"name":"updateTheBankWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateTokensToEth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"waxOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001600a60156101000a81548160ff0219169083151502179055506001601060006101000a81548160ff0219169083151502179055506000601060016101000a81548160ff0219169083151502179055506000601060026101000a81548160ff0219169083151502179055506001601360006101000a81548160ff0219169083151502179055506001601360016101000a81548160ff0219169083151502179055506007601e556005601f5560096020556005602155348015620000c757600080fd5b506040518060400160405280600381526020017f41504300000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f415043000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200014c92919062000e8b565b5080600490805190602001906200016592919062000e8b565b50505060006200017a6200082560201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620002458160016200082d60201b60201c565b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002c830600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166c01431e0fae6d7217caa00000006200092a60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000314573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033a919062000fa5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c8919062000fa5565b6040518363ffffffff1660e01b8152600401620003e792919062000fe8565b6020604051808303816000875af115801562000407573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200042d919062000fa5565b600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016200050e92919062001030565b6020604051808303816000875af11580156200052e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200055491906200109a565b506200058a600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200082d60201b60201c565b6b04d8c55aefb8c05b5c000000600d819055506b09b18ab5df7180b6b8000000600f819055506b1363156bbee3016d70000000600e81905550601e54601781905550601f54601881905550601854601754620005e79190620010fb565b601681905550602054601a81905550602154601b81905550601b54601a54620006119190620010fb565b60198190555073692108f04fda0dcdb213a48906474a88fc6b7dd3600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073692108f04fda0dcdb213a48906474a88fc6b7dd3600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620006e3620006d562000afd60201b60201c565b600162000b2760201b60201c565b620006f630600162000b2760201b60201c565b6200072b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000b2760201b60201c565b62000760600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000b2760201b60201c565b620007826200077462000afd60201b60201c565b60016200082d60201b60201c565b620007953060016200082d60201b60201c565b620007ca600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200082d60201b60201c565b620007ff600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200082d60201b60201c565b6200081e336c01431e0fae6d7217caa000000062000c7460201b60201c565b506200149f565b600033905090565b6200083d6200082560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008cf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008c690620011b9565b60405180910390fd5b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156200099d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009949062001251565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a0790620012e9565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000af091906200130b565b60405180910390a3505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000b376200082560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000bc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bc090620011b9565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000c68919062001339565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000ce7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000cde90620013a6565b60405180910390fd5b62000cfb6000838362000e2360201b60201c565b62000d178160025462000e2860201b620021001790919060201c565b60028190555062000d75816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000e2860201b620021001790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000e1791906200130b565b60405180910390a35050565b505050565b600080828462000e399190620010fb565b90508381101562000e81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e789062001418565b60405180910390fd5b8091505092915050565b82805462000e999062001469565b90600052602060002090601f01602090048101928262000ebd576000855562000f09565b82601f1062000ed857805160ff191683800117855562000f09565b8280016001018555821562000f09579182015b8281111562000f0857825182559160200191906001019062000eeb565b5b50905062000f18919062000f1c565b5090565b5b8082111562000f3757600081600090555060010162000f1d565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f6d8262000f40565b9050919050565b62000f7f8162000f60565b811462000f8b57600080fd5b50565b60008151905062000f9f8162000f74565b92915050565b60006020828403121562000fbe5762000fbd62000f3b565b5b600062000fce8482850162000f8e565b91505092915050565b62000fe28162000f60565b82525050565b600060408201905062000fff600083018562000fd7565b6200100e602083018462000fd7565b9392505050565b6000819050919050565b6200102a8162001015565b82525050565b600060408201905062001047600083018562000fd7565b6200105660208301846200101f565b9392505050565b60008115159050919050565b62001074816200105d565b81146200108057600080fd5b50565b600081519050620010948162001069565b92915050565b600060208284031215620010b357620010b262000f3b565b5b6000620010c38482850162001083565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620011088262001015565b9150620011158362001015565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200114d576200114c620010cc565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620011a160208362001158565b9150620011ae8262001169565b602082019050919050565b60006020820190508181036000830152620011d48162001192565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006200123960248362001158565b91506200124682620011db565b604082019050919050565b600060208201905081810360008301526200126c816200122a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000620012d160228362001158565b9150620012de8262001273565b604082019050919050565b600060208201905081810360008301526200130481620012c2565b9050919050565b60006020820190506200132260008301846200101f565b92915050565b62001333816200105d565b82525050565b600060208201905062001350600083018462001328565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200138e601f8362001158565b91506200139b8262001356565b602082019050919050565b60006020820190508181036000830152620013c1816200137f565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001400601b8362001158565b91506200140d82620013c8565b602082019050919050565b600060208201905081810360008301526200143381620013f1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200148257607f821691505b602082108114156200149957620014986200143a565b5b50919050565b61525380620014af6000396000f3fe60806040526004361061026b5760003560e01c80637845008f11610144578063bc77d667116100b6578063d85ba0631161007a578063d85ba06314610951578063dd62ed3e1461097c578063e9ffa8a7146109b9578063f1f0acd5146109e4578063f2fde38b14610a0f578063f8b45b0514610a3857610272565b8063bc77d66714610880578063c0246668146108ab578063c18bc195146108d4578063c1aea0c3146108fd578063d4c989d31461092857610272565b80638da5cb5b116101085780638da5cb5b1461075a57806395d89b4114610785578063a077b298146107b0578063a457c2d7146107db578063a9059cbb14610818578063b6cf8ce61461085557610272565b80637845008f14610661578063786d816a1461068c5780637e4ba656146106b5578063882c3d98146106e05780638bb58a141461071d57610272565b806339509351116101dd57806367243482116101a1578063672434821461055357806368826f891461057c5780636a486a8e146105a557806370a08231146105d057806370b1e3e61461060d5780637437681e1461063657610272565b8063395093511461046e5780635c5af000146104ab5780636256d181146104d6578063657c0d80146104ff57806366ca9b831461052a57610272565b8063135d073a1161022f578063135d073a1461035c57806318160ddd14610387578063188a14de146103b257806323b872dd146103db578063313ce567146104185780633208b4781461044357610272565b806302dbd8f81461027757806306a1409f146102a057806306fdde03146102c95780630872dc41146102f4578063095ea7b31461031f57610272565b3661027257005b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613c08565b610a63565b005b3480156102ac57600080fd5b506102c760048036038101906102c29190613c48565b610b68565b005b3480156102d557600080fd5b506102de610d21565b6040516102eb9190613d0e565b60405180910390f35b34801561030057600080fd5b50610309610db3565b6040516103169190613d71565b60405180910390f35b34801561032b57600080fd5b5061034660048036038101906103419190613db8565b610dd9565b6040516103539190613e13565b60405180910390f35b34801561036857600080fd5b50610371610df7565b60405161037e9190613e3d565b60405180910390f35b34801561039357600080fd5b5061039c610dfd565b6040516103a99190613e3d565b60405180910390f35b3480156103be57600080fd5b506103d960048036038101906103d49190613e58565b610e07565b005b3480156103e757600080fd5b5061040260048036038101906103fd9190613e85565b610ef9565b60405161040f9190613e13565b60405180910390f35b34801561042457600080fd5b5061042d610fd2565b60405161043a9190613ef4565b60405180910390f35b34801561044f57600080fd5b50610458610fdb565b6040516104659190613d71565b60405180910390f35b34801561047a57600080fd5b5061049560048036038101906104909190613db8565b611001565b6040516104a29190613e13565b60405180910390f35b3480156104b757600080fd5b506104c06110b4565b6040516104cd9190613e3d565b60405180910390f35b3480156104e257600080fd5b506104fd60048036038101906104f89190613c48565b6110ba565b005b34801561050b57600080fd5b5061051461116e565b6040516105219190613e13565b60405180910390f35b34801561053657600080fd5b50610551600480360381019061054c9190613c08565b611229565b005b34801561055f57600080fd5b5061057a6004803603810190610575919061411a565b61132e565b005b34801561058857600080fd5b506105a3600480360381019061059e9190613e58565b61148b565b005b3480156105b157600080fd5b506105ba6115e2565b6040516105c79190613e3d565b60405180910390f35b3480156105dc57600080fd5b506105f760048036038101906105f29190613e58565b6115e8565b6040516106049190613e3d565b60405180910390f35b34801561061957600080fd5b50610634600480360381019061062f9190613e58565b611630565b005b34801561064257600080fd5b5061064b611787565b6040516106589190613e3d565b60405180910390f35b34801561066d57600080fd5b5061067661178d565b6040516106839190613e13565b60405180910390f35b34801561069857600080fd5b506106b360048036038101906106ae9190614192565b6117a0565b005b3480156106c157600080fd5b506106ca6118cc565b6040516106d79190613e13565b60405180910390f35b3480156106ec57600080fd5b5061070760048036038101906107029190613e58565b6118df565b6040516107149190613e13565b60405180910390f35b34801561072957600080fd5b50610744600480360381019061073f9190613c48565b6118ff565b6040516107519190613e13565b60405180910390f35b34801561076657600080fd5b5061076f611a6f565b60405161077c9190613d71565b60405180910390f35b34801561079157600080fd5b5061079a611a99565b6040516107a79190613d0e565b60405180910390f35b3480156107bc57600080fd5b506107c5611b2b565b6040516107d29190613e13565b60405180910390f35b3480156107e757600080fd5b5061080260048036038101906107fd9190613db8565b611b3e565b60405161080f9190613e13565b60405180910390f35b34801561082457600080fd5b5061083f600480360381019061083a9190613db8565b611c0b565b60405161084c9190613e13565b60405180910390f35b34801561086157600080fd5b5061086a611c29565b6040516108779190613e3d565b60405180910390f35b34801561088c57600080fd5b50610895611c2f565b6040516108a29190613e3d565b60405180910390f35b3480156108b757600080fd5b506108d260048036038101906108cd9190614207565b611c35565b005b3480156108e057600080fd5b506108fb60048036038101906108f69190613c48565b611d75565b005b34801561090957600080fd5b50610912611e29565b60405161091f9190613e3d565b60405180910390f35b34801561093457600080fd5b5061094f600480360381019061094a9190614207565b611e2f565b005b34801561095d57600080fd5b50610966611f21565b6040516109739190613e3d565b60405180910390f35b34801561098857600080fd5b506109a3600480360381019061099e9190614247565b611f27565b6040516109b09190613e3d565b60405180910390f35b3480156109c557600080fd5b506109ce611fae565b6040516109db9190613e13565b60405180910390f35b3480156109f057600080fd5b506109f9611fc1565b604051610a069190613d71565b60405180910390f35b348015610a1b57600080fd5b50610a366004803603810190610a319190613e58565b611fe7565b005b348015610a4457600080fd5b50610a4d6120fa565b604051610a5a9190613e3d565b60405180910390f35b610a6b61215e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af1906142d3565b60405180910390fd5b81601a8190555080601b81905550601b54601a54610b189190614322565b60198190555060316019541115610b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5b906143c4565b60405180910390fd5b5050565b610b7061215e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf6906142d3565b60405180910390fd5b6001811115610c43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3a90614430565b60405180910390fd5b6001601060026101000a81548160ff02191690831515021790555060011515601360019054906101000a900460ff16151514610cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cab9061449c565b60405180910390fd5b6000601360016101000a81548160ff021916908315150217905550610cd881612166565b7fbd657b4e94b205761f2ca5be9988d7b243c828f625c0746c6581ec528e507c47601360019054906101000a900460ff16604051610d169190613e13565b60405180910390a150565b606060038054610d30906144eb565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5c906144eb565b8015610da95780601f10610d7e57610100808354040283529160200191610da9565b820191906000526020600020905b815481529060010190602001808311610d8c57829003601f168201915b5050505050905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610ded610de661215e565b8484612192565b6001905092915050565b60175481565b6000600254905090565b610e0f61215e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e95906142d3565b60405180910390fd5b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000610f0684848461235d565b610fc784610f1261215e565b610fc2856040518060600160405280602881526020016151d160289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f7861215e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131389092919063ffffffff16565b612192565b600190509392505050565b60006012905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006110aa61100e61215e565b846110a5856001600061101f61215e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461210090919063ffffffff16565b612192565b6001905092915050565b600e5481565b6110c261215e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611151576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611148906142d3565b60405180910390fd5b670de0b6b3a764000081611165919061451d565b600d8190555050565b600061117861215e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611207576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fe906142d3565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b61123161215e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b7906142d3565b60405180910390fd5b81601781905550806018819055506018546017546112de9190614322565b6016819055506031601654111561132a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611321906143c4565b60405180910390fd5b5050565b61133661215e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bc906142d3565b60405180910390fd5b60c8825110611409576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611400906145e9565b60405180910390fd5b60005b825181101561148657600083828151811061142a57611429614609565b5b602002602001015190506000670de0b6b3a764000084848151811061145257611451614609565b5b6020026020010151611464919061451d565b905061147133838361235d565b5050808061147e90614638565b91505061140c565b505050565b61149361215e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611522576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611519906142d3565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fc5fd566e89e92bb1398270e0c5464c0528285b46af4783edce649e17ac15a4e760405160405180910390a380600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61163861215e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116be906142d3565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fbb2b5baadb9845ce0d512fbe0c707880ed29239d8655db7b7885fb477e875a0860405160405180910390a380600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d5481565b601360009054906101000a900460ff1681565b6117a861215e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182e906142d3565b60405180910390fd5b60005b81518110156118c85760016011600084848151811061185c5761185b614609565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806118c090614638565b91505061183a565b5050565b601060029054906101000a900460ff1681565b60236020528060005260406000206000915054906101000a900460ff1681565b600061190961215e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198f906142d3565b60405180910390fd5b620186a060016119a6610dfd565b6119b0919061451d565b6119ba91906146b0565b8210156119fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f390614753565b60405180910390fd5b6103e86005611a09610dfd565b611a13919061451d565b611a1d91906146b0565b821115611a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a56906147e5565b60405180910390fd5b81600e8190555060019050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611aa8906144eb565b80601f0160208091040260200160405190810160405280929190818152602001828054611ad4906144eb565b8015611b215780601f10611af657610100808354040283529160200191611b21565b820191906000526020600020905b815481529060010190602001808311611b0457829003601f168201915b5050505050905090565b601060009054906101000a900460ff1681565b6000611c01611b4b61215e565b84611bfc856040518060600160405280602581526020016151f96025913960016000611b7561215e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131389092919063ffffffff16565b612192565b6001905092915050565b6000611c1f611c1861215e565b848461235d565b6001905092915050565b601b5481565b601a5481565b611c3d61215e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc3906142d3565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d699190613e13565b60405180910390a25050565b611d7d61215e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e03906142d3565b60405180910390fd5b670de0b6b3a764000081611e20919061451d565b600f8190555050565b60185481565b611e3761215e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebd906142d3565b60405180910390fd5b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60165481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601060019054906101000a900460ff1681565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611fef61215e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461207e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612075906142d3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e590614877565b60405180910390fd5b6120f78161319c565b50565b600f5481565b600080828461210f9190614322565b905083811015612154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214b906148e3565b60405180910390fd5b8091505092915050565b600033905090565b43601481905550806015819055506001601060016101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f990614975565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612272576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226990614a07565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123509190613e3d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c490614a99565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561243d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243490614b2b565b60405180910390fd5b60008114156124575761245283836000613262565b613133565b601060009054906101000a900460ff1615612cb557612474611a6f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124e257506124b2611a6f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561251b5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612567575073692108f04fda0dcdb213a48906474a88fc6b7dd373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125805750600a60149054906101000a900460ff16155b15612cb457600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156126305750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156126ac5761264c60155460145461210090919063ffffffff16565b43116126ab576001601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b601060019054906101000a900460ff166127a157602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127615750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6127a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279790614b97565b60405180910390fd5b5b601360009054906101000a900460ff161561296d576127be611a6f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156128475750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128a15750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561296c5743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291e90614c4f565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a6557600d54811115612a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ff90614ce1565b60405180910390fd5b600f54612a14836115e8565b82612a1f9190614322565b1115612a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5790614d4d565b60405180910390fd5b612cb3565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015612b0c5750602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b625750601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612bb85750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c0757600d54811115612c02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf990614ddf565b60405180910390fd5b612cb2565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612cb157600f54612c64836115e8565b82612c6f9190614322565b1115612cb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca790614d4d565b60405180910390fd5b5b5b5b5b5b6000612cc0306115e8565b90506000600e548210159050808015612ce55750601060029054906101000a900460ff165b8015612cfe5750600a60149054906101000a900460ff16155b8015612d585750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612dae5750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e045750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e48576001600a60146101000a81548160ff021916908315150217905550612e2c6134f7565b6000600a60146101000a81548160ff0219169083151502179055505b6000600a60149054906101000a900460ff16159050602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612efe5750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f0857600090505b6000811561312357600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16148015612f6f57506000601954115b1561300957612f9c6064612f8e6019548861370490919063ffffffff16565b61377f90919063ffffffff16565b9050601954601b5482612faf919061451d565b612fb991906146b0565b601d6000828254612fca9190614322565b92505081905550601954601a5482612fe2919061451d565b612fec91906146b0565b601c6000828254612ffd9190614322565b925050819055506130ff565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614801561306857506000601654115b156130fe5761309560646130876016548861370490919063ffffffff16565b61377f90919063ffffffff16565b9050601654601854826130a8919061451d565b6130b291906146b0565b601d60008282546130c39190614322565b92505081905550601654601754826130db919061451d565b6130e591906146b0565b601c60008282546130f69190614322565b925050819055505b5b600081111561311457613113873083613262565b5b80856131209190614dff565b94505b61312e878787613262565b505050505b505050565b6000838311158290613180576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131779190613d0e565b60405180910390fd5b506000838561318f9190614dff565b9050809150509392505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156132d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c990614a99565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613342576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161333990614b2b565b60405180910390fd5b61334d8383836137c9565b6133b8816040518060600160405280602681526020016151ab602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131389092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061344b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461210090919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516134ea9190613e3d565b60405180910390a3505050565b6000613502306115e8565b90506000601c54601d546135169190614322565b90506000808314806135285750600082145b1561353557505050613702565b6014600e54613544919061451d565b83111561355d576014600e5461355a919061451d565b92505b6000600283601d5486613570919061451d565b61357a91906146b0565b61358491906146b0565b9050600061359b82866137ce90919063ffffffff16565b905060004790506135ab82613818565b60006135c082476137ce90919063ffffffff16565b905060006135eb876135dd601c548561370490919063ffffffff16565b61377f90919063ffffffff16565b9050600081836135fb9190614dff565b90506000601d819055506000601c8190555060008611801561361d5750600081115b1561366a5761362c8682613a5b565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601d5460405161366193929190614e33565b60405180910390a15b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516136b090614e9b565b60006040518083038185875af1925050503d80600081146136ed576040519150601f19603f3d011682016040523d82523d6000602084013e6136f2565b606091505b5050809750505050505050505050505b565b6000808314156137175760009050613779565b60008284613725919061451d565b905082848261373491906146b0565b14613774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161376b90614f22565b60405180910390fd5b809150505b92915050565b60006137c183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b5b565b905092915050565b505050565b600061381083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613138565b905092915050565b6000600267ffffffffffffffff81111561383557613834613f14565b5b6040519080825280602002602001820160405280156138635781602001602082028036833780820191505090505b509050308160008151811061387b5761387a614609565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613922573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139469190614f57565b8160018151811061395a57613959614609565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506139c130600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612192565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a25959493929190615087565b600060405180830381600087803b158015613a3f57600080fd5b505af1158015613a53573d6000803e3d6000fd5b505050505050565b613a8830600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612192565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613b11969594939291906150e1565b60606040518083038185885af1158015613b2f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613b549190615157565b5050505050565b60008083118290613ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b999190613d0e565b60405180910390fd5b5060008385613bb191906146b0565b9050809150509392505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b613be581613bd2565b8114613bf057600080fd5b50565b600081359050613c0281613bdc565b92915050565b60008060408385031215613c1f57613c1e613bc8565b5b6000613c2d85828601613bf3565b9250506020613c3e85828601613bf3565b9150509250929050565b600060208284031215613c5e57613c5d613bc8565b5b6000613c6c84828501613bf3565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613caf578082015181840152602081019050613c94565b83811115613cbe576000848401525b50505050565b6000601f19601f8301169050919050565b6000613ce082613c75565b613cea8185613c80565b9350613cfa818560208601613c91565b613d0381613cc4565b840191505092915050565b60006020820190508181036000830152613d288184613cd5565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613d5b82613d30565b9050919050565b613d6b81613d50565b82525050565b6000602082019050613d866000830184613d62565b92915050565b613d9581613d50565b8114613da057600080fd5b50565b600081359050613db281613d8c565b92915050565b60008060408385031215613dcf57613dce613bc8565b5b6000613ddd85828601613da3565b9250506020613dee85828601613bf3565b9150509250929050565b60008115159050919050565b613e0d81613df8565b82525050565b6000602082019050613e286000830184613e04565b92915050565b613e3781613bd2565b82525050565b6000602082019050613e526000830184613e2e565b92915050565b600060208284031215613e6e57613e6d613bc8565b5b6000613e7c84828501613da3565b91505092915050565b600080600060608486031215613e9e57613e9d613bc8565b5b6000613eac86828701613da3565b9350506020613ebd86828701613da3565b9250506040613ece86828701613bf3565b9150509250925092565b600060ff82169050919050565b613eee81613ed8565b82525050565b6000602082019050613f096000830184613ee5565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613f4c82613cc4565b810181811067ffffffffffffffff82111715613f6b57613f6a613f14565b5b80604052505050565b6000613f7e613bbe565b9050613f8a8282613f43565b919050565b600067ffffffffffffffff821115613faa57613fa9613f14565b5b602082029050602081019050919050565b600080fd5b6000613fd3613fce84613f8f565b613f74565b90508083825260208201905060208402830185811115613ff657613ff5613fbb565b5b835b8181101561401f578061400b8882613da3565b845260208401935050602081019050613ff8565b5050509392505050565b600082601f83011261403e5761403d613f0f565b5b813561404e848260208601613fc0565b91505092915050565b600067ffffffffffffffff82111561407257614071613f14565b5b602082029050602081019050919050565b600061409661409184614057565b613f74565b905080838252602082019050602084028301858111156140b9576140b8613fbb565b5b835b818110156140e257806140ce8882613bf3565b8452602084019350506020810190506140bb565b5050509392505050565b600082601f83011261410157614100613f0f565b5b8135614111848260208601614083565b91505092915050565b6000806040838503121561413157614130613bc8565b5b600083013567ffffffffffffffff81111561414f5761414e613bcd565b5b61415b85828601614029565b925050602083013567ffffffffffffffff81111561417c5761417b613bcd565b5b614188858286016140ec565b9150509250929050565b6000602082840312156141a8576141a7613bc8565b5b600082013567ffffffffffffffff8111156141c6576141c5613bcd565b5b6141d284828501614029565b91505092915050565b6141e481613df8565b81146141ef57600080fd5b50565b600081359050614201816141db565b92915050565b6000806040838503121561421e5761421d613bc8565b5b600061422c85828601613da3565b925050602061423d858286016141f2565b9150509250929050565b6000806040838503121561425e5761425d613bc8565b5b600061426c85828601613da3565b925050602061427d85828601613da3565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142bd602083613c80565b91506142c882614287565b602082019050919050565b600060208201905081810360008301526142ec816142b0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061432d82613bd2565b915061433883613bd2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561436d5761436c6142f3565b5b828201905092915050565b7f4d757374206b656570206665657320617420343925206f72206c657373000000600082015250565b60006143ae601d83613c80565b91506143b982614378565b602082019050919050565b600060208201905081810360008301526143dd816143a1565b9050919050565b7f646f6e27742063617463682068756d616e730000000000000000000000000000600082015250565b600061441a601283613c80565b9150614425826143e4565b602082019050919050565b600060208201905081810360008301526144498161440d565b9050919050565b7f646f6e6500000000000000000000000000000000000000000000000000000000600082015250565b6000614486600483613c80565b915061449182614450565b602082019050919050565b600060208201905081810360008301526144b581614479565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061450357607f821691505b60208210811415614517576145166144bc565b5b50919050565b600061452882613bd2565b915061453383613bd2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561456c5761456b6142f3565b5b828202905092915050565b7f43616e206f6e6c792061697264726f70203230302077616c6c6574732070657260008201527f2074786e2064756520746f20676173206c696d69747300000000000000000000602082015250565b60006145d3603683613c80565b91506145de82614577565b604082019050919050565b60006020820190508181036000830152614602816145c6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061464382613bd2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614676576146756142f3565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006146bb82613bd2565b91506146c683613bd2565b9250826146d6576146d5614681565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061473d603583613c80565b9150614748826146e1565b604082019050919050565b6000602082019050818103600083015261476c81614730565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006147cf603483613c80565b91506147da82614773565b604082019050919050565b600060208201905081810360008301526147fe816147c2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614861602683613c80565b915061486c82614805565b604082019050919050565b6000602082019050818103600083015261489081614854565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006148cd601b83613c80565b91506148d882614897565b602082019050919050565b600060208201905081810360008301526148fc816148c0565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061495f602483613c80565b915061496a82614903565b604082019050919050565b6000602082019050818103600083015261498e81614952565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006149f1602283613c80565b91506149fc82614995565b604082019050919050565b60006020820190508181036000830152614a20816149e4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614a83602583613c80565b9150614a8e82614a27565b604082019050919050565b60006020820190508181036000830152614ab281614a76565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614b15602383613c80565b9150614b2082614ab9565b604082019050919050565b60006020820190508181036000830152614b4481614b08565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614b81601683613c80565b9150614b8c82614b4b565b602082019050919050565b60006020820190508181036000830152614bb081614b74565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614c39604983613c80565b9150614c4482614bb7565b606082019050919050565b60006020820190508181036000830152614c6881614c2c565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b6000614ccb602683613c80565b9150614cd682614c6f565b604082019050919050565b60006020820190508181036000830152614cfa81614cbe565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614d37601383613c80565b9150614d4282614d01565b602082019050919050565b60006020820190508181036000830152614d6681614d2a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b6000614dc9602783613c80565b9150614dd482614d6d565b604082019050919050565b60006020820190508181036000830152614df881614dbc565b9050919050565b6000614e0a82613bd2565b9150614e1583613bd2565b925082821015614e2857614e276142f3565b5b828203905092915050565b6000606082019050614e486000830186613e2e565b614e556020830185613e2e565b614e626040830184613e2e565b949350505050565b600081905092915050565b50565b6000614e85600083614e6a565b9150614e9082614e75565b600082019050919050565b6000614ea682614e78565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f0c602183613c80565b9150614f1782614eb0565b604082019050919050565b60006020820190508181036000830152614f3b81614eff565b9050919050565b600081519050614f5181613d8c565b92915050565b600060208284031215614f6d57614f6c613bc8565b5b6000614f7b84828501614f42565b91505092915050565b6000819050919050565b6000819050919050565b6000614fb3614fae614fa984614f84565b614f8e565b613bd2565b9050919050565b614fc381614f98565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ffe81613d50565b82525050565b60006150108383614ff5565b60208301905092915050565b6000602082019050919050565b600061503482614fc9565b61503e8185614fd4565b935061504983614fe5565b8060005b8381101561507a5781516150618882615004565b975061506c8361501c565b92505060018101905061504d565b5085935050505092915050565b600060a08201905061509c6000830188613e2e565b6150a96020830187614fba565b81810360408301526150bb8186615029565b90506150ca6060830185613d62565b6150d76080830184613e2e565b9695505050505050565b600060c0820190506150f66000830189613d62565b6151036020830188613e2e565b6151106040830187614fba565b61511d6060830186614fba565b61512a6080830185613d62565b61513760a0830184613e2e565b979650505050505050565b60008151905061515181613bdc565b92915050565b6000806000606084860312156151705761516f613bc8565b5b600061517e86828701615142565b935050602061518f86828701615142565b92505060406151a086828701615142565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203a0a2ebae8c76950239e83d706099b12765a48a63da53874b957bea5427b946c64736f6c634300080a0033

Deployed Bytecode

0x60806040526004361061026b5760003560e01c80637845008f11610144578063bc77d667116100b6578063d85ba0631161007a578063d85ba06314610951578063dd62ed3e1461097c578063e9ffa8a7146109b9578063f1f0acd5146109e4578063f2fde38b14610a0f578063f8b45b0514610a3857610272565b8063bc77d66714610880578063c0246668146108ab578063c18bc195146108d4578063c1aea0c3146108fd578063d4c989d31461092857610272565b80638da5cb5b116101085780638da5cb5b1461075a57806395d89b4114610785578063a077b298146107b0578063a457c2d7146107db578063a9059cbb14610818578063b6cf8ce61461085557610272565b80637845008f14610661578063786d816a1461068c5780637e4ba656146106b5578063882c3d98146106e05780638bb58a141461071d57610272565b806339509351116101dd57806367243482116101a1578063672434821461055357806368826f891461057c5780636a486a8e146105a557806370a08231146105d057806370b1e3e61461060d5780637437681e1461063657610272565b8063395093511461046e5780635c5af000146104ab5780636256d181146104d6578063657c0d80146104ff57806366ca9b831461052a57610272565b8063135d073a1161022f578063135d073a1461035c57806318160ddd14610387578063188a14de146103b257806323b872dd146103db578063313ce567146104185780633208b4781461044357610272565b806302dbd8f81461027757806306a1409f146102a057806306fdde03146102c95780630872dc41146102f4578063095ea7b31461031f57610272565b3661027257005b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613c08565b610a63565b005b3480156102ac57600080fd5b506102c760048036038101906102c29190613c48565b610b68565b005b3480156102d557600080fd5b506102de610d21565b6040516102eb9190613d0e565b60405180910390f35b34801561030057600080fd5b50610309610db3565b6040516103169190613d71565b60405180910390f35b34801561032b57600080fd5b5061034660048036038101906103419190613db8565b610dd9565b6040516103539190613e13565b60405180910390f35b34801561036857600080fd5b50610371610df7565b60405161037e9190613e3d565b60405180910390f35b34801561039357600080fd5b5061039c610dfd565b6040516103a99190613e3d565b60405180910390f35b3480156103be57600080fd5b506103d960048036038101906103d49190613e58565b610e07565b005b3480156103e757600080fd5b5061040260048036038101906103fd9190613e85565b610ef9565b60405161040f9190613e13565b60405180910390f35b34801561042457600080fd5b5061042d610fd2565b60405161043a9190613ef4565b60405180910390f35b34801561044f57600080fd5b50610458610fdb565b6040516104659190613d71565b60405180910390f35b34801561047a57600080fd5b5061049560048036038101906104909190613db8565b611001565b6040516104a29190613e13565b60405180910390f35b3480156104b757600080fd5b506104c06110b4565b6040516104cd9190613e3d565b60405180910390f35b3480156104e257600080fd5b506104fd60048036038101906104f89190613c48565b6110ba565b005b34801561050b57600080fd5b5061051461116e565b6040516105219190613e13565b60405180910390f35b34801561053657600080fd5b50610551600480360381019061054c9190613c08565b611229565b005b34801561055f57600080fd5b5061057a6004803603810190610575919061411a565b61132e565b005b34801561058857600080fd5b506105a3600480360381019061059e9190613e58565b61148b565b005b3480156105b157600080fd5b506105ba6115e2565b6040516105c79190613e3d565b60405180910390f35b3480156105dc57600080fd5b506105f760048036038101906105f29190613e58565b6115e8565b6040516106049190613e3d565b60405180910390f35b34801561061957600080fd5b50610634600480360381019061062f9190613e58565b611630565b005b34801561064257600080fd5b5061064b611787565b6040516106589190613e3d565b60405180910390f35b34801561066d57600080fd5b5061067661178d565b6040516106839190613e13565b60405180910390f35b34801561069857600080fd5b506106b360048036038101906106ae9190614192565b6117a0565b005b3480156106c157600080fd5b506106ca6118cc565b6040516106d79190613e13565b60405180910390f35b3480156106ec57600080fd5b5061070760048036038101906107029190613e58565b6118df565b6040516107149190613e13565b60405180910390f35b34801561072957600080fd5b50610744600480360381019061073f9190613c48565b6118ff565b6040516107519190613e13565b60405180910390f35b34801561076657600080fd5b5061076f611a6f565b60405161077c9190613d71565b60405180910390f35b34801561079157600080fd5b5061079a611a99565b6040516107a79190613d0e565b60405180910390f35b3480156107bc57600080fd5b506107c5611b2b565b6040516107d29190613e13565b60405180910390f35b3480156107e757600080fd5b5061080260048036038101906107fd9190613db8565b611b3e565b60405161080f9190613e13565b60405180910390f35b34801561082457600080fd5b5061083f600480360381019061083a9190613db8565b611c0b565b60405161084c9190613e13565b60405180910390f35b34801561086157600080fd5b5061086a611c29565b6040516108779190613e3d565b60405180910390f35b34801561088c57600080fd5b50610895611c2f565b6040516108a29190613e3d565b60405180910390f35b3480156108b757600080fd5b506108d260048036038101906108cd9190614207565b611c35565b005b3480156108e057600080fd5b506108fb60048036038101906108f69190613c48565b611d75565b005b34801561090957600080fd5b50610912611e29565b60405161091f9190613e3d565b60405180910390f35b34801561093457600080fd5b5061094f600480360381019061094a9190614207565b611e2f565b005b34801561095d57600080fd5b50610966611f21565b6040516109739190613e3d565b60405180910390f35b34801561098857600080fd5b506109a3600480360381019061099e9190614247565b611f27565b6040516109b09190613e3d565b60405180910390f35b3480156109c557600080fd5b506109ce611fae565b6040516109db9190613e13565b60405180910390f35b3480156109f057600080fd5b506109f9611fc1565b604051610a069190613d71565b60405180910390f35b348015610a1b57600080fd5b50610a366004803603810190610a319190613e58565b611fe7565b005b348015610a4457600080fd5b50610a4d6120fa565b604051610a5a9190613e3d565b60405180910390f35b610a6b61215e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af1906142d3565b60405180910390fd5b81601a8190555080601b81905550601b54601a54610b189190614322565b60198190555060316019541115610b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5b906143c4565b60405180910390fd5b5050565b610b7061215e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf6906142d3565b60405180910390fd5b6001811115610c43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3a90614430565b60405180910390fd5b6001601060026101000a81548160ff02191690831515021790555060011515601360019054906101000a900460ff16151514610cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cab9061449c565b60405180910390fd5b6000601360016101000a81548160ff021916908315150217905550610cd881612166565b7fbd657b4e94b205761f2ca5be9988d7b243c828f625c0746c6581ec528e507c47601360019054906101000a900460ff16604051610d169190613e13565b60405180910390a150565b606060038054610d30906144eb565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5c906144eb565b8015610da95780601f10610d7e57610100808354040283529160200191610da9565b820191906000526020600020905b815481529060010190602001808311610d8c57829003601f168201915b5050505050905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610ded610de661215e565b8484612192565b6001905092915050565b60175481565b6000600254905090565b610e0f61215e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e95906142d3565b60405180910390fd5b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000610f0684848461235d565b610fc784610f1261215e565b610fc2856040518060600160405280602881526020016151d160289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f7861215e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131389092919063ffffffff16565b612192565b600190509392505050565b60006012905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006110aa61100e61215e565b846110a5856001600061101f61215e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461210090919063ffffffff16565b612192565b6001905092915050565b600e5481565b6110c261215e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611151576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611148906142d3565b60405180910390fd5b670de0b6b3a764000081611165919061451d565b600d8190555050565b600061117861215e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611207576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fe906142d3565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b61123161215e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b7906142d3565b60405180910390fd5b81601781905550806018819055506018546017546112de9190614322565b6016819055506031601654111561132a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611321906143c4565b60405180910390fd5b5050565b61133661215e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bc906142d3565b60405180910390fd5b60c8825110611409576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611400906145e9565b60405180910390fd5b60005b825181101561148657600083828151811061142a57611429614609565b5b602002602001015190506000670de0b6b3a764000084848151811061145257611451614609565b5b6020026020010151611464919061451d565b905061147133838361235d565b5050808061147e90614638565b91505061140c565b505050565b61149361215e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611522576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611519906142d3565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fc5fd566e89e92bb1398270e0c5464c0528285b46af4783edce649e17ac15a4e760405160405180910390a380600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61163861215e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116be906142d3565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fbb2b5baadb9845ce0d512fbe0c707880ed29239d8655db7b7885fb477e875a0860405160405180910390a380600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d5481565b601360009054906101000a900460ff1681565b6117a861215e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182e906142d3565b60405180910390fd5b60005b81518110156118c85760016011600084848151811061185c5761185b614609565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806118c090614638565b91505061183a565b5050565b601060029054906101000a900460ff1681565b60236020528060005260406000206000915054906101000a900460ff1681565b600061190961215e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198f906142d3565b60405180910390fd5b620186a060016119a6610dfd565b6119b0919061451d565b6119ba91906146b0565b8210156119fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f390614753565b60405180910390fd5b6103e86005611a09610dfd565b611a13919061451d565b611a1d91906146b0565b821115611a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a56906147e5565b60405180910390fd5b81600e8190555060019050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611aa8906144eb565b80601f0160208091040260200160405190810160405280929190818152602001828054611ad4906144eb565b8015611b215780601f10611af657610100808354040283529160200191611b21565b820191906000526020600020905b815481529060010190602001808311611b0457829003601f168201915b5050505050905090565b601060009054906101000a900460ff1681565b6000611c01611b4b61215e565b84611bfc856040518060600160405280602581526020016151f96025913960016000611b7561215e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131389092919063ffffffff16565b612192565b6001905092915050565b6000611c1f611c1861215e565b848461235d565b6001905092915050565b601b5481565b601a5481565b611c3d61215e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc3906142d3565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d699190613e13565b60405180910390a25050565b611d7d61215e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e03906142d3565b60405180910390fd5b670de0b6b3a764000081611e20919061451d565b600f8190555050565b60185481565b611e3761215e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebd906142d3565b60405180910390fd5b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60165481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601060019054906101000a900460ff1681565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611fef61215e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461207e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612075906142d3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e590614877565b60405180910390fd5b6120f78161319c565b50565b600f5481565b600080828461210f9190614322565b905083811015612154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214b906148e3565b60405180910390fd5b8091505092915050565b600033905090565b43601481905550806015819055506001601060016101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f990614975565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612272576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226990614a07565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123509190613e3d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c490614a99565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561243d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243490614b2b565b60405180910390fd5b60008114156124575761245283836000613262565b613133565b601060009054906101000a900460ff1615612cb557612474611a6f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124e257506124b2611a6f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561251b5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612567575073692108f04fda0dcdb213a48906474a88fc6b7dd373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125805750600a60149054906101000a900460ff16155b15612cb457600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156126305750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156126ac5761264c60155460145461210090919063ffffffff16565b43116126ab576001601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b601060019054906101000a900460ff166127a157602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127615750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6127a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279790614b97565b60405180910390fd5b5b601360009054906101000a900460ff161561296d576127be611a6f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156128475750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128a15750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561296c5743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291e90614c4f565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a6557600d54811115612a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ff90614ce1565b60405180910390fd5b600f54612a14836115e8565b82612a1f9190614322565b1115612a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5790614d4d565b60405180910390fd5b612cb3565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015612b0c5750602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b625750601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612bb85750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c0757600d54811115612c02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf990614ddf565b60405180910390fd5b612cb2565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612cb157600f54612c64836115e8565b82612c6f9190614322565b1115612cb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca790614d4d565b60405180910390fd5b5b5b5b5b5b6000612cc0306115e8565b90506000600e548210159050808015612ce55750601060029054906101000a900460ff165b8015612cfe5750600a60149054906101000a900460ff16155b8015612d585750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612dae5750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e045750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e48576001600a60146101000a81548160ff021916908315150217905550612e2c6134f7565b6000600a60146101000a81548160ff0219169083151502179055505b6000600a60149054906101000a900460ff16159050602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612efe5750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f0857600090505b6000811561312357600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16148015612f6f57506000601954115b1561300957612f9c6064612f8e6019548861370490919063ffffffff16565b61377f90919063ffffffff16565b9050601954601b5482612faf919061451d565b612fb991906146b0565b601d6000828254612fca9190614322565b92505081905550601954601a5482612fe2919061451d565b612fec91906146b0565b601c6000828254612ffd9190614322565b925050819055506130ff565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614801561306857506000601654115b156130fe5761309560646130876016548861370490919063ffffffff16565b61377f90919063ffffffff16565b9050601654601854826130a8919061451d565b6130b291906146b0565b601d60008282546130c39190614322565b92505081905550601654601754826130db919061451d565b6130e591906146b0565b601c60008282546130f69190614322565b925050819055505b5b600081111561311457613113873083613262565b5b80856131209190614dff565b94505b61312e878787613262565b505050505b505050565b6000838311158290613180576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131779190613d0e565b60405180910390fd5b506000838561318f9190614dff565b9050809150509392505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156132d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c990614a99565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613342576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161333990614b2b565b60405180910390fd5b61334d8383836137c9565b6133b8816040518060600160405280602681526020016151ab602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131389092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061344b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461210090919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516134ea9190613e3d565b60405180910390a3505050565b6000613502306115e8565b90506000601c54601d546135169190614322565b90506000808314806135285750600082145b1561353557505050613702565b6014600e54613544919061451d565b83111561355d576014600e5461355a919061451d565b92505b6000600283601d5486613570919061451d565b61357a91906146b0565b61358491906146b0565b9050600061359b82866137ce90919063ffffffff16565b905060004790506135ab82613818565b60006135c082476137ce90919063ffffffff16565b905060006135eb876135dd601c548561370490919063ffffffff16565b61377f90919063ffffffff16565b9050600081836135fb9190614dff565b90506000601d819055506000601c8190555060008611801561361d5750600081115b1561366a5761362c8682613a5b565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601d5460405161366193929190614e33565b60405180910390a15b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516136b090614e9b565b60006040518083038185875af1925050503d80600081146136ed576040519150601f19603f3d011682016040523d82523d6000602084013e6136f2565b606091505b5050809750505050505050505050505b565b6000808314156137175760009050613779565b60008284613725919061451d565b905082848261373491906146b0565b14613774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161376b90614f22565b60405180910390fd5b809150505b92915050565b60006137c183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b5b565b905092915050565b505050565b600061381083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613138565b905092915050565b6000600267ffffffffffffffff81111561383557613834613f14565b5b6040519080825280602002602001820160405280156138635781602001602082028036833780820191505090505b509050308160008151811061387b5761387a614609565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613922573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139469190614f57565b8160018151811061395a57613959614609565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506139c130600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612192565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a25959493929190615087565b600060405180830381600087803b158015613a3f57600080fd5b505af1158015613a53573d6000803e3d6000fd5b505050505050565b613a8830600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612192565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613b11969594939291906150e1565b60606040518083038185885af1158015613b2f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613b549190615157565b5050505050565b60008083118290613ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b999190613d0e565b60405180910390fd5b5060008385613bb191906146b0565b9050809150509392505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b613be581613bd2565b8114613bf057600080fd5b50565b600081359050613c0281613bdc565b92915050565b60008060408385031215613c1f57613c1e613bc8565b5b6000613c2d85828601613bf3565b9250506020613c3e85828601613bf3565b9150509250929050565b600060208284031215613c5e57613c5d613bc8565b5b6000613c6c84828501613bf3565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613caf578082015181840152602081019050613c94565b83811115613cbe576000848401525b50505050565b6000601f19601f8301169050919050565b6000613ce082613c75565b613cea8185613c80565b9350613cfa818560208601613c91565b613d0381613cc4565b840191505092915050565b60006020820190508181036000830152613d288184613cd5565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613d5b82613d30565b9050919050565b613d6b81613d50565b82525050565b6000602082019050613d866000830184613d62565b92915050565b613d9581613d50565b8114613da057600080fd5b50565b600081359050613db281613d8c565b92915050565b60008060408385031215613dcf57613dce613bc8565b5b6000613ddd85828601613da3565b9250506020613dee85828601613bf3565b9150509250929050565b60008115159050919050565b613e0d81613df8565b82525050565b6000602082019050613e286000830184613e04565b92915050565b613e3781613bd2565b82525050565b6000602082019050613e526000830184613e2e565b92915050565b600060208284031215613e6e57613e6d613bc8565b5b6000613e7c84828501613da3565b91505092915050565b600080600060608486031215613e9e57613e9d613bc8565b5b6000613eac86828701613da3565b9350506020613ebd86828701613da3565b9250506040613ece86828701613bf3565b9150509250925092565b600060ff82169050919050565b613eee81613ed8565b82525050565b6000602082019050613f096000830184613ee5565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613f4c82613cc4565b810181811067ffffffffffffffff82111715613f6b57613f6a613f14565b5b80604052505050565b6000613f7e613bbe565b9050613f8a8282613f43565b919050565b600067ffffffffffffffff821115613faa57613fa9613f14565b5b602082029050602081019050919050565b600080fd5b6000613fd3613fce84613f8f565b613f74565b90508083825260208201905060208402830185811115613ff657613ff5613fbb565b5b835b8181101561401f578061400b8882613da3565b845260208401935050602081019050613ff8565b5050509392505050565b600082601f83011261403e5761403d613f0f565b5b813561404e848260208601613fc0565b91505092915050565b600067ffffffffffffffff82111561407257614071613f14565b5b602082029050602081019050919050565b600061409661409184614057565b613f74565b905080838252602082019050602084028301858111156140b9576140b8613fbb565b5b835b818110156140e257806140ce8882613bf3565b8452602084019350506020810190506140bb565b5050509392505050565b600082601f83011261410157614100613f0f565b5b8135614111848260208601614083565b91505092915050565b6000806040838503121561413157614130613bc8565b5b600083013567ffffffffffffffff81111561414f5761414e613bcd565b5b61415b85828601614029565b925050602083013567ffffffffffffffff81111561417c5761417b613bcd565b5b614188858286016140ec565b9150509250929050565b6000602082840312156141a8576141a7613bc8565b5b600082013567ffffffffffffffff8111156141c6576141c5613bcd565b5b6141d284828501614029565b91505092915050565b6141e481613df8565b81146141ef57600080fd5b50565b600081359050614201816141db565b92915050565b6000806040838503121561421e5761421d613bc8565b5b600061422c85828601613da3565b925050602061423d858286016141f2565b9150509250929050565b6000806040838503121561425e5761425d613bc8565b5b600061426c85828601613da3565b925050602061427d85828601613da3565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142bd602083613c80565b91506142c882614287565b602082019050919050565b600060208201905081810360008301526142ec816142b0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061432d82613bd2565b915061433883613bd2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561436d5761436c6142f3565b5b828201905092915050565b7f4d757374206b656570206665657320617420343925206f72206c657373000000600082015250565b60006143ae601d83613c80565b91506143b982614378565b602082019050919050565b600060208201905081810360008301526143dd816143a1565b9050919050565b7f646f6e27742063617463682068756d616e730000000000000000000000000000600082015250565b600061441a601283613c80565b9150614425826143e4565b602082019050919050565b600060208201905081810360008301526144498161440d565b9050919050565b7f646f6e6500000000000000000000000000000000000000000000000000000000600082015250565b6000614486600483613c80565b915061449182614450565b602082019050919050565b600060208201905081810360008301526144b581614479565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061450357607f821691505b60208210811415614517576145166144bc565b5b50919050565b600061452882613bd2565b915061453383613bd2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561456c5761456b6142f3565b5b828202905092915050565b7f43616e206f6e6c792061697264726f70203230302077616c6c6574732070657260008201527f2074786e2064756520746f20676173206c696d69747300000000000000000000602082015250565b60006145d3603683613c80565b91506145de82614577565b604082019050919050565b60006020820190508181036000830152614602816145c6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061464382613bd2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614676576146756142f3565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006146bb82613bd2565b91506146c683613bd2565b9250826146d6576146d5614681565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061473d603583613c80565b9150614748826146e1565b604082019050919050565b6000602082019050818103600083015261476c81614730565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006147cf603483613c80565b91506147da82614773565b604082019050919050565b600060208201905081810360008301526147fe816147c2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614861602683613c80565b915061486c82614805565b604082019050919050565b6000602082019050818103600083015261489081614854565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006148cd601b83613c80565b91506148d882614897565b602082019050919050565b600060208201905081810360008301526148fc816148c0565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061495f602483613c80565b915061496a82614903565b604082019050919050565b6000602082019050818103600083015261498e81614952565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006149f1602283613c80565b91506149fc82614995565b604082019050919050565b60006020820190508181036000830152614a20816149e4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614a83602583613c80565b9150614a8e82614a27565b604082019050919050565b60006020820190508181036000830152614ab281614a76565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614b15602383613c80565b9150614b2082614ab9565b604082019050919050565b60006020820190508181036000830152614b4481614b08565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614b81601683613c80565b9150614b8c82614b4b565b602082019050919050565b60006020820190508181036000830152614bb081614b74565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614c39604983613c80565b9150614c4482614bb7565b606082019050919050565b60006020820190508181036000830152614c6881614c2c565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b6000614ccb602683613c80565b9150614cd682614c6f565b604082019050919050565b60006020820190508181036000830152614cfa81614cbe565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614d37601383613c80565b9150614d4282614d01565b602082019050919050565b60006020820190508181036000830152614d6681614d2a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b6000614dc9602783613c80565b9150614dd482614d6d565b604082019050919050565b60006020820190508181036000830152614df881614dbc565b9050919050565b6000614e0a82613bd2565b9150614e1583613bd2565b925082821015614e2857614e276142f3565b5b828203905092915050565b6000606082019050614e486000830186613e2e565b614e556020830185613e2e565b614e626040830184613e2e565b949350505050565b600081905092915050565b50565b6000614e85600083614e6a565b9150614e9082614e75565b600082019050919050565b6000614ea682614e78565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f0c602183613c80565b9150614f1782614eb0565b604082019050919050565b60006020820190508181036000830152614f3b81614eff565b9050919050565b600081519050614f5181613d8c565b92915050565b600060208284031215614f6d57614f6c613bc8565b5b6000614f7b84828501614f42565b91505092915050565b6000819050919050565b6000819050919050565b6000614fb3614fae614fa984614f84565b614f8e565b613bd2565b9050919050565b614fc381614f98565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ffe81613d50565b82525050565b60006150108383614ff5565b60208301905092915050565b6000602082019050919050565b600061503482614fc9565b61503e8185614fd4565b935061504983614fe5565b8060005b8381101561507a5781516150618882615004565b975061506c8361501c565b92505060018101905061504d565b5085935050505092915050565b600060a08201905061509c6000830188613e2e565b6150a96020830187614fba565b81810360408301526150bb8186615029565b90506150ca6060830185613d62565b6150d76080830184613e2e565b9695505050505050565b600060c0820190506150f66000830189613d62565b6151036020830188613e2e565b6151106040830187614fba565b61511d6060830186614fba565b61512a6080830185613d62565b61513760a0830184613e2e565b979650505050505050565b60008151905061515181613bdc565b92915050565b6000806000606084860312156151705761516f613bc8565b5b600061517e86828701615142565b935050602061518f86828701615142565b92505060406151a086828701615142565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203a0a2ebae8c76950239e83d706099b12765a48a63da53874b957bea5427b946c64736f6c634300080a0033

Deployed Bytecode Sourcemap

17894:13530:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23225:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30653:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5168:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18367:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6012:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19044:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5435:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30319:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6189:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5352:77;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18265:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6552:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18535:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22567:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21992:122;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22935:278;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30965:452;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23892:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19116:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5535:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23708:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18508:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18863:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30143:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18730:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19509:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22189:366;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10465:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5258:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18653:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6778:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5670:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19187:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19151:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23518:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22679:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19079:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22803:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19010:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5853:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18691:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18396:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10683:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18567:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23225:285;10602:12;:10;:12::i;:::-;10592:22;;:6;;;;;;;;;;;:22;;;10584:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23334:11:::1;23317:14;:28;;;;23369:7;23356:10;:20;;;;23420:10;;23403:14;;:27;;;;:::i;:::-;23387:13;:43;;;;23466:2;23449:13;;:19;;23441:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;23225:285:::0;;:::o;30653:304::-;10602:12;:10;:12::i;:::-;10592:22;;:6;;;;;;;;;;;:22;;;10584:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30747:1:::1;30734:9;:14;;30726:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;30790:4;30782:5;;:12;;;;;;;;;;;;;;;;;;30828:4;30813:19;;:11;;;;;;;;;;;:19;;;30805:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;30866:5;30852:11;;:19;;;;;;;;;;;;;;;;;;30882:22;30894:9;30882:11;:22::i;:::-;30920:29;30937:11;;;;;;;;;;;30920:29;;;;;;:::i;:::-;;;;;;;;30653:304:::0;:::o;5168:84::-;5222:13;5245:5;5238:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5168:84;:::o;18367:22::-;;;;;;;;;;;;;:::o;6012:169::-;6095:4;6112:39;6121:12;:10;:12::i;:::-;6135:7;6144:6;6112:8;:39::i;:::-;6169:4;6162:11;;6012:169;;;;:::o;19044:28::-;;;;:::o;5435:92::-;5496:7;5513:12;;5506:19;;5435:92;:::o;30319:89::-;10602:12;:10;:12::i;:::-;10592:22;;:6;;;;;;;;;;;:22;;;10584:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30395:5:::1;30380:4;:12;30385:6;30380:12;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;30319:89:::0;:::o;6189:355::-;6329:4;6346:36;6356:6;6364:9;6375:6;6346:9;:36::i;:::-;6393:121;6402:6;6410:12;:10;:12::i;:::-;6424:89;6462:6;6424:89;;;;;;;;;;;;;;;;;:11;:19;6436:6;6424:19;;;;;;;;;;;;;;;:33;6444:12;:10;:12::i;:::-;6424:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;6393:8;:121::i;:::-;6532:4;6525:11;;6189:355;;;;;:::o;5352:77::-;5410:5;5425:2;5418:9;;5352:77;:::o;18265:23::-;;;;;;;;;;;;;:::o;6552:218::-;6640:4;6657:83;6666:12;:10;:12::i;:::-;6680:7;6689:50;6728:10;6689:11;:25;6701:12;:10;:12::i;:::-;6689:25;;;;;;;;;;;;;;;:34;6715:7;6689:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;6657:8;:83::i;:::-;6758:4;6751:11;;6552:218;;;;:::o;18535:25::-;;;;:::o;22567:104::-;10602:12;:10;:12::i;:::-;10592:22;;:6;;;;;;;;;;;:22;;;10584:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22658:4:::1;22648:6;:15;;;;:::i;:::-;22640:5;:23;;;;22567:104:::0;:::o;21992:122::-;22046:4;10602:12;:10;:12::i;:::-;10592:22;;:6;;;;;;;;;;;:22;;;10584:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22079:5:::1;22062:14;;:22;;;;;;;;;;;;;;;;;;22102:4;22095:11;;21992:122:::0;:::o;22935:278::-;10602:12;:10;:12::i;:::-;10592:22;;:6;;;;;;;;;;;:22;;;10584:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23042:11:::1;23026:13;:27;;;;23076:7;23064:9;:19;;;;23125:9;;23109:13;;:25;;;;:::i;:::-;23094:12;:40;;;;23169:2;23153:12;;:18;;23145:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;22935:278:::0;;:::o;30965:452::-;10602:12;:10;:12::i;:::-;10592:22;;:6;;;;;;;;;;;:22;;;10584:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31103:3:::1;31079:14;:21;:27;31071:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;31202:9;31198:212;31221:14;:21;31217:1;:25;31198:212;;;31263:14;31280;31295:1;31280:17;;;;;;;;:::i;:::-;;;;;;;;31263:34;;31312:14;31342:4;31329:7;31337:1;31329:10;;;;;;;;:::i;:::-;;;;;;;;:17;;;;:::i;:::-;31312:34;;31361:37;31371:10;31383:6;31391;31361:9;:37::i;:::-;31248:162;;31244:3;;;;;:::i;:::-;;;;31198:212;;;;30965:452:::0;;:::o;23892:159::-;10602:12;:10;:12::i;:::-;10592:22;;:6;;;;;;;;;;;:22;;;10584:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24001:8:::1;;;;;;;;;;;23972:38;;23988:11;23972:38;;;;;;;;;;;;24032:11;24021:8;;:22;;;;;;;;;;;;;;;;;;23892:159:::0;:::o;19116:28::-;;;;:::o;5535:127::-;5609:7;5636:9;:18;5646:7;5636:18;;;;;;;;;;;;;;;;5629:25;;5535:127;;;:::o;23708:176::-;10602:12;:10;:12::i;:::-;10592:22;;:6;;;;;;;;;;;:22;;;10584:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23831:7:::1;;;;;;;;;;;23798:41;;23813:16;23798:41;;;;;;;;;;;;23860:16;23850:7;;:26;;;;;;;;;;;;;;;;;;23708:176:::0;:::o;18508:20::-;;;;:::o;18863:33::-;;;;;;;;;;;;;:::o;30143:167::-;10602:12;:10;:12::i;:::-;10592:22;;:6;;;;;;;;;;;:22;;;10584:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30217:9:::1;30212:91;30236:5;:12;30232:1;:16;30212:91;;;30287:4;30270;:14;30275:5;30281:1;30275:8;;;;;;;;:::i;:::-;;;;;;;;30270:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30250:3;;;;;:::i;:::-;;;;30212:91;;;;30143:167:::0;:::o;18730:25::-;;;;;;;;;;;;;:::o;19509:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;22189:366::-;22263:4;10602:12;:10;:12::i;:::-;10592:22;;:6;;;;;;;;;;;:22;;;10584:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22319:6:::1;22315:1;22299:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;22286:9;:39;;22278:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;22434:4;22430:1;22414:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;22401:9;:37;;22393:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;22518:9;22505:10;:22;;;;22544:4;22537:11;;22189:366:::0;;;:::o;10465:79::-;10503:7;10530:6;;;;;;;;;;;10523:13;;10465:79;:::o;5258:88::-;5314:13;5337:7;5330:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5258:88;:::o;18653:31::-;;;;;;;;;;;;;:::o;6778:269::-;6871:4;6888:129;6897:12;:10;:12::i;:::-;6911:7;6920:96;6959:15;6920:96;;;;;;;;;;;;;;;;;:11;:25;6932:12;:10;:12::i;:::-;6920:25;;;;;;;;;;;;;;;:34;6946:7;6920:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6888:8;:129::i;:::-;7035:4;7028:11;;6778:269;;;;:::o;5670:175::-;5756:4;5773:42;5783:12;:10;:12::i;:::-;5797:9;5808:6;5773:9;:42::i;:::-;5833:4;5826:11;;5670:175;;;;:::o;19187:25::-;;;;:::o;19151:29::-;;;;:::o;23518:182::-;10602:12;:10;:12::i;:::-;10592:22;;:6;;;;;;;;;;;:22;;;10584:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23634:8:::1;23603:19;:28;23623:7;23603:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23674:7;23658:34;;;23683:8;23658:34;;;;;;:::i;:::-;;;;;;;;23518:182:::0;;:::o;22679:112::-;10602:12;:10;:12::i;:::-;10592:22;;:6;;;;;;;;;;;:22;;;10584:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22778:4:::1;22768:6;:15;;;;:::i;:::-;22756:9;:27;;;;22679:112:::0;:::o;19079:24::-;;;;:::o;22803:120::-;10602:12;:10;:12::i;:::-;10592:22;;:6;;;;;;;;;;;:22;;;10584:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22911:4:::1;22884:16;:24;22901:6;22884:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;22803:120:::0;;:::o;19010:27::-;;;;:::o;5853:151::-;5942:7;5969:11;:18;5981:5;5969:18;;;;;;;;;;;;;;;:27;5988:7;5969:27;;;;;;;;;;;;;;;;5962:34;;5853:151;;;;:::o;18691:32::-;;;;;;;;;;;;;:::o;18396:23::-;;;;;;;;;;;;;:::o;10683:201::-;10602:12;:10;:12::i;:::-;10592:22;;:6;;;;;;;;;;;:22;;;10584:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10792:1:::1;10772:22;;:8;:22;;;;10764:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10848:28;10867:8;10848:18;:28::i;:::-;10683:201:::0;:::o;18567:24::-;;;;:::o;8992:179::-;9050:7;9070:9;9086:1;9082;:5;;;;:::i;:::-;9070:17;;9111:1;9106;:6;;9098:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;9162:1;9155:8;;;8992:179;;;;:::o;395:98::-;448:7;475:10;468:17;;395:98;:::o;30416:156::-;30489:12;30475:11;:26;;;;30525:9;30512:10;:22;;;;30560:4;30545:12;;:19;;;;;;;;;;;;;;;;;;30416:156;:::o;8448:380::-;8601:1;8584:19;;:5;:19;;;;8576:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8682:1;8663:21;;:7;:21;;;;8655:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8766:6;8736:11;:18;8748:5;8736:18;;;;;;;;;;;;;;;:27;8755:7;8736:27;;;;;;;;;;;;;;;:36;;;;8804:7;8788:32;;8797:5;8788:32;;;8813:6;8788:32;;;;;;:::i;:::-;;;;;;;;8448:380;;;:::o;24063:3735::-;24211:1;24195:18;;:4;:18;;;;24187:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24288:1;24274:16;;:2;:16;;;;24266:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24365:1;24355:6;:11;24352:92;;;24383:28;24399:4;24405:2;24409:1;24383:15;:28::i;:::-;24426:7;;24352:92;24467:12;;;;;;;;;;;24464:1839;;;24525:7;:5;:7::i;:::-;24517:15;;:4;:15;;;;:49;;;;;24559:7;:5;:7::i;:::-;24553:13;;:2;:13;;;;24517:49;:86;;;;;24601:1;24587:16;;:2;:16;;;;24517:86;:164;;;;;24638:42;24624:57;;:2;:57;;;;24517:164;:195;;;;;24703:9;;;;;;;;;;;24702:10;24517:195;24495:1797;;;24758:8;;;;;;;;;;;24750:16;;:4;:16;;;:45;;;;;24784:10;;;;;;;;;;;24770:25;;:2;:25;;;;24750:45;24746:252;;;24858:27;24874:10;;24858:11;;:15;;:27;;;;:::i;:::-;24842:12;:43;24838:115;;24925:4;24914;:8;24919:2;24914:8;;;;;;;;;;;;;;;;:15;;;;;;;;;;;;;;;;;;24838:115;24746:252;25022:12;;;;;;;;;;;25018:147;;25066:19;:25;25086:4;25066:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;25095:19;:23;25115:2;25095:23;;;;;;;;;;;;;;;;;;;;;;;;;25066:52;25058:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;25018:147;25189:14;;;;;;;;;;;25185:371;;;25237:7;:5;:7::i;:::-;25231:13;;:2;:13;;;;:42;;;;;25262:10;;;;;;;;;;;25248:25;;:2;:25;;;;25231:42;:69;;;;;25291:8;;;;;;;;;;;25277:23;;:2;:23;;;;25231:69;25227:310;;;25360:12;25336:10;:21;25347:9;25336:21;;;;;;;;;;;;;;;;:36;25328:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;25501:12;25477:10;:21;25488:9;25477:21;;;;;;;;;;;;;;;:36;;;;25227:310;25185:371;25633:8;;;;;;;;;;;25625:16;;:4;:16;;;25621:656;;;25688:5;;25678:6;:15;;25670:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;25797:9;;25780:13;25790:2;25780:9;:13::i;:::-;25771:6;:22;;;;:::i;:::-;:35;;25763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25621:656;;;25930:8;;;;;;;;;;;25924:14;;:2;:14;;;:41;;;;;25943:16;:22;25960:4;25943:22;;;;;;;;;;;;;;;;;;;;;;;;;25942:23;25924:41;:56;;;;;25970:4;:10;25975:4;25970:10;;;;;;;;;;;;;;;;;;;;;;;;;25969:11;25924:56;:69;;;;;25985:4;:8;25990:2;25985:8;;;;;;;;;;;;;;;;;;;;;;;;;25984:9;25924:69;25920:357;;;26040:5;;26030:6;:15;;26022:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25920:357;;;26146:16;:20;26163:2;26146:20;;;;;;;;;;;;;;;;;;;;;;;;;26142:135;;26224:9;;26207:13;26217:2;26207:9;:13::i;:::-;26198:6;:22;;;;:::i;:::-;:35;;26190:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26142:135;25920:357;25621:656;24495:1797;24464:1839;26317:28;26348:24;26366:4;26348:9;:24::i;:::-;26317:55;;26393:12;26432:10;;26408:20;:34;;26393:49;;26459:7;:16;;;;;26470:5;;;;;;;;;;;26459:16;:30;;;;;26480:9;;;;;;;;;;;26479:10;26459:30;:50;;;;;26501:8;;;;;;;;;;;26493:16;;:4;:16;;;;26459:50;:80;;;;;26514:19;:25;26534:4;26514:25;;;;;;;;;;;;;;;;;;;;;;;;;26513:26;26459:80;:108;;;;;26544:19;:23;26564:2;26544:23;;;;;;;;;;;;;;;;;;;;;;;;;26543:24;26459:108;26455:214;;;26596:4;26584:9;;:16;;;;;;;;;;;;;;;;;;26615:10;:8;:10::i;:::-;26652:5;26640:9;;:17;;;;;;;;;;;;;;;;;;26455:214;26681:12;26697:9;;;;;;;;;;;26696:10;26681:25;;26807:19;:25;26827:4;26807:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26836:19;:23;26856:2;26836:23;;;;;;;;;;;;;;;;;;;;;;;;;26807:52;26804:99;;;26886:5;26876:15;;26804:99;26923:12;26983:7;26980:765;;;27040:8;;;;;;;;;;;27034:14;;:2;:14;;;:35;;;;;27068:1;27052:13;;:17;27034:35;27030:546;;;27096:34;27126:3;27096:25;27107:13;;27096:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;27089:41;;27185:13;;27172:10;;27165:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;27149:12;;:49;;;;;;;:::i;:::-;;;;;;;;27258:13;;27241:14;;27234:4;:21;;;;:::i;:::-;:37;;;;:::i;:::-;27217:13;;:54;;;;;;;:::i;:::-;;;;;;;;27030:546;;;27340:8;;;;;;;;;;;27332:16;;:4;:16;;;:36;;;;;27367:1;27352:12;;:16;27332:36;27329:247;;;27393:33;27422:3;27393:24;27404:12;;27393:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;27386:40;;27477:12;;27465:9;;27458:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;27442:12;;:47;;;;;;;:::i;:::-;;;;;;;;27548:12;;27532:13;;27525:4;:20;;;;:::i;:::-;:35;;;;:::i;:::-;27508:13;;:52;;;;;;;:::i;:::-;;;;;;;;27329:247;27030:546;27614:1;27607:4;:8;27604:93;;;27639:42;27655:4;27669;27676;27639:15;:42::i;:::-;27604:93;27729:4;27719:14;;;;;:::i;:::-;;;26980:765;27757:33;27773:4;27779:2;27783:6;27757:15;:33::i;:::-;24176:3622;;;;24063:3735;;;;:::o;9323:190::-;9409:7;9442:1;9437;:6;;9445:12;9429:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9469:9;9485:1;9481;:5;;;;:::i;:::-;9469:17;;9504:1;9497:8;;;9323:190;;;;;:::o;10892:191::-;10966:16;10985:6;;;;;;;;;;;10966:25;;11011:8;11002:6;;:17;;;;;;;;;;;;;;;;;;11066:8;11035:40;;11056:8;11035:40;;;;;;;;;;;;10955:128;10892:191;:::o;7055:573::-;7213:1;7195:20;;:6;:20;;;;7187:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7297:1;7276:23;;:9;:23;;;;7268:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7352:47;7373:6;7381:9;7392:6;7352:20;:47::i;:::-;7432:71;7454:6;7432:71;;;;;;;;;;;;;;;;;:9;:17;7442:6;7432:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7412:9;:17;7422:6;7412:17;;;;;;;;;;;;;;;:91;;;;7537:32;7562:6;7537:9;:20;7547:9;7537:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7514:9;:20;7524:9;7514:20;;;;;;;;;;;;;;;:55;;;;7602:9;7585:35;;7594:6;7585:35;;;7613:6;7585:35;;;;;;:::i;:::-;;;;;;;;7055:573;;;:::o;28920:1215::-;28959:23;28985:24;29003:4;28985:9;:24::i;:::-;28959:50;;29020:25;29063:13;;29048:12;;:28;;;;:::i;:::-;29020:56;;29087:12;29142:1;29123:15;:20;:46;;;;29168:1;29147:17;:22;29123:46;29120:60;;;29172:7;;;;;29120:60;29226:2;29213:10;;:15;;;;:::i;:::-;29195;:33;29192:95;;;29273:2;29260:10;;:15;;;;:::i;:::-;29242:33;;29192:95;29307:17;29380:1;29360:17;29345:12;;29327:15;:30;;;;:::i;:::-;:50;;;;:::i;:::-;:54;;;;:::i;:::-;29307:74;;29392:26;29421:30;29441:9;29421:15;:19;;:30;;;;:::i;:::-;29392:59;;29462:25;29490:21;29462:49;;29522:36;29539:18;29522:16;:36::i;:::-;29570:18;29591:44;29617:17;29591:21;:25;;:44;;;;:::i;:::-;29570:65;;29646:21;29670:52;29704:17;29670:29;29685:13;;29670:10;:14;;:29;;;;:::i;:::-;:33;;:52;;;;:::i;:::-;29646:76;;29733:17;29766:13;29753:10;:26;;;;:::i;:::-;29733:46;;29815:1;29800:12;:16;;;;29843:1;29827:13;:17;;;;29880:1;29868:9;:13;:30;;;;;29897:1;29885:9;:13;29868:30;29865:174;;;29914:34;29927:9;29938;29914:12;:34::i;:::-;29968:59;29983:18;30003:9;30014:12;;29968:59;;;;;;;;:::i;:::-;;;;;;;;29865:174;30080:7;;;;;;;;;;;30072:21;;30101;30072:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30059:68;;;;;28948:1187;;;;;;;;;28920:1215;:::o;9521:246::-;9579:7;9608:1;9603;:6;9599:47;;;9633:1;9626:8;;;;9599:47;9656:9;9672:1;9668;:5;;;;:::i;:::-;9656:17;;9701:1;9696;9692;:5;;;;:::i;:::-;:10;9684:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9758:1;9751:8;;;9521:246;;;;;:::o;9775:132::-;9833:7;9860:39;9864:1;9867;9860:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9853:46;;9775:132;;;;:::o;8836:125::-;;;;:::o;9179:136::-;9237:7;9264:43;9268:1;9271;9264:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;9257:50;;9179:136;;;;:::o;27806:581::-;27929:21;27967:1;27953:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27929:40;;27998:4;27980;27985:1;27980:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28024:10;;;;;;;;;;;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28014:4;28019:1;28014:7;;;;;;;;:::i;:::-;;;;;;;:27;;;;;;;;;;;28054:57;28071:4;28086:10;;;;;;;;;;;28099:11;28054:8;:57::i;:::-;28150:10;;;;;;;;;;;:61;;;28226:11;28252:1;28296:4;28323;28343:15;28150:219;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27861:526;27806:581;:::o;28399:513::-;28547:57;28564:4;28579:10;;;;;;;;;;;28592:11;28547:8;:57::i;:::-;28647:10;;;;;;;;;;;:26;;;28681:9;28714:4;28734:11;28760:1;28803;28854:8;;;;;;;;;;;28878:15;28647:257;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28399:513;;:::o;9915:189::-;10001:7;10033:1;10029;:5;10036:12;10021:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;10060:9;10076:1;10072;:5;;;;:::i;:::-;10060:17;;10095:1;10088:8;;;9915:189;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:329::-;1229:6;1278:2;1266:9;1257:7;1253:23;1249:32;1246:119;;;1284:79;;:::i;:::-;1246:119;1404:1;1429:53;1474:7;1465:6;1454:9;1450:22;1429:53;:::i;:::-;1419:63;;1375:117;1170:329;;;;:::o;1505:99::-;1557:6;1591:5;1585:12;1575:22;;1505:99;;;:::o;1610:169::-;1694:11;1728:6;1723:3;1716:19;1768:4;1763:3;1759:14;1744:29;;1610:169;;;;:::o;1785:307::-;1853:1;1863:113;1877:6;1874:1;1871:13;1863:113;;;1962:1;1957:3;1953:11;1947:18;1943:1;1938:3;1934:11;1927:39;1899:2;1896:1;1892:10;1887:15;;1863:113;;;1994:6;1991:1;1988:13;1985:101;;;2074:1;2065:6;2060:3;2056:16;2049:27;1985:101;1834:258;1785:307;;;:::o;2098:102::-;2139:6;2190:2;2186:7;2181:2;2174:5;2170:14;2166:28;2156:38;;2098:102;;;:::o;2206:364::-;2294:3;2322:39;2355:5;2322:39;:::i;:::-;2377:71;2441:6;2436:3;2377:71;:::i;:::-;2370:78;;2457:52;2502:6;2497:3;2490:4;2483:5;2479:16;2457:52;:::i;:::-;2534:29;2556:6;2534:29;:::i;:::-;2529:3;2525:39;2518:46;;2298:272;2206:364;;;;:::o;2576:313::-;2689:4;2727:2;2716:9;2712:18;2704:26;;2776:9;2770:4;2766:20;2762:1;2751:9;2747:17;2740:47;2804:78;2877:4;2868:6;2804:78;:::i;:::-;2796:86;;2576:313;;;;:::o;2895:126::-;2932:7;2972:42;2965:5;2961:54;2950:65;;2895:126;;;:::o;3027:96::-;3064:7;3093:24;3111:5;3093:24;:::i;:::-;3082:35;;3027:96;;;:::o;3129:118::-;3216:24;3234:5;3216:24;:::i;:::-;3211:3;3204:37;3129:118;;:::o;3253:222::-;3346:4;3384:2;3373:9;3369:18;3361:26;;3397:71;3465:1;3454:9;3450:17;3441:6;3397:71;:::i;:::-;3253:222;;;;:::o;3481:122::-;3554:24;3572:5;3554:24;:::i;:::-;3547:5;3544:35;3534:63;;3593:1;3590;3583:12;3534:63;3481:122;:::o;3609:139::-;3655:5;3693:6;3680:20;3671:29;;3709:33;3736:5;3709:33;:::i;:::-;3609:139;;;;:::o;3754:474::-;3822:6;3830;3879:2;3867:9;3858:7;3854:23;3850:32;3847:119;;;3885:79;;:::i;:::-;3847:119;4005:1;4030:53;4075:7;4066:6;4055:9;4051:22;4030:53;:::i;:::-;4020:63;;3976:117;4132:2;4158:53;4203:7;4194:6;4183:9;4179:22;4158:53;:::i;:::-;4148:63;;4103:118;3754:474;;;;;:::o;4234:90::-;4268:7;4311:5;4304:13;4297:21;4286:32;;4234:90;;;:::o;4330:109::-;4411:21;4426:5;4411:21;:::i;:::-;4406:3;4399:34;4330:109;;:::o;4445:210::-;4532:4;4570:2;4559:9;4555:18;4547:26;;4583:65;4645:1;4634:9;4630:17;4621:6;4583:65;:::i;:::-;4445:210;;;;:::o;4661:118::-;4748:24;4766:5;4748:24;:::i;:::-;4743:3;4736:37;4661:118;;:::o;4785:222::-;4878:4;4916:2;4905:9;4901:18;4893:26;;4929:71;4997:1;4986:9;4982:17;4973:6;4929:71;:::i;:::-;4785:222;;;;:::o;5013:329::-;5072:6;5121:2;5109:9;5100:7;5096:23;5092:32;5089:119;;;5127:79;;:::i;:::-;5089:119;5247:1;5272:53;5317:7;5308:6;5297:9;5293:22;5272:53;:::i;:::-;5262:63;;5218:117;5013:329;;;;:::o;5348:619::-;5425:6;5433;5441;5490:2;5478:9;5469:7;5465:23;5461:32;5458:119;;;5496:79;;:::i;:::-;5458:119;5616:1;5641:53;5686:7;5677:6;5666:9;5662:22;5641:53;:::i;:::-;5631:63;;5587:117;5743:2;5769:53;5814:7;5805:6;5794:9;5790:22;5769:53;:::i;:::-;5759:63;;5714:118;5871:2;5897:53;5942:7;5933:6;5922:9;5918:22;5897:53;:::i;:::-;5887:63;;5842:118;5348:619;;;;;:::o;5973:86::-;6008:7;6048:4;6041:5;6037:16;6026:27;;5973:86;;;:::o;6065:112::-;6148:22;6164:5;6148:22;:::i;:::-;6143:3;6136:35;6065:112;;:::o;6183:214::-;6272:4;6310:2;6299:9;6295:18;6287:26;;6323:67;6387:1;6376:9;6372:17;6363:6;6323:67;:::i;:::-;6183:214;;;;:::o;6403:117::-;6512:1;6509;6502:12;6526:180;6574:77;6571:1;6564:88;6671:4;6668:1;6661:15;6695:4;6692:1;6685:15;6712:281;6795:27;6817:4;6795:27;:::i;:::-;6787:6;6783:40;6925:6;6913:10;6910:22;6889:18;6877:10;6874:34;6871:62;6868:88;;;6936:18;;:::i;:::-;6868:88;6976:10;6972:2;6965:22;6755:238;6712:281;;:::o;6999:129::-;7033:6;7060:20;;:::i;:::-;7050:30;;7089:33;7117:4;7109:6;7089:33;:::i;:::-;6999:129;;;:::o;7134:311::-;7211:4;7301:18;7293:6;7290:30;7287:56;;;7323:18;;:::i;:::-;7287:56;7373:4;7365:6;7361:17;7353:25;;7433:4;7427;7423:15;7415:23;;7134:311;;;:::o;7451:117::-;7560:1;7557;7550:12;7591:710;7687:5;7712:81;7728:64;7785:6;7728:64;:::i;:::-;7712:81;:::i;:::-;7703:90;;7813:5;7842:6;7835:5;7828:21;7876:4;7869:5;7865:16;7858:23;;7929:4;7921:6;7917:17;7909:6;7905:30;7958:3;7950:6;7947:15;7944:122;;;7977:79;;:::i;:::-;7944:122;8092:6;8075:220;8109:6;8104:3;8101:15;8075:220;;;8184:3;8213:37;8246:3;8234:10;8213:37;:::i;:::-;8208:3;8201:50;8280:4;8275:3;8271:14;8264:21;;8151:144;8135:4;8130:3;8126:14;8119:21;;8075:220;;;8079:21;7693:608;;7591:710;;;;;:::o;8324:370::-;8395:5;8444:3;8437:4;8429:6;8425:17;8421:27;8411:122;;8452:79;;:::i;:::-;8411:122;8569:6;8556:20;8594:94;8684:3;8676:6;8669:4;8661:6;8657:17;8594:94;:::i;:::-;8585:103;;8401:293;8324:370;;;;:::o;8700:311::-;8777:4;8867:18;8859:6;8856:30;8853:56;;;8889:18;;:::i;:::-;8853:56;8939:4;8931:6;8927:17;8919:25;;8999:4;8993;8989:15;8981:23;;8700:311;;;:::o;9034:710::-;9130:5;9155:81;9171:64;9228:6;9171:64;:::i;:::-;9155:81;:::i;:::-;9146:90;;9256:5;9285:6;9278:5;9271:21;9319:4;9312:5;9308:16;9301:23;;9372:4;9364:6;9360:17;9352:6;9348:30;9401:3;9393:6;9390:15;9387:122;;;9420:79;;:::i;:::-;9387:122;9535:6;9518:220;9552:6;9547:3;9544:15;9518:220;;;9627:3;9656:37;9689:3;9677:10;9656:37;:::i;:::-;9651:3;9644:50;9723:4;9718:3;9714:14;9707:21;;9594:144;9578:4;9573:3;9569:14;9562:21;;9518:220;;;9522:21;9136:608;;9034:710;;;;;:::o;9767:370::-;9838:5;9887:3;9880:4;9872:6;9868:17;9864:27;9854:122;;9895:79;;:::i;:::-;9854:122;10012:6;9999:20;10037:94;10127:3;10119:6;10112:4;10104:6;10100:17;10037:94;:::i;:::-;10028:103;;9844:293;9767:370;;;;:::o;10143:894::-;10261:6;10269;10318:2;10306:9;10297:7;10293:23;10289:32;10286:119;;;10324:79;;:::i;:::-;10286:119;10472:1;10461:9;10457:17;10444:31;10502:18;10494:6;10491:30;10488:117;;;10524:79;;:::i;:::-;10488:117;10629:78;10699:7;10690:6;10679:9;10675:22;10629:78;:::i;:::-;10619:88;;10415:302;10784:2;10773:9;10769:18;10756:32;10815:18;10807:6;10804:30;10801:117;;;10837:79;;:::i;:::-;10801:117;10942:78;11012:7;11003:6;10992:9;10988:22;10942:78;:::i;:::-;10932:88;;10727:303;10143:894;;;;;:::o;11043:539::-;11127:6;11176:2;11164:9;11155:7;11151:23;11147:32;11144:119;;;11182:79;;:::i;:::-;11144:119;11330:1;11319:9;11315:17;11302:31;11360:18;11352:6;11349:30;11346:117;;;11382:79;;:::i;:::-;11346:117;11487:78;11557:7;11548:6;11537:9;11533:22;11487:78;:::i;:::-;11477:88;;11273:302;11043:539;;;;:::o;11588:116::-;11658:21;11673:5;11658:21;:::i;:::-;11651:5;11648:32;11638:60;;11694:1;11691;11684:12;11638:60;11588:116;:::o;11710:133::-;11753:5;11791:6;11778:20;11769:29;;11807:30;11831:5;11807:30;:::i;:::-;11710:133;;;;:::o;11849:468::-;11914:6;11922;11971:2;11959:9;11950:7;11946:23;11942:32;11939:119;;;11977:79;;:::i;:::-;11939:119;12097:1;12122:53;12167:7;12158:6;12147:9;12143:22;12122:53;:::i;:::-;12112:63;;12068:117;12224:2;12250:50;12292:7;12283:6;12272:9;12268:22;12250:50;:::i;:::-;12240:60;;12195:115;11849:468;;;;;:::o;12323:474::-;12391:6;12399;12448:2;12436:9;12427:7;12423:23;12419:32;12416:119;;;12454:79;;:::i;:::-;12416:119;12574:1;12599:53;12644:7;12635:6;12624:9;12620:22;12599:53;:::i;:::-;12589:63;;12545:117;12701:2;12727:53;12772:7;12763:6;12752:9;12748:22;12727:53;:::i;:::-;12717:63;;12672:118;12323:474;;;;;:::o;12803:182::-;12943:34;12939:1;12931:6;12927:14;12920:58;12803:182;:::o;12991:366::-;13133:3;13154:67;13218:2;13213:3;13154:67;:::i;:::-;13147:74;;13230:93;13319:3;13230:93;:::i;:::-;13348:2;13343:3;13339:12;13332:19;;12991:366;;;:::o;13363:419::-;13529:4;13567:2;13556:9;13552:18;13544:26;;13616:9;13610:4;13606:20;13602:1;13591:9;13587:17;13580:47;13644:131;13770:4;13644:131;:::i;:::-;13636:139;;13363:419;;;:::o;13788:180::-;13836:77;13833:1;13826:88;13933:4;13930:1;13923:15;13957:4;13954:1;13947:15;13974:305;14014:3;14033:20;14051:1;14033:20;:::i;:::-;14028:25;;14067:20;14085:1;14067:20;:::i;:::-;14062:25;;14221:1;14153:66;14149:74;14146:1;14143:81;14140:107;;;14227:18;;:::i;:::-;14140:107;14271:1;14268;14264:9;14257:16;;13974:305;;;;:::o;14285:179::-;14425:31;14421:1;14413:6;14409:14;14402:55;14285:179;:::o;14470:366::-;14612:3;14633:67;14697:2;14692:3;14633:67;:::i;:::-;14626:74;;14709:93;14798:3;14709:93;:::i;:::-;14827:2;14822:3;14818:12;14811:19;;14470:366;;;:::o;14842:419::-;15008:4;15046:2;15035:9;15031:18;15023:26;;15095:9;15089:4;15085:20;15081:1;15070:9;15066:17;15059:47;15123:131;15249:4;15123:131;:::i;:::-;15115:139;;14842:419;;;:::o;15267:168::-;15407:20;15403:1;15395:6;15391:14;15384:44;15267:168;:::o;15441:366::-;15583:3;15604:67;15668:2;15663:3;15604:67;:::i;:::-;15597:74;;15680:93;15769:3;15680:93;:::i;:::-;15798:2;15793:3;15789:12;15782:19;;15441:366;;;:::o;15813:419::-;15979:4;16017:2;16006:9;16002:18;15994:26;;16066:9;16060:4;16056:20;16052:1;16041:9;16037:17;16030:47;16094:131;16220:4;16094:131;:::i;:::-;16086:139;;15813:419;;;:::o;16238:154::-;16378:6;16374:1;16366:6;16362:14;16355:30;16238:154;:::o;16398:365::-;16540:3;16561:66;16625:1;16620:3;16561:66;:::i;:::-;16554:73;;16636:93;16725:3;16636:93;:::i;:::-;16754:2;16749:3;16745:12;16738:19;;16398:365;;;:::o;16769:419::-;16935:4;16973:2;16962:9;16958:18;16950:26;;17022:9;17016:4;17012:20;17008:1;16997:9;16993:17;16986:47;17050:131;17176:4;17050:131;:::i;:::-;17042:139;;16769:419;;;:::o;17194:180::-;17242:77;17239:1;17232:88;17339:4;17336:1;17329:15;17363:4;17360:1;17353:15;17380:320;17424:6;17461:1;17455:4;17451:12;17441:22;;17508:1;17502:4;17498:12;17529:18;17519:81;;17585:4;17577:6;17573:17;17563:27;;17519:81;17647:2;17639:6;17636:14;17616:18;17613:38;17610:84;;;17666:18;;:::i;:::-;17610:84;17431:269;17380:320;;;:::o;17706:348::-;17746:7;17769:20;17787:1;17769:20;:::i;:::-;17764:25;;17803:20;17821:1;17803:20;:::i;:::-;17798:25;;17991:1;17923:66;17919:74;17916:1;17913:81;17908:1;17901:9;17894:17;17890:105;17887:131;;;17998:18;;:::i;:::-;17887:131;18046:1;18043;18039:9;18028:20;;17706:348;;;;:::o;18060:241::-;18200:34;18196:1;18188:6;18184:14;18177:58;18269:24;18264:2;18256:6;18252:15;18245:49;18060:241;:::o;18307:366::-;18449:3;18470:67;18534:2;18529:3;18470:67;:::i;:::-;18463:74;;18546:93;18635:3;18546:93;:::i;:::-;18664:2;18659:3;18655:12;18648:19;;18307:366;;;:::o;18679:419::-;18845:4;18883:2;18872:9;18868:18;18860:26;;18932:9;18926:4;18922:20;18918:1;18907:9;18903:17;18896:47;18960:131;19086:4;18960:131;:::i;:::-;18952:139;;18679:419;;;:::o;19104:180::-;19152:77;19149:1;19142:88;19249:4;19246:1;19239:15;19273:4;19270:1;19263:15;19290:233;19329:3;19352:24;19370:5;19352:24;:::i;:::-;19343:33;;19398:66;19391:5;19388:77;19385:103;;;19468:18;;:::i;:::-;19385:103;19515:1;19508:5;19504:13;19497:20;;19290:233;;;:::o;19529:180::-;19577:77;19574:1;19567:88;19674:4;19671:1;19664:15;19698:4;19695:1;19688:15;19715:185;19755:1;19772:20;19790:1;19772:20;:::i;:::-;19767:25;;19806:20;19824:1;19806:20;:::i;:::-;19801:25;;19845:1;19835:35;;19850:18;;:::i;:::-;19835:35;19892:1;19889;19885:9;19880:14;;19715:185;;;;:::o;19906:240::-;20046:34;20042:1;20034:6;20030:14;20023:58;20115:23;20110:2;20102:6;20098:15;20091:48;19906:240;:::o;20152:366::-;20294:3;20315:67;20379:2;20374:3;20315:67;:::i;:::-;20308:74;;20391:93;20480:3;20391:93;:::i;:::-;20509:2;20504:3;20500:12;20493:19;;20152:366;;;:::o;20524:419::-;20690:4;20728:2;20717:9;20713:18;20705:26;;20777:9;20771:4;20767:20;20763:1;20752:9;20748:17;20741:47;20805:131;20931:4;20805:131;:::i;:::-;20797:139;;20524:419;;;:::o;20949:239::-;21089:34;21085:1;21077:6;21073:14;21066:58;21158:22;21153:2;21145:6;21141:15;21134:47;20949:239;:::o;21194:366::-;21336:3;21357:67;21421:2;21416:3;21357:67;:::i;:::-;21350:74;;21433:93;21522:3;21433:93;:::i;:::-;21551:2;21546:3;21542:12;21535:19;;21194:366;;;:::o;21566:419::-;21732:4;21770:2;21759:9;21755:18;21747:26;;21819:9;21813:4;21809:20;21805:1;21794:9;21790:17;21783:47;21847:131;21973:4;21847:131;:::i;:::-;21839:139;;21566:419;;;:::o;21991:225::-;22131:34;22127:1;22119:6;22115:14;22108:58;22200:8;22195:2;22187:6;22183:15;22176:33;21991:225;:::o;22222:366::-;22364:3;22385:67;22449:2;22444:3;22385:67;:::i;:::-;22378:74;;22461:93;22550:3;22461:93;:::i;:::-;22579:2;22574:3;22570:12;22563:19;;22222:366;;;:::o;22594:419::-;22760:4;22798:2;22787:9;22783:18;22775:26;;22847:9;22841:4;22837:20;22833:1;22822:9;22818:17;22811:47;22875:131;23001:4;22875:131;:::i;:::-;22867:139;;22594:419;;;:::o;23019:177::-;23159:29;23155:1;23147:6;23143:14;23136:53;23019:177;:::o;23202:366::-;23344:3;23365:67;23429:2;23424:3;23365:67;:::i;:::-;23358:74;;23441:93;23530:3;23441:93;:::i;:::-;23559:2;23554:3;23550:12;23543:19;;23202:366;;;:::o;23574:419::-;23740:4;23778:2;23767:9;23763:18;23755:26;;23827:9;23821:4;23817:20;23813:1;23802:9;23798:17;23791:47;23855:131;23981:4;23855:131;:::i;:::-;23847:139;;23574:419;;;:::o;23999:223::-;24139:34;24135:1;24127:6;24123:14;24116:58;24208:6;24203:2;24195:6;24191:15;24184:31;23999:223;:::o;24228:366::-;24370:3;24391:67;24455:2;24450:3;24391:67;:::i;:::-;24384:74;;24467:93;24556:3;24467:93;:::i;:::-;24585:2;24580:3;24576:12;24569:19;;24228:366;;;:::o;24600:419::-;24766:4;24804:2;24793:9;24789:18;24781:26;;24853:9;24847:4;24843:20;24839:1;24828:9;24824:17;24817:47;24881:131;25007:4;24881:131;:::i;:::-;24873:139;;24600:419;;;:::o;25025:221::-;25165:34;25161:1;25153:6;25149:14;25142:58;25234:4;25229:2;25221:6;25217:15;25210:29;25025:221;:::o;25252:366::-;25394:3;25415:67;25479:2;25474:3;25415:67;:::i;:::-;25408:74;;25491:93;25580:3;25491:93;:::i;:::-;25609:2;25604:3;25600:12;25593:19;;25252:366;;;:::o;25624:419::-;25790:4;25828:2;25817:9;25813:18;25805:26;;25877:9;25871:4;25867:20;25863:1;25852:9;25848:17;25841:47;25905:131;26031:4;25905:131;:::i;:::-;25897:139;;25624:419;;;:::o;26049:224::-;26189:34;26185:1;26177:6;26173:14;26166:58;26258:7;26253:2;26245:6;26241:15;26234:32;26049:224;:::o;26279:366::-;26421:3;26442:67;26506:2;26501:3;26442:67;:::i;:::-;26435:74;;26518:93;26607:3;26518:93;:::i;:::-;26636:2;26631:3;26627:12;26620:19;;26279:366;;;:::o;26651:419::-;26817:4;26855:2;26844:9;26840:18;26832:26;;26904:9;26898:4;26894:20;26890:1;26879:9;26875:17;26868:47;26932:131;27058:4;26932:131;:::i;:::-;26924:139;;26651:419;;;:::o;27076:222::-;27216:34;27212:1;27204:6;27200:14;27193:58;27285:5;27280:2;27272:6;27268:15;27261:30;27076:222;:::o;27304:366::-;27446:3;27467:67;27531:2;27526:3;27467:67;:::i;:::-;27460:74;;27543:93;27632:3;27543:93;:::i;:::-;27661:2;27656:3;27652:12;27645:19;;27304:366;;;:::o;27676:419::-;27842:4;27880:2;27869:9;27865:18;27857:26;;27929:9;27923:4;27919:20;27915:1;27904:9;27900:17;27893:47;27957:131;28083:4;27957:131;:::i;:::-;27949:139;;27676:419;;;:::o;28101:172::-;28241:24;28237:1;28229:6;28225:14;28218:48;28101:172;:::o;28279:366::-;28421:3;28442:67;28506:2;28501:3;28442:67;:::i;:::-;28435:74;;28518:93;28607:3;28518:93;:::i;:::-;28636:2;28631:3;28627:12;28620:19;;28279:366;;;:::o;28651:419::-;28817:4;28855:2;28844:9;28840:18;28832:26;;28904:9;28898:4;28894:20;28890:1;28879:9;28875:17;28868:47;28932:131;29058:4;28932:131;:::i;:::-;28924:139;;28651:419;;;:::o;29076:297::-;29216:34;29212:1;29204:6;29200:14;29193:58;29285:34;29280:2;29272:6;29268:15;29261:59;29354:11;29349:2;29341:6;29337:15;29330:36;29076:297;:::o;29379:366::-;29521:3;29542:67;29606:2;29601:3;29542:67;:::i;:::-;29535:74;;29618:93;29707:3;29618:93;:::i;:::-;29736:2;29731:3;29727:12;29720:19;;29379:366;;;:::o;29751:419::-;29917:4;29955:2;29944:9;29940:18;29932:26;;30004:9;29998:4;29994:20;29990:1;29979:9;29975:17;29968:47;30032:131;30158:4;30032:131;:::i;:::-;30024:139;;29751:419;;;:::o;30176:225::-;30316:34;30312:1;30304:6;30300:14;30293:58;30385:8;30380:2;30372:6;30368:15;30361:33;30176:225;:::o;30407:366::-;30549:3;30570:67;30634:2;30629:3;30570:67;:::i;:::-;30563:74;;30646:93;30735:3;30646:93;:::i;:::-;30764:2;30759:3;30755:12;30748:19;;30407:366;;;:::o;30779:419::-;30945:4;30983:2;30972:9;30968:18;30960:26;;31032:9;31026:4;31022:20;31018:1;31007:9;31003:17;30996:47;31060:131;31186:4;31060:131;:::i;:::-;31052:139;;30779:419;;;:::o;31204:169::-;31344:21;31340:1;31332:6;31328:14;31321:45;31204:169;:::o;31379:366::-;31521:3;31542:67;31606:2;31601:3;31542:67;:::i;:::-;31535:74;;31618:93;31707:3;31618:93;:::i;:::-;31736:2;31731:3;31727:12;31720:19;;31379:366;;;:::o;31751:419::-;31917:4;31955:2;31944:9;31940:18;31932:26;;32004:9;31998:4;31994:20;31990:1;31979:9;31975:17;31968:47;32032:131;32158:4;32032:131;:::i;:::-;32024:139;;31751:419;;;:::o;32176:226::-;32316:34;32312:1;32304:6;32300:14;32293:58;32385:9;32380:2;32372:6;32368:15;32361:34;32176:226;:::o;32408:366::-;32550:3;32571:67;32635:2;32630:3;32571:67;:::i;:::-;32564:74;;32647:93;32736:3;32647:93;:::i;:::-;32765:2;32760:3;32756:12;32749:19;;32408:366;;;:::o;32780:419::-;32946:4;32984:2;32973:9;32969:18;32961:26;;33033:9;33027:4;33023:20;33019:1;33008:9;33004:17;32997:47;33061:131;33187:4;33061:131;:::i;:::-;33053:139;;32780:419;;;:::o;33205:191::-;33245:4;33265:20;33283:1;33265:20;:::i;:::-;33260:25;;33299:20;33317:1;33299:20;:::i;:::-;33294:25;;33338:1;33335;33332:8;33329:34;;;33343:18;;:::i;:::-;33329:34;33388:1;33385;33381:9;33373:17;;33205:191;;;;:::o;33402:442::-;33551:4;33589:2;33578:9;33574:18;33566:26;;33602:71;33670:1;33659:9;33655:17;33646:6;33602:71;:::i;:::-;33683:72;33751:2;33740:9;33736:18;33727:6;33683:72;:::i;:::-;33765;33833:2;33822:9;33818:18;33809:6;33765:72;:::i;:::-;33402:442;;;;;;:::o;33850:147::-;33951:11;33988:3;33973:18;;33850:147;;;;:::o;34003:114::-;;:::o;34123:398::-;34282:3;34303:83;34384:1;34379:3;34303:83;:::i;:::-;34296:90;;34395:93;34484:3;34395:93;:::i;:::-;34513:1;34508:3;34504:11;34497:18;;34123:398;;;:::o;34527:379::-;34711:3;34733:147;34876:3;34733:147;:::i;:::-;34726:154;;34897:3;34890:10;;34527:379;;;:::o;34912:220::-;35052:34;35048:1;35040:6;35036:14;35029:58;35121:3;35116:2;35108:6;35104:15;35097:28;34912:220;:::o;35138:366::-;35280:3;35301:67;35365:2;35360:3;35301:67;:::i;:::-;35294:74;;35377:93;35466:3;35377:93;:::i;:::-;35495:2;35490:3;35486:12;35479:19;;35138:366;;;:::o;35510:419::-;35676:4;35714:2;35703:9;35699:18;35691:26;;35763:9;35757:4;35753:20;35749:1;35738:9;35734:17;35727:47;35791:131;35917:4;35791:131;:::i;:::-;35783:139;;35510:419;;;:::o;35935:143::-;35992:5;36023:6;36017:13;36008:22;;36039:33;36066:5;36039:33;:::i;:::-;35935:143;;;;:::o;36084:351::-;36154:6;36203:2;36191:9;36182:7;36178:23;36174:32;36171:119;;;36209:79;;:::i;:::-;36171:119;36329:1;36354:64;36410:7;36401:6;36390:9;36386:22;36354:64;:::i;:::-;36344:74;;36300:128;36084:351;;;;:::o;36441:85::-;36486:7;36515:5;36504:16;;36441:85;;;:::o;36532:60::-;36560:3;36581:5;36574:12;;36532:60;;;:::o;36598:158::-;36656:9;36689:61;36707:42;36716:32;36742:5;36716:32;:::i;:::-;36707:42;:::i;:::-;36689:61;:::i;:::-;36676:74;;36598:158;;;:::o;36762:147::-;36857:45;36896:5;36857:45;:::i;:::-;36852:3;36845:58;36762:147;;:::o;36915:114::-;36982:6;37016:5;37010:12;37000:22;;36915:114;;;:::o;37035:184::-;37134:11;37168:6;37163:3;37156:19;37208:4;37203:3;37199:14;37184:29;;37035:184;;;;:::o;37225:132::-;37292:4;37315:3;37307:11;;37345:4;37340:3;37336:14;37328:22;;37225:132;;;:::o;37363:108::-;37440:24;37458:5;37440:24;:::i;:::-;37435:3;37428:37;37363:108;;:::o;37477:179::-;37546:10;37567:46;37609:3;37601:6;37567:46;:::i;:::-;37645:4;37640:3;37636:14;37622:28;;37477:179;;;;:::o;37662:113::-;37732:4;37764;37759:3;37755:14;37747:22;;37662:113;;;:::o;37811:732::-;37930:3;37959:54;38007:5;37959:54;:::i;:::-;38029:86;38108:6;38103:3;38029:86;:::i;:::-;38022:93;;38139:56;38189:5;38139:56;:::i;:::-;38218:7;38249:1;38234:284;38259:6;38256:1;38253:13;38234:284;;;38335:6;38329:13;38362:63;38421:3;38406:13;38362:63;:::i;:::-;38355:70;;38448:60;38501:6;38448:60;:::i;:::-;38438:70;;38294:224;38281:1;38278;38274:9;38269:14;;38234:284;;;38238:14;38534:3;38527:10;;37935:608;;;37811:732;;;;:::o;38549:831::-;38812:4;38850:3;38839:9;38835:19;38827:27;;38864:71;38932:1;38921:9;38917:17;38908:6;38864:71;:::i;:::-;38945:80;39021:2;39010:9;39006:18;38997:6;38945:80;:::i;:::-;39072:9;39066:4;39062:20;39057:2;39046:9;39042:18;39035:48;39100:108;39203:4;39194:6;39100:108;:::i;:::-;39092:116;;39218:72;39286:2;39275:9;39271:18;39262:6;39218:72;:::i;:::-;39300:73;39368:3;39357:9;39353:19;39344:6;39300:73;:::i;:::-;38549:831;;;;;;;;:::o;39386:807::-;39635:4;39673:3;39662:9;39658:19;39650:27;;39687:71;39755:1;39744:9;39740:17;39731:6;39687:71;:::i;:::-;39768:72;39836:2;39825:9;39821:18;39812:6;39768:72;:::i;:::-;39850:80;39926:2;39915:9;39911:18;39902:6;39850:80;:::i;:::-;39940;40016:2;40005:9;40001:18;39992:6;39940:80;:::i;:::-;40030:73;40098:3;40087:9;40083:19;40074:6;40030:73;:::i;:::-;40113;40181:3;40170:9;40166:19;40157:6;40113:73;:::i;:::-;39386:807;;;;;;;;;:::o;40199:143::-;40256:5;40287:6;40281:13;40272:22;;40303:33;40330:5;40303:33;:::i;:::-;40199:143;;;;:::o;40348:663::-;40436:6;40444;40452;40501:2;40489:9;40480:7;40476:23;40472:32;40469:119;;;40507:79;;:::i;:::-;40469:119;40627:1;40652:64;40708:7;40699:6;40688:9;40684:22;40652:64;:::i;:::-;40642:74;;40598:128;40765:2;40791:64;40847:7;40838:6;40827:9;40823:22;40791:64;:::i;:::-;40781:74;;40736:129;40904:2;40930:64;40986:7;40977:6;40966:9;40962:22;40930:64;:::i;:::-;40920:74;;40875:129;40348:663;;;;;:::o

Swarm Source

ipfs://3a0a2ebae8c76950239e83d706099b12765a48a63da53874b957bea5427b946c
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.