ETH Price: $3,400.63 (-1.28%)
Gas: 5 Gwei

Token

Moonverse (MOON)
 

Overview

Max Total Supply

50,000,000,000 MOON

Holders

125

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Balance
6,482,138.21174301 MOON

Value
$0.00
0xdc1a2c39ee1ac3bb289d87273d602cd22b705de5
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:
Moonverse

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**

███╗░░░███╗░█████╗░░█████╗░███╗░░██╗██╗░░░██╗███████╗██████╗░░██████╗███████╗
████╗░████║██╔══██╗██╔══██╗████╗░██║██║░░░██║██╔════╝██╔══██╗██╔════╝██╔════╝
██╔████╔██║██║░░██║██║░░██║██╔██╗██║╚██╗░██╔╝█████╗░░██████╔╝╚█████╗░█████╗░░
██║╚██╔╝██║██║░░██║██║░░██║██║╚████║░╚████╔╝░██╔══╝░░██╔══██╗░╚═══██╗██╔══╝░░
██║░╚═╝░██║╚█████╔╝╚█████╔╝██║░╚███║░░╚██╔╝░░███████╗██║░░██║██████╔╝███████╗
╚═╝░░░░░╚═╝░╚════╝░░╚════╝░╚═╝░░╚══╝░░░╚═╝░░░╚══════╝╚═╝░░╚═╝╚═════╝░╚══════╝

Telegram: https://t.me/moonversetoken

*/

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

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

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

    function owner() public view returns (address) {
        return _owner;
    }   
    
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// pragma solidity >=0.5.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;
}


// pragma solidity >=0.5.0;

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

// pragma solidity >=0.6.2;

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



