ETH Price: $4,000.20 (+2.87%)

Token

ERC-20: HUMAN RACE (HU)
 

Overview

Max Total Supply

1,000,000,000 HU

Holders

91

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
HUMANRACE

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/**

https://medium.com/@humanrace100/the-truth-f1979f4eecda

*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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


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

library Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }


    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}


abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}




contract HUMANRACE is Context,IERC20, Ownable{
    using Address for address;

    string private _name = "HUMAN RACE";
    string private _symbol = "HU";
    uint8 private _decimals = 18;
    uint256 totalFeeFortx = 0;
    uint256 maxWalletTreshold = 2;
    uint256 maxTxTreshold = 2;
    uint256 private swapTreshold =2;
    bool public limitsInEffect = true;

    uint256 private currentThreshold = 20; //Once the token value goes up this number can be decreased (To reduce price impact on asset)
    uint256 private _totalSupply = 1_000_000_000 * 10**_decimals; 
    uint256 public requiredTokensToSwap = _totalSupply * swapTreshold /1000;
    mapping (address => uint256) private _balances;
    mapping (address => bool) private _excludedFromFees;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) _isExcludedMaxTransactionAmount;
    mapping (address => bool) public automatedMarketMakerPairs;
    address _owner;
    address payable public marketingAddress = payable(0xbd0C4634b094275F90bc3376Dd79a3156D5282E3);
    
    uint256 maxWalletAmount = _totalSupply*maxWalletTreshold/100; 
    uint256 maxTxAmount = _totalSupply*maxTxTreshold/100;
    mapping (address => bool) botWallets;
    bool botTradeEnabled = false;
    bool checkWalletSize = true;
    mapping (address => bool) private _liquidityHolders;
    mapping (address => bool) private presaleAddresses;
    uint256 private buyliqFee = 2; 
    uint256 private buyprevLiqFee = 2;
    uint256 private buymktFee = 5;
    uint256 private buyPrevmktFee = 5;
    
    
    bool private tradeEnabled = false;

    
    uint256 private sellliqFee = 95;
    uint256 private sellprevLiqFee = 95;
    uint256 private sellmktFee = 5;
    uint256 private sellPrevmktFee = 5;


    bool public inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    uint256 private mktTokens = 0;
  
    uint256 private liqTokens = 0;

    
    event SwapAndLiquify(uint256 tokensSwapped,
		uint256 ethReceived,
		uint256 tokensIntoLiquidity
	);
    event tokensSwappedDuringTokenomics(uint256 amount);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    
    // 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
    IUniswapV2Router02 _router;
    address public uniswapV2Pair;

    //Balances tracker

    modifier lockTheSwap{
		inSwapAndLiquify = true;
		_;
		inSwapAndLiquify = false;
	}
    

    constructor(){
        _balances[_msgSender()] = _totalSupply;
        //0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D mainnet and all networks
        IUniswapV2Router02 _uniRouter = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        uniswapV2Pair = IUniswapV2Factory(_uniRouter.factory())
            .createPair(address(this), _uniRouter.WETH());
        
        _excludedFromFees[owner()] = true;         
        _excludedFromFees[address(this)] = true;// exclude owner and contract instance from fees
        _router = _uniRouter;
        _liquidityHolders[address(_router)] = true;
        _liquidityHolders[owner()] = true;
        _liquidityHolders[address(this)] = true;
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        emit Transfer(address(0),_msgSender(),_totalSupply);
 
    }
    receive() external payable{}


    //general token data and tracking of balances to be swapped.
    function getOwner()external view returns(address){
            return owner();
    }
    function currentmktTokens() external view returns (uint256){
            return mktTokens;
     }
   
     function currentLiqTokens() external view returns (uint256){
            return liqTokens;
     }

     function totalSupply() external view override returns (uint256){
            return _totalSupply;
     }
   
    function balanceOf(address account) public view override returns (uint256){
        return _balances[account];
    }
   
    function transfer(address recipient, uint256 amount) external override returns (bool){
            _transfer(_msgSender(),recipient,amount);
            return true;

    }
   
    function allowance(address owner, address spender) external view override returns (uint256){
            return _allowances[owner][spender];
    }
 
    function approve(address spender, uint256 amount) external override returns (bool){
            _approve(_msgSender(),spender,amount);
            return true;
    }
    function removeLimits() public onlyOwner{
        limitsInEffect = false;
    }

    function decimals()external view returns(uint256){
        return _decimals;
    }
    function name() external view returns (string memory) {
		return _name;
	}
    function symbol() external view returns (string memory){
        return _symbol;
    }
        function updateMaxTxTreshold(uint256 newVal) public onlyOwner{
        maxTxTreshold = newVal;
        maxTxAmount = _totalSupply*maxTxTreshold/100;// 1%

    }
     function updateMaxWalletTreshold(uint256 newVal) public onlyOwner{
        maxWalletTreshold = newVal;
        maxWalletAmount = _totalSupply*maxWalletTreshold/100;

    }
    

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool){
        require(amount <= _allowances[sender][_msgSender()], "ERC20: transfer amount exceeds allowance");
		_transfer(sender, recipient, amount);
		_approve(sender, _msgSender(), _allowances[sender][_msgSender()] - amount);
		return true;
    }

    function addBotWallet (address payable detectedBot, bool isBot) public onlyOwner{
        botWallets[detectedBot] = isBot;
    }
    function currentbuyliqFee() public view returns (uint256){
            return buyliqFee;
    }
    function currentbuymktfee() public view returns (uint256){
            return buymktFee;
    }
   

      function currentsellLiqFee() public view returns (uint256){
            return sellliqFee;
    }
    function currentsellmktfee() public view returns (uint256){
            return sellmktFee;
    }
    
    function currentThresholdInt()public view returns (uint256){
        return currentThreshold;
    }
    function isExcluded(address toCheck)public view returns (bool){
            return _excludedFromFees[toCheck];
    }

    function _transfer(address from, address to, uint256 amount) internal{
        
        require(from != address(0), "ERC20: transfer from the zero address");
		require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0,"ERC20: transfered amount must be greater than zero");
        uint256 senderBalance = _balances[from];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        if(tradeEnabled == false){
            require(_liquidityHolders[to] || _liquidityHolders[from],"Cant trade, trade is disabled");
        }
        
       
         
          if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead)
            ){

                
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxTxAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                    require(amount + balanceOf(to) <= maxWalletAmount, "Unable to exceed Max Wallet");
                    

                } 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxTxAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]) {
                    require(amount + balanceOf(to) <= maxWalletAmount, "Unable to exceed Max Wallet");
                }
            }
        }
         uint256 inContractBalance = balanceOf(address(this));

        if(inContractBalance >=requiredTokensToSwap && 
			!inSwapAndLiquify && 
			from != uniswapV2Pair && 
			swapAndLiquifyEnabled){
                if(inContractBalance >= requiredTokensToSwap ){
                    inContractBalance = requiredTokensToSwap;
                    swapForTokenomics(inContractBalance);
                }
            }

            bool takeFees = true;
            
            
            if(_excludedFromFees[from] || _excludedFromFees[to]) {
                totalFeeFortx = 0;
                takeFees = false;
               

            }
            uint256 mktAmount = 0;
           
		    uint256 liqAmount = 0;  // Amount to be added to liquidity.

            if(takeFees){
                
                //bot fees
                if(botWallets[from] == true||botWallets[to]==true){
                    revert("No bots allowed to trade");
                }
                //Selling fees
                if (automatedMarketMakerPairs[to] && to != address(_router) ){
                        totalFeeFortx = 0;
                        mktAmount = amount * sellmktFee/100;
                        liqAmount = amount * sellliqFee/100;
                        
                        totalFeeFortx = mktAmount + liqAmount ;
                }
                //Buy Fees
                else if(automatedMarketMakerPairs[from] && from != address(_router)) {
                    
                    totalFeeFortx = 0;
                    mktAmount = amount * buymktFee/100;
                    liqAmount = amount * buyliqFee/100;
                    
                    totalFeeFortx = mktAmount + liqAmount ;
                }

                
            }

            _balances[from] = senderBalance - amount;
            _balances[to] += amount - mktAmount - liqAmount;

          if(liqAmount != 0) {
			_balances[address(this)] += totalFeeFortx;
			//tLiqTotal += liqAmount;
            liqTokens += liqAmount;
            mktTokens += mktAmount;
			emit Transfer(from, address(this), totalFeeFortx);
            
		    }
            emit Transfer(from, to,amount-totalFeeFortx);
            
        
    }
    function swapForTokenomics(uint256 balanceToswap) private lockTheSwap{
        swapAndLiquify(liqTokens);
        swapTokensForETHmkt(mktTokens);
        emit tokensSwappedDuringTokenomics(balanceToswap);
        mktTokens = 0;
        liqTokens = 0;
    }
     function addLimitExempt(address newAddress)external onlyOwner{
        _liquidityHolders[newAddress] = true;
     
    }
    function swapTokensForETHmkt(uint256 amount)private {
        address[] memory path = new address[](2);
		path[0] = address(this);
		path[1] = _router.WETH();
		_approve(address(this), address(_router), amount);

		
		_router.swapExactTokensForETHSupportingFeeOnTransferTokens(
			amount,
			0, // Accept any amount of ETH.
			path,
			marketingAddress,
			block.timestamp
		);

    }
  


    function unstuckTokens (IERC20 tokenToClear, address payable destination, uint256 amount) public onlyOwner{
        //uint256 contractBalance = tokenToClear.balanceOf(address(this));
        tokenToClear.transfer(destination, amount);
    }

    function unstuckETH(address payable destination) public onlyOwner{
        uint256 ethBalance = address(this).balance;
        payable(destination).transfer(ethBalance);
    }

    function tradeStatus(bool status) public onlyOwner{
        tradeEnabled = status;
    }

    function swapAndLiquify(uint256 liqTokensPassed) private {
		uint256 half = liqTokensPassed / 2;
		uint256 otherHalf = liqTokensPassed - half;
		uint256 initialBalance = address(this).balance;

		swapTokensForETH(half);
		uint256 newBalance = address(this).balance - (initialBalance); 

		addLiquidity(otherHalf, newBalance);
		emit SwapAndLiquify(half,newBalance,otherHalf);
	}

    function swapTokensForETH(uint256 tokenAmount) private{
		address[] memory path = new address[](2);
		path[0] = address(this);
		path[1] = _router.WETH();
		_approve(address(this), address(_router), tokenAmount);

		
		_router.swapExactTokensForETHSupportingFeeOnTransferTokens(
			tokenAmount,
			0, // Accept any amount of ETH.
			path,
			address(this),
			block.timestamp
		);
	}
    
    function addLiquidity(uint256 tokenAmount,uint256 ethAmount) private{
		_approve(address(this), address(_router), tokenAmount);

		_router.addLiquidityETH{value:ethAmount}(
			address(this),
			tokenAmount,
			0,
			0,
			deadAddress,// tr
			block.timestamp
		);
	}

    function _approve(address owner,address spender, uint256 amount) internal{
        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);


    }




    //Fees related functions

    function addToExcluded(address toExclude) public onlyOwner{  
        _excludedFromFees[toExclude] = true;
    }

    function removeFromExcluded(address toRemove) public onlyOwner{
        _excludedFromFees[toRemove] = false;
    }
      function excludePresaleAddresses(address router, address presale) external onlyOwner {
        
        _liquidityHolders[address(router)] = true;
        _liquidityHolders[presale] = true;
        presaleAddresses[address(router)] = true;
        presaleAddresses[presale] = true;
       
    }

    function startPresaleStatus()public onlyOwner{
        
        buymktFee = 5;
        sellmktFee =5;
        buyliqFee =2;
        sellliqFee =2;
        
        setSwapAndLiquify(false);

    }
    function endPresaleStatus() public onlyOwner{
        buymktFee = 5;
        buyliqFee = 2;
      

        sellmktFee = 5;
        sellliqFee = 2;
        
        setSwapAndLiquify(true);
    }

    function updateThreshold(uint newThreshold) public onlyOwner{
        currentThreshold = newThreshold;

    }

    function setSwapAndLiquify(bool _enabled) public onlyOwner{
            swapAndLiquifyEnabled = _enabled;
    }


    //Marketing related 

    function setMktAddress(address newAddress) external onlyOwner{
        marketingAddress = payable(newAddress);
    }
   
    function transferAssetsETH(address payable to, uint256 amount) internal{
            to.transfer(amount);
    }
   
    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
    }
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updatecurrentbuyliqFee(uint256 newAmount) public onlyOwner{
            buyliqFee = newAmount;
    }
    function updatecurrentbuymktfee(uint256 newAmount) public onlyOwner{
             buymktFee= newAmount;
    }
   

      function updatecurrentsellLiqFee(uint256 newAmount) public onlyOwner{
             sellliqFee= newAmount;
    }
    function updatecurrentsellmktfee(uint256 newAmount)public onlyOwner{
             sellmktFee= newAmount;
    }
    
  
    function currentMaxWallet() public view returns(uint256){
        return maxWalletAmount;
    }
    function currentMaxTx() public view returns(uint256){
        return maxTxAmount;
    }
    function updateSwapTreshold(uint256 newVal) public onlyOwner{
        swapTreshold = newVal;
        requiredTokensToSwap = _totalSupply*swapTreshold/1000;
        
    }
    function currentTradeStatus() public view returns (bool){
        return tradeEnabled;   
    }
    function currentSwapTreshold() public view returns(uint256){
        return swapTreshold;
    }
    function currentTokensToSwap() public view returns(uint256){
        return requiredTokensToSwap;
    }
}


interface IUniswapV2Factory {
    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 IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
    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 IUniswapV2Router01 {
    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 IUniswapV2Router02 is IUniswapV2Router01 {
    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 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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"tokensSwappedDuringTokenomics","type":"event"},{"inputs":[{"internalType":"address payable","name":"detectedBot","type":"address"},{"internalType":"bool","name":"isBot","type":"bool"}],"name":"addBotWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"addLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"toExclude","type":"address"}],"name":"addToExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentLiqTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentMaxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentMaxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentSwapTreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentThresholdInt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentTradeStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentbuyliqFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentbuymktfee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentmktTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentsellLiqFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentsellmktfee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endPresaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"presale","type":"address"}],"name":"excludePresaleAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inSwapAndLiquify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"toCheck","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"toRemove","type":"address"}],"name":"removeFromExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"requiredTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setMktAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startPresaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"tradeStatus","outputs":[],"stateMutability":"nonpayable","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":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"destination","type":"address"}],"name":"unstuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenToClear","type":"address"},{"internalType":"address payable","name":"destination","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unstuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"updateMaxTxTreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"updateMaxWalletTreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"updateSwapTreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newThreshold","type":"uint256"}],"name":"updateThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updatecurrentbuyliqFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updatecurrentbuymktfee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updatecurrentsellLiqFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updatecurrentsellmktfee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600a81526020017f48554d414e2052414345000000000000000000000000000000000000000000008152506001908051906020019062000051929190620009ac565b506040518060400160405280600281526020017f4855000000000000000000000000000000000000000000000000000000000000815250600290805190602001906200009f929190620009ac565b506012600360006101000a81548160ff021916908360ff16021790555060006004556002600555600260065560026007556001600860006101000a81548160ff0219169083151502179055506014600955600360009054906101000a900460ff16600a6200010e919062000b9e565b633b9aca006200011f919062000cdb565b600a556103e8600754600a5462000137919062000cdb565b62000143919062000b0b565b600b5573bd0c4634b094275f90bc3376dd79a3156d5282e3601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506064600554600a54620001af919062000cdb565b620001bb919062000b0b565b6013556064600654600a54620001d2919062000cdb565b620001de919062000b0b565b6014556000601660006101000a81548160ff0219169083151502179055506001601660016101000a81548160ff02191690831515021790555060026019556002601a556005601b556005601c556000601d60006101000a81548160ff021916908315150217905550605f601e55605f601f55600560205560056021556001602260016101000a81548160ff02191690831515021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b81525060006023556000602455348015620002c457600080fd5b50620002e5620002d96200081660201b60201c565b6200081e60201b60201c565b600a54600c6000620002fc6200081660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200039a57600080fd5b505afa158015620003af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d5919062000a73565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200043857600080fd5b505afa1580156200044d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000473919062000a73565b6040518363ffffffff1660e01b81526004016200049292919062000ac1565b602060405180830381600087803b158015620004ad57600080fd5b505af1158015620004c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004e8919062000a73565b602660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d60006200053e620008e260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080602560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160176000602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000620006b8620008e260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000796602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200090b60201b60201c565b620007a66200081660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a5460405162000807919062000aee565b60405180910390a35062000e71565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b828054620009ba9062000d87565b90600052602060002090601f016020900481019282620009de576000855562000a2a565b82601f10620009f957805160ff191683800117855562000a2a565b8280016001018555821562000a2a579182015b8281111562000a2957825182559160200191906001019062000a0c565b5b50905062000a39919062000a3d565b5090565b5b8082111562000a5857600081600090555060010162000a3e565b5090565b60008151905062000a6d8162000e57565b92915050565b60006020828403121562000a8657600080fd5b600062000a968482850162000a5c565b91505092915050565b62000aaa8162000d3c565b82525050565b62000abb8162000d70565b82525050565b600060408201905062000ad8600083018562000a9f565b62000ae7602083018462000a9f565b9392505050565b600060208201905062000b05600083018462000ab0565b92915050565b600062000b188262000d70565b915062000b258362000d70565b92508262000b385762000b3762000dec565b5b828204905092915050565b6000808291508390505b600185111562000b955780860481111562000b6d5762000b6c62000dbd565b5b600185161562000b7d5780820291505b808102905062000b8d8562000e4a565b945062000b4d565b94509492505050565b600062000bab8262000d70565b915062000bb88362000d7a565b925062000be77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000bef565b905092915050565b60008262000c01576001905062000cd4565b8162000c11576000905062000cd4565b816001811462000c2a576002811462000c355762000c6b565b600191505062000cd4565b60ff84111562000c4a5762000c4962000dbd565b5b8360020a91508482111562000c645762000c6362000dbd565b5b5062000cd4565b5060208310610133831016604e8410600b841016171562000ca55782820a90508381111562000c9f5762000c9e62000dbd565b5b62000cd4565b62000cb4848484600162000b43565b9250905081840481111562000cce5762000ccd62000dbd565b5b81810290505b9392505050565b600062000ce88262000d70565b915062000cf58362000d70565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d315762000d3062000dbd565b5b828202905092915050565b600062000d498262000d50565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000600282049050600182168062000da057607f821691505b6020821081141562000db75762000db662000e1b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60008160011c9050919050565b62000e628162000d3c565b811462000e6e57600080fd5b50565b60805160601c614ea962000e97600039600081816111a60152613c6d0152614ea96000f3fe60806040526004361061036f5760003560e01c80638cd0260c116101c6578063bf9b0159116100f7578063dd62ed3e11610095578063edcf19b21161006f578063edcf19b214610c57578063f2fde38b14610c80578063f7da678514610ca9578063f953cf3a14610cd257610376565b8063dd62ed3e14610bc4578063ddcf9b9814610c01578063e1370dd314610c2c57610376565b8063cba0e996116100d1578063cba0e99614610b0a578063d1294d4c14610b47578063d15bcf0f14610b70578063d7d7442f14610b9b57610376565b8063bf9b015914610a8d578063bf9eb54014610ab8578063cb66453414610ae157610376565b8063a5ece94111610164578063a9059cbb1161013e578063a9059cbb146109d3578063b195b83914610a10578063b4d95a9314610a27578063b62496f514610a5057610376565b8063a5ece94114610956578063a6c38f5914610981578063a7a07452146109aa57610376565b806395d89b41116101a057806395d89b41146108ac5780639a7a23d6146108d75780639b136da414610900578063a04bdc811461092b57610376565b80638cd0260c1461082d5780638da5cb5b1461085657806390f502831461088157610376565b80634a62bb65116102a05780636df3333a1161023e578063751039fc11610218578063751039fc14610799578063801527ce146107b05780638628c23f146107d9578063893d20e81461080257610376565b80636df3333a1461071a57806370a0823114610745578063715018a61461078257610376565b80635297defd1161027a5780635297defd146106725780635be76f111461069d57806364c16163146106c65780636573c4df146106f157610376565b80634a62bb65146105f15780634a74bb021461061c5780634bd7ace51461064757610376565b806323b872dd1161030d578063313ce567116102e7578063313ce56714610547578063487a69051461057257806349bd5a5e1461059d5780634a0e963c146105c857610376565b806323b872dd146104b657806327c8f835146104f35780632d03420b1461051e57610376565b806313b4a7f41161034957806313b4a7f41461040c57806318160ddd14610435578063220f66961461046057806322788f861461048b57610376565b806306fdde031461037b5780630882a863146103a6578063095ea7b3146103cf57610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610ce9565b60405161039d91906147d7565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c8919061400a565b610d7b565b005b3480156103db57600080fd5b506103f660048036038101906103f19190613f2d565b610e01565b60405161040391906147bc565b60405180910390f35b34801561041857600080fd5b50610433600480360381019061042e9190613e66565b610e1f565b005b34801561044157600080fd5b5061044a610fff565b60405161045791906149d9565b60405180910390f35b34801561046c57600080fd5b50610475611009565b60405161048291906147bc565b60405180910390f35b34801561049757600080fd5b506104a061101c565b6040516104ad91906149d9565b60405180910390f35b3480156104c257600080fd5b506104dd60048036038101906104d89190613ea2565b611026565b6040516104ea91906147bc565b60405180910390f35b3480156104ff57600080fd5b506105086111a4565b60405161051591906146fc565b60405180910390f35b34801561052a57600080fd5b5061054560048036038101906105409190613f69565b6111c8565b005b34801561055357600080fd5b5061055c611261565b60405161056991906149d9565b60405180910390f35b34801561057e57600080fd5b5061058761127b565b60405161059491906149d9565b60405180910390f35b3480156105a957600080fd5b506105b2611285565b6040516105bf91906146fc565b60405180910390f35b3480156105d457600080fd5b506105ef60048036038101906105ea9190613daf565b6112ab565b005b3480156105fd57600080fd5b50610606611382565b60405161061391906147bc565b60405180910390f35b34801561062857600080fd5b50610631611395565b60405161063e91906147bc565b60405180910390f35b34801561065357600080fd5b5061065c6113a8565b60405161066991906149d9565b60405180910390f35b34801561067e57600080fd5b506106876113b2565b60405161069491906149d9565b60405180910390f35b3480156106a957600080fd5b506106c460048036038101906106bf9190613e01565b6113bc565b005b3480156106d257600080fd5b506106db611488565b6040516106e891906149d9565b60405180910390f35b3480156106fd57600080fd5b506107186004803603810190610713919061400a565b611492565b005b34801561072657600080fd5b5061072f61153a565b60405161073c91906149d9565b60405180910390f35b34801561075157600080fd5b5061076c60048036038101906107679190613daf565b611544565b60405161077991906149d9565b60405180910390f35b34801561078e57600080fd5b5061079761158d565b005b3480156107a557600080fd5b506107ae611615565b005b3480156107bc57600080fd5b506107d760048036038101906107d29190613f69565b6116ae565b005b3480156107e557600080fd5b5061080060048036038101906107fb919061400a565b611747565b005b34801561080e57600080fd5b506108176117cd565b60405161082491906146fc565b60405180910390f35b34801561083957600080fd5b50610854600480360381019061084f919061400a565b6117dc565b005b34801561086257600080fd5b5061086b611862565b60405161087891906146fc565b60405180910390f35b34801561088d57600080fd5b5061089661188b565b6040516108a391906149d9565b60405180910390f35b3480156108b857600080fd5b506108c1611895565b6040516108ce91906147d7565b60405180910390f35b3480156108e357600080fd5b506108fe60048036038101906108f99190613ef1565b611927565b005b34801561090c57600080fd5b50610915611a42565b60405161092291906149d9565b60405180910390f35b34801561093757600080fd5b50610940611a4c565b60405161094d91906149d9565b60405180910390f35b34801561096257600080fd5b5061096b611a52565b6040516109789190614717565b60405180910390f35b34801561098d57600080fd5b506109a860048036038101906109a39190613e2a565b611a78565b005b3480156109b657600080fd5b506109d160048036038101906109cc919061400a565b611b4f565b005b3480156109df57600080fd5b506109fa60048036038101906109f59190613f2d565b611bf7565b604051610a0791906147bc565b60405180910390f35b348015610a1c57600080fd5b50610a25611c15565b005b348015610a3357600080fd5b50610a4e6004803603810190610a499190613daf565b611cbd565b005b348015610a5c57600080fd5b50610a776004803603810190610a729190613daf565b611d94565b604051610a8491906147bc565b60405180910390f35b348015610a9957600080fd5b50610aa2611db4565b604051610aaf91906149d9565b60405180910390f35b348015610ac457600080fd5b50610adf6004803603810190610ada9190613daf565b611dbe565b005b348015610aed57600080fd5b50610b086004803603810190610b039190613daf565b611e7e565b005b348015610b1657600080fd5b50610b316004803603810190610b2c9190613daf565b611f55565b604051610b3e91906147bc565b60405180910390f35b348015610b5357600080fd5b50610b6e6004803603810190610b69919061400a565b611fab565b005b348015610b7c57600080fd5b50610b85612054565b604051610b9291906147bc565b60405180910390f35b348015610ba757600080fd5b50610bc26004803603810190610bbd919061400a565b61206b565b005b348015610bd057600080fd5b50610beb6004803603810190610be69190613e66565b6120f1565b604051610bf891906149d9565b60405180910390f35b348015610c0d57600080fd5b50610c16612178565b604051610c2391906149d9565b60405180910390f35b348015610c3857600080fd5b50610c41612182565b604051610c4e91906149d9565b60405180910390f35b348015610c6357600080fd5b50610c7e6004803603810190610c79919061400a565b61218c565b005b348015610c8c57600080fd5b50610ca76004803603810190610ca29190613daf565b612212565b005b348015610cb557600080fd5b50610cd06004803603810190610ccb9190613fbb565b61230a565b005b348015610cde57600080fd5b50610ce7612419565b005b606060018054610cf890614d30565b80601f0160208091040260200160405190810160405280929190818152602001828054610d2490614d30565b8015610d715780601f10610d4657610100808354040283529160200191610d71565b820191906000526020600020905b815481529060010190602001808311610d5457829003601f168201915b5050505050905090565b610d836124c1565b73ffffffffffffffffffffffffffffffffffffffff16610da1611862565b73ffffffffffffffffffffffffffffffffffffffff1614610df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dee90614939565b60405180910390fd5b8060198190555050565b6000610e15610e0e6124c1565b84846124c9565b6001905092915050565b610e276124c1565b73ffffffffffffffffffffffffffffffffffffffff16610e45611862565b73ffffffffffffffffffffffffffffffffffffffff1614610e9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9290614939565b60405180910390fd5b6001601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600a54905090565b602260009054906101000a900460ff1681565b6000600954905090565b6000600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110716124c1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211156110ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e590614919565b60405180910390fd5b6110f9848484612694565b611199846111056124c1565b84600e60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061114f6124c1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111949190614c15565b6124c9565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6111d06124c1565b73ffffffffffffffffffffffffffffffffffffffff166111ee611862565b73ffffffffffffffffffffffffffffffffffffffff1614611244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123b90614939565b60405180910390fd5b80601d60006101000a81548160ff02191690831515021790555050565b6000600360009054906101000a900460ff1660ff16905090565b6000600b54905090565b602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112b36124c1565b73ffffffffffffffffffffffffffffffffffffffff166112d1611862565b73ffffffffffffffffffffffffffffffffffffffff1614611327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131e90614939565b60405180910390fd5b6001600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600860009054906101000a900460ff1681565b602260019054906101000a900460ff1681565b6000601954905090565b6000602054905090565b6113c46124c1565b73ffffffffffffffffffffffffffffffffffffffff166113e2611862565b73ffffffffffffffffffffffffffffffffffffffff1614611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142f90614939565b60405180910390fd5b60004790508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611483573d6000803e3d6000fd5b505050565b6000602454905090565b61149a6124c1565b73ffffffffffffffffffffffffffffffffffffffff166114b8611862565b73ffffffffffffffffffffffffffffffffffffffff161461150e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150590614939565b60405180910390fd5b806005819055506064600554600a546115279190614bbb565b6115319190614b8a565b60138190555050565b6000600754905090565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115956124c1565b73ffffffffffffffffffffffffffffffffffffffff166115b3611862565b73ffffffffffffffffffffffffffffffffffffffff1614611609576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160090614939565b60405180910390fd5b61161360006133ca565b565b61161d6124c1565b73ffffffffffffffffffffffffffffffffffffffff1661163b611862565b73ffffffffffffffffffffffffffffffffffffffff1614611691576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168890614939565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550565b6116b66124c1565b73ffffffffffffffffffffffffffffffffffffffff166116d4611862565b73ffffffffffffffffffffffffffffffffffffffff161461172a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172190614939565b60405180910390fd5b80602260016101000a81548160ff02191690831515021790555050565b61174f6124c1565b73ffffffffffffffffffffffffffffffffffffffff1661176d611862565b73ffffffffffffffffffffffffffffffffffffffff16146117c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ba90614939565b60405180910390fd5b8060208190555050565b60006117d7611862565b905090565b6117e46124c1565b73ffffffffffffffffffffffffffffffffffffffff16611802611862565b73ffffffffffffffffffffffffffffffffffffffff1614611858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184f90614939565b60405180910390fd5b80601e8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000601e54905090565b6060600280546118a490614d30565b80601f01602080910402602001604051908101604052809291908181526020018280546118d090614d30565b801561191d5780601f106118f25761010080835404028352916020019161191d565b820191906000526020600020905b81548152906001019060200180831161190057829003601f168201915b5050505050905090565b61192f6124c1565b73ffffffffffffffffffffffffffffffffffffffff1661194d611862565b73ffffffffffffffffffffffffffffffffffffffff16146119a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199a90614939565b60405180910390fd5b602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2b90614859565b60405180910390fd5b611a3e828261348e565b5050565b6000601b54905090565b600b5481565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611a806124c1565b73ffffffffffffffffffffffffffffffffffffffff16611a9e611862565b73ffffffffffffffffffffffffffffffffffffffff1614611af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aeb90614939565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611b576124c1565b73ffffffffffffffffffffffffffffffffffffffff16611b75611862565b73ffffffffffffffffffffffffffffffffffffffff1614611bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc290614939565b60405180910390fd5b806006819055506064600654600a54611be49190614bbb565b611bee9190614b8a565b60148190555050565b6000611c0b611c046124c1565b8484612694565b6001905092915050565b611c1d6124c1565b73ffffffffffffffffffffffffffffffffffffffff16611c3b611862565b73ffffffffffffffffffffffffffffffffffffffff1614611c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8890614939565b60405180910390fd5b6005601b81905550600560208190555060026019819055506002601e81905550611cbb60006116ae565b565b611cc56124c1565b73ffffffffffffffffffffffffffffffffffffffff16611ce3611862565b73ffffffffffffffffffffffffffffffffffffffff1614611d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3090614939565b60405180910390fd5b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60106020528060005260406000206000915054906101000a900460ff1681565b6000601454905090565b611dc66124c1565b73ffffffffffffffffffffffffffffffffffffffff16611de4611862565b73ffffffffffffffffffffffffffffffffffffffff1614611e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3190614939565b60405180910390fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611e866124c1565b73ffffffffffffffffffffffffffffffffffffffff16611ea4611862565b73ffffffffffffffffffffffffffffffffffffffff1614611efa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef190614939565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611fb36124c1565b73ffffffffffffffffffffffffffffffffffffffff16611fd1611862565b73ffffffffffffffffffffffffffffffffffffffff1614612027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201e90614939565b60405180910390fd5b806007819055506103e8600754600a546120419190614bbb565b61204b9190614b8a565b600b8190555050565b6000601d60009054906101000a900460ff16905090565b6120736124c1565b73ffffffffffffffffffffffffffffffffffffffff16612091611862565b73ffffffffffffffffffffffffffffffffffffffff16146120e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120de90614939565b60405180910390fd5b8060098190555050565b6000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000602354905090565b6000601354905090565b6121946124c1565b73ffffffffffffffffffffffffffffffffffffffff166121b2611862565b73ffffffffffffffffffffffffffffffffffffffff1614612208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ff90614939565b60405180910390fd5b80601b8190555050565b61221a6124c1565b73ffffffffffffffffffffffffffffffffffffffff16612238611862565b73ffffffffffffffffffffffffffffffffffffffff161461228e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228590614939565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156122fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f590614819565b60405180910390fd5b612307816133ca565b50565b6123126124c1565b73ffffffffffffffffffffffffffffffffffffffff16612330611862565b73ffffffffffffffffffffffffffffffffffffffff1614612386576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237d90614939565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016123c1929190614732565b602060405180830381600087803b1580156123db57600080fd5b505af11580156123ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124139190613f92565b50505050565b6124216124c1565b73ffffffffffffffffffffffffffffffffffffffff1661243f611862565b73ffffffffffffffffffffffffffffffffffffffff1614612495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248c90614939565b60405180910390fd5b6005601b81905550600260198190555060056020819055506002601e819055506124bf60016116ae565b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612539576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612530906149b9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a090614839565b60405180910390fd5b80600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161268791906149d9565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fb90614999565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276b906147f9565b60405180910390fd5b600081116127b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ae906148b9565b60405180910390fd5b6000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561283e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283590614879565b60405180910390fd5b60001515601d60009054906101000a900460ff161515141561293b57601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128fb5750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61293a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612931906148d9565b60405180910390fd5b5b600860009054906101000a900460ff1615612d2857612958611862565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156129c65750612996611862565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156129ff5750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612a39575061dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612d2757601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ae15750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b8857601454821115612b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b22906148f9565b60405180910390fd5b601354612b3784611544565b83612b429190614b34565b1115612b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7a90614959565b60405180910390fd5b612d26565b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c2b5750600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c7a57601454821115612c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6c90614899565b60405180910390fd5b612d25565b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d2457601354612cd784611544565b83612ce29190614b34565b1115612d23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1a90614959565b60405180910390fd5b5b5b5b5b5b6000612d3330611544565b9050600b548110158015612d545750602260009054906101000a900460ff16155b8015612dae5750602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612dc65750602260019054906101000a900460ff165b15612de457600b548110612de357600b549050612de28161352f565b5b5b600060019050600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e8b5750600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e9d576000600481905550600090505b60008082156131995760011515601560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151480612f55575060011515601560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b15612f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8c90614979565b60405180910390fd5b601060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561303c5750602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614155b156130985760006004819055506064602054876130599190614bbb565b6130639190614b8a565b91506064601e54876130759190614bbb565b61307f9190614b8a565b9050808261308d9190614b34565b600481905550613198565b601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561313f5750602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b156131975760006004819055506064601b548761315c9190614bbb565b6131669190614b8a565b91506064601954876131789190614bbb565b6131829190614b8a565b905080826131909190614b34565b6004819055505b5b5b85856131a59190614c15565b600c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508082876131f59190614c15565b6131ff9190614c15565b600c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461324d9190614b34565b925050819055506000811461334e57600454600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132ad9190614b34565b9250508190555080602460008282546132c69190614b34565b9250508190555081602360008282546132df9190614b34565b925050819055503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60045460405161334591906149d9565b60405180910390a35b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600454896133ab9190614c15565b6040516133b891906149d9565b60405180910390a35050505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6001602260006101000a81548160ff0219169083151502179055506135556024546135c5565b613560602354613650565b7f4596ef7337c1c88bb740707471cfc0ec6d0212036b05ab1bdbb09cf3e3f019048160405161358f91906149d9565b60405180910390a1600060238190555060006024819055506000602260006101000a81548160ff02191690831515021790555050565b60006002826135d49190614b8a565b9050600081836135e49190614c15565b905060004790506135f483613936565b600081476136029190614c15565b905061360e8382613bfa565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405161364193929190614aa8565b60405180910390a15050505050565b6000600267ffffffffffffffff811115613693577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156136c15781602001602082028036833780820191505090505b50905030816000815181106136ff577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156137a157600080fd5b505afa1580156137b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137d99190613dd8565b81600181518110613813577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061387a30602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846124c9565b602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b81526004016139009594939291906149f4565b600060405180830381600087803b15801561391a57600080fd5b505af115801561392e573d6000803e3d6000fd5b505050505050565b6000600267ffffffffffffffff811115613979577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156139a75781602001602082028036833780820191505090505b50905030816000815181106139e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613a8757600080fd5b505afa158015613a9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613abf9190613dd8565b81600181518110613af9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b6030602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846124c9565b602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613bc4959493929190614a4e565b600060405180830381600087803b158015613bde57600080fd5b505af1158015613bf2573d6000803e3d6000fd5b505050505050565b613c2730602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846124c9565b602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000807f0000000000000000000000000000000000000000000000000000000000000000426040518863ffffffff1660e01b8152600401613cae9695949392919061475b565b6060604051808303818588803b158015613cc757600080fd5b505af1158015613cdb573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d009190614033565b5050505050565b600081359050613d1681614e00565b92915050565b600081519050613d2b81614e00565b92915050565b600081359050613d4081614e17565b92915050565b600081359050613d5581614e2e565b92915050565b600081519050613d6a81614e2e565b92915050565b600081359050613d7f81614e45565b92915050565b600081359050613d9481614e5c565b92915050565b600081519050613da981614e5c565b92915050565b600060208284031215613dc157600080fd5b6000613dcf84828501613d07565b91505092915050565b600060208284031215613dea57600080fd5b6000613df884828501613d1c565b91505092915050565b600060208284031215613e1357600080fd5b6000613e2184828501613d31565b91505092915050565b60008060408385031215613e3d57600080fd5b6000613e4b85828601613d31565b9250506020613e5c85828601613d46565b9150509250929050565b60008060408385031215613e7957600080fd5b6000613e8785828601613d07565b9250506020613e9885828601613d07565b9150509250929050565b600080600060608486031215613eb757600080fd5b6000613ec586828701613d07565b9350506020613ed686828701613d07565b9250506040613ee786828701613d85565b9150509250925092565b60008060408385031215613f0457600080fd5b6000613f1285828601613d07565b9250506020613f2385828601613d46565b9150509250929050565b60008060408385031215613f4057600080fd5b6000613f4e85828601613d07565b9250506020613f5f85828601613d85565b9150509250929050565b600060208284031215613f7b57600080fd5b6000613f8984828501613d46565b91505092915050565b600060208284031215613fa457600080fd5b6000613fb284828501613d5b565b91505092915050565b600080600060608486031215613fd057600080fd5b6000613fde86828701613d70565b9350506020613fef86828701613d31565b925050604061400086828701613d85565b9150509250925092565b60006020828403121561401c57600080fd5b600061402a84828501613d85565b91505092915050565b60008060006060848603121561404857600080fd5b600061405686828701613d9a565b935050602061406786828701613d9a565b925050604061407886828701613d9a565b9150509250925092565b600061408e83836140b8565b60208301905092915050565b6140a381614cb5565b82525050565b6140b281614c5b565b82525050565b6140c181614c49565b82525050565b6140d081614c49565b82525050565b60006140e182614aef565b6140eb8185614b12565b93506140f683614adf565b8060005b8381101561412757815161410e8882614082565b975061411983614b05565b9250506001810190506140fa565b5085935050505092915050565b61413d81614c6d565b82525050565b61414c81614cc7565b82525050565b600061415d82614afa565b6141678185614b23565b9350614177818560208601614cfd565b61418081614def565b840191505092915050565b6000614198602383614b23565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141fe602683614b23565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614264602283614b23565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142ca603983614b23565b91507f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008301527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006020830152604082019050919050565b6000614330602683614b23565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614396603683614b23565b91507f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008301527f206d61785472616e73616374696f6e416d6f756e742e000000000000000000006020830152604082019050919050565b60006143fc603283614b23565b91507f45524332303a207472616e73666572656420616d6f756e74206d75737420626560008301527f2067726561746572207468616e207a65726f00000000000000000000000000006020830152604082019050919050565b6000614462601d83614b23565b91507f43616e742074726164652c2074726164652069732064697361626c65640000006000830152602082019050919050565b60006144a2603583614b23565b91507f427579207472616e7366657220616d6f756e742065786365656473207468652060008301527f6d61785472616e73616374696f6e416d6f756e742e00000000000000000000006020830152604082019050919050565b6000614508602883614b23565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206160008301527f6c6c6f77616e63650000000000000000000000000000000000000000000000006020830152604082019050919050565b600061456e602083614b23565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006145ae601b83614b23565b91507f556e61626c6520746f20657863656564204d61782057616c6c657400000000006000830152602082019050919050565b60006145ee601883614b23565b91507f4e6f20626f747320616c6c6f77656420746f20747261646500000000000000006000830152602082019050919050565b600061462e602583614b23565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614694602483614b23565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6146f681614cab565b82525050565b600060208201905061471160008301846140c7565b92915050565b600060208201905061472c60008301846140a9565b92915050565b6000604082019050614747600083018561409a565b61475460208301846146ed565b9392505050565b600060c08201905061477060008301896140c7565b61477d60208301886146ed565b61478a6040830187614143565b6147976060830186614143565b6147a460808301856140c7565b6147b160a08301846146ed565b979650505050505050565b60006020820190506147d16000830184614134565b92915050565b600060208201905081810360008301526147f18184614152565b905092915050565b600060208201905081810360008301526148128161418b565b9050919050565b60006020820190508181036000830152614832816141f1565b9050919050565b6000602082019050818103600083015261485281614257565b9050919050565b60006020820190508181036000830152614872816142bd565b9050919050565b6000602082019050818103600083015261489281614323565b9050919050565b600060208201905081810360008301526148b281614389565b9050919050565b600060208201905081810360008301526148d2816143ef565b9050919050565b600060208201905081810360008301526148f281614455565b9050919050565b6000602082019050818103600083015261491281614495565b9050919050565b60006020820190508181036000830152614932816144fb565b9050919050565b6000602082019050818103600083015261495281614561565b9050919050565b60006020820190508181036000830152614972816145a1565b9050919050565b60006020820190508181036000830152614992816145e1565b9050919050565b600060208201905081810360008301526149b281614621565b9050919050565b600060208201905081810360008301526149d281614687565b9050919050565b60006020820190506149ee60008301846146ed565b92915050565b600060a082019050614a0960008301886146ed565b614a166020830187614143565b8181036040830152614a2881866140d6565b9050614a37606083018561409a565b614a4460808301846146ed565b9695505050505050565b600060a082019050614a6360008301886146ed565b614a706020830187614143565b8181036040830152614a8281866140d6565b9050614a9160608301856140c7565b614a9e60808301846146ed565b9695505050505050565b6000606082019050614abd60008301866146ed565b614aca60208301856146ed565b614ad760408301846146ed565b949350505050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614b3f82614cab565b9150614b4a83614cab565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614b7f57614b7e614d62565b5b828201905092915050565b6000614b9582614cab565b9150614ba083614cab565b925082614bb057614baf614d91565b5b828204905092915050565b6000614bc682614cab565b9150614bd183614cab565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c0a57614c09614d62565b5b828202905092915050565b6000614c2082614cab565b9150614c2b83614cab565b925082821015614c3e57614c3d614d62565b5b828203905092915050565b6000614c5482614c8b565b9050919050565b6000614c6682614c8b565b9050919050565b60008115159050919050565b6000614c8482614c49565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614cc082614cd9565b9050919050565b6000614cd282614cab565b9050919050565b6000614ce482614ceb565b9050919050565b6000614cf682614c8b565b9050919050565b60005b83811015614d1b578082015181840152602081019050614d00565b83811115614d2a576000848401525b50505050565b60006002820490506001821680614d4857607f821691505b60208210811415614d5c57614d5b614dc0565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b614e0981614c49565b8114614e1457600080fd5b50565b614e2081614c5b565b8114614e2b57600080fd5b50565b614e3781614c6d565b8114614e4257600080fd5b50565b614e4e81614c79565b8114614e5957600080fd5b50565b614e6581614cab565b8114614e7057600080fd5b5056fea264697066735822122075ccbae8438c6842f91d63c2f7f0699b797a0d91152622c1470223b11b21342664736f6c63430008000033

Deployed Bytecode

0x60806040526004361061036f5760003560e01c80638cd0260c116101c6578063bf9b0159116100f7578063dd62ed3e11610095578063edcf19b21161006f578063edcf19b214610c57578063f2fde38b14610c80578063f7da678514610ca9578063f953cf3a14610cd257610376565b8063dd62ed3e14610bc4578063ddcf9b9814610c01578063e1370dd314610c2c57610376565b8063cba0e996116100d1578063cba0e99614610b0a578063d1294d4c14610b47578063d15bcf0f14610b70578063d7d7442f14610b9b57610376565b8063bf9b015914610a8d578063bf9eb54014610ab8578063cb66453414610ae157610376565b8063a5ece94111610164578063a9059cbb1161013e578063a9059cbb146109d3578063b195b83914610a10578063b4d95a9314610a27578063b62496f514610a5057610376565b8063a5ece94114610956578063a6c38f5914610981578063a7a07452146109aa57610376565b806395d89b41116101a057806395d89b41146108ac5780639a7a23d6146108d75780639b136da414610900578063a04bdc811461092b57610376565b80638cd0260c1461082d5780638da5cb5b1461085657806390f502831461088157610376565b80634a62bb65116102a05780636df3333a1161023e578063751039fc11610218578063751039fc14610799578063801527ce146107b05780638628c23f146107d9578063893d20e81461080257610376565b80636df3333a1461071a57806370a0823114610745578063715018a61461078257610376565b80635297defd1161027a5780635297defd146106725780635be76f111461069d57806364c16163146106c65780636573c4df146106f157610376565b80634a62bb65146105f15780634a74bb021461061c5780634bd7ace51461064757610376565b806323b872dd1161030d578063313ce567116102e7578063313ce56714610547578063487a69051461057257806349bd5a5e1461059d5780634a0e963c146105c857610376565b806323b872dd146104b657806327c8f835146104f35780632d03420b1461051e57610376565b806313b4a7f41161034957806313b4a7f41461040c57806318160ddd14610435578063220f66961461046057806322788f861461048b57610376565b806306fdde031461037b5780630882a863146103a6578063095ea7b3146103cf57610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610ce9565b60405161039d91906147d7565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c8919061400a565b610d7b565b005b3480156103db57600080fd5b506103f660048036038101906103f19190613f2d565b610e01565b60405161040391906147bc565b60405180910390f35b34801561041857600080fd5b50610433600480360381019061042e9190613e66565b610e1f565b005b34801561044157600080fd5b5061044a610fff565b60405161045791906149d9565b60405180910390f35b34801561046c57600080fd5b50610475611009565b60405161048291906147bc565b60405180910390f35b34801561049757600080fd5b506104a061101c565b6040516104ad91906149d9565b60405180910390f35b3480156104c257600080fd5b506104dd60048036038101906104d89190613ea2565b611026565b6040516104ea91906147bc565b60405180910390f35b3480156104ff57600080fd5b506105086111a4565b60405161051591906146fc565b60405180910390f35b34801561052a57600080fd5b5061054560048036038101906105409190613f69565b6111c8565b005b34801561055357600080fd5b5061055c611261565b60405161056991906149d9565b60405180910390f35b34801561057e57600080fd5b5061058761127b565b60405161059491906149d9565b60405180910390f35b3480156105a957600080fd5b506105b2611285565b6040516105bf91906146fc565b60405180910390f35b3480156105d457600080fd5b506105ef60048036038101906105ea9190613daf565b6112ab565b005b3480156105fd57600080fd5b50610606611382565b60405161061391906147bc565b60405180910390f35b34801561062857600080fd5b50610631611395565b60405161063e91906147bc565b60405180910390f35b34801561065357600080fd5b5061065c6113a8565b60405161066991906149d9565b60405180910390f35b34801561067e57600080fd5b506106876113b2565b60405161069491906149d9565b60405180910390f35b3480156106a957600080fd5b506106c460048036038101906106bf9190613e01565b6113bc565b005b3480156106d257600080fd5b506106db611488565b6040516106e891906149d9565b60405180910390f35b3480156106fd57600080fd5b506107186004803603810190610713919061400a565b611492565b005b34801561072657600080fd5b5061072f61153a565b60405161073c91906149d9565b60405180910390f35b34801561075157600080fd5b5061076c60048036038101906107679190613daf565b611544565b60405161077991906149d9565b60405180910390f35b34801561078e57600080fd5b5061079761158d565b005b3480156107a557600080fd5b506107ae611615565b005b3480156107bc57600080fd5b506107d760048036038101906107d29190613f69565b6116ae565b005b3480156107e557600080fd5b5061080060048036038101906107fb919061400a565b611747565b005b34801561080e57600080fd5b506108176117cd565b60405161082491906146fc565b60405180910390f35b34801561083957600080fd5b50610854600480360381019061084f919061400a565b6117dc565b005b34801561086257600080fd5b5061086b611862565b60405161087891906146fc565b60405180910390f35b34801561088d57600080fd5b5061089661188b565b6040516108a391906149d9565b60405180910390f35b3480156108b857600080fd5b506108c1611895565b6040516108ce91906147d7565b60405180910390f35b3480156108e357600080fd5b506108fe60048036038101906108f99190613ef1565b611927565b005b34801561090c57600080fd5b50610915611a42565b60405161092291906149d9565b60405180910390f35b34801561093757600080fd5b50610940611a4c565b60405161094d91906149d9565b60405180910390f35b34801561096257600080fd5b5061096b611a52565b6040516109789190614717565b60405180910390f35b34801561098d57600080fd5b506109a860048036038101906109a39190613e2a565b611a78565b005b3480156109b657600080fd5b506109d160048036038101906109cc919061400a565b611b4f565b005b3480156109df57600080fd5b506109fa60048036038101906109f59190613f2d565b611bf7565b604051610a0791906147bc565b60405180910390f35b348015610a1c57600080fd5b50610a25611c15565b005b348015610a3357600080fd5b50610a4e6004803603810190610a499190613daf565b611cbd565b005b348015610a5c57600080fd5b50610a776004803603810190610a729190613daf565b611d94565b604051610a8491906147bc565b60405180910390f35b348015610a9957600080fd5b50610aa2611db4565b604051610aaf91906149d9565b60405180910390f35b348015610ac457600080fd5b50610adf6004803603810190610ada9190613daf565b611dbe565b005b348015610aed57600080fd5b50610b086004803603810190610b039190613daf565b611e7e565b005b348015610b1657600080fd5b50610b316004803603810190610b2c9190613daf565b611f55565b604051610b3e91906147bc565b60405180910390f35b348015610b5357600080fd5b50610b6e6004803603810190610b69919061400a565b611fab565b005b348015610b7c57600080fd5b50610b85612054565b604051610b9291906147bc565b60405180910390f35b348015610ba757600080fd5b50610bc26004803603810190610bbd919061400a565b61206b565b005b348015610bd057600080fd5b50610beb6004803603810190610be69190613e66565b6120f1565b604051610bf891906149d9565b60405180910390f35b348015610c0d57600080fd5b50610c16612178565b604051610c2391906149d9565b60405180910390f35b348015610c3857600080fd5b50610c41612182565b604051610c4e91906149d9565b60405180910390f35b348015610c6357600080fd5b50610c7e6004803603810190610c79919061400a565b61218c565b005b348015610c8c57600080fd5b50610ca76004803603810190610ca29190613daf565b612212565b005b348015610cb557600080fd5b50610cd06004803603810190610ccb9190613fbb565b61230a565b005b348015610cde57600080fd5b50610ce7612419565b005b606060018054610cf890614d30565b80601f0160208091040260200160405190810160405280929190818152602001828054610d2490614d30565b8015610d715780601f10610d4657610100808354040283529160200191610d71565b820191906000526020600020905b815481529060010190602001808311610d5457829003601f168201915b5050505050905090565b610d836124c1565b73ffffffffffffffffffffffffffffffffffffffff16610da1611862565b73ffffffffffffffffffffffffffffffffffffffff1614610df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dee90614939565b60405180910390fd5b8060198190555050565b6000610e15610e0e6124c1565b84846124c9565b6001905092915050565b610e276124c1565b73ffffffffffffffffffffffffffffffffffffffff16610e45611862565b73ffffffffffffffffffffffffffffffffffffffff1614610e9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9290614939565b60405180910390fd5b6001601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600a54905090565b602260009054906101000a900460ff1681565b6000600954905090565b6000600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110716124c1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211156110ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e590614919565b60405180910390fd5b6110f9848484612694565b611199846111056124c1565b84600e60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061114f6124c1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111949190614c15565b6124c9565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b6111d06124c1565b73ffffffffffffffffffffffffffffffffffffffff166111ee611862565b73ffffffffffffffffffffffffffffffffffffffff1614611244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123b90614939565b60405180910390fd5b80601d60006101000a81548160ff02191690831515021790555050565b6000600360009054906101000a900460ff1660ff16905090565b6000600b54905090565b602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112b36124c1565b73ffffffffffffffffffffffffffffffffffffffff166112d1611862565b73ffffffffffffffffffffffffffffffffffffffff1614611327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131e90614939565b60405180910390fd5b6001600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600860009054906101000a900460ff1681565b602260019054906101000a900460ff1681565b6000601954905090565b6000602054905090565b6113c46124c1565b73ffffffffffffffffffffffffffffffffffffffff166113e2611862565b73ffffffffffffffffffffffffffffffffffffffff1614611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142f90614939565b60405180910390fd5b60004790508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611483573d6000803e3d6000fd5b505050565b6000602454905090565b61149a6124c1565b73ffffffffffffffffffffffffffffffffffffffff166114b8611862565b73ffffffffffffffffffffffffffffffffffffffff161461150e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150590614939565b60405180910390fd5b806005819055506064600554600a546115279190614bbb565b6115319190614b8a565b60138190555050565b6000600754905090565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115956124c1565b73ffffffffffffffffffffffffffffffffffffffff166115b3611862565b73ffffffffffffffffffffffffffffffffffffffff1614611609576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160090614939565b60405180910390fd5b61161360006133ca565b565b61161d6124c1565b73ffffffffffffffffffffffffffffffffffffffff1661163b611862565b73ffffffffffffffffffffffffffffffffffffffff1614611691576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168890614939565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550565b6116b66124c1565b73ffffffffffffffffffffffffffffffffffffffff166116d4611862565b73ffffffffffffffffffffffffffffffffffffffff161461172a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172190614939565b60405180910390fd5b80602260016101000a81548160ff02191690831515021790555050565b61174f6124c1565b73ffffffffffffffffffffffffffffffffffffffff1661176d611862565b73ffffffffffffffffffffffffffffffffffffffff16146117c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ba90614939565b60405180910390fd5b8060208190555050565b60006117d7611862565b905090565b6117e46124c1565b73ffffffffffffffffffffffffffffffffffffffff16611802611862565b73ffffffffffffffffffffffffffffffffffffffff1614611858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184f90614939565b60405180910390fd5b80601e8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000601e54905090565b6060600280546118a490614d30565b80601f01602080910402602001604051908101604052809291908181526020018280546118d090614d30565b801561191d5780601f106118f25761010080835404028352916020019161191d565b820191906000526020600020905b81548152906001019060200180831161190057829003601f168201915b5050505050905090565b61192f6124c1565b73ffffffffffffffffffffffffffffffffffffffff1661194d611862565b73ffffffffffffffffffffffffffffffffffffffff16146119a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199a90614939565b60405180910390fd5b602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2b90614859565b60405180910390fd5b611a3e828261348e565b5050565b6000601b54905090565b600b5481565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611a806124c1565b73ffffffffffffffffffffffffffffffffffffffff16611a9e611862565b73ffffffffffffffffffffffffffffffffffffffff1614611af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aeb90614939565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611b576124c1565b73ffffffffffffffffffffffffffffffffffffffff16611b75611862565b73ffffffffffffffffffffffffffffffffffffffff1614611bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc290614939565b60405180910390fd5b806006819055506064600654600a54611be49190614bbb565b611bee9190614b8a565b60148190555050565b6000611c0b611c046124c1565b8484612694565b6001905092915050565b611c1d6124c1565b73ffffffffffffffffffffffffffffffffffffffff16611c3b611862565b73ffffffffffffffffffffffffffffffffffffffff1614611c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8890614939565b60405180910390fd5b6005601b81905550600560208190555060026019819055506002601e81905550611cbb60006116ae565b565b611cc56124c1565b73ffffffffffffffffffffffffffffffffffffffff16611ce3611862565b73ffffffffffffffffffffffffffffffffffffffff1614611d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3090614939565b60405180910390fd5b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60106020528060005260406000206000915054906101000a900460ff1681565b6000601454905090565b611dc66124c1565b73ffffffffffffffffffffffffffffffffffffffff16611de4611862565b73ffffffffffffffffffffffffffffffffffffffff1614611e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3190614939565b60405180910390fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611e866124c1565b73ffffffffffffffffffffffffffffffffffffffff16611ea4611862565b73ffffffffffffffffffffffffffffffffffffffff1614611efa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef190614939565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611fb36124c1565b73ffffffffffffffffffffffffffffffffffffffff16611fd1611862565b73ffffffffffffffffffffffffffffffffffffffff1614612027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201e90614939565b60405180910390fd5b806007819055506103e8600754600a546120419190614bbb565b61204b9190614b8a565b600b8190555050565b6000601d60009054906101000a900460ff16905090565b6120736124c1565b73ffffffffffffffffffffffffffffffffffffffff16612091611862565b73ffffffffffffffffffffffffffffffffffffffff16146120e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120de90614939565b60405180910390fd5b8060098190555050565b6000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000602354905090565b6000601354905090565b6121946124c1565b73ffffffffffffffffffffffffffffffffffffffff166121b2611862565b73ffffffffffffffffffffffffffffffffffffffff1614612208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ff90614939565b60405180910390fd5b80601b8190555050565b61221a6124c1565b73ffffffffffffffffffffffffffffffffffffffff16612238611862565b73ffffffffffffffffffffffffffffffffffffffff161461228e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228590614939565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156122fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f590614819565b60405180910390fd5b612307816133ca565b50565b6123126124c1565b73ffffffffffffffffffffffffffffffffffffffff16612330611862565b73ffffffffffffffffffffffffffffffffffffffff1614612386576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237d90614939565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016123c1929190614732565b602060405180830381600087803b1580156123db57600080fd5b505af11580156123ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124139190613f92565b50505050565b6124216124c1565b73ffffffffffffffffffffffffffffffffffffffff1661243f611862565b73ffffffffffffffffffffffffffffffffffffffff1614612495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248c90614939565b60405180910390fd5b6005601b81905550600260198190555060056020819055506002601e819055506124bf60016116ae565b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612539576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612530906149b9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a090614839565b60405180910390fd5b80600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161268791906149d9565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fb90614999565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276b906147f9565b60405180910390fd5b600081116127b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ae906148b9565b60405180910390fd5b6000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561283e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283590614879565b60405180910390fd5b60001515601d60009054906101000a900460ff161515141561293b57601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128fb5750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61293a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612931906148d9565b60405180910390fd5b5b600860009054906101000a900460ff1615612d2857612958611862565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156129c65750612996611862565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156129ff5750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612a39575061dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612d2757601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ae15750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b8857601454821115612b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b22906148f9565b60405180910390fd5b601354612b3784611544565b83612b429190614b34565b1115612b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7a90614959565b60405180910390fd5b612d26565b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c2b5750600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c7a57601454821115612c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6c90614899565b60405180910390fd5b612d25565b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d2457601354612cd784611544565b83612ce29190614b34565b1115612d23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1a90614959565b60405180910390fd5b5b5b5b5b5b6000612d3330611544565b9050600b548110158015612d545750602260009054906101000a900460ff16155b8015612dae5750602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612dc65750602260019054906101000a900460ff165b15612de457600b548110612de357600b549050612de28161352f565b5b5b600060019050600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e8b5750600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e9d576000600481905550600090505b60008082156131995760011515601560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151480612f55575060011515601560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b15612f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8c90614979565b60405180910390fd5b601060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561303c5750602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614155b156130985760006004819055506064602054876130599190614bbb565b6130639190614b8a565b91506064601e54876130759190614bbb565b61307f9190614b8a565b9050808261308d9190614b34565b600481905550613198565b601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561313f5750602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b156131975760006004819055506064601b548761315c9190614bbb565b6131669190614b8a565b91506064601954876131789190614bbb565b6131829190614b8a565b905080826131909190614b34565b6004819055505b5b5b85856131a59190614c15565b600c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508082876131f59190614c15565b6131ff9190614c15565b600c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461324d9190614b34565b925050819055506000811461334e57600454600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132ad9190614b34565b9250508190555080602460008282546132c69190614b34565b9250508190555081602360008282546132df9190614b34565b925050819055503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60045460405161334591906149d9565b60405180910390a35b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600454896133ab9190614c15565b6040516133b891906149d9565b60405180910390a35050505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6001602260006101000a81548160ff0219169083151502179055506135556024546135c5565b613560602354613650565b7f4596ef7337c1c88bb740707471cfc0ec6d0212036b05ab1bdbb09cf3e3f019048160405161358f91906149d9565b60405180910390a1600060238190555060006024819055506000602260006101000a81548160ff02191690831515021790555050565b60006002826135d49190614b8a565b9050600081836135e49190614c15565b905060004790506135f483613936565b600081476136029190614c15565b905061360e8382613bfa565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405161364193929190614aa8565b60405180910390a15050505050565b6000600267ffffffffffffffff811115613693577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156136c15781602001602082028036833780820191505090505b50905030816000815181106136ff577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156137a157600080fd5b505afa1580156137b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137d99190613dd8565b81600181518110613813577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061387a30602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846124c9565b602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b81526004016139009594939291906149f4565b600060405180830381600087803b15801561391a57600080fd5b505af115801561392e573d6000803e3d6000fd5b505050505050565b6000600267ffffffffffffffff811115613979577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156139a75781602001602082028036833780820191505090505b50905030816000815181106139e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613a8757600080fd5b505afa158015613a9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613abf9190613dd8565b81600181518110613af9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b6030602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846124c9565b602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613bc4959493929190614a4e565b600060405180830381600087803b158015613bde57600080fd5b505af1158015613bf2573d6000803e3d6000fd5b505050505050565b613c2730602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846124c9565b602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000807f000000000000000000000000000000000000000000000000000000000000dead426040518863ffffffff1660e01b8152600401613cae9695949392919061475b565b6060604051808303818588803b158015613cc757600080fd5b505af1158015613cdb573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d009190614033565b5050505050565b600081359050613d1681614e00565b92915050565b600081519050613d2b81614e00565b92915050565b600081359050613d4081614e17565b92915050565b600081359050613d5581614e2e565b92915050565b600081519050613d6a81614e2e565b92915050565b600081359050613d7f81614e45565b92915050565b600081359050613d9481614e5c565b92915050565b600081519050613da981614e5c565b92915050565b600060208284031215613dc157600080fd5b6000613dcf84828501613d07565b91505092915050565b600060208284031215613dea57600080fd5b6000613df884828501613d1c565b91505092915050565b600060208284031215613e1357600080fd5b6000613e2184828501613d31565b91505092915050565b60008060408385031215613e3d57600080fd5b6000613e4b85828601613d31565b9250506020613e5c85828601613d46565b9150509250929050565b60008060408385031215613e7957600080fd5b6000613e8785828601613d07565b9250506020613e9885828601613d07565b9150509250929050565b600080600060608486031215613eb757600080fd5b6000613ec586828701613d07565b9350506020613ed686828701613d07565b9250506040613ee786828701613d85565b9150509250925092565b60008060408385031215613f0457600080fd5b6000613f1285828601613d07565b9250506020613f2385828601613d46565b9150509250929050565b60008060408385031215613f4057600080fd5b6000613f4e85828601613d07565b9250506020613f5f85828601613d85565b9150509250929050565b600060208284031215613f7b57600080fd5b6000613f8984828501613d46565b91505092915050565b600060208284031215613fa457600080fd5b6000613fb284828501613d5b565b91505092915050565b600080600060608486031215613fd057600080fd5b6000613fde86828701613d70565b9350506020613fef86828701613d31565b925050604061400086828701613d85565b9150509250925092565b60006020828403121561401c57600080fd5b600061402a84828501613d85565b91505092915050565b60008060006060848603121561404857600080fd5b600061405686828701613d9a565b935050602061406786828701613d9a565b925050604061407886828701613d9a565b9150509250925092565b600061408e83836140b8565b60208301905092915050565b6140a381614cb5565b82525050565b6140b281614c5b565b82525050565b6140c181614c49565b82525050565b6140d081614c49565b82525050565b60006140e182614aef565b6140eb8185614b12565b93506140f683614adf565b8060005b8381101561412757815161410e8882614082565b975061411983614b05565b9250506001810190506140fa565b5085935050505092915050565b61413d81614c6d565b82525050565b61414c81614cc7565b82525050565b600061415d82614afa565b6141678185614b23565b9350614177818560208601614cfd565b61418081614def565b840191505092915050565b6000614198602383614b23565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141fe602683614b23565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614264602283614b23565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142ca603983614b23565b91507f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008301527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006020830152604082019050919050565b6000614330602683614b23565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614396603683614b23565b91507f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008301527f206d61785472616e73616374696f6e416d6f756e742e000000000000000000006020830152604082019050919050565b60006143fc603283614b23565b91507f45524332303a207472616e73666572656420616d6f756e74206d75737420626560008301527f2067726561746572207468616e207a65726f00000000000000000000000000006020830152604082019050919050565b6000614462601d83614b23565b91507f43616e742074726164652c2074726164652069732064697361626c65640000006000830152602082019050919050565b60006144a2603583614b23565b91507f427579207472616e7366657220616d6f756e742065786365656473207468652060008301527f6d61785472616e73616374696f6e416d6f756e742e00000000000000000000006020830152604082019050919050565b6000614508602883614b23565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206160008301527f6c6c6f77616e63650000000000000000000000000000000000000000000000006020830152604082019050919050565b600061456e602083614b23565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006145ae601b83614b23565b91507f556e61626c6520746f20657863656564204d61782057616c6c657400000000006000830152602082019050919050565b60006145ee601883614b23565b91507f4e6f20626f747320616c6c6f77656420746f20747261646500000000000000006000830152602082019050919050565b600061462e602583614b23565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614694602483614b23565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6146f681614cab565b82525050565b600060208201905061471160008301846140c7565b92915050565b600060208201905061472c60008301846140a9565b92915050565b6000604082019050614747600083018561409a565b61475460208301846146ed565b9392505050565b600060c08201905061477060008301896140c7565b61477d60208301886146ed565b61478a6040830187614143565b6147976060830186614143565b6147a460808301856140c7565b6147b160a08301846146ed565b979650505050505050565b60006020820190506147d16000830184614134565b92915050565b600060208201905081810360008301526147f18184614152565b905092915050565b600060208201905081810360008301526148128161418b565b9050919050565b60006020820190508181036000830152614832816141f1565b9050919050565b6000602082019050818103600083015261485281614257565b9050919050565b60006020820190508181036000830152614872816142bd565b9050919050565b6000602082019050818103600083015261489281614323565b9050919050565b600060208201905081810360008301526148b281614389565b9050919050565b600060208201905081810360008301526148d2816143ef565b9050919050565b600060208201905081810360008301526148f281614455565b9050919050565b6000602082019050818103600083015261491281614495565b9050919050565b60006020820190508181036000830152614932816144fb565b9050919050565b6000602082019050818103600083015261495281614561565b9050919050565b60006020820190508181036000830152614972816145a1565b9050919050565b60006020820190508181036000830152614992816145e1565b9050919050565b600060208201905081810360008301526149b281614621565b9050919050565b600060208201905081810360008301526149d281614687565b9050919050565b60006020820190506149ee60008301846146ed565b92915050565b600060a082019050614a0960008301886146ed565b614a166020830187614143565b8181036040830152614a2881866140d6565b9050614a37606083018561409a565b614a4460808301846146ed565b9695505050505050565b600060a082019050614a6360008301886146ed565b614a706020830187614143565b8181036040830152614a8281866140d6565b9050614a9160608301856140c7565b614a9e60808301846146ed565b9695505050505050565b6000606082019050614abd60008301866146ed565b614aca60208301856146ed565b614ad760408301846146ed565b949350505050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614b3f82614cab565b9150614b4a83614cab565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614b7f57614b7e614d62565b5b828201905092915050565b6000614b9582614cab565b9150614ba083614cab565b925082614bb057614baf614d91565b5b828204905092915050565b6000614bc682614cab565b9150614bd183614cab565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c0a57614c09614d62565b5b828202905092915050565b6000614c2082614cab565b9150614c2b83614cab565b925082821015614c3e57614c3d614d62565b5b828203905092915050565b6000614c5482614c8b565b9050919050565b6000614c6682614c8b565b9050919050565b60008115159050919050565b6000614c8482614c49565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614cc082614cd9565b9050919050565b6000614cd282614cab565b9050919050565b6000614ce482614ceb565b9050919050565b6000614cf682614c8b565b9050919050565b60005b83811015614d1b578082015181840152602081019050614d00565b83811115614d2a576000848401525b50505050565b60006002820490506001821680614d4857607f821691505b60208210811415614d5c57614d5b614dc0565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b614e0981614c49565b8114614e1457600080fd5b50565b614e2081614c5b565b8114614e2b57600080fd5b50565b614e3781614c6d565b8114614e4257600080fd5b50565b614e4e81614c79565b8114614e5957600080fd5b50565b614e6581614cab565b8114614e7057600080fd5b5056fea264697066735822122075ccbae8438c6842f91d63c2f7f0699b797a0d91152622c1470223b11b21342664736f6c63430008000033

Deployed Bytecode Sourcemap

5489:16497:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10308:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20804:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9955:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19103:302;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9365:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7324:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11807:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10848:388;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7406:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17301:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10218:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21878:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7917:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18857:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5826:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7359:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11380:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11697:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17115:178;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9257:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10659:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21775:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9482:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4854:94;;;;;;;;;;;;;:::i;:::-;;10129:81;;;;;;;;;;;;;:::i;:::-;;19956:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21166:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9054:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21047:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4203:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11593:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10390:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20360:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11482:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6074:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6489:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11244:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10488:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9611:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19413:205;;;;;;;;;;;;;:::i;:::-;;18979:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6403:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21397:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20107:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16322:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11914:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21492:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21672:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19836:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9798:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9146:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21294:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20921:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5103:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16864:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19624:204;;;;;;;;;;;;;:::i;:::-;;10308:76;10347:13;10374:5;10367:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10308:76;:::o;20804:111::-;4434:12;:10;:12::i;:::-;4423:23;;:7;:5;:7::i;:::-;:23;;;4415:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20898:9:::1;20886;:21;;;;20804:111:::0;:::o;9955:168::-;10032:4;10052:37;10061:12;:10;:12::i;:::-;10074:7;10082:6;10052:8;:37::i;:::-;10111:4;10104:11;;9955:168;;;;:::o;19103:302::-;4434:12;:10;:12::i;:::-;4423:23;;:7;:5;:7::i;:::-;:23;;;4415:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19246:4:::1;19209:17;:34;19235:6;19209:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;19290:4;19261:17;:26;19279:7;19261:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;19341:4;19305:16;:33;19330:6;19305:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;19384:4;19356:16;:25;19373:7;19356:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;19103:302:::0;;:::o;9365:106::-;9420:7;9450:12;;9443:19;;9365:106;:::o;7324:28::-;;;;;;;;;;;;;:::o;11807:101::-;11858:7;11884:16;;11877:23;;11807:101;:::o;10848:388::-;10980:4;11014:11;:19;11026:6;11014:19;;;;;;;;;;;;;;;:33;11034:12;:10;:12::i;:::-;11014:33;;;;;;;;;;;;;;;;11004:6;:43;;10996:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;11097:36;11107:6;11115:9;11126:6;11097:9;:36::i;:::-;11138:74;11147:6;11155:12;:10;:12::i;:::-;11205:6;11169:11;:19;11181:6;11169:19;;;;;;;;;;;;;;;:33;11189:12;:10;:12::i;:::-;11169:33;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;11138:8;:74::i;:::-;11224:4;11217:11;;10848:388;;;;;:::o;7406:81::-;;;:::o;17301:90::-;4434:12;:10;:12::i;:::-;4423:23;;:7;:5;:7::i;:::-;:23;;;4415:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17377:6:::1;17362:12;;:21;;;;;;;;;;;;;;;;;;17301:90:::0;:::o;10218:84::-;10259:7;10285:9;;;;;;;;;;;10278:16;;;;10218:84;:::o;21878:105::-;21929:7;21955:20;;21948:27;;21878:105;:::o;7917:28::-;;;;;;;;;;;;;:::o;18857:114::-;4434:12;:10;:12::i;:::-;4423:23;;:7;:5;:7::i;:::-;:23;;;4415:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18959:4:::1;18928:17;:28;18946:9;18928:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;18857:114:::0;:::o;5826:33::-;;;;;;;;;;;;;:::o;7359:40::-;;;;;;;;;;;;;:::o;11380:96::-;11429:7;11459:9;;11452:16;;11380:96;:::o;11697:98::-;11747:7;11777:10;;11770:17;;11697:98;:::o;17115:178::-;4434:12;:10;:12::i;:::-;4423:23;;:7;:5;:7::i;:::-;:23;;;4415:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17191:18:::1;17212:21;17191:42;;17252:11;17244:29;;:41;17274:10;17244:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;4494:1;17115:178:::0;:::o;9257:99::-;9308:7;9338:9;;9331:16;;9257:99;:::o;10659:175::-;4434:12;:10;:12::i;:::-;4423:23;;:7;:5;:7::i;:::-;:23;;;4415:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10755:6:::1;10735:17;:26;;;;10821:3;10803:17;;10790:12;;:30;;;;:::i;:::-;:34;;;;:::i;:::-;10772:15;:52;;;;10659:175:::0;:::o;21775:97::-;21826:7;21852:12;;21845:19;;21775:97;:::o;9482:118::-;9548:7;9574:9;:18;9584:7;9574:18;;;;;;;;;;;;;;;;9567:25;;9482:118;;;:::o;4854:94::-;4434:12;:10;:12::i;:::-;4423:23;;:7;:5;:7::i;:::-;:23;;;4415:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4919:21:::1;4937:1;4919:9;:21::i;:::-;4854:94::o:0;10129:81::-;4434:12;:10;:12::i;:::-;4423:23;;:7;:5;:7::i;:::-;:23;;;4415:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10197:5:::1;10180:14;;:22;;;;;;;;;;;;;;;;;;10129:81::o:0;19956:113::-;4434:12;:10;:12::i;:::-;4423:23;;:7;:5;:7::i;:::-;:23;;;4415:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20053:8:::1;20029:21;;:32;;;;;;;;;;;;;;;;;;19956:113:::0;:::o;21166:112::-;4434:12;:10;:12::i;:::-;4423:23;;:7;:5;:7::i;:::-;:23;;;4415:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21261:9:::1;21249:10;:21;;;;21166:112:::0;:::o;9054:86::-;9095:7;9125;:5;:7::i;:::-;9118:14;;9054:86;:::o;21047:113::-;4434:12;:10;:12::i;:::-;4423:23;;:7;:5;:7::i;:::-;:23;;;4415:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21143:9:::1;21131:10;:21;;;;21047:113:::0;:::o;4203:87::-;4249:7;4276:6;;;;;;;;;;;4269:13;;4203:87;:::o;11593:98::-;11643:7;11673:10;;11666:17;;11593:98;:::o;10390:88::-;10431:13;10463:7;10456:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10390:88;:::o;20360:242::-;4434:12;:10;:12::i;:::-;4423:23;;:7;:5;:7::i;:::-;:23;;;4415:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20467:13:::1;;;;;;;;;;;20459:21;;:4;:21;;;;20451:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;20553:41;20582:4;20588:5;20553:28;:41::i;:::-;20360:242:::0;;:::o;11482:96::-;11531:7;11561:9;;11554:16;;11482:96;:::o;6074:71::-;;;;:::o;6489:93::-;;;;;;;;;;;;;:::o;11244:130::-;4434:12;:10;:12::i;:::-;4423:23;;:7;:5;:7::i;:::-;:23;;;4415:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11361:5:::1;11335:10;:23;11346:11;11335:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;11244:130:::0;;:::o;10488:164::-;4434:12;:10;:12::i;:::-;4423:23;;:7;:5;:7::i;:::-;:23;;;4415:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10576:6:::1;10560:13;:22;;;;10634:3;10620:13;;10607:12;;:26;;;;:::i;:::-;:30;;;;:::i;:::-;10593:11;:44;;;;10488:164:::0;:::o;9611:176::-;9691:4;9711:40;9721:12;:10;:12::i;:::-;9734:9;9744:6;9711:9;:40::i;:::-;9773:4;9766:11;;9611:176;;;;:::o;19413:205::-;4434:12;:10;:12::i;:::-;4423:23;;:7;:5;:7::i;:::-;:23;;;4415:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19491:1:::1;19479:9;:13;;;;19515:1;19503:10;:13;;;;19538:1;19527:9;:12;;;;19562:1;19550:10;:13;;;;19584:24;19602:5;19584:17;:24::i;:::-;19413:205::o:0;18979:116::-;4434:12;:10;:12::i;:::-;4423:23;;:7;:5;:7::i;:::-;:23;;;4415:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19082:5:::1;19052:17;:27;19070:8;19052:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;18979:116:::0;:::o;6403:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;21397:89::-;21441:7;21467:11;;21460:18;;21397:89;:::o;20107:118::-;4434:12;:10;:12::i;:::-;4423:23;;:7;:5;:7::i;:::-;:23;;;4415:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20206:10:::1;20179:16;;:38;;;;;;;;;;;;;;;;;;20107:118:::0;:::o;16322:123::-;4434:12;:10;:12::i;:::-;4423:23;;:7;:5;:7::i;:::-;:23;;;4415:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16426:4:::1;16394:17;:29;16412:10;16394:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;16322:123:::0;:::o;11914:118::-;11971:4;11998:17;:26;12016:7;11998:26;;;;;;;;;;;;;;;;;;;;;;;;;11991:33;;11914:118;;;:::o;21492:174::-;4434:12;:10;:12::i;:::-;4423:23;;:7;:5;:7::i;:::-;:23;;;4415:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21578:6:::1;21563:12;:21;;;;21644:4;21631:12;;21618;;:25;;;;:::i;:::-;:30;;;;:::i;:::-;21595:20;:53;;;;21492:174:::0;:::o;21672:97::-;21723:4;21746:12;;;;;;;;;;;21739:19;;21672:97;:::o;19836:112::-;4434:12;:10;:12::i;:::-;4423:23;;:7;:5;:7::i;:::-;:23;;;4415:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19926:12:::1;19907:16;:31;;;;19836:112:::0;:::o;9798:148::-;9881:7;9911:11;:18;9923:5;9911:18;;;;;;;;;;;;;;;:27;9930:7;9911:27;;;;;;;;;;;;;;;;9904:34;;9798:148;;;;:::o;9146:99::-;9197:7;9227:9;;9220:16;;9146:99;:::o;21294:97::-;21342:7;21368:15;;21361:22;;21294:97;:::o;20921:111::-;4434:12;:10;:12::i;:::-;4423:23;;:7;:5;:7::i;:::-;:23;;;4415:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21015:9:::1;21004;:20;;;;20921:111:::0;:::o;5103:192::-;4434:12;:10;:12::i;:::-;4423:23;;:7;:5;:7::i;:::-;:23;;;4415:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5212:1:::1;5192:22;;:8;:22;;;;5184:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5268:19;5278:8;5268:9;:19::i;:::-;5103:192:::0;:::o;16864:243::-;4434:12;:10;:12::i;:::-;4423:23;;:7;:5;:7::i;:::-;:23;;;4415:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17057:12:::1;:21;;;17079:11;17092:6;17057:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16864:243:::0;;;:::o;19624:204::-;4434:12;:10;:12::i;:::-;4423:23;;:7;:5;:7::i;:::-;:23;;;4415:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19691:1:::1;19679:9;:13;;;;19715:1;19703:9;:13;;;;19750:1;19737:10;:14;;;;19775:1;19762:10;:14;;;;19797:23;19815:4;19797:17;:23::i;:::-;19624:204::o:0;163:98::-;216:7;243:10;236:17;;163:98;:::o;18489:322::-;18598:1;18581:19;;:5;:19;;;;18573:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18673:1;18654:21;;:7;:21;;;;18646:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18751:6;18721:11;:18;18733:5;18721:18;;;;;;;;;;;;;;;:27;18740:7;18721:27;;;;;;;;;;;;;;;:36;;;;18783:7;18767:32;;18776:5;18767:32;;;18792:6;18767:32;;;;;;:::i;:::-;;;;;;;;18489:322;;;:::o;12040:4007::-;12154:1;12138:18;;:4;:18;;;;12130:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12225:1;12211:16;;:2;:16;;;;12203:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;12295:1;12286:6;:10;12278:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;12361:21;12385:9;:15;12395:4;12385:15;;;;;;;;;;;;;;;;12361:39;;12436:6;12419:13;:23;;12411:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12515:5;12499:21;;:12;;;;;;;;;;;:21;;;12496:141;;;12544:17;:21;12562:2;12544:21;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;12569:17;:23;12587:4;12569:23;;;;;;;;;;;;;;;;;;;;;;;;;12544:48;12536:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;12496:141;12682:14;;;;;;;;;;;12679:1075;;;12742:7;:5;:7::i;:::-;12734:15;;:4;:15;;;;:49;;;;;12776:7;:5;:7::i;:::-;12770:13;;:2;:13;;;;12734:49;:86;;;;;12818:1;12804:16;;:2;:16;;;;12734:86;:128;;;;;12855:6;12841:21;;:2;:21;;;;12734:128;12712:1031;;;12948:25;:31;12974:4;12948:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;12984:31;:35;13016:2;12984:35;;;;;;;;;;;;;;;;;;;;;;;;;12983:36;12948:71;12944:784;;;13062:11;;13052:6;:21;;13044:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;13188:15;;13171:13;13181:2;13171:9;:13::i;:::-;13162:6;:22;;;;:::i;:::-;:41;;13154:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;12944:784;;;13336:25;:29;13362:2;13336:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;13370:31;:37;13402:4;13370:37;;;;;;;;;;;;;;;;;;;;;;;;;13369:38;13336:71;13332:396;;;13450:11;;13440:6;:21;;13432:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;13332:396;;;13567:31;:35;13599:2;13567:35;;;;;;;;;;;;;;;;;;;;;;;;;13563:165;;13661:15;;13644:13;13654:2;13644:9;:13::i;:::-;13635:6;:22;;;;:::i;:::-;:41;;13627:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;13563:165;13332:396;12944:784;12712:1031;12679:1075;13765:25;13793:24;13811:4;13793:9;:24::i;:::-;13765:52;;13853:20;;13833:17;:40;;:66;;;;;13883:16;;;;;;;;;;;13882:17;13833:66;:96;;;;;13916:13;;;;;;;;;;;13908:21;;:4;:21;;;;13833:96;:126;;;;;13938:21;;;;;;;;;;;13833:126;13830:352;;;14003:20;;13982:17;:41;13979:188;;14068:20;;14048:40;;14111:36;14129:17;14111;:36::i;:::-;13979:188;13830:352;14198:13;14214:4;14198:20;;14264:17;:23;14282:4;14264:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;14291:17;:21;14309:2;14291:21;;;;;;;;;;;;;;;;;;;;;;;;;14264:48;14261:159;;;14349:1;14333:13;:17;;;;14380:5;14369:16;;14261:159;14434:17;14477;14555:8;14552:1023;;;14652:4;14632:24;;:10;:16;14643:4;14632:16;;;;;;;;;;;;;;;;;;;;;;;;;:24;;;:46;;;;14674:4;14658:20;;:10;:14;14669:2;14658:14;;;;;;;;;;;;;;;;;;;;;;;;;:20;;;14632:46;14629:127;;;14702:34;;;;;;;;;;:::i;:::-;;;;;;;;14629:127;14810:25;:29;14836:2;14810:29;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;;14857:7;;;;;;;;;;;14843:22;;:2;:22;;;;14810:55;14806:734;;;14910:1;14894:13;:17;;;;14970:3;14959:10;;14950:6;:19;;;;:::i;:::-;:23;;;;:::i;:::-;14938:35;;15032:3;15021:10;;15012:6;:19;;;;:::i;:::-;:23;;;;:::i;:::-;15000:35;;15116:9;15104;:21;;;;:::i;:::-;15088:13;:37;;;;14806:734;;;15200:25;:31;15226:4;15200:31;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;15251:7;;;;;;;;;;;15235:24;;:4;:24;;;;15200:59;15197:343;;;15322:1;15306:13;:17;;;;15377:3;15367:9;;15358:6;:18;;;;:::i;:::-;:22;;;;:::i;:::-;15346:34;;15434:3;15424:9;;15415:6;:18;;;;:::i;:::-;:22;;;;:::i;:::-;15403:34;;15510:9;15498;:21;;;;:::i;:::-;15482:13;:37;;;;15197:343;14806:734;14552:1023;15625:6;15609:13;:22;;;;:::i;:::-;15591:9;:15;15601:4;15591:15;;;;;;;;;;;;;;;:40;;;;15684:9;15672;15663:6;:18;;;;:::i;:::-;:30;;;;:::i;:::-;15646:9;:13;15656:2;15646:13;;;;;;;;;;;;;;;;:47;;;;;;;:::i;:::-;;;;;;;;15724:1;15711:9;:14;15708:249;;15761:13;;15733:9;:24;15751:4;15733:24;;;;;;;;;;;;;;;;:41;;;;;;;:::i;:::-;;;;;;;;15832:9;15819;;:22;;;;;;;:::i;:::-;;;;;;;;15869:9;15856;;:22;;;;;;;:::i;:::-;;;;;;;;15912:4;15889:44;;15898:4;15889:44;;;15919:13;;15889:44;;;;;;:::i;:::-;;;;;;;;15708:249;15991:2;15976:39;;15985:4;15976:39;;;16001:13;;15994:6;:20;;;;:::i;:::-;15976:39;;;;;;:::i;:::-;;;;;;;;12040:4007;;;;;;;;:::o;5303:173::-;5359:16;5378:6;;;;;;;;;;;5359:25;;5404:8;5395:6;;:17;;;;;;;;;;;;;;;;;;5459:8;5428:40;;5449:8;5428:40;;;;;;;;;;;;5303:173;;:::o;20608:188::-;20725:5;20691:25;:31;20717:4;20691:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;20782:5;20748:40;;20776:4;20748:40;;;;;;;;;;;;20608:188;;:::o;16053:262::-;8024:4;8005:16;;:23;;;;;;;;;;;;;;;;;;16133:25:::1;16148:9;;16133:14;:25::i;:::-;16169:30;16189:9;;16169:19;:30::i;:::-;16215:44;16245:13;16215:44;;;;;;:::i;:::-;;;;;;;;16282:1;16270:9;:13;;;;16306:1;16294:9;:13;;;;8058:5:::0;8039:16;;:24;;;;;;;;;;;;;;;;;;16053:262;:::o;17399:388::-;17461:12;17494:1;17476:15;:19;;;;:::i;:::-;17461:34;;17500:17;17538:4;17520:15;:22;;;;:::i;:::-;17500:42;;17547:22;17572:21;17547:46;;17600:22;17617:4;17600:16;:22::i;:::-;17627:18;17673:14;17648:21;:40;;;;:::i;:::-;17627:61;;17696:35;17709:9;17720:10;17696:12;:35::i;:::-;17741:41;17756:4;17761:10;17772:9;17741:41;;;;;;;;:::i;:::-;;;;;;;;17399:388;;;;;:::o;16451:399::-;16514:21;16552:1;16538:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16514:40;;16577:4;16559;16564:1;16559:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;16597:7;;;;;;;;;;;:12;;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16587:4;16592:1;16587:7;;;;;;;;;;;;;;;;;;;;;:24;;;;;;;;;;;16616:49;16633:4;16648:7;;;;;;;;;;;16658:6;16616:8;:49::i;:::-;16676:7;;;;;;;;;;;:58;;;16740:6;16752:1;16788:4;16798:16;;;;;;;;;;;16820:15;16676:164;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16451:399;;:::o;17795:397::-;17854:21;17892:1;17878:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17854:40;;17917:4;17899;17904:1;17899:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;17937:7;;;;;;;;;;;:12;;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17927:4;17932:1;17927:7;;;;;;;;;;;;;;;;;;;;;:24;;;;;;;;;;;17956:54;17973:4;17988:7;;;;;;;;;;;17998:11;17956:8;:54::i;:::-;18021:7;;;;;;;;;;;:58;;;18085:11;18102:1;18138:4;18156;18167:15;18021:166;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17795:397;;:::o;18204:277::-;18277:54;18294:4;18309:7;;;;;;;;;;;18319:11;18277:8;:54::i;:::-;18338:7;;;;;;;;;;;:23;;;18368:9;18392:4;18403:11;18420:1;18427;18434:11;18456:15;18338:138;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;18204:277;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:155::-;;393:6;380:20;371:29;;409:41;444:5;409:41;:::i;:::-;361:95;;;;:::o;462:133::-;;543:6;530:20;521:29;;559:30;583:5;559:30;:::i;:::-;511:84;;;;:::o;601:137::-;;686:6;680:13;671:22;;702:30;726:5;702:30;:::i;:::-;661:77;;;;:::o;744:165::-;;841:6;828:20;819:29;;857:46;897:5;857:46;:::i;:::-;809:100;;;;:::o;915:139::-;;999:6;986:20;977:29;;1015:33;1042:5;1015:33;:::i;:::-;967:87;;;;:::o;1060:143::-;;1148:6;1142:13;1133:22;;1164:33;1191:5;1164:33;:::i;:::-;1123:80;;;;:::o;1209:262::-;;1317:2;1305:9;1296:7;1292:23;1288:32;1285:2;;;1333:1;1330;1323:12;1285:2;1376:1;1401:53;1446:7;1437:6;1426:9;1422:22;1401:53;:::i;:::-;1391:63;;1347:117;1275:196;;;;:::o;1477:284::-;;1596:2;1584:9;1575:7;1571:23;1567:32;1564:2;;;1612:1;1609;1602:12;1564:2;1655:1;1680:64;1736:7;1727:6;1716:9;1712:22;1680:64;:::i;:::-;1670:74;;1626:128;1554:207;;;;:::o;1767:278::-;;1883:2;1871:9;1862:7;1858:23;1854:32;1851:2;;;1899:1;1896;1889:12;1851:2;1942:1;1967:61;2020:7;2011:6;2000:9;1996:22;1967:61;:::i;:::-;1957:71;;1913:125;1841:204;;;;:::o;2051:417::-;;;2181:2;2169:9;2160:7;2156:23;2152:32;2149:2;;;2197:1;2194;2187:12;2149:2;2240:1;2265:61;2318:7;2309:6;2298:9;2294:22;2265:61;:::i;:::-;2255:71;;2211:125;2375:2;2401:50;2443:7;2434:6;2423:9;2419:22;2401:50;:::i;:::-;2391:60;;2346:115;2139:329;;;;;:::o;2474:407::-;;;2599:2;2587:9;2578:7;2574:23;2570:32;2567:2;;;2615:1;2612;2605:12;2567:2;2658:1;2683:53;2728:7;2719:6;2708:9;2704:22;2683:53;:::i;:::-;2673:63;;2629:117;2785:2;2811:53;2856:7;2847:6;2836:9;2832:22;2811:53;:::i;:::-;2801:63;;2756:118;2557:324;;;;;:::o;2887:552::-;;;;3029:2;3017:9;3008:7;3004:23;3000:32;2997:2;;;3045:1;3042;3035:12;2997:2;3088:1;3113:53;3158:7;3149:6;3138:9;3134:22;3113:53;:::i;:::-;3103:63;;3059:117;3215:2;3241:53;3286:7;3277:6;3266:9;3262:22;3241:53;:::i;:::-;3231:63;;3186:118;3343:2;3369:53;3414:7;3405:6;3394:9;3390:22;3369:53;:::i;:::-;3359:63;;3314:118;2987:452;;;;;:::o;3445:401::-;;;3567:2;3555:9;3546:7;3542:23;3538:32;3535:2;;;3583:1;3580;3573:12;3535:2;3626:1;3651:53;3696:7;3687:6;3676:9;3672:22;3651:53;:::i;:::-;3641:63;;3597:117;3753:2;3779:50;3821:7;3812:6;3801:9;3797:22;3779:50;:::i;:::-;3769:60;;3724:115;3525:321;;;;;:::o;3852:407::-;;;3977:2;3965:9;3956:7;3952:23;3948:32;3945:2;;;3993:1;3990;3983:12;3945:2;4036:1;4061:53;4106:7;4097:6;4086:9;4082:22;4061:53;:::i;:::-;4051:63;;4007:117;4163:2;4189:53;4234:7;4225:6;4214:9;4210:22;4189:53;:::i;:::-;4179:63;;4134:118;3935:324;;;;;:::o;4265:256::-;;4370:2;4358:9;4349:7;4345:23;4341:32;4338:2;;;4386:1;4383;4376:12;4338:2;4429:1;4454:50;4496:7;4487:6;4476:9;4472:22;4454:50;:::i;:::-;4444:60;;4400:114;4328:193;;;;:::o;4527:278::-;;4643:2;4631:9;4622:7;4618:23;4614:32;4611:2;;;4659:1;4656;4649:12;4611:2;4702:1;4727:61;4780:7;4771:6;4760:9;4756:22;4727:61;:::i;:::-;4717:71;;4673:125;4601:204;;;;:::o;4811:594::-;;;;4974:2;4962:9;4953:7;4949:23;4945:32;4942:2;;;4990:1;4987;4980:12;4942:2;5033:1;5058:66;5116:7;5107:6;5096:9;5092:22;5058:66;:::i;:::-;5048:76;;5004:130;5173:2;5199:61;5252:7;5243:6;5232:9;5228:22;5199:61;:::i;:::-;5189:71;;5144:126;5309:2;5335:53;5380:7;5371:6;5360:9;5356:22;5335:53;:::i;:::-;5325:63;;5280:118;4932:473;;;;;:::o;5411:262::-;;5519:2;5507:9;5498:7;5494:23;5490:32;5487:2;;;5535:1;5532;5525:12;5487:2;5578:1;5603:53;5648:7;5639:6;5628:9;5624:22;5603:53;:::i;:::-;5593:63;;5549:117;5477:196;;;;:::o;5679:596::-;;;;5832:2;5820:9;5811:7;5807:23;5803:32;5800:2;;;5848:1;5845;5838:12;5800:2;5891:1;5916:64;5972:7;5963:6;5952:9;5948:22;5916:64;:::i;:::-;5906:74;;5862:128;6029:2;6055:64;6111:7;6102:6;6091:9;6087:22;6055:64;:::i;:::-;6045:74;;6000:129;6168:2;6194:64;6250:7;6241:6;6230:9;6226:22;6194:64;:::i;:::-;6184:74;;6139:129;5790:485;;;;;:::o;6281:179::-;;6371:46;6413:3;6405:6;6371:46;:::i;:::-;6449:4;6444:3;6440:14;6426:28;;6361:99;;;;:::o;6466:147::-;6561:45;6600:5;6561:45;:::i;:::-;6556:3;6549:58;6539:74;;:::o;6619:142::-;6722:32;6748:5;6722:32;:::i;:::-;6717:3;6710:45;6700:61;;:::o;6767:108::-;6844:24;6862:5;6844:24;:::i;:::-;6839:3;6832:37;6822:53;;:::o;6881:118::-;6968:24;6986:5;6968:24;:::i;:::-;6963:3;6956:37;6946:53;;:::o;7035:732::-;;7183:54;7231:5;7183:54;:::i;:::-;7253:86;7332:6;7327:3;7253:86;:::i;:::-;7246:93;;7363:56;7413:5;7363:56;:::i;:::-;7442:7;7473:1;7458:284;7483:6;7480:1;7477:13;7458:284;;;7559:6;7553:13;7586:63;7645:3;7630:13;7586:63;:::i;:::-;7579:70;;7672:60;7725:6;7672:60;:::i;:::-;7662:70;;7518:224;7505:1;7502;7498:9;7493:14;;7458:284;;;7462:14;7758:3;7751:10;;7159:608;;;;;;;:::o;7773:109::-;7854:21;7869:5;7854:21;:::i;:::-;7849:3;7842:34;7832:50;;:::o;7888:147::-;7983:45;8022:5;7983:45;:::i;:::-;7978:3;7971:58;7961:74;;:::o;8041:364::-;;8157:39;8190:5;8157:39;:::i;:::-;8212:71;8276:6;8271:3;8212:71;:::i;:::-;8205:78;;8292:52;8337:6;8332:3;8325:4;8318:5;8314:16;8292:52;:::i;:::-;8369:29;8391:6;8369:29;:::i;:::-;8364:3;8360:39;8353:46;;8133:272;;;;;:::o;8411:367::-;;8574:67;8638:2;8633:3;8574:67;:::i;:::-;8567:74;;8671:34;8667:1;8662:3;8658:11;8651:55;8737:5;8732:2;8727:3;8723:12;8716:27;8769:2;8764:3;8760:12;8753:19;;8557:221;;;:::o;8784:370::-;;8947:67;9011:2;9006:3;8947:67;:::i;:::-;8940:74;;9044:34;9040:1;9035:3;9031:11;9024:55;9110:8;9105:2;9100:3;9096:12;9089:30;9145:2;9140:3;9136:12;9129:19;;8930:224;;;:::o;9160:366::-;;9323:67;9387:2;9382:3;9323:67;:::i;:::-;9316:74;;9420:34;9416:1;9411:3;9407:11;9400:55;9486:4;9481:2;9476:3;9472:12;9465:26;9517:2;9512:3;9508:12;9501:19;;9306:220;;;:::o;9532:389::-;;9695:67;9759:2;9754:3;9695:67;:::i;:::-;9688:74;;9792:34;9788:1;9783:3;9779:11;9772:55;9858:27;9853:2;9848:3;9844:12;9837:49;9912:2;9907:3;9903:12;9896:19;;9678:243;;;:::o;9927:370::-;;10090:67;10154:2;10149:3;10090:67;:::i;:::-;10083:74;;10187:34;10183:1;10178:3;10174:11;10167:55;10253:8;10248:2;10243:3;10239:12;10232:30;10288:2;10283:3;10279:12;10272:19;;10073:224;;;:::o;10303:386::-;;10466:67;10530:2;10525:3;10466:67;:::i;:::-;10459:74;;10563:34;10559:1;10554:3;10550:11;10543:55;10629:24;10624:2;10619:3;10615:12;10608:46;10680:2;10675:3;10671:12;10664:19;;10449:240;;;:::o;10695:382::-;;10858:67;10922:2;10917:3;10858:67;:::i;:::-;10851:74;;10955:34;10951:1;10946:3;10942:11;10935:55;11021:20;11016:2;11011:3;11007:12;11000:42;11068:2;11063:3;11059:12;11052:19;;10841:236;;;:::o;11083:327::-;;11246:67;11310:2;11305:3;11246:67;:::i;:::-;11239:74;;11343:31;11339:1;11334:3;11330:11;11323:52;11401:2;11396:3;11392:12;11385:19;;11229:181;;;:::o;11416:385::-;;11579:67;11643:2;11638:3;11579:67;:::i;:::-;11572:74;;11676:34;11672:1;11667:3;11663:11;11656:55;11742:23;11737:2;11732:3;11728:12;11721:45;11792:2;11787:3;11783:12;11776:19;;11562:239;;;:::o;11807:372::-;;11970:67;12034:2;12029:3;11970:67;:::i;:::-;11963:74;;12067:34;12063:1;12058:3;12054:11;12047:55;12133:10;12128:2;12123:3;12119:12;12112:32;12170:2;12165:3;12161:12;12154:19;;11953:226;;;:::o;12185:330::-;;12348:67;12412:2;12407:3;12348:67;:::i;:::-;12341:74;;12445:34;12441:1;12436:3;12432:11;12425:55;12506:2;12501:3;12497:12;12490:19;;12331:184;;;:::o;12521:325::-;;12684:67;12748:2;12743:3;12684:67;:::i;:::-;12677:74;;12781:29;12777:1;12772:3;12768:11;12761:50;12837:2;12832:3;12828:12;12821:19;;12667:179;;;:::o;12852:322::-;;13015:67;13079:2;13074:3;13015:67;:::i;:::-;13008:74;;13112:26;13108:1;13103:3;13099:11;13092:47;13165:2;13160:3;13156:12;13149:19;;12998:176;;;:::o;13180:369::-;;13343:67;13407:2;13402:3;13343:67;:::i;:::-;13336:74;;13440:34;13436:1;13431:3;13427:11;13420:55;13506:7;13501:2;13496:3;13492:12;13485:29;13540:2;13535:3;13531:12;13524:19;;13326:223;;;:::o;13555:368::-;;13718:67;13782:2;13777:3;13718:67;:::i;:::-;13711:74;;13815:34;13811:1;13806:3;13802:11;13795:55;13881:6;13876:2;13871:3;13867:12;13860:28;13914:2;13909:3;13905:12;13898:19;;13701:222;;;:::o;13929:118::-;14016:24;14034:5;14016:24;:::i;:::-;14011:3;14004:37;13994:53;;:::o;14053:222::-;;14184:2;14173:9;14169:18;14161:26;;14197:71;14265:1;14254:9;14250:17;14241:6;14197:71;:::i;:::-;14151:124;;;;:::o;14281:254::-;;14428:2;14417:9;14413:18;14405:26;;14441:87;14525:1;14514:9;14510:17;14501:6;14441:87;:::i;:::-;14395:140;;;;:::o;14541:348::-;;14708:2;14697:9;14693:18;14685:26;;14721:79;14797:1;14786:9;14782:17;14773:6;14721:79;:::i;:::-;14810:72;14878:2;14867:9;14863:18;14854:6;14810:72;:::i;:::-;14675:214;;;;;:::o;14895:807::-;;15182:3;15171:9;15167:19;15159:27;;15196:71;15264:1;15253:9;15249:17;15240:6;15196:71;:::i;:::-;15277:72;15345:2;15334:9;15330:18;15321:6;15277:72;:::i;:::-;15359:80;15435:2;15424:9;15420:18;15411:6;15359:80;:::i;:::-;15449;15525:2;15514:9;15510:18;15501:6;15449:80;:::i;:::-;15539:73;15607:3;15596:9;15592:19;15583:6;15539:73;:::i;:::-;15622;15690:3;15679:9;15675:19;15666:6;15622:73;:::i;:::-;15149:553;;;;;;;;;:::o;15708:210::-;;15833:2;15822:9;15818:18;15810:26;;15846:65;15908:1;15897:9;15893:17;15884:6;15846:65;:::i;:::-;15800:118;;;;:::o;15924:313::-;;16075:2;16064:9;16060:18;16052:26;;16124:9;16118:4;16114:20;16110:1;16099:9;16095:17;16088:47;16152:78;16225:4;16216:6;16152:78;:::i;:::-;16144:86;;16042:195;;;;:::o;16243:419::-;;16447:2;16436:9;16432:18;16424:26;;16496:9;16490:4;16486:20;16482:1;16471:9;16467:17;16460:47;16524:131;16650:4;16524:131;:::i;:::-;16516:139;;16414:248;;;:::o;16668:419::-;;16872:2;16861:9;16857:18;16849:26;;16921:9;16915:4;16911:20;16907:1;16896:9;16892:17;16885:47;16949:131;17075:4;16949:131;:::i;:::-;16941:139;;16839:248;;;:::o;17093:419::-;;17297:2;17286:9;17282:18;17274:26;;17346:9;17340:4;17336:20;17332:1;17321:9;17317:17;17310:47;17374:131;17500:4;17374:131;:::i;:::-;17366:139;;17264:248;;;:::o;17518:419::-;;17722:2;17711:9;17707:18;17699:26;;17771:9;17765:4;17761:20;17757:1;17746:9;17742:17;17735:47;17799:131;17925:4;17799:131;:::i;:::-;17791:139;;17689:248;;;:::o;17943:419::-;;18147:2;18136:9;18132:18;18124:26;;18196:9;18190:4;18186:20;18182:1;18171:9;18167:17;18160:47;18224:131;18350:4;18224:131;:::i;:::-;18216:139;;18114:248;;;:::o;18368:419::-;;18572:2;18561:9;18557:18;18549:26;;18621:9;18615:4;18611:20;18607:1;18596:9;18592:17;18585:47;18649:131;18775:4;18649:131;:::i;:::-;18641:139;;18539:248;;;:::o;18793:419::-;;18997:2;18986:9;18982:18;18974:26;;19046:9;19040:4;19036:20;19032:1;19021:9;19017:17;19010:47;19074:131;19200:4;19074:131;:::i;:::-;19066:139;;18964:248;;;:::o;19218:419::-;;19422:2;19411:9;19407:18;19399:26;;19471:9;19465:4;19461:20;19457:1;19446:9;19442:17;19435:47;19499:131;19625:4;19499:131;:::i;:::-;19491:139;;19389:248;;;:::o;19643:419::-;;19847:2;19836:9;19832:18;19824:26;;19896:9;19890:4;19886:20;19882:1;19871:9;19867:17;19860:47;19924:131;20050:4;19924:131;:::i;:::-;19916:139;;19814:248;;;:::o;20068:419::-;;20272:2;20261:9;20257:18;20249:26;;20321:9;20315:4;20311:20;20307:1;20296:9;20292:17;20285:47;20349:131;20475:4;20349:131;:::i;:::-;20341:139;;20239:248;;;:::o;20493:419::-;;20697:2;20686:9;20682:18;20674:26;;20746:9;20740:4;20736:20;20732:1;20721:9;20717:17;20710:47;20774:131;20900:4;20774:131;:::i;:::-;20766:139;;20664:248;;;:::o;20918:419::-;;21122:2;21111:9;21107:18;21099:26;;21171:9;21165:4;21161:20;21157:1;21146:9;21142:17;21135:47;21199:131;21325:4;21199:131;:::i;:::-;21191:139;;21089:248;;;:::o;21343:419::-;;21547:2;21536:9;21532:18;21524:26;;21596:9;21590:4;21586:20;21582:1;21571:9;21567:17;21560:47;21624:131;21750:4;21624:131;:::i;:::-;21616:139;;21514:248;;;:::o;21768:419::-;;21972:2;21961:9;21957:18;21949:26;;22021:9;22015:4;22011:20;22007:1;21996:9;21992:17;21985:47;22049:131;22175:4;22049:131;:::i;:::-;22041:139;;21939:248;;;:::o;22193:419::-;;22397:2;22386:9;22382:18;22374:26;;22446:9;22440:4;22436:20;22432:1;22421:9;22417:17;22410:47;22474:131;22600:4;22474:131;:::i;:::-;22466:139;;22364:248;;;:::o;22618:222::-;;22749:2;22738:9;22734:18;22726:26;;22762:71;22830:1;22819:9;22815:17;22806:6;22762:71;:::i;:::-;22716:124;;;;:::o;22846:847::-;;23155:3;23144:9;23140:19;23132:27;;23169:71;23237:1;23226:9;23222:17;23213:6;23169:71;:::i;:::-;23250:80;23326:2;23315:9;23311:18;23302:6;23250:80;:::i;:::-;23377:9;23371:4;23367:20;23362:2;23351:9;23347:18;23340:48;23405:108;23508:4;23499:6;23405:108;:::i;:::-;23397:116;;23523:80;23599:2;23588:9;23584:18;23575:6;23523:80;:::i;:::-;23613:73;23681:3;23670:9;23666:19;23657:6;23613:73;:::i;:::-;23122:571;;;;;;;;:::o;23699:831::-;;24000:3;23989:9;23985:19;23977:27;;24014:71;24082:1;24071:9;24067:17;24058:6;24014:71;:::i;:::-;24095:80;24171:2;24160:9;24156:18;24147:6;24095:80;:::i;:::-;24222:9;24216:4;24212:20;24207:2;24196:9;24192:18;24185:48;24250:108;24353:4;24344:6;24250:108;:::i;:::-;24242:116;;24368:72;24436:2;24425:9;24421:18;24412:6;24368:72;:::i;:::-;24450:73;24518:3;24507:9;24503:19;24494:6;24450:73;:::i;:::-;23967:563;;;;;;;;:::o;24536:442::-;;24723:2;24712:9;24708:18;24700:26;;24736:71;24804:1;24793:9;24789:17;24780:6;24736:71;:::i;:::-;24817:72;24885:2;24874:9;24870:18;24861:6;24817:72;:::i;:::-;24899;24967:2;24956:9;24952:18;24943:6;24899:72;:::i;:::-;24690:288;;;;;;:::o;24984:132::-;;25074:3;25066:11;;25104:4;25099:3;25095:14;25087:22;;25056:60;;;:::o;25122:114::-;;25223:5;25217:12;25207:22;;25196:40;;;:::o;25242:99::-;;25328:5;25322:12;25312:22;;25301:40;;;:::o;25347:113::-;;25449:4;25444:3;25440:14;25432:22;;25422:38;;;:::o;25466:184::-;;25599:6;25594:3;25587:19;25639:4;25634:3;25630:14;25615:29;;25577:73;;;;:::o;25656:169::-;;25774:6;25769:3;25762:19;25814:4;25809:3;25805:14;25790:29;;25752:73;;;;:::o;25831:305::-;;25890:20;25908:1;25890:20;:::i;:::-;25885:25;;25924:20;25942:1;25924:20;:::i;:::-;25919:25;;26078:1;26010:66;26006:74;26003:1;26000:81;25997:2;;;26084:18;;:::i;:::-;25997:2;26128:1;26125;26121:9;26114:16;;25875:261;;;;:::o;26142:185::-;;26199:20;26217:1;26199:20;:::i;:::-;26194:25;;26233:20;26251:1;26233:20;:::i;:::-;26228:25;;26272:1;26262:2;;26277:18;;:::i;:::-;26262:2;26319:1;26316;26312:9;26307:14;;26184:143;;;;:::o;26333:348::-;;26396:20;26414:1;26396:20;:::i;:::-;26391:25;;26430:20;26448:1;26430:20;:::i;:::-;26425:25;;26618:1;26550:66;26546:74;26543:1;26540:81;26535:1;26528:9;26521:17;26517:105;26514:2;;;26625:18;;:::i;:::-;26514:2;26673:1;26670;26666:9;26655:20;;26381:300;;;;:::o;26687:191::-;;26747:20;26765:1;26747:20;:::i;:::-;26742:25;;26781:20;26799:1;26781:20;:::i;:::-;26776:25;;26820:1;26817;26814:8;26811:2;;;26825:18;;:::i;:::-;26811:2;26870:1;26867;26863:9;26855:17;;26732:146;;;;:::o;26884:96::-;;26950:24;26968:5;26950:24;:::i;:::-;26939:35;;26929:51;;;:::o;26986:104::-;;27060:24;27078:5;27060:24;:::i;:::-;27049:35;;27039:51;;;:::o;27096:90::-;;27173:5;27166:13;27159:21;27148:32;;27138:48;;;:::o;27192:109::-;;27271:24;27289:5;27271:24;:::i;:::-;27260:35;;27250:51;;;:::o;27307:126::-;;27384:42;27377:5;27373:54;27362:65;;27352:81;;;:::o;27439:77::-;;27505:5;27494:16;;27484:32;;;:::o;27522:134::-;;27613:37;27644:5;27613:37;:::i;:::-;27600:50;;27590:66;;;:::o;27662:121::-;;27753:24;27771:5;27753:24;:::i;:::-;27740:37;;27730:53;;;:::o;27789:126::-;;27872:37;27903:5;27872:37;:::i;:::-;27859:50;;27849:66;;;:::o;27921:113::-;;28004:24;28022:5;28004:24;:::i;:::-;27991:37;;27981:53;;;:::o;28040:307::-;28108:1;28118:113;28132:6;28129:1;28126:13;28118:113;;;28217:1;28212:3;28208:11;28202:18;28198:1;28193:3;28189:11;28182:39;28154:2;28151:1;28147:10;28142:15;;28118:113;;;28249:6;28246:1;28243:13;28240:2;;;28329:1;28320:6;28315:3;28311:16;28304:27;28240:2;28089:258;;;;:::o;28353:320::-;;28434:1;28428:4;28424:12;28414:22;;28481:1;28475:4;28471:12;28502:18;28492:2;;28558:4;28550:6;28546:17;28536:27;;28492:2;28620;28612:6;28609:14;28589:18;28586:38;28583:2;;;28639:18;;:::i;:::-;28583:2;28404:269;;;;:::o;28679:180::-;28727:77;28724:1;28717:88;28824:4;28821:1;28814:15;28848:4;28845:1;28838:15;28865:180;28913:77;28910:1;28903:88;29010:4;29007:1;29000:15;29034:4;29031:1;29024:15;29051:180;29099:77;29096:1;29089:88;29196:4;29193:1;29186:15;29220:4;29217:1;29210:15;29237:102;;29329:2;29325:7;29320:2;29313:5;29309:14;29305:28;29295:38;;29285:54;;;:::o;29345:122::-;29418:24;29436:5;29418:24;:::i;:::-;29411:5;29408:35;29398:2;;29457:1;29454;29447:12;29398:2;29388:79;:::o;29473:138::-;29554:32;29580:5;29554:32;:::i;:::-;29547:5;29544:43;29534:2;;29601:1;29598;29591:12;29534:2;29524:87;:::o;29617:116::-;29687:21;29702:5;29687:21;:::i;:::-;29680:5;29677:32;29667:2;;29723:1;29720;29713:12;29667:2;29657:76;:::o;29739:148::-;29825:37;29856:5;29825:37;:::i;:::-;29818:5;29815:48;29805:2;;29877:1;29874;29867:12;29805:2;29795:92;:::o;29893:122::-;29966:24;29984:5;29966:24;:::i;:::-;29959:5;29956:35;29946:2;;30005:1;30002;29995:12;29946:2;29936:79;:::o

Swarm Source

ipfs://75ccbae8438c6842f91d63c2f7f0699b797a0d91152622c1470223b11b213426
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.