ETH Price: $3,358.92 (-3.35%)

Token

Tenhance ($TNCE)
 

Overview

Max Total Supply

10,000,000 $TNCE

Holders

12

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
TENHANCE

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-12
*/

// SPDX-License-Identifier: MIT



pragma solidity ^0.8.4;

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 = 0x6292A68901cFaea9E5cebE3bBd6282d56107532e; // owner address
        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 TENHANCE is Context, IERC20, Ownable {
    
    using SafeMath for uint256;
    using Address for address;
    
    string private _name = "Tenhance";
    string private _symbol = "$TNCE"; 

    uint8 private _decimals = 9;

    address payable public marketingWalletAddress = payable(0x871D2963eE5c570F0005451ee08d2f8f2Ba21dB6); // Marketing Address
    address payable public teamWalletAddress = payable(0x41464bbEB39DB86CF15Ac524062A89388BbEF923); // Team Address
    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 _isBlacklisted;

    uint256 public _buyLiquidityFee = 1;
    uint256 public _buyMarketingFee = 3;
    uint256 public _buyTeamFee = 1;

    uint256 public _sellLiquidityFee = 1;
    uint256 public _sellMarketingFee = 3;
    uint256 public _sellTeamFee = 1;
    

    uint256 public _liquidityShare = 3; // original 5
    uint256 public _marketingShare = 9;
    uint256 public _teamShare = 3; // original 12

    uint256 public _totalTaxIfBuying = 5;  // original 12
    uint256 public _totalTaxIfSelling = 5;  // original 12
    uint256 public _totalDistributionShares = 15;  // original 12

    uint256 private _totalSupply = 10000000 * 10**_decimals;
    uint256 public _maxTxAmount = 300000 * 10**_decimals; 
    uint256 public _walletMax = 300000 * 10**_decimals;
    uint256 private minimumTokensBeforeSwap = 1000 * 10**3;

    

    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[teamWalletAddress] = true;
        isExcludedFromFee[address(this)] = true;
        
        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyTeamFee);
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTeamFee);
        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_teamShare);

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

        isMarketPair[address(uniswapPair)] = true;

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

        
    }

    function remoFromBlacklist(address account) external onlyOwner {
        _isBlacklisted[account] = false;
    }

    function addBlakcklist(address[] calldata addresses) external onlyOwner {
        for (uint256 i; i <addresses.length; ++i) {
            _isBlacklisted[addresses[i]] = true;
            
        }   
    }

    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 newTeamTax) external onlyOwner() {
        _buyLiquidityFee = newLiquidityTax;
        _buyMarketingFee = newMarketingTax;
        _buyTeamFee = newTeamTax;

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

    function setSellTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newTeamTax) external onlyOwner() {
        _sellLiquidityFee = newLiquidityTax;
        _sellMarketingFee = newMarketingTax;
        _sellTeamFee = newTeamTax;

        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTeamFee);
    }
      
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount;
    }

    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(!_isBlacklisted[sender] && !_isBlacklisted[recipient], "This address is blacklisted");
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        
        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 _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 totalBNBFee = _totalDistributionShares.sub(_liquidityShare.div(2));
        
        uint256 amountBNBLiquidity = amountReceived.mul(_liquidityShare).div(totalBNBFee).div(2);
        uint256 amountBNBTeam = amountReceived.mul(_teamShare).div(totalBNBFee);
        uint256 amountBNBMarketing = amountReceived.sub(amountBNBLiquidity).sub(amountBNBTeam);

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

        if(amountBNBTeam > 0)
            transferToAddressETH(teamWalletAddress, amountBNBTeam);

        if(amountBNBLiquidity > 0 && tokensForLP > 0)
            addLiquidity(tokensForLP, amountBNBLiquidity);
    }
    
    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":"_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":"_buyTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"_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":"_sellTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_teamShare","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":"addBlakcklist","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":"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":"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":"remoFromBlacklist","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":"newTeamTax","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":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newTeamTax","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":"teamWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"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"}]