// pragma solidity >=0.6.2;

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 Moonverse is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    
    address payable private marketingWallet = payable(0x01C96B300b2ea26464051c70219Ae3e82709EAF5); // Marketing Wallet
    address payable private crowdfundWallet = payable(0xC3beca3789F0Af9d09A77C8ec4224eE3CCFB87BC); // Crowd Fund Wallet
    address payable private devWallet = payable (0x01C96B300b2ea26464051c70219Ae3e82709EAF5); // Dev Wallet
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isSniper;
    
    uint256 public deadBlocks = 2;
    uint256 public launchedAt = 0;
    

    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isMaxWalletExempt;
    mapping (address => bool) private _isExcluded;
    mapping (address => bool) private _isTrusted;
    address[] private _excluded;
    mapping (address => bool) internal authorizations;
   
    address DEAD = 0x000000000000000000000000000000000000dEaD;

    uint8 private _decimals = 8;
    
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 50000000000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "Moonverse";
    string private _symbol = "MOON";

    uint256 public _maxWalletToken = _tTotal.div(1000).mul(15); //1.5%

    uint256 public _buyLiquidityFee = 40; //4%
    uint256 public _buyDevFee = 0;    //0%
    uint256 public _buyMarketingFee = 30;   //3%
    uint256 public _buyReflectionFee = 0;

    uint256 public _sellLiquidityFee = 40; //4%
    uint256 public _sellMarketingFee = 30;  //3%
    uint256 public _sellDevFee = 0;   //0%
    uint256 public _sellReflectionFee = 0;
    
    uint256 private crowdfundfee = 1;   //1% same for buys and sells
    uint256 private liquidityFee = _buyLiquidityFee;
    uint256 private marketingFee = _buyMarketingFee;
    uint256 private devFee = _buyDevFee;
    uint256 private reflectionFee=_buyReflectionFee;


    uint256 private totalFee =
        liquidityFee.add(marketingFee).add(devFee).add(crowdfundfee);
    uint256 private currenttotalFee = totalFee;
    
    uint256 public swapThreshold = _tTotal.div(10000).mul(2); //0.02%
   
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    
    bool inSwap;
    
    bool public tradingOpen = false;
    bool public zeroBuyTaxmode = false;
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }
    

    constructor () {

        _rOwned[_msgSender()] = _rTotal;
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
        .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isMaxWalletExempt[owner()] = true;
        _isMaxWalletExempt[address(this)] = true;
        _isMaxWalletExempt[uniswapV2Pair] = true;
        _isMaxWalletExempt[DEAD] = true;
        _isTrusted[owner()] = true;
        _isTrusted[uniswapV2Pair] = true;
        authorizations[msg.sender] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }
    
    function openTrading(bool _status,uint256 _deadBlocks) external onlyOwner() {
        tradingOpen = _status;
        excludeFromReward(address(this));
        excludeFromReward(uniswapV2Pair);
        if(tradingOpen && launchedAt == 0){
            launchedAt = block.number;
            deadBlocks = _deadBlocks;
        }
    }

    
    function setZeroBuyTaxmode(bool _status) external onlyOwner() {
       zeroBuyTaxmode=_status;
    }
    
    function setNewRouter(address newRouter) external onlyOwner() {
        IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter);
        address get_pair = IUniswapV2Factory(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            uniswapV2Pair = IUniswapV2Factory(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            uniswapV2Pair = get_pair;
        }
        uniswapV2Router = _newRouter;
    }

    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 _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

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

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

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, 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 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 isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }
    
    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }
  

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner() {

        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    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 _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!_isSniper[to], "Sorry Buddy, Get Rekt");
        require(!_isSniper[from], "Sorry Buddy, Get Rekt");
        
        if(!authorizations[from]){
            require(tradingOpen,"Trading not open yet");
        }

         bool takeFee = false;
        //take fee only on swaps
        if ( (from==uniswapV2Pair || to==uniswapV2Pair) && !(_isExcludedFromFee[from] || _isExcludedFromFee[to]) ) {
            takeFee = true;
        }

        if(launchedAt>0 && (!_isMaxWalletExempt[to] && !authorizations[from])){
                require(amount+ balanceOf(to)<=_maxWalletToken,
                    "Total Holding is currently limited");
        }

        currenttotalFee=totalFee;
        reflectionFee=_buyReflectionFee;

        if(tradingOpen && to == uniswapV2Pair) { //sell
            currenttotalFee= _sellLiquidityFee.add(_sellMarketingFee).add(_sellDevFee);
            reflectionFee=_sellReflectionFee;
        }
        
        //antibot - first 2 blocks
        if(launchedAt>0 && (launchedAt + deadBlocks) > block.number){
                _isSniper[to]=true;
        }

        if(zeroBuyTaxmode){
             if(tradingOpen && from == uniswapV2Pair) { //buys
                    currenttotalFee=0;
             }
        }

        //sell
        if (!inSwap && tradingOpen && to == uniswapV2Pair) {
      
            uint256 contractTokenBalance = balanceOf(address(this));
            
            if(contractTokenBalance>=swapThreshold){
                    contractTokenBalance = swapThreshold;
                    swapTokens(contractTokenBalance);
            }
          
        }
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapTokens(uint256 contractTokenBalance) private lockTheSwap {
        
        
        uint256 amountToLiquify = contractTokenBalance
            .mul(liquidityFee)
            .div(totalFee)
            .div(2);

        uint256 amountToSwap = contractTokenBalance.sub(amountToLiquify);
        
        swapTokensForEth(amountToSwap);

        uint256 amountETH = address(this).balance;

        uint256 totalETHFee = totalFee.sub(liquidityFee.div(2));

        uint256 amountETHLiquidity = amountETH
            .mul(liquidityFee)
            .div(totalETHFee)
            .div(2);
        
        uint256 amountETHdev = amountETH.mul(devFee).div(totalETHFee);
        uint256 amountETHMarketing = amountETH.mul(marketingFee).div(
            totalETHFee
        );
         uint256 amountETHcrowdfund = amountETH.mul(crowdfundfee).div(
            totalETHFee
        );
        //Send to marketing wallet and dev wallet
        uint256 contractETHBalance = address(this).balance;
        if(contractETHBalance > 0) {
            sendETHToFee(amountETHMarketing,marketingWallet);
            sendETHToFee(amountETHcrowdfund,crowdfundWallet);
            sendETHToFee(amountETHdev,devWallet);
        }
        if (amountToLiquify > 0) {
                addLiquidity(amountToLiquify,amountETHLiquidity);
        }
    }
    
    function sendETHToFee(uint256 amount,address payable wallet) private {
        wallet.transfer(amount);
    }
    

   
    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 _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {

        uint256 _previousReflectionFee=reflectionFee;
        uint256 _previousTotalFee=currenttotalFee;
        if(!takeFee){
            reflectionFee = 0;
            currenttotalFee=0;
        }
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if(!takeFee){
            reflectionFee = _previousReflectionFee;
            currenttotalFee=_previousTotalFee;
        }
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(reflectionFee).div(
            10**3
        );
    }
    
    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(currenttotalFee).div(
            10**3
        );
    }
    
    function excludeMultiple(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function excludeFromFee(address[] calldata addresses) public onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
            _isExcludedFromFee[addresses[i]] = true;
        }
    }
    
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    function setWallets(address _marketingWallet,address _devWallet) external onlyOwner() {
        marketingWallet = payable(_marketingWallet);
        devWallet = payable(_devWallet);
    }


    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
    function isSniper(address account) public view returns (bool) {
        return _isSniper[account];
    }
    
    function manage_Snipers(address[] calldata addresses, bool status) public onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
            if(!_isTrusted[addresses[i]]){
                _isSniper[addresses[i]] = status;
            }
        }
    }
    
    function manage_trusted(address[] calldata addresses) public onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
            _isTrusted[addresses[i]]=true;
        }
    }
        
    function withDrawLeftoverETH(address payable receipient) public onlyOwner {
        receipient.transfer(address(this).balance);
    }

    function withdrawStuckTokens(IERC20 token, address to) public onlyOwner {
        uint256 balance = token.balanceOf(address(this));
        token.transfer(to, balance);
    }

    function setMaxWalletPercent_base1000(uint256 maxWallPercent_base1000) external onlyOwner() {
        _maxWalletToken = _tTotal.div(1000).mul(maxWallPercent_base1000);
    }

    function setMaxWalletExempt(address _addr) external onlyOwner {
        _isMaxWalletExempt[_addr] = true;
    }

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
    }

    function airdrop(address from, address[] calldata addresses, uint256 tokens) external onlyOwner {

        require(addresses.length < 2001,"GAS Error: max airdrop limit is 2000 addresses"); // to prevent overflow

        uint256 SCCC = tokens* 10**_decimals * addresses.length;

        require(balanceOf(from) >= SCCC, "Not enough tokens in wallet");

        for(uint i=0; i < addresses.length; i++){
            _transfer(from,addresses[i],(tokens* 10**_decimals));
        }
    }

    function setTaxesBuy(uint256 _reflectionFee, uint256 _liquidityFee, uint256 _marketingFee,uint256 _devFee,uint256 _crowdfundfee) external onlyOwner {
       
        _buyLiquidityFee = _liquidityFee;
        _buyMarketingFee = _marketingFee;
        _buyDevFee = _devFee;
        _buyReflectionFee= _reflectionFee;

        reflectionFee= _reflectionFee;
        liquidityFee = _liquidityFee;
        devFee = _devFee;
        marketingFee = _marketingFee;
        crowdfundfee = _crowdfundfee;
        totalFee = liquidityFee.add(marketingFee).add(devFee).add(crowdfundfee);
        require(totalFee.add(_buyReflectionFee) <= 500, "Must keep taxes below 50%");
    }

     function authorize(address adr) public onlyOwner {
        authorizations[adr] = true;
    }

    function unauthorize(address adr) public onlyOwner {
        authorizations[adr] = false;
    }

    function setTaxesSell(uint256 _reflectionFee,uint256 _liquidityFee, uint256 _marketingFee,uint256 _devFee) external onlyOwner {
        _sellLiquidityFee = _liquidityFee;
        _sellMarketingFee = _marketingFee;
        _sellDevFee = _devFee;
        _sellReflectionFee= _reflectionFee;
        require(_sellLiquidityFee.add(_sellMarketingFee).add(_sellDevFee).add(_sellReflectionFee).add(crowdfundfee) <= 500, "Must keep taxes below 50%");
    }
     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"_buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellDevFee","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":"_sellReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_Snipers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"manage_trusted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint256","name":"_deadBlocks","type":"uint256"}],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setMaxWalletExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent_base1000","type":"uint256"}],"name":"setMaxWalletPercent_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_crowdfundfee","type":"uint256"}],"name":"setTaxesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setTaxesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setZeroBuyTaxmode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"receipient","type":"address"}],"name":"withDrawLeftoverETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"zeroBuyTaxmode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600380546001600160a01b03199081167301c96b300b2ea26464051c70219ae3e82709eaf590811790925560048054821673c3beca3789f0af9d09a77c8ec4224ee3ccfb87bc1790556005805490911690911790556002600a9081556000600b55601280547408000000000000000000000000000000000000dead6001600160a81b03199091161790819055620000a791600160a01b90910460ff169062000913565b620000b890640ba43b740062000924565b6013819055620000cb906000196200095c565b620000d99060001962000973565b601455604080518082019091526009808252684d6f6f6e766572736560b81b60209092019182526200010e916016916200075a565b506040805180820190915260048082526326a7a7a760e11b60209092019182526200013c916017916200075a565b5062000175600f620001616103e8601354620005da60201b62001fbf1790919060201c565b6200062d60201b620020011790919060201c565b60185560286019556000601a55601e601b556000601c556028601d55601e80556000601f5560006020556001602155601954602255601b54602355601a54602455601c54602555620001fc602154620001e8602454620001e8602354602254620006bb60201b620020831790919060201c565b620006bb60201b620020831790919060201c565b60265560265460275562000229600262000161612710601354620005da60201b62001fbf1790919060201c565b602855602a805461ffff60a81b191690553480156200024757600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506014543360009081526006602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a015592600480830193928290030181865afa158015620002f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200031691906200098d565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000364573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200038a91906200098d565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620003d8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003fe91906200098d565b602a80546001600160a01b03199081166001600160a01b0393841617909155602980549091169183169190911790556001600c6000620004466000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600c909252812080549092166001908117909255600d906200049f6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600d909352818320805485166001908117909155602a54821684528284208054861682179055601254909116835290822080549093168117909255600f90620005216000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055602a549091168152600f83528181208054851660019081179091553382526011909352208054909216179055620005833390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601354604051620005cb91815260200190565b60405180910390a35062000a7e565b60006200062483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200071e60201b60201c565b90505b92915050565b600082600003620006415750600062000627565b60006200064f838562000924565b9050826200065e8583620009b8565b14620006245760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b600080620006ca8385620009cf565b905083811015620006245760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620006b2565b60008183620007425760405162461bcd60e51b8152600401620006b29190620009ea565b506000620007518486620009b8565b95945050505050565b828054620007689062000a42565b90600052602060002090601f0160209004810192826200078c5760008555620007d7565b82601f10620007a757805160ff1916838001178555620007d7565b82800160010185558215620007d7579182015b82811115620007d7578251825591602001919060010190620007ba565b50620007e5929150620007e9565b5090565b5b80821115620007e55760008155600101620007ea565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620008575781600019048211156200083b576200083b62000800565b808516156200084957918102915b93841c93908002906200081b565b509250929050565b600082620008705750600162000627565b816200087f5750600062000627565b8160018114620008985760028114620008a357620008c3565b600191505062000627565b60ff841115620008b757620008b762000800565b50506001821b62000627565b5060208310610133831016604e8410600b8410161715620008e8575081810a62000627565b620008f4838362000816565b80600019048211156200090b576200090b62000800565b029392505050565b60006200062460ff8416836200085f565b600081600019048311821515161562000941576200094162000800565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826200096e576200096e62000946565b500690565b60008282101562000988576200098862000800565b500390565b600060208284031215620009a057600080fd5b81516001600160a01b03811681146200062457600080fd5b600082620009ca57620009ca62000946565b500490565b60008219821115620009e557620009e562000800565b500190565b600060208083528351808285015260005b8181101562000a1957858101830151858201604001528201620009fb565b8181111562000a2c576000604083870101525b50601f01601f1916929092016040019392505050565b600181811c9082168062000a5757607f821691505b60208210810362000a7857634e487b7160e01b600052602260045260246000fd5b50919050565b613a138062000a8e6000396000f3fe60806040526004361061037a5760003560e01c806371b9189c116101d1578063b6a5d7de11610102578063dd62ed3e116100a0578063f259c57b1161006f578063f259c57b14610a2e578063f2fde38b14610a4e578063fabb0b4f14610a6e578063ffb54a9914610a8457600080fd5b8063dd62ed3e14610988578063ea2f0b37146109ce578063eafb5a3c146109ee578063f0b37c0414610a0e57600080fd5b8063c8607952116100dc578063c860795214610926578063c9cf77891461093c578063d3f6a15714610952578063dc44b6a01461097257600080fd5b8063b6a5d7de146108da578063bf56b371146108fa578063c5d241891461091057600080fd5b80638da5cb5b1161016f578063a1ac727f11610149578063a1ac727f1461085a578063a3b84b6b1461087a578063a457c2d71461089a578063a9059cbb146108ba57600080fd5b80638da5cb5b146108075780638f4590d21461082557806395d89b411461084557600080fd5b806378109e54116101ab57806378109e541461078257806384530c461461079857806388790a68146107b857806388f82020146107ce57600080fd5b806371b9189c1461072c578063743942b61461074c5780637598f8bc1461076c57600080fd5b8063313ce567116102ab5780634b01547f11610249578063620158521161022357806362015852146106c15780636ce37fa0146106d757806370a08231146106f7578063715018a61461071757600080fd5b80634b01547f1461066157806352390c02146106815780635d54c0af146106a157600080fd5b80633bd5d173116102855780633bd5d173146105eb578063401aa5c01461060b5780634549b0391461062157806349bd5a5e1461064157600080fd5b8063313ce5671461057f5780633685d419146105ab57806339509351146105cb57600080fd5b806318160ddd116103185780632691bc80116102f25780632691bc80146104fe5780632d4103d61461051f5780632d8381191461053f5780632dd5efe71461055f57600080fd5b806318160ddd146104a957806323b872dd146104be57806325b86edf146104de57600080fd5b8063095ea7b311610354578063095ea7b3146103f35780630f3a325f1461042357806313114a9d1461045c5780631694505e1461047157600080fd5b80630445b6671461038657806306fdde03146103af57806309302dc6146103d157600080fd5b3661038157005b600080fd5b34801561039257600080fd5b5061039c60285481565b6040519081526020015b60405180910390f35b3480156103bb57600080fd5b506103c4610aa5565b6040516103a691906132ba565b3480156103dd57600080fd5b506103f16103ec36600461330f565b610b37565b005b3480156103ff57600080fd5b5061041361040e366004613340565b610b91565b60405190151581526020016103a6565b34801561042f57600080fd5b5061041361043e36600461336c565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561046857600080fd5b5060155461039c565b34801561047d57600080fd5b50602954610491906001600160a01b031681565b6040516001600160a01b0390911681526020016103a6565b3480156104b557600080fd5b5060135461039c565b3480156104ca57600080fd5b506104136104d9366004613389565b610ba8565b3480156104ea57600080fd5b506103f16104f93660046133ca565b610c11565b34801561050a57600080fd5b50602a5461041390600160b01b900460ff1681565b34801561052b57600080fd5b506103f161053a366004613411565b610d23565b34801561054b57600080fd5b5061039c61055a36600461330f565b610dae565b34801561056b57600080fd5b506103f161057a36600461336c565b610e32565b34801561058b57600080fd5b50601254600160a01b900460ff1660405160ff90911681526020016103a6565b3480156105b757600080fd5b506103f16105c636600461336c565b610e80565b3480156105d757600080fd5b506104136105e6366004613340565b611032565b3480156105f757600080fd5b506103f161060636600461330f565b611068565b34801561061757600080fd5b5061039c601c5481565b34801561062d57600080fd5b5061039c61063c36600461342f565b611152565b34801561064d57600080fd5b50602a54610491906001600160a01b031681565b34801561066d57600080fd5b506103f161067c366004613454565b6111df565b34801561068d57600080fd5b506103f161069c36600461336c565b611227565b3480156106ad57600080fd5b506103f16106bc3660046134bd565b611311565b3480156106cd57600080fd5b5061039c601a5481565b3480156106e357600080fd5b506103f16106f2366004613514565b6113f7565b34801561070357600080fd5b5061039c61071236600461336c565b61149e565b34801561072357600080fd5b506103f16114fd565b34801561073857600080fd5b506103f1610747366004613546565b611571565b34801561075857600080fd5b506103f161076736600461336c565b611610565b34801561077857600080fd5b5061039c60205481565b34801561078e57600080fd5b5061039c60185481565b3480156107a457600080fd5b506103f16107b3366004613546565b61166f565b3480156107c457600080fd5b5061039c601d5481565b3480156107da57600080fd5b506104136107e936600461336c565b6001600160a01b03166000908152600e602052604090205460ff1690565b34801561081357600080fd5b506000546001600160a01b0316610491565b34801561083157600080fd5b506103f1610840366004613588565b611709565b34801561085157600080fd5b506103c4611753565b34801561086657600080fd5b506103f16108753660046135aa565b611762565b34801561088657600080fd5b506103f1610895366004613606565b6118f6565b3480156108a657600080fd5b506104136108b5366004613340565b6119c3565b3480156108c657600080fd5b506104136108d5366004613340565b611a12565b3480156108e657600080fd5b506103f16108f536600461336c565b611a1f565b34801561090657600080fd5b5061039c600b5481565b34801561091c57600080fd5b5061039c601b5481565b34801561093257600080fd5b5061039c601e5481565b34801561094857600080fd5b5061039c601f5481565b34801561095e57600080fd5b506103f161096d3660046133ca565b611a6d565b34801561097e57600080fd5b5061039c60195481565b34801561099457600080fd5b5061039c6109a33660046133ca565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b3480156109da57600080fd5b506103f16109e936600461336c565b611ac5565b3480156109fa57600080fd5b506103f1610a0936600461336c565b611b10565b348015610a1a57600080fd5b506103f1610a2936600461336c565b611e3c565b348015610a3a57600080fd5b506103f1610a4936600461336c565b611e87565b348015610a5a57600080fd5b506103f1610a6936600461336c565b611ed5565b348015610a7a57600080fd5b5061039c600a5481565b348015610a9057600080fd5b50602a5461041390600160a81b900460ff1681565b606060168054610ab490613641565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae090613641565b8015610b2d5780601f10610b0257610100808354040283529160200191610b2d565b820191906000526020600020905b815481529060010190602001808311610b1057829003601f168201915b5050505050905090565b6000546001600160a01b03163314610b6a5760405162461bcd60e51b8152600401610b619061367b565b60405180910390fd5b610b8b81610b856103e8601354611fbf90919063ffffffff16565b90612001565b60185550565b6000610b9e3384846120e2565b5060015b92915050565b6000610bb5848484612206565b610c078433610c0285604051806060016040528060288152602001613991602891396001600160a01b038a16600090815260086020908152604080832033845290915290205491906126fc565b6120e2565b5060019392505050565b6000546001600160a01b03163314610c3b5760405162461bcd60e51b8152600401610b619061367b565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca691906136b0565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb906044016020604051808303816000875af1158015610cf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1d91906136c9565b50505050565b6000546001600160a01b03163314610d4d5760405162461bcd60e51b8152600401610b619061367b565b602a805460ff60a81b1916600160a81b84151502179055610d6d30611227565b602a54610d82906001600160a01b0316611227565b602a54600160a81b900460ff168015610d9b5750600b54155b15610daa5743600b55600a8190555b5050565b6000601454821115610e155760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b61565b6000610e1f612736565b9050610e2b8382611fbf565b9392505050565b6000546001600160a01b03163314610e5c5760405162461bcd60e51b8152600401610b619061367b565b6001600160a01b03166000908152600d60205260409020805460ff19166001179055565b6000546001600160a01b03163314610eaa5760405162461bcd60e51b8152600401610b619061367b565b6001600160a01b0381166000908152600e602052604090205460ff16610f125760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b61565b60005b601054811015610daa57816001600160a01b031660108281548110610f3c57610f3c6136e6565b6000918252602090912001546001600160a01b0316036110205760108054610f6690600190613712565b81548110610f7657610f766136e6565b600091825260209091200154601080546001600160a01b039092169183908110610fa257610fa26136e6565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600e90925220805460ff191690556010805480610ffa57610ffa613729565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061102a8161373f565b915050610f15565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610b9e918590610c029086612083565b336000818152600e602052604090205460ff16156110dd5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610b61565b60006110e883612759565b505050506001600160a01b038416600090815260066020526040902054919250611114919050826127a8565b6001600160a01b03831660009081526006602052604090205560145461113a90826127a8565b60145560155461114a9084612083565b601555505050565b60006013548311156111a65760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b61565b816111c55760006111b684612759565b50939550610ba2945050505050565b60006111d084612759565b50929550610ba2945050505050565b6000546001600160a01b031633146112095760405162461bcd60e51b8152600401610b619061367b565b602a8054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b031633146112515760405162461bcd60e51b8152600401610b619061367b565b6001600160a01b038116600090815260066020526040902054156112ab576001600160a01b03811660009081526006602052604090205461129190610dae565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600e60205260408120805460ff191660019081179091556010805491820181559091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319169091179055565b6000546001600160a01b0316331461133b5760405162461bcd60e51b8152600401610b619061367b565b60005b82811015610d1d57600f600085858481811061135c5761135c6136e6565b9050602002016020810190611371919061336c565b6001600160a01b0316815260208101919091526040016000205460ff166113e75781600960008686858181106113a9576113a96136e6565b90506020020160208101906113be919061336c565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b6113f08161373f565b905061133e565b6000546001600160a01b031633146114215760405162461bcd60e51b8152600401610b619061367b565b601d839055601e829055601f81905560208490556021546101f4906114549061144e878186818a8a612083565b90612083565b1115610d1d5760405162461bcd60e51b81526020600482015260196024820152784d757374206b6565702074617865732062656c6f772035302560381b6044820152606401610b61565b6001600160a01b0381166000908152600e602052604081205460ff16156114db57506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260066020526040902054610ba290610dae565b6000546001600160a01b031633146115275760405162461bcd60e51b8152600401610b619061367b565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461159b5760405162461bcd60e51b8152600401610b619061367b565b60005b8181101561160b576001600c60008585858181106115be576115be6136e6565b90506020020160208101906115d3919061336c565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556116048161373f565b905061159e565b505050565b6000546001600160a01b0316331461163a5760405162461bcd60e51b8152600401610b619061367b565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610daa573d6000803e3d6000fd5b6000546001600160a01b031633146116995760405162461bcd60e51b8152600401610b619061367b565b60005b8181101561160b576001600f60008585858181106116bc576116bc6136e6565b90506020020160208101906116d1919061336c565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556117028161373f565b905061169c565b6000546001600160a01b031633146117335760405162461bcd60e51b8152600401610b619061367b565b80826013546117429190613758565b61174c9190613777565b6028555050565b606060178054610ab490613641565b6000546001600160a01b0316331461178c5760405162461bcd60e51b8152600401610b619061367b565b6107d182106117f45760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d323030302061646472657373657360901b6064820152608401610b61565b601254600090839061181190600160a01b900460ff16600a61387d565b61181b9084613758565b6118259190613758565b9050806118318661149e565b101561187f5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b61565b60005b838110156118ee576118dc868686848181106118a0576118a06136e6565b90506020020160208101906118b5919061336c565b6012546118cd90600160a01b900460ff16600a61387d565b6118d79087613758565b612206565b806118e68161373f565b915050611882565b505050505050565b6000546001600160a01b031633146119205760405162461bcd60e51b8152600401610b619061367b565b6019849055601b839055601a829055601c8590556025859055602284905560248290556023839055602181905561195d8161144e84818888612083565b6026819055601c546101f49161197291612083565b11156119bc5760405162461bcd60e51b81526020600482015260196024820152784d757374206b6565702074617865732062656c6f772035302560381b6044820152606401610b61565b5050505050565b6000610b9e3384610c02856040518060600160405280602581526020016139b9602591393360009081526008602090815260408083206001600160a01b038d16845290915290205491906126fc565b6000610b9e338484612206565b6000546001600160a01b03163314611a495760405162461bcd60e51b8152600401610b619061367b565b6001600160a01b03166000908152601160205260409020805460ff19166001179055565b6000546001600160a01b03163314611a975760405162461bcd60e51b8152600401610b619061367b565b600380546001600160a01b039384166001600160a01b03199182161790915560058054929093169116179055565b6000546001600160a01b03163314611aef5760405162461bcd60e51b8152600401610b619061367b565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000546001600160a01b03163314611b3a5760405162461bcd60e51b8152600401610b619061367b565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba3919061388c565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bf0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c14919061388c565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611c5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c83919061388c565b90506001600160a01b038116611dfc57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf5919061388c565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d66919061388c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611db3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd7919061388c565b602a80546001600160a01b0319166001600160a01b0392909216919091179055611e18565b602a80546001600160a01b0319166001600160a01b0383161790555b50602980546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314611e665760405162461bcd60e51b8152600401610b619061367b565b6001600160a01b03166000908152601160205260409020805460ff19169055565b6000546001600160a01b03163314611eb15760405162461bcd60e51b8152600401610b619061367b565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b03163314611eff5760405162461bcd60e51b8152600401610b619061367b565b6001600160a01b038116611f645760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b61565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e2b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506127ea565b60008260000361201357506000610ba2565b600061201f8385613758565b90508261202c8583613777565b14610e2b5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b61565b60008061209083856138a9565b905083811015610e2b5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b61565b6001600160a01b0383166121445760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b61565b6001600160a01b0382166121a55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b61565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661226a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b61565b6001600160a01b0382166122cc5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b61565b6000811161232e5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b61565b6001600160a01b03821660009081526009602052604090205460ff161561238f5760405162461bcd60e51b815260206004820152601560248201527414dbdc9c9e48109d59191e4b0811d95d0814995add605a1b6044820152606401610b61565b6001600160a01b03831660009081526009602052604090205460ff16156123f05760405162461bcd60e51b815260206004820152601560248201527414dbdc9c9e48109d59191e4b0811d95d0814995add605a1b6044820152606401610b61565b6001600160a01b03831660009081526011602052604090205460ff1661246057602a54600160a81b900460ff166124605760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610b61565b602a546000906001600160a01b038581169116148061248c5750602a546001600160a01b038481169116145b80156124d457506001600160a01b0384166000908152600c602052604090205460ff16806124d257506001600160a01b0383166000908152600c602052604090205460ff165b155b156124dd575060015b6000600b5411801561252c57506001600160a01b0383166000908152600d602052604090205460ff1615801561252c57506001600160a01b03841660009081526011602052604090205460ff16155b156125a05760185461253d8461149e565b61254790846138a9565b11156125a05760405162461bcd60e51b815260206004820152602260248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d6974604482015261195960f21b6064820152608401610b61565b602654602755601c54602555602a54600160a81b900460ff1680156125d25750602a546001600160a01b038481169116145b156125fe576125f4601f5461144e601e54601d5461208390919063ffffffff16565b6027556020546025555b6000600b5411801561261e575043600a54600b5461261c91906138a9565b115b15612647576001600160a01b0383166000908152600960205260409020805460ff191660011790555b602a54600160b01b900460ff161561268a57602a54600160a81b900460ff16801561267f5750602a546001600160a01b038581169116145b1561268a5760006027555b602a54600160a01b900460ff161580156126ad5750602a54600160a81b900460ff165b80156126c65750602a546001600160a01b038481169116145b156126f05760006126d63061149e565b905060285481106126ee57506028546126ee81612818565b505b610d1d84848484612977565b600081848411156127205760405162461bcd60e51b8152600401610b6191906132ba565b50600061272d8486613712565b95945050505050565b6000806000612743612aa3565b90925090506127528282611fbf565b9250505090565b60008060008060008060008060006127708a612c25565b925092509250600080600061278e8d8686612789612736565b612c67565b919f909e50909c50959a5093985091965092945050505050565b6000610e2b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506126fc565b6000818361280b5760405162461bcd60e51b8152600401610b6191906132ba565b50600061272d8486613777565b602a805460ff60a01b1916600160a01b17905560265460225460009161284e916002916128489182908790612001565b90611fbf565b9050600061285c83836127a8565b905061286781612cb7565b60225447906000906128879061287e906002611fbf565b602654906127a8565b905060006128a96002612848846128486022548861200190919063ffffffff16565b905060006128c6836128486024548761200190919063ffffffff16565b905060006128e3846128486023548861200190919063ffffffff16565b90506000612900856128486021548961200190919063ffffffff16565b905047801561294e576003546129209084906001600160a01b0316612e4a565b6004546129379083906001600160a01b0316612e4a565b60055461294e9085906001600160a01b0316612e4a565b881561295e5761295e8986612e80565b5050602a805460ff60a01b191690555050505050505050565b6025546027548261298d57600060258190556027555b6001600160a01b0386166000908152600e602052604090205460ff1680156129ce57506001600160a01b0385166000908152600e602052604090205460ff16155b156129e3576129de868686612f4e565b612a8f565b6001600160a01b0386166000908152600e602052604090205460ff16158015612a2457506001600160a01b0385166000908152600e602052604090205460ff165b15612a34576129de868686613074565b6001600160a01b0386166000908152600e602052604090205460ff168015612a7457506001600160a01b0385166000908152600e602052604090205460ff165b15612a84576129de86868661311d565b612a8f868686613190565b826118ee5760259190915560275550505050565b6014546013546000918291825b601054811015612bf557826006600060108481548110612ad257612ad26136e6565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612b3d5750816007600060108481548110612b1657612b166136e6565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612b5357601454601354945094505050509091565b612b996006600060108481548110612b6d57612b6d6136e6565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906127a8565b9250612be16007600060108481548110612bb557612bb56136e6565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906127a8565b915080612bed8161373f565b915050612ab0565b50601354601454612c0591611fbf565b821015612c1c576014546013549350935050509091565b90939092509050565b600080600080612c34856131d4565b90506000612c41866131f1565b90506000612c5982612c5389866127a8565b906127a8565b979296509094509092505050565b6000808080612c768886612001565b90506000612c848887612001565b90506000612c928888612001565b90506000612ca482612c5386866127a8565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612cec57612cec6136e6565b6001600160a01b03928316602091820292909201810191909152602954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d69919061388c565b81600181518110612d7c57612d7c6136e6565b6001600160a01b039283166020918202929092010152602954612da291309116846120e2565b60295460405163791ac94760e01b81526001600160a01b039091169063791ac94790612ddb908590600090869030904290600401613905565b600060405180830381600087803b158015612df557600080fd5b505af1158015612e09573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612e3e929190613941565b60405180910390a15050565b6040516001600160a01b0382169083156108fc029084906000818181858888f1935050505015801561160b573d6000803e3d6000fd5b602954612e989030906001600160a01b0316846120e2565b6029546001600160a01b031663f305d719823085600080612ec16000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612f29573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906119bc9190613962565b600080600080600080612f6087612759565b6001600160a01b038f16600090815260076020526040902054959b50939950919750955093509150612f9290886127a8565b6001600160a01b038a16600090815260076020908152604080832093909355600690522054612fc190876127a8565b6001600160a01b03808b1660009081526006602052604080822093909355908a1681522054612ff09086612083565b6001600160a01b0389166000908152600660205260409020556130128161320e565b61301c8483613296565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161306191815260200190565b60405180910390a3505050505050505050565b60008060008060008061308687612759565b6001600160a01b038f16600090815260066020526040902054959b509399509197509550935091506130b890876127a8565b6001600160a01b03808b16600090815260066020908152604080832094909455918b168152600790915220546130ee9084612083565b6001600160a01b038916600090815260076020908152604080832093909355600690522054612ff09086612083565b60008060008060008061312f87612759565b6001600160a01b038f16600090815260076020526040902054959b5093995091975095509350915061316190886127a8565b6001600160a01b038a166000908152600760209081526040808320939093556006905220546130b890876127a8565b6000806000806000806131a287612759565b6001600160a01b038f16600090815260066020526040902054959b50939950919750955093509150612fc190876127a8565b6000610ba26103e86128486025548561200190919063ffffffff16565b6000610ba26103e86128486027548561200190919063ffffffff16565b6000613218612736565b905060006132268383612001565b306000908152600660205260409020549091506132439082612083565b30600090815260066020908152604080832093909355600e9052205460ff161561160b57306000908152600760205260409020546132819084612083565b30600090815260076020526040902055505050565b6014546132a390836127a8565b6014556015546132b39082612083565b6015555050565b600060208083528351808285015260005b818110156132e7578581018301518582016040015282016132cb565b818111156132f9576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561332157600080fd5b5035919050565b6001600160a01b038116811461333d57600080fd5b50565b6000806040838503121561335357600080fd5b823561335e81613328565b946020939093013593505050565b60006020828403121561337e57600080fd5b8135610e2b81613328565b60008060006060848603121561339e57600080fd5b83356133a981613328565b925060208401356133b981613328565b929592945050506040919091013590565b600080604083850312156133dd57600080fd5b82356133e881613328565b915060208301356133f881613328565b809150509250929050565b801515811461333d57600080fd5b6000806040838503121561342457600080fd5b823561335e81613403565b6000806040838503121561344257600080fd5b8235915060208301356133f881613403565b60006020828403121561346657600080fd5b8135610e2b81613403565b60008083601f84011261348357600080fd5b50813567ffffffffffffffff81111561349b57600080fd5b6020830191508360208260051b85010111156134b657600080fd5b9250929050565b6000806000604084860312156134d257600080fd5b833567ffffffffffffffff8111156134e957600080fd5b6134f586828701613471565b909450925050602084013561350981613403565b809150509250925092565b6000806000806080858703121561352a57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806020838503121561355957600080fd5b823567ffffffffffffffff81111561357057600080fd5b61357c85828601613471565b90969095509350505050565b6000806040838503121561359b57600080fd5b50508035926020909101359150565b600080600080606085870312156135c057600080fd5b84356135cb81613328565b9350602085013567ffffffffffffffff8111156135e757600080fd5b6135f387828801613471565b9598909750949560400135949350505050565b600080600080600060a0868803121561361e57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600181811c9082168061365557607f821691505b60208210810361367557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156136c257600080fd5b5051919050565b6000602082840312156136db57600080fd5b8151610e2b81613403565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015613724576137246136fc565b500390565b634e487b7160e01b600052603160045260246000fd5b600060018201613751576137516136fc565b5060010190565b6000816000190483118215151615613772576137726136fc565b500290565b60008261379457634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156137d45781600019048211156137ba576137ba6136fc565b808516156137c757918102915b93841c939080029061379e565b509250929050565b6000826137eb57506001610ba2565b816137f857506000610ba2565b816001811461380e576002811461381857613834565b6001915050610ba2565b60ff841115613829576138296136fc565b50506001821b610ba2565b5060208310610133831016604e8410600b8410161715613857575081810a610ba2565b6138618383613799565b8060001904821115613875576138756136fc565b029392505050565b6000610e2b60ff8416836137dc565b60006020828403121561389e57600080fd5b8151610e2b81613328565b600082198211156138bc576138bc6136fc565b500190565b600081518084526020808501945080840160005b838110156138fa5781516001600160a01b0316875295820195908201906001016138d5565b509495945050505050565b85815284602082015260a06040820152600061392460a08301866138c1565b6001600160a01b0394909416606083015250608001529392505050565b82815260406020820152600061395a60408301846138c1565b949350505050565b60008060006060848603121561397757600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122094b342f2a89cbfb00593f03d215d4339fb5b89e1e88399898972f4451724175464736f6c634300080d0033

