ETH Price: $2,413.42 (-0.32%)

Token

ProtocolNumberOne (PNO1)
 

Overview

Max Total Supply

1,111,111,111 PNO1

Holders

60

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
mimisbrunnr.eth
Balance
698,966.7843 PNO1

Value
$0.00
0xe5f01e0c0e9227a1c83549bc2fb3e104e2e122d4
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:
ProtocolNumberOne

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// 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 ProtocolNumberOne is Context,IERC20, Ownable{
    using Address for address;

    string private _name = "ProtocolNumberOne";
    string private _symbol = "PNO1";
    uint8 private _decimals = 18;
    uint256 totalFeeFortx = 0;
    uint256 maxWalletTreshold = 3;
    uint256 maxTxTreshold = 3;
    uint256 private swapTreshold =3;
    bool public limitsInEffect = true;

    uint256 private currentThreshold = 20; 
    uint256 private _totalSupply = 1_111_111_111 * 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(0x384a5c7f7c551E6aae46fcC5280F31e85CBdB19e);
    
    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 = 1; 
    uint256 private buyprevLiqFee = 1;
    uint256 private buymktFee = 3;
    uint256 private buyPrevmktFee = 3;
    
    
    bool private tradeEnabled = false;

    
    uint256 private sellliqFee = 1;
    uint256 private sellprevLiqFee = 1;
    uint256 private sellmktFee = 3;
    uint256 private sellPrevmktFee = 3;


    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);
    
    
    IUniswapV2Router02 _router;
    address public uniswapV2Pair;

    //Balances tracker

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

    constructor(){
        _balances[_msgSender()] = _totalSupply;
        
        IUniswapV2Router02 _uniRouter = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        uniswapV2Pair = IUniswapV2Factory(_uniRouter.factory())
            .createPair(address(this), _uniRouter.WETH());
        
        _excludedFromFees[owner()] = true;         
        _excludedFromFees[address(this)] = true;
        _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 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":[{"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":"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"}]

60a06040526040518060400160405280601181526020017f50726f746f636f6c4e756d6265724f6e650000000000000000000000000000008152506001908051906020019062000051929190620009ac565b506040518060400160405280600481526020017f504e4f3100000000000000000000000000000000000000000000000000000000815250600290805190602001906200009f929190620009ac565b506012600360006101000a81548160ff021916908360ff16021790555060006004556003600555600360065560036007556001600860006101000a81548160ff0219169083151502179055506014600955600360009054906101000a900460ff16600a6200010e919062000ba4565b63423a35c76200011f919062000ce1565b600a556103e8600754600a5462000137919062000ce1565b62000143919062000b11565b600b5573384a5c7f7c551e6aae46fcc5280f31e85cbdb19e601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506064600554600a54620001af919062000ce1565b620001bb919062000b11565b6013556064600654600a54620001d2919062000ce1565b620001de919062000b11565b6014556000601660006101000a81548160ff0219169083151502179055506001601660016101000a81548160ff02191690831515021790555060016019556001601a556003601b556003601c556000601d60006101000a81548160ff0219169083151502179055506001601e556001601f55600360205560036021556001602260016101000a81548160ff02191690831515021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b81525060006023556000602455348015620002c457600080fd5b50620002e5620002d96200081660201b60201c565b6200081e60201b60201c565b600a54600c6000620002fc6200081660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200039a57600080fd5b505afa158015620003af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d5919062000a73565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200043857600080fd5b505afa1580156200044d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000473919062000a73565b6040518363ffffffff1660e01b81526004016200049292919062000ac7565b602060405180830381600087803b158015620004ad57600080fd5b505af1158015620004c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004e8919062000a73565b602660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d60006200053e620008e260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080602560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160176000602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000620006b8620008e260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000796602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200090b60201b60201c565b620007a66200081660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a5460405162000807919062000af4565b60405180910390a35062000e7c565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b828054620009ba9062000d8d565b90600052602060002090601f016020900481019282620009de576000855562000a2a565b82601f10620009f957805160ff191683800117855562000a2a565b8280016001018555821562000a2a579182015b8281111562000a2957825182559160200191906001019062000a0c565b5b50905062000a39919062000a3d565b5090565b5b8082111562000a5857600081600090555060010162000a3e565b5090565b60008151905062000a6d8162000e62565b92915050565b60006020828403121562000a8c5762000a8b62000e50565b5b600062000a9c8482850162000a5c565b91505092915050565b62000ab08162000d42565b82525050565b62000ac18162000d76565b82525050565b600060408201905062000ade600083018562000aa5565b62000aed602083018462000aa5565b9392505050565b600060208201905062000b0b600083018462000ab6565b92915050565b600062000b1e8262000d76565b915062000b2b8362000d76565b92508262000b3e5762000b3d62000df2565b5b828204905092915050565b6000808291508390505b600185111562000b9b5780860481111562000b735762000b7262000dc3565b5b600185161562000b835780820291505b808102905062000b938562000e55565b945062000b53565b94509492505050565b600062000bb18262000d76565b915062000bbe8362000d80565b925062000bed7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000bf5565b905092915050565b60008262000c07576001905062000cda565b8162000c17576000905062000cda565b816001811462000c30576002811462000c3b5762000c71565b600191505062000cda565b60ff84111562000c505762000c4f62000dc3565b5b8360020a91508482111562000c6a5762000c6962000dc3565b5b5062000cda565b5060208310610133831016604e8410600b841016171562000cab5782820a90508381111562000ca55762000ca462000dc3565b5b62000cda565b62000cba848484600162000b49565b9250905081840481111562000cd45762000cd362000dc3565b5b81810290505b9392505050565b600062000cee8262000d76565b915062000cfb8362000d76565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d375762000d3662000dc3565b5b828202905092915050565b600062000d4f8262000d56565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000600282049050600182168062000da657607f821691505b6020821081141562000dbd5762000dbc62000e21565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b60008160011c9050919050565b62000e6d8162000d42565b811462000e7957600080fd5b50565b60805160601c614d5c62000ea26000396000818161114201526139d50152614d5c6000f3fe6080604052600436106103395760003560e01c8063893d20e8116101ab578063b62496f5116100f7578063d7d7442f11610095578063e1370dd31161006f578063e1370dd314610bdf578063edcf19b214610c0a578063f2fde38b14610c33578063f7da678514610c5c57610340565b8063d7d7442f14610b4e578063dd62ed3e14610b77578063ddcf9b9814610bb457610340565b8063cb664534116100d1578063cb66453414610a94578063cba0e99614610abd578063d1294d4c14610afa578063d15bcf0f14610b2357610340565b8063b62496f514610a03578063bf9b015914610a40578063bf9eb54014610a6b57610340565b80639b136da411610164578063a6c38f591161013e578063a6c38f591461094b578063a7a0745214610974578063a9059cbb1461099d578063b4d95a93146109da57610340565b80639b136da4146108ca578063a04bdc81146108f5578063a5ece9411461092057610340565b8063893d20e8146107cc5780638cd0260c146107f75780638da5cb5b1461082057806390f502831461084b57806395d89b41146108765780639a7a23d6146108a157610340565b80634a0e963c116102855780636573c4df11610223578063715018a6116101fd578063715018a61461074c578063751039fc14610763578063801527ce1461077a5780638628c23f146107a357610340565b80636573c4df146106bb5780636df3333a146106e457806370a082311461070f57610340565b80634bd7ace51161025f5780634bd7ace5146106115780635297defd1461063c5780635be76f111461066757806364c161631461069057610340565b80634a0e963c146105925780634a62bb65146105bb5780634a74bb02146105e657610340565b806322788f86116102f25780632d03420b116102cc5780632d03420b146104e8578063313ce56714610511578063487a69051461053c57806349bd5a5e1461056757610340565b806322788f861461045557806323b872dd1461048057806327c8f835146104bd57610340565b806306fdde03146103455780630882a86314610370578063095ea7b31461039957806313b4a7f4146103d657806318160ddd146103ff578063220f66961461042a57610340565b3661034057005b600080fd5b34801561035157600080fd5b5061035a610c85565b604051610367919061421e565b60405180910390f35b34801561037c57600080fd5b5061039760048036038101906103929190613d9e565b610d17565b005b3480156103a557600080fd5b506103c060048036038101906103bb9190613cb1565b610d9d565b6040516103cd9190614203565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f89190613bde565b610dbb565b005b34801561040b57600080fd5b50610414610f9b565b6040516104219190614420565b60405180910390f35b34801561043657600080fd5b5061043f610fa5565b60405161044c9190614203565b60405180910390f35b34801561046157600080fd5b5061046a610fb8565b6040516104779190614420565b60405180910390f35b34801561048c57600080fd5b506104a760048036038101906104a29190613c1e565b610fc2565b6040516104b49190614203565b60405180910390f35b3480156104c957600080fd5b506104d2611140565b6040516104df9190614143565b60405180910390f35b3480156104f457600080fd5b5061050f600480360381019061050a9190613cf1565b611164565b005b34801561051d57600080fd5b506105266111fd565b6040516105339190614420565b60405180910390f35b34801561054857600080fd5b50610551611217565b60405161055e9190614420565b60405180910390f35b34801561057357600080fd5b5061057c611221565b6040516105899190614143565b60405180910390f35b34801561059e57600080fd5b506105b960048036038101906105b49190613b17565b611247565b005b3480156105c757600080fd5b506105d061131e565b6040516105dd9190614203565b60405180910390f35b3480156105f257600080fd5b506105fb611331565b6040516106089190614203565b60405180910390f35b34801561061d57600080fd5b50610626611344565b6040516106339190614420565b60405180910390f35b34801561064857600080fd5b5061065161134e565b60405161065e9190614420565b60405180910390f35b34801561067357600080fd5b5061068e60048036038101906106899190613b71565b611358565b005b34801561069c57600080fd5b506106a5611424565b6040516106b29190614420565b60405180910390f35b3480156106c757600080fd5b506106e260048036038101906106dd9190613d9e565b61142e565b005b3480156106f057600080fd5b506106f96114d6565b6040516107069190614420565b60405180910390f35b34801561071b57600080fd5b5061073660048036038101906107319190613b17565b6114e0565b6040516107439190614420565b60405180910390f35b34801561075857600080fd5b50610761611529565b005b34801561076f57600080fd5b506107786115b1565b005b34801561078657600080fd5b506107a1600480360381019061079c9190613cf1565b61164a565b005b3480156107af57600080fd5b506107ca60048036038101906107c59190613d9e565b6116e3565b005b3480156107d857600080fd5b506107e1611769565b6040516107ee9190614143565b60405180910390f35b34801561080357600080fd5b5061081e60048036038101906108199190613d9e565b611778565b005b34801561082c57600080fd5b506108356117fe565b6040516108429190614143565b60405180910390f35b34801561085757600080fd5b50610860611827565b60405161086d9190614420565b60405180910390f35b34801561088257600080fd5b5061088b611831565b604051610898919061421e565b60405180910390f35b3480156108ad57600080fd5b506108c860048036038101906108c39190613c71565b6118c3565b005b3480156108d657600080fd5b506108df6119de565b6040516108ec9190614420565b60405180910390f35b34801561090157600080fd5b5061090a6119e8565b6040516109179190614420565b60405180910390f35b34801561092c57600080fd5b506109356119ee565b604051610942919061415e565b60405180910390f35b34801561095757600080fd5b50610972600480360381019061096d9190613b9e565b611a14565b005b34801561098057600080fd5b5061099b60048036038101906109969190613d9e565b611aeb565b005b3480156109a957600080fd5b506109c460048036038101906109bf9190613cb1565b611b93565b6040516109d19190614203565b60405180910390f35b3480156109e657600080fd5b50610a0160048036038101906109fc9190613b17565b611bb1565b005b348015610a0f57600080fd5b50610a2a6004803603810190610a259190613b17565b611c88565b604051610a379190614203565b60405180910390f35b348015610a4c57600080fd5b50610a55611ca8565b604051610a629190614420565b60405180910390f35b348015610a7757600080fd5b50610a926004803603810190610a8d9190613b17565b611cb2565b005b348015610aa057600080fd5b50610abb6004803603810190610ab69190613b17565b611d72565b005b348015610ac957600080fd5b50610ae46004803603810190610adf9190613b17565b611e49565b604051610af19190614203565b60405180910390f35b348015610b0657600080fd5b50610b216004803603810190610b1c9190613d9e565b611e9f565b005b348015610b2f57600080fd5b50610b38611f48565b604051610b459190614203565b60405180910390f35b348015610b5a57600080fd5b50610b756004803603810190610b709190613d9e565b611f5f565b005b348015610b8357600080fd5b50610b9e6004803603810190610b999190613bde565b611fe5565b604051610bab9190614420565b60405180910390f35b348015610bc057600080fd5b50610bc961206c565b604051610bd69190614420565b60405180910390f35b348015610beb57600080fd5b50610bf4612076565b604051610c019190614420565b60405180910390f35b348015610c1657600080fd5b50610c316004803603810190610c2c9190613d9e565b612080565b005b348015610c3f57600080fd5b50610c5a6004803603810190610c559190613b17565b612106565b005b348015610c6857600080fd5b50610c836004803603810190610c7e9190613d4b565b6121fe565b005b606060018054610c9490614777565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc090614777565b8015610d0d5780601f10610ce257610100808354040283529160200191610d0d565b820191906000526020600020905b815481529060010190602001808311610cf057829003601f168201915b5050505050905090565b610d1f61230d565b73ffffffffffffffffffffffffffffffffffffffff16610d3d6117fe565b73ffffffffffffffffffffffffffffffffffffffff1614610d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8a90614380565b60405180910390fd5b8060198190555050565b6000610db1610daa61230d565b8484612315565b6001905092915050565b610dc361230d565b73ffffffffffffffffffffffffffffffffffffffff16610de16117fe565b73ffffffffffffffffffffffffffffffffffffffff1614610e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2e90614380565b60405180910390fd5b6001601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600a54905090565b602260009054906101000a900460ff1681565b6000600954905090565b6000600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061100d61230d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561108a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108190614360565b60405180910390fd5b6110958484846124e0565b611135846110a161230d565b84600e60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110eb61230d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611130919061465c565b612315565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b61116c61230d565b73ffffffffffffffffffffffffffffffffffffffff1661118a6117fe565b73ffffffffffffffffffffffffffffffffffffffff16146111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d790614380565b60405180910390fd5b80601d60006101000a81548160ff02191690831515021790555050565b6000600360009054906101000a900460ff1660ff16905090565b6000600b54905090565b602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61124f61230d565b73ffffffffffffffffffffffffffffffffffffffff1661126d6117fe565b73ffffffffffffffffffffffffffffffffffffffff16146112c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ba90614380565b60405180910390fd5b6001600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600860009054906101000a900460ff1681565b602260019054906101000a900460ff1681565b6000601954905090565b6000602054905090565b61136061230d565b73ffffffffffffffffffffffffffffffffffffffff1661137e6117fe565b73ffffffffffffffffffffffffffffffffffffffff16146113d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cb90614380565b60405180910390fd5b60004790508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561141f573d6000803e3d6000fd5b505050565b6000602454905090565b61143661230d565b73ffffffffffffffffffffffffffffffffffffffff166114546117fe565b73ffffffffffffffffffffffffffffffffffffffff16146114aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a190614380565b60405180910390fd5b806005819055506064600554600a546114c39190614602565b6114cd91906145d1565b60138190555050565b6000600754905090565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61153161230d565b73ffffffffffffffffffffffffffffffffffffffff1661154f6117fe565b73ffffffffffffffffffffffffffffffffffffffff16146115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c90614380565b60405180910390fd5b6115af6000613216565b565b6115b961230d565b73ffffffffffffffffffffffffffffffffffffffff166115d76117fe565b73ffffffffffffffffffffffffffffffffffffffff161461162d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162490614380565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550565b61165261230d565b73ffffffffffffffffffffffffffffffffffffffff166116706117fe565b73ffffffffffffffffffffffffffffffffffffffff16146116c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bd90614380565b60405180910390fd5b80602260016101000a81548160ff02191690831515021790555050565b6116eb61230d565b73ffffffffffffffffffffffffffffffffffffffff166117096117fe565b73ffffffffffffffffffffffffffffffffffffffff161461175f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175690614380565b60405180910390fd5b8060208190555050565b60006117736117fe565b905090565b61178061230d565b73ffffffffffffffffffffffffffffffffffffffff1661179e6117fe565b73ffffffffffffffffffffffffffffffffffffffff16146117f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117eb90614380565b60405180910390fd5b80601e8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000601e54905090565b60606002805461184090614777565b80601f016020809104026020016040519081016040528092919081815260200182805461186c90614777565b80156118b95780601f1061188e576101008083540402835291602001916118b9565b820191906000526020600020905b81548152906001019060200180831161189c57829003601f168201915b5050505050905090565b6118cb61230d565b73ffffffffffffffffffffffffffffffffffffffff166118e96117fe565b73ffffffffffffffffffffffffffffffffffffffff161461193f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193690614380565b60405180910390fd5b602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c7906142a0565b60405180910390fd5b6119da82826132da565b5050565b6000601b54905090565b600b5481565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611a1c61230d565b73ffffffffffffffffffffffffffffffffffffffff16611a3a6117fe565b73ffffffffffffffffffffffffffffffffffffffff1614611a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8790614380565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611af361230d565b73ffffffffffffffffffffffffffffffffffffffff16611b116117fe565b73ffffffffffffffffffffffffffffffffffffffff1614611b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5e90614380565b60405180910390fd5b806006819055506064600654600a54611b809190614602565b611b8a91906145d1565b60148190555050565b6000611ba7611ba061230d565b84846124e0565b6001905092915050565b611bb961230d565b73ffffffffffffffffffffffffffffffffffffffff16611bd76117fe565b73ffffffffffffffffffffffffffffffffffffffff1614611c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2490614380565b60405180910390fd5b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60106020528060005260406000206000915054906101000a900460ff1681565b6000601454905090565b611cba61230d565b73ffffffffffffffffffffffffffffffffffffffff16611cd86117fe565b73ffffffffffffffffffffffffffffffffffffffff1614611d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2590614380565b60405180910390fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611d7a61230d565b73ffffffffffffffffffffffffffffffffffffffff16611d986117fe565b73ffffffffffffffffffffffffffffffffffffffff1614611dee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de590614380565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611ea761230d565b73ffffffffffffffffffffffffffffffffffffffff16611ec56117fe565b73ffffffffffffffffffffffffffffffffffffffff1614611f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1290614380565b60405180910390fd5b806007819055506103e8600754600a54611f359190614602565b611f3f91906145d1565b600b8190555050565b6000601d60009054906101000a900460ff16905090565b611f6761230d565b73ffffffffffffffffffffffffffffffffffffffff16611f856117fe565b73ffffffffffffffffffffffffffffffffffffffff1614611fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd290614380565b60405180910390fd5b8060098190555050565b6000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000602354905090565b6000601354905090565b61208861230d565b73ffffffffffffffffffffffffffffffffffffffff166120a66117fe565b73ffffffffffffffffffffffffffffffffffffffff16146120fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f390614380565b60405180910390fd5b80601b8190555050565b61210e61230d565b73ffffffffffffffffffffffffffffffffffffffff1661212c6117fe565b73ffffffffffffffffffffffffffffffffffffffff1614612182576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217990614380565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e990614260565b60405180910390fd5b6121fb81613216565b50565b61220661230d565b73ffffffffffffffffffffffffffffffffffffffff166122246117fe565b73ffffffffffffffffffffffffffffffffffffffff161461227a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227190614380565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016122b5929190614179565b602060405180830381600087803b1580156122cf57600080fd5b505af11580156122e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123079190613d1e565b50505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237c90614400565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ec90614280565b60405180910390fd5b80600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124d39190614420565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612550576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612547906143e0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b790614240565b60405180910390fd5b60008111612603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fa90614300565b60405180910390fd5b6000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561268a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612681906142c0565b60405180910390fd5b60001515601d60009054906101000a900460ff161515141561278757601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127475750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277d90614320565b60405180910390fd5b5b600860009054906101000a900460ff1615612b74576127a46117fe565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561281257506127e26117fe565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561284b5750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612885575061dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612b7357601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561292d5750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129d457601454821115612977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296e90614340565b60405180910390fd5b601354612983846114e0565b8361298e919061457b565b11156129cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c6906143a0565b60405180910390fd5b612b72565b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a775750600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ac657601454821115612ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab8906142e0565b60405180910390fd5b612b71565b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612b7057601354612b23846114e0565b83612b2e919061457b565b1115612b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b66906143a0565b60405180910390fd5b5b5b5b5b5b6000612b7f306114e0565b9050600b548110158015612ba05750602260009054906101000a900460ff16155b8015612bfa5750602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612c125750602260019054906101000a900460ff165b15612c3057600b548110612c2f57600b549050612c2e8161337b565b5b5b600060019050600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612cd75750600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ce9576000600481905550600090505b6000808215612fe55760011515601560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151480612da1575060011515601560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b15612de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd8906143c0565b60405180910390fd5b601060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e885750602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614155b15612ee4576000600481905550606460205487612ea59190614602565b612eaf91906145d1565b91506064601e5487612ec19190614602565b612ecb91906145d1565b90508082612ed9919061457b565b600481905550612fe4565b601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f8b5750602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b15612fe35760006004819055506064601b5487612fa89190614602565b612fb291906145d1565b9150606460195487612fc49190614602565b612fce91906145d1565b90508082612fdc919061457b565b6004819055505b5b5b8585612ff1919061465c565b600c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808287613041919061465c565b61304b919061465c565b600c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613099919061457b565b925050819055506000811461319a57600454600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130f9919061457b565b925050819055508060246000828254613112919061457b565b92505081905550816023600082825461312b919061457b565b925050819055503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6004546040516131919190614420565b60405180910390a35b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600454896131f7919061465c565b6040516132049190614420565b60405180910390a35050505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6001602260006101000a81548160ff0219169083151502179055506133a1602454613411565b6133ac60235461349c565b7f4596ef7337c1c88bb740707471cfc0ec6d0212036b05ab1bdbb09cf3e3f01904816040516133db9190614420565b60405180910390a1600060238190555060006024819055506000602260006101000a81548160ff02191690831515021790555050565b600060028261342091906145d1565b905060008183613430919061465c565b9050600047905061344083613710565b6000814761344e919061465c565b905061345a8382613962565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405161348d939291906144ef565b60405180910390a15050505050565b6000600267ffffffffffffffff8111156134b9576134b8614865565b5b6040519080825280602002602001820160405280156134e75781602001602082028036833780820191505090505b50905030816000815181106134ff576134fe614836565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156135a157600080fd5b505afa1580156135b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135d99190613b44565b816001815181106135ed576135ec614836565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061365430602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612315565b602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b81526004016136da95949392919061443b565b600060405180830381600087803b1580156136f457600080fd5b505af1158015613708573d6000803e3d6000fd5b505050505050565b6000600267ffffffffffffffff81111561372d5761372c614865565b5b60405190808252806020026020018201604052801561375b5781602001602082028036833780820191505090505b509050308160008151811061377357613772614836565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561381557600080fd5b505afa158015613829573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061384d9190613b44565b8160018151811061386157613860614836565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506138c830602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612315565b602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161392c959493929190614495565b600060405180830381600087803b15801561394657600080fd5b505af115801561395a573d6000803e3d6000fd5b505050505050565b61398f30602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612315565b602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000807f0000000000000000000000000000000000000000000000000000000000000000426040518863ffffffff1660e01b8152600401613a16969594939291906141a2565b6060604051808303818588803b158015613a2f57600080fd5b505af1158015613a43573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613a689190613dcb565b5050505050565b600081359050613a7e81614cb3565b92915050565b600081519050613a9381614cb3565b92915050565b600081359050613aa881614cca565b92915050565b600081359050613abd81614ce1565b92915050565b600081519050613ad281614ce1565b92915050565b600081359050613ae781614cf8565b92915050565b600081359050613afc81614d0f565b92915050565b600081519050613b1181614d0f565b92915050565b600060208284031215613b2d57613b2c614894565b5b6000613b3b84828501613a6f565b91505092915050565b600060208284031215613b5a57613b59614894565b5b6000613b6884828501613a84565b91505092915050565b600060208284031215613b8757613b86614894565b5b6000613b9584828501613a99565b91505092915050565b60008060408385031215613bb557613bb4614894565b5b6000613bc385828601613a99565b9250506020613bd485828601613aae565b9150509250929050565b60008060408385031215613bf557613bf4614894565b5b6000613c0385828601613a6f565b9250506020613c1485828601613a6f565b9150509250929050565b600080600060608486031215613c3757613c36614894565b5b6000613c4586828701613a6f565b9350506020613c5686828701613a6f565b9250506040613c6786828701613aed565b9150509250925092565b60008060408385031215613c8857613c87614894565b5b6000613c9685828601613a6f565b9250506020613ca785828601613aae565b9150509250929050565b60008060408385031215613cc857613cc7614894565b5b6000613cd685828601613a6f565b9250506020613ce785828601613aed565b9150509250929050565b600060208284031215613d0757613d06614894565b5b6000613d1584828501613aae565b91505092915050565b600060208284031215613d3457613d33614894565b5b6000613d4284828501613ac3565b91505092915050565b600080600060608486031215613d6457613d63614894565b5b6000613d7286828701613ad8565b9350506020613d8386828701613a99565b9250506040613d9486828701613aed565b9150509250925092565b600060208284031215613db457613db3614894565b5b6000613dc284828501613aed565b91505092915050565b600080600060608486031215613de457613de3614894565b5b6000613df286828701613b02565b9350506020613e0386828701613b02565b9250506040613e1486828701613b02565b9150509250925092565b6000613e2a8383613e54565b60208301905092915050565b613e3f816146fc565b82525050565b613e4e816146a2565b82525050565b613e5d81614690565b82525050565b613e6c81614690565b82525050565b6000613e7d82614536565b613e878185614559565b9350613e9283614526565b8060005b83811015613ec3578151613eaa8882613e1e565b9750613eb58361454c565b925050600181019050613e96565b5085935050505092915050565b613ed9816146b4565b82525050565b613ee88161470e565b82525050565b6000613ef982614541565b613f03818561456a565b9350613f13818560208601614744565b613f1c81614899565b840191505092915050565b6000613f3460238361456a565b9150613f3f826148aa565b604082019050919050565b6000613f5760268361456a565b9150613f62826148f9565b604082019050919050565b6000613f7a60228361456a565b9150613f8582614948565b604082019050919050565b6000613f9d60398361456a565b9150613fa882614997565b604082019050919050565b6000613fc060268361456a565b9150613fcb826149e6565b604082019050919050565b6000613fe360368361456a565b9150613fee82614a35565b604082019050919050565b600061400660328361456a565b915061401182614a84565b604082019050919050565b6000614029601d8361456a565b915061403482614ad3565b602082019050919050565b600061404c60358361456a565b915061405782614afc565b604082019050919050565b600061406f60288361456a565b915061407a82614b4b565b604082019050919050565b600061409260208361456a565b915061409d82614b9a565b602082019050919050565b60006140b5601b8361456a565b91506140c082614bc3565b602082019050919050565b60006140d860188361456a565b91506140e382614bec565b602082019050919050565b60006140fb60258361456a565b915061410682614c15565b604082019050919050565b600061411e60248361456a565b915061412982614c64565b604082019050919050565b61413d816146f2565b82525050565b60006020820190506141586000830184613e63565b92915050565b60006020820190506141736000830184613e45565b92915050565b600060408201905061418e6000830185613e36565b61419b6020830184614134565b9392505050565b600060c0820190506141b76000830189613e63565b6141c46020830188614134565b6141d16040830187613edf565b6141de6060830186613edf565b6141eb6080830185613e63565b6141f860a0830184614134565b979650505050505050565b60006020820190506142186000830184613ed0565b92915050565b600060208201905081810360008301526142388184613eee565b905092915050565b6000602082019050818103600083015261425981613f27565b9050919050565b6000602082019050818103600083015261427981613f4a565b9050919050565b6000602082019050818103600083015261429981613f6d565b9050919050565b600060208201905081810360008301526142b981613f90565b9050919050565b600060208201905081810360008301526142d981613fb3565b9050919050565b600060208201905081810360008301526142f981613fd6565b9050919050565b6000602082019050818103600083015261431981613ff9565b9050919050565b600060208201905081810360008301526143398161401c565b9050919050565b600060208201905081810360008301526143598161403f565b9050919050565b6000602082019050818103600083015261437981614062565b9050919050565b6000602082019050818103600083015261439981614085565b9050919050565b600060208201905081810360008301526143b9816140a8565b9050919050565b600060208201905081810360008301526143d9816140cb565b9050919050565b600060208201905081810360008301526143f9816140ee565b9050919050565b6000602082019050818103600083015261441981614111565b9050919050565b60006020820190506144356000830184614134565b92915050565b600060a0820190506144506000830188614134565b61445d6020830187613edf565b818103604083015261446f8186613e72565b905061447e6060830185613e36565b61448b6080830184614134565b9695505050505050565b600060a0820190506144aa6000830188614134565b6144b76020830187613edf565b81810360408301526144c98186613e72565b90506144d86060830185613e63565b6144e56080830184614134565b9695505050505050565b60006060820190506145046000830186614134565b6145116020830185614134565b61451e6040830184614134565b949350505050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614586826146f2565b9150614591836146f2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145c6576145c56147a9565b5b828201905092915050565b60006145dc826146f2565b91506145e7836146f2565b9250826145f7576145f66147d8565b5b828204905092915050565b600061460d826146f2565b9150614618836146f2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614651576146506147a9565b5b828202905092915050565b6000614667826146f2565b9150614672836146f2565b925082821015614685576146846147a9565b5b828203905092915050565b600061469b826146d2565b9050919050565b60006146ad826146d2565b9050919050565b60008115159050919050565b60006146cb82614690565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061470782614720565b9050919050565b6000614719826146f2565b9050919050565b600061472b82614732565b9050919050565b600061473d826146d2565b9050919050565b60005b83811015614762578082015181840152602081019050614747565b83811115614771576000848401525b50505050565b6000600282049050600182168061478f57607f821691505b602082108114156147a3576147a2614807565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b7f45524332303a207472616e73666572656420616d6f756e74206d75737420626560008201527f2067726561746572207468616e207a65726f0000000000000000000000000000602082015250565b7f43616e742074726164652c2074726164652069732064697361626c6564000000600082015250565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f556e61626c6520746f20657863656564204d61782057616c6c65740000000000600082015250565b7f4e6f20626f747320616c6c6f77656420746f2074726164650000000000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b614cbc81614690565b8114614cc757600080fd5b50565b614cd3816146a2565b8114614cde57600080fd5b50565b614cea816146b4565b8114614cf557600080fd5b50565b614d01816146c0565b8114614d0c57600080fd5b50565b614d18816146f2565b8114614d2357600080fd5b5056fea26469706673582212203ff0d4315cf65a26385ba94aa7e141bdcceb2bd40f9c2a01d534bf7f50d82f6564736f6c63430008070033

Deployed Bytecode

0x6080604052600436106103395760003560e01c8063893d20e8116101ab578063b62496f5116100f7578063d7d7442f11610095578063e1370dd31161006f578063e1370dd314610bdf578063edcf19b214610c0a578063f2fde38b14610c33578063f7da678514610c5c57610340565b8063d7d7442f14610b4e578063dd62ed3e14610b77578063ddcf9b9814610bb457610340565b8063cb664534116100d1578063cb66453414610a94578063cba0e99614610abd578063d1294d4c14610afa578063d15bcf0f14610b2357610340565b8063b62496f514610a03578063bf9b015914610a40578063bf9eb54014610a6b57610340565b80639b136da411610164578063a6c38f591161013e578063a6c38f591461094b578063a7a0745214610974578063a9059cbb1461099d578063b4d95a93146109da57610340565b80639b136da4146108ca578063a04bdc81146108f5578063a5ece9411461092057610340565b8063893d20e8146107cc5780638cd0260c146107f75780638da5cb5b1461082057806390f502831461084b57806395d89b41146108765780639a7a23d6146108a157610340565b80634a0e963c116102855780636573c4df11610223578063715018a6116101fd578063715018a61461074c578063751039fc14610763578063801527ce1461077a5780638628c23f146107a357610340565b80636573c4df146106bb5780636df3333a146106e457806370a082311461070f57610340565b80634bd7ace51161025f5780634bd7ace5146106115780635297defd1461063c5780635be76f111461066757806364c161631461069057610340565b80634a0e963c146105925780634a62bb65146105bb5780634a74bb02146105e657610340565b806322788f86116102f25780632d03420b116102cc5780632d03420b146104e8578063313ce56714610511578063487a69051461053c57806349bd5a5e1461056757610340565b806322788f861461045557806323b872dd1461048057806327c8f835146104bd57610340565b806306fdde03146103455780630882a86314610370578063095ea7b31461039957806313b4a7f4146103d657806318160ddd146103ff578063220f66961461042a57610340565b3661034057005b600080fd5b34801561035157600080fd5b5061035a610c85565b604051610367919061421e565b60405180910390f35b34801561037c57600080fd5b5061039760048036038101906103929190613d9e565b610d17565b005b3480156103a557600080fd5b506103c060048036038101906103bb9190613cb1565b610d9d565b6040516103cd9190614203565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f89190613bde565b610dbb565b005b34801561040b57600080fd5b50610414610f9b565b6040516104219190614420565b60405180910390f35b34801561043657600080fd5b5061043f610fa5565b60405161044c9190614203565b60405180910390f35b34801561046157600080fd5b5061046a610fb8565b6040516104779190614420565b60405180910390f35b34801561048c57600080fd5b506104a760048036038101906104a29190613c1e565b610fc2565b6040516104b49190614203565b60405180910390f35b3480156104c957600080fd5b506104d2611140565b6040516104df9190614143565b60405180910390f35b3480156104f457600080fd5b5061050f600480360381019061050a9190613cf1565b611164565b005b34801561051d57600080fd5b506105266111fd565b6040516105339190614420565b60405180910390f35b34801561054857600080fd5b50610551611217565b60405161055e9190614420565b60405180910390f35b34801561057357600080fd5b5061057c611221565b6040516105899190614143565b60405180910390f35b34801561059e57600080fd5b506105b960048036038101906105b49190613b17565b611247565b005b3480156105c757600080fd5b506105d061131e565b6040516105dd9190614203565b60405180910390f35b3480156105f257600080fd5b506105fb611331565b6040516106089190614203565b60405180910390f35b34801561061d57600080fd5b50610626611344565b6040516106339190614420565b60405180910390f35b34801561064857600080fd5b5061065161134e565b60405161065e9190614420565b60405180910390f35b34801561067357600080fd5b5061068e60048036038101906106899190613b71565b611358565b005b34801561069c57600080fd5b506106a5611424565b6040516106b29190614420565b60405180910390f35b3480156106c757600080fd5b506106e260048036038101906106dd9190613d9e565b61142e565b005b3480156106f057600080fd5b506106f96114d6565b6040516107069190614420565b60405180910390f35b34801561071b57600080fd5b5061073660048036038101906107319190613b17565b6114e0565b6040516107439190614420565b60405180910390f35b34801561075857600080fd5b50610761611529565b005b34801561076f57600080fd5b506107786115b1565b005b34801561078657600080fd5b506107a1600480360381019061079c9190613cf1565b61164a565b005b3480156107af57600080fd5b506107ca60048036038101906107c59190613d9e565b6116e3565b005b3480156107d857600080fd5b506107e1611769565b6040516107ee9190614143565b60405180910390f35b34801561080357600080fd5b5061081e60048036038101906108199190613d9e565b611778565b005b34801561082c57600080fd5b506108356117fe565b6040516108429190614143565b60405180910390f35b34801561085757600080fd5b50610860611827565b60405161086d9190614420565b60405180910390f35b34801561088257600080fd5b5061088b611831565b604051610898919061421e565b60405180910390f35b3480156108ad57600080fd5b506108c860048036038101906108c39190613c71565b6118c3565b005b3480156108d657600080fd5b506108df6119de565b6040516108ec9190614420565b60405180910390f35b34801561090157600080fd5b5061090a6119e8565b6040516109179190614420565b60405180910390f35b34801561092c57600080fd5b506109356119ee565b604051610942919061415e565b60405180910390f35b34801561095757600080fd5b50610972600480360381019061096d9190613b9e565b611a14565b005b34801561098057600080fd5b5061099b60048036038101906109969190613d9e565b611aeb565b005b3480156109a957600080fd5b506109c460048036038101906109bf9190613cb1565b611b93565b6040516109d19190614203565b60405180910390f35b3480156109e657600080fd5b50610a0160048036038101906109fc9190613b17565b611bb1565b005b348015610a0f57600080fd5b50610a2a6004803603810190610a259190613b17565b611c88565b604051610a379190614203565b60405180910390f35b348015610a4c57600080fd5b50610a55611ca8565b604051610a629190614420565b60405180910390f35b348015610a7757600080fd5b50610a926004803603810190610a8d9190613b17565b611cb2565b005b348015610aa057600080fd5b50610abb6004803603810190610ab69190613b17565b611d72565b005b348015610ac957600080fd5b50610ae46004803603810190610adf9190613b17565b611e49565b604051610af19190614203565b60405180910390f35b348015610b0657600080fd5b50610b216004803603810190610b1c9190613d9e565b611e9f565b005b348015610b2f57600080fd5b50610b38611f48565b604051610b459190614203565b60405180910390f35b348015610b5a57600080fd5b50610b756004803603810190610b709190613d9e565b611f5f565b005b348015610b8357600080fd5b50610b9e6004803603810190610b999190613bde565b611fe5565b604051610bab9190614420565b60405180910390f35b348015610bc057600080fd5b50610bc961206c565b604051610bd69190614420565b60405180910390f35b348015610beb57600080fd5b50610bf4612076565b604051610c019190614420565b60405180910390f35b348015610c1657600080fd5b50610c316004803603810190610c2c9190613d9e565b612080565b005b348015610c3f57600080fd5b50610c5a6004803603810190610c559190613b17565b612106565b005b348015610c6857600080fd5b50610c836004803603810190610c7e9190613d4b565b6121fe565b005b606060018054610c9490614777565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc090614777565b8015610d0d5780601f10610ce257610100808354040283529160200191610d0d565b820191906000526020600020905b815481529060010190602001808311610cf057829003601f168201915b5050505050905090565b610d1f61230d565b73ffffffffffffffffffffffffffffffffffffffff16610d3d6117fe565b73ffffffffffffffffffffffffffffffffffffffff1614610d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8a90614380565b60405180910390fd5b8060198190555050565b6000610db1610daa61230d565b8484612315565b6001905092915050565b610dc361230d565b73ffffffffffffffffffffffffffffffffffffffff16610de16117fe565b73ffffffffffffffffffffffffffffffffffffffff1614610e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2e90614380565b60405180910390fd5b6001601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600a54905090565b602260009054906101000a900460ff1681565b6000600954905090565b6000600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061100d61230d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561108a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108190614360565b60405180910390fd5b6110958484846124e0565b611135846110a161230d565b84600e60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110eb61230d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611130919061465c565b612315565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b61116c61230d565b73ffffffffffffffffffffffffffffffffffffffff1661118a6117fe565b73ffffffffffffffffffffffffffffffffffffffff16146111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d790614380565b60405180910390fd5b80601d60006101000a81548160ff02191690831515021790555050565b6000600360009054906101000a900460ff1660ff16905090565b6000600b54905090565b602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61124f61230d565b73ffffffffffffffffffffffffffffffffffffffff1661126d6117fe565b73ffffffffffffffffffffffffffffffffffffffff16146112c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ba90614380565b60405180910390fd5b6001600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600860009054906101000a900460ff1681565b602260019054906101000a900460ff1681565b6000601954905090565b6000602054905090565b61136061230d565b73ffffffffffffffffffffffffffffffffffffffff1661137e6117fe565b73ffffffffffffffffffffffffffffffffffffffff16146113d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cb90614380565b60405180910390fd5b60004790508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561141f573d6000803e3d6000fd5b505050565b6000602454905090565b61143661230d565b73ffffffffffffffffffffffffffffffffffffffff166114546117fe565b73ffffffffffffffffffffffffffffffffffffffff16146114aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a190614380565b60405180910390fd5b806005819055506064600554600a546114c39190614602565b6114cd91906145d1565b60138190555050565b6000600754905090565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61153161230d565b73ffffffffffffffffffffffffffffffffffffffff1661154f6117fe565b73ffffffffffffffffffffffffffffffffffffffff16146115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c90614380565b60405180910390fd5b6115af6000613216565b565b6115b961230d565b73ffffffffffffffffffffffffffffffffffffffff166115d76117fe565b73ffffffffffffffffffffffffffffffffffffffff161461162d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162490614380565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550565b61165261230d565b73ffffffffffffffffffffffffffffffffffffffff166116706117fe565b73ffffffffffffffffffffffffffffffffffffffff16146116c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bd90614380565b60405180910390fd5b80602260016101000a81548160ff02191690831515021790555050565b6116eb61230d565b73ffffffffffffffffffffffffffffffffffffffff166117096117fe565b73ffffffffffffffffffffffffffffffffffffffff161461175f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175690614380565b60405180910390fd5b8060208190555050565b60006117736117fe565b905090565b61178061230d565b73ffffffffffffffffffffffffffffffffffffffff1661179e6117fe565b73ffffffffffffffffffffffffffffffffffffffff16146117f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117eb90614380565b60405180910390fd5b80601e8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000601e54905090565b60606002805461184090614777565b80601f016020809104026020016040519081016040528092919081815260200182805461186c90614777565b80156118b95780601f1061188e576101008083540402835291602001916118b9565b820191906000526020600020905b81548152906001019060200180831161189c57829003601f168201915b5050505050905090565b6118cb61230d565b73ffffffffffffffffffffffffffffffffffffffff166118e96117fe565b73ffffffffffffffffffffffffffffffffffffffff161461193f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193690614380565b60405180910390fd5b602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c7906142a0565b60405180910390fd5b6119da82826132da565b5050565b6000601b54905090565b600b5481565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611a1c61230d565b73ffffffffffffffffffffffffffffffffffffffff16611a3a6117fe565b73ffffffffffffffffffffffffffffffffffffffff1614611a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8790614380565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611af361230d565b73ffffffffffffffffffffffffffffffffffffffff16611b116117fe565b73ffffffffffffffffffffffffffffffffffffffff1614611b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5e90614380565b60405180910390fd5b806006819055506064600654600a54611b809190614602565b611b8a91906145d1565b60148190555050565b6000611ba7611ba061230d565b84846124e0565b6001905092915050565b611bb961230d565b73ffffffffffffffffffffffffffffffffffffffff16611bd76117fe565b73ffffffffffffffffffffffffffffffffffffffff1614611c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2490614380565b60405180910390fd5b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60106020528060005260406000206000915054906101000a900460ff1681565b6000601454905090565b611cba61230d565b73ffffffffffffffffffffffffffffffffffffffff16611cd86117fe565b73ffffffffffffffffffffffffffffffffffffffff1614611d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2590614380565b60405180910390fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611d7a61230d565b73ffffffffffffffffffffffffffffffffffffffff16611d986117fe565b73ffffffffffffffffffffffffffffffffffffffff1614611dee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de590614380565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611ea761230d565b73ffffffffffffffffffffffffffffffffffffffff16611ec56117fe565b73ffffffffffffffffffffffffffffffffffffffff1614611f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1290614380565b60405180910390fd5b806007819055506103e8600754600a54611f359190614602565b611f3f91906145d1565b600b8190555050565b6000601d60009054906101000a900460ff16905090565b611f6761230d565b73ffffffffffffffffffffffffffffffffffffffff16611f856117fe565b73ffffffffffffffffffffffffffffffffffffffff1614611fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd290614380565b60405180910390fd5b8060098190555050565b6000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000602354905090565b6000601354905090565b61208861230d565b73ffffffffffffffffffffffffffffffffffffffff166120a66117fe565b73ffffffffffffffffffffffffffffffffffffffff16146120fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f390614380565b60405180910390fd5b80601b8190555050565b61210e61230d565b73ffffffffffffffffffffffffffffffffffffffff1661212c6117fe565b73ffffffffffffffffffffffffffffffffffffffff1614612182576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217990614380565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e990614260565b60405180910390fd5b6121fb81613216565b50565b61220661230d565b73ffffffffffffffffffffffffffffffffffffffff166122246117fe565b73ffffffffffffffffffffffffffffffffffffffff161461227a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227190614380565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016122b5929190614179565b602060405180830381600087803b1580156122cf57600080fd5b505af11580156122e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123079190613d1e565b50505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237c90614400565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ec90614280565b60405180910390fd5b80600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124d39190614420565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612550576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612547906143e0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b790614240565b60405180910390fd5b60008111612603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fa90614300565b60405180910390fd5b6000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561268a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612681906142c0565b60405180910390fd5b60001515601d60009054906101000a900460ff161515141561278757601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127475750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277d90614320565b60405180910390fd5b5b600860009054906101000a900460ff1615612b74576127a46117fe565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561281257506127e26117fe565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561284b5750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612885575061dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612b7357601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561292d5750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129d457601454821115612977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296e90614340565b60405180910390fd5b601354612983846114e0565b8361298e919061457b565b11156129cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c6906143a0565b60405180910390fd5b612b72565b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a775750600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ac657601454821115612ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab8906142e0565b60405180910390fd5b612b71565b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612b7057601354612b23846114e0565b83612b2e919061457b565b1115612b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b66906143a0565b60405180910390fd5b5b5b5b5b5b6000612b7f306114e0565b9050600b548110158015612ba05750602260009054906101000a900460ff16155b8015612bfa5750602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612c125750602260019054906101000a900460ff165b15612c3057600b548110612c2f57600b549050612c2e8161337b565b5b5b600060019050600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612cd75750600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ce9576000600481905550600090505b6000808215612fe55760011515601560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151480612da1575060011515601560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b15612de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd8906143c0565b60405180910390fd5b601060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e885750602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614155b15612ee4576000600481905550606460205487612ea59190614602565b612eaf91906145d1565b91506064601e5487612ec19190614602565b612ecb91906145d1565b90508082612ed9919061457b565b600481905550612fe4565b601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f8b5750602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b15612fe35760006004819055506064601b5487612fa89190614602565b612fb291906145d1565b9150606460195487612fc49190614602565b612fce91906145d1565b90508082612fdc919061457b565b6004819055505b5b5b8585612ff1919061465c565b600c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808287613041919061465c565b61304b919061465c565b600c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613099919061457b565b925050819055506000811461319a57600454600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130f9919061457b565b925050819055508060246000828254613112919061457b565b92505081905550816023600082825461312b919061457b565b925050819055503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6004546040516131919190614420565b60405180910390a35b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600454896131f7919061465c565b6040516132049190614420565b60405180910390a35050505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6001602260006101000a81548160ff0219169083151502179055506133a1602454613411565b6133ac60235461349c565b7f4596ef7337c1c88bb740707471cfc0ec6d0212036b05ab1bdbb09cf3e3f01904816040516133db9190614420565b60405180910390a1600060238190555060006024819055506000602260006101000a81548160ff02191690831515021790555050565b600060028261342091906145d1565b905060008183613430919061465c565b9050600047905061344083613710565b6000814761344e919061465c565b905061345a8382613962565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405161348d939291906144ef565b60405180910390a15050505050565b6000600267ffffffffffffffff8111156134b9576134b8614865565b5b6040519080825280602002602001820160405280156134e75781602001602082028036833780820191505090505b50905030816000815181106134ff576134fe614836565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156135a157600080fd5b505afa1580156135b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135d99190613b44565b816001815181106135ed576135ec614836565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061365430602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612315565b602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b81526004016136da95949392919061443b565b600060405180830381600087803b1580156136f457600080fd5b505af1158015613708573d6000803e3d6000fd5b505050505050565b6000600267ffffffffffffffff81111561372d5761372c614865565b5b60405190808252806020026020018201604052801561375b5781602001602082028036833780820191505090505b509050308160008151811061377357613772614836565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561381557600080fd5b505afa158015613829573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061384d9190613b44565b8160018151811061386157613860614836565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506138c830602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612315565b602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161392c959493929190614495565b600060405180830381600087803b15801561394657600080fd5b505af115801561395a573d6000803e3d6000fd5b505050505050565b61398f30602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612315565b602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000807f000000000000000000000000000000000000000000000000000000000000dead426040518863ffffffff1660e01b8152600401613a16969594939291906141a2565b6060604051808303818588803b158015613a2f57600080fd5b505af1158015613a43573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613a689190613dcb565b5050505050565b600081359050613a7e81614cb3565b92915050565b600081519050613a9381614cb3565b92915050565b600081359050613aa881614cca565b92915050565b600081359050613abd81614ce1565b92915050565b600081519050613ad281614ce1565b92915050565b600081359050613ae781614cf8565b92915050565b600081359050613afc81614d0f565b92915050565b600081519050613b1181614d0f565b92915050565b600060208284031215613b2d57613b2c614894565b5b6000613b3b84828501613a6f565b91505092915050565b600060208284031215613b5a57613b59614894565b5b6000613b6884828501613a84565b91505092915050565b600060208284031215613b8757613b86614894565b5b6000613b9584828501613a99565b91505092915050565b60008060408385031215613bb557613bb4614894565b5b6000613bc385828601613a99565b9250506020613bd485828601613aae565b9150509250929050565b60008060408385031215613bf557613bf4614894565b5b6000613c0385828601613a6f565b9250506020613c1485828601613a6f565b9150509250929050565b600080600060608486031215613c3757613c36614894565b5b6000613c4586828701613a6f565b9350506020613c5686828701613a6f565b9250506040613c6786828701613aed565b9150509250925092565b60008060408385031215613c8857613c87614894565b5b6000613c9685828601613a6f565b9250506020613ca785828601613aae565b9150509250929050565b60008060408385031215613cc857613cc7614894565b5b6000613cd685828601613a6f565b9250506020613ce785828601613aed565b9150509250929050565b600060208284031215613d0757613d06614894565b5b6000613d1584828501613aae565b91505092915050565b600060208284031215613d3457613d33614894565b5b6000613d4284828501613ac3565b91505092915050565b600080600060608486031215613d6457613d63614894565b5b6000613d7286828701613ad8565b9350506020613d8386828701613a99565b9250506040613d9486828701613aed565b9150509250925092565b600060208284031215613db457613db3614894565b5b6000613dc284828501613aed565b91505092915050565b600080600060608486031215613de457613de3614894565b5b6000613df286828701613b02565b9350506020613e0386828701613b02565b9250506040613e1486828701613b02565b9150509250925092565b6000613e2a8383613e54565b60208301905092915050565b613e3f816146fc565b82525050565b613e4e816146a2565b82525050565b613e5d81614690565b82525050565b613e6c81614690565b82525050565b6000613e7d82614536565b613e878185614559565b9350613e9283614526565b8060005b83811015613ec3578151613eaa8882613e1e565b9750613eb58361454c565b925050600181019050613e96565b5085935050505092915050565b613ed9816146b4565b82525050565b613ee88161470e565b82525050565b6000613ef982614541565b613f03818561456a565b9350613f13818560208601614744565b613f1c81614899565b840191505092915050565b6000613f3460238361456a565b9150613f3f826148aa565b604082019050919050565b6000613f5760268361456a565b9150613f62826148f9565b604082019050919050565b6000613f7a60228361456a565b9150613f8582614948565b604082019050919050565b6000613f9d60398361456a565b9150613fa882614997565b604082019050919050565b6000613fc060268361456a565b9150613fcb826149e6565b604082019050919050565b6000613fe360368361456a565b9150613fee82614a35565b604082019050919050565b600061400660328361456a565b915061401182614a84565b604082019050919050565b6000614029601d8361456a565b915061403482614ad3565b602082019050919050565b600061404c60358361456a565b915061405782614afc565b604082019050919050565b600061406f60288361456a565b915061407a82614b4b565b604082019050919050565b600061409260208361456a565b915061409d82614b9a565b602082019050919050565b60006140b5601b8361456a565b91506140c082614bc3565b602082019050919050565b60006140d860188361456a565b91506140e382614bec565b602082019050919050565b60006140fb60258361456a565b915061410682614c15565b604082019050919050565b600061411e60248361456a565b915061412982614c64565b604082019050919050565b61413d816146f2565b82525050565b60006020820190506141586000830184613e63565b92915050565b60006020820190506141736000830184613e45565b92915050565b600060408201905061418e6000830185613e36565b61419b6020830184614134565b9392505050565b600060c0820190506141b76000830189613e63565b6141c46020830188614134565b6141d16040830187613edf565b6141de6060830186613edf565b6141eb6080830185613e63565b6141f860a0830184614134565b979650505050505050565b60006020820190506142186000830184613ed0565b92915050565b600060208201905081810360008301526142388184613eee565b905092915050565b6000602082019050818103600083015261425981613f27565b9050919050565b6000602082019050818103600083015261427981613f4a565b9050919050565b6000602082019050818103600083015261429981613f6d565b9050919050565b600060208201905081810360008301526142b981613f90565b9050919050565b600060208201905081810360008301526142d981613fb3565b9050919050565b600060208201905081810360008301526142f981613fd6565b9050919050565b6000602082019050818103600083015261431981613ff9565b9050919050565b600060208201905081810360008301526143398161401c565b9050919050565b600060208201905081810360008301526143598161403f565b9050919050565b6000602082019050818103600083015261437981614062565b9050919050565b6000602082019050818103600083015261439981614085565b9050919050565b600060208201905081810360008301526143b9816140a8565b9050919050565b600060208201905081810360008301526143d9816140cb565b9050919050565b600060208201905081810360008301526143f9816140ee565b9050919050565b6000602082019050818103600083015261441981614111565b9050919050565b60006020820190506144356000830184614134565b92915050565b600060a0820190506144506000830188614134565b61445d6020830187613edf565b818103604083015261446f8186613e72565b905061447e6060830185613e36565b61448b6080830184614134565b9695505050505050565b600060a0820190506144aa6000830188614134565b6144b76020830187613edf565b81810360408301526144c98186613e72565b90506144d86060830185613e63565b6144e56080830184614134565b9695505050505050565b60006060820190506145046000830186614134565b6145116020830185614134565b61451e6040830184614134565b949350505050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614586826146f2565b9150614591836146f2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145c6576145c56147a9565b5b828201905092915050565b60006145dc826146f2565b91506145e7836146f2565b9250826145f7576145f66147d8565b5b828204905092915050565b600061460d826146f2565b9150614618836146f2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614651576146506147a9565b5b828202905092915050565b6000614667826146f2565b9150614672836146f2565b925082821015614685576146846147a9565b5b828203905092915050565b600061469b826146d2565b9050919050565b60006146ad826146d2565b9050919050565b60008115159050919050565b60006146cb82614690565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061470782614720565b9050919050565b6000614719826146f2565b9050919050565b600061472b82614732565b9050919050565b600061473d826146d2565b9050919050565b60005b83811015614762578082015181840152602081019050614747565b83811115614771576000848401525b50505050565b6000600282049050600182168061478f57607f821691505b602082108114156147a3576147a2614807565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b7f45524332303a207472616e73666572656420616d6f756e74206d75737420626560008201527f2067726561746572207468616e207a65726f0000000000000000000000000000602082015250565b7f43616e742074726164652c2074726164652069732064697361626c6564000000600082015250565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f556e61626c6520746f20657863656564204d61782057616c6c65740000000000600082015250565b7f4e6f20626f747320616c6c6f77656420746f2074726164650000000000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b614cbc81614690565b8114614cc757600080fd5b50565b614cd3816146a2565b8114614cde57600080fd5b50565b614cea816146b4565b8114614cf557600080fd5b50565b614d01816146c0565b8114614d0c57600080fd5b50565b614d18816146f2565b8114614d2357600080fd5b5056fea26469706673582212203ff0d4315cf65a26385ba94aa7e141bdcceb2bd40f9c2a01d534bf7f50d82f6564736f6c63430008070033

Deployed Bytecode Sourcemap

5417:15838:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9996:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20073:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9643:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18791:302;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9053:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7174:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11495:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10536:388;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7256:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16989:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9906:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21147:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7722:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18545:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5771:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7209:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11068:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11385:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16803:178;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8945:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10347:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21044:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9170:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4782:94;;;;;;;;;;;;;:::i;:::-;;9817:81;;;;;;;;;;;;;:::i;:::-;;19225:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20435:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8742:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20316:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4131:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11281:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10078:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19629:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11170:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5926:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6341:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10932:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10176:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9299:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18667:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6255:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20666:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19376:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16010:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11602:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20761:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20941:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19105:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9486:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8834:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20563:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20190:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5031:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16552:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9996:76;10035:13;10062:5;10055:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9996:76;:::o;20073:111::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20167:9:::1;20155;:21;;;;20073:111:::0;:::o;9643:168::-;9720:4;9740:37;9749:12;:10;:12::i;:::-;9762:7;9770:6;9740:8;:37::i;:::-;9799:4;9792:11;;9643:168;;;;:::o;18791:302::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18934:4:::1;18897:17;:34;18923:6;18897:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;18978:4;18949:17;:26;18967:7;18949:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;19029:4;18993:16;:33;19018:6;18993:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;19072:4;19044:16;:25;19061:7;19044:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;18791:302:::0;;:::o;9053:106::-;9108:7;9138:12;;9131:19;;9053:106;:::o;7174:28::-;;;;;;;;;;;;;:::o;11495:101::-;11546:7;11572:16;;11565:23;;11495:101;:::o;10536:388::-;10668:4;10702:11;:19;10714:6;10702:19;;;;;;;;;;;;;;;:33;10722:12;:10;:12::i;:::-;10702:33;;;;;;;;;;;;;;;;10692:6;:43;;10684:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;10785:36;10795:6;10803:9;10814:6;10785:9;:36::i;:::-;10826:74;10835:6;10843:12;:10;:12::i;:::-;10893:6;10857:11;:19;10869:6;10857:19;;;;;;;;;;;;;;;:33;10877:12;:10;:12::i;:::-;10857:33;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;10826:8;:74::i;:::-;10912:4;10905:11;;10536:388;;;;;:::o;7256:81::-;;;:::o;16989:90::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17065:6:::1;17050:12;;:21;;;;;;;;;;;;;;;;;;16989:90:::0;:::o;9906:84::-;9947:7;9973:9;;;;;;;;;;;9966:16;;;;9906:84;:::o;21147:105::-;21198:7;21224:20;;21217:27;;21147:105;:::o;7722:28::-;;;;;;;;;;;;;:::o;18545:114::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18647:4:::1;18616:17;:28;18634:9;18616:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;18545:114:::0;:::o;5771:33::-;;;;;;;;;;;;;:::o;7209:40::-;;;;;;;;;;;;;:::o;11068:96::-;11117:7;11147:9;;11140:16;;11068:96;:::o;11385:98::-;11435:7;11465:10;;11458:17;;11385:98;:::o;16803:178::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16879:18:::1;16900:21;16879:42;;16940:11;16932:29;;:41;16962:10;16932:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;16868:113;16803:178:::0;:::o;8945:99::-;8996:7;9026:9;;9019:16;;8945:99;:::o;10347:175::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10443:6:::1;10423:17;:26;;;;10509:3;10491:17;;10478:12;;:30;;;;:::i;:::-;:34;;;;:::i;:::-;10460:15;:52;;;;10347:175:::0;:::o;21044:97::-;21095:7;21121:12;;21114:19;;21044:97;:::o;9170:118::-;9236:7;9262:9;:18;9272:7;9262:18;;;;;;;;;;;;;;;;9255:25;;9170:118;;;:::o;4782:94::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4847:21:::1;4865:1;4847:9;:21::i;:::-;4782:94::o:0;9817:81::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9885:5:::1;9868:14;;:22;;;;;;;;;;;;;;;;;;9817:81::o:0;19225:113::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19322:8:::1;19298:21;;:32;;;;;;;;;;;;;;;;;;19225:113:::0;:::o;20435:112::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20530:9:::1;20518:10;:21;;;;20435:112:::0;:::o;8742:86::-;8783:7;8813;:5;:7::i;:::-;8806:14;;8742:86;:::o;20316:113::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20412:9:::1;20400:10;:21;;;;20316:113:::0;:::o;4131:87::-;4177:7;4204:6;;;;;;;;;;;4197:13;;4131:87;:::o;11281:98::-;11331:7;11361:10;;11354:17;;11281:98;:::o;10078:88::-;10119:13;10151:7;10144:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10078:88;:::o;19629:242::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19736:13:::1;;;;;;;;;;;19728:21;;:4;:21;;;;19720:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;19822:41;19851:4;19857:5;19822:28;:41::i;:::-;19629:242:::0;;:::o;11170:96::-;11219:7;11249:9;;11242:16;;11170:96;:::o;5926:71::-;;;;:::o;6341:93::-;;;;;;;;;;;;;:::o;10932:130::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11049:5:::1;11023:10;:23;11034:11;11023:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;10932:130:::0;;:::o;10176:164::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10264:6:::1;10248:13;:22;;;;10322:3;10308:13;;10295:12;;:26;;;;:::i;:::-;:30;;;;:::i;:::-;10281:11;:44;;;;10176:164:::0;:::o;9299:176::-;9379:4;9399:40;9409:12;:10;:12::i;:::-;9422:9;9432:6;9399:9;:40::i;:::-;9461:4;9454:11;;9299:176;;;;:::o;18667:116::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18770:5:::1;18740:17;:27;18758:8;18740:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;18667:116:::0;:::o;6255:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;20666:89::-;20710:7;20736:11;;20729:18;;20666:89;:::o;19376:118::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19475:10:::1;19448:16;;:38;;;;;;;;;;;;;;;;;;19376:118:::0;:::o;16010:123::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16114:4:::1;16082:17;:29;16100:10;16082:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;16010:123:::0;:::o;11602:118::-;11659:4;11686:17;:26;11704:7;11686:26;;;;;;;;;;;;;;;;;;;;;;;;;11679:33;;11602:118;;;:::o;20761:174::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20847:6:::1;20832:12;:21;;;;20913:4;20900:12;;20887;;:25;;;;:::i;:::-;:30;;;;:::i;:::-;20864:20;:53;;;;20761:174:::0;:::o;20941:97::-;20992:4;21015:12;;;;;;;;;;;21008:19;;20941:97;:::o;19105:112::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19195:12:::1;19176:16;:31;;;;19105:112:::0;:::o;9486:148::-;9569:7;9599:11;:18;9611:5;9599:18;;;;;;;;;;;;;;;:27;9618:7;9599:27;;;;;;;;;;;;;;;;9592:34;;9486:148;;;;:::o;8834:99::-;8885:7;8915:9;;8908:16;;8834:99;:::o;20563:97::-;20611:7;20637:15;;20630:22;;20563:97;:::o;20190:111::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20284:9:::1;20273;:20;;;;20190:111:::0;:::o;5031:192::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5140:1:::1;5120:22;;:8;:22;;;;5112:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5196:19;5206:8;5196:9;:19::i;:::-;5031:192:::0;:::o;16552:243::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16745:12:::1;:21;;;16767:11;16780:6;16745:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16552:243:::0;;;:::o;91:98::-;144:7;171:10;164:17;;91:98;:::o;18177:322::-;18286:1;18269:19;;:5;:19;;;;18261:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18361:1;18342:21;;:7;:21;;;;18334:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18439:6;18409:11;:18;18421:5;18409:18;;;;;;;;;;;;;;;:27;18428:7;18409:27;;;;;;;;;;;;;;;:36;;;;18471:7;18455:32;;18464:5;18455:32;;;18480:6;18455:32;;;;;;:::i;:::-;;;;;;;;18177:322;;;:::o;11728:4007::-;11842:1;11826:18;;:4;:18;;;;11818:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11913:1;11899:16;;:2;:16;;;;11891:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;11983:1;11974:6;:10;11966:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;12049:21;12073:9;:15;12083:4;12073:15;;;;;;;;;;;;;;;;12049:39;;12124:6;12107:13;:23;;12099:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12203:5;12187:21;;:12;;;;;;;;;;;:21;;;12184:141;;;12232:17;:21;12250:2;12232:21;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;12257:17;:23;12275:4;12257:23;;;;;;;;;;;;;;;;;;;;;;;;;12232:48;12224:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;12184:141;12370:14;;;;;;;;;;;12367:1075;;;12430:7;:5;:7::i;:::-;12422:15;;:4;:15;;;;:49;;;;;12464:7;:5;:7::i;:::-;12458:13;;:2;:13;;;;12422:49;:86;;;;;12506:1;12492:16;;:2;:16;;;;12422:86;:128;;;;;12543:6;12529:21;;:2;:21;;;;12422:128;12400:1031;;;12636:25;:31;12662:4;12636:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;12672:31;:35;12704:2;12672:35;;;;;;;;;;;;;;;;;;;;;;;;;12671:36;12636:71;12632:784;;;12750:11;;12740:6;:21;;12732:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;12876:15;;12859:13;12869:2;12859:9;:13::i;:::-;12850:6;:22;;;;:::i;:::-;:41;;12842:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;12632:784;;;13024:25;:29;13050:2;13024:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;13058:31;:37;13090:4;13058:37;;;;;;;;;;;;;;;;;;;;;;;;;13057:38;13024:71;13020:396;;;13138:11;;13128:6;:21;;13120:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;13020:396;;;13255:31;:35;13287:2;13255:35;;;;;;;;;;;;;;;;;;;;;;;;;13251:165;;13349:15;;13332:13;13342:2;13332:9;:13::i;:::-;13323:6;:22;;;;:::i;:::-;:41;;13315:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;13251:165;13020:396;12632:784;12400:1031;12367:1075;13453:25;13481:24;13499:4;13481:9;:24::i;:::-;13453:52;;13541:20;;13521:17;:40;;:66;;;;;13571:16;;;;;;;;;;;13570:17;13521:66;:96;;;;;13604:13;;;;;;;;;;;13596:21;;:4;:21;;;;13521:96;:126;;;;;13626:21;;;;;;;;;;;13521:126;13518:352;;;13691:20;;13670:17;:41;13667:188;;13756:20;;13736:40;;13799:36;13817:17;13799;:36::i;:::-;13667:188;13518:352;13886:13;13902:4;13886:20;;13952:17;:23;13970:4;13952:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;13979:17;:21;13997:2;13979:21;;;;;;;;;;;;;;;;;;;;;;;;;13952:48;13949:159;;;14037:1;14021:13;:17;;;;14068:5;14057:16;;13949:159;14122:17;14165;14243:8;14240:1023;;;14340:4;14320:24;;:10;:16;14331:4;14320:16;;;;;;;;;;;;;;;;;;;;;;;;;:24;;;:46;;;;14362:4;14346:20;;:10;:14;14357:2;14346:14;;;;;;;;;;;;;;;;;;;;;;;;;:20;;;14320:46;14317:127;;;14390:34;;;;;;;;;;:::i;:::-;;;;;;;;14317:127;14498:25;:29;14524:2;14498:29;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;;14545:7;;;;;;;;;;;14531:22;;:2;:22;;;;14498:55;14494:734;;;14598:1;14582:13;:17;;;;14658:3;14647:10;;14638:6;:19;;;;:::i;:::-;:23;;;;:::i;:::-;14626:35;;14720:3;14709:10;;14700:6;:19;;;;:::i;:::-;:23;;;;:::i;:::-;14688:35;;14804:9;14792;:21;;;;:::i;:::-;14776:13;:37;;;;14494:734;;;14888:25;:31;14914:4;14888:31;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;14939:7;;;;;;;;;;;14923:24;;:4;:24;;;;14888:59;14885:343;;;15010:1;14994:13;:17;;;;15065:3;15055:9;;15046:6;:18;;;;:::i;:::-;:22;;;;:::i;:::-;15034:34;;15122:3;15112:9;;15103:6;:18;;;;:::i;:::-;:22;;;;:::i;:::-;15091:34;;15198:9;15186;:21;;;;:::i;:::-;15170:13;:37;;;;14885:343;14494:734;14240:1023;15313:6;15297:13;:22;;;;:::i;:::-;15279:9;:15;15289:4;15279:15;;;;;;;;;;;;;;;:40;;;;15372:9;15360;15351:6;:18;;;;:::i;:::-;:30;;;;:::i;:::-;15334:9;:13;15344:2;15334:13;;;;;;;;;;;;;;;;:47;;;;;;;:::i;:::-;;;;;;;;15412:1;15399:9;:14;15396:249;;15449:13;;15421:9;:24;15439:4;15421:24;;;;;;;;;;;;;;;;:41;;;;;;;:::i;:::-;;;;;;;;15520:9;15507;;:22;;;;;;;:::i;:::-;;;;;;;;15557:9;15544;;:22;;;;;;;:::i;:::-;;;;;;;;15600:4;15577:44;;15586:4;15577:44;;;15607:13;;15577:44;;;;;;:::i;:::-;;;;;;;;15396:249;15679:2;15664:39;;15673:4;15664:39;;;15689:13;;15682:6;:20;;;;:::i;:::-;15664:39;;;;;;:::i;:::-;;;;;;;;11797:3938;;;;;11728:4007;;;:::o;5231:173::-;5287:16;5306:6;;;;;;;;;;;5287:25;;5332:8;5323:6;;:17;;;;;;;;;;;;;;;;;;5387:8;5356:40;;5377:8;5356:40;;;;;;;;;;;;5276:128;5231:173;:::o;19877:188::-;19994:5;19960:25;:31;19986:4;19960:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;20051:5;20017:40;;20045:4;20017:40;;;;;;;;;;;;19877:188;;:::o;15741:262::-;7829:4;7810:16;;:23;;;;;;;;;;;;;;;;;;15821:25:::1;15836:9;;15821:14;:25::i;:::-;15857:30;15877:9;;15857:19;:30::i;:::-;15903:44;15933:13;15903:44;;;;;;:::i;:::-;;;;;;;;15970:1;15958:9;:13;;;;15994:1;15982:9;:13;;;;7863:5:::0;7844:16;;:24;;;;;;;;;;;;;;;;;;15741:262;:::o;17087:388::-;17149:12;17182:1;17164:15;:19;;;;:::i;:::-;17149:34;;17188:17;17226:4;17208:15;:22;;;;:::i;:::-;17188:42;;17235:22;17260:21;17235:46;;17288:22;17305:4;17288:16;:22::i;:::-;17315:18;17361:14;17336:21;:40;;;;:::i;:::-;17315:61;;17384:35;17397:9;17408:10;17384:12;:35::i;:::-;17429:41;17444:4;17449:10;17460:9;17429:41;;;;;;;;:::i;:::-;;;;;;;;17144:331;;;;17087:388;:::o;16139:399::-;16202:21;16240:1;16226:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16202:40;;16265:4;16247;16252:1;16247:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;16285:7;;;;;;;;;;;:12;;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16275:4;16280:1;16275:7;;;;;;;;:::i;:::-;;;;;;;:24;;;;;;;;;;;16304:49;16321:4;16336:7;;;;;;;;;;;16346:6;16304:8;:49::i;:::-;16364:7;;;;;;;;;;;:58;;;16428:6;16440:1;16476:4;16486:16;;;;;;;;;;;16508:15;16364:164;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16191:347;16139:399;:::o;17483:397::-;17542:21;17580:1;17566:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17542:40;;17605:4;17587;17592:1;17587:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;17625:7;;;;;;;;;;;:12;;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17615:4;17620:1;17615:7;;;;;;;;:::i;:::-;;;;;;;:24;;;;;;;;;;;17644:54;17661:4;17676:7;;;;;;;;;;;17686:11;17644:8;:54::i;:::-;17709:7;;;;;;;;;;;:58;;;17773:11;17790:1;17826:4;17844;17855:15;17709:166;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17537:343;17483:397;:::o;17892:277::-;17965:54;17982:4;17997:7;;;;;;;;;;;18007:11;17965:8;:54::i;:::-;18026:7;;;;;;;;;;;:23;;;18056:9;18080:4;18091:11;18108:1;18115;18122:11;18144:15;18026:138;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;17892:277;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;152:143;;;;:::o;301:155::-;355:5;393:6;380:20;371:29;;409:41;444:5;409:41;:::i;:::-;301:155;;;;:::o;462:133::-;505:5;543:6;530:20;521:29;;559:30;583:5;559:30;:::i;:::-;462:133;;;;:::o;601:137::-;655:5;686:6;680:13;671:22;;702:30;726:5;702:30;:::i;:::-;601:137;;;;:::o;744:165::-;803:5;841:6;828:20;819:29;;857:46;897:5;857:46;:::i;:::-;744:165;;;;:::o;915:139::-;961:5;999:6;986:20;977:29;;1015:33;1042:5;1015:33;:::i;:::-;915:139;;;;:::o;1060:143::-;1117:5;1148:6;1142:13;1133:22;;1164:33;1191:5;1164:33;:::i;:::-;1060:143;;;;:::o;1209:329::-;1268:6;1317:2;1305:9;1296:7;1292:23;1288:32;1285:119;;;1323:79;;:::i;:::-;1285:119;1443:1;1468:53;1513:7;1504:6;1493:9;1489:22;1468:53;:::i;:::-;1458:63;;1414:117;1209:329;;;;:::o;1544:351::-;1614:6;1663:2;1651:9;1642:7;1638:23;1634:32;1631:119;;;1669:79;;:::i;:::-;1631:119;1789:1;1814:64;1870:7;1861:6;1850:9;1846:22;1814:64;:::i;:::-;1804:74;;1760:128;1544:351;;;;:::o;1901:345::-;1968:6;2017:2;2005:9;1996:7;1992:23;1988:32;1985:119;;;2023:79;;:::i;:::-;1985:119;2143:1;2168:61;2221:7;2212:6;2201:9;2197:22;2168:61;:::i;:::-;2158:71;;2114:125;1901:345;;;;:::o;2252:484::-;2325:6;2333;2382:2;2370:9;2361:7;2357:23;2353:32;2350:119;;;2388:79;;:::i;:::-;2350:119;2508:1;2533:61;2586:7;2577:6;2566:9;2562:22;2533:61;:::i;:::-;2523:71;;2479:125;2643:2;2669:50;2711:7;2702:6;2691:9;2687:22;2669:50;:::i;:::-;2659:60;;2614:115;2252:484;;;;;:::o;2742:474::-;2810:6;2818;2867:2;2855:9;2846:7;2842:23;2838:32;2835:119;;;2873:79;;:::i;:::-;2835:119;2993:1;3018:53;3063:7;3054:6;3043:9;3039:22;3018:53;:::i;:::-;3008:63;;2964:117;3120:2;3146:53;3191:7;3182:6;3171:9;3167:22;3146:53;:::i;:::-;3136:63;;3091:118;2742:474;;;;;:::o;3222:619::-;3299:6;3307;3315;3364:2;3352:9;3343:7;3339:23;3335:32;3332:119;;;3370:79;;:::i;:::-;3332:119;3490:1;3515:53;3560:7;3551:6;3540:9;3536:22;3515:53;:::i;:::-;3505:63;;3461:117;3617:2;3643:53;3688:7;3679:6;3668:9;3664:22;3643:53;:::i;:::-;3633:63;;3588:118;3745:2;3771:53;3816:7;3807:6;3796:9;3792:22;3771:53;:::i;:::-;3761:63;;3716:118;3222:619;;;;;:::o;3847:468::-;3912:6;3920;3969:2;3957:9;3948:7;3944:23;3940:32;3937:119;;;3975:79;;:::i;:::-;3937:119;4095:1;4120:53;4165:7;4156:6;4145:9;4141:22;4120:53;:::i;:::-;4110:63;;4066:117;4222:2;4248:50;4290:7;4281:6;4270:9;4266:22;4248:50;:::i;:::-;4238:60;;4193:115;3847:468;;;;;:::o;4321:474::-;4389:6;4397;4446:2;4434:9;4425:7;4421:23;4417:32;4414:119;;;4452:79;;:::i;:::-;4414:119;4572:1;4597:53;4642:7;4633:6;4622:9;4618:22;4597:53;:::i;:::-;4587:63;;4543:117;4699:2;4725:53;4770:7;4761:6;4750:9;4746:22;4725:53;:::i;:::-;4715:63;;4670:118;4321:474;;;;;:::o;4801:323::-;4857:6;4906:2;4894:9;4885:7;4881:23;4877:32;4874:119;;;4912:79;;:::i;:::-;4874:119;5032:1;5057:50;5099:7;5090:6;5079:9;5075:22;5057:50;:::i;:::-;5047:60;;5003:114;4801:323;;;;:::o;5130:345::-;5197:6;5246:2;5234:9;5225:7;5221:23;5217:32;5214:119;;;5252:79;;:::i;:::-;5214:119;5372:1;5397:61;5450:7;5441:6;5430:9;5426:22;5397:61;:::i;:::-;5387:71;;5343:125;5130:345;;;;:::o;5481:661::-;5579:6;5587;5595;5644:2;5632:9;5623:7;5619:23;5615:32;5612:119;;;5650:79;;:::i;:::-;5612:119;5770:1;5795:66;5853:7;5844:6;5833:9;5829:22;5795:66;:::i;:::-;5785:76;;5741:130;5910:2;5936:61;5989:7;5980:6;5969:9;5965:22;5936:61;:::i;:::-;5926:71;;5881:126;6046:2;6072:53;6117:7;6108:6;6097:9;6093:22;6072:53;:::i;:::-;6062:63;;6017:118;5481:661;;;;;:::o;6148:329::-;6207:6;6256:2;6244:9;6235:7;6231:23;6227:32;6224:119;;;6262:79;;:::i;:::-;6224:119;6382:1;6407:53;6452:7;6443:6;6432:9;6428:22;6407:53;:::i;:::-;6397:63;;6353:117;6148:329;;;;:::o;6483:663::-;6571:6;6579;6587;6636:2;6624:9;6615:7;6611:23;6607:32;6604:119;;;6642:79;;:::i;:::-;6604:119;6762:1;6787:64;6843:7;6834:6;6823:9;6819:22;6787:64;:::i;:::-;6777:74;;6733:128;6900:2;6926:64;6982:7;6973:6;6962:9;6958:22;6926:64;:::i;:::-;6916:74;;6871:129;7039:2;7065:64;7121:7;7112:6;7101:9;7097:22;7065:64;:::i;:::-;7055:74;;7010:129;6483:663;;;;;:::o;7152:179::-;7221:10;7242:46;7284:3;7276:6;7242:46;:::i;:::-;7320:4;7315:3;7311:14;7297:28;;7152:179;;;;:::o;7337:147::-;7432:45;7471:5;7432:45;:::i;:::-;7427:3;7420:58;7337:147;;:::o;7490:142::-;7593:32;7619:5;7593:32;:::i;:::-;7588:3;7581:45;7490:142;;:::o;7638:108::-;7715:24;7733:5;7715:24;:::i;:::-;7710:3;7703:37;7638:108;;:::o;7752:118::-;7839:24;7857:5;7839:24;:::i;:::-;7834:3;7827:37;7752:118;;:::o;7906:732::-;8025:3;8054:54;8102:5;8054:54;:::i;:::-;8124:86;8203:6;8198:3;8124:86;:::i;:::-;8117:93;;8234:56;8284:5;8234:56;:::i;:::-;8313:7;8344:1;8329:284;8354:6;8351:1;8348:13;8329:284;;;8430:6;8424:13;8457:63;8516:3;8501:13;8457:63;:::i;:::-;8450:70;;8543:60;8596:6;8543:60;:::i;:::-;8533:70;;8389:224;8376:1;8373;8369:9;8364:14;;8329:284;;;8333:14;8629:3;8622:10;;8030:608;;;7906:732;;;;:::o;8644:109::-;8725:21;8740:5;8725:21;:::i;:::-;8720:3;8713:34;8644:109;;:::o;8759:147::-;8854:45;8893:5;8854:45;:::i;:::-;8849:3;8842:58;8759:147;;:::o;8912:364::-;9000:3;9028:39;9061:5;9028:39;:::i;:::-;9083:71;9147:6;9142:3;9083:71;:::i;:::-;9076:78;;9163:52;9208:6;9203:3;9196:4;9189:5;9185:16;9163:52;:::i;:::-;9240:29;9262:6;9240:29;:::i;:::-;9235:3;9231:39;9224:46;;9004:272;8912:364;;;;:::o;9282:366::-;9424:3;9445:67;9509:2;9504:3;9445:67;:::i;:::-;9438:74;;9521:93;9610:3;9521:93;:::i;:::-;9639:2;9634:3;9630:12;9623:19;;9282:366;;;:::o;9654:::-;9796:3;9817:67;9881:2;9876:3;9817:67;:::i;:::-;9810:74;;9893:93;9982:3;9893:93;:::i;:::-;10011:2;10006:3;10002:12;9995:19;;9654:366;;;:::o;10026:::-;10168:3;10189:67;10253:2;10248:3;10189:67;:::i;:::-;10182:74;;10265:93;10354:3;10265:93;:::i;:::-;10383:2;10378:3;10374:12;10367:19;;10026:366;;;:::o;10398:::-;10540:3;10561:67;10625:2;10620:3;10561:67;:::i;:::-;10554:74;;10637:93;10726:3;10637:93;:::i;:::-;10755:2;10750:3;10746:12;10739:19;;10398:366;;;:::o;10770:::-;10912:3;10933:67;10997:2;10992:3;10933:67;:::i;:::-;10926:74;;11009:93;11098:3;11009:93;:::i;:::-;11127:2;11122:3;11118:12;11111:19;;10770:366;;;:::o;11142:::-;11284:3;11305:67;11369:2;11364:3;11305:67;:::i;:::-;11298:74;;11381:93;11470:3;11381:93;:::i;:::-;11499:2;11494:3;11490:12;11483:19;;11142:366;;;:::o;11514:::-;11656:3;11677:67;11741:2;11736:3;11677:67;:::i;:::-;11670:74;;11753:93;11842:3;11753:93;:::i;:::-;11871:2;11866:3;11862:12;11855:19;;11514:366;;;:::o;11886:::-;12028:3;12049:67;12113:2;12108:3;12049:67;:::i;:::-;12042:74;;12125:93;12214:3;12125:93;:::i;:::-;12243:2;12238:3;12234:12;12227:19;;11886:366;;;:::o;12258:::-;12400:3;12421:67;12485:2;12480:3;12421:67;:::i;:::-;12414:74;;12497:93;12586:3;12497:93;:::i;:::-;12615:2;12610:3;12606:12;12599:19;;12258:366;;;:::o;12630:::-;12772:3;12793:67;12857:2;12852:3;12793:67;:::i;:::-;12786:74;;12869:93;12958:3;12869:93;:::i;:::-;12987:2;12982:3;12978:12;12971:19;;12630:366;;;:::o;13002:::-;13144:3;13165:67;13229:2;13224:3;13165:67;:::i;:::-;13158:74;;13241:93;13330:3;13241:93;:::i;:::-;13359:2;13354:3;13350:12;13343:19;;13002:366;;;:::o;13374:::-;13516:3;13537:67;13601:2;13596:3;13537:67;:::i;:::-;13530:74;;13613:93;13702:3;13613:93;:::i;:::-;13731:2;13726:3;13722:12;13715:19;;13374:366;;;:::o;13746:::-;13888:3;13909:67;13973:2;13968:3;13909:67;:::i;:::-;13902:74;;13985:93;14074:3;13985:93;:::i;:::-;14103:2;14098:3;14094:12;14087:19;;13746:366;;;:::o;14118:::-;14260:3;14281:67;14345:2;14340:3;14281:67;:::i;:::-;14274:74;;14357:93;14446:3;14357:93;:::i;:::-;14475:2;14470:3;14466:12;14459:19;;14118:366;;;:::o;14490:::-;14632:3;14653:67;14717:2;14712:3;14653:67;:::i;:::-;14646:74;;14729:93;14818:3;14729:93;:::i;:::-;14847:2;14842:3;14838:12;14831:19;;14490:366;;;:::o;14862:118::-;14949:24;14967:5;14949:24;:::i;:::-;14944:3;14937:37;14862:118;;:::o;14986:222::-;15079:4;15117:2;15106:9;15102:18;15094:26;;15130:71;15198:1;15187:9;15183:17;15174:6;15130:71;:::i;:::-;14986:222;;;;:::o;15214:254::-;15323:4;15361:2;15350:9;15346:18;15338:26;;15374:87;15458:1;15447:9;15443:17;15434:6;15374:87;:::i;:::-;15214:254;;;;:::o;15474:348::-;15603:4;15641:2;15630:9;15626:18;15618:26;;15654:79;15730:1;15719:9;15715:17;15706:6;15654:79;:::i;:::-;15743:72;15811:2;15800:9;15796:18;15787:6;15743:72;:::i;:::-;15474:348;;;;;:::o;15828:807::-;16077:4;16115:3;16104:9;16100:19;16092:27;;16129:71;16197:1;16186:9;16182:17;16173:6;16129:71;:::i;:::-;16210:72;16278:2;16267:9;16263:18;16254:6;16210:72;:::i;:::-;16292:80;16368:2;16357:9;16353:18;16344:6;16292:80;:::i;:::-;16382;16458:2;16447:9;16443:18;16434:6;16382:80;:::i;:::-;16472:73;16540:3;16529:9;16525:19;16516:6;16472:73;:::i;:::-;16555;16623:3;16612:9;16608:19;16599:6;16555:73;:::i;:::-;15828:807;;;;;;;;;:::o;16641:210::-;16728:4;16766:2;16755:9;16751:18;16743:26;;16779:65;16841:1;16830:9;16826:17;16817:6;16779:65;:::i;:::-;16641:210;;;;:::o;16857:313::-;16970:4;17008:2;16997:9;16993:18;16985:26;;17057:9;17051:4;17047:20;17043:1;17032:9;17028:17;17021:47;17085:78;17158:4;17149:6;17085:78;:::i;:::-;17077:86;;16857:313;;;;:::o;17176:419::-;17342:4;17380:2;17369:9;17365:18;17357:26;;17429:9;17423:4;17419:20;17415:1;17404:9;17400:17;17393:47;17457:131;17583:4;17457:131;:::i;:::-;17449:139;;17176:419;;;:::o;17601:::-;17767:4;17805:2;17794:9;17790:18;17782:26;;17854:9;17848:4;17844:20;17840:1;17829:9;17825:17;17818:47;17882:131;18008:4;17882:131;:::i;:::-;17874:139;;17601:419;;;:::o;18026:::-;18192:4;18230:2;18219:9;18215:18;18207:26;;18279:9;18273:4;18269:20;18265:1;18254:9;18250:17;18243:47;18307:131;18433:4;18307:131;:::i;:::-;18299:139;;18026:419;;;:::o;18451:::-;18617:4;18655:2;18644:9;18640:18;18632:26;;18704:9;18698:4;18694:20;18690:1;18679:9;18675:17;18668:47;18732:131;18858:4;18732:131;:::i;:::-;18724:139;;18451:419;;;:::o;18876:::-;19042:4;19080:2;19069:9;19065:18;19057:26;;19129:9;19123:4;19119:20;19115:1;19104:9;19100:17;19093:47;19157:131;19283:4;19157:131;:::i;:::-;19149:139;;18876:419;;;:::o;19301:::-;19467:4;19505:2;19494:9;19490:18;19482:26;;19554:9;19548:4;19544:20;19540:1;19529:9;19525:17;19518:47;19582:131;19708:4;19582:131;:::i;:::-;19574:139;;19301:419;;;:::o;19726:::-;19892:4;19930:2;19919:9;19915:18;19907:26;;19979:9;19973:4;19969:20;19965:1;19954:9;19950:17;19943:47;20007:131;20133:4;20007:131;:::i;:::-;19999:139;;19726:419;;;:::o;20151:::-;20317:4;20355:2;20344:9;20340:18;20332:26;;20404:9;20398:4;20394:20;20390:1;20379:9;20375:17;20368:47;20432:131;20558:4;20432:131;:::i;:::-;20424:139;;20151:419;;;:::o;20576:::-;20742:4;20780:2;20769:9;20765:18;20757:26;;20829:9;20823:4;20819:20;20815:1;20804:9;20800:17;20793:47;20857:131;20983:4;20857:131;:::i;:::-;20849:139;;20576:419;;;:::o;21001:::-;21167:4;21205:2;21194:9;21190:18;21182:26;;21254:9;21248:4;21244:20;21240:1;21229:9;21225:17;21218:47;21282:131;21408:4;21282:131;:::i;:::-;21274:139;;21001:419;;;:::o;21426:::-;21592:4;21630:2;21619:9;21615:18;21607:26;;21679:9;21673:4;21669:20;21665:1;21654:9;21650:17;21643:47;21707:131;21833:4;21707:131;:::i;:::-;21699:139;;21426:419;;;:::o;21851:::-;22017:4;22055:2;22044:9;22040:18;22032:26;;22104:9;22098:4;22094:20;22090:1;22079:9;22075:17;22068:47;22132:131;22258:4;22132:131;:::i;:::-;22124:139;;21851:419;;;:::o;22276:::-;22442:4;22480:2;22469:9;22465:18;22457:26;;22529:9;22523:4;22519:20;22515:1;22504:9;22500:17;22493:47;22557:131;22683:4;22557:131;:::i;:::-;22549:139;;22276:419;;;:::o;22701:::-;22867:4;22905:2;22894:9;22890:18;22882:26;;22954:9;22948:4;22944:20;22940:1;22929:9;22925:17;22918:47;22982:131;23108:4;22982:131;:::i;:::-;22974:139;;22701:419;;;:::o;23126:::-;23292:4;23330:2;23319:9;23315:18;23307:26;;23379:9;23373:4;23369:20;23365:1;23354:9;23350:17;23343:47;23407:131;23533:4;23407:131;:::i;:::-;23399:139;;23126:419;;;:::o;23551:222::-;23644:4;23682:2;23671:9;23667:18;23659:26;;23695:71;23763:1;23752:9;23748:17;23739:6;23695:71;:::i;:::-;23551:222;;;;:::o;23779:847::-;24050:4;24088:3;24077:9;24073:19;24065:27;;24102:71;24170:1;24159:9;24155:17;24146:6;24102:71;:::i;:::-;24183:80;24259:2;24248:9;24244:18;24235:6;24183:80;:::i;:::-;24310:9;24304:4;24300:20;24295:2;24284:9;24280:18;24273:48;24338:108;24441:4;24432:6;24338:108;:::i;:::-;24330:116;;24456:80;24532:2;24521:9;24517:18;24508:6;24456:80;:::i;:::-;24546:73;24614:3;24603:9;24599:19;24590:6;24546:73;:::i;:::-;23779:847;;;;;;;;:::o;24632:831::-;24895:4;24933:3;24922:9;24918:19;24910:27;;24947:71;25015:1;25004:9;25000:17;24991:6;24947:71;:::i;:::-;25028:80;25104:2;25093:9;25089:18;25080:6;25028:80;:::i;:::-;25155:9;25149:4;25145:20;25140:2;25129:9;25125:18;25118:48;25183:108;25286:4;25277:6;25183:108;:::i;:::-;25175:116;;25301:72;25369:2;25358:9;25354:18;25345:6;25301:72;:::i;:::-;25383:73;25451:3;25440:9;25436:19;25427:6;25383:73;:::i;:::-;24632:831;;;;;;;;:::o;25469:442::-;25618:4;25656:2;25645:9;25641:18;25633:26;;25669:71;25737:1;25726:9;25722:17;25713:6;25669:71;:::i;:::-;25750:72;25818:2;25807:9;25803:18;25794:6;25750:72;:::i;:::-;25832;25900:2;25889:9;25885:18;25876:6;25832:72;:::i;:::-;25469:442;;;;;;:::o;25998:132::-;26065:4;26088:3;26080:11;;26118:4;26113:3;26109:14;26101:22;;25998:132;;;:::o;26136:114::-;26203:6;26237:5;26231:12;26221:22;;26136:114;;;:::o;26256:99::-;26308:6;26342:5;26336:12;26326:22;;26256:99;;;:::o;26361:113::-;26431:4;26463;26458:3;26454:14;26446:22;;26361:113;;;:::o;26480:184::-;26579:11;26613:6;26608:3;26601:19;26653:4;26648:3;26644:14;26629:29;;26480:184;;;;:::o;26670:169::-;26754:11;26788:6;26783:3;26776:19;26828:4;26823:3;26819:14;26804:29;;26670:169;;;;:::o;26845:305::-;26885:3;26904:20;26922:1;26904:20;:::i;:::-;26899:25;;26938:20;26956:1;26938:20;:::i;:::-;26933:25;;27092:1;27024:66;27020:74;27017:1;27014:81;27011:107;;;27098:18;;:::i;:::-;27011:107;27142:1;27139;27135:9;27128:16;;26845:305;;;;:::o;27156:185::-;27196:1;27213:20;27231:1;27213:20;:::i;:::-;27208:25;;27247:20;27265:1;27247:20;:::i;:::-;27242:25;;27286:1;27276:35;;27291:18;;:::i;:::-;27276:35;27333:1;27330;27326:9;27321:14;;27156:185;;;;:::o;27347:348::-;27387:7;27410:20;27428:1;27410:20;:::i;:::-;27405:25;;27444:20;27462:1;27444:20;:::i;:::-;27439:25;;27632:1;27564:66;27560:74;27557:1;27554:81;27549:1;27542:9;27535:17;27531:105;27528:131;;;27639:18;;:::i;:::-;27528:131;27687:1;27684;27680:9;27669:20;;27347:348;;;;:::o;27701:191::-;27741:4;27761:20;27779:1;27761:20;:::i;:::-;27756:25;;27795:20;27813:1;27795:20;:::i;:::-;27790:25;;27834:1;27831;27828:8;27825:34;;;27839:18;;:::i;:::-;27825:34;27884:1;27881;27877:9;27869:17;;27701:191;;;;:::o;27898:96::-;27935:7;27964:24;27982:5;27964:24;:::i;:::-;27953:35;;27898:96;;;:::o;28000:104::-;28045:7;28074:24;28092:5;28074:24;:::i;:::-;28063:35;;28000:104;;;:::o;28110:90::-;28144:7;28187:5;28180:13;28173:21;28162:32;;28110:90;;;:::o;28206:109::-;28256:7;28285:24;28303:5;28285:24;:::i;:::-;28274:35;;28206:109;;;:::o;28321:126::-;28358:7;28398:42;28391:5;28387:54;28376:65;;28321:126;;;:::o;28453:77::-;28490:7;28519:5;28508:16;;28453:77;;;:::o;28536:134::-;28594:9;28627:37;28658:5;28627:37;:::i;:::-;28614:50;;28536:134;;;:::o;28676:121::-;28734:9;28767:24;28785:5;28767:24;:::i;:::-;28754:37;;28676:121;;;:::o;28803:126::-;28853:9;28886:37;28917:5;28886:37;:::i;:::-;28873:50;;28803:126;;;:::o;28935:113::-;28985:9;29018:24;29036:5;29018:24;:::i;:::-;29005:37;;28935:113;;;:::o;29054:307::-;29122:1;29132:113;29146:6;29143:1;29140:13;29132:113;;;29231:1;29226:3;29222:11;29216:18;29212:1;29207:3;29203:11;29196:39;29168:2;29165:1;29161:10;29156:15;;29132:113;;;29263:6;29260:1;29257:13;29254:101;;;29343:1;29334:6;29329:3;29325:16;29318:27;29254:101;29103:258;29054:307;;;:::o;29367:320::-;29411:6;29448:1;29442:4;29438:12;29428:22;;29495:1;29489:4;29485:12;29516:18;29506:81;;29572:4;29564:6;29560:17;29550:27;;29506:81;29634:2;29626:6;29623:14;29603:18;29600:38;29597:84;;;29653:18;;:::i;:::-;29597:84;29418:269;29367:320;;;:::o;29693:180::-;29741:77;29738:1;29731:88;29838:4;29835:1;29828:15;29862:4;29859:1;29852:15;29879:180;29927:77;29924:1;29917:88;30024:4;30021:1;30014:15;30048:4;30045:1;30038:15;30065:180;30113:77;30110:1;30103:88;30210:4;30207:1;30200:15;30234:4;30231:1;30224:15;30251:180;30299:77;30296:1;30289:88;30396:4;30393:1;30386:15;30420:4;30417:1;30410:15;30437:180;30485:77;30482:1;30475:88;30582:4;30579:1;30572:15;30606:4;30603:1;30596:15;30746:117;30855:1;30852;30845:12;30869:102;30910:6;30961:2;30957:7;30952:2;30945:5;30941:14;30937:28;30927:38;;30869:102;;;:::o;30977:222::-;31117:34;31113:1;31105:6;31101:14;31094:58;31186:5;31181:2;31173:6;31169:15;31162:30;30977:222;:::o;31205:225::-;31345:34;31341:1;31333:6;31329:14;31322:58;31414:8;31409:2;31401:6;31397:15;31390:33;31205:225;:::o;31436:221::-;31576:34;31572:1;31564:6;31560:14;31553:58;31645:4;31640:2;31632:6;31628:15;31621:29;31436:221;:::o;31663:244::-;31803:34;31799:1;31791:6;31787:14;31780:58;31872:27;31867:2;31859:6;31855:15;31848:52;31663:244;:::o;31913:225::-;32053:34;32049:1;32041:6;32037:14;32030:58;32122:8;32117:2;32109:6;32105:15;32098:33;31913:225;:::o;32144:241::-;32284:34;32280:1;32272:6;32268:14;32261:58;32353:24;32348:2;32340:6;32336:15;32329:49;32144:241;:::o;32391:237::-;32531:34;32527:1;32519:6;32515:14;32508:58;32600:20;32595:2;32587:6;32583:15;32576:45;32391:237;:::o;32634:179::-;32774:31;32770:1;32762:6;32758:14;32751:55;32634:179;:::o;32819:240::-;32959:34;32955:1;32947:6;32943:14;32936:58;33028:23;33023:2;33015:6;33011:15;33004:48;32819:240;:::o;33065:227::-;33205:34;33201:1;33193:6;33189:14;33182:58;33274:10;33269:2;33261:6;33257:15;33250:35;33065:227;:::o;33298:182::-;33438:34;33434:1;33426:6;33422:14;33415:58;33298:182;:::o;33486:177::-;33626:29;33622:1;33614:6;33610:14;33603:53;33486:177;:::o;33669:174::-;33809:26;33805:1;33797:6;33793:14;33786:50;33669:174;:::o;33849:224::-;33989:34;33985:1;33977:6;33973:14;33966:58;34058:7;34053:2;34045:6;34041:15;34034:32;33849:224;:::o;34079:223::-;34219:34;34215:1;34207:6;34203:14;34196:58;34288:6;34283:2;34275:6;34271:15;34264:31;34079:223;:::o;34308:122::-;34381:24;34399:5;34381:24;:::i;:::-;34374:5;34371:35;34361:63;;34420:1;34417;34410:12;34361:63;34308:122;:::o;34436:138::-;34517:32;34543:5;34517:32;:::i;:::-;34510:5;34507:43;34497:71;;34564:1;34561;34554:12;34497:71;34436:138;:::o;34580:116::-;34650:21;34665:5;34650:21;:::i;:::-;34643:5;34640:32;34630:60;;34686:1;34683;34676:12;34630:60;34580:116;:::o;34702:148::-;34788:37;34819:5;34788:37;:::i;:::-;34781:5;34778:48;34768:76;;34840:1;34837;34830:12;34768:76;34702:148;:::o;34856:122::-;34929:24;34947:5;34929:24;:::i;:::-;34922:5;34919:35;34909:63;;34968:1;34965;34958:12;34909:63;34856:122;:::o

Swarm Source

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