60a06040526040518060400160405280600881526020017f54656e68616e6365000000000000000000000000000000000000000000000000815250600190805190602001906200005192919062000ea9565b506040518060400160405280600581526020017f24544e4345000000000000000000000000000000000000000000000000000000815250600290805190602001906200009f92919062000ea9565b506009600360006101000a81548160ff021916908360ff16021790555073871d2963ee5c570f0005451ee08d2f8f2ba21db6600360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507341464bbeb39db86cf15ac524062a89388bbef923600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152506001600c556003600d556001600e556001600f556003601055600160115560036012556009601355600360145560056015556005601655600f601755600360009054906101000a900460ff16600a620001f891906200111a565b6298968062000208919062001257565b601855600360009054906101000a900460ff16600a6200022991906200111a565b620493e062000239919062001257565b601955600360009054906101000a900460ff16600a6200025a91906200111a565b620493e06200026a919062001257565b601a55620f4240601b556001601d60156101000a81548160ff0219169083151502179055506000601d60166101000a81548160ff0219169083151502179055506001601d60176101000a81548160ff021916908315150217905550348015620002d257600080fd5b50736292a68901cfaea9e5cebe3bbd6282d56107532e6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200040257600080fd5b505afa15801562000417573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200043d919062000f70565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620004a057600080fd5b505afa158015620004b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004db919062000f70565b6040518363ffffffff1660e01b8152600401620004fa92919062000fe5565b602060405180830381600087803b1580156200051557600080fd5b505af11580156200052a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000550919062000f70565b601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601854600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600760006200068c62000e1560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000862600e546200084e600d54600c5462000e3e60201b62001bb11790919060201c565b62000e3e60201b62001bb11790919060201c565b601581905550620008a16011546200088d601054600f5462000e3e60201b62001bb11790919060201c565b62000e3e60201b62001bb11790919060201c565b601681905550620008e0601454620008cc60135460125462000e3e60201b62001bb11790919060201c565b62000e3e60201b62001bb11790919060201c565b601781905550600160086000620008fc62000e1560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016009600062000b2962000e1560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506018546005600062000d5762000ea160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000da562000ea160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60185460405162000e06919062001034565b60405180910390a350620013e7565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080828462000e4f919062001062565b90508381101562000e97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e8e9062001012565b60405180910390fd5b8091505092915050565b600033905090565b82805462000eb79062001303565b90600052602060002090601f01602090048101928262000edb576000855562000f27565b82601f1062000ef657805160ff191683800117855562000f27565b8280016001018555821562000f27579182015b8281111562000f2657825182559160200191906001019062000f09565b5b50905062000f36919062000f3a565b5090565b5b8082111562000f5557600081600090555060010162000f3b565b5090565b60008151905062000f6a81620013cd565b92915050565b60006020828403121562000f8357600080fd5b600062000f938482850162000f59565b91505092915050565b62000fa781620012b8565b82525050565b600062000fbc601b8362001051565b915062000fc982620013a4565b602082019050919050565b62000fdf81620012ec565b82525050565b600060408201905062000ffc600083018562000f9c565b6200100b602083018462000f9c565b9392505050565b600060208201905081810360008301526200102d8162000fad565b9050919050565b60006020820190506200104b600083018462000fd4565b92915050565b600082825260208201905092915050565b60006200106f82620012ec565b91506200107c83620012ec565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620010b457620010b362001339565b5b828201905092915050565b6000808291508390505b60018511156200111157808604811115620010e957620010e862001339565b5b6001851615620010f95780820291505b8081029050620011098562001397565b9450620010c9565b94509492505050565b60006200112782620012ec565b91506200113483620012f6565b9250620011637fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200116b565b905092915050565b6000826200117d576001905062001250565b816200118d576000905062001250565b8160018114620011a65760028114620011b157620011e7565b600191505062001250565b60ff841115620011c657620011c562001339565b5b8360020a915084821115620011e057620011df62001339565b5b5062001250565b5060208310610133831016604e8410600b8410161715620012215782820a9050838111156200121b576200121a62001339565b5b62001250565b620012308484846001620010bf565b925090508184048111156200124a576200124962001339565b5b81810290505b9392505050565b60006200126482620012ec565b91506200127183620012ec565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620012ad57620012ac62001339565b5b828202905092915050565b6000620012c582620012cc565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600060028204905060018216806200131c57607f821691505b6020821081141562001333576200133262001368565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60008160011c9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b620013d881620012b8565b8114620013e457600080fd5b50565b60805160601c61405b6200140d600039600081816111e3015261120f015261405b6000f3fe6080604052600436106102e85760003560e01c806388790a6811610190578063c8607952116100dc578063dd62ed3e11610095578063f1d5f5171161006f578063f1d5f51714610b91578063f473fc3914610bba578063f84ba65d14610be3578063f872858a14610c0c576102ef565b8063dd62ed3e14610b00578063ec28438a14610b3d578063f0cd1dac14610b66576102ef565b8063c8607952146109ec578063c867d60b14610a17578063cab0347114610a54578063d158272d14610a7f578063da00097d14610aaa578063dc44b6a014610ad5576102ef565b8063a457c2d711610149578063c469b6dd11610123578063c469b6dd14610942578063c49b9a801461096d578063c5d2418914610996578063c816841b146109c1576102ef565b8063a457c2d71461089d578063a83f53a7146108da578063a9059cbb14610905576102ef565b806388790a68146107895780638b42507f146107b45780638da5cb5b146107f157806395d89b411461081c578063a073d37f14610847578063a08e671f14610872576102ef565b80632b112e491161024f57806357a5802f11610208578063715018a6116101e2578063715018a6146106f15780637d1db4a514610708578063807c2d9c1461073357806382eefb431461075e576102ef565b806357a5802f1461065e57806361a23c691461068957806370a08231146106b4576102ef565b80632b112e4914610526578063313ce56714610551578063395093511461057c5780633ecad271146105b95780634a74bb02146105f65780635342acb414610621576102ef565b80631870517a116102a15780631870517a146104065780631cdd3be31461042f5780631e18c3cd1461046c5780632198cf6c1461049557806323b872dd146104be57806327c8f835146104fb576102ef565b806306fdde03146102f4578063087332141461031f578063095ea7b3146103485780631245e347146103855780631694505e146103b057806318160ddd146103db576102ef565b366102ef57005b600080fd5b34801561030057600080fd5b50610309610c37565b604051610316919061377a565b60405180910390f35b34801561032b57600080fd5b506103466004803603810190610341919061338a565b610cc9565b005b34801561035457600080fd5b5061036f600480360381019061036a91906132b7565b610d90565b60405161037c9190613744565b60405180910390f35b34801561039157600080fd5b5061039a610dae565b6040516103a791906136c8565b60405180910390f35b3480156103bc57600080fd5b506103c5610dd4565b6040516103d2919061375f565b60405180910390f35b3480156103e757600080fd5b506103f0610dfa565b6040516103fd91906138dc565b60405180910390f35b34801561041257600080fd5b5061042d6004803603810190610428919061338a565b610e04565b005b34801561043b57600080fd5b506104566004803603810190610451919061319e565b610ecb565b6040516104639190613744565b60405180910390f35b34801561047857600080fd5b50610493600480360381019061048e91906132f3565b610eeb565b005b3480156104a157600080fd5b506104bc60048036038101906104b7919061327b565b611030565b005b3480156104ca57600080fd5b506104e560048036038101906104e0919061322c565b611107565b6040516104f29190613744565b60405180910390f35b34801561050757600080fd5b506105106111e1565b60405161051d91906136ad565b60405180910390f35b34801561053257600080fd5b5061053b611205565b60405161054891906138dc565b60405180910390f35b34801561055d57600080fd5b50610566611249565b6040516105739190613981565b60405180910390f35b34801561058857600080fd5b506105a3600480360381019061059e91906132b7565b611260565b6040516105b09190613744565b60405180910390f35b3480156105c557600080fd5b506105e060048036038101906105db919061319e565b611313565b6040516105ed9190613744565b60405180910390f35b34801561060257600080fd5b5061060b611333565b6040516106189190613744565b60405180910390f35b34801561062d57600080fd5b506106486004803603810190610643919061319e565b611346565b6040516106559190613744565b60405180910390f35b34801561066a57600080fd5b50610673611366565b60405161068091906138dc565b60405180910390f35b34801561069557600080fd5b5061069e61136c565b6040516106ab91906138dc565b60405180910390f35b3480156106c057600080fd5b506106db60048036038101906106d6919061319e565b611372565b6040516106e891906138dc565b60405180910390f35b3480156106fd57600080fd5b506107066113bb565b005b34801561071457600080fd5b5061071d6114f5565b60405161072a91906138dc565b60405180910390f35b34801561073f57600080fd5b506107486114fb565b60405161075591906138dc565b60405180910390f35b34801561076a57600080fd5b50610773611501565b60405161078091906138dc565b60405180910390f35b34801561079557600080fd5b5061079e611507565b6040516107ab91906138dc565b60405180910390f35b3480156107c057600080fd5b506107db60048036038101906107d6919061319e565b61150d565b6040516107e89190613744565b60405180910390f35b3480156107fd57600080fd5b5061080661152d565b60405161081391906136ad565b60405180910390f35b34801561082857600080fd5b50610831611556565b60405161083e919061377a565b60405180910390f35b34801561085357600080fd5b5061085c6115e8565b60405161086991906138dc565b60405180910390f35b34801561087e57600080fd5b506108876115f2565b60405161089491906138dc565b60405180910390f35b3480156108a957600080fd5b506108c460048036038101906108bf91906132b7565b6115f8565b6040516108d19190613744565b60405180910390f35b3480156108e657600080fd5b506108ef6116c5565b6040516108fc91906138dc565b60405180910390f35b34801561091157600080fd5b5061092c600480360381019061092791906132b7565b6116cb565b6040516109399190613744565b60405180910390f35b34801561094e57600080fd5b506109576116ea565b60405161096491906138dc565b60405180910390f35b34801561097957600080fd5b50610994600480360381019061098f9190613338565b6116f0565b005b3480156109a257600080fd5b506109ab6117c0565b6040516109b891906138dc565b60405180910390f35b3480156109cd57600080fd5b506109d66117c6565b6040516109e391906136ad565b60405180910390f35b3480156109f857600080fd5b50610a016117ec565b604051610a0e91906138dc565b60405180910390f35b348015610a2357600080fd5b50610a3e6004803603810190610a39919061319e565b6117f2565b604051610a4b9190613744565b60405180910390f35b348015610a6057600080fd5b50610a69611812565b604051610a7691906138dc565b60405180910390f35b348015610a8b57600080fd5b50610a94611818565b604051610aa191906136c8565b60405180910390f35b348015610ab657600080fd5b50610abf61183e565b604051610acc9190613744565b60405180910390f35b348015610ae157600080fd5b50610aea611851565b604051610af791906138dc565b60405180910390f35b348015610b0c57600080fd5b50610b276004803603810190610b2291906131f0565b611857565b604051610b3491906138dc565b60405180910390f35b348015610b4957600080fd5b50610b646004803603810190610b5f9190613361565b6118de565b005b348015610b7257600080fd5b50610b7b611964565b604051610b8891906138dc565b60405180910390f35b348015610b9d57600080fd5b50610bb86004803603810190610bb39190613361565b61196a565b005b348015610bc657600080fd5b50610be16004803603810190610bdc919061319e565b6119f0565b005b348015610bef57600080fd5b50610c0a6004803603810190610c05919061327b565b611ac7565b005b348015610c1857600080fd5b50610c21611b9e565b604051610c2e9190613744565b60405180910390f35b606060018054610c4690613bd6565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7290613bd6565b8015610cbf5780601f10610c9457610100808354040283529160200191610cbf565b820191906000526020600020905b815481529060010190602001808311610ca257829003601f168201915b5050505050905090565b610cd1611c0f565b73ffffffffffffffffffffffffffffffffffffffff16610cef61152d565b73ffffffffffffffffffffffffffffffffffffffff1614610d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3c9061385c565b60405180910390fd5b82600f819055508160108190555080601181905550610d85601154610d77601054600f54611bb190919063ffffffff16565b611bb190919063ffffffff16565b601681905550505050565b6000610da4610d9d611c0f565b8484611c17565b6001905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601854905090565b610e0c611c0f565b73ffffffffffffffffffffffffffffffffffffffff16610e2a61152d565b73ffffffffffffffffffffffffffffffffffffffff1614610e80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e779061385c565b60405180910390fd5b82600c8190555081600d8190555080600e81905550610ec0600e54610eb2600d54600c54611bb190919063ffffffff16565b611bb190919063ffffffff16565b601581905550505050565b600b6020528060005260406000206000915054906101000a900460ff1681565b610ef3611c0f565b73ffffffffffffffffffffffffffffffffffffffff16610f1161152d565b73ffffffffffffffffffffffffffffffffffffffff1614610f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5e9061385c565b60405180910390fd5b60005b8282905081101561102b576001600b6000858585818110610fb4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190610fc9919061319e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508061102490613c08565b9050610f6a565b505050565b611038611c0f565b73ffffffffffffffffffffffffffffffffffffffff1661105661152d565b73ffffffffffffffffffffffffffffffffffffffff16146110ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a39061385c565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611114848484611de2565b506111d684611121611c0f565b6111d185604051806060016040528060288152602001613fd960289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611187611c0f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124ee9092919063ffffffff16565b611c17565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006112446112337f0000000000000000000000000000000000000000000000000000000000000000611372565b60185461255290919063ffffffff16565b905090565b6000600360009054906101000a900460ff16905090565b600061130961126d611c0f565b84611304856006600061127e611c0f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bb190919063ffffffff16565b611c17565b6001905092915050565b600a6020528060005260406000206000915054906101000a900460ff1681565b601d60159054906101000a900460ff1681565b60076020528060005260406000206000915054906101000a900460ff1681565b60125481565b60135481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113c3611c0f565b73ffffffffffffffffffffffffffffffffffffffff166113e161152d565b73ffffffffffffffffffffffffffffffffffffffff1614611437576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142e9061385c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60195481565b601a5481565b60165481565b600f5481565b60096020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461156590613bd6565b80601f016020809104026020016040519081016040528092919081815260200182805461159190613bd6565b80156115de5780601f106115b3576101008083540402835291602001916115de565b820191906000526020600020905b8154815290600101906020018083116115c157829003601f168201915b5050505050905090565b6000601b54905090565b60175481565b60006116bb611605611c0f565b846116b685604051806060016040528060258152602001614001602591396006600061162f611c0f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124ee9092919063ffffffff16565b611c17565b6001905092915050565b60145481565b60006116df6116d8611c0f565b8484611de2565b506001905092915050565b600e5481565b6116f8611c0f565b73ffffffffffffffffffffffffffffffffffffffff1661171661152d565b73ffffffffffffffffffffffffffffffffffffffff161461176c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117639061385c565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516117b59190613744565b60405180910390a150565b600d5481565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b60086020528060005260406000206000915054906101000a900460ff1681565b60115481565b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d60169054906101000a900460ff1681565b600c5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6118e6611c0f565b73ffffffffffffffffffffffffffffffffffffffff1661190461152d565b73ffffffffffffffffffffffffffffffffffffffff161461195a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119519061385c565b60405180910390fd5b8060198190555050565b60155481565b611972611c0f565b73ffffffffffffffffffffffffffffffffffffffff1661199061152d565b73ffffffffffffffffffffffffffffffffffffffff16146119e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119dd9061385c565b60405180910390fd5b80601a8190555050565b6119f8611c0f565b73ffffffffffffffffffffffffffffffffffffffff16611a1661152d565b73ffffffffffffffffffffffffffffffffffffffff1614611a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a639061385c565b60405180910390fd5b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611acf611c0f565b73ffffffffffffffffffffffffffffffffffffffff16611aed61152d565b73ffffffffffffffffffffffffffffffffffffffff1614611b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3a9061385c565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601d60179054906101000a900460ff1681565b6000808284611bc091906139f1565b905083811015611c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfc906137dc565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7e906138bc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cee906137bc565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611dd591906138dc565b60405180910390a3505050565b6000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611e885750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611ec7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebe906137fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2e9061389c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9e9061379c565b60405180910390fd5b60008211611fea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe19061387c565b60405180910390fd5b601d60149054906101000a900460ff16156120115761200a84848461259c565b90506124e7565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120b55750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612100576019548211156120ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f69061381c565b60405180910390fd5b5b600061210b30611372565b90506000601b5482101590508080156121315750601d60149054906101000a900460ff16155b80156121875750600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561219f5750601d60159054906101000a900460ff165b156121c957601d60169054906101000a900460ff16156121bf57601b5491505b6121c88261276f565b5b612252846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124ee9092919063ffffffff16565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123385750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61234c57612347878787612960565b61234e565b845b9050601d60179054906101000a900460ff1680156123b65750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123e557601a546123d9826123cb89611372565b611bb190919063ffffffff16565b11156123e457600080fd5b5b61243781600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bb190919063ffffffff16565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516124d791906138dc565b60405180910390a3600193505050505b9392505050565b6000838311158290612536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252d919061377a565b60405180910390fd5b50600083856125459190613ad2565b9050809150509392505050565b600061259483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506124ee565b905092915050565b6000612627826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124ee9092919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506126bc82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bb190919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161275c91906138dc565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff02191690831515021790555060006127c860026127ba6017546127ac60125487612b8790919063ffffffff16565b612c0290919063ffffffff16565b612c0290919063ffffffff16565b905060006127df828461255290919063ffffffff16565b90506127ea81612c4c565b6000479050600061281b61280a6002601254612c0290919063ffffffff16565b60175461255290919063ffffffff16565b90506000612859600261284b8461283d60125488612b8790919063ffffffff16565b612c0290919063ffffffff16565b612c0290919063ffffffff16565b905060006128848361287660145487612b8790919063ffffffff16565b612c0290919063ffffffff16565b905060006128ad8261289f858861255290919063ffffffff16565b61255290919063ffffffff16565b905060008111156128e5576128e4600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612f49565b5b600082111561291b5761291a600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612f49565b5b60008311801561292b5750600087115b1561293b5761293a8784612f94565b5b505050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156129e8576129e160646129d360155486612b8790919063ffffffff16565b612c0290919063ffffffff16565b9050612a66565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612a6557612a626064612a5460165486612b8790919063ffffffff16565b612c0290919063ffffffff16565b90505b5b6000811115612b6a57612ac181600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bb190919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612b6191906138dc565b60405180910390a35b612b7d818461255290919063ffffffff16565b9150509392505050565b600080831415612b9a5760009050612bfc565b60008284612ba89190613a78565b9050828482612bb79190613a47565b14612bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bee9061383c565b60405180910390fd5b809150505b92915050565b6000612c4483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613088565b905092915050565b6000600267ffffffffffffffff811115612c8f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612cbd5781602001602082028036833780820191505090505b5090503081600081518110612cfb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612d9d57600080fd5b505afa158015612db1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd591906131c7565b81600181518110612e0f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612e7630601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611c17565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612eda959493929190613927565b600060405180830381600087803b158015612ef457600080fd5b505af1158015612f08573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612f3d9291906138f7565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612f8f573d6000803e3d6000fd5b505050565b612fc130601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611c17565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061300d61152d565b426040518863ffffffff1660e01b815260040161302f969594939291906136e3565b6060604051808303818588803b15801561304857600080fd5b505af115801561305c573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061308191906133d9565b5050505050565b600080831182906130cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c6919061377a565b60405180910390fd5b50600083856130de9190613a47565b9050809150509392505050565b6000813590506130fa81613f93565b92915050565b60008151905061310f81613f93565b92915050565b60008083601f84011261312757600080fd5b8235905067ffffffffffffffff81111561314057600080fd5b60208301915083602082028301111561315857600080fd5b9250929050565b60008135905061316e81613faa565b92915050565b60008135905061318381613fc1565b92915050565b60008151905061319881613fc1565b92915050565b6000602082840312156131b057600080fd5b60006131be848285016130eb565b91505092915050565b6000602082840312156131d957600080fd5b60006131e784828501613100565b91505092915050565b6000806040838503121561320357600080fd5b6000613211858286016130eb565b9250506020613222858286016130eb565b9150509250929050565b60008060006060848603121561324157600080fd5b600061324f868287016130eb565b9350506020613260868287016130eb565b925050604061327186828701613174565b9150509250925092565b6000806040838503121561328e57600080fd5b600061329c858286016130eb565b92505060206132ad8582860161315f565b9150509250929050565b600080604083850312156132ca57600080fd5b60006132d8858286016130eb565b92505060206132e985828601613174565b9150509250929050565b6000806020838503121561330657600080fd5b600083013567ffffffffffffffff81111561332057600080fd5b61332c85828601613115565b92509250509250929050565b60006020828403121561334a57600080fd5b60006133588482850161315f565b91505092915050565b60006020828403121561337357600080fd5b600061338184828501613174565b91505092915050565b60008060006060848603121561339f57600080fd5b60006133ad86828701613174565b93505060206133be86828701613174565b92505060406133cf86828701613174565b9150509250925092565b6000806000606084860312156133ee57600080fd5b60006133fc86828701613189565b935050602061340d86828701613189565b925050604061341e86828701613189565b9150509250925092565b6000613434838361344f565b60208301905092915050565b61344981613b18565b82525050565b61345881613b06565b82525050565b61346781613b06565b82525050565b6000613478826139ac565b61348281856139cf565b935061348d8361399c565b8060005b838110156134be5781516134a58882613428565b97506134b0836139c2565b925050600181019050613491565b5085935050505092915050565b6134d481613b2a565b82525050565b6134e381613b6d565b82525050565b6134f281613b91565b82525050565b6000613503826139b7565b61350d81856139e0565b935061351d818560208601613ba3565b61352681613cde565b840191505092915050565b600061353e6023836139e0565b915061354982613cef565b604082019050919050565b60006135616022836139e0565b915061356c82613d3e565b604082019050919050565b6000613584601b836139e0565b915061358f82613d8d565b602082019050919050565b60006135a7601b836139e0565b91506135b282613db6565b602082019050919050565b60006135ca6028836139e0565b91506135d582613ddf565b604082019050919050565b60006135ed6021836139e0565b91506135f882613e2e565b604082019050919050565b60006136106020836139e0565b915061361b82613e7d565b602082019050919050565b60006136336029836139e0565b915061363e82613ea6565b604082019050919050565b60006136566025836139e0565b915061366182613ef5565b604082019050919050565b60006136796024836139e0565b915061368482613f44565b604082019050919050565b61369881613b56565b82525050565b6136a781613b60565b82525050565b60006020820190506136c2600083018461345e565b92915050565b60006020820190506136dd6000830184613440565b92915050565b600060c0820190506136f8600083018961345e565b613705602083018861368f565b61371260408301876134e9565b61371f60608301866134e9565b61372c608083018561345e565b61373960a083018461368f565b979650505050505050565b600060208201905061375960008301846134cb565b92915050565b600060208201905061377460008301846134da565b92915050565b6000602082019050818103600083015261379481846134f8565b905092915050565b600060208201905081810360008301526137b581613531565b9050919050565b600060208201905081810360008301526137d581613554565b9050919050565b600060208201905081810360008301526137f581613577565b9050919050565b600060208201905081810360008301526138158161359a565b9050919050565b60006020820190508181036000830152613835816135bd565b9050919050565b60006020820190508181036000830152613855816135e0565b9050919050565b6000602082019050818103600083015261387581613603565b9050919050565b6000602082019050818103600083015261389581613626565b9050919050565b600060208201905081810360008301526138b581613649565b9050919050565b600060208201905081810360008301526138d58161366c565b9050919050565b60006020820190506138f1600083018461368f565b92915050565b600060408201905061390c600083018561368f565b818103602083015261391e818461346d565b90509392505050565b600060a08201905061393c600083018861368f565b61394960208301876134e9565b818103604083015261395b818661346d565b905061396a606083018561345e565b613977608083018461368f565b9695505050505050565b6000602082019050613996600083018461369e565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006139fc82613b56565b9150613a0783613b56565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613a3c57613a3b613c51565b5b828201905092915050565b6000613a5282613b56565b9150613a5d83613b56565b925082613a6d57613a6c613c80565b5b828204905092915050565b6000613a8382613b56565b9150613a8e83613b56565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613ac757613ac6613c51565b5b828202905092915050565b6000613add82613b56565b9150613ae883613b56565b925082821015613afb57613afa613c51565b5b828203905092915050565b6000613b1182613b36565b9050919050565b6000613b2382613b36565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000613b7882613b7f565b9050919050565b6000613b8a82613b36565b9050919050565b6000613b9c82613b56565b9050919050565b60005b83811015613bc1578082015181840152602081019050613ba6565b83811115613bd0576000848401525b50505050565b60006002820490506001821680613bee57607f821691505b60208210811415613c0257613c01613caf565b5b50919050565b6000613c1382613b56565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c4657613c45613c51565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f54686973206164647265737320697320626c61636b6c69737465640000000000600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b613f9c81613b06565b8114613fa757600080fd5b50565b613fb381613b2a565b8114613fbe57600080fd5b50565b613fca81613b56565b8114613fd557600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204d14caf765e716c834fc5ce5b292319c5604a32454bde8d676846702436e1e8864736f6c63430008040033