Deployed Bytecode

0x60806040526004361061037a5760003560e01c806371b9189c116101d1578063b6a5d7de11610102578063dd62ed3e116100a0578063f259c57b1161006f578063f259c57b14610a2e578063f2fde38b14610a4e578063fabb0b4f14610a6e578063ffb54a9914610a8457600080fd5b8063dd62ed3e14610988578063ea2f0b37146109ce578063eafb5a3c146109ee578063f0b37c0414610a0e57600080fd5b8063c8607952116100dc578063c860795214610926578063c9cf77891461093c578063d3f6a15714610952578063dc44b6a01461097257600080fd5b8063b6a5d7de146108da578063bf56b371146108fa578063c5d241891461091057600080fd5b80638da5cb5b1161016f578063a1ac727f11610149578063a1ac727f1461085a578063a3b84b6b1461087a578063a457c2d71461089a578063a9059cbb146108ba57600080fd5b80638da5cb5b146108075780638f4590d21461082557806395d89b411461084557600080fd5b806378109e54116101ab57806378109e541461078257806384530c461461079857806388790a68146107b857806388f82020146107ce57600080fd5b806371b9189c1461072c578063743942b61461074c5780637598f8bc1461076c57600080fd5b8063313ce567116102ab5780634b01547f11610249578063620158521161022357806362015852146106c15780636ce37fa0146106d757806370a08231146106f7578063715018a61461071757600080fd5b80634b01547f1461066157806352390c02146106815780635d54c0af146106a157600080fd5b80633bd5d173116102855780633bd5d173146105eb578063401aa5c01461060b5780634549b0391461062157806349bd5a5e1461064157600080fd5b8063313ce5671461057f5780633685d419146105ab57806339509351146105cb57600080fd5b806318160ddd116103185780632691bc80116102f25780632691bc80146104fe5780632d4103d61461051f5780632d8381191461053f5780632dd5efe71461055f57600080fd5b806318160ddd146104a957806323b872dd146104be57806325b86edf146104de57600080fd5b8063095ea7b311610354578063095ea7b3146103f35780630f3a325f1461042357806313114a9d1461045c5780631694505e1461047157600080fd5b80630445b6671461038657806306fdde03146103af57806309302dc6146103d157600080fd5b3661038157005b600080fd5b34801561039257600080fd5b5061039c60285481565b6040519081526020015b60405180910390f35b3480156103bb57600080fd5b506103c4610aa5565b6040516103a691906132ba565b3480156103dd57600080fd5b506103f16103ec36600461330f565b610b37565b005b3480156103ff57600080fd5b5061041361040e366004613340565b610b91565b60405190151581526020016103a6565b34801561042f57600080fd5b5061041361043e36600461336c565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561046857600080fd5b5060155461039c565b34801561047d57600080fd5b50602954610491906001600160a01b031681565b6040516001600160a01b0390911681526020016103a6565b3480156104b557600080fd5b5060135461039c565b3480156104ca57600080fd5b506104136104d9366004613389565b610ba8565b3480156104ea57600080fd5b506103f16104f93660046133ca565b610c11565b34801561050a57600080fd5b50602a5461041390600160b01b900460ff1681565b34801561052b57600080fd5b506103f161053a366004613411565b610d23565b34801561054b57600080fd5b5061039c61055a36600461330f565b610dae565b34801561056b57600080fd5b506103f161057a36600461336c565b610e32565b34801561058b57600080fd5b50601254600160a01b900460ff1660405160ff90911681526020016103a6565b3480156105b757600080fd5b506103f16105c636600461336c565b610e80565b3480156105d757600080fd5b506104136105e6366004613340565b611032565b3480156105f757600080fd5b506103f161060636600461330f565b611068565b34801561061757600080fd5b5061039c601c5481565b34801561062d57600080fd5b5061039c61063c36600461342f565b611152565b34801561064d57600080fd5b50602a54610491906001600160a01b031681565b34801561066d57600080fd5b506103f161067c366004613454565b6111df565b34801561068d57600080fd5b506103f161069c36600461336c565b611227565b3480156106ad57600080fd5b506103f16106bc3660046134bd565b611311565b3480156106cd57600080fd5b5061039c601a5481565b3480156106e357600080fd5b506103f16106f2366004613514565b6113f7565b34801561070357600080fd5b5061039c61071236600461336c565b61149e565b34801561072357600080fd5b506103f16114fd565b34801561073857600080fd5b506103f1610747366004613546565b611571565b34801561075857600080fd5b506103f161076736600461336c565b611610565b34801561077857600080fd5b5061039c60205481565b34801561078e57600080fd5b5061039c60185481565b3480156107a457600080fd5b506103f16107b3366004613546565b61166f565b3480156107c457600080fd5b5061039c601d5481565b3480156107da57600080fd5b506104136107e936600461336c565b6001600160a01b03166000908152600e602052604090205460ff1690565b34801561081357600080fd5b506000546001600160a01b0316610491565b34801561083157600080fd5b506103f1610840366004613588565b611709565b34801561085157600080fd5b506103c4611753565b34801561086657600080fd5b506103f16108753660046135aa565b611762565b34801561088657600080fd5b506103f1610895366004613606565b6118f6565b3480156108a657600080fd5b506104136108b5366004613340565b6119c3565b3480156108c657600080fd5b506104136108d5366004613340565b611a12565b3480156108e657600080fd5b506103f16108f536600461336c565b611a1f565b34801561090657600080fd5b5061039c600b5481565b34801561091c57600080fd5b5061039c601b5481565b34801561093257600080fd5b5061039c601e5481565b34801561094857600080fd5b5061039c601f5481565b34801561095e57600080fd5b506103f161096d3660046133ca565b611a6d565b34801561097e57600080fd5b5061039c60195481565b34801561099457600080fd5b5061039c6109a33660046133ca565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b3480156109da57600080fd5b506103f16109e936600461336c565b611ac5565b3480156109fa57600080fd5b506103f1610a0936600461336c565b611b10565b348015610a1a57600080fd5b506103f1610a2936600461336c565b611e3c565b348015610a3a57600080fd5b506103f1610a4936600461336c565b611e87565b348015610a5a57600080fd5b506103f1610a6936600461336c565b611ed5565b348015610a7a57600080fd5b5061039c600a5481565b348015610a9057600080fd5b50602a5461041390600160a81b900460ff1681565b606060168054610ab490613641565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae090613641565b8015610b2d5780601f10610b0257610100808354040283529160200191610b2d565b820191906000526020600020905b815481529060010190602001808311610b1057829003601f168201915b5050505050905090565b6000546001600160a01b03163314610b6a5760405162461bcd60e51b8152600401610b619061367b565b60405180910390fd5b610b8b81610b856103e8601354611fbf90919063ffffffff16565b90612001565b60185550565b6000610b9e3384846120e2565b5060015b92915050565b6000610bb5848484612206565b610c078433610c0285604051806060016040528060288152602001613991602891396001600160a01b038a16600090815260086020908152604080832033845290915290205491906126fc565b6120e2565b5060019392505050565b6000546001600160a01b03163314610c3b5760405162461bcd60e51b8152600401610b619061367b565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca691906136b0565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb906044016020604051808303816000875af1158015610cf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1d91906136c9565b50505050565b6000546001600160a01b03163314610d4d5760405162461bcd60e51b8152600401610b619061367b565b602a805460ff60a81b1916600160a81b84151502179055610d6d30611227565b602a54610d82906001600160a01b0316611227565b602a54600160a81b900460ff168015610d9b5750600b54155b15610daa5743600b55600a8190555b5050565b6000601454821115610e155760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b61565b6000610e1f612736565b9050610e2b8382611fbf565b9392505050565b6000546001600160a01b03163314610e5c5760405162461bcd60e51b8152600401610b619061367b565b6001600160a01b03166000908152600d60205260409020805460ff19166001179055565b6000546001600160a01b03163314610eaa5760405162461bcd60e51b8152600401610b619061367b565b6001600160a01b0381166000908152600e602052604090205460ff16610f125760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b61565b60005b601054811015610daa57816001600160a01b031660108281548110610f3c57610f3c6136e6565b6000918252602090912001546001600160a01b0316036110205760108054610f6690600190613712565b81548110610f7657610f766136e6565b600091825260209091200154601080546001600160a01b039092169183908110610fa257610fa26136e6565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600e90925220805460ff191690556010805480610ffa57610ffa613729565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061102a8161373f565b915050610f15565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610b9e918590610c029086612083565b336000818152600e602052604090205460ff16156110dd5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610b61565b60006110e883612759565b505050506001600160a01b038416600090815260066020526040902054919250611114919050826127a8565b6001600160a01b03831660009081526006602052604090205560145461113a90826127a8565b60145560155461114a9084612083565b601555505050565b60006013548311156111a65760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b61565b816111c55760006111b684612759565b50939550610ba2945050505050565b60006111d084612759565b50929550610ba2945050505050565b6000546001600160a01b031633146112095760405162461bcd60e51b8152600401610b619061367b565b602a8054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b031633146112515760405162461bcd60e51b8152600401610b619061367b565b6001600160a01b038116600090815260066020526040902054156112ab576001600160a01b03811660009081526006602052604090205461129190610dae565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600e60205260408120805460ff191660019081179091556010805491820181559091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319169091179055565b6000546001600160a01b0316331461133b5760405162461bcd60e51b8152600401610b619061367b565b60005b82811015610d1d57600f600085858481811061135c5761135c6136e6565b9050602002016020810190611371919061336c565b6001600160a01b0316815260208101919091526040016000205460ff166113e75781600960008686858181106113a9576113a96136e6565b90506020020160208101906113be919061336c565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b6113f08161373f565b905061133e565b6000546001600160a01b031633146114215760405162461bcd60e51b8152600401610b619061367b565b601d839055601e829055601f81905560208490556021546101f4906114549061144e878186818a8a612083565b90612083565b1115610d1d5760405162461bcd60e51b81526020600482015260196024820152784d757374206b6565702074617865732062656c6f772035302560381b6044820152606401610b61565b6001600160a01b0381166000908152600e602052604081205460ff16156114db57506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260066020526040902054610ba290610dae565b6000546001600160a01b031633146115275760405162461bcd60e51b8152600401610b619061367b565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461159b5760405162461bcd60e51b8152600401610b619061367b565b60005b8181101561160b576001600c60008585858181106115be576115be6136e6565b90506020020160208101906115d3919061336c565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556116048161373f565b905061159e565b505050565b6000546001600160a01b0316331461163a5760405162461bcd60e51b8152600401610b619061367b565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610daa573d6000803e3d6000fd5b6000546001600160a01b031633146116995760405162461bcd60e51b8152600401610b619061367b565b60005b8181101561160b576001600f60008585858181106116bc576116bc6136e6565b90506020020160208101906116d1919061336c565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556117028161373f565b905061169c565b6000546001600160a01b031633146117335760405162461bcd60e51b8152600401610b619061367b565b80826013546117429190613758565b61174c9190613777565b6028555050565b606060178054610ab490613641565b6000546001600160a01b0316331461178c5760405162461bcd60e51b8152600401610b619061367b565b6107d182106117f45760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d323030302061646472657373657360901b6064820152608401610b61565b601254600090839061181190600160a01b900460ff16600a61387d565b61181b9084613758565b6118259190613758565b9050806118318661149e565b101561187f5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b61565b60005b838110156118ee576118dc868686848181106118a0576118a06136e6565b90506020020160208101906118b5919061336c565b6012546118cd90600160a01b900460ff16600a61387d565b6118d79087613758565b612206565b806118e68161373f565b915050611882565b505050505050565b6000546001600160a01b031633146119205760405162461bcd60e51b8152600401610b619061367b565b6019849055601b839055601a829055601c8590556025859055602284905560248290556023839055602181905561195d8161144e84818888612083565b6026819055601c546101f49161197291612083565b11156119bc5760405162461bcd60e51b81526020600482015260196024820152784d757374206b6565702074617865732062656c6f772035302560381b6044820152606401610b61565b5050505050565b6000610b9e3384610c02856040518060600160405280602581526020016139b9602591393360009081526008602090815260408083206001600160a01b038d16845290915290205491906126fc565b6000610b9e338484612206565b6000546001600160a01b03163314611a495760405162461bcd60e51b8152600401610b619061367b565b6001600160a01b03166000908152601160205260409020805460ff19166001179055565b6000546001600160a01b03163314611a975760405162461bcd60e51b8152600401610b619061367b565b600380546001600160a01b039384166001600160a01b03199182161790915560058054929093169116179055565b6000546001600160a01b03163314611aef5760405162461bcd60e51b8152600401610b619061367b565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000546001600160a01b03163314611b3a5760405162461bcd60e51b8152600401610b619061367b565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba3919061388c565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bf0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c14919061388c565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611c5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c83919061388c565b90506001600160a01b038116611dfc57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf5919061388c565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d66919061388c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611db3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd7919061388c565b602a80546001600160a01b0319166001600160a01b0392909216919091179055611e18565b602a80546001600160a01b0319166001600160a01b0383161790555b50602980546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314611e665760405162461bcd60e51b8152600401610b619061367b565b6001600160a01b03166000908152601160205260409020805460ff19169055565b6000546001600160a01b03163314611eb15760405162461bcd60e51b8152600401610b619061367b565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b03163314611eff5760405162461bcd60e51b8152600401610b619061367b565b6001600160a01b038116611f645760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b61565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e2b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506127ea565b60008260000361201357506000610ba2565b600061201f8385613758565b90508261202c8583613777565b14610e2b5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b61565b60008061209083856138a9565b905083811015610e2b5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b61565b6001600160a01b0383166121445760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b61565b6001600160a01b0382166121a55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b61565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661226a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b61565b6001600160a01b0382166122cc5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b61565b6000811161232e5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b61565b6001600160a01b03821660009081526009602052604090205460ff161561238f5760405162461bcd60e51b815260206004820152601560248201527414dbdc9c9e48109d59191e4b0811d95d0814995add605a1b6044820152606401610b61565b6001600160a01b03831660009081526009602052604090205460ff16156123f05760405162461bcd60e51b815260206004820152601560248201527414dbdc9c9e48109d59191e4b0811d95d0814995add605a1b6044820152606401610b61565b6001600160a01b03831660009081526011602052604090205460ff1661246057602a54600160a81b900460ff166124605760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610b61565b602a546000906001600160a01b038581169116148061248c5750602a546001600160a01b038481169116145b80156124d457506001600160a01b0384166000908152600c602052604090205460ff16806124d257506001600160a01b0383166000908152600c602052604090205460ff165b155b156124dd575060015b6000600b5411801561252c57506001600160a01b0383166000908152600d602052604090205460ff1615801561252c57506001600160a01b03841660009081526011602052604090205460ff16155b156125a05760185461253d8461149e565b61254790846138a9565b11156125a05760405162461bcd60e51b815260206004820152602260248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d6974604482015261195960f21b6064820152608401610b61565b602654602755601c54602555602a54600160a81b900460ff1680156125d25750602a546001600160a01b038481169116145b156125fe576125f4601f5461144e601e54601d5461208390919063ffffffff16565b6027556020546025555b6000600b5411801561261e575043600a54600b5461261c91906138a9565b115b15612647576001600160a01b0383166000908152600960205260409020805460ff191660011790555b602a54600160b01b900460ff161561268a57602a54600160a81b900460ff16801561267f5750602a546001600160a01b038581169116145b1561268a5760006027555b602a54600160a01b900460ff161580156126ad5750602a54600160a81b900460ff165b80156126c65750602a546001600160a01b038481169116145b156126f05760006126d63061149e565b905060285481106126ee57506028546126ee81612818565b505b610d1d84848484612977565b600081848411156127205760405162461bcd60e51b8152600401610b6191906132ba565b50600061272d8486613712565b95945050505050565b6000806000612743612aa3565b90925090506127528282611fbf565b9250505090565b60008060008060008060008060006127708a612c25565b925092509250600080600061278e8d8686612789612736565b612c67565b919f909e50909c50959a5093985091965092945050505050565b6000610e2b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506126fc565b6000818361280b5760405162461bcd60e51b8152600401610b6191906132ba565b50600061272d8486613777565b602a805460ff60a01b1916600160a01b17905560265460225460009161284e916002916128489182908790612001565b90611fbf565b9050600061285c83836127a8565b905061286781612cb7565b60225447906000906128879061287e906002611fbf565b602654906127a8565b905060006128a96002612848846128486022548861200190919063ffffffff16565b905060006128c6836128486024548761200190919063ffffffff16565b905060006128e3846128486023548861200190919063ffffffff16565b90506000612900856128486021548961200190919063ffffffff16565b905047801561294e576003546129209084906001600160a01b0316612e4a565b6004546129379083906001600160a01b0316612e4a565b60055461294e9085906001600160a01b0316612e4a565b881561295e5761295e8986612e80565b5050602a805460ff60a01b191690555050505050505050565b6025546027548261298d57600060258190556027555b6001600160a01b0386166000908152600e602052604090205460ff1680156129ce57506001600160a01b0385166000908152600e602052604090205460ff16155b156129e3576129de868686612f4e565b612a8f565b6001600160a01b0386166000908152600e602052604090205460ff16158015612a2457506001600160a01b0385166000908152600e602052604090205460ff165b15612a34576129de868686613074565b6001600160a01b0386166000908152600e602052604090205460ff168015612a7457506001600160a01b0385166000908152600e602052604090205460ff165b15612a84576129de86868661311d565b612a8f868686613190565b826118ee5760259190915560275550505050565b6014546013546000918291825b601054811015612bf557826006600060108481548110612ad257612ad26136e6565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612b3d5750816007600060108481548110612b1657612b166136e6565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612b5357601454601354945094505050509091565b612b996006600060108481548110612b6d57612b6d6136e6565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906127a8565b9250612be16007600060108481548110612bb557612bb56136e6565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906127a8565b915080612bed8161373f565b915050612ab0565b50601354601454612c0591611fbf565b821015612c1c576014546013549350935050509091565b90939092509050565b600080600080612c34856131d4565b90506000612c41866131f1565b90506000612c5982612c5389866127a8565b906127a8565b979296509094509092505050565b6000808080612c768886612001565b90506000612c848887612001565b90506000612c928888612001565b90506000612ca482612c5386866127a8565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612cec57612cec6136e6565b6001600160a01b03928316602091820292909201810191909152602954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d69919061388c565b81600181518110612d7c57612d7c6136e6565b6001600160a01b039283166020918202929092010152602954612da291309116846120e2565b60295460405163791ac94760e01b81526001600160a01b039091169063791ac94790612ddb908590600090869030904290600401613905565b600060405180830381600087803b158015612df557600080fd5b505af1158015612e09573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612e3e929190613941565b60405180910390a15050565b6040516001600160a01b0382169083156108fc029084906000818181858888f1935050505015801561160b573d6000803e3d6000fd5b602954612e989030906001600160a01b0316846120e2565b6029546001600160a01b031663f305d719823085600080612ec16000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612f29573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906119bc9190613962565b600080600080600080612f6087612759565b6001600160a01b038f16600090815260076020526040902054959b50939950919750955093509150612f9290886127a8565b6001600160a01b038a16600090815260076020908152604080832093909355600690522054612fc190876127a8565b6001600160a01b03808b1660009081526006602052604080822093909355908a1681522054612ff09086612083565b6001600160a01b0389166000908152600660205260409020556130128161320e565b61301c8483613296565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161306191815260200190565b60405180910390a3505050505050505050565b60008060008060008061308687612759565b6001600160a01b038f16600090815260066020526040902054959b509399509197509550935091506130b890876127a8565b6001600160a01b03808b16600090815260066020908152604080832094909455918b168152600790915220546130ee9084612083565b6001600160a01b038916600090815260076020908152604080832093909355600690522054612ff09086612083565b60008060008060008061312f87612759565b6001600160a01b038f16600090815260076020526040902054959b5093995091975095509350915061316190886127a8565b6001600160a01b038a166000908152600760209081526040808320939093556006905220546130b890876127a8565b6000806000806000806131a287612759565b6001600160a01b038f16600090815260066020526040902054959b50939950919750955093509150612fc190876127a8565b6000610ba26103e86128486025548561200190919063ffffffff16565b6000610ba26103e86128486027548561200190919063ffffffff16565b6000613218612736565b905060006132268383612001565b306000908152600660205260409020549091506132439082612083565b30600090815260066020908152604080832093909355600e9052205460ff161561160b57306000908152600760205260409020546132819084612083565b30600090815260076020526040902055505050565b6014546132a390836127a8565b6014556015546132b39082612083565b6015555050565b600060208083528351808285015260005b818110156132e7578581018301518582016040015282016132cb565b818111156132f9576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561332157600080fd5b5035919050565b6001600160a01b038116811461333d57600080fd5b50565b6000806040838503121561335357600080fd5b823561335e81613328565b946020939093013593505050565b60006020828403121561337e57600080fd5b8135610e2b81613328565b60008060006060848603121561339e57600080fd5b83356133a981613328565b925060208401356133b981613328565b929592945050506040919091013590565b600080604083850312156133dd57600080fd5b82356133e881613328565b915060208301356133f881613328565b809150509250929050565b801515811461333d57600080fd5b6000806040838503121561342457600080fd5b823561335e81613403565b6000806040838503121561344257600080fd5b8235915060208301356133f881613403565b60006020828403121561346657600080fd5b8135610e2b81613403565b60008083601f84011261348357600080fd5b50813567ffffffffffffffff81111561349b57600080fd5b6020830191508360208260051b85010111156134b657600080fd5b9250929050565b6000806000604084860312156134d257600080fd5b833567ffffffffffffffff8111156134e957600080fd5b6134f586828701613471565b909450925050602084013561350981613403565b809150509250925092565b6000806000806080858703121561352a57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806020838503121561355957600080fd5b823567ffffffffffffffff81111561357057600080fd5b61357c85828601613471565b90969095509350505050565b6000806040838503121561359b57600080fd5b50508035926020909101359150565b600080600080606085870312156135c057600080fd5b84356135cb81613328565b9350602085013567ffffffffffffffff8111156135e757600080fd5b6135f387828801613471565b9598909750949560400135949350505050565b600080600080600060a0868803121561361e57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600181811c9082168061365557607f821691505b60208210810361367557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156136c257600080fd5b5051919050565b6000602082840312156136db57600080fd5b8151610e2b81613403565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015613724576137246136fc565b500390565b634e487b7160e01b600052603160045260246000fd5b600060018201613751576137516136fc565b5060010190565b6000816000190483118215151615613772576137726136fc565b500290565b60008261379457634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156137d45781600019048211156137ba576137ba6136fc565b808516156137c757918102915b93841c939080029061379e565b509250929050565b6000826137eb57506001610ba2565b816137f857506000610ba2565b816001811461380e576002811461381857613834565b6001915050610ba2565b60ff841115613829576138296136fc565b50506001821b610ba2565b5060208310610133831016604e8410600b8410161715613857575081810a610ba2565b6138618383613799565b8060001904821115613875576138756136fc565b029392505050565b6000610e2b60ff8416836137dc565b60006020828403121561389e57600080fd5b8151610e2b81613328565b600082198211156138bc576138bc6136fc565b500190565b600081518084526020808501945080840160005b838110156138fa5781516001600160a01b0316875295820195908201906001016138d5565b509495945050505050565b85815284602082015260a06040820152600061392460a08301866138c1565b6001600160a01b0394909416606083015250608001529392505050565b82815260406020820152600061395a60408301846138c1565b949350505050565b60008060006060848603121561397757600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122094b342f2a89cbfb00593f03d215d4339fb5b89e1e88399898972f4451724175464736f6c634300080d0033

