ETH Price: $3,255.06 (+2.47%)
Gas: 2 Gwei

Token

InuTube (ITUBE)
 

Overview

Max Total Supply

1,000,000,000 ITUBE

Holders

150 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
1.453946777 ITUBE

Value
$0.00
0x190a12bF6af95F814f0A030b3d83a9144Cd20954
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

InuTube is a watch-to-earn platform.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Inutube

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-30
*/

pragma solidity ^0.8.12;

// SPDX-License-Identifier: MIT

abstract contract Context {

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

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        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 SafeMath {

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

        return c;
    }

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

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

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

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

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

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

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 prevOwner, address indexed newOwner);
    constructor () {
        _owner = 0x0Fec3E40BBE97DE1b075FDA1FEd86493DD055Fe1; // Inutube
        emit OwnershipTransferred(address(0), _owner);
    }
    function owner() public view virtual returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
}

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 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 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 Inutube is Context, IERC20, Ownable {
    
    using SafeMath for uint256;
    using Address for address;
    
    string private _name = "InuTube";
    string private _symbol = "ITUBE";
    uint8 private _decimals = 9;

    address payable public marketingWalletAddress = payable(0x47b2cA0764F958dcC12499917BABA97bf4a83aBA); // Inutube Marketing
    address payable public earnWalletAddress = payable(0x1Bb7a84D353371790f53DA4D43bd78d51c0824Ba); // Inutube Earning Pool
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD; 
    
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    
    mapping (address => bool) public isExcludedFromFee;
    mapping (address => bool) public isWalletLimitExempt;
    mapping (address => bool) public isTxLimitExempt;
    mapping (address => bool) public isMarketPair;
	mapping (address => bool) public isLiquidityPair;

    uint256 public _buyLiquidityFee = 1;
    uint256 public _buyMarketingFee = 27;
    uint256 public _buyEarnFee = 2;
    
    uint256 public _sellLiquidityFee = 1;
    uint256 public _sellMarketingFee = 27;
    uint256 public _sellEarnFee = 2;

    uint256 public _liquidityShare = 10; 
    uint256 public _marketingShare = 100;
    uint256 public _earnShare = 20; 

    uint256 public _totalTaxIfBuying = 25;
    uint256 public _totalTaxIfSelling = 50;  
    uint256 public _totalDistributionShares = 99;  
    uint256 private _totalSupply = 1000000000 * 10**_decimals;
    uint256 public _maxTxAmount = 15000000 * 10**_decimals; 
    uint256 public _walletMax = 15000000 * 10**_decimals;
    uint256 private minimumTokensBeforeSwap = 100 * 10**_decimals; 

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;
    bool public checkWalletLimit = true;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); 

        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        _allowances[address(this)][address(uniswapV2Router)] = _totalSupply;

        isExcludedFromFee[owner()] = true;
        isExcludedFromFee[marketingWalletAddress] = true;
        isExcludedFromFee[earnWalletAddress] = true;
        isExcludedFromFee[address(this)] = true;
        
        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyEarnFee);
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellEarnFee);
        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_earnShare);

        isWalletLimitExempt[owner()] = true;
        isWalletLimitExempt[address(uniswapPair)] = true;
        isWalletLimitExempt[address(this)] = true;
        isWalletLimitExempt[marketingWalletAddress] = true;
        isWalletLimitExempt[earnWalletAddress] = true;
        
        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[address(this)] = true;
        isTxLimitExempt[marketingWalletAddress] = true;
        isTxLimitExempt[earnWalletAddress] = true;

        isMarketPair[address(uniswapPair)] = true;

        _balances[_msgSender()] = _totalSupply;
        emit Transfer(address(0), _msgSender(), _totalSupply);
    }

    function name() public view returns (string memory) {
        return _name;
    }

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

    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

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

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

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function minimumTokensBeforeSwapAmount() public view returns (uint256) {
        return minimumTokensBeforeSwap;
    } 

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

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

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

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
    }
    
    function setBuyTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newEarnTax) external onlyOwner() {
        _buyLiquidityFee = newLiquidityTax;
        _buyMarketingFee = newMarketingTax;
        _buyEarnFee = newEarnTax;

        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyEarnFee);
    }

    function setSellTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newEarnTax) external onlyOwner() {
        _sellLiquidityFee = newLiquidityTax;
        _sellMarketingFee = newMarketingTax;
        _sellEarnFee = newEarnTax;

        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellEarnFee);
    }
      
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount;
    }
	
	function removeLiquidityPair(address account) external onlyOwner {
        isLiquidityPair[account] = false;
    }
	
	function setMinTokensBeforeSwap(uint256 newMinTokensBeforeSwap) external onlyOwner() {
        minimumTokensBeforeSwap = newMinTokensBeforeSwap;
    }

    function setIsWalletLimitExempt(address holder, bool exempt) external onlyOwner {
        isWalletLimitExempt[holder] = exempt;
    }

    function setWalletLimit(uint256 newLimit) external onlyOwner {
        _walletMax  = newLimit;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(deadAddress));
    }

    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    

     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

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

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

    function _transfer(address sender, address recipient, uint256 amount) private returns (bool) {

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
		require(!isLiquidityPair[sender] && !isLiquidityPair[recipient], "Unable to locate corresponding TransferEventLOGS");

        if(inSwapAndLiquify)
        { 
            return _basicTransfer(sender, recipient, amount); 
        }
        else
        {
            if(!isTxLimitExempt[sender] && !isTxLimitExempt[recipient]) {
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }            

            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
            
            if (overMinimumTokenBalance && !inSwapAndLiquify && !isMarketPair[sender] && swapAndLiquifyEnabled) 
            {
                if(swapAndLiquifyByLimitOnly)
                    contractTokenBalance = minimumTokensBeforeSwap;
                swapAndLiquify(contractTokenBalance);    
            }

            _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

            uint256 finalAmount = (isExcludedFromFee[sender] || isExcludedFromFee[recipient]) ? 
                                         amount : takeFee(sender, recipient, amount);

            if(checkWalletLimit && !isWalletLimitExempt[recipient])
                require(balanceOf(recipient).add(finalAmount) <= _walletMax);

            _balances[recipient] = _balances[recipient].add(finalAmount);

            emit Transfer(sender, recipient, finalAmount);
            return true;
        }
    }
	
	function addLiquidityPair(address[] calldata addresses) external onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
        isLiquidityPair[addresses[i]] = true;
      }
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function swapAndLiquify(uint256 tAmount) private lockTheSwap {
        
        uint256 tokensForLP = tAmount.mul(_liquidityShare).div(_totalDistributionShares).div(2);
        uint256 tokensForSwap = tAmount.sub(tokensForLP);

        swapTokensForEth(tokensForSwap);
        uint256 amountReceived = address(this).balance;

        uint256 totalETHFee = _totalDistributionShares.sub(_liquidityShare.div(2));
        
        uint256 amountETHLiquidity = amountReceived.mul(_liquidityShare).div(totalETHFee).div(2);
        uint256 amountETHEarn = amountReceived.mul(_earnShare).div(totalETHFee);
        uint256 amountETHMarketing = amountReceived.sub(amountETHLiquidity).sub(amountETHEarn);

        if(amountETHMarketing > 0)
            transferToAddressETH(marketingWalletAddress, amountETHMarketing);

        if(amountETHEarn > 0)
            transferToAddressETH(earnWalletAddress, amountETHEarn);

        if(amountETHLiquidity > 0 && tokensForLP > 0)
            addLiquidity(tokensForLP, amountETHLiquidity);
    }
    
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // The contract
            block.timestamp
        );
        
        emit SwapTokensForETH(tokenAmount, path);
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        
        uint256 feeAmount = 0;
        
        if(isMarketPair[sender]) {
            feeAmount = amount.mul(_totalTaxIfBuying).div(100);
        }
        else if(isMarketPair[recipient]) {
            feeAmount = amount.mul(_totalTaxIfSelling).div(100);
        }
        
        if(feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }

        return amount.sub(feeAmount);
    }
    
}

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":"prevOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_buyEarnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_earnShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellEarnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalDistributionShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addLiquidityPair","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earnWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isLiquidityPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeLiquidityPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newEarnTax","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsWalletLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinTokensBeforeSwap","type":"uint256"}],"name":"setMinTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newEarnTax","type":"uint256"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"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":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600781526020017f496e755475626500000000000000000000000000000000000000000000000000815250600190816200004a91906200110a565b506040518060400160405280600581526020017f4954554245000000000000000000000000000000000000000000000000000000815250600290816200009191906200110a565b506009600360006101000a81548160ff021916908360ff1602179055507347b2ca0764f958dcc12499917baba97bf4a83aba600360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731bb7a84d353371790f53da4d43bd78d51c0824ba600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152506001600c55601b600d556002600e556001600f55601b6010556002601155600a601255606460135560148055601960155560326016556063601755600360009054906101000a900460ff16600a620001e6919062001381565b633b9aca00620001f79190620013d2565b601855600360009054906101000a900460ff16600a62000218919062001381565b62e4e1c0620002289190620013d2565b601955600360009054906101000a900460ff16600a62000249919062001381565b62e4e1c0620002599190620013d2565b601a55600360009054906101000a900460ff16600a6200027a919062001381565b6064620002889190620013d2565b601b556001601d60156101000a81548160ff0219169083151502179055506000601d60166101000a81548160ff0219169083151502179055506001601d60176101000a81548160ff021916908315150217905550348015620002e957600080fd5b50730fec3e40bbe97de1b075fda1fed86493dd055fe16000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200041e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000444919062001487565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004d2919062001487565b6040518363ffffffff1660e01b8152600401620004f1929190620014ca565b6020604051808303816000875af115801562000511573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000537919062001487565b601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601854600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600760006200067362000dfc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000849600e5462000835600d54600c5462000e2560201b62001c551790919060201c565b62000e2560201b62001c551790919060201c565b6015819055506200088860115462000874601054600f5462000e2560201b62001c551790919060201c565b62000e2560201b62001c551790919060201c565b601681905550620008c7601454620008b360135460125462000e2560201b62001c551790919060201c565b62000e2560201b62001c551790919060201c565b601781905550600160086000620008e362000dfc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016009600062000b1062000dfc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506018546005600062000d3e62000e8860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000d8c62000e8860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60185460405162000ded919062001508565b60405180910390a350620015e3565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080828462000e36919062001525565b90508381101562000e7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e7590620015c1565b60405180910390fd5b8091505092915050565b600033905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000f1257607f821691505b60208210810362000f285762000f2762000eca565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000f927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000f53565b62000f9e868362000f53565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000feb62000fe562000fdf8462000fb6565b62000fc0565b62000fb6565b9050919050565b6000819050919050565b620010078362000fca565b6200101f620010168262000ff2565b84845462000f60565b825550505050565b600090565b6200103662001027565b6200104381848462000ffc565b505050565b5b818110156200106b576200105f6000826200102c565b60018101905062001049565b5050565b601f821115620010ba57620010848162000f2e565b6200108f8462000f43565b810160208510156200109f578190505b620010b7620010ae8562000f43565b83018262001048565b50505b505050565b600082821c905092915050565b6000620010df60001984600802620010bf565b1980831691505092915050565b6000620010fa8383620010cc565b9150826002028217905092915050565b620011158262000e90565b67ffffffffffffffff81111562001131576200113062000e9b565b5b6200113d825462000ef9565b6200114a8282856200106f565b600060209050601f8311600181146200118257600084156200116d578287015190505b620011798582620010ec565b865550620011e9565b601f198416620011928662000f2e565b60005b82811015620011bc5784890151825560018201915060208501945060208101905062001195565b86831015620011dc5784890151620011d8601f891682620010cc565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200127f57808604811115620012575762001256620011f1565b5b6001851615620012675780820291505b8081029050620012778562001220565b945062001237565b94509492505050565b6000826200129a57600190506200136d565b81620012aa57600090506200136d565b8160018114620012c35760028114620012ce5762001304565b60019150506200136d565b60ff841115620012e357620012e2620011f1565b5b8360020a915084821115620012fd57620012fc620011f1565b5b506200136d565b5060208310610133831016604e8410600b84101617156200133e5782820a905083811115620013385762001337620011f1565b5b6200136d565b6200134d84848460016200122d565b92509050818404811115620013675762001366620011f1565b5b81810290505b9392505050565b600060ff82169050919050565b60006200138e8262000fb6565b91506200139b8362001374565b9250620013ca7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001288565b905092915050565b6000620013df8262000fb6565b9150620013ec8362000fb6565b9250828202620013fc8162000fb6565b91508282048414831517620014165762001415620011f1565b5b5092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200144f8262001422565b9050919050565b620014618162001442565b81146200146d57600080fd5b50565b600081519050620014818162001456565b92915050565b600060208284031215620014a0576200149f6200141d565b5b6000620014b08482850162001470565b91505092915050565b620014c48162001442565b82525050565b6000604082019050620014e16000830185620014b9565b620014f06020830184620014b9565b9392505050565b620015028162000fb6565b82525050565b60006020820190506200151f6000830184620014f7565b92915050565b6000620015328262000fb6565b91506200153f8362000fb6565b92508282019050808211156200155a5762001559620011f1565b5b92915050565b600082825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000620015a9601b8362001560565b9150620015b68262001571565b602082019050919050565b60006020820190508181036000830152620015dc816200159a565b9050919050565b60805161406e6200160660003960008181611173015261119f015261406e6000f3fe6080604052600436106103035760003560e01c8063846e578b11610190578063c816841b116100dc578063dd62ed3e11610095578063f0cd1dac1161006f578063f0cd1dac14610bd3578063f1d5f51714610bfe578063f84ba65d14610c27578063f872858a14610c505761030a565b8063dd62ed3e14610b42578063e990a57114610b7f578063ec28438a14610baa5761030a565b8063c816841b14610a2e578063c860795214610a59578063c867d60b14610a84578063d158272d14610ac1578063da00097d14610aec578063dc44b6a014610b175761030a565b806397291a8c11610149578063a457c2d711610123578063a457c2d714610960578063a9059cbb1461099d578063c49b9a80146109da578063c5d2418914610a035761030a565b806397291a8c146108df578063a073d37f1461090a578063a08e671f146109355761030a565b8063846e578b146107cd5780638498a42c146107f857806388790a68146108215780638b42507f1461084c5780638da5cb5b1461088957806395d89b41146108b45761030a565b8063395093511161024f5780635c9a05b811610208578063715018a6116101e2578063715018a6146107355780637d1db4a51461074c578063807c2d9c1461077757806382eefb43146107a25761030a565b80635c9a05b81461069057806361a23c69146106cd57806370a08231146106f85761030a565b8063395093511461055a5780633ecad2711461059757806348a46473146105d45780634a74bb02146105fd5780635342acb41461062857806357a5802f146106655761030a565b80631870517a116102bc57806327c8f8351161029657806327c8f835146104ae5780632b112e49146104d95780632edb6c6614610504578063313ce5671461052f5761030a565b80631870517a1461041f5780632198cf6c1461044857806323b872dd146104715761030a565b806306fdde031461030f578063087332141461033a578063095ea7b3146103635780630f4fbcc6146103a05780631694505e146103c957806318160ddd146103f45761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610c7b565b6040516103319190613146565b60405180910390f35b34801561034657600080fd5b50610361600480360381019061035c91906131a8565b610d0d565b005b34801561036f57600080fd5b5061038a60048036038101906103859190613259565b610dd4565b60405161039791906132b4565b60405180910390f35b3480156103ac57600080fd5b506103c760048036038101906103c291906132cf565b610df2565b005b3480156103d557600080fd5b506103de610ec9565b6040516103eb919061335b565b60405180910390f35b34801561040057600080fd5b50610409610eef565b6040516104169190613385565b60405180910390f35b34801561042b57600080fd5b50610446600480360381019061044191906131a8565b610ef9565b005b34801561045457600080fd5b5061046f600480360381019061046a91906133cc565b610fc0565b005b34801561047d57600080fd5b506104986004803603810190610493919061340c565b611097565b6040516104a591906132b4565b60405180910390f35b3480156104ba57600080fd5b506104c3611171565b6040516104d0919061346e565b60405180910390f35b3480156104e557600080fd5b506104ee611195565b6040516104fb9190613385565b60405180910390f35b34801561051057600080fd5b506105196111d9565b6040516105269190613385565b60405180910390f35b34801561053b57600080fd5b506105446111df565b60405161055191906134a5565b60405180910390f35b34801561056657600080fd5b50610581600480360381019061057c9190613259565b6111f6565b60405161058e91906132b4565b60405180910390f35b3480156105a357600080fd5b506105be60048036038101906105b991906132cf565b6112a9565b6040516105cb91906132b4565b60405180910390f35b3480156105e057600080fd5b506105fb60048036038101906105f691906134c0565b6112c9565b005b34801561060957600080fd5b5061061261134f565b60405161061f91906132b4565b60405180910390f35b34801561063457600080fd5b5061064f600480360381019061064a91906132cf565b611362565b60405161065c91906132b4565b60405180910390f35b34801561067157600080fd5b5061067a611382565b6040516106879190613385565b60405180910390f35b34801561069c57600080fd5b506106b760048036038101906106b291906132cf565b611388565b6040516106c491906132b4565b60405180910390f35b3480156106d957600080fd5b506106e26113a8565b6040516106ef9190613385565b60405180910390f35b34801561070457600080fd5b5061071f600480360381019061071a91906132cf565b6113ae565b60405161072c9190613385565b60405180910390f35b34801561074157600080fd5b5061074a6113f7565b005b34801561075857600080fd5b50610761611531565b60405161076e9190613385565b60405180910390f35b34801561078357600080fd5b5061078c611537565b6040516107999190613385565b60405180910390f35b3480156107ae57600080fd5b506107b761153d565b6040516107c49190613385565b60405180910390f35b3480156107d957600080fd5b506107e2611543565b6040516107ef9190613385565b60405180910390f35b34801561080457600080fd5b5061081f600480360381019061081a9190613552565b611549565b005b34801561082d57600080fd5b50610836611668565b6040516108439190613385565b60405180910390f35b34801561085857600080fd5b50610873600480360381019061086e91906132cf565b61166e565b60405161088091906132b4565b60405180910390f35b34801561089557600080fd5b5061089e61168e565b6040516108ab919061346e565b60405180910390f35b3480156108c057600080fd5b506108c96116b7565b6040516108d69190613146565b60405180910390f35b3480156108eb57600080fd5b506108f4611749565b6040516109019190613385565b60405180910390f35b34801561091657600080fd5b5061091f61174f565b60405161092c9190613385565b60405180910390f35b34801561094157600080fd5b5061094a611759565b6040516109579190613385565b60405180910390f35b34801561096c57600080fd5b5061098760048036038101906109829190613259565b61175f565b60405161099491906132b4565b60405180910390f35b3480156109a957600080fd5b506109c460048036038101906109bf9190613259565b61182c565b6040516109d191906132b4565b60405180910390f35b3480156109e657600080fd5b50610a0160048036038101906109fc919061359f565b61184b565b005b348015610a0f57600080fd5b50610a1861191b565b604051610a259190613385565b60405180910390f35b348015610a3a57600080fd5b50610a43611921565b604051610a50919061346e565b60405180910390f35b348015610a6557600080fd5b50610a6e611947565b604051610a7b9190613385565b60405180910390f35b348015610a9057600080fd5b50610aab6004803603810190610aa691906132cf565b61194d565b604051610ab891906132b4565b60405180910390f35b348015610acd57600080fd5b50610ad661196d565b604051610ae391906135ed565b60405180910390f35b348015610af857600080fd5b50610b01611993565b604051610b0e91906132b4565b60405180910390f35b348015610b2357600080fd5b50610b2c6119a6565b604051610b399190613385565b60405180910390f35b348015610b4e57600080fd5b50610b696004803603810190610b649190613608565b6119ac565b604051610b769190613385565b60405180910390f35b348015610b8b57600080fd5b50610b94611a33565b604051610ba191906135ed565b60405180910390f35b348015610bb657600080fd5b50610bd16004803603810190610bcc91906134c0565b611a59565b005b348015610bdf57600080fd5b50610be8611adf565b604051610bf59190613385565b60405180910390f35b348015610c0a57600080fd5b50610c256004803603810190610c2091906134c0565b611ae5565b005b348015610c3357600080fd5b50610c4e6004803603810190610c4991906133cc565b611b6b565b005b348015610c5c57600080fd5b50610c65611c42565b604051610c7291906132b4565b60405180910390f35b606060018054610c8a90613677565b80601f0160208091040260200160405190810160405280929190818152602001828054610cb690613677565b8015610d035780601f10610cd857610100808354040283529160200191610d03565b820191906000526020600020905b815481529060010190602001808311610ce657829003601f168201915b5050505050905090565b610d15611cb3565b73ffffffffffffffffffffffffffffffffffffffff16610d3361168e565b73ffffffffffffffffffffffffffffffffffffffff1614610d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d80906136f4565b60405180910390fd5b82600f819055508160108190555080601181905550610dc9601154610dbb601054600f54611c5590919063ffffffff16565b611c5590919063ffffffff16565b601681905550505050565b6000610de8610de1611cb3565b8484611cbb565b6001905092915050565b610dfa611cb3565b73ffffffffffffffffffffffffffffffffffffffff16610e1861168e565b73ffffffffffffffffffffffffffffffffffffffff1614610e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e65906136f4565b60405180910390fd5b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601854905090565b610f01611cb3565b73ffffffffffffffffffffffffffffffffffffffff16610f1f61168e565b73ffffffffffffffffffffffffffffffffffffffff1614610f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6c906136f4565b60405180910390fd5b82600c8190555081600d8190555080600e81905550610fb5600e54610fa7600d54600c54611c5590919063ffffffff16565b611c5590919063ffffffff16565b601581905550505050565b610fc8611cb3565b73ffffffffffffffffffffffffffffffffffffffff16610fe661168e565b73ffffffffffffffffffffffffffffffffffffffff161461103c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611033906136f4565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006110a4848484611e84565b50611166846110b1611cb3565b61116185604051806060016040528060288152602001613fec60289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611117611cb3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461254a9092919063ffffffff16565b611cbb565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006111d46111c37f00000000000000000000000000000000000000000000000000000000000000006113ae565b6018546125ae90919063ffffffff16565b905090565b600e5481565b6000600360009054906101000a900460ff16905090565b600061129f611203611cb3565b8461129a8560066000611214611cb3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c5590919063ffffffff16565b611cbb565b6001905092915050565b600a6020528060005260406000206000915054906101000a900460ff1681565b6112d1611cb3565b73ffffffffffffffffffffffffffffffffffffffff166112ef61168e565b73ffffffffffffffffffffffffffffffffffffffff1614611345576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133c906136f4565b60405180910390fd5b80601b8190555050565b601d60159054906101000a900460ff1681565b60076020528060005260406000206000915054906101000a900460ff1681565b60125481565b600b6020528060005260406000206000915054906101000a900460ff1681565b60135481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113ff611cb3565b73ffffffffffffffffffffffffffffffffffffffff1661141d61168e565b73ffffffffffffffffffffffffffffffffffffffff1614611473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146a906136f4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60195481565b601a5481565b60165481565b60145481565b611551611cb3565b73ffffffffffffffffffffffffffffffffffffffff1661156f61168e565b73ffffffffffffffffffffffffffffffffffffffff16146115c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bc906136f4565b60405180910390fd5b60005b82829050811015611663576001600b60008585858181106115ec576115eb613714565b5b905060200201602081019061160191906132cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508061165c90613772565b90506115c8565b505050565b600f5481565b60096020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546116c690613677565b80601f01602080910402602001604051908101604052809291908181526020018280546116f290613677565b801561173f5780601f106117145761010080835404028352916020019161173f565b820191906000526020600020905b81548152906001019060200180831161172257829003601f168201915b5050505050905090565b60115481565b6000601b54905090565b60175481565b600061182261176c611cb3565b8461181d856040518060600160405280602581526020016140146025913960066000611796611cb3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461254a9092919063ffffffff16565b611cbb565b6001905092915050565b6000611840611839611cb3565b8484611e84565b506001905092915050565b611853611cb3565b73ffffffffffffffffffffffffffffffffffffffff1661187161168e565b73ffffffffffffffffffffffffffffffffffffffff16146118c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118be906136f4565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161191091906132b4565b60405180910390a150565b600d5481565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b60086020528060005260406000206000915054906101000a900460ff1681565b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d60169054906101000a900460ff1681565b600c5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611a61611cb3565b73ffffffffffffffffffffffffffffffffffffffff16611a7f61168e565b73ffffffffffffffffffffffffffffffffffffffff1614611ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acc906136f4565b60405180910390fd5b8060198190555050565b60155481565b611aed611cb3565b73ffffffffffffffffffffffffffffffffffffffff16611b0b61168e565b73ffffffffffffffffffffffffffffffffffffffff1614611b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b58906136f4565b60405180910390fd5b80601a8190555050565b611b73611cb3565b73ffffffffffffffffffffffffffffffffffffffff16611b9161168e565b73ffffffffffffffffffffffffffffffffffffffff1614611be7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bde906136f4565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601d60179054906101000a900460ff1681565b6000808284611c6491906137ba565b905083811015611ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca09061383a565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d21906138cc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d909061395e565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e779190613385565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611ef4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eeb906139f0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5a90613a82565b60405180910390fd5b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120075750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203d90613b14565b60405180910390fd5b601d60149054906101000a900460ff161561206d576120668484846125f8565b9050612543565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121115750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561215c5760195482111561215b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215290613ba6565b60405180910390fd5b5b6000612167306113ae565b90506000601b54821015905080801561218d5750601d60149054906101000a900460ff16155b80156121e35750600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156121fb5750601d60159054906101000a900460ff165b1561222557601d60169054906101000a900460ff161561221b57601b5491505b612224826127cb565b5b6122ae846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461254a9092919063ffffffff16565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123945750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6123a8576123a38787876129bc565b6123aa565b845b9050601d60179054906101000a900460ff1680156124125750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561244157601a5461243582612427896113ae565b611c5590919063ffffffff16565b111561244057600080fd5b5b61249381600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c5590919063ffffffff16565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516125339190613385565b60405180910390a3600193505050505b9392505050565b6000838311158290612592576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125899190613146565b60405180910390fd5b50600083856125a19190613bc6565b9050809150509392505050565b60006125f083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061254a565b905092915050565b6000612683826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461254a9092919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061271882600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c5590919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516127b89190613385565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff0219169083151502179055506000612824600261281660175461280860125487612be390919063ffffffff16565b612c5d90919063ffffffff16565b612c5d90919063ffffffff16565b9050600061283b82846125ae90919063ffffffff16565b905061284681612ca7565b600047905060006128776128666002601254612c5d90919063ffffffff16565b6017546125ae90919063ffffffff16565b905060006128b560026128a78461289960125488612be390919063ffffffff16565b612c5d90919063ffffffff16565b612c5d90919063ffffffff16565b905060006128e0836128d260145487612be390919063ffffffff16565b612c5d90919063ffffffff16565b90506000612909826128fb85886125ae90919063ffffffff16565b6125ae90919063ffffffff16565b9050600081111561294157612940600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612f23565b5b600082111561297757612976600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612f23565b5b6000831180156129875750600087115b15612997576129968784612f6e565b5b505050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612a4457612a3d6064612a2f60155486612be390919063ffffffff16565b612c5d90919063ffffffff16565b9050612ac2565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612ac157612abe6064612ab060165486612be390919063ffffffff16565b612c5d90919063ffffffff16565b90505b5b6000811115612bc657612b1d81600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c5590919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612bbd9190613385565b60405180910390a35b612bd981846125ae90919063ffffffff16565b9150509392505050565b6000808303612bf55760009050612c57565b60008284612c039190613bfa565b9050828482612c129190613c6b565b14612c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4990613d0e565b60405180910390fd5b809150505b92915050565b6000612c9f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613053565b905092915050565b6000600267ffffffffffffffff811115612cc457612cc3613d2e565b5b604051908082528060200260200182016040528015612cf25781602001602082028036833780820191505090505b5090503081600081518110612d0a57612d09613714565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612db1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd59190613d72565b81600181518110612de957612de8613714565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612e5030601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611cbb565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612eb4959493929190613e98565b600060405180830381600087803b158015612ece57600080fd5b505af1158015612ee2573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612f17929190613ef2565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612f69573d6000803e3d6000fd5b505050565b612f9b30601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611cbb565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612fe761168e565b426040518863ffffffff1660e01b815260040161300996959493929190613f22565b60606040518083038185885af1158015613027573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061304c9190613f98565b5050505050565b6000808311829061309a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130919190613146565b60405180910390fd5b50600083856130a99190613c6b565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156130f05780820151818401526020810190506130d5565b60008484015250505050565b6000601f19601f8301169050919050565b6000613118826130b6565b61312281856130c1565b93506131328185602086016130d2565b61313b816130fc565b840191505092915050565b60006020820190508181036000830152613160818461310d565b905092915050565b600080fd5b600080fd5b6000819050919050565b61318581613172565b811461319057600080fd5b50565b6000813590506131a28161317c565b92915050565b6000806000606084860312156131c1576131c0613168565b5b60006131cf86828701613193565b93505060206131e086828701613193565b92505060406131f186828701613193565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613226826131fb565b9050919050565b6132368161321b565b811461324157600080fd5b50565b6000813590506132538161322d565b92915050565b600080604083850312156132705761326f613168565b5b600061327e85828601613244565b925050602061328f85828601613193565b9150509250929050565b60008115159050919050565b6132ae81613299565b82525050565b60006020820190506132c960008301846132a5565b92915050565b6000602082840312156132e5576132e4613168565b5b60006132f384828501613244565b91505092915050565b6000819050919050565b600061332161331c613317846131fb565b6132fc565b6131fb565b9050919050565b600061333382613306565b9050919050565b600061334582613328565b9050919050565b6133558161333a565b82525050565b6000602082019050613370600083018461334c565b92915050565b61337f81613172565b82525050565b600060208201905061339a6000830184613376565b92915050565b6133a981613299565b81146133b457600080fd5b50565b6000813590506133c6816133a0565b92915050565b600080604083850312156133e3576133e2613168565b5b60006133f185828601613244565b9250506020613402858286016133b7565b9150509250929050565b60008060006060848603121561342557613424613168565b5b600061343386828701613244565b935050602061344486828701613244565b925050604061345586828701613193565b9150509250925092565b6134688161321b565b82525050565b6000602082019050613483600083018461345f565b92915050565b600060ff82169050919050565b61349f81613489565b82525050565b60006020820190506134ba6000830184613496565b92915050565b6000602082840312156134d6576134d5613168565b5b60006134e484828501613193565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112613512576135116134ed565b5b8235905067ffffffffffffffff81111561352f5761352e6134f2565b5b60208301915083602082028301111561354b5761354a6134f7565b5b9250929050565b6000806020838503121561356957613568613168565b5b600083013567ffffffffffffffff8111156135875761358661316d565b5b613593858286016134fc565b92509250509250929050565b6000602082840312156135b5576135b4613168565b5b60006135c3848285016133b7565b91505092915050565b60006135d7826131fb565b9050919050565b6135e7816135cc565b82525050565b600060208201905061360260008301846135de565b92915050565b6000806040838503121561361f5761361e613168565b5b600061362d85828601613244565b925050602061363e85828601613244565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061368f57607f821691505b6020821081036136a2576136a1613648565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006136de6020836130c1565b91506136e9826136a8565b602082019050919050565b6000602082019050818103600083015261370d816136d1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061377d82613172565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036137af576137ae613743565b5b600182019050919050565b60006137c582613172565b91506137d083613172565b92508282019050808211156137e8576137e7613743565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613824601b836130c1565b915061382f826137ee565b602082019050919050565b6000602082019050818103600083015261385381613817565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006138b66024836130c1565b91506138c18261385a565b604082019050919050565b600060208201905081810360008301526138e5816138a9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006139486022836130c1565b9150613953826138ec565b604082019050919050565b600060208201905081810360008301526139778161393b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006139da6025836130c1565b91506139e58261397e565b604082019050919050565b60006020820190508181036000830152613a09816139cd565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613a6c6023836130c1565b9150613a7782613a10565b604082019050919050565b60006020820190508181036000830152613a9b81613a5f565b9050919050565b7f556e61626c6520746f206c6f6361746520636f72726573706f6e64696e67205460008201527f72616e736665724576656e744c4f475300000000000000000000000000000000602082015250565b6000613afe6030836130c1565b9150613b0982613aa2565b604082019050919050565b60006020820190508181036000830152613b2d81613af1565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000613b906028836130c1565b9150613b9b82613b34565b604082019050919050565b60006020820190508181036000830152613bbf81613b83565b9050919050565b6000613bd182613172565b9150613bdc83613172565b9250828203905081811115613bf457613bf3613743565b5b92915050565b6000613c0582613172565b9150613c1083613172565b9250828202613c1e81613172565b91508282048414831517613c3557613c34613743565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613c7682613172565b9150613c8183613172565b925082613c9157613c90613c3c565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613cf86021836130c1565b9150613d0382613c9c565b604082019050919050565b60006020820190508181036000830152613d2781613ceb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050613d6c8161322d565b92915050565b600060208284031215613d8857613d87613168565b5b6000613d9684828501613d5d565b91505092915050565b6000819050919050565b6000613dc4613dbf613dba84613d9f565b6132fc565b613172565b9050919050565b613dd481613da9565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613e0f8161321b565b82525050565b6000613e218383613e06565b60208301905092915050565b6000602082019050919050565b6000613e4582613dda565b613e4f8185613de5565b9350613e5a83613df6565b8060005b83811015613e8b578151613e728882613e15565b9750613e7d83613e2d565b925050600181019050613e5e565b5085935050505092915050565b600060a082019050613ead6000830188613376565b613eba6020830187613dcb565b8181036040830152613ecc8186613e3a565b9050613edb606083018561345f565b613ee86080830184613376565b9695505050505050565b6000604082019050613f076000830185613376565b8181036020830152613f198184613e3a565b90509392505050565b600060c082019050613f37600083018961345f565b613f446020830188613376565b613f516040830187613dcb565b613f5e6060830186613dcb565b613f6b608083018561345f565b613f7860a0830184613376565b979650505050505050565b600081519050613f928161317c565b92915050565b600080600060608486031215613fb157613fb0613168565b5b6000613fbf86828701613f83565b9350506020613fd086828701613f83565b9250506040613fe186828701613f83565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122015c795ae2ce56ebf33441e1d7f10d6fa11a09ec48d093be90bd63ad4feaf1bd164736f6c63430008120033