Deployed Bytecode

0x6080604052600436106102e85760003560e01c806388790a6811610190578063c8607952116100dc578063dd62ed3e11610095578063f1d5f5171161006f578063f1d5f51714610b91578063f473fc3914610bba578063f84ba65d14610be3578063f872858a14610c0c576102ef565b8063dd62ed3e14610b00578063ec28438a14610b3d578063f0cd1dac14610b66576102ef565b8063c8607952146109ec578063c867d60b14610a17578063cab0347114610a54578063d158272d14610a7f578063da00097d14610aaa578063dc44b6a014610ad5576102ef565b8063a457c2d711610149578063c469b6dd11610123578063c469b6dd14610942578063c49b9a801461096d578063c5d2418914610996578063c816841b146109c1576102ef565b8063a457c2d71461089d578063a83f53a7146108da578063a9059cbb14610905576102ef565b806388790a68146107895780638b42507f146107b45780638da5cb5b146107f157806395d89b411461081c578063a073d37f14610847578063a08e671f14610872576102ef565b80632b112e491161024f57806357a5802f11610208578063715018a6116101e2578063715018a6146106f15780637d1db4a514610708578063807c2d9c1461073357806382eefb431461075e576102ef565b806357a5802f1461065e57806361a23c691461068957806370a08231146106b4576102ef565b80632b112e4914610526578063313ce56714610551578063395093511461057c5780633ecad271146105b95780634a74bb02146105f65780635342acb414610621576102ef565b80631870517a116102a15780631870517a146104065780631cdd3be31461042f5780631e18c3cd1461046c5780632198cf6c1461049557806323b872dd146104be57806327c8f835146104fb576102ef565b806306fdde03146102f4578063087332141461031f578063095ea7b3146103485780631245e347146103855780631694505e146103b057806318160ddd146103db576102ef565b366102ef57005b600080fd5b34801561030057600080fd5b50610309610c37565b604051610316919061377a565b60405180910390f35b34801561032b57600080fd5b506103466004803603810190610341919061338a565b610cc9565b005b34801561035457600080fd5b5061036f600480360381019061036a91906132b7565b610d90565b60405161037c9190613744565b60405180910390f35b34801561039157600080fd5b5061039a610dae565b6040516103a791906136c8565b60405180910390f35b3480156103bc57600080fd5b506103c5610dd4565b6040516103d2919061375f565b60405180910390f35b3480156103e757600080fd5b506103f0610dfa565b6040516103fd91906138dc565b60405180910390f35b34801561041257600080fd5b5061042d6004803603810190610428919061338a565b610e04565b005b34801561043b57600080fd5b506104566004803603810190610451919061319e565b610ecb565b6040516104639190613744565b60405180910390f35b34801561047857600080fd5b50610493600480360381019061048e91906132f3565b610eeb565b005b3480156104a157600080fd5b506104bc60048036038101906104b7919061327b565b611030565b005b3480156104ca57600080fd5b506104e560048036038101906104e0919061322c565b611107565b6040516104f29190613744565b60405180910390f35b34801561050757600080fd5b506105106111e1565b60405161051d91906136ad565b60405180910390f35b34801561053257600080fd5b5061053b611205565b60405161054891906138dc565b60405180910390f35b34801561055d57600080fd5b50610566611249565b6040516105739190613981565b60405180910390f35b34801561058857600080fd5b506105a3600480360381019061059e91906132b7565b611260565b6040516105b09190613744565b60405180910390f35b3480156105c557600080fd5b506105e060048036038101906105db919061319e565b611313565b6040516105ed9190613744565b60405180910390f35b34801561060257600080fd5b5061060b611333565b6040516106189190613744565b60405180910390f35b34801561062d57600080fd5b506106486004803603810190610643919061319e565b611346565b6040516106559190613744565b60405180910390f35b34801561066a57600080fd5b50610673611366565b60405161068091906138dc565b60405180910390f35b34801561069557600080fd5b5061069e61136c565b6040516106ab91906138dc565b60405180910390f35b3480156106c057600080fd5b506106db60048036038101906106d6919061319e565b611372565b6040516106e891906138dc565b60405180910390f35b3480156106fd57600080fd5b506107066113bb565b005b34801561071457600080fd5b5061071d6114f5565b60405161072a91906138dc565b60405180910390f35b34801561073f57600080fd5b506107486114fb565b60405161075591906138dc565b60405180910390f35b34801561076a57600080fd5b50610773611501565b60405161078091906138dc565b60405180910390f35b34801561079557600080fd5b5061079e611507565b6040516107ab91906138dc565b60405180910390f35b3480156107c057600080fd5b506107db60048036038101906107d6919061319e565b61150d565b6040516107e89190613744565b60405180910390f35b3480156107fd57600080fd5b5061080661152d565b60405161081391906136ad565b60405180910390f35b34801561082857600080fd5b50610831611556565b60405161083e919061377a565b60405180910390f35b34801561085357600080fd5b5061085c6115e8565b60405161086991906138dc565b60405180910390f35b34801561087e57600080fd5b506108876115f2565b60405161089491906138dc565b60405180910390f35b3480156108a957600080fd5b506108c460048036038101906108bf91906132b7565b6115f8565b6040516108d19190613744565b60405180910390f35b3480156108e657600080fd5b506108ef6116c5565b6040516108fc91906138dc565b60405180910390f35b34801561091157600080fd5b5061092c600480360381019061092791906132b7565b6116cb565b6040516109399190613744565b60405180910390f35b34801561094e57600080fd5b506109576116ea565b60405161096491906138dc565b60405180910390f35b34801561097957600080fd5b50610994600480360381019061098f9190613338565b6116f0565b005b3480156109a257600080fd5b506109ab6117c0565b6040516109b891906138dc565b60405180910390f35b3480156109cd57600080fd5b506109d66117c6565b6040516109e391906136ad565b60405180910390f35b3480156109f857600080fd5b50610a016117ec565b604051610a0e91906138dc565b60405180910390f35b348015610a2357600080fd5b50610a3e6004803603810190610a39919061319e565b6117f2565b604051610a4b9190613744565b60405180910390f35b348015610a6057600080fd5b50610a69611812565b604051610a7691906138dc565b60405180910390f35b348015610a8b57600080fd5b50610a94611818565b604051610aa191906136c8565b60405180910390f35b348015610ab657600080fd5b50610abf61183e565b604051610acc9190613744565b60405180910390f35b348015610ae157600080fd5b50610aea611851565b604051610af791906138dc565b60405180910390f35b348015610b0c57600080fd5b50610b276004803603810190610b2291906131f0565b611857565b604051610b3491906138dc565b60405180910390f35b348015610b4957600080fd5b50610b646004803603810190610b5f9190613361565b6118de565b005b348015610b7257600080fd5b50610b7b611964565b604051610b8891906138dc565b60405180910390f35b348015610b9d57600080fd5b50610bb86004803603810190610bb39190613361565b61196a565b005b348015610bc657600080fd5b50610be16004803603810190610bdc919061319e565b6119f0565b005b348015610bef57600080fd5b50610c0a6004803603810190610c05919061327b565b611ac7565b005b348015610c1857600080fd5b50610c21611b9e565b604051610c2e9190613744565b60405180910390f35b606060018054610c4690613bd6565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7290613bd6565b8015610cbf5780601f10610c9457610100808354040283529160200191610cbf565b820191906000526020600020905b815481529060010190602001808311610ca257829003601f168201915b5050505050905090565b610cd1611c0f565b73ffffffffffffffffffffffffffffffffffffffff16610cef61152d565b73ffffffffffffffffffffffffffffffffffffffff1614610d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3c9061385c565b60405180910390fd5b82600f819055508160108190555080601181905550610d85601154610d77601054600f54611bb190919063ffffffff16565b611bb190919063ffffffff16565b601681905550505050565b6000610da4610d9d611c0f565b8484611c17565b6001905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601854905090565b610e0c611c0f565b73ffffffffffffffffffffffffffffffffffffffff16610e2a61152d565b73ffffffffffffffffffffffffffffffffffffffff1614610e80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e779061385c565b60405180910390fd5b82600c8190555081600d8190555080600e81905550610ec0600e54610eb2600d54600c54611bb190919063ffffffff16565b611bb190919063ffffffff16565b601581905550505050565b600b6020528060005260406000206000915054906101000a900460ff1681565b610ef3611c0f565b73ffffffffffffffffffffffffffffffffffffffff16610f1161152d565b73ffffffffffffffffffffffffffffffffffffffff1614610f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5e9061385c565b60405180910390fd5b60005b8282905081101561102b576001600b6000858585818110610fb4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190610fc9919061319e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508061102490613c08565b9050610f6a565b505050565b611038611c0f565b73ffffffffffffffffffffffffffffffffffffffff1661105661152d565b73ffffffffffffffffffffffffffffffffffffffff16146110ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a39061385c565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611114848484611de2565b506111d684611121611c0f565b6111d185604051806060016040528060288152602001613fd960289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611187611c0f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124ee9092919063ffffffff16565b611c17565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b60006112446112337f000000000000000000000000000000000000000000000000000000000000dead611372565b60185461255290919063ffffffff16565b905090565b6000600360009054906101000a900460ff16905090565b600061130961126d611c0f565b84611304856006600061127e611c0f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bb190919063ffffffff16565b611c17565b6001905092915050565b600a6020528060005260406000206000915054906101000a900460ff1681565b601d60159054906101000a900460ff1681565b60076020528060005260406000206000915054906101000a900460ff1681565b60125481565b60135481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113c3611c0f565b73ffffffffffffffffffffffffffffffffffffffff166113e161152d565b73ffffffffffffffffffffffffffffffffffffffff1614611437576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142e9061385c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60195481565b601a5481565b60165481565b600f5481565b60096020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461156590613bd6565b80601f016020809104026020016040519081016040528092919081815260200182805461159190613bd6565b80156115de5780601f106115b3576101008083540402835291602001916115de565b820191906000526020600020905b8154815290600101906020018083116115c157829003601f168201915b5050505050905090565b6000601b54905090565b60175481565b60006116bb611605611c0f565b846116b685604051806060016040528060258152602001614001602591396006600061162f611c0f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124ee9092919063ffffffff16565b611c17565b6001905092915050565b60145481565b60006116df6116d8611c0f565b8484611de2565b506001905092915050565b600e5481565b6116f8611c0f565b73ffffffffffffffffffffffffffffffffffffffff1661171661152d565b73ffffffffffffffffffffffffffffffffffffffff161461176c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117639061385c565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516117b59190613744565b60405180910390a150565b600d5481565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b60086020528060005260406000206000915054906101000a900460ff1681565b60115481565b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d60169054906101000a900460ff1681565b600c5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6118e6611c0f565b73ffffffffffffffffffffffffffffffffffffffff1661190461152d565b73ffffffffffffffffffffffffffffffffffffffff161461195a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119519061385c565b60405180910390fd5b8060198190555050565b60155481565b611972611c0f565b73ffffffffffffffffffffffffffffffffffffffff1661199061152d565b73ffffffffffffffffffffffffffffffffffffffff16146119e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119dd9061385c565b60405180910390fd5b80601a8190555050565b6119f8611c0f565b73ffffffffffffffffffffffffffffffffffffffff16611a1661152d565b73ffffffffffffffffffffffffffffffffffffffff1614611a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a639061385c565b60405180910390fd5b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611acf611c0f565b73ffffffffffffffffffffffffffffffffffffffff16611aed61152d565b73ffffffffffffffffffffffffffffffffffffffff1614611b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3a9061385c565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601d60179054906101000a900460ff1681565b6000808284611bc091906139f1565b905083811015611c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfc906137dc565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7e906138bc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cee906137bc565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611dd591906138dc565b60405180910390a3505050565b6000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611e885750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611ec7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebe906137fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2e9061389c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9e9061379c565b60405180910390fd5b60008211611fea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe19061387c565b60405180910390fd5b601d60149054906101000a900460ff16156120115761200a84848461259c565b90506124e7565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120b55750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612100576019548211156120ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f69061381c565b60405180910390fd5b5b600061210b30611372565b90506000601b5482101590508080156121315750601d60149054906101000a900460ff16155b80156121875750600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561219f5750601d60159054906101000a900460ff165b156121c957601d60169054906101000a900460ff16156121bf57601b5491505b6121c88261276f565b5b612252846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124ee9092919063ffffffff16565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123385750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61234c57612347878787612960565b61234e565b845b9050601d60179054906101000a900460ff1680156123b65750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123e557601a546123d9826123cb89611372565b611bb190919063ffffffff16565b11156123e457600080fd5b5b61243781600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bb190919063ffffffff16565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516124d791906138dc565b60405180910390a3600193505050505b9392505050565b6000838311158290612536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252d919061377a565b60405180910390fd5b50600083856125459190613ad2565b9050809150509392505050565b600061259483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506124ee565b905092915050565b6000612627826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124ee9092919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506126bc82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bb190919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161275c91906138dc565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff02191690831515021790555060006127c860026127ba6017546127ac60125487612b8790919063ffffffff16565b612c0290919063ffffffff16565b612c0290919063ffffffff16565b905060006127df828461255290919063ffffffff16565b90506127ea81612c4c565b6000479050600061281b61280a6002601254612c0290919063ffffffff16565b60175461255290919063ffffffff16565b90506000612859600261284b8461283d60125488612b8790919063ffffffff16565b612c0290919063ffffffff16565b612c0290919063ffffffff16565b905060006128848361287660145487612b8790919063ffffffff16565b612c0290919063ffffffff16565b905060006128ad8261289f858861255290919063ffffffff16565b61255290919063ffffffff16565b905060008111156128e5576128e4600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612f49565b5b600082111561291b5761291a600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612f49565b5b60008311801561292b5750600087115b1561293b5761293a8784612f94565b5b505050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156129e8576129e160646129d360155486612b8790919063ffffffff16565b612c0290919063ffffffff16565b9050612a66565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612a6557612a626064612a5460165486612b8790919063ffffffff16565b612c0290919063ffffffff16565b90505b5b6000811115612b6a57612ac181600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bb190919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612b6191906138dc565b60405180910390a35b612b7d818461255290919063ffffffff16565b9150509392505050565b600080831415612b9a5760009050612bfc565b60008284612ba89190613a78565b9050828482612bb79190613a47565b14612bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bee9061383c565b60405180910390fd5b809150505b92915050565b6000612c4483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613088565b905092915050565b6000600267ffffffffffffffff811115612c8f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612cbd5781602001602082028036833780820191505090505b5090503081600081518110612cfb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612d9d57600080fd5b505afa158015612db1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd591906131c7565b81600181518110612e0f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612e7630601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611c17565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612eda959493929190613927565b600060405180830381600087803b158015612ef457600080fd5b505af1158015612f08573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612f3d9291906138f7565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612f8f573d6000803e3d6000fd5b505050565b612fc130601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611c17565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061300d61152d565b426040518863ffffffff1660e01b815260040161302f969594939291906136e3565b6060604051808303818588803b15801561304857600080fd5b505af115801561305c573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061308191906133d9565b5050505050565b600080831182906130cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c6919061377a565b60405180910390fd5b50600083856130de9190613a47565b9050809150509392505050565b6000813590506130fa81613f93565b92915050565b60008151905061310f81613f93565b92915050565b60008083601f84011261312757600080fd5b8235905067ffffffffffffffff81111561314057600080fd5b60208301915083602082028301111561315857600080fd5b9250929050565b60008135905061316e81613faa565b92915050565b60008135905061318381613fc1565b92915050565b60008151905061319881613fc1565b92915050565b6000602082840312156131b057600080fd5b60006131be848285016130eb565b91505092915050565b6000602082840312156131d957600080fd5b60006131e784828501613100565b91505092915050565b6000806040838503121561320357600080fd5b6000613211858286016130eb565b9250506020613222858286016130eb565b9150509250929050565b60008060006060848603121561324157600080fd5b600061324f868287016130eb565b9350506020613260868287016130eb565b925050604061327186828701613174565b9150509250925092565b6000806040838503121561328e57600080fd5b600061329c858286016130eb565b92505060206132ad8582860161315f565b9150509250929050565b600080604083850312156132ca57600080fd5b60006132d8858286016130eb565b92505060206132e985828601613174565b9150509250929050565b6000806020838503121561330657600080fd5b600083013567ffffffffffffffff81111561332057600080fd5b61332c85828601613115565b92509250509250929050565b60006020828403121561334a57600080fd5b60006133588482850161315f565b91505092915050565b60006020828403121561337357600080fd5b600061338184828501613174565b91505092915050565b60008060006060848603121561339f57600080fd5b60006133ad86828701613174565b93505060206133be86828701613174565b92505060406133cf86828701613174565b9150509250925092565b6000806000606084860312156133ee57600080fd5b60006133fc86828701613189565b935050602061340d86828701613189565b925050604061341e86828701613189565b9150509250925092565b6000613434838361344f565b60208301905092915050565b61344981613b18565b82525050565b61345881613b06565b82525050565b61346781613b06565b82525050565b6000613478826139ac565b61348281856139cf565b935061348d8361399c565b8060005b838110156134be5781516134a58882613428565b97506134b0836139c2565b925050600181019050613491565b5085935050505092915050565b6134d481613b2a565b82525050565b6134e381613b6d565b82525050565b6134f281613b91565b82525050565b6000613503826139b7565b61350d81856139e0565b935061351d818560208601613ba3565b61352681613cde565b840191505092915050565b600061353e6023836139e0565b915061354982613cef565b604082019050919050565b60006135616022836139e0565b915061356c82613d3e565b604082019050919050565b6000613584601b836139e0565b915061358f82613d8d565b602082019050919050565b60006135a7601b836139e0565b91506135b282613db6565b602082019050919050565b60006135ca6028836139e0565b91506135d582613ddf565b604082019050919050565b60006135ed6021836139e0565b91506135f882613e2e565b604082019050919050565b60006136106020836139e0565b915061361b82613e7d565b602082019050919050565b60006136336029836139e0565b915061363e82613ea6565b604082019050919050565b60006136566025836139e0565b915061366182613ef5565b604082019050919050565b60006136796024836139e0565b915061368482613f44565b604082019050919050565b61369881613b56565b82525050565b6136a781613b60565b82525050565b60006020820190506136c2600083018461345e565b92915050565b60006020820190506136dd6000830184613440565b92915050565b600060c0820190506136f8600083018961345e565b613705602083018861368f565b61371260408301876134e9565b61371f60608301866134e9565b61372c608083018561345e565b61373960a083018461368f565b979650505050505050565b600060208201905061375960008301846134cb565b92915050565b600060208201905061377460008301846134da565b92915050565b6000602082019050818103600083015261379481846134f8565b905092915050565b600060208201905081810360008301526137b581613531565b9050919050565b600060208201905081810360008301526137d581613554565b9050919050565b600060208201905081810360008301526137f581613577565b9050919050565b600060208201905081810360008301526138158161359a565b9050919050565b60006020820190508181036000830152613835816135bd565b9050919050565b60006020820190508181036000830152613855816135e0565b9050919050565b6000602082019050818103600083015261387581613603565b9050919050565b6000602082019050818103600083015261389581613626565b9050919050565b600060208201905081810360008301526138b581613649565b9050919050565b600060208201905081810360008301526138d58161366c565b9050919050565b60006020820190506138f1600083018461368f565b92915050565b600060408201905061390c600083018561368f565b818103602083015261391e818461346d565b90509392505050565b600060a08201905061393c600083018861368f565b61394960208301876134e9565b818103604083015261395b818661346d565b905061396a606083018561345e565b613977608083018461368f565b9695505050505050565b6000602082019050613996600083018461369e565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006139fc82613b56565b9150613a0783613b56565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613a3c57613a3b613c51565b5b828201905092915050565b6000613a5282613b56565b9150613a5d83613b56565b925082613a6d57613a6c613c80565b5b828204905092915050565b6000613a8382613b56565b9150613a8e83613b56565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613ac757613ac6613c51565b5b828202905092915050565b6000613add82613b56565b9150613ae883613b56565b925082821015613afb57613afa613c51565b5b828203905092915050565b6000613b1182613b36565b9050919050565b6000613b2382613b36565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000613b7882613b7f565b9050919050565b6000613b8a82613b36565b9050919050565b6000613b9c82613b56565b9050919050565b60005b83811015613bc1578082015181840152602081019050613ba6565b83811115613bd0576000848401525b50505050565b60006002820490506001821680613bee57607f821691505b60208210811415613c0257613c01613caf565b5b50919050565b6000613c1382613b56565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c4657613c45613c51565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f54686973206164647265737320697320626c61636b6c69737465640000000000600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b613f9c81613b06565b8114613fa757600080fd5b50565b613fb381613b2a565b8114613fbe57600080fd5b50565b613fca81613b56565b8114613fd557600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204d14caf765e716c834fc5ce5b292319c5604a32454bde8d676846702436e1e8864736f6c63430008040033