Deployed Bytecode Sourcemap

15853:24161:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18235:56;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;18235:56:0;;;;;;;;20639:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;37574:175::-;;;;;;;;;;-1:-1:-1;37574:175:0;;;;;:::i;:::-;;:::i;:::-;;21551:161;;;;;;;;;;-1:-1:-1;21551:161:0;;;;;:::i;:::-;;:::i;:::-;;;1604:14:1;;1597:22;1579:41;;1567:2;1552:18;21551:161:0;1439:187:1;36645:106:0;;;;;;;;;;-1:-1:-1;36645:106:0;;;;;:::i;:::-;-1:-1:-1;;;;;36725:18:0;36701:4;36725:18;;;:9;:18;;;;;;;;;36645:106;22672:87;;;;;;;;;;-1:-1:-1;22741:10:0;;22672:87;;18311:41;;;;;;;;;;-1:-1:-1;18311:41:0;;;;-1:-1:-1;;;;;18311:41:0;;;;;;-1:-1:-1;;;;;2074:32:1;;;2056:51;;2044:2;2029:18;18311:41:0;1883:230:1;20916:95:0;;;;;;;;;;-1:-1:-1;20996:7:0;;20916:95;;21720:313;;;;;;;;;;-1:-1:-1;21720:313:0;;;;;:::i;:::-;;:::i;37389:177::-;;;;;;;;;;-1:-1:-1;37389:177:0;;;;;:::i;:::-;;:::i;18462:34::-;;;;;;;;;;-1:-1:-1;18462:34:0;;;;-1:-1:-1;;;18462:34:0;;;;;;19643:337;;;;;;;;;;-1:-1:-1;19643:337:0;;;;;:::i;:::-;;:::i;23604:253::-;;;;;;;;;;-1:-1:-1;23604:253:0;;;;;:::i;:::-;;:::i;37757:113::-;;;;;;;;;;-1:-1:-1;37757:113:0;;;;;:::i;:::-;;:::i;20825:83::-;;;;;;;;;;-1:-1:-1;20891:9:0;;-1:-1:-1;;;20891:9:0;;;;20825:83;;3594:4:1;3582:17;;;3564:36;;3552:2;3537:18;20825:83:0;3422:184:1;24136:479:0;;;;;;;;;;-1:-1:-1;24136:479:0;;;;;:::i;:::-;;:::i;22041:218::-;;;;;;;;;;-1:-1:-1;22041:218:0;;;;;:::i;:::-;;:::i;22771:377::-;;;;;;;;;;-1:-1:-1;22771:377:0;;;;;:::i;:::-;;:::i;17561:36::-;;;;;;;;;;;;;;;;23160:436;;;;;;;;;;-1:-1:-1;23160:436:0;;;;;:::i;:::-;;:::i;18359:28::-;;;;;;;;;;-1:-1:-1;18359:28:0;;;;-1:-1:-1;;;;;18359:28:0;;;19994:102;;;;;;;;;;-1:-1:-1;19994:102:0;;;;;:::i;:::-;;:::i;23865:263::-;;;;;;;;;;-1:-1:-1;23865:263:0;;;;;:::i;:::-;;:::i;36763:267::-;;;;;;;;;;-1:-1:-1;36763:267:0;;;;;:::i;:::-;;:::i;17467:29::-;;;;;;;;;;;;;;;;39465:454;;;;;;;;;;-1:-1:-1;39465:454:0;;;;;:::i;:::-;;:::i;21019:198::-;;;;;;;;;;-1:-1:-1;21019:198:0;;;;;:::i;:::-;;:::i;7484:148::-;;;;;;;;;;;;;:::i;35969:198::-;;;;;;;;;;-1:-1:-1;35969:198:0;;;;;:::i;:::-;;:::i;37246:135::-;;;;;;;;;;-1:-1:-1;37246:135:0;;;;;:::i;:::-;;:::i;17749:37::-;;;;;;;;;;;;;;;;17345:58;;;;;;;;;;;;;;;;37042:188;;;;;;;;;;-1:-1:-1;37042:188:0;;;;;:::i;:::-;;:::i;17606:37::-;;;;;;;;;;;;;;;;22544:120;;;;;;;;;;-1:-1:-1;22544:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;22636:20:0;22612:4;22636:20;;;:11;:20;;;;;;;;;22544:120;7259:79;;;;;;;;;;-1:-1:-1;7297:7:0;7324:6;-1:-1:-1;;;;;7324:6:0;7259:79;;37878:178;;;;;;;;;;-1:-1:-1;37878:178:0;;;;;:::i;:::-;;:::i;20730:87::-;;;;;;;;;;;;;:::i;38064:496::-;;;;;;;;;;-1:-1:-1;38064:496:0;;;;;:::i;:::-;;:::i;38568:681::-;;;;;;;;;;-1:-1:-1;38568:681:0;;;;;:::i;:::-;;:::i;22267:269::-;;;;;;;;;;-1:-1:-1;22267:269:0;;;;;:::i;:::-;;:::i;21225:167::-;;;;;;;;;;-1:-1:-1;21225:167:0;;;;;:::i;:::-;;:::i;39258:94::-;;;;;;;;;;-1:-1:-1;39258:94:0;;;;;:::i;:::-;;:::i;16598:29::-;;;;;;;;;;;;;;;;17511:36;;;;;;;;;;;;;;;;17655:37;;;;;;;;;;;;;;;;17705:30;;;;;;;;;;;;;;;;36307:190;;;;;;;;;;-1:-1:-1;36307:190:0;;;;;:::i;:::-;;:::i;17419:36::-;;;;;;;;;;;;;;;;21400:143;;;;;;;;;;-1:-1:-1;21400:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;21508:18:0;;;21481:7;21508:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;21400:143;36185:110;;;;;;;;;;-1:-1:-1;36185:110:0;;;;;:::i;:::-;;:::i;20108:523::-;;;;;;;;;;-1:-1:-1;20108:523:0;;;;;:::i;:::-;;:::i;39360:97::-;;;;;;;;;;-1:-1:-1;39360:97:0;;;;;:::i;:::-;;:::i;35849:112::-;;;;;;;;;;-1:-1:-1;35849:112:0;;;;;:::i;:::-;;:::i;7640:244::-;;;;;;;;;;-1:-1:-1;7640:244:0;;;;;:::i;:::-;;:::i;16562:29::-;;;;;;;;;;;;;;;;18424:31;;;;;;;;;;-1:-1:-1;18424:31:0;;;;-1:-1:-1;;;18424:31:0;;;;;;20639:83;20676:13;20709:5;20702:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20639:83;:::o;37574:175::-;7393:6;;-1:-1:-1;;;;;7393:6:0;1643:10;7393:22;7385:67;;;;-1:-1:-1;;;7385:67:0;;;;;;;:::i;:::-;;;;;;;;;37695:46:::1;37717:23;37695:17;37707:4;37695:7;;:11;;:17;;;;:::i;:::-;:21:::0;::::1;:46::i;:::-;37677:15;:64:::0;-1:-1:-1;37574:175:0:o;21551:161::-;21626:4;21643:39;1643:10;21666:7;21675:6;21643:8;:39::i;:::-;-1:-1:-1;21700:4:0;21551:161;;;;;:::o;21720:313::-;21818:4;21835:36;21845:6;21853:9;21864:6;21835:9;:36::i;:::-;21882:121;21891:6;1643:10;21913:89;21951:6;21913:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21913:19:0;;;;;;:11;:19;;;;;;;;1643:10;21913:33;;;;;;;;;;:37;:89::i;:::-;21882:8;:121::i;:::-;-1:-1:-1;22021:4:0;21720:313;;;;;:::o;37389:177::-;7393:6;;-1:-1:-1;;;;;7393:6:0;1643:10;7393:22;7385:67;;;;-1:-1:-1;;;7385:67:0;;;;;;;:::i;:::-;37490:30:::1;::::0;-1:-1:-1;;;37490:30:0;;37514:4:::1;37490:30;::::0;::::1;2056:51:1::0;37472:15:0::1;::::0;-1:-1:-1;;;;;37490:15:0;::::1;::::0;::::1;::::0;2029:18:1;;37490:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37531:27;::::0;-1:-1:-1;;;37531:27:0;;-1:-1:-1;;;;;9291:32:1;;;37531:27:0::1;::::0;::::1;9273:51:1::0;9340:18;;;9333:34;;;37472:48:0;;-1:-1:-1;37531:14:0;;::::1;::::0;::::1;::::0;9246:18:1;;37531:27:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37461:105;37389:177:::0;;:::o;19643:337::-;7393:6;;-1:-1:-1;;;;;7393:6:0;1643:10;7393:22;7385:67;;;;-1:-1:-1;;;7385:67:0;;;;;;;:::i;:::-;19730:11:::1;:21:::0;;-1:-1:-1;;;;19730:21:0::1;-1:-1:-1::0;;;19730:21:0;::::1;;;;::::0;;19762:32:::1;19788:4;19762:17;:32::i;:::-;19823:13;::::0;19805:32:::1;::::0;-1:-1:-1;;;;;19823:13:0::1;19805:17;:32::i;:::-;19851:11;::::0;-1:-1:-1;;;19851:11:0;::::1;;;:30:::0;::::1;;;-1:-1:-1::0;19866:10:0::1;::::0;:15;19851:30:::1;19848:125;;;19910:12;19897:10;:25:::0;19937:10:::1;:24:::0;;;19848:125:::1;19643:337:::0;;:::o;23604:253::-;23670:7;23709;;23698;:18;;23690:73;;;;-1:-1:-1;;;23690:73:0;;9830:2:1;23690:73:0;;;9812:21:1;9869:2;9849:18;;;9842:30;9908:34;9888:18;;;9881:62;-1:-1:-1;;;9959:18:1;;;9952:40;10009:19;;23690:73:0;9628:406:1;23690:73:0;23774:19;23797:10;:8;:10::i;:::-;23774:33;-1:-1:-1;23825:24:0;:7;23774:33;23825:11;:24::i;:::-;23818:31;23604:253;-1:-1:-1;;;23604:253:0:o;37757:113::-;7393:6;;-1:-1:-1;;;;;7393:6:0;1643:10;7393:22;7385:67;;;;-1:-1:-1;;;7385:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37830:25:0::1;;::::0;;;:18:::1;:25;::::0;;;;:32;;-1:-1:-1;;37830:32:0::1;37858:4;37830:32;::::0;;37757:113::o;24136:479::-;7393:6;;-1:-1:-1;;;;;7393:6:0;1643:10;7393:22;7385:67;;;;-1:-1:-1;;;7385:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24218:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24210:60;;;::::0;-1:-1:-1;;;24210:60:0;;10241:2:1;24210:60:0::1;::::0;::::1;10223:21:1::0;10280:2;10260:18;;;10253:30;10319:29;10299:18;;;10292:57;10366:18;;24210:60:0::1;10039:351:1::0;24210:60:0::1;24286:9;24281:327;24305:9;:16:::0;24301:20;::::1;24281:327;;;24363:7;-1:-1:-1::0;;;;;24347:23:0::1;:9;24357:1;24347:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;24347:12:0::1;:23:::0;24343:254:::1;;24406:9;24416:16:::0;;:20:::1;::::0;24435:1:::1;::::0;24416:20:::1;:::i;:::-;24406:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;24391:9:::1;:12:::0;;-1:-1:-1;;;;;24406:31:0;;::::1;::::0;24401:1;;24391:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;24391:46:0::1;-1:-1:-1::0;;;;;24391:46:0;;::::1;;::::0;;24456:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;24495:11:::1;:20:::0;;;;:28;;-1:-1:-1;;24495:28:0::1;::::0;;24542:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;24542:15:0;;;;;-1:-1:-1;;;;;;24542:15:0::1;::::0;;;;;19643:337;;:::o;24343:254::-:1;24323:3:::0;::::1;::::0;::::1;:::i;:::-;;;;24281:327;;22041:218:::0;1643:10;22129:4;22178:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22178:34:0;;;;;;;;;;22129:4;;22146:83;;22169:7;;22178:50;;22217:10;22178:38;:50::i;22771:377::-;1643:10;22823:14;22872:19;;;:11;:19;;;;;;;;22871:20;22863:77;;;;-1:-1:-1;;;22863:77:0;;11263:2:1;22863:77:0;;;11245:21:1;11302:2;11282:18;;;11275:30;11341:34;11321:18;;;11314:62;-1:-1:-1;;;11392:18:1;;;11385:42;11444:19;;22863:77:0;11061:408:1;22863:77:0;22952:15;22976:19;22987:7;22976:10;:19::i;:::-;-1:-1:-1;;;;;;;;;23024:15:0;;;;;;:7;:15;;;;;;22951:44;;-1:-1:-1;23024:28:0;;:15;-1:-1:-1;22951:44:0;23024:19;:28::i;:::-;-1:-1:-1;;;;;23006:15:0;;;;;;:7;:15;;;;;:46;23073:7;;:20;;23085:7;23073:11;:20::i;:::-;23063:7;:30;23117:10;;:23;;23132:7;23117:14;:23::i;:::-;23104:10;:36;-1:-1:-1;;;22771:377:0:o;23160:436::-;23250:7;23289;;23278;:18;;23270:62;;;;-1:-1:-1;;;23270:62:0;;11676:2:1;23270:62:0;;;11658:21:1;11715:2;11695:18;;;11688:30;11754:33;11734:18;;;11727:61;11805:18;;23270:62:0;11474:355:1;23270:62:0;23348:17;23343:246;;23383:15;23407:19;23418:7;23407:10;:19::i;:::-;-1:-1:-1;23382:44:0;;-1:-1:-1;23441:14:0;;-1:-1:-1;;;;;23441:14:0;23343:246;23490:23;23521:19;23532:7;23521:10;:19::i;:::-;-1:-1:-1;23488:52:0;;-1:-1:-1;23555:22:0;;-1:-1:-1;;;;;23555:22:0;19994:102;7393:6;;-1:-1:-1;;;;;7393:6:0;1643:10;7393:22;7385:67;;;;-1:-1:-1;;;7385:67:0;;;;;;;:::i;:::-;20066:14:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;20066:22:0::1;-1:-1:-1::0;;;;20066:22:0;;::::1;::::0;;;::::1;::::0;;19994:102::o;23865:263::-;7393:6;;-1:-1:-1;;;;;7393:6:0;1643:10;7393:22;7385:67;;;;-1:-1:-1;;;7385:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23944:16:0;::::1;23963:1;23944:16:::0;;;:7:::1;:16;::::0;;;;;:20;23941:108:::1;;-1:-1:-1::0;;;;;24020:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;24000:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;23981:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;23941:108:::1;-1:-1:-1::0;;;;;24059:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;24059:27:0::1;24082:4;24059:27:::0;;::::1;::::0;;;24097:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;24097:23:0::1;::::0;;::::1;::::0;;23865:263::o;36763:267::-;7393:6;;-1:-1:-1;;;;;7393:6:0;1643:10;7393:22;7385:67;;;;-1:-1:-1;;;7385:67:0;;;;;;;:::i;:::-;36863:9:::1;36858:165;36874:20:::0;;::::1;36858:165;;;36920:10;:24;36931:9;;36941:1;36931:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;36920:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;36920:24:0;;::::1;;36916:96;;36990:6;36964:9;:23;36974:9;;36984:1;36974:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;36964:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;36964:23:0;:32;;-1:-1:-1;;36964:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36916:96:::1;36896:3;::::0;::::1;:::i;:::-;;;36858:165;;39465:454:::0;7393:6;;-1:-1:-1;;;;;7393:6:0;1643:10;7393:22;7385:67;;;;-1:-1:-1;;;7385:67:0;;;;;;;:::i;:::-;39602:17:::1;:33:::0;;;39646:17:::1;:33:::0;;;39690:11:::1;:21:::0;;;39722:18:::1;:34:::0;;;39861:12:::1;::::0;39878:3:::1;::::0;39775:99:::1;::::0;:81:::1;39742:14:::0;39775:81;39704:7;39775:81;39622:13;39666;39775:21:::1;:40::i;:::-;:44:::0;::::1;:57::i;:99::-;:106;;39767:144;;;::::0;-1:-1:-1;;;39767:144:0;;12036:2:1;39767:144:0::1;::::0;::::1;12018:21:1::0;12075:2;12055:18;;;12048:30;-1:-1:-1;;;12094:18:1;;;12087:55;12159:18;;39767:144:0::1;11834:349:1::0;21019:198:0;-1:-1:-1;;;;;21109:20:0;;21085:7;21109:20;;;:11;:20;;;;;;;;21105:49;;;-1:-1:-1;;;;;;21138:16:0;;;;;:7;:16;;;;;;;21019:198::o;21105:49::-;-1:-1:-1;;;;;21192:16:0;;;;;;:7;:16;;;;;;21172:37;;:19;:37::i;7484:148::-;7393:6;;-1:-1:-1;;;;;7393:6:0;1643:10;7393:22;7385:67;;;;-1:-1:-1;;;7385:67:0;;;;;;;:::i;:::-;7591:1:::1;7575:6:::0;;7554:40:::1;::::0;-1:-1:-1;;;;;7575:6:0;;::::1;::::0;7554:40:::1;::::0;7591:1;;7554:40:::1;7622:1;7605:19:::0;;-1:-1:-1;;;;;;7605:19:0::1;::::0;;7484:148::o;35969:198::-;7393:6;;-1:-1:-1;;;;;7393:6:0;1643:10;7393:22;7385:67;;;;-1:-1:-1;;;7385:67:0;;;;;;;:::i;:::-;36056:9:::1;36051:109;36067:20:::0;;::::1;36051:109;;;36144:4;36109:18;:32;36128:9;;36138:1;36128:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;36109:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;36109:32:0;:39;;-1:-1:-1;;36109:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36089:3:::1;::::0;::::1;:::i;:::-;;;36051:109;;;;35969:198:::0;;:::o;37246:135::-;7393:6;;-1:-1:-1;;;;;7393:6:0;1643:10;7393:22;7385:67;;;;-1:-1:-1;;;7385:67:0;;;;;;;:::i;:::-;37331:42:::1;::::0;-1:-1:-1;;;;;37331:19:0;::::1;::::0;37351:21:::1;37331:42:::0;::::1;;;::::0;::::1;::::0;;;37351:21;37331:19;:42;::::1;;;;;;;;;;;;;::::0;::::1;;;;37042:188:::0;7393:6;;-1:-1:-1;;;;;7393:6:0;1643:10;7393:22;7385:67;;;;-1:-1:-1;;;7385:67:0;;;;;;;:::i;:::-;37129:9:::1;37124:99;37140:20:::0;;::::1;37124:99;;;37207:4;37182:10;:24;37193:9;;37203:1;37193:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;37182:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;37182:24:0;:29;;-1:-1:-1;;37182:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37162:3:::1;::::0;::::1;:::i;:::-;;;37124:99;;37878:178:::0;7393:6;;-1:-1:-1;;;;;7393:6:0;1643:10;7393:22;7385:67;;;;-1:-1:-1;;;7385:67:0;;;;;;;:::i;:::-;38032:16:::1;38012;38002:7;;:26;;;;:::i;:::-;38001:47;;;;:::i;:::-;37985:13;:63:::0;-1:-1:-1;;37878:178:0:o;20730:87::-;20769:13;20802:7;20795:14;;;;;:::i;38064:496::-;7393:6;;-1:-1:-1;;;;;7393:6:0;1643:10;7393:22;7385:67;;;;-1:-1:-1;;;7385:67:0;;;;;;;:::i;:::-;38200:4:::1;38181:23:::0;::::1;38173:81;;;::::0;-1:-1:-1;;;38173:81:0;;12785:2:1;38173:81:0::1;::::0;::::1;12767:21:1::0;12824:2;12804:18;;;12797:30;12863:34;12843:18;;;12836:62;-1:-1:-1;;;12914:18:1;;;12907:44;12968:19;;38173:81:0::1;12583:410:1::0;38173:81:0::1;38317:9;::::0;38290:12:::1;::::0;38329:9;;38313:13:::1;::::0;-1:-1:-1;;;38317:9:0;::::1;;;38313:2;:13;:::i;:::-;38305:21;::::0;:6;:21:::1;:::i;:::-;:40;;;;:::i;:::-;38290:55;;38385:4;38366:15;38376:4;38366:9;:15::i;:::-;:23;;38358:63;;;::::0;-1:-1:-1;;;38358:63:0;;14583:2:1;38358:63:0::1;::::0;::::1;14565:21:1::0;14622:2;14602:18;;;14595:30;14661:29;14641:18;;;14634:57;14708:18;;38358:63:0::1;14381:351:1::0;38358:63:0::1;38438:6;38434:119;38448:20:::0;;::::1;38434:119;;;38489:52;38499:4;38504:9;;38514:1;38504:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;38530:9;::::0;38526:13:::1;::::0;-1:-1:-1;;;38530:9:0;::::1;;;38526:2;:13;:::i;:::-;38518:21;::::0;:6;:21:::1;:::i;:::-;38489:9;:52::i;:::-;38470:3:::0;::::1;::::0;::::1;:::i;:::-;;;;38434:119;;;;38160:400;38064:496:::0;;;;:::o;38568:681::-;7393:6;;-1:-1:-1;;;;;7393:6:0;1643:10;7393:22;7385:67;;;;-1:-1:-1;;;7385:67:0;;;;;;;:::i;:::-;38736:16:::1;:32:::0;;;38779:16:::1;:32:::0;;;38822:10:::1;:20:::0;;;38853:17:::1;:33:::0;;;38899:13:::1;:29:::0;;;38939:12:::1;:28:::0;;;38978:6:::1;:16:::0;;;39005:12:::1;:28:::0;;;39044:12:::1;:28:::0;;;39094:60:::1;39059:13:::0;39094:42:::1;38835:7:::0;39094:42;38755:13;38798;39094:16:::1;:30::i;:60::-;39083:8;:71:::0;;;39186:17:::1;::::0;39208:3:::1;::::0;39173:31:::1;::::0;:12:::1;:31::i;:::-;:38;;39165:76;;;::::0;-1:-1:-1;;;39165:76:0;;12036:2:1;39165:76:0::1;::::0;::::1;12018:21:1::0;12075:2;12055:18;;;12048:30;-1:-1:-1;;;12094:18:1;;;12087:55;12159:18;;39165:76:0::1;11834:349:1::0;39165:76:0::1;38568:681:::0;;;;;:::o;22267:269::-;22360:4;22377:129;1643:10;22400:7;22409:96;22448:15;22409:96;;;;;;;;;;;;;;;;;1643:10;22409:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22409:34:0;;;;;;;;;;;;:38;:96::i;21225:167::-;21303:4;21320:42;1643:10;21344:9;21355:6;21320:9;:42::i;39258:94::-;7393:6;;-1:-1:-1;;;;;7393:6:0;1643:10;7393:22;7385:67;;;;-1:-1:-1;;;7385:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39318:19:0::1;;::::0;;;:14:::1;:19;::::0;;;;:26;;-1:-1:-1;;39318:26:0::1;39340:4;39318:26;::::0;;39258:94::o;36307:190::-;7393:6;;-1:-1:-1;;;;;7393:6:0;1643:10;7393:22;7385:67;;;;-1:-1:-1;;;7385:67:0;;;;;;;:::i;:::-;36404:15:::1;:43:::0;;-1:-1:-1;;;;;36404:43:0;;::::1;-1:-1:-1::0;;;;;;36404:43:0;;::::1;;::::0;;;36458:9:::1;:31:::0;;;;;::::1;::::0;::::1;;::::0;;36307:190::o;36185:110::-;7393:6;;-1:-1:-1;;;;;7393:6:0;1643:10;7393:22;7385:67;;;;-1:-1:-1;;;7385:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36252:27:0::1;36282:5;36252:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;36252:35:0::1;::::0;;36185:110::o;20108:523::-;7393:6;;-1:-1:-1;;;;;7393:6:0;1643:10;7393:22;7385:67;;;;-1:-1:-1;;;7385:67:0;;;;;;;:::i;:::-;20181:29:::1;20232:9;20181:61;;20253:16;20290:10;-1:-1:-1::0;;;;;20290:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20272:47:0::1;;20328:4;20335:10;-1:-1:-1::0;;;;;20335:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20272:81;::::0;-1:-1:-1;;;;;;20272:81:0::1;::::0;;;;;;-1:-1:-1;;;;;15223:15:1;;;20272:81:0::1;::::0;::::1;15205:34:1::0;15275:15;;15255:18;;;15248:43;15140:18;;20272:81:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20253:100:::0;-1:-1:-1;;;;;;20368:22:0;::::1;20364:221;;20441:10;-1:-1:-1::0;;;;;20441:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20423:50:0::1;;20482:4;20489:10;-1:-1:-1::0;;;;;20489:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20423:84;::::0;-1:-1:-1;;;;;;20423:84:0::1;::::0;;;;;;-1:-1:-1;;;;;15223:15:1;;;20423:84:0::1;::::0;::::1;15205:34:1::0;15275:15;;15255:18;;;15248:43;15140:18;;20423:84:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20407:13;:100:::0;;-1:-1:-1;;;;;;20407:100:0::1;-1:-1:-1::0;;;;;20407:100:0;;;::::1;::::0;;;::::1;::::0;;20364:221:::1;;;20549:13;:24:::0;;-1:-1:-1;;;;;;20549:24:0::1;-1:-1:-1::0;;;;;20549:24:0;::::1;;::::0;;20364:221:::1;-1:-1:-1::0;20595:15:0::1;:28:::0;;-1:-1:-1;;;;;;20595:28:0::1;-1:-1:-1::0;;;;;20595:28:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;20108:523:0:o;39360:97::-;7393:6;;-1:-1:-1;;;;;7393:6:0;1643:10;7393:22;7385:67;;;;-1:-1:-1;;;7385:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39422:19:0::1;39444:5;39422:19:::0;;;:14:::1;:19;::::0;;;;:27;;-1:-1:-1;;39422:27:0::1;::::0;;39360:97::o;35849:112::-;7393:6;;-1:-1:-1;;;;;7393:6:0;1643:10;7393:22;7385:67;;;;-1:-1:-1;;;7385:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35919:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;35919:34:0::1;35949:4;35919:34;::::0;;35849:112::o;7640:244::-;7393:6;;-1:-1:-1;;;;;7393:6:0;1643:10;7393:22;7385:67;;;;-1:-1:-1;;;7385:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7729:22:0;::::1;7721:73;;;::::0;-1:-1:-1;;;7721:73:0;;15504:2:1;7721:73:0::1;::::0;::::1;15486:21:1::0;15543:2;15523:18;;;15516:30;15582:34;15562:18;;;15555:62;-1:-1:-1;;;15633:18:1;;;15626:36;15679:19;;7721:73:0::1;15302:402:1::0;7721:73:0::1;7831:6;::::0;;7810:38:::1;::::0;-1:-1:-1;;;;;7810:38:0;;::::1;::::0;7831:6;::::1;::::0;7810:38:::1;::::0;::::1;7859:6;:17:::0;;-1:-1:-1;;;;;;7859:17:0::1;-1:-1:-1::0;;;;;7859:17:0;;;::::1;::::0;;;::::1;::::0;;7640:244::o;3418:132::-;3476:7;3503:39;3507:1;3510;3503:39;;;;;;;;;;;;;;;;;:3;:39::i;3158:250::-;3216:7;3240:1;3245;3240:6;3236:47;;-1:-1:-1;3270:1:0;3263:8;;3236:47;3295:9;3307:5;3311:1;3307;:5;:::i;:::-;3295:17;-1:-1:-1;3340:1:0;3331:5;3335:1;3295:17;3331:5;:::i;:::-;:10;3323:56;;;;-1:-1:-1;;;3323:56:0;;15911:2:1;3323:56:0;;;15893:21:1;15950:2;15930:18;;;15923:30;15989:34;15969:18;;;15962:62;-1:-1:-1;;;16040:18:1;;;16033:31;16081:19;;3323:56:0;15709:397:1;2625:181:0;2683:7;;2715:5;2719:1;2715;:5;:::i;:::-;2703:17;;2744:1;2739;:6;;2731:46;;;;-1:-1:-1;;;2731:46:0;;16446:2:1;2731:46:0;;;16428:21:1;16485:2;16465:18;;;16458:30;16524:29;16504:18;;;16497:57;16571:18;;2731:46:0;16244:351:1;24623:337:0;-1:-1:-1;;;;;24716:19:0;;24708:68;;;;-1:-1:-1;;;24708:68:0;;16802:2:1;24708:68:0;;;16784:21:1;16841:2;16821:18;;;16814:30;16880:34;16860:18;;;16853:62;-1:-1:-1;;;16931:18:1;;;16924:34;16975:19;;24708:68:0;16600:400:1;24708:68:0;-1:-1:-1;;;;;24795:21:0;;24787:68;;;;-1:-1:-1;;;24787:68:0;;17207:2:1;24787:68:0;;;17189:21:1;17246:2;17226:18;;;17219:30;17285:34;17265:18;;;17258:62;-1:-1:-1;;;17336:18:1;;;17329:32;17378:19;;24787:68:0;17005:398:1;24787:68:0;-1:-1:-1;;;;;24868:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;24920:32;;160:25:1;;;24920:32:0;;133:18:1;24920:32:0;;;;;;;24623:337;;;:::o;24968:2059::-;-1:-1:-1;;;;;25090:18:0;;25082:68;;;;-1:-1:-1;;;25082:68:0;;17610:2:1;25082:68:0;;;17592:21:1;17649:2;17629:18;;;17622:30;17688:34;17668:18;;;17661:62;-1:-1:-1;;;17739:18:1;;;17732:35;17784:19;;25082:68:0;17408:401:1;25082:68:0;-1:-1:-1;;;;;25169:16:0;;25161:64;;;;-1:-1:-1;;;25161:64:0;;18016:2:1;25161:64:0;;;17998:21:1;18055:2;18035:18;;;18028:30;18094:34;18074:18;;;18067:62;-1:-1:-1;;;18145:18:1;;;18138:33;18188:19;;25161:64:0;17814:399:1;25161:64:0;25253:1;25244:6;:10;25236:64;;;;-1:-1:-1;;;25236:64:0;;18420:2:1;25236:64:0;;;18402:21:1;18459:2;18439:18;;;18432:30;18498:34;18478:18;;;18471:62;-1:-1:-1;;;18549:18:1;;;18542:39;18598:19;;25236:64:0;18218:405:1;25236:64:0;-1:-1:-1;;;;;25320:13:0;;;;;;:9;:13;;;;;;;;25319:14;25311:48;;;;-1:-1:-1;;;25311:48:0;;18830:2:1;25311:48:0;;;18812:21:1;18869:2;18849:18;;;18842:30;-1:-1:-1;;;18888:18:1;;;18881:51;18949:18;;25311:48:0;18628:345:1;25311:48:0;-1:-1:-1;;;;;25379:15:0;;;;;;:9;:15;;;;;;;;25378:16;25370:50;;;;-1:-1:-1;;;25370:50:0;;18830:2:1;25370:50:0;;;18812:21:1;18869:2;18849:18;;;18842:30;-1:-1:-1;;;18888:18:1;;;18881:51;18949:18;;25370:50:0;18628:345:1;25370:50:0;-1:-1:-1;;;;;25445:20:0;;;;;;:14;:20;;;;;;;;25441:95;;25489:11;;-1:-1:-1;;;25489:11:0;;;;25481:43;;;;-1:-1:-1;;;25481:43:0;;19180:2:1;25481:43:0;;;19162:21:1;19219:2;19199:18;;;19192:30;-1:-1:-1;;;19238:18:1;;;19231:50;19298:18;;25481:43:0;18978:344:1;25481:43:0;25626:13;;25549:12;;-1:-1:-1;;;;;25620:19:0;;;25626:13;;25620:19;;:40;;-1:-1:-1;25647:13:0;;-1:-1:-1;;;;;25643:17:0;;;25647:13;;25643:17;25620:40;25619:99;;;;-1:-1:-1;;;;;;25667:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;25695:22:0;;;;;;:18;:22;;;;;;;;25667:50;25665:53;25619:99;25614:148;;;-1:-1:-1;25746:4:0;25614:148;25788:1;25777:10;;:12;:66;;;;-1:-1:-1;;;;;;25795:22:0;;;;;;:18;:22;;;;;;;;25794:23;:48;;;;-1:-1:-1;;;;;;25822:20:0;;;;;;:14;:20;;;;;;;;25821:21;25794:48;25774:207;;;25894:15;;25879:13;25889:2;25879:9;:13::i;:::-;25871:21;;:6;:21;:::i;:::-;:38;;25863:106;;;;-1:-1:-1;;;25863:106:0;;19529:2:1;25863:106:0;;;19511:21:1;19568:2;19548:18;;;19541:30;19607:34;19587:18;;;19580:62;-1:-1:-1;;;19658:18:1;;;19651:32;19700:19;;25863:106:0;19327:398:1;25863:106:0;26009:8;;25993:15;:24;26042:17;;26028:13;:31;26075:11;;-1:-1:-1;;;26075:11:0;;;;:34;;;;-1:-1:-1;26096:13:0;;-1:-1:-1;;;;;26090:19:0;;;26096:13;;26090:19;26075:34;26072:194;;;26150:57;26195:11;;26150:40;26172:17;;26150;;:21;;:40;;;;:::i;:57::-;26133:15;:74;26236:18;;26222:13;:32;26072:194;26336:1;26325:10;;:12;:56;;;;;26369:12;26355:10;;26342;;:23;;;;:::i;:::-;26341:40;26325:56;26322:109;;;-1:-1:-1;;;;;26401:13:0;;;;;;:9;:13;;;;;:18;;-1:-1:-1;;26401:18:0;26415:4;26401:18;;;26322:109;26446:14;;-1:-1:-1;;;26446:14:0;;;;26443:150;;;26480:11;;-1:-1:-1;;;26480:11:0;;;;:36;;;;-1:-1:-1;26503:13:0;;-1:-1:-1;;;;;26495:21:0;;;26503:13;;26495:21;26480:36;26477:105;;;26564:1;26548:15;:17;26477:105;26626:6;;-1:-1:-1;;;26626:6:0;;;;26625:7;:22;;;;-1:-1:-1;26636:11:0;;-1:-1:-1;;;26636:11:0;;;;26625:22;:45;;;;-1:-1:-1;26657:13:0;;-1:-1:-1;;;;;26651:19:0;;;26657:13;;26651:19;26625:45;26621:350;;;26695:28;26726:24;26744:4;26726:9;:24::i;:::-;26695:55;;26804:13;;26782:20;:35;26779:169;;-1:-1:-1;26864:13:0;;26900:32;26864:13;26900:10;:32::i;:::-;26672:299;26621:350;26981:38;26996:4;27001:2;27004:6;27011:7;26981:14;:38::i;2958:192::-;3044:7;3080:12;3072:6;;;;3064:29;;;;-1:-1:-1;;;3064:29:0;;;;;;;;:::i;:::-;-1:-1:-1;3104:9:0;3116:5;3120:1;3116;:5;:::i;:::-;3104:17;2958:192;-1:-1:-1;;;;;2958:192:0:o;34386:163::-;34427:7;34448:15;34465;34484:19;:17;:19::i;:::-;34447:56;;-1:-1:-1;34447:56:0;-1:-1:-1;34521:20:0;34447:56;;34521:11;:20::i;:::-;34514:27;;;;34386:163;:::o;33184:419::-;33243:7;33252;33261;33270;33279;33288;33309:23;33334:12;33348:18;33370:20;33382:7;33370:11;:20::i;:::-;33308:82;;;;;;33402:15;33419:23;33444:12;33460:50;33472:7;33481:4;33487:10;33499;:8;:10::i;:::-;33460:11;:50::i;:::-;33401:109;;;;-1:-1:-1;33401:109:0;;-1:-1:-1;33561:15:0;;-1:-1:-1;33578:4:0;;-1:-1:-1;33584:10:0;;-1:-1:-1;33184:419:0;;-1:-1:-1;;;;;33184:419:0:o;2814:136::-;2872:7;2899:43;2903:1;2906;2899:43;;;;;;;;;;;;;;;;;:3;:43::i;3558:278::-;3644:7;3679:12;3672:5;3664:28;;;;-1:-1:-1;;;3664:28:0;;;;;;;;:::i;:::-;-1:-1:-1;3703:9:0;3715:5;3719:1;3715;:5;:::i;27035:1372::-;18729:6;:13;;-1:-1:-1;;;;18729:13:0;-1:-1:-1;;;18729:13:0;;;27233:8:::1;::::0;27201:12:::1;::::0;18729:13;;27162:101:::1;::::0;27261:1:::1;::::0;27162:80:::1;::::0;;;:20;;:38:::1;:52::i;:::-;:70:::0;::::1;:80::i;:101::-;27136:127:::0;-1:-1:-1;27276:20:0::1;27299:41;:20:::0;27136:127;27299:24:::1;:41::i;:::-;27276:64;;27361:30;27378:12;27361:16;:30::i;:::-;27493:12;::::0;27424:21:::1;::::0;27404:17:::1;::::0;27480:33:::1;::::0;27493:19:::1;::::0;27510:1:::1;27493:16;:19::i;:::-;27480:8;::::0;;:12:::1;:33::i;:::-;27458:55;;27526:26;27555:93;27646:1;27555:72;27615:11;27555:41;27583:12;;27555:9;:27;;:41;;;;:::i;:93::-;27526:122;;27669:20;27692:38;27718:11;27692:21;27706:6;;27692:9;:13;;:21;;;;:::i;:38::-;27669:61;;27741:26;27770:68;27816:11;27770:27;27784:12;;27770:9;:13;;:27;;;;:::i;:68::-;27741:97;;27850:26;27879:68;27925:11;27879:27;27893:12;;27879:9;:13;;:27;;;;:::i;:68::-;27850:97:::0;-1:-1:-1;28038:21:0::1;28073:22:::0;;28070:216:::1;;28144:15;::::0;28112:48:::1;::::0;28125:18;;-1:-1:-1;;;;;28144:15:0::1;28112:12;:48::i;:::-;28207:15;::::0;28175:48:::1;::::0;28188:18;;-1:-1:-1;;;;;28207:15:0::1;28175:12;:48::i;:::-;28264:9;::::0;28238:36:::1;::::0;28251:12;;-1:-1:-1;;;;;28264:9:0::1;28238:12;:36::i;:::-;28300:19:::0;;28296:104:::1;;28340:48;28353:15;28369:18;28340:12;:48::i;:::-;-1:-1:-1::0;;18765:6:0;:14;;-1:-1:-1;;;;18765:14:0;;;-1:-1:-1;;;;;;;;27035:1372:0:o;29750:943::-;29890:13;;29940:15;;29970:7;29966:88;;30009:1;29993:13;:17;;;30025:15;:17;29966:88;-1:-1:-1;;;;;30078:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;30102:22:0;;;;;;:11;:22;;;;;;;;30101:23;30078:46;30074:467;;;30141:48;30163:6;30171:9;30182:6;30141:21;:48::i;:::-;30074:467;;;-1:-1:-1;;;;;30212:19:0;;;;;;:11;:19;;;;;;;;30211:20;:46;;;;-1:-1:-1;;;;;;30235:22:0;;;;;;:11;:22;;;;;;;;30211:46;30207:334;;;30274:46;30294:6;30302:9;30313:6;30274:19;:46::i;30207:334::-;-1:-1:-1;;;;;30342:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;30365:22:0;;;;;;:11;:22;;;;;;;;30342:45;30338:203;;;30404:48;30426:6;30434:9;30445:6;30404:21;:48::i;30338:203::-;30485:44;30503:6;30511:9;30522:6;30485:17;:44::i;:::-;30565:7;30561:125;;30588:13;:38;;;;30641:15;:33;-1:-1:-1;;;;29750:943:0:o;34557:561::-;34654:7;;34690;;34607;;;;;34714:289;34738:9;:16;34734:20;;34714:289;;;34804:7;34780;:21;34788:9;34798:1;34788:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34788:12:0;34780:21;;;;;;;;;;;;;:31;;:66;;;34839:7;34815;:21;34823:9;34833:1;34823:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34823:12:0;34815:21;;;;;;;;;;;;;:31;34780:66;34776:97;;;34856:7;;34865;;34848:25;;;;;;;34557:561;;:::o;34776:97::-;34898:34;34910:7;:21;34918:9;34928:1;34918:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34918:12:0;34910:21;;;;;;;;;;;;;34898:7;;:11;:34::i;:::-;34888:44;;34957:34;34969:7;:21;34977:9;34987:1;34977:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34977:12:0;34969:21;;;;;;;;;;;;;34957:7;;:11;:34::i;:::-;34947:44;-1:-1:-1;34756:3:0;;;;:::i;:::-;;;;34714:289;;;-1:-1:-1;35039:7:0;;35027;;:20;;:11;:20::i;:::-;35017:7;:30;35013:61;;;35057:7;;35066;;35049:25;;;;;;34557:561;;:::o;35013:61::-;35093:7;;35102;;-1:-1:-1;34557:561:0;-1:-1:-1;34557:561:0:o;33611:330::-;33671:7;33680;33689;33709:12;33724:24;33740:7;33724:15;:24::i;:::-;33709:39;;33759:18;33780:30;33802:7;33780:21;:30::i;:::-;33759:51;-1:-1:-1;33821:23:0;33847:33;33759:51;33847:17;:7;33859:4;33847:11;:17::i;:::-;:21;;:33::i;:::-;33821:59;33916:4;;-1:-1:-1;33922:10:0;;-1:-1:-1;33611:330:0;;-1:-1:-1;;;33611:330:0:o;33949:429::-;34064:7;;;;34120:24;:7;34132:11;34120;:24::i;:::-;34102:42;-1:-1:-1;34155:12:0;34170:21;:4;34179:11;34170:8;:21::i;:::-;34155:36;-1:-1:-1;34202:18:0;34223:27;:10;34238:11;34223:14;:27::i;:::-;34202:48;-1:-1:-1;34261:23:0;34287:33;34202:48;34287:17;:7;34299:4;34287:11;:17::i;:33::-;34339:7;;;;-1:-1:-1;34365:4:0;;-1:-1:-1;33949:429:0;;-1:-1:-1;;;;;;;33949:429:0:o;28549:666::-;28699:16;;;28713:1;28699:16;;;;;;;;28675:21;;28699:16;;;;;;;;;;-1:-1:-1;28699:16:0;28675:40;;28744:4;28726;28731:1;28726:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28726:23:0;;;:7;;;;;;;;;;:23;;;;28770:15;;:22;;;-1:-1:-1;;;28770:22:0;;;;:15;;;;;:20;;:22;;;;;28726:7;;28770:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28760:4;28765:1;28760:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28760:32:0;;;:7;;;;;;;;;:32;28837:15;;28805:62;;28822:4;;28837:15;28855:11;28805:8;:62::i;:::-;28906:15;;:240;;-1:-1:-1;;;28906:240:0;;-1:-1:-1;;;;;28906:15:0;;;;:66;;:240;;28987:11;;28906:15;;29057:4;;29084;;29120:15;;28906:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29172:35;29189:11;29202:4;29172:35;;;;;;;:::i;:::-;;;;;;;;28604:611;28549:666;:::o;28419:111::-;28499:23;;-1:-1:-1;;;;;28499:15:0;;;:23;;;;;28515:6;;28499:23;;;;28515:6;28499:15;:23;;;;;;;;;;;;;;;;;;;29229:513;29409:15;;29377:62;;29394:4;;-1:-1:-1;;;;;29409:15:0;29427:11;29377:8;:62::i;:::-;29482:15;;-1:-1:-1;;;;;29482:15:0;:31;29521:9;29554:4;29574:11;29482:15;;29686:7;7297;7324:6;-1:-1:-1;;;;;7324:6:0;;7259:79;29686:7;29482:252;;;;;;-1:-1:-1;;;;;;29482:252:0;;;-1:-1:-1;;;;;21611:15:1;;;29482:252:0;;;21593:34:1;21643:18;;;21636:34;;;;21686:18;;;21679:34;;;;21729:18;;;21722:34;21793:15;;;21772:19;;;21765:44;29708:15:0;21825:19:1;;;21818:35;21527:19;;29482:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31805:566::-;31908:15;31925:23;31950:12;31964:23;31989:12;32003:18;32025:19;32036:7;32025:10;:19::i;:::-;-1:-1:-1;;;;;32073:15:0;;;;;;:7;:15;;;;;;31907:137;;-1:-1:-1;31907:137:0;;-1:-1:-1;31907:137:0;;-1:-1:-1;31907:137:0;-1:-1:-1;31907:137:0;-1:-1:-1;31907:137:0;-1:-1:-1;32073:28:0;;32093:7;32073:19;:28::i;:::-;-1:-1:-1;;;;;32055:15:0;;;;;;:7;:15;;;;;;;;:46;;;;32130:7;:15;;;;:28;;32150:7;32130:19;:28::i;:::-;-1:-1:-1;;;;;32112:15:0;;;;;;;:7;:15;;;;;;:46;;;;32190:18;;;;;;;:39;;32213:15;32190:22;:39::i;:::-;-1:-1:-1;;;;;32169:18:0;;;;;;:7;:18;;;;;:60;32243:26;32258:10;32243:14;:26::i;:::-;32280:23;32292:4;32298;32280:11;:23::i;:::-;32336:9;-1:-1:-1;;;;;32319:44:0;32328:6;-1:-1:-1;;;;;32319:44:0;;32347:15;32319:44;;;;160:25:1;;148:2;133:18;;14:177;32319:44:0;;;;;;;;31896:475;;;;;;31805:566;;;:::o;31211:586::-;31312:15;31329:23;31354:12;31368:23;31393:12;31407:18;31429:19;31440:7;31429:10;:19::i;:::-;-1:-1:-1;;;;;31477:15:0;;;;;;:7;:15;;;;;;31311:137;;-1:-1:-1;31311:137:0;;-1:-1:-1;31311:137:0;;-1:-1:-1;31311:137:0;-1:-1:-1;31311:137:0;-1:-1:-1;31311:137:0;-1:-1:-1;31477:28:0;;31311:137;31477:19;:28::i;:::-;-1:-1:-1;;;;;31459:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;31537:18;;;;;:7;:18;;;;;:39;;31560:15;31537:22;:39::i;:::-;-1:-1:-1;;;;;31516:18:0;;;;;;:7;:18;;;;;;;;:60;;;;31608:7;:18;;;;:39;;31631:15;31608:22;:39::i;32379:642::-;32482:15;32499:23;32524:12;32538:23;32563:12;32577:18;32599:19;32610:7;32599:10;:19::i;:::-;-1:-1:-1;;;;;32647:15:0;;;;;;:7;:15;;;;;;32481:137;;-1:-1:-1;32481:137:0;;-1:-1:-1;32481:137:0;;-1:-1:-1;32481:137:0;-1:-1:-1;32481:137:0;-1:-1:-1;32481:137:0;-1:-1:-1;32647:28:0;;32667:7;32647:19;:28::i;:::-;-1:-1:-1;;;;;32629:15:0;;;;;;:7;:15;;;;;;;;:46;;;;32704:7;:15;;;;:28;;32724:7;32704:19;:28::i;30701:502::-;30800:15;30817:23;30842:12;30856:23;30881:12;30895:18;30917:19;30928:7;30917:10;:19::i;:::-;-1:-1:-1;;;;;30965:15:0;;;;;;:7;:15;;;;;;30799:137;;-1:-1:-1;30799:137:0;;-1:-1:-1;30799:137:0;;-1:-1:-1;30799:137:0;-1:-1:-1;30799:137:0;-1:-1:-1;30799:137:0;-1:-1:-1;30965:28:0;;30799:137;30965:19;:28::i;35497:160::-;35561:7;35588:61;35633:5;35588:26;35600:13;;35588:7;:11;;:26;;;;:::i;35669:168::-;35739:7;35766:63;35813:5;35766:28;35778:15;;35766:7;:11;;:28;;;;:::i;35130:355::-;35193:19;35216:10;:8;:10::i;:::-;35193:33;-1:-1:-1;35237:18:0;35258:27;:10;35193:33;35258:14;:27::i;:::-;35337:4;35321:22;;;;:7;:22;;;;;;35237:48;;-1:-1:-1;35321:38:0;;35237:48;35321:26;:38::i;:::-;35312:4;35296:22;;;;:7;:22;;;;;;;;:63;;;;35373:11;:26;;;;;;35370:107;;;35455:4;35439:22;;;;:7;:22;;;;;;:38;;35466:10;35439:26;:38::i;:::-;35430:4;35414:22;;;;:7;:22;;;;;:63;35182:303;;35130:355;:::o;33029:147::-;33107:7;;:17;;33119:4;33107:11;:17::i;:::-;33097:7;:27;33148:10;;:20;;33163:4;33148:14;:20::i;:::-;33135:10;:33;-1:-1:-1;;33029:147:0:o;196:597:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;634:6;631:1;628:13;625:91;;;704:1;699:2;690:6;679:9;675:22;671:31;664:42;625:91;-1:-1:-1;777:2:1;756:15;-1:-1:-1;;752:29:1;737:45;;;;784:2;733:54;;196:597;-1:-1:-1;;;196:597:1:o;798:180::-;857:6;910:2;898:9;889:7;885:23;881:32;878:52;;;926:1;923;916:12;878:52;-1:-1:-1;949:23:1;;798:180;-1:-1:-1;798:180:1:o;983:131::-;-1:-1:-1;;;;;1058:31:1;;1048:42;;1038:70;;1104:1;1101;1094:12;1038:70;983:131;:::o;1119:315::-;1187:6;1195;1248:2;1236:9;1227:7;1223:23;1219:32;1216:52;;;1264:1;1261;1254:12;1216:52;1303:9;1290:23;1322:31;1347:5;1322:31;:::i;:::-;1372:5;1424:2;1409:18;;;;1396:32;;-1:-1:-1;;;1119:315:1:o;1631:247::-;1690:6;1743:2;1731:9;1722:7;1718:23;1714:32;1711:52;;;1759:1;1756;1749:12;1711:52;1798:9;1785:23;1817:31;1842:5;1817:31;:::i;2118:456::-;2195:6;2203;2211;2264:2;2252:9;2243:7;2239:23;2235:32;2232:52;;;2280:1;2277;2270:12;2232:52;2319:9;2306:23;2338:31;2363:5;2338:31;:::i;:::-;2388:5;-1:-1:-1;2445:2:1;2430:18;;2417:32;2458:33;2417:32;2458:33;:::i;:::-;2118:456;;2510:7;;-1:-1:-1;;;2564:2:1;2549:18;;;;2536:32;;2118:456::o;2579:401::-;2660:6;2668;2721:2;2709:9;2700:7;2696:23;2692:32;2689:52;;;2737:1;2734;2727:12;2689:52;2776:9;2763:23;2795:31;2820:5;2795:31;:::i;:::-;2845:5;-1:-1:-1;2902:2:1;2887:18;;2874:32;2915:33;2874:32;2915:33;:::i;:::-;2967:7;2957:17;;;2579:401;;;;;:::o;2985:118::-;3071:5;3064:13;3057:21;3050:5;3047:32;3037:60;;3093:1;3090;3083:12;3108:309;3173:6;3181;3234:2;3222:9;3213:7;3209:23;3205:32;3202:52;;;3250:1;3247;3240:12;3202:52;3289:9;3276:23;3308:28;3330:5;3308:28;:::i;3611:309::-;3676:6;3684;3737:2;3725:9;3716:7;3712:23;3708:32;3705:52;;;3753:1;3750;3743:12;3705:52;3789:9;3776:23;3766:33;;3849:2;3838:9;3834:18;3821:32;3862:28;3884:5;3862:28;:::i;4133:241::-;4189:6;4242:2;4230:9;4221:7;4217:23;4213:32;4210:52;;;4258:1;4255;4248:12;4210:52;4297:9;4284:23;4316:28;4338:5;4316:28;:::i;4379:367::-;4442:8;4452:6;4506:3;4499:4;4491:6;4487:17;4483:27;4473:55;;4524:1;4521;4514:12;4473:55;-1:-1:-1;4547:20:1;;4590:18;4579:30;;4576:50;;;4622:1;4619;4612:12;4576:50;4659:4;4651:6;4647:17;4635:29;;4719:3;4712:4;4702:6;4699:1;4695:14;4687:6;4683:27;4679:38;4676:47;4673:67;;;4736:1;4733;4726:12;4673:67;4379:367;;;;;:::o;4751:566::-;4843:6;4851;4859;4912:2;4900:9;4891:7;4887:23;4883:32;4880:52;;;4928:1;4925;4918:12;4880:52;4968:9;4955:23;5001:18;4993:6;4990:30;4987:50;;;5033:1;5030;5023:12;4987:50;5072:70;5134:7;5125:6;5114:9;5110:22;5072:70;:::i;:::-;5161:8;;-1:-1:-1;5046:96:1;-1:-1:-1;;5246:2:1;5231:18;;5218:32;5259:28;5218:32;5259:28;:::i;:::-;5306:5;5296:15;;;4751:566;;;;;:::o;5322:385::-;5408:6;5416;5424;5432;5485:3;5473:9;5464:7;5460:23;5456:33;5453:53;;;5502:1;5499;5492:12;5453:53;-1:-1:-1;;5525:23:1;;;5595:2;5580:18;;5567:32;;-1:-1:-1;5646:2:1;5631:18;;5618:32;;5697:2;5682:18;5669:32;;-1:-1:-1;5322:385:1;-1:-1:-1;5322:385:1:o;5712:437::-;5798:6;5806;5859:2;5847:9;5838:7;5834:23;5830:32;5827:52;;;5875:1;5872;5865:12;5827:52;5915:9;5902:23;5948:18;5940:6;5937:30;5934:50;;;5980:1;5977;5970:12;5934:50;6019:70;6081:7;6072:6;6061:9;6057:22;6019:70;:::i;:::-;6108:8;;5993:96;;-1:-1:-1;5712:437:1;-1:-1:-1;;;;5712:437:1:o;6414:248::-;6482:6;6490;6543:2;6531:9;6522:7;6518:23;6514:32;6511:52;;;6559:1;6556;6549:12;6511:52;-1:-1:-1;;6582:23:1;;;6652:2;6637:18;;;6624:32;;-1:-1:-1;6414:248:1:o;6667:640::-;6771:6;6779;6787;6795;6848:2;6836:9;6827:7;6823:23;6819:32;6816:52;;;6864:1;6861;6854:12;6816:52;6903:9;6890:23;6922:31;6947:5;6922:31;:::i;:::-;6972:5;-1:-1:-1;7028:2:1;7013:18;;7000:32;7055:18;7044:30;;7041:50;;;7087:1;7084;7077:12;7041:50;7126:70;7188:7;7179:6;7168:9;7164:22;7126:70;:::i;:::-;6667:640;;7215:8;;-1:-1:-1;7100:96:1;;7297:2;7282:18;7269:32;;6667:640;-1:-1:-1;;;;6667:640:1:o;7312:454::-;7407:6;7415;7423;7431;7439;7492:3;7480:9;7471:7;7467:23;7463:33;7460:53;;;7509:1;7506;7499:12;7460:53;-1:-1:-1;;7532:23:1;;;7602:2;7587:18;;7574:32;;-1:-1:-1;7653:2:1;7638:18;;7625:32;;7704:2;7689:18;;7676:32;;-1:-1:-1;7755:3:1;7740:19;7727:33;;-1:-1:-1;7312:454:1;-1:-1:-1;7312:454:1:o;8164:380::-;8243:1;8239:12;;;;8286;;;8307:61;;8361:4;8353:6;8349:17;8339:27;;8307:61;8414:2;8406:6;8403:14;8383:18;8380:38;8377:161;;8460:10;8455:3;8451:20;8448:1;8441:31;8495:4;8492:1;8485:15;8523:4;8520:1;8513:15;8377:161;;8164:380;;;:::o;8549:356::-;8751:2;8733:21;;;8770:18;;;8763:30;8829:34;8824:2;8809:18;;8802:62;8896:2;8881:18;;8549:356::o;8910:184::-;8980:6;9033:2;9021:9;9012:7;9008:23;9004:32;9001:52;;;9049:1;9046;9039:12;9001:52;-1:-1:-1;9072:16:1;;8910:184;-1:-1:-1;8910:184:1:o;9378:245::-;9445:6;9498:2;9486:9;9477:7;9473:23;9469:32;9466:52;;;9514:1;9511;9504:12;9466:52;9546:9;9540:16;9565:28;9587:5;9565:28;:::i;10395:127::-;10456:10;10451:3;10447:20;10444:1;10437:31;10487:4;10484:1;10477:15;10511:4;10508:1;10501:15;10527:127;10588:10;10583:3;10579:20;10576:1;10569:31;10619:4;10616:1;10609:15;10643:4;10640:1;10633:15;10659:125;10699:4;10727:1;10724;10721:8;10718:34;;;10732:18;;:::i;:::-;-1:-1:-1;10769:9:1;;10659:125::o;10789:127::-;10850:10;10845:3;10841:20;10838:1;10831:31;10881:4;10878:1;10871:15;10905:4;10902:1;10895:15;10921:135;10960:3;10981:17;;;10978:43;;11001:18;;:::i;:::-;-1:-1:-1;11048:1:1;11037:13;;10921:135::o;12188:168::-;12228:7;12294:1;12290;12286:6;12282:14;12279:1;12276:21;12271:1;12264:9;12257:17;12253:45;12250:71;;;12301:18;;:::i;:::-;-1:-1:-1;12341:9:1;;12188:168::o;12361:217::-;12401:1;12427;12417:132;;12471:10;12466:3;12462:20;12459:1;12452:31;12506:4;12503:1;12496:15;12534:4;12531:1;12524:15;12417:132;-1:-1:-1;12563:9:1;;12361:217::o;12998:422::-;13087:1;13130:5;13087:1;13144:270;13165:7;13155:8;13152:21;13144:270;;;13224:4;13220:1;13216:6;13212:17;13206:4;13203:27;13200:53;;;13233:18;;:::i;:::-;13283:7;13273:8;13269:22;13266:55;;;13303:16;;;;13266:55;13382:22;;;;13342:15;;;;13144:270;;;13148:3;12998:422;;;;;:::o;13425:806::-;13474:5;13504:8;13494:80;;-1:-1:-1;13545:1:1;13559:5;;13494:80;13593:4;13583:76;;-1:-1:-1;13630:1:1;13644:5;;13583:76;13675:4;13693:1;13688:59;;;;13761:1;13756:130;;;;13668:218;;13688:59;13718:1;13709:10;;13732:5;;;13756:130;13793:3;13783:8;13780:17;13777:43;;;13800:18;;:::i;:::-;-1:-1:-1;;13856:1:1;13842:16;;13871:5;;13668:218;;13970:2;13960:8;13957:16;13951:3;13945:4;13942:13;13938:36;13932:2;13922:8;13919:16;13914:2;13908:4;13905:12;13901:35;13898:77;13895:159;;;-1:-1:-1;14007:19:1;;;14039:5;;13895:159;14086:34;14111:8;14105:4;14086:34;:::i;:::-;14156:6;14152:1;14148:6;14144:19;14135:7;14132:32;14129:58;;;14167:18;;:::i;:::-;14205:20;;13425:806;-1:-1:-1;;;13425:806:1:o;14236:140::-;14294:5;14323:47;14364:4;14354:8;14350:19;14344:4;14323:47;:::i;14737:251::-;14807:6;14860:2;14848:9;14839:7;14835:23;14831:32;14828:52;;;14876:1;14873;14866:12;14828:52;14908:9;14902:16;14927:31;14952:5;14927:31;:::i;16111:128::-;16151:3;16182:1;16178:6;16175:1;16172:13;16169:39;;;16188:18;;:::i;:::-;-1:-1:-1;16224:9:1;;16111:128::o;19862:461::-;19915:3;19953:5;19947:12;19980:6;19975:3;19968:19;20006:4;20035:2;20030:3;20026:12;20019:19;;20072:2;20065:5;20061:14;20093:1;20103:195;20117:6;20114:1;20111:13;20103:195;;;20182:13;;-1:-1:-1;;;;;20178:39:1;20166:52;;20238:12;;;;20273:15;;;;20214:1;20132:9;20103:195;;;-1:-1:-1;20314:3:1;;19862:461;-1:-1:-1;;;;;19862:461:1:o;20328:582::-;20627:6;20616:9;20609:25;20670:6;20665:2;20654:9;20650:18;20643:34;20713:3;20708:2;20697:9;20693:18;20686:31;20590:4;20734:57;20786:3;20775:9;20771:19;20763:6;20734:57;:::i;:::-;-1:-1:-1;;;;;20827:32:1;;;;20822:2;20807:18;;20800:60;-1:-1:-1;20891:3:1;20876:19;20869:35;20726:65;20328:582;-1:-1:-1;;;20328:582:1:o;20915:332::-;21122:6;21111:9;21104:25;21165:2;21160;21149:9;21145:18;21138:30;21085:4;21185:56;21237:2;21226:9;21222:18;21214:6;21185:56;:::i;:::-;21177:64;20915:332;-1:-1:-1;;;;20915:332:1:o;21864:306::-;21952:6;21960;21968;22021:2;22009:9;22000:7;21996:23;21992:32;21989:52;;;22037:1;22034;22027:12;21989:52;22066:9;22060:16;22050:26;;22116:2;22105:9;22101:18;22095:25;22085:35;;22160:2;22149:9;22145:18;22139:25;22129:35;;21864:306;;;;;:::o

Swarm Source

ipfs://94b342f2a89cbfb00593f03d215d4339fb5b89e1e88399898972f44517241754
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.