Deployed Bytecode

0x6080604052600436106103035760003560e01c8063846e578b11610190578063c816841b116100dc578063dd62ed3e11610095578063f0cd1dac1161006f578063f0cd1dac14610bd3578063f1d5f51714610bfe578063f84ba65d14610c27578063f872858a14610c505761030a565b8063dd62ed3e14610b42578063e990a57114610b7f578063ec28438a14610baa5761030a565b8063c816841b14610a2e578063c860795214610a59578063c867d60b14610a84578063d158272d14610ac1578063da00097d14610aec578063dc44b6a014610b175761030a565b806397291a8c11610149578063a457c2d711610123578063a457c2d714610960578063a9059cbb1461099d578063c49b9a80146109da578063c5d2418914610a035761030a565b806397291a8c146108df578063a073d37f1461090a578063a08e671f146109355761030a565b8063846e578b146107cd5780638498a42c146107f857806388790a68146108215780638b42507f1461084c5780638da5cb5b1461088957806395d89b41146108b45761030a565b8063395093511161024f5780635c9a05b811610208578063715018a6116101e2578063715018a6146107355780637d1db4a51461074c578063807c2d9c1461077757806382eefb43146107a25761030a565b80635c9a05b81461069057806361a23c69146106cd57806370a08231146106f85761030a565b8063395093511461055a5780633ecad2711461059757806348a46473146105d45780634a74bb02146105fd5780635342acb41461062857806357a5802f146106655761030a565b80631870517a116102bc57806327c8f8351161029657806327c8f835146104ae5780632b112e49146104d95780632edb6c6614610504578063313ce5671461052f5761030a565b80631870517a1461041f5780632198cf6c1461044857806323b872dd146104715761030a565b806306fdde031461030f578063087332141461033a578063095ea7b3146103635780630f4fbcc6146103a05780631694505e146103c957806318160ddd146103f45761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610c7b565b6040516103319190613146565b60405180910390f35b34801561034657600080fd5b50610361600480360381019061035c91906131a8565b610d0d565b005b34801561036f57600080fd5b5061038a60048036038101906103859190613259565b610dd4565b60405161039791906132b4565b60405180910390f35b3480156103ac57600080fd5b506103c760048036038101906103c291906132cf565b610df2565b005b3480156103d557600080fd5b506103de610ec9565b6040516103eb919061335b565b60405180910390f35b34801561040057600080fd5b50610409610eef565b6040516104169190613385565b60405180910390f35b34801561042b57600080fd5b50610446600480360381019061044191906131a8565b610ef9565b005b34801561045457600080fd5b5061046f600480360381019061046a91906133cc565b610fc0565b005b34801561047d57600080fd5b506104986004803603810190610493919061340c565b611097565b6040516104a591906132b4565b60405180910390f35b3480156104ba57600080fd5b506104c3611171565b6040516104d0919061346e565b60405180910390f35b3480156104e557600080fd5b506104ee611195565b6040516104fb9190613385565b60405180910390f35b34801561051057600080fd5b506105196111d9565b6040516105269190613385565b60405180910390f35b34801561053b57600080fd5b506105446111df565b60405161055191906134a5565b60405180910390f35b34801561056657600080fd5b50610581600480360381019061057c9190613259565b6111f6565b60405161058e91906132b4565b60405180910390f35b3480156105a357600080fd5b506105be60048036038101906105b991906132cf565b6112a9565b6040516105cb91906132b4565b60405180910390f35b3480156105e057600080fd5b506105fb60048036038101906105f691906134c0565b6112c9565b005b34801561060957600080fd5b5061061261134f565b60405161061f91906132b4565b60405180910390f35b34801561063457600080fd5b5061064f600480360381019061064a91906132cf565b611362565b60405161065c91906132b4565b60405180910390f35b34801561067157600080fd5b5061067a611382565b6040516106879190613385565b60405180910390f35b34801561069c57600080fd5b506106b760048036038101906106b291906132cf565b611388565b6040516106c491906132b4565b60405180910390f35b3480156106d957600080fd5b506106e26113a8565b6040516106ef9190613385565b60405180910390f35b34801561070457600080fd5b5061071f600480360381019061071a91906132cf565b6113ae565b60405161072c9190613385565b60405180910390f35b34801561074157600080fd5b5061074a6113f7565b005b34801561075857600080fd5b50610761611531565b60405161076e9190613385565b60405180910390f35b34801561078357600080fd5b5061078c611537565b6040516107999190613385565b60405180910390f35b3480156107ae57600080fd5b506107b761153d565b6040516107c49190613385565b60405180910390f35b3480156107d957600080fd5b506107e2611543565b6040516107ef9190613385565b60405180910390f35b34801561080457600080fd5b5061081f600480360381019061081a9190613552565b611549565b005b34801561082d57600080fd5b50610836611668565b6040516108439190613385565b60405180910390f35b34801561085857600080fd5b50610873600480360381019061086e91906132cf565b61166e565b60405161088091906132b4565b60405180910390f35b34801561089557600080fd5b5061089e61168e565b6040516108ab919061346e565b60405180910390f35b3480156108c057600080fd5b506108c96116b7565b6040516108d69190613146565b60405180910390f35b3480156108eb57600080fd5b506108f4611749565b6040516109019190613385565b60405180910390f35b34801561091657600080fd5b5061091f61174f565b60405161092c9190613385565b60405180910390f35b34801561094157600080fd5b5061094a611759565b6040516109579190613385565b60405180910390f35b34801561096c57600080fd5b5061098760048036038101906109829190613259565b61175f565b60405161099491906132b4565b60405180910390f35b3480156109a957600080fd5b506109c460048036038101906109bf9190613259565b61182c565b6040516109d191906132b4565b60405180910390f35b3480156109e657600080fd5b50610a0160048036038101906109fc919061359f565b61184b565b005b348015610a0f57600080fd5b50610a1861191b565b604051610a259190613385565b60405180910390f35b348015610a3a57600080fd5b50610a43611921565b604051610a50919061346e565b60405180910390f35b348015610a6557600080fd5b50610a6e611947565b604051610a7b9190613385565b60405180910390f35b348015610a9057600080fd5b50610aab6004803603810190610aa691906132cf565b61194d565b604051610ab891906132b4565b60405180910390f35b348015610acd57600080fd5b50610ad661196d565b604051610ae391906135ed565b60405180910390f35b348015610af857600080fd5b50610b01611993565b604051610b0e91906132b4565b60405180910390f35b348015610b2357600080fd5b50610b2c6119a6565b604051610b399190613385565b60405180910390f35b348015610b4e57600080fd5b50610b696004803603810190610b649190613608565b6119ac565b604051610b769190613385565b60405180910390f35b348015610b8b57600080fd5b50610b94611a33565b604051610ba191906135ed565b60405180910390f35b348015610bb657600080fd5b50610bd16004803603810190610bcc91906134c0565b611a59565b005b348015610bdf57600080fd5b50610be8611adf565b604051610bf59190613385565b60405180910390f35b348015610c0a57600080fd5b50610c256004803603810190610c2091906134c0565b611ae5565b005b348015610c3357600080fd5b50610c4e6004803603810190610c4991906133cc565b611b6b565b005b348015610c5c57600080fd5b50610c65611c42565b604051610c7291906132b4565b60405180910390f35b606060018054610c8a90613677565b80601f0160208091040260200160405190810160405280929190818152602001828054610cb690613677565b8015610d035780601f10610cd857610100808354040283529160200191610d03565b820191906000526020600020905b815481529060010190602001808311610ce657829003601f168201915b5050505050905090565b610d15611cb3565b73ffffffffffffffffffffffffffffffffffffffff16610d3361168e565b73ffffffffffffffffffffffffffffffffffffffff1614610d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d80906136f4565b60405180910390fd5b82600f819055508160108190555080601181905550610dc9601154610dbb601054600f54611c5590919063ffffffff16565b611c5590919063ffffffff16565b601681905550505050565b6000610de8610de1611cb3565b8484611cbb565b6001905092915050565b610dfa611cb3565b73ffffffffffffffffffffffffffffffffffffffff16610e1861168e565b73ffffffffffffffffffffffffffffffffffffffff1614610e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e65906136f4565b60405180910390fd5b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601854905090565b610f01611cb3565b73ffffffffffffffffffffffffffffffffffffffff16610f1f61168e565b73ffffffffffffffffffffffffffffffffffffffff1614610f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6c906136f4565b60405180910390fd5b82600c8190555081600d8190555080600e81905550610fb5600e54610fa7600d54600c54611c5590919063ffffffff16565b611c5590919063ffffffff16565b601581905550505050565b610fc8611cb3565b73ffffffffffffffffffffffffffffffffffffffff16610fe661168e565b73ffffffffffffffffffffffffffffffffffffffff161461103c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611033906136f4565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006110a4848484611e84565b50611166846110b1611cb3565b61116185604051806060016040528060288152602001613fec60289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611117611cb3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461254a9092919063ffffffff16565b611cbb565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b60006111d46111c37f000000000000000000000000000000000000000000000000000000000000dead6113ae565b6018546125ae90919063ffffffff16565b905090565b600e5481565b6000600360009054906101000a900460ff16905090565b600061129f611203611cb3565b8461129a8560066000611214611cb3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c5590919063ffffffff16565b611cbb565b6001905092915050565b600a6020528060005260406000206000915054906101000a900460ff1681565b6112d1611cb3565b73ffffffffffffffffffffffffffffffffffffffff166112ef61168e565b73ffffffffffffffffffffffffffffffffffffffff1614611345576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133c906136f4565b60405180910390fd5b80601b8190555050565b601d60159054906101000a900460ff1681565b60076020528060005260406000206000915054906101000a900460ff1681565b60125481565b600b6020528060005260406000206000915054906101000a900460ff1681565b60135481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113ff611cb3565b73ffffffffffffffffffffffffffffffffffffffff1661141d61168e565b73ffffffffffffffffffffffffffffffffffffffff1614611473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146a906136f4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60195481565b601a5481565b60165481565b60145481565b611551611cb3565b73ffffffffffffffffffffffffffffffffffffffff1661156f61168e565b73ffffffffffffffffffffffffffffffffffffffff16146115c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bc906136f4565b60405180910390fd5b60005b82829050811015611663576001600b60008585858181106115ec576115eb613714565b5b905060200201602081019061160191906132cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508061165c90613772565b90506115c8565b505050565b600f5481565b60096020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546116c690613677565b80601f01602080910402602001604051908101604052809291908181526020018280546116f290613677565b801561173f5780601f106117145761010080835404028352916020019161173f565b820191906000526020600020905b81548152906001019060200180831161172257829003601f168201915b5050505050905090565b60115481565b6000601b54905090565b60175481565b600061182261176c611cb3565b8461181d856040518060600160405280602581526020016140146025913960066000611796611cb3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461254a9092919063ffffffff16565b611cbb565b6001905092915050565b6000611840611839611cb3565b8484611e84565b506001905092915050565b611853611cb3565b73ffffffffffffffffffffffffffffffffffffffff1661187161168e565b73ffffffffffffffffffffffffffffffffffffffff16146118c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118be906136f4565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161191091906132b4565b60405180910390a150565b600d5481565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b60086020528060005260406000206000915054906101000a900460ff1681565b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d60169054906101000a900460ff1681565b600c5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611a61611cb3565b73ffffffffffffffffffffffffffffffffffffffff16611a7f61168e565b73ffffffffffffffffffffffffffffffffffffffff1614611ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acc906136f4565b60405180910390fd5b8060198190555050565b60155481565b611aed611cb3565b73ffffffffffffffffffffffffffffffffffffffff16611b0b61168e565b73ffffffffffffffffffffffffffffffffffffffff1614611b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b58906136f4565b60405180910390fd5b80601a8190555050565b611b73611cb3565b73ffffffffffffffffffffffffffffffffffffffff16611b9161168e565b73ffffffffffffffffffffffffffffffffffffffff1614611be7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bde906136f4565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601d60179054906101000a900460ff1681565b6000808284611c6491906137ba565b905083811015611ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca09061383a565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d21906138cc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d909061395e565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e779190613385565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611ef4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eeb906139f0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5a90613a82565b60405180910390fd5b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120075750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203d90613b14565b60405180910390fd5b601d60149054906101000a900460ff161561206d576120668484846125f8565b9050612543565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121115750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561215c5760195482111561215b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215290613ba6565b60405180910390fd5b5b6000612167306113ae565b90506000601b54821015905080801561218d5750601d60149054906101000a900460ff16155b80156121e35750600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156121fb5750601d60159054906101000a900460ff165b1561222557601d60169054906101000a900460ff161561221b57601b5491505b612224826127cb565b5b6122ae846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461254a9092919063ffffffff16565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123945750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6123a8576123a38787876129bc565b6123aa565b845b9050601d60179054906101000a900460ff1680156124125750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561244157601a5461243582612427896113ae565b611c5590919063ffffffff16565b111561244057600080fd5b5b61249381600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c5590919063ffffffff16565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516125339190613385565b60405180910390a3600193505050505b9392505050565b6000838311158290612592576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125899190613146565b60405180910390fd5b50600083856125a19190613bc6565b9050809150509392505050565b60006125f083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061254a565b905092915050565b6000612683826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461254a9092919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061271882600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c5590919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516127b89190613385565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff0219169083151502179055506000612824600261281660175461280860125487612be390919063ffffffff16565b612c5d90919063ffffffff16565b612c5d90919063ffffffff16565b9050600061283b82846125ae90919063ffffffff16565b905061284681612ca7565b600047905060006128776128666002601254612c5d90919063ffffffff16565b6017546125ae90919063ffffffff16565b905060006128b560026128a78461289960125488612be390919063ffffffff16565b612c5d90919063ffffffff16565b612c5d90919063ffffffff16565b905060006128e0836128d260145487612be390919063ffffffff16565b612c5d90919063ffffffff16565b90506000612909826128fb85886125ae90919063ffffffff16565b6125ae90919063ffffffff16565b9050600081111561294157612940600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612f23565b5b600082111561297757612976600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612f23565b5b6000831180156129875750600087115b15612997576129968784612f6e565b5b505050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612a4457612a3d6064612a2f60155486612be390919063ffffffff16565b612c5d90919063ffffffff16565b9050612ac2565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612ac157612abe6064612ab060165486612be390919063ffffffff16565b612c5d90919063ffffffff16565b90505b5b6000811115612bc657612b1d81600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c5590919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612bbd9190613385565b60405180910390a35b612bd981846125ae90919063ffffffff16565b9150509392505050565b6000808303612bf55760009050612c57565b60008284612c039190613bfa565b9050828482612c129190613c6b565b14612c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4990613d0e565b60405180910390fd5b809150505b92915050565b6000612c9f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613053565b905092915050565b6000600267ffffffffffffffff811115612cc457612cc3613d2e565b5b604051908082528060200260200182016040528015612cf25781602001602082028036833780820191505090505b5090503081600081518110612d0a57612d09613714565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612db1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd59190613d72565b81600181518110612de957612de8613714565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612e5030601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611cbb565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612eb4959493929190613e98565b600060405180830381600087803b158015612ece57600080fd5b505af1158015612ee2573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612f17929190613ef2565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612f69573d6000803e3d6000fd5b505050565b612f9b30601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611cbb565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612fe761168e565b426040518863ffffffff1660e01b815260040161300996959493929190613f22565b60606040518083038185885af1158015613027573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061304c9190613f98565b5050505050565b6000808311829061309a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130919190613146565b60405180910390fd5b50600083856130a99190613c6b565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156130f05780820151818401526020810190506130d5565b60008484015250505050565b6000601f19601f8301169050919050565b6000613118826130b6565b61312281856130c1565b93506131328185602086016130d2565b61313b816130fc565b840191505092915050565b60006020820190508181036000830152613160818461310d565b905092915050565b600080fd5b600080fd5b6000819050919050565b61318581613172565b811461319057600080fd5b50565b6000813590506131a28161317c565b92915050565b6000806000606084860312156131c1576131c0613168565b5b60006131cf86828701613193565b93505060206131e086828701613193565b92505060406131f186828701613193565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613226826131fb565b9050919050565b6132368161321b565b811461324157600080fd5b50565b6000813590506132538161322d565b92915050565b600080604083850312156132705761326f613168565b5b600061327e85828601613244565b925050602061328f85828601613193565b9150509250929050565b60008115159050919050565b6132ae81613299565b82525050565b60006020820190506132c960008301846132a5565b92915050565b6000602082840312156132e5576132e4613168565b5b60006132f384828501613244565b91505092915050565b6000819050919050565b600061332161331c613317846131fb565b6132fc565b6131fb565b9050919050565b600061333382613306565b9050919050565b600061334582613328565b9050919050565b6133558161333a565b82525050565b6000602082019050613370600083018461334c565b92915050565b61337f81613172565b82525050565b600060208201905061339a6000830184613376565b92915050565b6133a981613299565b81146133b457600080fd5b50565b6000813590506133c6816133a0565b92915050565b600080604083850312156133e3576133e2613168565b5b60006133f185828601613244565b9250506020613402858286016133b7565b9150509250929050565b60008060006060848603121561342557613424613168565b5b600061343386828701613244565b935050602061344486828701613244565b925050604061345586828701613193565b9150509250925092565b6134688161321b565b82525050565b6000602082019050613483600083018461345f565b92915050565b600060ff82169050919050565b61349f81613489565b82525050565b60006020820190506134ba6000830184613496565b92915050565b6000602082840312156134d6576134d5613168565b5b60006134e484828501613193565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112613512576135116134ed565b5b8235905067ffffffffffffffff81111561352f5761352e6134f2565b5b60208301915083602082028301111561354b5761354a6134f7565b5b9250929050565b6000806020838503121561356957613568613168565b5b600083013567ffffffffffffffff8111156135875761358661316d565b5b613593858286016134fc565b92509250509250929050565b6000602082840312156135b5576135b4613168565b5b60006135c3848285016133b7565b91505092915050565b60006135d7826131fb565b9050919050565b6135e7816135cc565b82525050565b600060208201905061360260008301846135de565b92915050565b6000806040838503121561361f5761361e613168565b5b600061362d85828601613244565b925050602061363e85828601613244565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061368f57607f821691505b6020821081036136a2576136a1613648565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006136de6020836130c1565b91506136e9826136a8565b602082019050919050565b6000602082019050818103600083015261370d816136d1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061377d82613172565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036137af576137ae613743565b5b600182019050919050565b60006137c582613172565b91506137d083613172565b92508282019050808211156137e8576137e7613743565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613824601b836130c1565b915061382f826137ee565b602082019050919050565b6000602082019050818103600083015261385381613817565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006138b66024836130c1565b91506138c18261385a565b604082019050919050565b600060208201905081810360008301526138e5816138a9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006139486022836130c1565b9150613953826138ec565b604082019050919050565b600060208201905081810360008301526139778161393b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006139da6025836130c1565b91506139e58261397e565b604082019050919050565b60006020820190508181036000830152613a09816139cd565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613a6c6023836130c1565b9150613a7782613a10565b604082019050919050565b60006020820190508181036000830152613a9b81613a5f565b9050919050565b7f556e61626c6520746f206c6f6361746520636f72726573706f6e64696e67205460008201527f72616e736665724576656e744c4f475300000000000000000000000000000000602082015250565b6000613afe6030836130c1565b9150613b0982613aa2565b604082019050919050565b60006020820190508181036000830152613b2d81613af1565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000613b906028836130c1565b9150613b9b82613b34565b604082019050919050565b60006020820190508181036000830152613bbf81613b83565b9050919050565b6000613bd182613172565b9150613bdc83613172565b9250828203905081811115613bf457613bf3613743565b5b92915050565b6000613c0582613172565b9150613c1083613172565b9250828202613c1e81613172565b91508282048414831517613c3557613c34613743565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613c7682613172565b9150613c8183613172565b925082613c9157613c90613c3c565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613cf86021836130c1565b9150613d0382613c9c565b604082019050919050565b60006020820190508181036000830152613d2781613ceb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050613d6c8161322d565b92915050565b600060208284031215613d8857613d87613168565b5b6000613d9684828501613d5d565b91505092915050565b6000819050919050565b6000613dc4613dbf613dba84613d9f565b6132fc565b613172565b9050919050565b613dd481613da9565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613e0f8161321b565b82525050565b6000613e218383613e06565b60208301905092915050565b6000602082019050919050565b6000613e4582613dda565b613e4f8185613de5565b9350613e5a83613df6565b8060005b83811015613e8b578151613e728882613e15565b9750613e7d83613e2d565b925050600181019050613e5e565b5085935050505092915050565b600060a082019050613ead6000830188613376565b613eba6020830187613dcb565b8181036040830152613ecc8186613e3a565b9050613edb606083018561345f565b613ee86080830184613376565b9695505050505050565b6000604082019050613f076000830185613376565b8181036020830152613f198184613e3a565b90509392505050565b600060c082019050613f37600083018961345f565b613f446020830188613376565b613f516040830187613dcb565b613f5e6060830186613dcb565b613f6b608083018561345f565b613f7860a0830184613376565b979650505050505050565b600081519050613f928161317c565b92915050565b600080600060608486031215613fb157613fb0613168565b5b6000613fbf86828701613f83565b9350506020613fd086828701613f83565b9250506040613fe186828701613f83565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122015c795ae2ce56ebf33441e1d7f10d6fa11a09ec48d093be90bd63ad4feaf1bd164736f6c63430008120033