Deployed Bytecode Sourcemap

13939:13749:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18443:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20742:341;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19738:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14314:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15769:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18720:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20401:333;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14871:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18224:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21216:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22207:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14431:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21652:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18629:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19106:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14819:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15884:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14648:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15182:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15237;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18828:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5952:148;;;;;;;;;;;;;:::i;:::-;;15581:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15641:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15390:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15050:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14764:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5733:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18534;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19609:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15450:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19332:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15278:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22022:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15011:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21469:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14969:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15817:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15093:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14705:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15136:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14187:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15931:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14927:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18955:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21097:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15331:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21359:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18103:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20262:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15983:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18443:83;18480:13;18513:5;18506:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18443:83;:::o;20742:341::-;5877:12;:10;:12::i;:::-;5866:23;;:7;:5;:7::i;:::-;:23;;;5858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20886:15:::1;20866:17;:35;;;;20932:15;20912:17;:35;;;;20973:10;20958:12;:25;;;;21017:58;21062:12;;21017:40;21039:17;;21017;;:21;;:40;;;;:::i;:::-;:44;;:58;;;;:::i;:::-;20996:18;:79;;;;20742:341:::0;;;:::o;19738:161::-;19813:4;19830:39;19839:12;:10;:12::i;:::-;19853:7;19862:6;19830:8;:39::i;:::-;19887:4;19880:11;;19738:161;;;;:::o;14314:94::-;;;;;;;;;;;;;:::o;15769:41::-;;;;;;;;;;;;;:::o;18720:100::-;18773:7;18800:12;;18793:19;;18720:100;:::o;20401:333::-;5877:12;:10;:12::i;:::-;5866:23;;:7;:5;:7::i;:::-;:23;;;5858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20543:15:::1;20524:16;:34;;;;20588:15;20569:16;:34;;;;20628:10;20614:11;:24;;;;20671:55;20714:11;;20671:38;20692:16;;20671;;:20;;:38;;;;:::i;:::-;:42;;:55;;;;:::i;:::-;20651:17;:75;;;;20401:333:::0;;;:::o;14871:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;18224:211::-;5877:12;:10;:12::i;:::-;5866:23;;:7;:5;:7::i;:::-;:23;;;5858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18312:9:::1;18307:118;18326:9;;:16;;18323:1;:19;18307:118;;;18395:4;18364:14;:28;18379:9;;18389:1;18379:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18364:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;18344:3;;;;:::i;:::-;;;18307:118;;;;18224:211:::0;;:::o;21216:135::-;5877:12;:10;:12::i;:::-;5866:23;;:7;:5;:7::i;:::-;:23;;;5858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21337:6:::1;21307:19;:27;21327:6;21307:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;21216:135:::0;;:::o;22207:313::-;22305:4;22322:36;22332:6;22340:9;22351:6;22322:9;:36::i;:::-;;22369:121;22378:6;22386:12;:10;:12::i;:::-;22400:89;22438:6;22400:89;;;;;;;;;;;;;;;;;:11;:19;22412:6;22400:19;;;;;;;;;;;;;;;:33;22420:12;:10;:12::i;:::-;22400:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;22369:8;:121::i;:::-;22508:4;22501:11;;22207:313;;;;;:::o;14431:81::-;;;:::o;21652:128::-;21705:7;21732:40;21749:22;21759:11;21749:9;:22::i;:::-;21732:12;;:16;;:40;;;;:::i;:::-;21725:47;;21652:128;:::o;18629:83::-;18670:5;18695:9;;;;;;;;;;;18688:16;;18629:83;:::o;19106:218::-;19194:4;19211:83;19220:12;:10;:12::i;:::-;19234:7;19243:50;19282:10;19243:11;:25;19255:12;:10;:12::i;:::-;19243:25;;;;;;;;;;;;;;;:34;19269:7;19243:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;19211:8;:83::i;:::-;19312:4;19305:11;;19106:218;;;;:::o;14819:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;15884:40::-;;;;;;;;;;;;;:::o;14648:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;15182:34::-;;;;:::o;15237:::-;;;;:::o;18828:119::-;18894:7;18921:9;:18;18931:7;18921:18;;;;;;;;;;;;;;;;18914:25;;18828:119;;;:::o;5952:148::-;5877:12;:10;:12::i;:::-;5866:23;;:7;:5;:7::i;:::-;:23;;;5858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6059:1:::1;6022:40;;6043:6;::::0;::::1;;;;;;;;6022:40;;;;;;;;;;;;6090:1;6073:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;5952:148::o:0;15581:52::-;;;;:::o;15641:50::-;;;;:::o;15390:37::-;;;;:::o;15050:36::-;;;;:::o;14764:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;5733:87::-;5779:7;5806:6;;;;;;;;;;;5799:13;;5733:87;:::o;18534:::-;18573:13;18606:7;18599:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18534:87;:::o;19609:120::-;19671:7;19698:23;;19691:30;;19609:120;:::o;15450:44::-;;;;:::o;19332:269::-;19425:4;19442:129;19451:12;:10;:12::i;:::-;19465:7;19474:96;19513:15;19474:96;;;;;;;;;;;;;;;;;:11;:25;19486:12;:10;:12::i;:::-;19474:25;;;;;;;;;;;;;;;:34;19500:7;19474:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;19442:8;:129::i;:::-;19589:4;19582:11;;19332:269;;;;:::o;15278:29::-;;;;:::o;22022:177::-;22100:4;22117:42;22127:12;:10;:12::i;:::-;22141:9;22152:6;22117:9;:42::i;:::-;;22187:4;22180:11;;22022:177;;;;:::o;15011:30::-;;;;:::o;21469:171::-;5877:12;:10;:12::i;:::-;5866:23;;:7;:5;:7::i;:::-;:23;;;5858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21570:8:::1;21546:21;;:32;;;;;;;;;;;;;;;;;;21594:38;21623:8;21594:38;;;;;;:::i;:::-;;;;;;;;21469:171:::0;:::o;14969:35::-;;;;:::o;15817:26::-;;;;;;;;;;;;;:::o;15093:36::-;;;;:::o;14705:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;15136:31::-;;;;:::o;14187:99::-;;;;;;;;;;;;;:::o;15931:45::-;;;;;;;;;;;;;:::o;14927:35::-;;;;:::o;18955:143::-;19036:7;19063:11;:18;19075:5;19063:18;;;;;;;;;;;;;;;:27;19082:7;19063:27;;;;;;;;;;;;;;;;19056:34;;18955:143;;;;:::o;21097:111::-;5877:12;:10;:12::i;:::-;5866:23;;:7;:5;:7::i;:::-;:23;;;5858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21189:11:::1;21174:12;:26;;;;21097:111:::0;:::o;15331:36::-;;;;:::o;21359:102::-;5877:12;:10;:12::i;:::-;5866:23;;:7;:5;:7::i;:::-;:23;;;5858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21445:8:::1;21431:10;:22;;;;21359:102:::0;:::o;18103:113::-;5877:12;:10;:12::i;:::-;5866:23;;:7;:5;:7::i;:::-;:23;;;5858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18203:5:::1;18177:14;:23;18192:7;18177:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;18103:113:::0;:::o;20262:127::-;5877:12;:10;:12::i;:::-;5866:23;;:7;:5;:7::i;:::-;:23;;;5858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20375:6:::1;20349:15;:23;20365:6;20349:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;20262:127:::0;;:::o;15983:35::-;;;;;;;;;;;;;:::o;1169:181::-;1227:7;1247:9;1263:1;1259;:5;;;;:::i;:::-;1247:17;;1288:1;1283;:6;;1275:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1341:1;1334:8;;;1169:181;;;;:::o;101:115::-;154:15;197:10;182:26;;101:115;:::o;19907:347::-;20027:1;20010:19;;:5;:19;;;;20002:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20108:1;20089:21;;:7;:21;;;;20081:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20192:6;20162:11;:18;20174:5;20162:18;;;;;;;;;;;;;;;:27;20181:7;20162:27;;;;;;;;;;;;;;;:36;;;;20230:7;20214:32;;20223:5;20214:32;;;20239:6;20214:32;;;;;;:::i;:::-;;;;;;;;19907:347;;;:::o;22528:1905::-;22615:4;22643:14;:22;22658:6;22643:22;;;;;;;;;;;;;;;;;;;;;;;;;22642:23;:53;;;;;22670:14;:25;22685:9;22670:25;;;;;;;;;;;;;;;;;;;;;;;;;22669:26;22642:53;22634:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;22764:1;22746:20;;:6;:20;;;;22738:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;22848:1;22827:23;;:9;:23;;;;22819:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;22918:1;22909:6;:10;22901:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22991:16;;;;;;;;;;;22988:1438;;;23028:41;23043:6;23051:9;23062:6;23028:14;:41::i;:::-;23021:48;;;;22988:1438;23140:15;:23;23156:6;23140:23;;;;;;;;;;;;;;;;;;;;;;;;;23139:24;:55;;;;;23168:15;:26;23184:9;23168:26;;;;;;;;;;;;;;;;;;;;;;;;;23167:27;23139:55;23136:170;;;23233:12;;23223:6;:22;;23215:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;23136:170;23325:28;23356:24;23374:4;23356:9;:24::i;:::-;23325:55;;23395:28;23450:23;;23426:20;:47;;23395:78;;23506:23;:44;;;;;23534:16;;;;;;;;;;;23533:17;23506:44;:69;;;;;23555:12;:20;23568:6;23555:20;;;;;;;;;;;;;;;;;;;;;;;;;23554:21;23506:69;:94;;;;;23579:21;;;;;;;;;;;23506:94;23502:305;;;23638:25;;;;;;;;;;;23635:97;;;23709:23;;23686:46;;23635:97;23751:36;23766:20;23751:14;:36::i;:::-;23502:305;23843:53;23865:6;23843:53;;;;;;;;;;;;;;;;;:9;:17;23853:6;23843:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;23823:9;:17;23833:6;23823:17;;;;;;;;;;;;;;;:73;;;;23913:19;23936:17;:25;23954:6;23936:25;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;23965:17;:28;23983:9;23965:28;;;;;;;;;;;;;;;;;;;;;;;;;23936:57;23935:148;;24049:34;24057:6;24065:9;24076:6;24049:7;:34::i;:::-;23935:148;;;24040:6;23935:148;23913:170;;24103:16;;;;;;;;;;;:51;;;;;24124:19;:30;24144:9;24124:30;;;;;;;;;;;;;;;;;;;;;;;;;24123:31;24103:51;24100:133;;;24222:10;;24181:37;24206:11;24181:20;24191:9;24181;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;24173:60;;;;;;24100:133;24273:37;24298:11;24273:9;:20;24283:9;24273:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;24250:9;:20;24260:9;24250:20;;;;;;;;;;;;;;;:60;;;;24349:9;24332:40;;24341:6;24332:40;;;24360:11;24332:40;;;;;;:::i;:::-;;;;;;;;24394:4;24387:11;;;;;22528:1905;;;;;;:::o;1502:192::-;1588:7;1621:1;1616;:6;;1624:12;1608:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1648:9;1664:1;1660;:5;;;;:::i;:::-;1648:17;;1685:1;1678:8;;;1502:192;;;;;:::o;1358:136::-;1416:7;1443:43;1447:1;1450;1443:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1436:50;;1358:136;;;;:::o;24441:355::-;24534:4;24571:53;24593:6;24571:53;;;;;;;;;;;;;;;;;:9;:17;24581:6;24571:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;24551:9;:17;24561:6;24551:17;;;;;;;;;;;;;;;:73;;;;24658:32;24683:6;24658:9;:20;24668:9;24658:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;24635:9;:20;24645:9;24635:20;;;;;;;;;;;;;;;:55;;;;24731:9;24714:35;;24723:6;24714:35;;;24742:6;24714:35;;;;;;:::i;:::-;;;;;;;;24767:4;24760:11;;24441:355;;;;;:::o;24802:1048::-;16466:4;16447:16;;:23;;;;;;;;;;;;;;;;;;24884:19:::1;24906:65;24969:1;24906:58;24939:24;;24906:28;24918:15;;24906:7;:11;;:28;;;;:::i;:::-;:32;;:58;;;;:::i;:::-;:62;;:65;;;;:::i;:::-;24884:87;;24982:21;25006:24;25018:11;25006:7;:11;;:24;;;;:::i;:::-;24982:48;;25043:31;25060:13;25043:16;:31::i;:::-;25085:22;25110:21;25085:46;;25144:19;25166:52;25195:22;25215:1;25195:15;;:19;;:22;;;;:::i;:::-;25166:24;;:28;;:52;;;;:::i;:::-;25144:74;;25239:26;25268:59;25325:1;25268:52;25308:11;25268:35;25287:15;;25268:14;:18;;:35;;;;:::i;:::-;:39;;:52;;;;:::i;:::-;:56;;:59;;;;:::i;:::-;25239:88;;25338:21;25362:47;25397:11;25362:30;25381:10;;25362:14;:18;;:30;;;;:::i;:::-;:34;;:47;;;;:::i;:::-;25338:71;;25420:26;25449:57;25492:13;25449:38;25468:18;25449:14;:18;;:38;;;;:::i;:::-;:42;;:57;;;;:::i;:::-;25420:86;;25543:1;25522:18;:22;25519:104;;;25559:64;25580:22;;;;;;;;;;;25604:18;25559:20;:64::i;:::-;25519:104;25655:1;25639:13;:17;25636:89;;;25671:54;25692:17;;;;;;;;;;;25711:13;25671:20;:54::i;:::-;25636:89;25762:1;25741:18;:22;:41;;;;;25781:1;25767:11;:15;25741:41;25738:104;;;25797:45;25810:11;25823:18;25797:12;:45::i;:::-;25738:104;16481:1;;;;;;;16512:5:::0;16493:16;;:24;;;;;;;;;;;;;;;;;;24802:1048;:::o;27057:622::-;27143:7;27173:17;27193:1;27173:21;;27218:12;:20;27231:6;27218:20;;;;;;;;;;;;;;;;;;;;;;;;;27215:223;;;27267:38;27301:3;27267:29;27278:17;;27267:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;27255:50;;27215:223;;;27335:12;:23;27348:9;27335:23;;;;;;;;;;;;;;;;;;;;;;;;;27332:106;;;27387:39;27422:3;27387:30;27398:18;;27387:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;27375:51;;27332:106;27215:223;27473:1;27461:9;:13;27458:173;;;27518:39;27547:9;27518;:24;27536:4;27518:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;27491:9;:24;27509:4;27491:24;;;;;;;;;;;;;;;:66;;;;27602:4;27577:42;;27586:6;27577:42;;;27609:9;27577:42;;;;;;:::i;:::-;;;;;;;;27458:173;27650:21;27661:9;27650:6;:10;;:21;;;;:::i;:::-;27643:28;;;27057:622;;;;;:::o;1702:250::-;1760:7;1789:1;1784;:6;1780:47;;;1814:1;1807:8;;;;1780:47;1839:9;1855:1;1851;:5;;;;:::i;:::-;1839:17;;1884:1;1879;1875;:5;;;;:::i;:::-;:10;1867:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1943:1;1936:8;;;1702:250;;;;;:::o;1960:132::-;2018:7;2045:39;2049:1;2052;2045:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2038:46;;1960:132;;;;:::o;25862:666::-;25988:21;26026:1;26012:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25988:40;;26057:4;26039;26044:1;26039:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;26083:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26073:4;26078:1;26073:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;26118:62;26135:4;26150:15;;;;;;;;;;;26168:11;26118:8;:62::i;:::-;26219:15;;;;;;;;;;;:66;;;26300:11;26326:1;26370:4;26397;26433:15;26219:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26485:35;26502:11;26515:4;26485:35;;;;;;;:::i;:::-;;;;;;;;25862:666;;:::o;21788:126::-;21880:9;:18;;:26;21899:6;21880:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21788:126;;:::o;26536:513::-;26684:62;26701:4;26716:15;;;;;;;;;;;26734:11;26684:8;:62::i;:::-;26789:15;;;;;;;;;;;:31;;;26828:9;26861:4;26881:11;26907:1;26950;26993:7;:5;:7::i;:::-;27015:15;26789:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;26536:513;;:::o;2100:278::-;2186:7;2218:1;2214;:5;2221:12;2206:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2245:9;2261:1;2257;:5;;;;:::i;:::-;2245:17;;2369:1;2362:8;;;2100:278;;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;318:367::-;391:8;401:6;451:3;444:4;436:6;432:17;428:27;418:2;;469:1;466;459:12;418:2;505:6;492:20;482:30;;535:18;527:6;524:30;521:2;;;567:1;564;557:12;521:2;604:4;596:6;592:17;580:29;;658:3;650:4;642:6;638:17;628:8;624:32;621:41;618:2;;;675:1;672;665:12;618:2;408:277;;;;;:::o;691:133::-;734:5;772:6;759:20;750:29;;788:30;812:5;788:30;:::i;:::-;740:84;;;;:::o;830:139::-;876:5;914:6;901:20;892:29;;930:33;957:5;930:33;:::i;:::-;882:87;;;;:::o;975:143::-;1032:5;1063:6;1057:13;1048:22;;1079:33;1106:5;1079:33;:::i;:::-;1038:80;;;;:::o;1124:262::-;1183:6;1232:2;1220:9;1211:7;1207:23;1203:32;1200:2;;;1248:1;1245;1238:12;1200:2;1291:1;1316:53;1361:7;1352:6;1341:9;1337:22;1316:53;:::i;:::-;1306:63;;1262:117;1190:196;;;;:::o;1392:284::-;1462:6;1511:2;1499:9;1490:7;1486:23;1482:32;1479:2;;;1527:1;1524;1517:12;1479:2;1570:1;1595:64;1651:7;1642:6;1631:9;1627:22;1595:64;:::i;:::-;1585:74;;1541:128;1469:207;;;;:::o;1682:407::-;1750:6;1758;1807:2;1795:9;1786:7;1782:23;1778:32;1775:2;;;1823:1;1820;1813:12;1775:2;1866:1;1891:53;1936:7;1927:6;1916:9;1912:22;1891:53;:::i;:::-;1881:63;;1837:117;1993:2;2019:53;2064:7;2055:6;2044:9;2040:22;2019:53;:::i;:::-;2009:63;;1964:118;1765:324;;;;;:::o;2095:552::-;2172:6;2180;2188;2237:2;2225:9;2216:7;2212:23;2208:32;2205:2;;;2253:1;2250;2243:12;2205:2;2296:1;2321:53;2366:7;2357:6;2346:9;2342:22;2321:53;:::i;:::-;2311:63;;2267:117;2423:2;2449:53;2494:7;2485:6;2474:9;2470:22;2449:53;:::i;:::-;2439:63;;2394:118;2551:2;2577:53;2622:7;2613:6;2602:9;2598:22;2577:53;:::i;:::-;2567:63;;2522:118;2195:452;;;;;:::o;2653:401::-;2718:6;2726;2775:2;2763:9;2754:7;2750:23;2746:32;2743:2;;;2791:1;2788;2781:12;2743:2;2834:1;2859:53;2904:7;2895:6;2884:9;2880:22;2859:53;:::i;:::-;2849:63;;2805:117;2961:2;2987:50;3029:7;3020:6;3009:9;3005:22;2987:50;:::i;:::-;2977:60;;2932:115;2733:321;;;;;:::o;3060:407::-;3128:6;3136;3185:2;3173:9;3164:7;3160:23;3156:32;3153:2;;;3201:1;3198;3191:12;3153:2;3244:1;3269:53;3314:7;3305:6;3294:9;3290:22;3269:53;:::i;:::-;3259:63;;3215:117;3371:2;3397:53;3442:7;3433:6;3422:9;3418:22;3397:53;:::i;:::-;3387:63;;3342:118;3143:324;;;;;:::o;3473:425::-;3559:6;3567;3616:2;3604:9;3595:7;3591:23;3587:32;3584:2;;;3632:1;3629;3622:12;3584:2;3703:1;3692:9;3688:17;3675:31;3733:18;3725:6;3722:30;3719:2;;;3765:1;3762;3755:12;3719:2;3801:80;3873:7;3864:6;3853:9;3849:22;3801:80;:::i;:::-;3783:98;;;;3646:245;3574:324;;;;;:::o;3904:256::-;3960:6;4009:2;3997:9;3988:7;3984:23;3980:32;3977:2;;;4025:1;4022;4015:12;3977:2;4068:1;4093:50;4135:7;4126:6;4115:9;4111:22;4093:50;:::i;:::-;4083:60;;4039:114;3967:193;;;;:::o;4166:262::-;4225:6;4274:2;4262:9;4253:7;4249:23;4245:32;4242:2;;;4290:1;4287;4280:12;4242:2;4333:1;4358:53;4403:7;4394:6;4383:9;4379:22;4358:53;:::i;:::-;4348:63;;4304:117;4232:196;;;;:::o;4434:552::-;4511:6;4519;4527;4576:2;4564:9;4555:7;4551:23;4547:32;4544:2;;;4592:1;4589;4582:12;4544:2;4635:1;4660:53;4705:7;4696:6;4685:9;4681:22;4660:53;:::i;:::-;4650:63;;4606:117;4762:2;4788:53;4833:7;4824:6;4813:9;4809:22;4788:53;:::i;:::-;4778:63;;4733:118;4890:2;4916:53;4961:7;4952:6;4941:9;4937:22;4916:53;:::i;:::-;4906:63;;4861:118;4534:452;;;;;:::o;4992:596::-;5080:6;5088;5096;5145:2;5133:9;5124:7;5120:23;5116:32;5113:2;;;5161:1;5158;5151:12;5113:2;5204:1;5229:64;5285:7;5276:6;5265:9;5261:22;5229:64;:::i;:::-;5219:74;;5175:128;5342:2;5368:64;5424:7;5415:6;5404:9;5400:22;5368:64;:::i;:::-;5358:74;;5313:129;5481:2;5507:64;5563:7;5554:6;5543:9;5539:22;5507:64;:::i;:::-;5497:74;;5452:129;5103:485;;;;;:::o;5594:179::-;5663:10;5684:46;5726:3;5718:6;5684:46;:::i;:::-;5762:4;5757:3;5753:14;5739:28;;5674:99;;;;:::o;5779:142::-;5882:32;5908:5;5882:32;:::i;:::-;5877:3;5870:45;5860:61;;:::o;5927:108::-;6004:24;6022:5;6004:24;:::i;:::-;5999:3;5992:37;5982:53;;:::o;6041:118::-;6128:24;6146:5;6128:24;:::i;:::-;6123:3;6116:37;6106:53;;:::o;6195:732::-;6314:3;6343:54;6391:5;6343:54;:::i;:::-;6413:86;6492:6;6487:3;6413:86;:::i;:::-;6406:93;;6523:56;6573:5;6523:56;:::i;:::-;6602:7;6633:1;6618:284;6643:6;6640:1;6637:13;6618:284;;;6719:6;6713:13;6746:63;6805:3;6790:13;6746:63;:::i;:::-;6739:70;;6832:60;6885:6;6832:60;:::i;:::-;6822:70;;6678:224;6665:1;6662;6658:9;6653:14;;6618:284;;;6622:14;6918:3;6911:10;;6319:608;;;;;;;:::o;6933:109::-;7014:21;7029:5;7014:21;:::i;:::-;7009:3;7002:34;6992:50;;:::o;7048:185::-;7162:64;7220:5;7162:64;:::i;:::-;7157:3;7150:77;7140:93;;:::o;7239:147::-;7334:45;7373:5;7334:45;:::i;:::-;7329:3;7322:58;7312:74;;:::o;7392:364::-;7480:3;7508:39;7541:5;7508:39;:::i;:::-;7563:71;7627:6;7622:3;7563:71;:::i;:::-;7556:78;;7643:52;7688:6;7683:3;7676:4;7669:5;7665:16;7643:52;:::i;:::-;7720:29;7742:6;7720:29;:::i;:::-;7715:3;7711:39;7704:46;;7484:272;;;;;:::o;7762:366::-;7904:3;7925:67;7989:2;7984:3;7925:67;:::i;:::-;7918:74;;8001:93;8090:3;8001:93;:::i;:::-;8119:2;8114:3;8110:12;8103:19;;7908:220;;;:::o;8134:366::-;8276:3;8297:67;8361:2;8356:3;8297:67;:::i;:::-;8290:74;;8373:93;8462:3;8373:93;:::i;:::-;8491:2;8486:3;8482:12;8475:19;;8280:220;;;:::o;8506:366::-;8648:3;8669:67;8733:2;8728:3;8669:67;:::i;:::-;8662:74;;8745:93;8834:3;8745:93;:::i;:::-;8863:2;8858:3;8854:12;8847:19;;8652:220;;;:::o;8878:366::-;9020:3;9041:67;9105:2;9100:3;9041:67;:::i;:::-;9034:74;;9117:93;9206:3;9117:93;:::i;:::-;9235:2;9230:3;9226:12;9219:19;;9024:220;;;:::o;9250:366::-;9392:3;9413:67;9477:2;9472:3;9413:67;:::i;:::-;9406:74;;9489:93;9578:3;9489:93;:::i;:::-;9607:2;9602:3;9598:12;9591:19;;9396:220;;;:::o;9622:366::-;9764:3;9785:67;9849:2;9844:3;9785:67;:::i;:::-;9778:74;;9861:93;9950:3;9861:93;:::i;:::-;9979:2;9974:3;9970:12;9963:19;;9768:220;;;:::o;9994:366::-;10136:3;10157:67;10221:2;10216:3;10157:67;:::i;:::-;10150:74;;10233:93;10322:3;10233:93;:::i;:::-;10351:2;10346:3;10342:12;10335:19;;10140:220;;;:::o;10366:366::-;10508:3;10529:67;10593:2;10588:3;10529:67;:::i;:::-;10522:74;;10605:93;10694:3;10605:93;:::i;:::-;10723:2;10718:3;10714:12;10707:19;;10512:220;;;:::o;10738:366::-;10880:3;10901:67;10965:2;10960:3;10901:67;:::i;:::-;10894:74;;10977:93;11066:3;10977:93;:::i;:::-;11095:2;11090:3;11086:12;11079:19;;10884:220;;;:::o;11110:366::-;11252:3;11273:67;11337:2;11332:3;11273:67;:::i;:::-;11266:74;;11349:93;11438:3;11349:93;:::i;:::-;11467:2;11462:3;11458:12;11451:19;;11256:220;;;:::o;11482:118::-;11569:24;11587:5;11569:24;:::i;:::-;11564:3;11557:37;11547:53;;:::o;11606:112::-;11689:22;11705:5;11689:22;:::i;:::-;11684:3;11677:35;11667:51;;:::o;11724:222::-;11817:4;11855:2;11844:9;11840:18;11832:26;;11868:71;11936:1;11925:9;11921:17;11912:6;11868:71;:::i;:::-;11822:124;;;;:::o;11952:254::-;12061:4;12099:2;12088:9;12084:18;12076:26;;12112:87;12196:1;12185:9;12181:17;12172:6;12112:87;:::i;:::-;12066:140;;;;:::o;12212:807::-;12461:4;12499:3;12488:9;12484:19;12476:27;;12513:71;12581:1;12570:9;12566:17;12557:6;12513:71;:::i;:::-;12594:72;12662:2;12651:9;12647:18;12638:6;12594:72;:::i;:::-;12676:80;12752:2;12741:9;12737:18;12728:6;12676:80;:::i;:::-;12766;12842:2;12831:9;12827:18;12818:6;12766:80;:::i;:::-;12856:73;12924:3;12913:9;12909:19;12900:6;12856:73;:::i;:::-;12939;13007:3;12996:9;12992:19;12983:6;12939:73;:::i;:::-;12466:553;;;;;;;;;:::o;13025:210::-;13112:4;13150:2;13139:9;13135:18;13127:26;;13163:65;13225:1;13214:9;13210:17;13201:6;13163:65;:::i;:::-;13117:118;;;;:::o;13241:276::-;13361:4;13399:2;13388:9;13384:18;13376:26;;13412:98;13507:1;13496:9;13492:17;13483:6;13412:98;:::i;:::-;13366:151;;;;:::o;13523:313::-;13636:4;13674:2;13663:9;13659:18;13651:26;;13723:9;13717:4;13713:20;13709:1;13698:9;13694:17;13687:47;13751:78;13824:4;13815:6;13751:78;:::i;:::-;13743:86;;13641:195;;;;:::o;13842:419::-;14008:4;14046:2;14035:9;14031:18;14023:26;;14095:9;14089:4;14085:20;14081:1;14070:9;14066:17;14059:47;14123:131;14249:4;14123:131;:::i;:::-;14115:139;;14013:248;;;:::o;14267:419::-;14433:4;14471:2;14460:9;14456:18;14448:26;;14520:9;14514:4;14510:20;14506:1;14495:9;14491:17;14484:47;14548:131;14674:4;14548:131;:::i;:::-;14540:139;;14438:248;;;:::o;14692:419::-;14858:4;14896:2;14885:9;14881:18;14873:26;;14945:9;14939:4;14935:20;14931:1;14920:9;14916:17;14909:47;14973:131;15099:4;14973:131;:::i;:::-;14965:139;;14863:248;;;:::o;15117:419::-;15283:4;15321:2;15310:9;15306:18;15298:26;;15370:9;15364:4;15360:20;15356:1;15345:9;15341:17;15334:47;15398:131;15524:4;15398:131;:::i;:::-;15390:139;;15288:248;;;:::o;15542:419::-;15708:4;15746:2;15735:9;15731:18;15723:26;;15795:9;15789:4;15785:20;15781:1;15770:9;15766:17;15759:47;15823:131;15949:4;15823:131;:::i;:::-;15815:139;;15713:248;;;:::o;15967:419::-;16133:4;16171:2;16160:9;16156:18;16148:26;;16220:9;16214:4;16210:20;16206:1;16195:9;16191:17;16184:47;16248:131;16374:4;16248:131;:::i;:::-;16240:139;;16138:248;;;:::o;16392:419::-;16558:4;16596:2;16585:9;16581:18;16573:26;;16645:9;16639:4;16635:20;16631:1;16620:9;16616:17;16609:47;16673:131;16799:4;16673:131;:::i;:::-;16665:139;;16563:248;;;:::o;16817:419::-;16983:4;17021:2;17010:9;17006:18;16998:26;;17070:9;17064:4;17060:20;17056:1;17045:9;17041:17;17034:47;17098:131;17224:4;17098:131;:::i;:::-;17090:139;;16988:248;;;:::o;17242:419::-;17408:4;17446:2;17435:9;17431:18;17423:26;;17495:9;17489:4;17485:20;17481:1;17470:9;17466:17;17459:47;17523:131;17649:4;17523:131;:::i;:::-;17515:139;;17413:248;;;:::o;17667:419::-;17833:4;17871:2;17860:9;17856:18;17848:26;;17920:9;17914:4;17910:20;17906:1;17895:9;17891:17;17884:47;17948:131;18074:4;17948:131;:::i;:::-;17940:139;;17838:248;;;:::o;18092:222::-;18185:4;18223:2;18212:9;18208:18;18200:26;;18236:71;18304:1;18293:9;18289:17;18280:6;18236:71;:::i;:::-;18190:124;;;;:::o;18320:483::-;18491:4;18529:2;18518:9;18514:18;18506:26;;18542:71;18610:1;18599:9;18595:17;18586:6;18542:71;:::i;:::-;18660:9;18654:4;18650:20;18645:2;18634:9;18630:18;18623:48;18688:108;18791:4;18782:6;18688:108;:::i;:::-;18680:116;;18496:307;;;;;:::o;18809:831::-;19072:4;19110:3;19099:9;19095:19;19087:27;;19124:71;19192:1;19181:9;19177:17;19168:6;19124:71;:::i;:::-;19205:80;19281:2;19270:9;19266:18;19257:6;19205:80;:::i;:::-;19332:9;19326:4;19322:20;19317:2;19306:9;19302:18;19295:48;19360:108;19463:4;19454:6;19360:108;:::i;:::-;19352:116;;19478:72;19546:2;19535:9;19531:18;19522:6;19478:72;:::i;:::-;19560:73;19628:3;19617:9;19613:19;19604:6;19560:73;:::i;:::-;19077:563;;;;;;;;:::o;19646:214::-;19735:4;19773:2;19762:9;19758:18;19750:26;;19786:67;19850:1;19839:9;19835:17;19826:6;19786:67;:::i;:::-;19740:120;;;;:::o;19866:132::-;19933:4;19956:3;19948:11;;19986:4;19981:3;19977:14;19969:22;;19938:60;;;:::o;20004:114::-;20071:6;20105:5;20099:12;20089:22;;20078:40;;;:::o;20124:99::-;20176:6;20210:5;20204:12;20194:22;;20183:40;;;:::o;20229:113::-;20299:4;20331;20326:3;20322:14;20314:22;;20304:38;;;:::o;20348:184::-;20447:11;20481:6;20476:3;20469:19;20521:4;20516:3;20512:14;20497:29;;20459:73;;;;:::o;20538:169::-;20622:11;20656:6;20651:3;20644:19;20696:4;20691:3;20687:14;20672:29;;20634:73;;;;:::o;20713:305::-;20753:3;20772:20;20790:1;20772:20;:::i;:::-;20767:25;;20806:20;20824:1;20806:20;:::i;:::-;20801:25;;20960:1;20892:66;20888:74;20885:1;20882:81;20879:2;;;20966:18;;:::i;:::-;20879:2;21010:1;21007;21003:9;20996:16;;20757:261;;;;:::o;21024:185::-;21064:1;21081:20;21099:1;21081:20;:::i;:::-;21076:25;;21115:20;21133:1;21115:20;:::i;:::-;21110:25;;21154:1;21144:2;;21159:18;;:::i;:::-;21144:2;21201:1;21198;21194:9;21189:14;;21066:143;;;;:::o;21215:348::-;21255:7;21278:20;21296:1;21278:20;:::i;:::-;21273:25;;21312:20;21330:1;21312:20;:::i;:::-;21307:25;;21500:1;21432:66;21428:74;21425:1;21422:81;21417:1;21410:9;21403:17;21399:105;21396:2;;;21507:18;;:::i;:::-;21396:2;21555:1;21552;21548:9;21537:20;;21263:300;;;;:::o;21569:191::-;21609:4;21629:20;21647:1;21629:20;:::i;:::-;21624:25;;21663:20;21681:1;21663:20;:::i;:::-;21658:25;;21702:1;21699;21696:8;21693:2;;;21707:18;;:::i;:::-;21693:2;21752:1;21749;21745:9;21737:17;;21614:146;;;;:::o;21766:96::-;21803:7;21832:24;21850:5;21832:24;:::i;:::-;21821:35;;21811:51;;;:::o;21868:104::-;21913:7;21942:24;21960:5;21942:24;:::i;:::-;21931:35;;21921:51;;;:::o;21978:90::-;22012:7;22055:5;22048:13;22041:21;22030:32;;22020:48;;;:::o;22074:126::-;22111:7;22151:42;22144:5;22140:54;22129:65;;22119:81;;;:::o;22206:77::-;22243:7;22272:5;22261:16;;22251:32;;;:::o;22289:86::-;22324:7;22364:4;22357:5;22353:16;22342:27;;22332:43;;;:::o;22381:180::-;22458:9;22491:64;22549:5;22491:64;:::i;:::-;22478:77;;22468:93;;;:::o;22567:140::-;22644:9;22677:24;22695:5;22677:24;:::i;:::-;22664:37;;22654:53;;;:::o;22713:121::-;22771:9;22804:24;22822:5;22804:24;:::i;:::-;22791:37;;22781:53;;;:::o;22840:307::-;22908:1;22918:113;22932:6;22929:1;22926:13;22918:113;;;23017:1;23012:3;23008:11;23002:18;22998:1;22993:3;22989:11;22982:39;22954:2;22951:1;22947:10;22942:15;;22918:113;;;23049:6;23046:1;23043:13;23040:2;;;23129:1;23120:6;23115:3;23111:16;23104:27;23040:2;22889:258;;;;:::o;23153:320::-;23197:6;23234:1;23228:4;23224:12;23214:22;;23281:1;23275:4;23271:12;23302:18;23292:2;;23358:4;23350:6;23346:17;23336:27;;23292:2;23420;23412:6;23409:14;23389:18;23386:38;23383:2;;;23439:18;;:::i;:::-;23383:2;23204:269;;;;:::o;23479:233::-;23518:3;23541:24;23559:5;23541:24;:::i;:::-;23532:33;;23587:66;23580:5;23577:77;23574:2;;;23657:18;;:::i;:::-;23574:2;23704:1;23697:5;23693:13;23686:20;;23522:190;;;:::o;23718:180::-;23766:77;23763:1;23756:88;23863:4;23860:1;23853:15;23887:4;23884:1;23877:15;23904:180;23952:77;23949:1;23942:88;24049:4;24046:1;24039:15;24073:4;24070:1;24063:15;24090:180;24138:77;24135:1;24128:88;24235:4;24232:1;24225:15;24259:4;24256:1;24249:15;24276:102;24317:6;24368:2;24364:7;24359:2;24352:5;24348:14;24344:28;24334:38;;24324:54;;;:::o;24384:222::-;24524:34;24520:1;24512:6;24508:14;24501:58;24593:5;24588:2;24580:6;24576:15;24569:30;24490:116;:::o;24612:221::-;24752:34;24748:1;24740:6;24736:14;24729:58;24821:4;24816:2;24808:6;24804:15;24797:29;24718:115;:::o;24839:177::-;24979:29;24975:1;24967:6;24963:14;24956:53;24945:71;:::o;25022:177::-;25162:29;25158:1;25150:6;25146:14;25139:53;25128:71;:::o;25205:227::-;25345:34;25341:1;25333:6;25329:14;25322:58;25414:10;25409:2;25401:6;25397:15;25390:35;25311:121;:::o;25438:220::-;25578:34;25574:1;25566:6;25562:14;25555:58;25647:3;25642:2;25634:6;25630:15;25623:28;25544:114;:::o;25664:182::-;25804:34;25800:1;25792:6;25788:14;25781:58;25770:76;:::o;25852:228::-;25992:34;25988:1;25980:6;25976:14;25969:58;26061:11;26056:2;26048:6;26044:15;26037:36;25958:122;:::o;26086:224::-;26226:34;26222:1;26214:6;26210:14;26203:58;26295:7;26290:2;26282:6;26278:15;26271:32;26192:118;:::o;26316:223::-;26456:34;26452:1;26444:6;26440:14;26433:58;26525:6;26520:2;26512:6;26508:15;26501:31;26422:117;:::o;26545:122::-;26618:24;26636:5;26618:24;:::i;:::-;26611:5;26608:35;26598:2;;26657:1;26654;26647:12;26598:2;26588:79;:::o;26673:116::-;26743:21;26758:5;26743:21;:::i;:::-;26736:5;26733:32;26723:2;;26779:1;26776;26769:12;26723:2;26713:76;:::o;26795:122::-;26868:24;26886:5;26868:24;:::i;:::-;26861:5;26858:35;26848:2;;26907:1;26904;26897:12;26848:2;26838:79;:::o

Swarm Source

ipfs://4d14caf765e716c834fc5ce5b292319c5604a32454bde8d676846702436e1e88
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.