Deployed Bytecode Sourcemap

13930:13695:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18021:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20310:341;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19316:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20782:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15705:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18298:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19969:333;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21064:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22045:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14425:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21500:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15009:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18207:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18684:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14818:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20904:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15820:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14647:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15179:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14867:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15222:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18406:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5943:148;;;;;;;;;;;;;:::i;:::-;;15513:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15575:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15349:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15265:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24200:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15052:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14763:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5724:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18112;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15139:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19187:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15396:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18910:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21870:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21317:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14966:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15753:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15095:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14704:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14173:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15867:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14924:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18533:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14300:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20665:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15305:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21207:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19830:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15919:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18021:83;18058:13;18091:5;18084:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18021:83;:::o;20310:341::-;5868:12;:10;:12::i;:::-;5857:23;;:7;:5;:7::i;:::-;:23;;;5849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20454:15:::1;20434:17;:35;;;;20500:15;20480:17;:35;;;;20541:10;20526:12;:25;;;;20585:58;20630:12;;20585:40;20607:17;;20585;;:21;;:40;;;;:::i;:::-;:44;;:58;;;;:::i;:::-;20564:18;:79;;;;20310:341:::0;;;:::o;19316:161::-;19391:4;19408:39;19417:12;:10;:12::i;:::-;19431:7;19440:6;19408:8;:39::i;:::-;19465:4;19458:11;;19316:161;;;;:::o;20782:116::-;5868:12;:10;:12::i;:::-;5857:23;;:7;:5;:7::i;:::-;:23;;;5849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20885:5:::1;20858:15;:24;20874:7;20858:24;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;20782:116:::0;:::o;15705:41::-;;;;;;;;;;;;;:::o;18298:100::-;18351:7;18378:12;;18371:19;;18298:100;:::o;19969:333::-;5868:12;:10;:12::i;:::-;5857:23;;:7;:5;:7::i;:::-;:23;;;5849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20111:15:::1;20092:16;:34;;;;20156:15;20137:16;:34;;;;20196:10;20182:11;:24;;;;20239:55;20282:11;;20239:38;20260:16;;20239;;:20;;:38;;;;:::i;:::-;:42;;:55;;;;:::i;:::-;20219:17;:75;;;;19969:333:::0;;;:::o;21064:135::-;5868:12;:10;:12::i;:::-;5857:23;;:7;:5;:7::i;:::-;:23;;;5849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21185:6:::1;21155:19;:27;21175:6;21155:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;21064:135:::0;;:::o;22045:313::-;22143:4;22160:36;22170:6;22178:9;22189:6;22160:9;:36::i;:::-;;22207:121;22216:6;22224:12;:10;:12::i;:::-;22238:89;22276:6;22238:89;;;;;;;;;;;;;;;;;:11;:19;22250:6;22238:19;;;;;;;;;;;;;;;:33;22258:12;:10;:12::i;:::-;22238:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;22207:8;:121::i;:::-;22346:4;22339:11;;22045:313;;;;;:::o;14425:81::-;;;:::o;21500:128::-;21553:7;21580:40;21597:22;21607:11;21597:9;:22::i;:::-;21580:12;;:16;;:40;;;;:::i;:::-;21573:47;;21500:128;:::o;15009:30::-;;;;:::o;18207:83::-;18248:5;18273:9;;;;;;;;;;;18266:16;;18207:83;:::o;18684:218::-;18772:4;18789:83;18798:12;:10;:12::i;:::-;18812:7;18821:50;18860:10;18821:11;:25;18833:12;:10;:12::i;:::-;18821:25;;;;;;;;;;;;;;;:34;18847:7;18821:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;18789:8;:83::i;:::-;18890:4;18883:11;;18684:218;;;;:::o;14818:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;20904:152::-;5868:12;:10;:12::i;:::-;5857:23;;:7;:5;:7::i;:::-;:23;;;5849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21026:22:::1;21000:23;:48;;;;20904:152:::0;:::o;15820:40::-;;;;;;;;;;;;;:::o;14647:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;15179:35::-;;;;:::o;14867:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;15222:36::-;;;;:::o;18406:119::-;18472:7;18499:9;:18;18509:7;18499:18;;;;;;;;;;;;;;;;18492:25;;18406:119;;;:::o;5943:148::-;5868:12;:10;:12::i;:::-;5857:23;;:7;:5;:7::i;:::-;:23;;;5849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6050:1:::1;6013:40;;6034:6;::::0;::::1;;;;;;;;6013:40;;;;;;;;;;;;6081:1;6064:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;5943:148::o:0;15513:54::-;;;;:::o;15575:52::-;;;;:::o;15349:38::-;;;;:::o;15265:30::-;;;;:::o;24200:193::-;5868:12;:10;:12::i;:::-;5857:23;;:7;:5;:7::i;:::-;:23;;;5849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24291:9:::1;24286:100;24306:9;;:16;;24302:1;:20;24286:100;;;24372:4;24340:15;:29;24356:9;;24366:1;24356:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;24340:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;24324:3;;;;:::i;:::-;;;24286:100;;;;24200:193:::0;;:::o;15052:36::-;;;;:::o;14763:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;5724:87::-;5770:7;5797:6;;;;;;;;;;;5790:13;;5724:87;:::o;18112:::-;18151:13;18184:7;18177:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18112:87;:::o;15139:31::-;;;;:::o;19187:120::-;19249:7;19276:23;;19269:30;;19187:120;:::o;15396:44::-;;;;:::o;18910:269::-;19003:4;19020:129;19029:12;:10;:12::i;:::-;19043:7;19052:96;19091:15;19052:96;;;;;;;;;;;;;;;;;:11;:25;19064:12;:10;:12::i;:::-;19052:25;;;;;;;;;;;;;;;:34;19078:7;19052:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;19020:8;:129::i;:::-;19167:4;19160:11;;18910:269;;;;:::o;21870:167::-;21948:4;21965:42;21975:12;:10;:12::i;:::-;21989:9;22000:6;21965:9;:42::i;:::-;;22025:4;22018:11;;21870:167;;;;:::o;21317:171::-;5868:12;:10;:12::i;:::-;5857:23;;:7;:5;:7::i;:::-;:23;;;5849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21418:8:::1;21394:21;;:32;;;;;;;;;;;;;;;;;;21442:38;21471:8;21442:38;;;;;;:::i;:::-;;;;;;;;21317:171:::0;:::o;14966:36::-;;;;:::o;15753:26::-;;;;;;;;;;;;;:::o;15095:37::-;;;;:::o;14704:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;14173:99::-;;;;;;;;;;;;;:::o;15867:45::-;;;;;;;;;;;;;:::o;14924:35::-;;;;:::o;18533:143::-;18614:7;18641:11;:18;18653:5;18641:18;;;;;;;;;;;;;;;:27;18660:7;18641:27;;;;;;;;;;;;;;;;18634:34;;18533:143;;;;:::o;14300:94::-;;;;;;;;;;;;;:::o;20665:111::-;5868:12;:10;:12::i;:::-;5857:23;;:7;:5;:7::i;:::-;:23;;;5849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20757:11:::1;20742:12;:26;;;;20665:111:::0;:::o;15305:37::-;;;;:::o;21207:102::-;5868:12;:10;:12::i;:::-;5857:23;;:7;:5;:7::i;:::-;:23;;;5849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21293:8:::1;21279:10;:22;;;;21207:102:::0;:::o;19830:127::-;5868:12;:10;:12::i;:::-;5857:23;;:7;:5;:7::i;:::-;:23;;;5849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19943:6:::1;19917:15;:23;19933:6;19917:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;19830:127:::0;;:::o;15919:35::-;;;;;;;;;;;;;:::o;1166:181::-;1224:7;1244:9;1260:1;1256;:5;;;;:::i;:::-;1244:17;;1285:1;1280;:6;;1272:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1338:1;1331:8;;;1166:181;;;;:::o;98:115::-;151:15;194:10;179:26;;98:115;:::o;19485:337::-;19595:1;19578:19;;:5;:19;;;19570:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19676:1;19657:21;;:7;:21;;;19649:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19760:6;19730:11;:18;19742:5;19730:18;;;;;;;;;;;;;;;:27;19749:7;19730:27;;;;;;;;;;;;;;;:36;;;;19798:7;19782:32;;19791:5;19782:32;;;19807:6;19782:32;;;;;;:::i;:::-;;;;;;;;19485:337;;;:::o;22366:1828::-;22453:4;22498:1;22480:20;;:6;:20;;;22472:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;22582:1;22561:23;;:9;:23;;;22553:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;22638:15;:23;22654:6;22638:23;;;;;;;;;;;;;;;;;;;;;;;;;22637:24;:55;;;;;22666:15;:26;22682:9;22666:26;;;;;;;;;;;;;;;;;;;;;;;;;22665:27;22637:55;22629:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;22761:16;;;;;;;;;;;22758:1429;;;22811:41;22826:6;22834:9;22845:6;22811:14;:41::i;:::-;22804:48;;;;22758:1429;22908:15;:23;22924:6;22908:23;;;;;;;;;;;;;;;;;;;;;;;;;22907:24;:55;;;;;22936:15;:26;22952:9;22936:26;;;;;;;;;;;;;;;;;;;;;;;;;22935:27;22907:55;22904:170;;;23001:12;;22991:6;:22;;22983:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;22904:170;23102:28;23133:24;23151:4;23133:9;:24::i;:::-;23102:55;;23172:28;23227:23;;23203:20;:47;;23172:78;;23283:23;:44;;;;;23311:16;;;;;;;;;;;23310:17;23283:44;:69;;;;;23332:12;:20;23345:6;23332:20;;;;;;;;;;;;;;;;;;;;;;;;;23331:21;23283:69;:94;;;;;23356:21;;;;;;;;;;;23283:94;23279:305;;;23415:25;;;;;;;;;;;23412:97;;;23486:23;;23463:46;;23412:97;23528:36;23543:20;23528:14;:36::i;:::-;23279:305;23620:53;23642:6;23620:53;;;;;;;;;;;;;;;;;:9;:17;23630:6;23620:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;23600:9;:17;23610:6;23600:17;;;;;;;;;;;;;;;:73;;;;23690:19;23713:17;:25;23731:6;23713:25;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;23742:17;:28;23760:9;23742:28;;;;;;;;;;;;;;;;;;;;;;;;;23713:57;23712:148;;23826:34;23834:6;23842:9;23853:6;23826:7;:34::i;:::-;23712:148;;;23817:6;23712:148;23690:170;;23880:16;;;;;;;;;;;:51;;;;;23901:19;:30;23921:9;23901:30;;;;;;;;;;;;;;;;;;;;;;;;;23900:31;23880:51;23877:133;;;23999:10;;23958:37;23983:11;23958:20;23968:9;23958;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;23950:60;;;;;;23877:133;24050:37;24075:11;24050:9;:20;24060:9;24050:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;24027:9;:20;24037:9;24027:20;;;;;;;;;;;;;;;:60;;;;24126:9;24109:40;;24118:6;24109:40;;;24137:11;24109:40;;;;;;:::i;:::-;;;;;;;;24171:4;24164:11;;;;;22366:1828;;;;;;:::o;1499:192::-;1585:7;1618:1;1613;:6;;1621:12;1605:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1645:9;1661:1;1657;:5;;;;:::i;:::-;1645:17;;1682:1;1675:8;;;1499:192;;;;;:::o;1355:136::-;1413:7;1440:43;1444:1;1447;1440:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1433:50;;1355:136;;;;:::o;24401:330::-;24494:4;24531:53;24553:6;24531:53;;;;;;;;;;;;;;;;;:9;:17;24541:6;24531:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;24511:9;:17;24521:6;24511:17;;;;;;;;;;;;;;;:73;;;;24618:32;24643:6;24618:9;:20;24628:9;24618:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;24595:9;:20;24605:9;24595:20;;;;;;;;;;;;;;;:55;;;;24683:9;24666:35;;24675:6;24666:35;;;24694:6;24666:35;;;;;;:::i;:::-;;;;;;;;24719:4;24712:11;;24401:330;;;;;:::o;24739:1048::-;16396:4;16377:16;;:23;;;;;;;;;;;;;;;;;;24821:19:::1;24843:65;24906:1;24843:58;24876:24;;24843:28;24855:15;;24843:7;:11;;:28;;;;:::i;:::-;:32;;:58;;;;:::i;:::-;:62;;:65;;;;:::i;:::-;24821:87;;24919:21;24943:24;24955:11;24943:7;:11;;:24;;;;:::i;:::-;24919:48;;24980:31;24997:13;24980:16;:31::i;:::-;25022:22;25047:21;25022:46;;25081:19;25103:52;25132:22;25152:1;25132:15;;:19;;:22;;;;:::i;:::-;25103:24;;:28;;:52;;;;:::i;:::-;25081:74;;25176:26;25205:59;25262:1;25205:52;25245:11;25205:35;25224:15;;25205:14;:18;;:35;;;;:::i;:::-;:39;;:52;;;;:::i;:::-;:56;;:59;;;;:::i;:::-;25176:88;;25275:21;25299:47;25334:11;25299:30;25318:10;;25299:14;:18;;:30;;;;:::i;:::-;:34;;:47;;;;:::i;:::-;25275:71;;25357:26;25386:57;25429:13;25386:38;25405:18;25386:14;:18;;:38;;;;:::i;:::-;:42;;:57;;;;:::i;:::-;25357:86;;25480:1;25459:18;:22;25456:104;;;25496:64;25517:22;;;;;;;;;;;25541:18;25496:20;:64::i;:::-;25456:104;25592:1;25576:13;:17;25573:89;;;25608:54;25629:17;;;;;;;;;;;25648:13;25608:20;:54::i;:::-;25573:89;25699:1;25678:18;:22;:41;;;;;25718:1;25704:11;:15;25678:41;25675:104;;;25734:45;25747:11;25760:18;25734:12;:45::i;:::-;25675:104;24800:987;;;;;;;16442:5:::0;16423:16;;:24;;;;;;;;;;;;;;;;;;24739:1048;:::o;26994:622::-;27080:7;27110:17;27130:1;27110:21;;27155:12;:20;27168:6;27155:20;;;;;;;;;;;;;;;;;;;;;;;;;27152:223;;;27204:38;27238:3;27204:29;27215:17;;27204:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;27192:50;;27152:223;;;27272:12;:23;27285:9;27272:23;;;;;;;;;;;;;;;;;;;;;;;;;27269:106;;;27324:39;27359:3;27324:30;27335:18;;27324:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;27312:51;;27269:106;27152:223;27410:1;27398:9;:13;27395:173;;;27455:39;27484:9;27455;:24;27473:4;27455:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;27428:9;:24;27446:4;27428:24;;;;;;;;;;;;;;;:66;;;;27539:4;27514:42;;27523:6;27514:42;;;27546:9;27514:42;;;;;;:::i;:::-;;;;;;;;27395:173;27587:21;27598:9;27587:6;:10;;:21;;;;:::i;:::-;27580:28;;;26994:622;;;;;:::o;1699:250::-;1757:7;1786:1;1781;:6;1777:47;;1811:1;1804:8;;;;1777:47;1836:9;1852:1;1848;:5;;;;:::i;:::-;1836:17;;1881:1;1876;1872;:5;;;;:::i;:::-;:10;1864:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1940:1;1933:8;;;1699:250;;;;;:::o;1957:132::-;2015:7;2042:39;2046:1;2049;2042:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2035:46;;1957:132;;;;:::o;25799:666::-;25925:21;25963:1;25949:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25925:40;;25994:4;25976;25981:1;25976:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;26020:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26010:4;26015:1;26010:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;26055:62;26072:4;26087:15;;;;;;;;;;;26105:11;26055:8;:62::i;:::-;26156:15;;;;;;;;;;;:66;;;26237:11;26263:1;26307:4;26334;26370:15;26156:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26422:35;26439:11;26452:4;26422:35;;;;;;;:::i;:::-;;;;;;;;25854:611;25799:666;:::o;21636:126::-;21728:9;:18;;:26;21747:6;21728:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21636:126;;:::o;26473:513::-;26621:62;26638:4;26653:15;;;;;;;;;;;26671:11;26621:8;:62::i;:::-;26726:15;;;;;;;;;;;:31;;;26765:9;26798:4;26818:11;26844:1;26887;26930:7;:5;:7::i;:::-;26952:15;26726:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;26473:513;;:::o;2097:278::-;2183:7;2215:1;2211;:5;2218:12;2203:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2242:9;2258:1;2254;:5;;;;:::i;:::-;2242:17;;2366:1;2359:8;;;2097:278;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:77;1713:7;1742:5;1731:16;;1676:77;;;:::o;1759:122::-;1832:24;1850:5;1832:24;:::i;:::-;1825:5;1822:35;1812:63;;1871:1;1868;1861:12;1812:63;1759:122;:::o;1887:139::-;1933:5;1971:6;1958:20;1949:29;;1987:33;2014:5;1987:33;:::i;:::-;1887:139;;;;:::o;2032:619::-;2109:6;2117;2125;2174:2;2162:9;2153:7;2149:23;2145:32;2142:119;;;2180:79;;:::i;:::-;2142:119;2300:1;2325:53;2370:7;2361:6;2350:9;2346:22;2325:53;:::i;:::-;2315:63;;2271:117;2427:2;2453:53;2498:7;2489:6;2478:9;2474:22;2453:53;:::i;:::-;2443:63;;2398:118;2555:2;2581:53;2626:7;2617:6;2606:9;2602:22;2581:53;:::i;:::-;2571:63;;2526:118;2032:619;;;;;:::o;2657:126::-;2694:7;2734:42;2727:5;2723:54;2712:65;;2657:126;;;:::o;2789:96::-;2826:7;2855:24;2873:5;2855:24;:::i;:::-;2844:35;;2789:96;;;:::o;2891:122::-;2964:24;2982:5;2964:24;:::i;:::-;2957:5;2954:35;2944:63;;3003:1;3000;2993:12;2944:63;2891:122;:::o;3019:139::-;3065:5;3103:6;3090:20;3081:29;;3119:33;3146:5;3119:33;:::i;:::-;3019:139;;;;:::o;3164:474::-;3232:6;3240;3289:2;3277:9;3268:7;3264:23;3260:32;3257:119;;;3295:79;;:::i;:::-;3257:119;3415:1;3440:53;3485:7;3476:6;3465:9;3461:22;3440:53;:::i;:::-;3430:63;;3386:117;3542:2;3568:53;3613:7;3604:6;3593:9;3589:22;3568:53;:::i;:::-;3558:63;;3513:118;3164:474;;;;;:::o;3644:90::-;3678:7;3721:5;3714:13;3707:21;3696:32;;3644:90;;;:::o;3740:109::-;3821:21;3836:5;3821:21;:::i;:::-;3816:3;3809:34;3740:109;;:::o;3855:210::-;3942:4;3980:2;3969:9;3965:18;3957:26;;3993:65;4055:1;4044:9;4040:17;4031:6;3993:65;:::i;:::-;3855:210;;;;:::o;4071:329::-;4130:6;4179:2;4167:9;4158:7;4154:23;4150:32;4147:119;;;4185:79;;:::i;:::-;4147:119;4305:1;4330:53;4375:7;4366:6;4355:9;4351:22;4330:53;:::i;:::-;4320:63;;4276:117;4071:329;;;;:::o;4406:60::-;4434:3;4455:5;4448:12;;4406:60;;;:::o;4472:142::-;4522:9;4555:53;4573:34;4582:24;4600:5;4582:24;:::i;:::-;4573:34;:::i;:::-;4555:53;:::i;:::-;4542:66;;4472:142;;;:::o;4620:126::-;4670:9;4703:37;4734:5;4703:37;:::i;:::-;4690:50;;4620:126;;;:::o;4752:153::-;4829:9;4862:37;4893:5;4862:37;:::i;:::-;4849:50;;4752:153;;;:::o;4911:185::-;5025:64;5083:5;5025:64;:::i;:::-;5020:3;5013:77;4911:185;;:::o;5102:276::-;5222:4;5260:2;5249:9;5245:18;5237:26;;5273:98;5368:1;5357:9;5353:17;5344:6;5273:98;:::i;:::-;5102:276;;;;:::o;5384:118::-;5471:24;5489:5;5471:24;:::i;:::-;5466:3;5459:37;5384:118;;:::o;5508:222::-;5601:4;5639:2;5628:9;5624:18;5616:26;;5652:71;5720:1;5709:9;5705:17;5696:6;5652:71;:::i;:::-;5508:222;;;;:::o;5736:116::-;5806:21;5821:5;5806:21;:::i;:::-;5799:5;5796:32;5786:60;;5842:1;5839;5832:12;5786:60;5736:116;:::o;5858:133::-;5901:5;5939:6;5926:20;5917:29;;5955:30;5979:5;5955:30;:::i;:::-;5858:133;;;;:::o;5997:468::-;6062:6;6070;6119:2;6107:9;6098:7;6094:23;6090:32;6087:119;;;6125:79;;:::i;:::-;6087:119;6245:1;6270:53;6315:7;6306:6;6295:9;6291:22;6270:53;:::i;:::-;6260:63;;6216:117;6372:2;6398:50;6440:7;6431:6;6420:9;6416:22;6398:50;:::i;:::-;6388:60;;6343:115;5997:468;;;;;:::o;6471:619::-;6548:6;6556;6564;6613:2;6601:9;6592:7;6588:23;6584:32;6581:119;;;6619:79;;:::i;:::-;6581:119;6739:1;6764:53;6809:7;6800:6;6789:9;6785:22;6764:53;:::i;:::-;6754:63;;6710:117;6866:2;6892:53;6937:7;6928:6;6917:9;6913:22;6892:53;:::i;:::-;6882:63;;6837:118;6994:2;7020:53;7065:7;7056:6;7045:9;7041:22;7020:53;:::i;:::-;7010:63;;6965:118;6471:619;;;;;:::o;7096:118::-;7183:24;7201:5;7183:24;:::i;:::-;7178:3;7171:37;7096:118;;:::o;7220:222::-;7313:4;7351:2;7340:9;7336:18;7328:26;;7364:71;7432:1;7421:9;7417:17;7408:6;7364:71;:::i;:::-;7220:222;;;;:::o;7448:86::-;7483:7;7523:4;7516:5;7512:16;7501:27;;7448:86;;;:::o;7540:112::-;7623:22;7639:5;7623:22;:::i;:::-;7618:3;7611:35;7540:112;;:::o;7658:214::-;7747:4;7785:2;7774:9;7770:18;7762:26;;7798:67;7862:1;7851:9;7847:17;7838:6;7798:67;:::i;:::-;7658:214;;;;:::o;7878:329::-;7937:6;7986:2;7974:9;7965:7;7961:23;7957:32;7954:119;;;7992:79;;:::i;:::-;7954:119;8112:1;8137:53;8182:7;8173:6;8162:9;8158:22;8137:53;:::i;:::-;8127:63;;8083:117;7878:329;;;;:::o;8213:117::-;8322:1;8319;8312:12;8336:117;8445:1;8442;8435:12;8459:117;8568:1;8565;8558:12;8599:568;8672:8;8682:6;8732:3;8725:4;8717:6;8713:17;8709:27;8699:122;;8740:79;;:::i;:::-;8699:122;8853:6;8840:20;8830:30;;8883:18;8875:6;8872:30;8869:117;;;8905:79;;:::i;:::-;8869:117;9019:4;9011:6;9007:17;8995:29;;9073:3;9065:4;9057:6;9053:17;9043:8;9039:32;9036:41;9033:128;;;9080:79;;:::i;:::-;9033:128;8599:568;;;;;:::o;9173:559::-;9259:6;9267;9316:2;9304:9;9295:7;9291:23;9287:32;9284:119;;;9322:79;;:::i;:::-;9284:119;9470:1;9459:9;9455:17;9442:31;9500:18;9492:6;9489:30;9486:117;;;9522:79;;:::i;:::-;9486:117;9635:80;9707:7;9698:6;9687:9;9683:22;9635:80;:::i;:::-;9617:98;;;;9413:312;9173:559;;;;;:::o;9738:323::-;9794:6;9843:2;9831:9;9822:7;9818:23;9814:32;9811:119;;;9849:79;;:::i;:::-;9811:119;9969:1;9994:50;10036:7;10027:6;10016:9;10012:22;9994:50;:::i;:::-;9984:60;;9940:114;9738:323;;;;:::o;10067:104::-;10112:7;10141:24;10159:5;10141:24;:::i;:::-;10130:35;;10067:104;;;:::o;10177:142::-;10280:32;10306:5;10280:32;:::i;:::-;10275:3;10268:45;10177:142;;:::o;10325:254::-;10434:4;10472:2;10461:9;10457:18;10449:26;;10485:87;10569:1;10558:9;10554:17;10545:6;10485:87;:::i;:::-;10325:254;;;;:::o;10585:474::-;10653:6;10661;10710:2;10698:9;10689:7;10685:23;10681:32;10678:119;;;10716:79;;:::i;:::-;10678:119;10836:1;10861:53;10906:7;10897:6;10886:9;10882:22;10861:53;:::i;:::-;10851:63;;10807:117;10963:2;10989:53;11034:7;11025:6;11014:9;11010:22;10989:53;:::i;:::-;10979:63;;10934:118;10585:474;;;;;:::o;11065:180::-;11113:77;11110:1;11103:88;11210:4;11207:1;11200:15;11234:4;11231:1;11224:15;11251:320;11295:6;11332:1;11326:4;11322:12;11312:22;;11379:1;11373:4;11369:12;11400:18;11390:81;;11456:4;11448:6;11444:17;11434:27;;11390:81;11518:2;11510:6;11507:14;11487:18;11484:38;11481:84;;11537:18;;:::i;:::-;11481:84;11302:269;11251:320;;;:::o;11577:182::-;11717:34;11713:1;11705:6;11701:14;11694:58;11577:182;:::o;11765:366::-;11907:3;11928:67;11992:2;11987:3;11928:67;:::i;:::-;11921:74;;12004:93;12093:3;12004:93;:::i;:::-;12122:2;12117:3;12113:12;12106:19;;11765:366;;;:::o;12137:419::-;12303:4;12341:2;12330:9;12326:18;12318:26;;12390:9;12384:4;12380:20;12376:1;12365:9;12361:17;12354:47;12418:131;12544:4;12418:131;:::i;:::-;12410:139;;12137:419;;;:::o;12562:180::-;12610:77;12607:1;12600:88;12707:4;12704:1;12697:15;12731:4;12728:1;12721:15;12748:180;12796:77;12793:1;12786:88;12893:4;12890:1;12883:15;12917:4;12914:1;12907:15;12934:233;12973:3;12996:24;13014:5;12996:24;:::i;:::-;12987:33;;13042:66;13035:5;13032:77;13029:103;;13112:18;;:::i;:::-;13029:103;13159:1;13152:5;13148:13;13141:20;;12934:233;;;:::o;13173:191::-;13213:3;13232:20;13250:1;13232:20;:::i;:::-;13227:25;;13266:20;13284:1;13266:20;:::i;:::-;13261:25;;13309:1;13306;13302:9;13295:16;;13330:3;13327:1;13324:10;13321:36;;;13337:18;;:::i;:::-;13321:36;13173:191;;;;:::o;13370:177::-;13510:29;13506:1;13498:6;13494:14;13487:53;13370:177;:::o;13553:366::-;13695:3;13716:67;13780:2;13775:3;13716:67;:::i;:::-;13709:74;;13792:93;13881:3;13792:93;:::i;:::-;13910:2;13905:3;13901:12;13894:19;;13553:366;;;:::o;13925:419::-;14091:4;14129:2;14118:9;14114:18;14106:26;;14178:9;14172:4;14168:20;14164:1;14153:9;14149:17;14142:47;14206:131;14332:4;14206:131;:::i;:::-;14198:139;;13925:419;;;:::o;14350:223::-;14490:34;14486:1;14478:6;14474:14;14467:58;14559:6;14554:2;14546:6;14542:15;14535:31;14350:223;:::o;14579:366::-;14721:3;14742:67;14806:2;14801:3;14742:67;:::i;:::-;14735:74;;14818:93;14907:3;14818:93;:::i;:::-;14936:2;14931:3;14927:12;14920:19;;14579:366;;;:::o;14951:419::-;15117:4;15155:2;15144:9;15140:18;15132:26;;15204:9;15198:4;15194:20;15190:1;15179:9;15175:17;15168:47;15232:131;15358:4;15232:131;:::i;:::-;15224:139;;14951:419;;;:::o;15376:221::-;15516:34;15512:1;15504:6;15500:14;15493:58;15585:4;15580:2;15572:6;15568:15;15561:29;15376:221;:::o;15603:366::-;15745:3;15766:67;15830:2;15825:3;15766:67;:::i;:::-;15759:74;;15842:93;15931:3;15842:93;:::i;:::-;15960:2;15955:3;15951:12;15944:19;;15603:366;;;:::o;15975:419::-;16141:4;16179:2;16168:9;16164:18;16156:26;;16228:9;16222:4;16218:20;16214:1;16203:9;16199:17;16192:47;16256:131;16382:4;16256:131;:::i;:::-;16248:139;;15975:419;;;:::o;16400:224::-;16540:34;16536:1;16528:6;16524:14;16517:58;16609:7;16604:2;16596:6;16592:15;16585:32;16400:224;:::o;16630:366::-;16772:3;16793:67;16857:2;16852:3;16793:67;:::i;:::-;16786:74;;16869:93;16958:3;16869:93;:::i;:::-;16987:2;16982:3;16978:12;16971:19;;16630:366;;;:::o;17002:419::-;17168:4;17206:2;17195:9;17191:18;17183:26;;17255:9;17249:4;17245:20;17241:1;17230:9;17226:17;17219:47;17283:131;17409:4;17283:131;:::i;:::-;17275:139;;17002:419;;;:::o;17427:222::-;17567:34;17563:1;17555:6;17551:14;17544:58;17636:5;17631:2;17623:6;17619:15;17612:30;17427:222;:::o;17655:366::-;17797:3;17818:67;17882:2;17877:3;17818:67;:::i;:::-;17811:74;;17894:93;17983:3;17894:93;:::i;:::-;18012:2;18007:3;18003:12;17996:19;;17655:366;;;:::o;18027:419::-;18193:4;18231:2;18220:9;18216:18;18208:26;;18280:9;18274:4;18270:20;18266:1;18255:9;18251:17;18244:47;18308:131;18434:4;18308:131;:::i;:::-;18300:139;;18027:419;;;:::o;18452:235::-;18592:34;18588:1;18580:6;18576:14;18569:58;18661:18;18656:2;18648:6;18644:15;18637:43;18452:235;:::o;18693:366::-;18835:3;18856:67;18920:2;18915:3;18856:67;:::i;:::-;18849:74;;18932:93;19021:3;18932:93;:::i;:::-;19050:2;19045:3;19041:12;19034:19;;18693:366;;;:::o;19065:419::-;19231:4;19269:2;19258:9;19254:18;19246:26;;19318:9;19312:4;19308:20;19304:1;19293:9;19289:17;19282:47;19346:131;19472:4;19346:131;:::i;:::-;19338:139;;19065:419;;;:::o;19490:227::-;19630:34;19626:1;19618:6;19614:14;19607:58;19699:10;19694:2;19686:6;19682:15;19675:35;19490:227;:::o;19723:366::-;19865:3;19886:67;19950:2;19945:3;19886:67;:::i;:::-;19879:74;;19962:93;20051:3;19962:93;:::i;:::-;20080:2;20075:3;20071:12;20064:19;;19723:366;;;:::o;20095:419::-;20261:4;20299:2;20288:9;20284:18;20276:26;;20348:9;20342:4;20338:20;20334:1;20323:9;20319:17;20312:47;20376:131;20502:4;20376:131;:::i;:::-;20368:139;;20095:419;;;:::o;20520:194::-;20560:4;20580:20;20598:1;20580:20;:::i;:::-;20575:25;;20614:20;20632:1;20614:20;:::i;:::-;20609:25;;20658:1;20655;20651:9;20643:17;;20682:1;20676:4;20673:11;20670:37;;;20687:18;;:::i;:::-;20670:37;20520:194;;;;:::o;20720:410::-;20760:7;20783:20;20801:1;20783:20;:::i;:::-;20778:25;;20817:20;20835:1;20817:20;:::i;:::-;20812:25;;20872:1;20869;20865:9;20894:30;20912:11;20894:30;:::i;:::-;20883:41;;21073:1;21064:7;21060:15;21057:1;21054:22;21034:1;21027:9;21007:83;20984:139;;21103:18;;:::i;:::-;20984:139;20768:362;20720:410;;;;:::o;21136:180::-;21184:77;21181:1;21174:88;21281:4;21278:1;21271:15;21305:4;21302:1;21295:15;21322:185;21362:1;21379:20;21397:1;21379:20;:::i;:::-;21374:25;;21413:20;21431:1;21413:20;:::i;:::-;21408:25;;21452:1;21442:35;;21457:18;;:::i;:::-;21442:35;21499:1;21496;21492:9;21487:14;;21322:185;;;;:::o;21513:220::-;21653:34;21649:1;21641:6;21637:14;21630:58;21722:3;21717:2;21709:6;21705:15;21698:28;21513:220;:::o;21739:366::-;21881:3;21902:67;21966:2;21961:3;21902:67;:::i;:::-;21895:74;;21978:93;22067:3;21978:93;:::i;:::-;22096:2;22091:3;22087:12;22080:19;;21739:366;;;:::o;22111:419::-;22277:4;22315:2;22304:9;22300:18;22292:26;;22364:9;22358:4;22354:20;22350:1;22339:9;22335:17;22328:47;22392:131;22518:4;22392:131;:::i;:::-;22384:139;;22111:419;;;:::o;22536:180::-;22584:77;22581:1;22574:88;22681:4;22678:1;22671:15;22705:4;22702:1;22695:15;22722:143;22779:5;22810:6;22804:13;22795:22;;22826:33;22853:5;22826:33;:::i;:::-;22722:143;;;;:::o;22871:351::-;22941:6;22990:2;22978:9;22969:7;22965:23;22961:32;22958:119;;;22996:79;;:::i;:::-;22958:119;23116:1;23141:64;23197:7;23188:6;23177:9;23173:22;23141:64;:::i;:::-;23131:74;;23087:128;22871:351;;;;:::o;23228:85::-;23273:7;23302:5;23291:16;;23228:85;;;:::o;23319:158::-;23377:9;23410:61;23428:42;23437:32;23463:5;23437:32;:::i;:::-;23428:42;:::i;:::-;23410:61;:::i;:::-;23397:74;;23319:158;;;:::o;23483:147::-;23578:45;23617:5;23578:45;:::i;:::-;23573:3;23566:58;23483:147;;:::o;23636:114::-;23703:6;23737:5;23731:12;23721:22;;23636:114;;;:::o;23756:184::-;23855:11;23889:6;23884:3;23877:19;23929:4;23924:3;23920:14;23905:29;;23756:184;;;;:::o;23946:132::-;24013:4;24036:3;24028:11;;24066:4;24061:3;24057:14;24049:22;;23946:132;;;:::o;24084:108::-;24161:24;24179:5;24161:24;:::i;:::-;24156:3;24149:37;24084:108;;:::o;24198:179::-;24267:10;24288:46;24330:3;24322:6;24288:46;:::i;:::-;24366:4;24361:3;24357:14;24343:28;;24198:179;;;;:::o;24383:113::-;24453:4;24485;24480:3;24476:14;24468:22;;24383:113;;;:::o;24532:732::-;24651:3;24680:54;24728:5;24680:54;:::i;:::-;24750:86;24829:6;24824:3;24750:86;:::i;:::-;24743:93;;24860:56;24910:5;24860:56;:::i;:::-;24939:7;24970:1;24955:284;24980:6;24977:1;24974:13;24955:284;;;25056:6;25050:13;25083:63;25142:3;25127:13;25083:63;:::i;:::-;25076:70;;25169:60;25222:6;25169:60;:::i;:::-;25159:70;;25015:224;25002:1;24999;24995:9;24990:14;;24955:284;;;24959:14;25255:3;25248:10;;24656:608;;;24532:732;;;;:::o;25270:831::-;25533:4;25571:3;25560:9;25556:19;25548:27;;25585:71;25653:1;25642:9;25638:17;25629:6;25585:71;:::i;:::-;25666:80;25742:2;25731:9;25727:18;25718:6;25666:80;:::i;:::-;25793:9;25787:4;25783:20;25778:2;25767:9;25763:18;25756:48;25821:108;25924:4;25915:6;25821:108;:::i;:::-;25813:116;;25939:72;26007:2;25996:9;25992:18;25983:6;25939:72;:::i;:::-;26021:73;26089:3;26078:9;26074:19;26065:6;26021:73;:::i;:::-;25270:831;;;;;;;;:::o;26107:483::-;26278:4;26316:2;26305:9;26301:18;26293:26;;26329:71;26397:1;26386:9;26382:17;26373:6;26329:71;:::i;:::-;26447:9;26441:4;26437:20;26432:2;26421:9;26417:18;26410:48;26475:108;26578:4;26569:6;26475:108;:::i;:::-;26467:116;;26107:483;;;;;:::o;26596:807::-;26845:4;26883:3;26872:9;26868:19;26860:27;;26897:71;26965:1;26954:9;26950:17;26941:6;26897:71;:::i;:::-;26978:72;27046:2;27035:9;27031:18;27022:6;26978:72;:::i;:::-;27060:80;27136:2;27125:9;27121:18;27112:6;27060:80;:::i;:::-;27150;27226:2;27215:9;27211:18;27202:6;27150:80;:::i;:::-;27240:73;27308:3;27297:9;27293:19;27284:6;27240:73;:::i;:::-;27323;27391:3;27380:9;27376:19;27367:6;27323:73;:::i;:::-;26596:807;;;;;;;;;:::o;27409:143::-;27466:5;27497:6;27491:13;27482:22;;27513:33;27540:5;27513:33;:::i;:::-;27409:143;;;;:::o;27558:663::-;27646:6;27654;27662;27711:2;27699:9;27690:7;27686:23;27682:32;27679:119;;;27717:79;;:::i;:::-;27679:119;27837:1;27862:64;27918:7;27909:6;27898:9;27894:22;27862:64;:::i;:::-;27852:74;;27808:128;27975:2;28001:64;28057:7;28048:6;28037:9;28033:22;28001:64;:::i;:::-;27991:74;;27946:129;28114:2;28140:64;28196:7;28187:6;28176:9;28172:22;28140:64;:::i;:::-;28130:74;;28085:129;27558:663;;;;;:::o

Swarm Source

ipfs://15c795ae2ce56ebf33441e1d7f10d6fa11a09ec48d093be90bd63ad4feaf1bd1
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.