ETH Price: $2,620.40 (-2.81%)

Token

No Face Inu (NOFACE)
 

Overview

Max Total Supply

10,000,000 NOFACE

Holders

182

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
45,000 NOFACE

Value
$0.00
0xC53b12eB25fB5bb8dc66c809908CFCCCA1ecD77e
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:
NoFaceInu

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-17
*/

// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.9.0;

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

    function _msgData() internal view returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IERC20 {
  /**
   * @dev Returns the amount of tokens in existence.
   */
  function totalSupply() external view returns (uint256);

  /**
   * @dev Returns the token decimals.
   */
  function decimals() external view returns (uint8);

  /**
   * @dev Returns the token symbol.
   */
  function symbol() external view returns (string memory);

  /**
  * @dev Returns the token name.
  */
  function name() external view returns (string memory);

  /**
   * @dev Returns the bep token owner.
   */
  function getOwner() external view returns (address);

  /**
   * @dev Returns the amount of tokens owned by `account`.
   */
  function balanceOf(address account) external view returns (uint256);

  /**
   * @dev Moves `amount` tokens from the caller's account to `recipient`.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * Emits a {Transfer} event.
   */
  function transfer(address recipient, uint256 amount) external returns (bool);

  /**
   * @dev Returns the remaining number of tokens that `spender` will be
   * allowed to spend on behalf of `owner` through {transferFrom}. This is
   * zero by default.
   *
   * This value changes when {approve} or {transferFrom} are called.
   */
  function allowance(address _owner, address spender) external view returns (uint256);

  /**
   * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * IMPORTANT: Beware that changing an allowance with this method brings the risk
   * that someone may use both the old and the new allowance by unfortunate
   * transaction ordering. One possible solution to mitigate this race
   * condition is to first reduce the spender's allowance to 0 and set the
   * desired value afterwards:
   * https://github.com/ethereum/EIPs/n/o/fa/ce/in/u/20#issuecomment-263524729
   *
   * Emits an {Approval} event.
   */
  function approve(address spender, uint256 amount) external returns (bool);

  /**
   * @dev Moves `amount` tokens from `sender` to `recipient` using the
   * allowance mechanism. `amount` is then deducted from the caller's
   * allowance.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * Emits a {Transfer} event.
   */
  function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

  /**
   * @dev Emitted when `value` tokens are moved from one account (`from`) to
   * another (`to`).
   *
   * Note that `value` may be zero.
   */
  event Transfer(address indexed from, address indexed to, uint256 value);

  /**
   * @dev Emitted when the allowance of a `spender` for an `owner` is set by
   * a call to {approve}. `value` is the new allowance.
   */
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);
    function getPair(address tokenA, address tokenB) external view returns (address lpPair);
    function createPair(address tokenA, address tokenB) external returns (address lpPair);
}

interface IUniswapV2Pair {
    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 skim(address to) external;
    function sync() external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function 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;
}

interface AntiSnipe {
    function checkUser(address from, address to, uint256 amt) external returns (bool);
    function setLaunch(address _initialLpPair, uint32 _liqAddBlock, uint64 _liqAddStamp, uint8 dec) external;
    function setLpPair(address pair, bool enabled) external;
    function setProtections(bool _as, bool _ab, bool _algo) external;
    function setGasPriceLimit(uint256 gas) external;
    function removeSniper(address account) external;
    function getSniperAmt() external view returns (uint256);
    function isBlacklisted(address account) external view returns (bool);
    function setBlacklistEnabled(address account, bool enabled) external;
    function setBlacklistEnabledMultiple(address[] memory accounts, bool enabled) external;
}

contract NoFaceInu is Context, IERC20 {
    // Ownership moved to in-contract for customizability.
    address private _owner;

    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _liquidityHolders;
   
    uint256 private startingSupply = 10_000_000;

    string constant private _name = "No Face Inu";
    string constant private _symbol = "NOFACE";

    struct FeesStruct {
        uint16 buyFee;
        uint16 sellFee;
        uint16 transferFee;
    }

    struct StaticValuesStruct {
        uint16 maxBuyTaxes;
        uint16 maxSellTaxes;
        uint16 maxTransferTaxes;
        uint16 masterTaxDivisor;
    }

    struct Ratios {
        uint16 liquidity;
        uint16 marketing;
        uint16 development;
        uint16 total;
    }

    FeesStruct public _taxRates = FeesStruct({
        buyFee: 1000,
        sellFee: 1000,
        transferFee: 1000
        });

    Ratios public _ratios = Ratios({
        liquidity: 2,
        marketing: 5,
        development: 3,
        total: 10
        });

    StaticValuesStruct public staticVals = StaticValuesStruct({
        maxBuyTaxes: 2000,
        maxSellTaxes: 2000,
        maxTransferTaxes: 2000,
        masterTaxDivisor: 10000
        });

    uint8 private _decimals = 18;
    uint256 private _tTotal = startingSupply * 10**_decimals;

    IUniswapV2Router02 public dexRouter;
    address public lpPair;

    // UNI ROUTER
    address private _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;
    address payable private _marketingWallet = payable(0xbb3Fc428c7672249D5Cb98B2a85f63D459a77508);
    address payable private _developmentWallet = payable(0x6549369DBDf2c3E590cbdc25470A99fBe50b68D2);
    
    bool inSwap;
    bool public contractSwapEnabled = false;

    uint256 private maxTPercent = 5;
    uint256 private maxTDivisor = 1000;
    uint256 private maxWPercent = 2;
    uint256 private maxWDivisor = 100;

    uint256 private _maxTxAmount = (_tTotal * maxTPercent) / maxTDivisor;
    uint256 public maxTxAmountUI = (startingSupply * maxTPercent) / maxTDivisor;
    uint256 private _maxWalletSize = (_tTotal * maxWPercent) / maxWDivisor;
    uint256 public maxWalletSizeUI = (startingSupply * maxWPercent) / maxWDivisor;

    uint256 private swapThreshold = (_tTotal * 5) / 10000;
    uint256 private swapAmount = (_tTotal * 5) / 1000;

    bool public tradingEnabled = false;
    bool public _hasLiqBeenAdded = false;
    AntiSnipe antiSnipe;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event ContractSwapEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event SniperCaught(address sniperAddress);
    
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Caller =/= owner.");
        _;
    }
    
    constructor () payable {
        _tOwned[_msgSender()] = _tTotal;

        // Set the owner.
        _owner = msg.sender;

        dexRouter = IUniswapV2Router02(_routerAddress);
        lpPair = IUniswapV2Factory(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;

        _approve(msg.sender, _routerAddress, type(uint256).max);
        _approve(address(this), _routerAddress, type(uint256).max);

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[DEAD] = true;
        _liquidityHolders[owner()] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    receive() external payable {}

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and renouncements.
    // This allows for removal of ownership privileges from the owner once renounced or transferred.
    function owner() public view returns (address) {
        return _owner;
    }

    function transferOwner(address newOwner) external onlyOwner() {
        require(newOwner != address(0), "Call renounceOwnership to transfer owner to the zero address.");
        require(newOwner != DEAD, "Call renounceOwnership to transfer owner to the zero address.");
        setExcludedFromFees(_owner, false);
        setExcludedFromFees(newOwner, true);
        
        if (_marketingWallet == payable(_owner))
            _marketingWallet = payable(newOwner);
        
        if(balanceOf(_owner) > 0) {
            _transfer(_owner, newOwner, balanceOf(_owner));
        }
        
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
        
    }

    function renounceOwnership() public virtual onlyOwner() {
        setExcludedFromFees(_owner, false);
        _owner = address(0);
        emit OwnershipTransferred(_owner, address(0));
    }
//===============================================================================================================
//===============================================================================================================
//===============================================================================================================

    function totalSupply() external view override returns (uint256) { return _tTotal; }
    function decimals() external view override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner(); }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

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

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

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

    function _approve(address sender, address spender, uint256 amount) private {
        require(sender != address(0), "ERC20: Zero Address");
        require(spender != address(0), "ERC20: Zero Address");

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

    function approveContractContingency() public onlyOwner returns (bool) {
        _approve(address(this), address(dexRouter), type(uint256).max);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if (_allowances[sender][msg.sender] != type(uint256).max) {
            _allowances[sender][msg.sender] -= amount;
        }

        return _transfer(sender, recipient, amount);
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }

    function setNewRouter(address newRouter) public onlyOwner() {
        IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter);
        address get_pair = IUniswapV2Factory(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            lpPair = IUniswapV2Factory(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        _approve(address(this), address(dexRouter), type(uint256).max);
    }

    function setLpPair(address pair, bool enabled) external onlyOwner {
        if (enabled == false) {
            lpPairs[pair] = false;
            antiSnipe.setLpPair(pair, false);
        } else {
            if (timeSinceLastPair != 0) {
                require(block.timestamp - timeSinceLastPair > 3 days, "3 Day cooldown.!");
            }
            lpPairs[pair] = true;
            timeSinceLastPair = block.timestamp;
            antiSnipe.setLpPair(pair, true);
        }
    }

    function changeRouterContingency(address router) external onlyOwner {
        require(!_hasLiqBeenAdded);
        _routerAddress = router;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return (_tTotal - (balanceOf(DEAD) + balanceOf(address(0))));
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function setExcludedFromFees(address account, bool enabled) public onlyOwner {
        _isExcludedFromFees[account] = enabled;
    }

    function setInitializer(address initializer) external onlyOwner {
        require(!_hasLiqBeenAdded, "Liquidity is already in.");
        require(initializer != address(this), "Can't be self.");
        antiSnipe = AntiSnipe(initializer);
    }

    function setBlacklistEnabled(address account, bool enabled) external onlyOwner {
        antiSnipe.setBlacklistEnabled(account, enabled);
    }

    function setBlacklistEnabledMultiple(address[] memory accounts, bool enabled) external onlyOwner {
        antiSnipe.setBlacklistEnabledMultiple(accounts, enabled);
    }

    function isBlacklisted(address account) public view returns (bool) {
        return antiSnipe.isBlacklisted(account);
    }

    function getSniperAmt() public view returns (uint256) {
        return antiSnipe.getSniperAmt();
    }

    function removeSniper(address account) external onlyOwner {
        antiSnipe.removeSniper(account);
    }

    function setProtectionSettings(bool _antiSnipe, bool _antiBlock, bool _algo) external onlyOwner {
        antiSnipe.setProtections(_antiSnipe, _antiBlock, _algo);
    }

    function setTaxes(uint16 buyFee, uint16 sellFee, uint16 transferFee) external onlyOwner {
        require(buyFee <= staticVals.maxBuyTaxes
                && sellFee <=staticVals. maxSellTaxes
                && transferFee <= staticVals.maxTransferTaxes,
                "Cannot exceed maximums.");
        _taxRates.buyFee = buyFee;
        _taxRates.sellFee = sellFee;
        _taxRates.transferFee = transferFee;
    }

    function setRatios(uint16 liquidity, uint16 marketing, uint16 development) external onlyOwner {
        require (liquidity + marketing + development >= 99, "Must add up to 100% or 99%.");
        _ratios.liquidity = liquidity;
        _ratios.marketing = marketing;
        _ratios.development = development;
        _ratios.total = liquidity + marketing + development;
    }

    function setMaxTxPercent(uint256 percent, uint256 divisor) external onlyOwner {
        uint256 check = (_tTotal * percent) / divisor;
        require(check >= (_tTotal / 1000), "Max Transaction amt must be above 0.1% of total supply.");
        _maxTxAmount = check;
        maxTxAmountUI = (startingSupply * percent) / divisor;
    }

    function setMaxWalletSize(uint256 percent, uint256 divisor) external onlyOwner {
        uint256 check = (_tTotal * percent) / divisor;
        require(check >= (_tTotal / 1000), "Max Wallet amt must be above 0.1% of total supply.");
        _maxWalletSize = check;
        maxWalletSizeUI = (startingSupply * percent) / divisor;
    }

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

    function setWallets(address payable marketingWallet, address payable developmentWallet) external onlyOwner {
        _marketingWallet = payable(marketingWallet);
        _developmentWallet = payable(developmentWallet);
    }

    function setContractSwapEnabled(bool _enabled) public onlyOwner {
        contractSwapEnabled = _enabled;
        emit ContractSwapEnabledUpdated(_enabled);
    }

    function _hasLimits(address from, address to) private view returns (bool) {
        return from != owner()
            && to != owner()
            && !_liquidityHolders[to]
            && !_liquidityHolders[from]
            && to != DEAD
            && to != address(0)
            && from != address(this);
    }

    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        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");
        if(_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
            if(lpPairs[from] || lpPairs[to]){
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }
            if(to != _routerAddress && !lpPairs[to]) {
                require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize.");
            }
        }

        bool takeFee = true;
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]){
            takeFee = false;
        }

        if (lpPairs[to]) {
            if (!inSwap
                && contractSwapEnabled
            ) {
                uint256 contractTokenBalance = balanceOf(address(this));
                if (contractTokenBalance >= swapThreshold) {
                    if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; }
                    contractSwap(contractTokenBalance);
                }
            }      
        } 
        return _finalizeTransfer(from, to, amount, takeFee);
    }

    function contractSwap(uint256 contractTokenBalance) private lockTheSwap {
        if (_ratios.total == 0)
            return;

        if(_allowances[address(this)][address(dexRouter)] != type(uint256).max) {
            _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        }

        uint256 toLiquify = ((contractTokenBalance * _ratios.liquidity) / _ratios.total) / 2;
        uint256 toSwapForEth = contractTokenBalance - toLiquify;
        
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            toSwapForEth,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );

        uint256 liquidityBalance = ((address(this).balance * _ratios.liquidity) / _ratios.total) / 2;

        if (toLiquify > 0) {
            dexRouter.addLiquidityETH{value: liquidityBalance}(
                address(this),
                toLiquify,
                0, // slippage is unavoidable
                0, // slippage is unavoidable
                DEAD,
                block.timestamp
            );
            emit SwapAndLiquify(toLiquify, liquidityBalance, toLiquify);
        }
        if (contractTokenBalance - toLiquify > 0) {
            _marketingWallet.transfer((address(this).balance * _ratios.marketing) / (_ratios.total - _ratios.liquidity));
            _developmentWallet.transfer(address(this).balance);
        }
    }

    function _checkLiquidityAdd(address from, address to) private {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            _liquidityHolders[from] = true;
            _hasLiqBeenAdded = true;
            if(address(antiSnipe) == address(0)){
                antiSnipe = AntiSnipe(address(this));
            }
            contractSwapEnabled = true;
            emit ContractSwapEnabledUpdated(true);
        }
    }

    function enableTrading() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        require(_hasLiqBeenAdded, "Liquidity must be added.");
        if(address(antiSnipe) == address(0)){
            antiSnipe = AntiSnipe(address(this));
        }
        try antiSnipe.setLaunch(lpPair, uint32(block.number), uint64(block.timestamp), _decimals) {} catch {}
        tradingEnabled = true;
    }

    function sweepContingency() external onlyOwner {
        require(!_hasLiqBeenAdded, "Cannot call after liquidity.");
        payable(owner()).transfer(address(this).balance);
    }

    function _finalizeTransfer(address from, address to, uint256 amount, bool takeFee) private returns (bool) {
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to)) {
                revert("Only owner can transfer at this time.");
            }
        }

        if (_hasLimits(from, to)) {
            bool checked;
            try antiSnipe.checkUser(from, to, amount) returns (bool check) {
                checked = check;
            } catch {
                revert();
            }

            if(!checked) {
                revert();
            }
        }

        _tOwned[from] -= amount;
        uint256 amountReceived = (takeFee) ? takeTaxes(from, to, amount) : amount;
        _tOwned[to] += amountReceived;

        emit Transfer(from, to, amountReceived);
        return true;
    }

    function takeTaxes(address from, address to, uint256 amount) internal returns (uint256) {
        uint256 currentFee;
        if (from == lpPair) {
            currentFee = _taxRates.buyFee;
        } else if (to == lpPair) {
            currentFee = _taxRates.sellFee;
        } else {
            currentFee = _taxRates.transferFee;
        }

        uint256 feeAmount = amount * currentFee / staticVals.masterTaxDivisor;

        _tOwned[address(this)] += feeAmount;
        emit Transfer(from, address(this), feeAmount);

        return amount - feeAmount;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","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":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":"address","name":"sniperAddress","type":"address"}],"name":"SniperCaught","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"},{"internalType":"uint16","name":"total","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxRates","outputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":[],"name":"approveContractContingency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"changeRouterContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSniperAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmountUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletSizeUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabledMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initializer","type":"address"}],"name":"setInitializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_antiSnipe","type":"bool"},{"internalType":"bool","name":"_antiBlock","type":"bool"},{"internalType":"bool","name":"_algo","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketingWallet","type":"address"},{"internalType":"address payable","name":"developmentWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"staticVals","outputs":[{"internalType":"uint16","name":"maxBuyTaxes","type":"uint16"},{"internalType":"uint16","name":"maxSellTaxes","type":"uint16"},{"internalType":"uint16","name":"maxTransferTaxes","type":"uint16"},{"internalType":"uint16","name":"masterTaxDivisor","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","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":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60006003908155629896806007556103e8608081905260a081905260c0526008805465ffffffffffff19166503e803e803e8179055600260e05260056101005261012052600a610140819052600980546001600160401b0319908116660a000300050002179091556101e06040526107d06101608190526101808190526101a0526127106101c05281541667271007d007d007d0178155600b8054601260ff19919091168117909155620000b3916200076d565b600754620000c2919062000785565b600c819055600f80546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d179091556010805490911673bb3fc428c7672249d5cb98b2a85f63d459a7750817905560118054600161ff0160a01b031916736549369dbdf2c3e590cbdc25470a99fbe50b68d2179055600560128190556103e8601381905560026014556064601555916200015c919062000785565b620001689190620007a7565b60165560135460125460075462000180919062000785565b6200018c9190620007a7565b601755601554601454600c54620001a4919062000785565b620001b09190620007a7565b601855601554601454600754620001c8919062000785565b620001d49190620007a7565b601955612710600c546005620001eb919062000785565b620001f79190620007a7565b601a556103e8600c5460056200020e919062000785565b6200021a9190620007a7565b601b55601c805461ffff19169055600c543360008181526001602090815260408083209490945581546001600160a01b0319908116909317909155600f54600d80546001600160a01b03909216919093168117909255825163c45a015560e01b81529251919263c45a015592600480830193928290030181865afa158015620002a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cd9190620007ca565b6001600160a01b031663c9c65396600d60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200032f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003559190620007ca565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015620003a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c89190620007ca565b600e80546001600160a01b0319166001600160a01b039283169081179091556000908152600260205260409020805460ff19166001179055600f54620004149133911660001962000557565b600f54620004309030906001600160a01b031660001962000557565b600160056000620004496000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526005909252812080548316600190811790915561dead82527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba80549093168117909255600690620004d16000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055620005013390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600c546040516200054991815260200190565b60405180910390a3620007f5565b6001600160a01b038316620005a95760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b038216620005f75760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401620005a0565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620006af57816000190482111562000693576200069362000658565b80851615620006a157918102915b93841c939080029062000673565b509250929050565b600082620006c85750600162000767565b81620006d75750600062000767565b8160018114620006f05760028114620006fb576200071b565b600191505062000767565b60ff8411156200070f576200070f62000658565b50506001821b62000767565b5060208310610133831016604e8410600b841016171562000740575081810a62000767565b6200074c83836200066e565b806000190482111562000763576200076362000658565b0290505b92915050565b60006200077e60ff841683620006b7565b9392505050565b6000816000190483118215151615620007a257620007a262000658565b500290565b600082620007c557634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215620007dd57600080fd5b81516001600160a01b03811681146200077e57600080fd5b613ac880620008056000396000f3fe6080604052600436106103225760003560e01c80635c24b074116101a5578063aa22b172116100ec578063eafb5a3c11610095578063f6540ec71161006f578063f6540ec7146109c7578063fb78680d146109dd578063fdb78c0e146109fd578063fe575a8714610a3057600080fd5b8063eafb5a3c14610972578063ee5d9c2d14610992578063eec2744e146109a757600080fd5b8063cf847706116100c6578063cf847706146108cf578063d3f6a1571461090c578063dd62ed3e1461092c57600080fd5b8063aa22b1721461086f578063b6f8f8dc1461088f578063cab5ebea146108af57600080fd5b80638a63bd9b1161014e57806395d89b411161012857806395d89b41146107e9578063a457c2d71461082f578063a9059cbb1461084f57600080fd5b80638a63bd9b146107bf5780638a8c523c146107d45780638da5cb5b146107a157600080fd5b8063715018a61161017f578063715018a61461076c57806380c581d114610781578063893d20e8146107a157600080fd5b80635c24b07414610700578063640384091461072057806370a082311461073657600080fd5b806332cde664116102695780634ada218b1161021257806350a8e016116101ec57806350a8e016146106ac57806355dbc369146106cb578063590ffdce146106e057600080fd5b80634ada218b146106395780634fb2e45d146106535780634fbee1931461067357600080fd5b8063395093511161024357806339509351146105d95780633f3cf56c146105f9578063452ed4f11461061957600080fd5b806332cde6641461057957806333251a0b14610599578063384f36b6146105b957600080fd5b806318160ddd116102cb57806326003957116102a557806326003957146105225780632b112e4914610542578063313ce5671461055757600080fd5b806318160ddd146104785780631b6afa2d1461049757806323b872dd1461050257600080fd5b806306fdde03116102fc57806306fdde03146103d95780630758d92414610428578063095ea7b31461044857600080fd5b806303fd2a451461032e57806305bbedb614610361578063069d955f1461038357600080fd5b3661032957005b600080fd5b34801561033a57600080fd5b5061034461dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561036d57600080fd5b5061038161037c36600461350f565b610a50565b005b34801561038f57600080fd5b506008546103b49061ffff808216916201000081048216916401000000009091041683565b6040805161ffff94851681529284166020840152921691810191909152606001610358565b3480156103e557600080fd5b5060408051808201909152600b81527f4e6f204661636520496e7500000000000000000000000000000000000000000060208201525b60405161035891906135e6565b34801561043457600080fd5b50600d54610344906001600160a01b031681565b34801561045457600080fd5b5061046861046336600461363b565b610b29565b6040519015158152602001610358565b34801561048457600080fd5b50600c545b604051908152602001610358565b3480156104a357600080fd5b50600a546104d49061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff95861681529385166020850152918416918301919091529091166060820152608001610358565b34801561050e57600080fd5b5061046861051d366004613667565b610b3f565b34801561052e57600080fd5b5061038161053d3660046136a8565b610bb7565b34801561054e57600080fd5b50610489610cce565b34801561056357600080fd5b50600b5460405160ff9091168152602001610358565b34801561058557600080fd5b506103816105943660046136dc565b610d3c565b3480156105a557600080fd5b506103816105b436600461371f565b610e91565b3480156105c557600080fd5b506103816105d436600461371f565b610f61565b3480156105e557600080fd5b506104686105f436600461363b565b610ff3565b34801561060557600080fd5b506103816106143660046136a8565b61102f565b34801561062557600080fd5b50600e54610344906001600160a01b031681565b34801561064557600080fd5b50601c546104689060ff1681565b34801561065f57600080fd5b5061038161066e36600461371f565b611146565b34801561067f57600080fd5b5061046861068e36600461371f565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156106b857600080fd5b50601c5461046890610100900460ff1681565b3480156106d757600080fd5b50610489611396565b3480156106ec57600080fd5b506103816106fb36600461373c565b61140f565b34801561070c57600080fd5b5061038161071b36600461371f565b611488565b34801561072c57600080fd5b5061048960175481565b34801561074257600080fd5b5061048961075136600461371f565b6001600160a01b031660009081526001602052604090205490565b34801561077857600080fd5b506103816115c7565b34801561078d57600080fd5b5061038161079c36600461373c565b611677565b3480156107ad57600080fd5b506000546001600160a01b0316610344565b3480156107cb57600080fd5b50610468611821565b3480156107e057600080fd5b50610381611890565b3480156107f557600080fd5b5060408051808201909152600681527f4e4f464143450000000000000000000000000000000000000000000000000000602082015261041b565b34801561083b57600080fd5b5061046861084a36600461363b565b611a80565b34801561085b57600080fd5b5061046861086a36600461363b565b611ab7565b34801561087b57600080fd5b5061038161088a3660046136dc565b611ace565b34801561089b57600080fd5b506103816108aa366004613775565b611c4a565b3480156108bb57600080fd5b506103816108ca3660046137c0565b611d2a565b3480156108db57600080fd5b506009546104d49061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b34801561091857600080fd5b506103816109273660046137dd565b611dfd565b34801561093857600080fd5b506104896109473660046137dd565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561097e57600080fd5b5061038161098d36600461371f565b611e86565b34801561099e57600080fd5b5061038161223a565b3480156109b357600080fd5b506103816109c236600461373c565b61231d565b3480156109d357600080fd5b5061048960195481565b3480156109e957600080fd5b506103816109f836600461380b565b6123c5565b348015610a0957600080fd5b50601154610468907501000000000000000000000000000000000000000000900460ff1681565b348015610a3c57600080fd5b50610468610a4b36600461371f565b612452565b6000546001600160a01b03163314610aa35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b601c546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610af39085908590600401613881565b600060405180830381600087803b158015610b0d57600080fd5b505af1158015610b21573d6000803e3d6000fd5b505050505050565b6000610b363384846124e6565b50600192915050565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610ba4576001600160a01b038416600090815260046020908152604080832033845290915281208054849290610b9e9084906138d4565b90915550505b610baf8484846125f3565b949350505050565b6000546001600160a01b03163314610c055760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a9a565b60008183600c54610c1691906138eb565b610c20919061390a565b90506103e8600c54610c32919061390a565b811015610ca75760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610a9a565b60188190556007548290610cbc9085906138eb565b610cc6919061390a565b601955505050565b60016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb495461dead60009081527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d549091610d2a91613945565b600c54610d3791906138d4565b905090565b6000546001600160a01b03163314610d8a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a9a565b600a5461ffff90811690841611801590610db45750600a5461ffff62010000909104811690831611155b8015610dd25750600a5461ffff640100000000909104811690821611155b610e1e5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610a9a565b6008805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6000546001600160a01b03163314610edf5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a9a565b601c546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401600060405180830381600087803b158015610f4657600080fd5b505af1158015610f5a573d6000803e3d6000fd5b5050505050565b6000546001600160a01b03163314610faf5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a9a565b601c54610100900460ff1615610fc457600080fd5b600f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610b3691859061102a908690613945565b6124e6565b6000546001600160a01b0316331461107d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a9a565b60008183600c5461108e91906138eb565b611098919061390a565b90506103e8600c546110aa919061390a565b81101561111f5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610a9a565b601681905560075482906111349085906138eb565b61113e919061390a565b601755505050565b6000546001600160a01b031633146111945760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a9a565b6001600160a01b0381166112105760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610a9a565b6001600160a01b03811661dead14156112915760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610a9a565b600080546112aa916001600160a01b039091169061140f565b6112b581600161140f565b6000546010546001600160a01b03908116911614156112f7576010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600080546001600160a01b03168152600160205260409020541561133e57600080546001600160a01b0316808252600160205260409091205461133c919083906125f3565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000601c60029054906101000a90046001600160a01b03166001600160a01b03166355dbc3696040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d37919061395d565b6000546001600160a01b0316331461145d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a9a565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146114d65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a9a565b601c54610100900460ff161561152e5760405162461bcd60e51b815260206004820152601860248201527f4c697175696469747920697320616c726561647920696e2e00000000000000006044820152606401610a9a565b6001600160a01b0381163014156115875760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610a9a565b601c80546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6000546001600160a01b031633146116155760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a9a565b6000805461162e916001600160a01b039091169061140f565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146116c55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a9a565b8061173c576001600160a01b03828116600081815260026020526040808220805460ff19169055601c5490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401610af3565b600354156117a3576203f4806003544261175691906138d4565b116117a35760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610a9a565b6001600160a01b0382811660008181526002602052604090819020805460ff1916600190811790915542600355601c5491517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830152620100009004909116906380c581d190604401610af3565b5050565b600080546001600160a01b031633146118705760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a9a565b600d5461188a9030906001600160a01b03166000196124e6565b50600190565b6000546001600160a01b031633146118de5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a9a565b601c5460ff16156119315760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610a9a565b601c54610100900460ff166119885760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610a9a565b601c546201000090046001600160a01b03166119ce57601c80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601c54600e54600b546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b158015611a5f57600080fd5b505af1925050508015611a70575060015b50601c805460ff19166001179055565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610b3691859061102a9086906138d4565b6000611ac43384846125f3565b5060019392505050565b6000546001600160a01b03163314611b1c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a9a565b606381611b298486613976565b611b339190613976565b61ffff161015611b855760405162461bcd60e51b815260206004820152601b60248201527f4d7573742061646420757020746f2031303025206f72203939252e00000000006044820152606401610a9a565b6009805461ffff838116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff86831662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090941692881692909217929092171617905580611bfd8385613976565b611c079190613976565b6009805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff909216919091179055505050565b6000546001600160a01b03163314611c985760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a9a565b601c546040517f6a34b758000000000000000000000000000000000000000000000000000000008152841515600482015283151560248201528215156044820152620100009091046001600160a01b031690636a34b75890606401600060405180830381600087803b158015611d0d57600080fd5b505af1158015611d21573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b03163314611d785760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a9a565b601180548215157501000000000000000000000000000000000000000000027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff9091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790611df290831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611e4b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a9a565b601080546001600160a01b0393841673ffffffffffffffffffffffffffffffffffffffff199182161790915560118054929093169116179055565b6000546001600160a01b03163314611ed45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a9a565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f3d919061399c565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fae919061399c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612011573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612035919061399c565b90506001600160a01b0381166121d357816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612083573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a7919061399c565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612118919061399c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561217d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a1919061399c565b600e805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790556121fc565b600e805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600d805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556122359030906000196124e6565b505050565b6000546001600160a01b031633146122885760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a9a565b601c54610100900460ff16156122e05760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610a9a565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f1935050505015801561231a573d6000803e3d6000fd5b50565b6000546001600160a01b0316331461236b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a9a565b601c546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610af3565b6000546001600160a01b031633146124135760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a9a565b8284600c5461242291906138eb565b61242c919061390a565b601a55600c54819061243f9084906138eb565b612449919061390a565b601b5550505050565b601c546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa1580156124bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e091906139b9565b92915050565b6001600160a01b03831661253c5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610a9a565b6001600160a01b0382166125925760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610a9a565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166126715760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610a9a565b6001600160a01b0383166126ed5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610a9a565b600082116127635760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610a9a565b61276d8484612a5b565b1561295d57601c5460ff166127c45760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610a9a565b6001600160a01b03841660009081526002602052604090205460ff168061280357506001600160a01b03831660009081526002602052604090205460ff165b15612880576016548211156128805760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610a9a565b600f546001600160a01b038481169116148015906128b757506001600160a01b03831660009081526002602052604090205460ff16155b1561295d57601854826128df856001600160a01b031660009081526001602052604090205490565b6128e99190613945565b111561295d5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610a9a565b6001600160a01b03841660009081526005602052604090205460019060ff168061299f57506001600160a01b03841660009081526005602052604090205460ff165b156129a8575060005b6001600160a01b03841660009081526002602052604090205460ff1615612a465760115474010000000000000000000000000000000000000000900460ff16158015612a0f57506011547501000000000000000000000000000000000000000000900460ff165b15612a465730600090815260016020526040902054601a548110612a4457601b548110612a3b5750601b545b612a4481612b19565b505b612a5285858584612fb3565b95945050505050565b600080546001600160a01b03848116911614801590612a8857506000546001600160a01b03838116911614155b8015612aad57506001600160a01b03821660009081526006602052604090205460ff16155b8015612ad257506001600160a01b03831660009081526006602052604090205460ff16155b8015612ae957506001600160a01b03821661dead14155b8015612afd57506001600160a01b03821615155b8015612b1257506001600160a01b0383163014155b9392505050565b601180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017905560095461ffff660100000000000090910416612b7357612f88565b306000908152600460209081526040808320600d546001600160a01b0316845290915290205460001914612bcc57306000908152600460209081526040808320600d546001600160a01b03168452909152902060001990555b60095460009060029061ffff66010000000000008204811691612bf09116856138eb565b612bfa919061390a565b612c04919061390a565b90506000612c1282846138d4565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110612c4c57612c4c6139d6565b6001600160a01b03928316602091820292909201810191909152600d54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015612cbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ce2919061399c565b81600181518110612cf557612cf56139d6565b6001600160a01b039283166020918202929092010152600d546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790612d54908590600090869030904290600401613a05565b600060405180830381600087803b158015612d6e57600080fd5b505af1158015612d82573d6000803e3d6000fd5b5050600954600092506002915061ffff66010000000000008204811691612daa9116476138eb565b612db4919061390a565b612dbe919061390a565b90508315612eb757600d546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101869052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612e4d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e729190613a41565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b6000612ec385876138d4565b1115612f83576010546009546001600160a01b03909116906108fc90612efa9061ffff808216916601000000000000900416613a6f565b60095461ffff91821691612f159162010000900416476138eb565b612f1f919061390a565b6040518115909202916000818181858888f19350505050158015612f47573d6000803e3d6000fd5b506011546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612f81573d6000803e3d6000fd5b505b505050505b50601180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b601c54600090610100900460ff1661305f57612fcf85856131ef565b601c54610100900460ff16158015612fec5750612fec8585612a5b565b1561305f5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610a9a565b6130698585612a5b565b1561311c57601c546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152868116602483015260448201869052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015613105575060408051601f3d908101601f19168201909252613102918101906139b9565b60015b61310e57600080fd5b90508061311a57600080fd5b505b6001600160a01b038516600090815260016020526040812080548592906131449084906138d4565b9091555060009050826131575783613162565b61316286868661339b565b6001600160a01b03861660009081526001602052604081208054929350839290919061318f908490613945565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516131db91815260200190565b60405180910390a350600195945050505050565b601c54610100900460ff161561326d5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610a9a565b6132778282612a5b565b1580156132915750600e546001600160a01b038281169116145b1561181d576001600160a01b038083166000908152600660205260409020805460ff19166001179055601c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017908190556201000090041661332357601c80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601180547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b600e5460009081906001600160a01b03868116911614156133c3575060085461ffff166133fd565b600e546001600160a01b03858116911614156133ec575060085462010000900461ffff166133fd565b50600854640100000000900461ffff165b600a546000906601000000000000900461ffff1661341b83866138eb565b613425919061390a565b30600090815260016020526040812080549293508392909190613449908490613945565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a361349881856138d4565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6001600160a01b038116811461231a57600080fd5b80356134f1816134d1565b919050565b801515811461231a57600080fd5b80356134f1816134f6565b6000806040838503121561352257600080fd5b823567ffffffffffffffff8082111561353a57600080fd5b818501915085601f83011261354e57600080fd5b8135602082821115613562576135626134a2565b8160051b604051601f19603f83011681018181108682111715613587576135876134a2565b6040529283528183019350848101820192898411156135a557600080fd5b948201945b838610156135ca576135bb866134e6565b855294820194938201936135aa565b96506135d99050878201613504565b9450505050509250929050565b600060208083528351808285015260005b81811015613613578581018301518582016040015282016135f7565b81811115613625576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561364e57600080fd5b8235613659816134d1565b946020939093013593505050565b60008060006060848603121561367c57600080fd5b8335613687816134d1565b92506020840135613697816134d1565b929592945050506040919091013590565b600080604083850312156136bb57600080fd5b50508035926020909101359150565b803561ffff811681146134f157600080fd5b6000806000606084860312156136f157600080fd5b6136fa846136ca565b9250613708602085016136ca565b9150613716604085016136ca565b90509250925092565b60006020828403121561373157600080fd5b8135612b12816134d1565b6000806040838503121561374f57600080fd5b823561375a816134d1565b9150602083013561376a816134f6565b809150509250929050565b60008060006060848603121561378a57600080fd5b8335613795816134f6565b925060208401356137a5816134f6565b915060408401356137b5816134f6565b809150509250925092565b6000602082840312156137d257600080fd5b8135612b12816134f6565b600080604083850312156137f057600080fd5b82356137fb816134d1565b9150602083013561376a816134d1565b6000806000806080858703121561382157600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b838110156138765781516001600160a01b031687529582019590820190600101613851565b509495945050505050565b604081526000613894604083018561383d565b905082151560208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156138e6576138e66138a5565b500390565b6000816000190483118215151615613905576139056138a5565b500290565b600082613940577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008219821115613958576139586138a5565b500190565b60006020828403121561396f57600080fd5b5051919050565b600061ffff808316818516808303821115613993576139936138a5565b01949350505050565b6000602082840312156139ae57600080fd5b8151612b12816134d1565b6000602082840312156139cb57600080fd5b8151612b12816134f6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b85815284602082015260a060408201526000613a2460a083018661383d565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215613a5657600080fd5b8351925060208401519150604084015190509250925092565b600061ffff83811690831681811015613a8a57613a8a6138a5565b03939250505056fea2646970667358221220fecf08ca678d681a4120ab8ecf80b5819afd8ebb69ed308551a1aac78059427664736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106103225760003560e01c80635c24b074116101a5578063aa22b172116100ec578063eafb5a3c11610095578063f6540ec71161006f578063f6540ec7146109c7578063fb78680d146109dd578063fdb78c0e146109fd578063fe575a8714610a3057600080fd5b8063eafb5a3c14610972578063ee5d9c2d14610992578063eec2744e146109a757600080fd5b8063cf847706116100c6578063cf847706146108cf578063d3f6a1571461090c578063dd62ed3e1461092c57600080fd5b8063aa22b1721461086f578063b6f8f8dc1461088f578063cab5ebea146108af57600080fd5b80638a63bd9b1161014e57806395d89b411161012857806395d89b41146107e9578063a457c2d71461082f578063a9059cbb1461084f57600080fd5b80638a63bd9b146107bf5780638a8c523c146107d45780638da5cb5b146107a157600080fd5b8063715018a61161017f578063715018a61461076c57806380c581d114610781578063893d20e8146107a157600080fd5b80635c24b07414610700578063640384091461072057806370a082311461073657600080fd5b806332cde664116102695780634ada218b1161021257806350a8e016116101ec57806350a8e016146106ac57806355dbc369146106cb578063590ffdce146106e057600080fd5b80634ada218b146106395780634fb2e45d146106535780634fbee1931461067357600080fd5b8063395093511161024357806339509351146105d95780633f3cf56c146105f9578063452ed4f11461061957600080fd5b806332cde6641461057957806333251a0b14610599578063384f36b6146105b957600080fd5b806318160ddd116102cb57806326003957116102a557806326003957146105225780632b112e4914610542578063313ce5671461055757600080fd5b806318160ddd146104785780631b6afa2d1461049757806323b872dd1461050257600080fd5b806306fdde03116102fc57806306fdde03146103d95780630758d92414610428578063095ea7b31461044857600080fd5b806303fd2a451461032e57806305bbedb614610361578063069d955f1461038357600080fd5b3661032957005b600080fd5b34801561033a57600080fd5b5061034461dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561036d57600080fd5b5061038161037c36600461350f565b610a50565b005b34801561038f57600080fd5b506008546103b49061ffff808216916201000081048216916401000000009091041683565b6040805161ffff94851681529284166020840152921691810191909152606001610358565b3480156103e557600080fd5b5060408051808201909152600b81527f4e6f204661636520496e7500000000000000000000000000000000000000000060208201525b60405161035891906135e6565b34801561043457600080fd5b50600d54610344906001600160a01b031681565b34801561045457600080fd5b5061046861046336600461363b565b610b29565b6040519015158152602001610358565b34801561048457600080fd5b50600c545b604051908152602001610358565b3480156104a357600080fd5b50600a546104d49061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff95861681529385166020850152918416918301919091529091166060820152608001610358565b34801561050e57600080fd5b5061046861051d366004613667565b610b3f565b34801561052e57600080fd5b5061038161053d3660046136a8565b610bb7565b34801561054e57600080fd5b50610489610cce565b34801561056357600080fd5b50600b5460405160ff9091168152602001610358565b34801561058557600080fd5b506103816105943660046136dc565b610d3c565b3480156105a557600080fd5b506103816105b436600461371f565b610e91565b3480156105c557600080fd5b506103816105d436600461371f565b610f61565b3480156105e557600080fd5b506104686105f436600461363b565b610ff3565b34801561060557600080fd5b506103816106143660046136a8565b61102f565b34801561062557600080fd5b50600e54610344906001600160a01b031681565b34801561064557600080fd5b50601c546104689060ff1681565b34801561065f57600080fd5b5061038161066e36600461371f565b611146565b34801561067f57600080fd5b5061046861068e36600461371f565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156106b857600080fd5b50601c5461046890610100900460ff1681565b3480156106d757600080fd5b50610489611396565b3480156106ec57600080fd5b506103816106fb36600461373c565b61140f565b34801561070c57600080fd5b5061038161071b36600461371f565b611488565b34801561072c57600080fd5b5061048960175481565b34801561074257600080fd5b5061048961075136600461371f565b6001600160a01b031660009081526001602052604090205490565b34801561077857600080fd5b506103816115c7565b34801561078d57600080fd5b5061038161079c36600461373c565b611677565b3480156107ad57600080fd5b506000546001600160a01b0316610344565b3480156107cb57600080fd5b50610468611821565b3480156107e057600080fd5b50610381611890565b3480156107f557600080fd5b5060408051808201909152600681527f4e4f464143450000000000000000000000000000000000000000000000000000602082015261041b565b34801561083b57600080fd5b5061046861084a36600461363b565b611a80565b34801561085b57600080fd5b5061046861086a36600461363b565b611ab7565b34801561087b57600080fd5b5061038161088a3660046136dc565b611ace565b34801561089b57600080fd5b506103816108aa366004613775565b611c4a565b3480156108bb57600080fd5b506103816108ca3660046137c0565b611d2a565b3480156108db57600080fd5b506009546104d49061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b34801561091857600080fd5b506103816109273660046137dd565b611dfd565b34801561093857600080fd5b506104896109473660046137dd565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561097e57600080fd5b5061038161098d36600461371f565b611e86565b34801561099e57600080fd5b5061038161223a565b3480156109b357600080fd5b506103816109c236600461373c565b61231d565b3480156109d357600080fd5b5061048960195481565b3480156109e957600080fd5b506103816109f836600461380b565b6123c5565b348015610a0957600080fd5b50601154610468907501000000000000000000000000000000000000000000900460ff1681565b348015610a3c57600080fd5b50610468610a4b36600461371f565b612452565b6000546001600160a01b03163314610aa35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b601c546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610af39085908590600401613881565b600060405180830381600087803b158015610b0d57600080fd5b505af1158015610b21573d6000803e3d6000fd5b505050505050565b6000610b363384846124e6565b50600192915050565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610ba4576001600160a01b038416600090815260046020908152604080832033845290915281208054849290610b9e9084906138d4565b90915550505b610baf8484846125f3565b949350505050565b6000546001600160a01b03163314610c055760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a9a565b60008183600c54610c1691906138eb565b610c20919061390a565b90506103e8600c54610c32919061390a565b811015610ca75760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610a9a565b60188190556007548290610cbc9085906138eb565b610cc6919061390a565b601955505050565b60016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb495461dead60009081527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d549091610d2a91613945565b600c54610d3791906138d4565b905090565b6000546001600160a01b03163314610d8a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a9a565b600a5461ffff90811690841611801590610db45750600a5461ffff62010000909104811690831611155b8015610dd25750600a5461ffff640100000000909104811690821611155b610e1e5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610a9a565b6008805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6000546001600160a01b03163314610edf5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a9a565b601c546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401600060405180830381600087803b158015610f4657600080fd5b505af1158015610f5a573d6000803e3d6000fd5b5050505050565b6000546001600160a01b03163314610faf5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a9a565b601c54610100900460ff1615610fc457600080fd5b600f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610b3691859061102a908690613945565b6124e6565b6000546001600160a01b0316331461107d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a9a565b60008183600c5461108e91906138eb565b611098919061390a565b90506103e8600c546110aa919061390a565b81101561111f5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610a9a565b601681905560075482906111349085906138eb565b61113e919061390a565b601755505050565b6000546001600160a01b031633146111945760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a9a565b6001600160a01b0381166112105760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610a9a565b6001600160a01b03811661dead14156112915760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610a9a565b600080546112aa916001600160a01b039091169061140f565b6112b581600161140f565b6000546010546001600160a01b03908116911614156112f7576010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600080546001600160a01b03168152600160205260409020541561133e57600080546001600160a01b0316808252600160205260409091205461133c919083906125f3565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000601c60029054906101000a90046001600160a01b03166001600160a01b03166355dbc3696040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d37919061395d565b6000546001600160a01b0316331461145d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a9a565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146114d65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a9a565b601c54610100900460ff161561152e5760405162461bcd60e51b815260206004820152601860248201527f4c697175696469747920697320616c726561647920696e2e00000000000000006044820152606401610a9a565b6001600160a01b0381163014156115875760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610a9a565b601c80546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6000546001600160a01b031633146116155760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a9a565b6000805461162e916001600160a01b039091169061140f565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146116c55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a9a565b8061173c576001600160a01b03828116600081815260026020526040808220805460ff19169055601c5490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401610af3565b600354156117a3576203f4806003544261175691906138d4565b116117a35760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610a9a565b6001600160a01b0382811660008181526002602052604090819020805460ff1916600190811790915542600355601c5491517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830152620100009004909116906380c581d190604401610af3565b5050565b600080546001600160a01b031633146118705760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a9a565b600d5461188a9030906001600160a01b03166000196124e6565b50600190565b6000546001600160a01b031633146118de5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a9a565b601c5460ff16156119315760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610a9a565b601c54610100900460ff166119885760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610a9a565b601c546201000090046001600160a01b03166119ce57601c80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601c54600e54600b546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b158015611a5f57600080fd5b505af1925050508015611a70575060015b50601c805460ff19166001179055565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610b3691859061102a9086906138d4565b6000611ac43384846125f3565b5060019392505050565b6000546001600160a01b03163314611b1c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a9a565b606381611b298486613976565b611b339190613976565b61ffff161015611b855760405162461bcd60e51b815260206004820152601b60248201527f4d7573742061646420757020746f2031303025206f72203939252e00000000006044820152606401610a9a565b6009805461ffff838116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff86831662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090941692881692909217929092171617905580611bfd8385613976565b611c079190613976565b6009805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff909216919091179055505050565b6000546001600160a01b03163314611c985760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a9a565b601c546040517f6a34b758000000000000000000000000000000000000000000000000000000008152841515600482015283151560248201528215156044820152620100009091046001600160a01b031690636a34b75890606401600060405180830381600087803b158015611d0d57600080fd5b505af1158015611d21573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b03163314611d785760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a9a565b601180548215157501000000000000000000000000000000000000000000027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff9091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790611df290831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611e4b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a9a565b601080546001600160a01b0393841673ffffffffffffffffffffffffffffffffffffffff199182161790915560118054929093169116179055565b6000546001600160a01b03163314611ed45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a9a565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f3d919061399c565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fae919061399c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612011573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612035919061399c565b90506001600160a01b0381166121d357816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612083573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a7919061399c565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612118919061399c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561217d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a1919061399c565b600e805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790556121fc565b600e805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600d805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556122359030906000196124e6565b505050565b6000546001600160a01b031633146122885760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a9a565b601c54610100900460ff16156122e05760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610a9a565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f1935050505015801561231a573d6000803e3d6000fd5b50565b6000546001600160a01b0316331461236b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a9a565b601c546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610af3565b6000546001600160a01b031633146124135760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a9a565b8284600c5461242291906138eb565b61242c919061390a565b601a55600c54819061243f9084906138eb565b612449919061390a565b601b5550505050565b601c546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa1580156124bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e091906139b9565b92915050565b6001600160a01b03831661253c5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610a9a565b6001600160a01b0382166125925760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610a9a565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166126715760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610a9a565b6001600160a01b0383166126ed5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610a9a565b600082116127635760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610a9a565b61276d8484612a5b565b1561295d57601c5460ff166127c45760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610a9a565b6001600160a01b03841660009081526002602052604090205460ff168061280357506001600160a01b03831660009081526002602052604090205460ff165b15612880576016548211156128805760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610a9a565b600f546001600160a01b038481169116148015906128b757506001600160a01b03831660009081526002602052604090205460ff16155b1561295d57601854826128df856001600160a01b031660009081526001602052604090205490565b6128e99190613945565b111561295d5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610a9a565b6001600160a01b03841660009081526005602052604090205460019060ff168061299f57506001600160a01b03841660009081526005602052604090205460ff165b156129a8575060005b6001600160a01b03841660009081526002602052604090205460ff1615612a465760115474010000000000000000000000000000000000000000900460ff16158015612a0f57506011547501000000000000000000000000000000000000000000900460ff165b15612a465730600090815260016020526040902054601a548110612a4457601b548110612a3b5750601b545b612a4481612b19565b505b612a5285858584612fb3565b95945050505050565b600080546001600160a01b03848116911614801590612a8857506000546001600160a01b03838116911614155b8015612aad57506001600160a01b03821660009081526006602052604090205460ff16155b8015612ad257506001600160a01b03831660009081526006602052604090205460ff16155b8015612ae957506001600160a01b03821661dead14155b8015612afd57506001600160a01b03821615155b8015612b1257506001600160a01b0383163014155b9392505050565b601180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017905560095461ffff660100000000000090910416612b7357612f88565b306000908152600460209081526040808320600d546001600160a01b0316845290915290205460001914612bcc57306000908152600460209081526040808320600d546001600160a01b03168452909152902060001990555b60095460009060029061ffff66010000000000008204811691612bf09116856138eb565b612bfa919061390a565b612c04919061390a565b90506000612c1282846138d4565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110612c4c57612c4c6139d6565b6001600160a01b03928316602091820292909201810191909152600d54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015612cbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ce2919061399c565b81600181518110612cf557612cf56139d6565b6001600160a01b039283166020918202929092010152600d546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790612d54908590600090869030904290600401613a05565b600060405180830381600087803b158015612d6e57600080fd5b505af1158015612d82573d6000803e3d6000fd5b5050600954600092506002915061ffff66010000000000008204811691612daa9116476138eb565b612db4919061390a565b612dbe919061390a565b90508315612eb757600d546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101869052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612e4d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e729190613a41565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b6000612ec385876138d4565b1115612f83576010546009546001600160a01b03909116906108fc90612efa9061ffff808216916601000000000000900416613a6f565b60095461ffff91821691612f159162010000900416476138eb565b612f1f919061390a565b6040518115909202916000818181858888f19350505050158015612f47573d6000803e3d6000fd5b506011546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612f81573d6000803e3d6000fd5b505b505050505b50601180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b601c54600090610100900460ff1661305f57612fcf85856131ef565b601c54610100900460ff16158015612fec5750612fec8585612a5b565b1561305f5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610a9a565b6130698585612a5b565b1561311c57601c546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152868116602483015260448201869052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015613105575060408051601f3d908101601f19168201909252613102918101906139b9565b60015b61310e57600080fd5b90508061311a57600080fd5b505b6001600160a01b038516600090815260016020526040812080548592906131449084906138d4565b9091555060009050826131575783613162565b61316286868661339b565b6001600160a01b03861660009081526001602052604081208054929350839290919061318f908490613945565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516131db91815260200190565b60405180910390a350600195945050505050565b601c54610100900460ff161561326d5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610a9a565b6132778282612a5b565b1580156132915750600e546001600160a01b038281169116145b1561181d576001600160a01b038083166000908152600660205260409020805460ff19166001179055601c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017908190556201000090041661332357601c80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601180547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b600e5460009081906001600160a01b03868116911614156133c3575060085461ffff166133fd565b600e546001600160a01b03858116911614156133ec575060085462010000900461ffff166133fd565b50600854640100000000900461ffff165b600a546000906601000000000000900461ffff1661341b83866138eb565b613425919061390a565b30600090815260016020526040812080549293508392909190613449908490613945565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a361349881856138d4565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6001600160a01b038116811461231a57600080fd5b80356134f1816134d1565b919050565b801515811461231a57600080fd5b80356134f1816134f6565b6000806040838503121561352257600080fd5b823567ffffffffffffffff8082111561353a57600080fd5b818501915085601f83011261354e57600080fd5b8135602082821115613562576135626134a2565b8160051b604051601f19603f83011681018181108682111715613587576135876134a2565b6040529283528183019350848101820192898411156135a557600080fd5b948201945b838610156135ca576135bb866134e6565b855294820194938201936135aa565b96506135d99050878201613504565b9450505050509250929050565b600060208083528351808285015260005b81811015613613578581018301518582016040015282016135f7565b81811115613625576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561364e57600080fd5b8235613659816134d1565b946020939093013593505050565b60008060006060848603121561367c57600080fd5b8335613687816134d1565b92506020840135613697816134d1565b929592945050506040919091013590565b600080604083850312156136bb57600080fd5b50508035926020909101359150565b803561ffff811681146134f157600080fd5b6000806000606084860312156136f157600080fd5b6136fa846136ca565b9250613708602085016136ca565b9150613716604085016136ca565b90509250925092565b60006020828403121561373157600080fd5b8135612b12816134d1565b6000806040838503121561374f57600080fd5b823561375a816134d1565b9150602083013561376a816134f6565b809150509250929050565b60008060006060848603121561378a57600080fd5b8335613795816134f6565b925060208401356137a5816134f6565b915060408401356137b5816134f6565b809150509250925092565b6000602082840312156137d257600080fd5b8135612b12816134f6565b600080604083850312156137f057600080fd5b82356137fb816134d1565b9150602083013561376a816134d1565b6000806000806080858703121561382157600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b838110156138765781516001600160a01b031687529582019590820190600101613851565b509495945050505050565b604081526000613894604083018561383d565b905082151560208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156138e6576138e66138a5565b500390565b6000816000190483118215151615613905576139056138a5565b500290565b600082613940577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008219821115613958576139586138a5565b500190565b60006020828403121561396f57600080fd5b5051919050565b600061ffff808316818516808303821115613993576139936138a5565b01949350505050565b6000602082840312156139ae57600080fd5b8151612b12816134d1565b6000602082840312156139cb57600080fd5b8151612b12816134f6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b85815284602082015260a060408201526000613a2460a083018661383d565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215613a5657600080fd5b8351925060208401519150604084015190509250925092565b600061ffff83811690831681811015613a8a57613a8a6138a5565b03939250505056fea2646970667358221220fecf08ca678d681a4120ab8ecf80b5819afd8ebb69ed308551a1aac78059427664736f6c634300080a0033

Deployed Bytecode Sourcemap

7743:19527:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9545:73;;;;;;;;;;;;9576:42;9545:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;9545:73:0;;;;;;;;18259:172;;;;;;;;;;-1:-1:-1;18259:172:0;;;;;:::i;:::-;;:::i;:::-;;8787:128;;;;;;;;;;-1:-1:-1;8787:128:0;;;;;;;;;;;;;;;;;;;;;;;;;;2449:6:1;2482:15;;;2464:34;;2534:15;;;2529:2;2514:18;;2507:43;2586:15;;2566:18;;;2559:43;;;;2427:2;2412:18;8787:128:0;2243:365:1;14131:80:0;;;;;;;;;;-1:-1:-1;14203:5:0;;;;;;;;;;;;;;;;;14131:80;;;;;;;:::i;9370:35::-;;;;;;;;;;-1:-1:-1;9370:35:0;;;;-1:-1:-1;;;;;9370:35:0;;;14744:161;;;;;;;;;;-1:-1:-1;14744:161:0;;;;;:::i;:::-;;:::i;:::-;;;4016:14:1;;4009:22;3991:41;;3979:2;3964:18;14744:161:0;3851:187:1;13866:83:0;;;;;;;;;;-1:-1:-1;13939:7:0;;13866:83;;;4189:25:1;;;4177:2;4162:18;13866:83:0;4043:177:1;9067:194:0;;;;;;;;;;-1:-1:-1;9067:194:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4458:6:1;4491:15;;;4473:34;;4543:15;;;4538:2;4523:18;;4516:43;4595:15;;;4575:18;;;4568:43;;;;4647:15;;;4642:2;4627:18;;4620:43;4435:3;4420:19;9067:194:0;4225:444:1;15411:306:0;;;;;;;;;;-1:-1:-1;15411:306:0;;;;;:::i;:::-;;:::i;20153:340::-;;;;;;;;;;-1:-1:-1;20153:340:0;;;;;:::i;:::-;;:::i;17426:141::-;;;;;;;;;;;;;:::i;13955:80::-;;;;;;;;;;-1:-1:-1;14023:9:0;;13955:80;;14023:9;;;;5530:36:1;;5518:2;5503:18;13955:80:0;5388:184:1;18978:430:0;;;;;;;;;;-1:-1:-1;18978:430:0;;;;;:::i;:::-;;:::i;18684:108::-;;;;;;;;;;-1:-1:-1;18684:108:0;;;;;:::i;:::-;;:::i;17271:147::-;;;;;;;;;;-1:-1:-1;17271:147:0;;;;;:::i;:::-;;:::i;15725:215::-;;;;;;;;;;-1:-1:-1;15725:215:0;;;;;:::i;:::-;;:::i;19805:340::-;;;;;;;;;;-1:-1:-1;19805:340:0;;;;;:::i;:::-;;:::i;9412:21::-;;;;;;;;;;-1:-1:-1;9412:21:0;;;;-1:-1:-1;;;;;9412:21:0;;;10498:34;;;;;;;;;;-1:-1:-1;10498:34:0;;;;;;;;12609:701;;;;;;;;;;-1:-1:-1;12609:701:0;;;;;:::i;:::-;;:::i;17575:125::-;;;;;;;;;;-1:-1:-1;17575:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;17664:28:0;17640:4;17664:28;;;:19;:28;;;;;;;;;17575:125;10539:36;;;;;;;;;;-1:-1:-1;10539:36:0;;;;;;;;;;;18572:104;;;;;;;;;;;;;:::i;17708:134::-;;;;;;;;;;-1:-1:-1;17708:134:0;;;;;:::i;:::-;;:::i;17850:248::-;;;;;;;;;;-1:-1:-1;17850:248:0;;;;;:::i;:::-;;:::i;10135:75::-;;;;;;;;;;;;;;;;14444:117;;;;;;;;;;-1:-1:-1;14444:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;14537:16:0;14510:7;14537:16;;;:7;:16;;;;;;;14444:117;13318:195;;;;;;;;;;;;;:::i;16763:500::-;;;;;;;;;;-1:-1:-1;16763:500:0;;;;;:::i;:::-;;:::i;14217:80::-;;;;;;;;;;-1:-1:-1;14269:7:0;12587:6;-1:-1:-1;;;;;12587:6:0;14217:80;17426:141;15230:173;;;;;;;;;;;;;:::i;25143:429::-;;;;;;;;;;;;;:::i;14041:84::-;;;;;;;;;;-1:-1:-1;14115:7:0;;;;;;;;;;;;;;;;;14041:84;;15948:225;;;;;;;;;;-1:-1:-1;15948:225:0;;;;;:::i;:::-;;:::i;14569:167::-;;;;;;;;;;-1:-1:-1;14569:167:0;;;;;:::i;:::-;;:::i;19416:381::-;;;;;;;;;;-1:-1:-1;19416:381:0;;;;;:::i;:::-;;:::i;18800:170::-;;;;;;;;;;-1:-1:-1;18800:170:0;;;;;:::i;:::-;;:::i;21033:165::-;;;;;;;;;;-1:-1:-1;21033:165:0;;;;;:::i;:::-;;:::i;8924:134::-;;;;;;;;;;-1:-1:-1;8924:134:0;;;;;;;;;;;;;;;;;;;;;;;;;;;20798:227;;;;;;;;;;-1:-1:-1;20798:227:0;;;;;:::i;:::-;;:::i;14303:133::-;;;;;;;;;;-1:-1:-1;14303:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;14405:19:0;;;14387:7;14405:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;14303:133;16181:574;;;;;;;;;;-1:-1:-1;16181:574:0;;;;;:::i;:::-;;:::i;25580:183::-;;;;;;;;;;;;;:::i;18106:145::-;;;;;;;;;;-1:-1:-1;18106:145:0;;;;;:::i;:::-;;:::i;10294:77::-;;;;;;;;;;;;;;;;20501:289;;;;;;;;;;-1:-1:-1;20501:289:0;;;;;:::i;:::-;;:::i;9853:39::-;;;;;;;;;;-1:-1:-1;9853:39:0;;;;;;;;;;;18439:125;;;;;;;;;;-1:-1:-1;18439:125:0;;;;;:::i;:::-;;:::i;18259:172::-;11146:6;;-1:-1:-1;;;;;11146:6:0;189:10;11146:22;11138:52;;;;-1:-1:-1;;;11138:52:0;;8869:2:1;11138:52:0;;;8851:21:1;8908:2;8888:18;;;8881:30;-1:-1:-1;;;8927:18:1;;;8920:47;8984:18;;11138:52:0;;;;;;;;;18367:9:::1;::::0;:56:::1;::::0;;;;:9;;;::::1;-1:-1:-1::0;;;;;18367:9:0::1;::::0;:37:::1;::::0;:56:::1;::::0;18405:8;;18415:7;;18367:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18259:172:::0;;:::o;14744:161::-;14819:4;14836:39;189:10;14859:7;14868:6;14836:8;:39::i;:::-;-1:-1:-1;14893:4:0;14744:161;;;;:::o;15411:306::-;-1:-1:-1;;;;;15532:19:0;;15511:4;15532:19;;;:11;:19;;;;;;;;15552:10;15532:31;;;;;;;;-1:-1:-1;;15532:52:0;15528:126;;-1:-1:-1;;;;;15601:19:0;;;;;;:11;:19;;;;;;;;15621:10;15601:31;;;;;;;:41;;15636:6;;15601:19;:41;;15636:6;;15601:41;:::i;:::-;;;;-1:-1:-1;;15528:126:0;15673:36;15683:6;15691:9;15702:6;15673:9;:36::i;:::-;15666:43;15411:306;-1:-1:-1;;;;15411:306:0:o;20153:340::-;11146:6;;-1:-1:-1;;;;;11146:6:0;189:10;11146:22;11138:52;;;;-1:-1:-1;;;11138:52:0;;8869:2:1;11138:52:0;;;8851:21:1;8908:2;8888:18;;;8881:30;-1:-1:-1;;;8927:18:1;;;8920:47;8984:18;;11138:52:0;8667:341:1;11138:52:0;20243:13:::1;20281:7;20270;20260;;:17;;;;:::i;:::-;20259:29;;;;:::i;:::-;20243:45;;20327:4;20317:7;;:14;;;;:::i;:::-;20307:5;:25;;20299:88;;;::::0;-1:-1:-1;;;20299:88:0;;10882:2:1;20299:88:0::1;::::0;::::1;10864:21:1::0;10921:2;10901:18;;;10894:30;10960:34;10940:18;;;10933:62;11031:20;11011:18;;;11004:48;11069:19;;20299:88:0::1;10680:414:1::0;20299:88:0::1;20398:14;:22:::0;;;20450:14:::1;::::0;20478:7;;20450:24:::1;::::0;20467:7;;20450:24:::1;:::i;:::-;20449:36;;;;:::i;:::-;20431:15;:54:::0;-1:-1:-1;;;20153:340:0:o;17426:141::-;14537:7;:16;;;;9576:42;17479:7;14537:16;;;;;17479:7;;17518:39;;;:::i;:::-;17507:7;;:51;;;;:::i;:::-;17499:60;;17426:141;:::o;18978:430::-;11146:6;;-1:-1:-1;;;;;11146:6:0;189:10;11146:22;11138:52;;;;-1:-1:-1;;;11138:52:0;;8869:2:1;11138:52:0;;;8851:21:1;8908:2;8888:18;;;8881:30;-1:-1:-1;;;8927:18:1;;;8920:47;8984:18;;11138:52:0;8667:341:1;11138:52:0;19095:10:::1;:22:::0;::::1;::::0;;::::1;19085:32:::0;;::::1;;::::0;::::1;::::0;:87:::1;;-1:-1:-1::0;19148:10:0::1;:24:::0;::::1;::::0;;;::::1;::::0;::::1;19138:34:::0;;::::1;;;19085:87;:150;;;;-1:-1:-1::0;19208:10:0::1;:27:::0;::::1;::::0;;;::::1;::::0;::::1;19193:42:::0;;::::1;;;19085:150;19077:203;;;::::0;-1:-1:-1;;;19077:203:0;;11434:2:1;19077:203:0::1;::::0;::::1;11416:21:1::0;11473:2;11453:18;;;11446:30;11512:25;11492:18;;;11485:53;11555:18;;19077:203:0::1;11232:347:1::0;19077:203:0::1;19291:9;:25:::0;;::::1;::::0;;::::1;19327:27:::0;;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;19365:35:::0;::::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;18978:430::o;18684:108::-;11146:6;;-1:-1:-1;;;;;11146:6:0;189:10;11146:22;11138:52;;;;-1:-1:-1;;;11138:52:0;;8869:2:1;11138:52:0;;;8851:21:1;8908:2;8888:18;;;8881:30;-1:-1:-1;;;8927:18:1;;;8920:47;8984:18;;11138:52:0;8667:341:1;11138:52:0;18753:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;18753:31:0::1;::::0;::::1;160:74:1::0;18753:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;133:18:1;;18753:31:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18684:108:::0;:::o;17271:147::-;11146:6;;-1:-1:-1;;;;;11146:6:0;189:10;11146:22;11138:52;;;;-1:-1:-1;;;11138:52:0;;8869:2:1;11138:52:0;;;8851:21:1;8908:2;8888:18;;;8881:30;-1:-1:-1;;;8927:18:1;;;8920:47;8984:18;;11138:52:0;8667:341:1;11138:52:0;17359:16:::1;::::0;::::1;::::0;::::1;;;17358:17;17350:26;;;::::0;::::1;;17387:14;:23:::0;;-1:-1:-1;;17387:23:0::1;-1:-1:-1::0;;;;;17387:23:0;;;::::1;::::0;;;::::1;::::0;;17271:147::o;15725:215::-;189:10;15813:4;15862:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15862:34:0;;;;;;;;;;15813:4;;15830:80;;15853:7;;15862:47;;15899:10;;15862:47;:::i;:::-;15830:8;:80::i;19805:340::-;11146:6;;-1:-1:-1;;;;;11146:6:0;189:10;11146:22;11138:52;;;;-1:-1:-1;;;11138:52:0;;8869:2:1;11138:52:0;;;8851:21:1;8908:2;8888:18;;;8881:30;-1:-1:-1;;;8927:18:1;;;8920:47;8984:18;;11138:52:0;8667:341:1;11138:52:0;19894:13:::1;19932:7;19921;19911;;:17;;;;:::i;:::-;19910:29;;;;:::i;:::-;19894:45;;19978:4;19968:7;;:14;;;;:::i;:::-;19958:5;:25;;19950:93;;;::::0;-1:-1:-1;;;19950:93:0;;11786:2:1;19950:93:0::1;::::0;::::1;11768:21:1::0;11825:2;11805:18;;;11798:30;11864:34;11844:18;;;11837:62;11935:25;11915:18;;;11908:53;11978:19;;19950:93:0::1;11584:419:1::0;19950:93:0::1;20054:12;:20:::0;;;20102:14:::1;::::0;20130:7;;20102:24:::1;::::0;20119:7;;20102:24:::1;:::i;:::-;20101:36;;;;:::i;:::-;20085:13;:52:::0;-1:-1:-1;;;19805:340:0:o;12609:701::-;11146:6;;-1:-1:-1;;;;;11146:6:0;189:10;11146:22;11138:52;;;;-1:-1:-1;;;11138:52:0;;8869:2:1;11138:52:0;;;8851:21:1;8908:2;8888:18;;;8881:30;-1:-1:-1;;;8927:18:1;;;8920:47;8984:18;;11138:52:0;8667:341:1;11138:52:0;-1:-1:-1;;;;;12690:22:0;::::1;12682:96;;;::::0;-1:-1:-1;;;12682:96:0;;12210:2:1;12682:96:0::1;::::0;::::1;12192:21:1::0;12249:2;12229:18;;;12222:30;12288:34;12268:18;;;12261:62;12359:31;12339:18;;;12332:59;12408:19;;12682:96:0::1;12008:425:1::0;12682:96:0::1;-1:-1:-1::0;;;;;12797:16:0;::::1;9576:42;12797:16;;12789:90;;;::::0;-1:-1:-1;;;12789:90:0;;12210:2:1;12789:90:0::1;::::0;::::1;12192:21:1::0;12249:2;12229:18;;;12222:30;12288:34;12268:18;;;12261:62;12359:31;12339:18;;;12332:59;12408:19;;12789:90:0::1;12008:425:1::0;12789:90:0::1;12910:6;::::0;;12890:34:::1;::::0;-1:-1:-1;;;;;12910:6:0;;::::1;::::0;12890:19:::1;:34::i;:::-;12935:35;12955:8;12965:4;12935:19;:35::i;:::-;13023:6;::::0;12995:16:::1;::::0;-1:-1:-1;;;;;12995:16:0;;::::1;13023:6:::0;::::1;12995:35;12991:90;;;13045:16;:36:::0;;-1:-1:-1;;13045:36:0::1;-1:-1:-1::0;;;;;13045:36:0;::::1;;::::0;;12991:90:::1;13125:1;13115:6:::0;;-1:-1:-1;;;;;13115:6:0::1;14537:16:::0;;:7;:16;;;;;;13105:21;13102:99:::1;;13153:6;::::0;;-1:-1:-1;;;;;13153:6:0::1;14537:16:::0;;;:7;:16;;;;;;;13143:46:::1;::::0;13153:6;13161:8;;13143:9:::1;:46::i;:::-;;13102:99;13221:6;:17:::0;;-1:-1:-1;;13221:17:0::1;-1:-1:-1::0;;;;;13221:17:0;::::1;::::0;;::::1;::::0;;13254:38:::1;::::0;13221:17;;;;13254:38:::1;::::0;13221:6;13254:38:::1;12609:701:::0;:::o;18572:104::-;18617:7;18644:9;;;;;;;;;-1:-1:-1;;;;;18644:9:0;-1:-1:-1;;;;;18644:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17708:134::-;11146:6;;-1:-1:-1;;;;;11146:6:0;189:10;11146:22;11138:52;;;;-1:-1:-1;;;11138:52:0;;8869:2:1;11138:52:0;;;8851:21:1;8908:2;8888:18;;;8881:30;-1:-1:-1;;;8927:18:1;;;8920:47;8984:18;;11138:52:0;8667:341:1;11138:52:0;-1:-1:-1;;;;;17796:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;17796:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17708:134::o;17850:248::-;11146:6;;-1:-1:-1;;;;;11146:6:0;189:10;11146:22;11138:52;;;;-1:-1:-1;;;11138:52:0;;8869:2:1;11138:52:0;;;8851:21:1;8908:2;8888:18;;;8881:30;-1:-1:-1;;;8927:18:1;;;8920:47;8984:18;;11138:52:0;8667:341:1;11138:52:0;17934:16:::1;::::0;::::1;::::0;::::1;;;17933:17;17925:54;;;::::0;-1:-1:-1;;;17925:54:0;;12829:2:1;17925:54:0::1;::::0;::::1;12811:21:1::0;12868:2;12848:18;;;12841:30;12907:26;12887:18;;;12880:54;12951:18;;17925:54:0::1;12627:348:1::0;17925:54:0::1;-1:-1:-1::0;;;;;17998:28:0;::::1;18021:4;17998:28;;17990:55;;;::::0;-1:-1:-1;;;17990:55:0;;13182:2:1;17990:55:0::1;::::0;::::1;13164:21:1::0;13221:2;13201:18;;;13194:30;13260:16;13240:18;;;13233:44;13294:18;;17990:55:0::1;12980:338:1::0;17990:55:0::1;18056:9;:34:::0;;-1:-1:-1;;;;;18056:34:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;17850:248::o;13318:195::-;11146:6;;-1:-1:-1;;;;;11146:6:0;189:10;11146:22;11138:52;;;;-1:-1:-1;;;11138:52:0;;8869:2:1;11138:52:0;;;8851:21:1;8908:2;8888:18;;;8881:30;-1:-1:-1;;;8927:18:1;;;8920:47;8984:18;;11138:52:0;8667:341:1;11138:52:0;13405:6:::1;::::0;;13385:34:::1;::::0;-1:-1:-1;;;;;13405:6:0;;::::1;::::0;13385:19:::1;:34::i;:::-;13447:1;13430:19:::0;;-1:-1:-1;;13430:19:0::1;::::0;;13465:40:::1;::::0;13447:1;;13465:40:::1;::::0;13447:1;;13465:40:::1;13318:195::o:0;16763:500::-;11146:6;;-1:-1:-1;;;;;11146:6:0;189:10;11146:22;11138:52;;;;-1:-1:-1;;;11138:52:0;;8869:2:1;11138:52:0;;;8851:21:1;8908:2;8888:18;;;8881:30;-1:-1:-1;;;8927:18:1;;;8920:47;8984:18;;11138:52:0;8667:341:1;11138:52:0;16844:16;16840:416:::1;;-1:-1:-1::0;;;;;16877:13:0;;::::1;16893:5;16877:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;16877:21:0::1;::::0;;16913:9:::1;::::0;:32;;;;;::::1;::::0;::::1;13491:74:1::0;;;;13581:18;;;13574:50;;;;16913:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;13464:18:1;;16913:32:0::1;13323:307:1::0;16840:416:0::1;16982:17;::::0;:22;16978:136:::1;;17071:6;17051:17;;17033:15;:35;;;;:::i;:::-;:44;17025:73;;;::::0;-1:-1:-1;;;17025:73:0;;13837:2:1;17025:73:0::1;::::0;::::1;13819:21:1::0;13876:2;13856:18;;;13849:30;13915:18;13895;;;13888:46;13951:18;;17025:73:0::1;13635:340:1::0;17025:73:0::1;-1:-1:-1::0;;;;;17128:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;17128:20:0::1;17144:4;17128:20:::0;;::::1;::::0;;;17183:15:::1;17163:17;:35:::0;17213:9:::1;::::0;:31;;;;;::::1;::::0;::::1;13491:74:1::0;;;;13581:18;;;13574:50;17213:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;13464:18:1;;17213:31:0::1;13323:307:1::0;16840:416:0::1;16763:500:::0;;:::o;15230:173::-;15294:4;11146:6;;-1:-1:-1;;;;;11146:6:0;189:10;11146:22;11138:52;;;;-1:-1:-1;;;11138:52:0;;8869:2:1;11138:52:0;;;8851:21:1;8908:2;8888:18;;;8881:30;-1:-1:-1;;;8927:18:1;;;8920:47;8984:18;;11138:52:0;8667:341:1;11138:52:0;15343:9:::1;::::0;15311:62:::1;::::0;15328:4:::1;::::0;-1:-1:-1;;;;;15343:9:0::1;-1:-1:-1::0;;15311:8:0::1;:62::i;:::-;-1:-1:-1::0;15391:4:0::1;15230:173:::0;:::o;25143:429::-;11146:6;;-1:-1:-1;;;;;11146:6:0;189:10;11146:22;11138:52;;;;-1:-1:-1;;;11138:52:0;;8869:2:1;11138:52:0;;;8851:21:1;8908:2;8888:18;;;8881:30;-1:-1:-1;;;8927:18:1;;;8920:47;8984:18;;11138:52:0;8667:341:1;11138:52:0;25205:14:::1;::::0;::::1;;25204:15;25196:52;;;::::0;-1:-1:-1;;;25196:52:0;;14182:2:1;25196:52:0::1;::::0;::::1;14164:21:1::0;14221:2;14201:18;;;14194:30;14260:26;14240:18;;;14233:54;14304:18;;25196:52:0::1;13980:348:1::0;25196:52:0::1;25267:16;::::0;::::1;::::0;::::1;;;25259:53;;;::::0;-1:-1:-1;;;25259:53:0;;14535:2:1;25259:53:0::1;::::0;::::1;14517:21:1::0;14574:2;14554:18;;;14547:30;14613:26;14593:18;;;14586:54;14657:18;;25259:53:0::1;14333:348:1::0;25259:53:0::1;25334:9;::::0;;;::::1;-1:-1:-1::0;;;;;25334:9:0::1;25323:99;;25374:9;:36:::0;;;::::1;25404:4;25374:36:::0;::::1;;::::0;;25323:99:::1;25436:9;::::0;25456:6:::1;::::0;25511:9:::1;::::0;25436:85:::1;::::0;;;;-1:-1:-1;;;;;25456:6:0;;::::1;25436:85;::::0;::::1;14909:74:1::0;15031:10;25471:12:0::1;15019:23:1::0;14999:18;;;14992:51;15091:18;25493:15:0::1;15079:31:1::0;15059:18;;;15052:59;25511:9:0::1;::::0;;::::1;15127:18:1::0;;;15120:45;25436:9:0;;;::::1;;::::0;:19:::1;::::0;14881::1;;25436:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;25432:101:::0;25543:14:::1;:21:::0;;-1:-1:-1;;25543:21:0::1;25560:4;25543:21;::::0;;25143:429::o;15948:225::-;189:10;16041:4;16090:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16090:34:0;;;;;;;;;;16041:4;;16058:85;;16081:7;;16090:52;;16127:15;;16090:52;:::i;14569:167::-;14647:4;14664:42;189:10;14688:9;14699:6;14664:9;:42::i;:::-;-1:-1:-1;14724:4:0;;14569:167;-1:-1:-1;;;14569:167:0:o;19416:381::-;11146:6;;-1:-1:-1;;;;;11146:6:0;189:10;11146:22;11138:52;;;;-1:-1:-1;;;11138:52:0;;8869:2:1;11138:52:0;;;8851:21:1;8908:2;8888:18;;;8881:30;-1:-1:-1;;;8927:18:1;;;8920:47;8984:18;;11138:52:0;8667:341:1;11138:52:0;19569:2:::1;19554:11:::0;19530:21:::1;19542:9:::0;19530;:21:::1;:::i;:::-;:35;;;;:::i;:::-;:41;;;;19521:82;;;::::0;-1:-1:-1;;;19521:82:0;;15607:2:1;19521:82:0::1;::::0;::::1;15589:21:1::0;15646:2;15626:18;;;15619:30;15685:29;15665:18;;;15658:57;15732:18;;19521:82:0::1;15405:351:1::0;19521:82:0::1;19614:7;:29:::0;;::::1;19694:33:::0;;::::1;::::0;::::1;::::0;19654:29;;::::1;::::0;::::1;::::0;;;;19614;;::::1;19654::::0;;;;;;;::::1;19694:33;;::::0;;19716:11;19754:21:::1;19674:9:::0;19634;19754:21:::1;:::i;:::-;:35;;;;:::i;:::-;19738:7;:51:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;19416:381:0:o;18800:170::-;11146:6;;-1:-1:-1;;;;;11146:6:0;189:10;11146:22;11138:52;;;;-1:-1:-1;;;11138:52:0;;8869:2:1;11138:52:0;;;8851:21:1;8908:2;8888:18;;;8881:30;-1:-1:-1;;;8927:18:1;;;8920:47;8984:18;;11138:52:0;8667:341:1;11138:52:0;18907:9:::1;::::0;:55:::1;::::0;;;;15970:14:1;;15963:22;18907:55:0::1;::::0;::::1;15945:41:1::0;16029:14;;16022:22;16002:18;;;15995:50;16088:14;;16081:22;16061:18;;;16054:50;18907:9:0;;;::::1;-1:-1:-1::0;;;;;18907:9:0::1;::::0;:24:::1;::::0;15918:18:1;;18907:55:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18800:170:::0;;;:::o;21033:165::-;11146:6;;-1:-1:-1;;;;;11146:6:0;189:10;11146:22;11138:52;;;;-1:-1:-1;;;11138:52:0;;8869:2:1;11138:52:0;;;8851:21:1;8908:2;8888:18;;;8881:30;-1:-1:-1;;;8927:18:1;;;8920:47;8984:18;;11138:52:0;8667:341:1;11138:52:0;21108:19:::1;:30:::0;;;::::1;;::::0;::::1;::::0;;;::::1;;::::0;;21154:36:::1;::::0;::::1;::::0;::::1;::::0;21130:8;4016:14:1;4009:22;3991:41;;3979:2;3964:18;;3851:187;21154:36:0::1;;;;;;;;21033:165:::0;:::o;20798:227::-;11146:6;;-1:-1:-1;;;;;11146:6:0;189:10;11146:22;11138:52;;;;-1:-1:-1;;;11138:52:0;;8869:2:1;11138:52:0;;;8851:21:1;8908:2;8888:18;;;8881:30;-1:-1:-1;;;8927:18:1;;;8920:47;8984:18;;11138:52:0;8667:341:1;11138:52:0;20916:16:::1;:43:::0;;-1:-1:-1;;;;;20916:43:0;;::::1;-1:-1:-1::0;;20916:43:0;;::::1;;::::0;;;20970:18:::1;:47:::0;;;;;::::1;::::0;::::1;;::::0;;20798:227::o;16181:574::-;11146:6;;-1:-1:-1;;;;;11146:6:0;189:10;11146:22;11138:52;;;;-1:-1:-1;;;11138:52:0;;8869:2:1;11138:52:0;;;8851:21:1;8908:2;8888:18;;;8881:30;-1:-1:-1;;;8927:18:1;;;8920:47;8984:18;;11138:52:0;8667:341:1;11138:52:0;16252:29:::1;16303:9;16252:61;;16324:16;16361:10;-1:-1:-1::0;;;;;16361:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16343:47:0::1;;16399:4;16406:10;-1:-1:-1::0;;;;;16406:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16343:81;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;16624:15:1;;;16343:81:0::1;::::0;::::1;16606:34:1::0;16676:15;;16656:18;;;16649:43;16518:18;;16343:81:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16324:100:::0;-1:-1:-1;;;;;;16439:22:0;::::1;16435:207;;16505:10;-1:-1:-1::0;;;;;16505:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16487:50:0::1;;16546:4;16553:10;-1:-1:-1::0;;;;;16553:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16487:84;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;16624:15:1;;;16487:84:0::1;::::0;::::1;16606:34:1::0;16676:15;;16656:18;;;16649:43;16518:18;;16487:84:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16478:6;:93:::0;;-1:-1:-1;;16478:93:0::1;-1:-1:-1::0;;;;;16478:93:0;;;::::1;::::0;;;::::1;::::0;;16435:207:::1;;;16613:6;:17:::0;;-1:-1:-1;;16613:17:0::1;-1:-1:-1::0;;;;;16613:17:0;::::1;;::::0;;16435:207:::1;16652:9;:22:::0;;-1:-1:-1;;16652:22:0::1;-1:-1:-1::0;;;;;16652:22:0;::::1;::::0;;::::1;::::0;;;16685:62:::1;::::0;16702:4:::1;::::0;-1:-1:-1;;16685:8:0::1;:62::i;:::-;16241:514;;16181:574:::0;:::o;25580:183::-;11146:6;;-1:-1:-1;;;;;11146:6:0;189:10;11146:22;11138:52;;;;-1:-1:-1;;;11138:52:0;;8869:2:1;11138:52:0;;;8851:21:1;8908:2;8888:18;;;8881:30;-1:-1:-1;;;8927:18:1;;;8920:47;8984:18;;11138:52:0;8667:341:1;11138:52:0;25647:16:::1;::::0;::::1;::::0;::::1;;;25646:17;25638:58;;;::::0;-1:-1:-1;;;25638:58:0;;16905:2:1;25638:58:0::1;::::0;::::1;16887:21:1::0;16944:2;16924:18;;;16917:30;16983;16963:18;;;16956:58;17031:18;;25638:58:0::1;16703:352:1::0;25638:58:0::1;12560:7:::0;12587:6;;25707:48:::1;::::0;-1:-1:-1;;;;;12587:6:0;;;;25733:21:::1;25707:48:::0;::::1;;;::::0;25733:21;;25707:48;12560:7;25707:48;25733:21;12587:6;25707:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;25580:183::o:0;18106:145::-;11146:6;;-1:-1:-1;;;;;11146:6:0;189:10;11146:22;11138:52;;;;-1:-1:-1;;;11138:52:0;;8869:2:1;11138:52:0;;;8851:21:1;8908:2;8888:18;;;8881:30;-1:-1:-1;;;8927:18:1;;;8920:47;8984:18;;11138:52:0;8667:341:1;11138:52:0;18196:9:::1;::::0;:47:::1;::::0;;;;-1:-1:-1;;;;;13509:55:1;;;18196:47:0::1;::::0;::::1;13491:74:1::0;13608:14;;13601:22;13581:18;;;13574:50;18196:9:0;;;::::1;::::0;;::::1;::::0;:29:::1;::::0;13464:18:1;;18196:47:0::1;13323:307:1::0;20501:289:0;11146:6;;-1:-1:-1;;;;;11146:6:0;189:10;11146:22;11138:52;;;;-1:-1:-1;;;11138:52:0;;8869:2:1;11138:52:0;;;8851:21:1;8908:2;8888:18;;;8881:30;-1:-1:-1;;;8927:18:1;;;8920:47;8984:18;;11138:52:0;8667:341:1;11138:52:0;20701:16:::1;20681;20671:7;;:26;;;;:::i;:::-;20670:47;;;;:::i;:::-;20654:13;:63:::0;20742:7:::1;::::0;20769:13;;20742:23:::1;::::0;20752:13;;20742:23:::1;:::i;:::-;20741:41;;;;:::i;:::-;20728:10;:54:::0;-1:-1:-1;;;;20501:289:0:o;18439:125::-;18524:9;;:32;;;;;-1:-1:-1;;;;;178:55:1;;;18524:32:0;;;160:74:1;18500:4:0;;18524:9;;;;;:23;;133:18:1;;18524:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18517:39;18439:125;-1:-1:-1;;18439:125:0:o;14913:309::-;-1:-1:-1;;;;;15007:20:0;;14999:52;;;;-1:-1:-1;;;14999:52:0;;17512:2:1;14999:52:0;;;17494:21:1;17551:2;17531:18;;;17524:30;17590:21;17570:18;;;17563:49;17629:18;;14999:52:0;17310:343:1;14999:52:0;-1:-1:-1;;;;;15070:21:0;;15062:53;;;;-1:-1:-1;;;15062:53:0;;17512:2:1;15062:53:0;;;17494:21:1;17551:2;17531:18;;;17524:30;17590:21;17570:18;;;17563:49;17629:18;;15062:53:0;17310:343:1;15062:53:0;-1:-1:-1;;;;;15128:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;15181:33;;4189:25:1;;;15181:33:0;;4162:18:1;15181:33:0;;;;;;;14913:309;;;:::o;21537:1471::-;21616:4;-1:-1:-1;;;;;21641:18:0;;21633:68;;;;-1:-1:-1;;;21633:68:0;;17860:2:1;21633:68:0;;;17842:21:1;17899:2;17879:18;;;17872:30;17938:34;17918:18;;;17911:62;18009:7;17989:18;;;17982:35;18034:19;;21633:68:0;17658:401:1;21633:68:0;-1:-1:-1;;;;;21720:16:0;;21712:64;;;;-1:-1:-1;;;21712:64:0;;18266:2:1;21712:64:0;;;18248:21:1;18305:2;18285:18;;;18278:30;18344:34;18324:18;;;18317:62;18415:5;18395:18;;;18388:33;18438:19;;21712:64:0;18064:399:1;21712:64:0;21804:1;21795:6;:10;21787:64;;;;-1:-1:-1;;;21787:64:0;;18670:2:1;21787:64:0;;;18652:21:1;18709:2;18689:18;;;18682:30;18748:34;18728:18;;;18721:62;18819:11;18799:18;;;18792:39;18848:19;;21787:64:0;18468:405:1;21787:64:0;21865:20;21876:4;21882:2;21865:10;:20::i;:::-;21862:481;;;21906:14;;;;21902:89;;21941:34;;-1:-1:-1;;;21941:34:0;;19080:2:1;21941:34:0;;;19062:21:1;19119:2;19099:18;;;19092:30;19158:26;19138:18;;;19131:54;19202:18;;21941:34:0;18878:348:1;21902:89:0;-1:-1:-1;;;;;22008:13:0;;;;;;:7;:13;;;;;;;;;:28;;-1:-1:-1;;;;;;22025:11:0;;;;;;:7;:11;;;;;;;;22008:28;22005:142;;;22074:12;;22064:6;:22;;22056:75;;;;-1:-1:-1;;;22056:75:0;;19433:2:1;22056:75:0;;;19415:21:1;19472:2;19452:18;;;19445:30;19511:34;19491:18;;;19484:62;19582:10;19562:18;;;19555:38;19610:19;;22056:75:0;19231:404:1;22056:75:0;22170:14;;-1:-1:-1;;;;;22164:20:0;;;22170:14;;22164:20;;;;:36;;-1:-1:-1;;;;;;22189:11:0;;;;;;:7;:11;;;;;;;;22188:12;22164:36;22161:171;;;22255:14;;22245:6;22229:13;22239:2;-1:-1:-1;;;;;14537:16:0;14510:7;14537:16;;;:7;:16;;;;;;;14444:117;22229:13;:22;;;;:::i;:::-;:40;;22221:95;;;;-1:-1:-1;;;22221:95:0;;19842:2:1;22221:95:0;;;19824:21:1;19881:2;19861:18;;;19854:30;19920:34;19900:18;;;19893:62;19991:12;19971:18;;;19964:40;20021:19;;22221:95:0;19640:406:1;22221:95:0;-1:-1:-1;;;;;22388:25:0;;22355:12;22388:25;;;:19;:25;;;;;;22370:4;;22388:25;;;:52;;-1:-1:-1;;;;;;22417:23:0;;;;;;:19;:23;;;;;;;;22388:52;22385:98;;;-1:-1:-1;22466:5:0;22385:98;-1:-1:-1;;;;;22499:11:0;;;;;;:7;:11;;;;;;;;22495:443;;;22532:6;;;;;;;22531:7;:47;;;;-1:-1:-1;22559:19:0;;;;;;;22531:47;22527:394;;;22662:4;22613:28;14537:16;;;:7;:16;;;;;;22715:13;;22691:37;;22687:219;;22780:10;;22756:20;:34;22753:77;;-1:-1:-1;22817:10:0;;22753:77;22852:34;22865:20;22852:12;:34::i;:::-;22594:327;22527:394;22956:44;22974:4;22980:2;22984:6;22992:7;22956:17;:44::i;:::-;22949:51;21537:1471;-1:-1:-1;;;;;21537:1471:0:o;21206:323::-;21274:4;12587:6;;-1:-1:-1;;;;;21298:15:0;;;12587:6;;21298:15;;;;:45;;-1:-1:-1;12560:7:0;12587:6;-1:-1:-1;;;;;21330:13:0;;;12587:6;;21330:13;;21298:45;:84;;;;-1:-1:-1;;;;;;21361:21:0;;;;;;:17;:21;;;;;;;;21360:22;21298:84;:125;;;;-1:-1:-1;;;;;;21400:23:0;;;;;;:17;:23;;;;;;;;21399:24;21298:125;:152;;;;-1:-1:-1;;;;;;21440:10:0;;9576:42;21440:10;;21298:152;:185;;;;-1:-1:-1;;;;;;21467:16:0;;;;21298:185;:223;;;;-1:-1:-1;;;;;;21500:21:0;;21516:4;21500:21;;21298:223;21291:230;21206:323;-1:-1:-1;;;21206:323:0:o;23016:1603::-;11040:6;:13;;;;;;;;23103:7:::1;:13:::0;::::1;::::0;;;::::1;;23099:44;;23136:7;;23099:44;23178:4;23158:26;::::0;;;:11:::1;:26;::::0;;;;;;;23193:9:::1;::::0;-1:-1:-1;;;;;23193:9:0::1;23158:46:::0;;;;;;;;-1:-1:-1;;23158:67:0::1;23155:165;;23262:4;23242:26;::::0;;;:11:::1;:26;::::0;;;;;;;23277:9:::1;::::0;-1:-1:-1;;;;;23277:9:0::1;23242:46:::0;;;;;;;-1:-1:-1;;23242:66:0;;23155:165:::1;23398:7;:13:::0;23332:17:::1;::::0;23415:1:::1;::::0;23398:13:::1;::::0;;::::1;::::0;::::1;::::0;23354:40:::1;::::0;23377:17:::1;23354:20:::0;:40:::1;:::i;:::-;23353:58;;;;:::i;:::-;23352:64;;;;:::i;:::-;23332:84:::0;-1:-1:-1;23427:20:0::1;23450:32;23332:84:::0;23450:20;:32:::1;:::i;:::-;23527:16;::::0;;23541:1:::1;23527:16:::0;;;;;::::1;::::0;;23427:55;;-1:-1:-1;23503:21:0::1;::::0;23527:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;23527:16:0::1;23503:40;;23572:4;23554;23559:1;23554:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23554:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;23598:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;23554:7;;23598:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23588:4;23593:1;23588:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23588:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;23627:9:::1;::::0;:219:::1;::::0;;;;:9;::::1;::::0;:60:::1;::::0;:219:::1;::::0;23702:12;;23627:9:::1;::::0;23773:4;;23800::::1;::::0;23820:15:::1;::::0;23627:219:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;23933:7:0::1;:13:::0;23859:24:::1;::::0;-1:-1:-1;23950:1:0::1;::::0;-1:-1:-1;23933:13:0::1;::::0;;::::1;::::0;::::1;::::0;23888:41:::1;::::0;23912:17:::1;23888:21;:41;:::i;:::-;23887:59;;;;:::i;:::-;23886:65;;;;:::i;:::-;23859:92:::0;-1:-1:-1;23968:13:0;;23964:396:::1;;23998:9;::::0;:276:::1;::::0;;;;24075:4:::1;23998:276;::::0;::::1;21214:34:1::0;21264:18;;;21257:34;;;23998:9:0::1;21307:18:1::0;;;21300:34;;;21350:18;;;21343:34;9576:42:0::1;21393:19:1::0;;;21386:44;24244:15:0::1;21446:19:1::0;;;21439:35;-1:-1:-1;;;;;23998:9:0;;::::1;::::0;:25:::1;::::0;24031:16;;21125:19:1;;23998:276:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;24294:54:0::1;::::0;;21998:25:1;;;22054:2;22039:18;;22032:34;;;22082:18;;;22075:34;;;24294:54:0::1;::::0;-1:-1:-1;21986:2:1;21971:18;24294:54:0::1;;;;;;;23964:396;24409:1;24374:32;24397:9:::0;24374:20;:32:::1;:::i;:::-;:36;24370:242;;;24427:16;::::0;24516:7:::1;:17:::0;-1:-1:-1;;;;;24427:16:0;;::::1;::::0;:108:::1;::::0;24500:33:::1;::::0;24516:17:::1;::::0;;::::1;::::0;24500:13;;::::1;;:33;:::i;:::-;24478:7;:17:::0;24453:81:::1;::::0;;::::1;::::0;24454:41:::1;::::0;24478:17;;::::1;;24454:21;:41;:::i;:::-;24453:81;;;;:::i;:::-;24427:108;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;24550:18:0::1;::::0;:50:::1;::::0;-1:-1:-1;;;;;24550:18:0;;::::1;::::0;24578:21:::1;24550:50:::0;::::1;;;::::0;:18:::1;:50:::0;:18;:50;24578:21;24550:18;:50;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;24370:242;23088:1531;;;;11064:1;-1:-1:-1::0;11076:6:0;:14;;;;;;23016:1603::o;25771:905::-;25893:16;;25871:4;;25893:16;;;;;25888:221;;25926:28;25945:4;25951:2;25926:18;:28::i;:::-;25974:16;;;;;;;25973:17;:41;;;;;25994:20;26005:4;26011:2;25994:10;:20::i;:::-;25969:129;;;26035:47;;-1:-1:-1;;;26035:47:0;;22544:2:1;26035:47:0;;;22526:21:1;22583:2;22563:18;;;22556:30;22622:34;22602:18;;;22595:62;22693:7;22673:18;;;22666:35;22718:19;;26035:47:0;22342:401:1;25969:129:0;26125:20;26136:4;26142:2;26125:10;:20::i;:::-;26121:314;;;26193:9;;:37;;;;;-1:-1:-1;;;;;23029:15:1;;;26193:37:0;;;23011:34:1;23081:15;;;23061:18;;;23054:43;23113:18;;;23106:34;;;26162:12:0;;26193:9;;;;;:19;;22923:18:1;;26193:37:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;26193:37:0;;;;;;;;-1:-1:-1;;26193:37:0;;;;;;;;;;;;:::i;:::-;;;26189:163;;26328:8;;;26189:163;26281:5;-1:-1:-1;26372:7:0;26368:56;;26400:8;;;26368:56;26147:288;26121:314;-1:-1:-1;;;;;26447:13:0;;;;;;:7;:13;;;;;:23;;26464:6;;26447:13;:23;;26464:6;;26447:23;:::i;:::-;;;;-1:-1:-1;26481:22:0;;-1:-1:-1;26507:7:0;26506:48;;26548:6;26506:48;;;26518:27;26528:4;26534:2;26538:6;26518:9;:27::i;:::-;-1:-1:-1;;;;;26565:11:0;;;;;;:7;:11;;;;;:29;;26481:73;;-1:-1:-1;26481:73:0;;26565:11;;;:29;;26481:73;;26565:29;:::i;:::-;;;;;;;;26627:2;-1:-1:-1;;;;;26612:34:0;26621:4;-1:-1:-1;;;;;26612:34:0;;26631:14;26612:34;;;;4189:25:1;;4177:2;4162:18;;4043:177;26612:34:0;;;;;;;;-1:-1:-1;26664:4:0;;25771:905;-1:-1:-1;;;;;25771:905:0:o;24627:508::-;24709:16;;;;;;;24708:17;24700:65;;;;-1:-1:-1;;;24700:65:0;;23353:2:1;24700:65:0;;;23335:21:1;23392:2;23372:18;;;23365:30;23431:34;23411:18;;;23404:62;23502:5;23482:18;;;23475:33;23525:19;;24700:65:0;23151:399:1;24700:65:0;24781:20;24792:4;24798:2;24781:10;:20::i;:::-;24780:21;:37;;;;-1:-1:-1;24811:6:0;;-1:-1:-1;;;;;24805:12:0;;;24811:6;;24805:12;24780:37;24776:352;;;-1:-1:-1;;;;;24834:23:0;;;;;;;:17;:23;;;;;:30;;-1:-1:-1;;24834:30:0;24860:4;24834:30;;;24879:16;:23;;;;24834:30;24879:23;;;;;24928:9;;;;24917:107;;24972:9;:36;;;;25002:4;24972:36;;;;;24917:107;25038:19;:26;;;;;;;;25084:32;;-1:-1:-1;3991:41:1;;25084:32:0;;3979:2:1;3964:18;25084:32:0;;;;;;;24627:508;;:::o;26684:583::-;26824:6;;26763:7;;;;-1:-1:-1;;;;;26816:14:0;;;26824:6;;26816:14;26812:224;;;-1:-1:-1;26860:9:0;:16;;;26812:224;;;26904:6;;-1:-1:-1;;;;;26898:12:0;;;26904:6;;26898:12;26894:142;;;-1:-1:-1;26940:9:0;:17;;;;;;26894:142;;;-1:-1:-1;27003:9:0;:21;;;;;;26894:142;27090:10;:27;27048:17;;27090:27;;;;;27068:19;27077:10;27068:6;:19;:::i;:::-;:49;;;;:::i;:::-;27146:4;27130:22;;;;:7;:22;;;;;:35;;27048:69;;-1:-1:-1;27048:69:0;;27130:22;;;:35;;27048:69;;27130:35;:::i;:::-;;;;-1:-1:-1;;27181:40:0;;4189:25:1;;;27204:4:0;;-1:-1:-1;;;;;27181:40:0;;;;;4177:2:1;4162:18;27181:40:0;;;;;;;27241:18;27250:9;27241:6;:18;:::i;:::-;27234:25;26684:583;-1:-1:-1;;;;;;26684:583:0:o;245:184:1:-;297:77;294:1;287:88;394:4;391:1;384:15;418:4;415:1;408:15;434:154;-1:-1:-1;;;;;513:5:1;509:54;502:5;499:65;489:93;;578:1;575;568:12;593:134;661:20;;690:31;661:20;690:31;:::i;:::-;593:134;;;:::o;732:118::-;818:5;811:13;804:21;797:5;794:32;784:60;;840:1;837;830:12;855:128;920:20;;949:28;920:20;949:28;:::i;988:1250::-;1078:6;1086;1139:2;1127:9;1118:7;1114:23;1110:32;1107:52;;;1155:1;1152;1145:12;1107:52;1195:9;1182:23;1224:18;1265:2;1257:6;1254:14;1251:34;;;1281:1;1278;1271:12;1251:34;1319:6;1308:9;1304:22;1294:32;;1364:7;1357:4;1353:2;1349:13;1345:27;1335:55;;1386:1;1383;1376:12;1335:55;1422:2;1409:16;1444:4;1467:2;1463;1460:10;1457:36;;;1473:18;;:::i;:::-;1519:2;1516:1;1512:10;1551:2;1545:9;-1:-1:-1;;1605:2:1;1601;1597:11;1593:84;1585:6;1581:97;1728:6;1716:10;1713:22;1708:2;1696:10;1693:18;1690:46;1687:72;;;1739:18;;:::i;:::-;1775:2;1768:22;1825:18;;;1859:15;;;;-1:-1:-1;1901:11:1;;;1897:20;;;1929:19;;;1926:39;;;1961:1;1958;1951:12;1926:39;1985:11;;;;2005:148;2021:6;2016:3;2013:15;2005:148;;;2087:23;2106:3;2087:23;:::i;:::-;2075:36;;2038:12;;;;2131;;;;2005:148;;;2172:6;-1:-1:-1;2197:35:1;;-1:-1:-1;2213:18:1;;;2197:35;:::i;:::-;2187:45;;;;;;988:1250;;;;;:::o;2613:656::-;2725:4;2754:2;2783;2772:9;2765:21;2815:6;2809:13;2858:6;2853:2;2842:9;2838:18;2831:34;2883:1;2893:140;2907:6;2904:1;2901:13;2893:140;;;3002:14;;;2998:23;;2992:30;2968:17;;;2987:2;2964:26;2957:66;2922:10;;2893:140;;;3051:6;3048:1;3045:13;3042:91;;;3121:1;3116:2;3107:6;3096:9;3092:22;3088:31;3081:42;3042:91;-1:-1:-1;3185:2:1;3173:15;-1:-1:-1;;3169:88:1;3154:104;;;;3260:2;3150:113;;2613:656;-1:-1:-1;;;2613:656:1:o;3531:315::-;3599:6;3607;3660:2;3648:9;3639:7;3635:23;3631:32;3628:52;;;3676:1;3673;3666:12;3628:52;3715:9;3702:23;3734:31;3759:5;3734:31;:::i;:::-;3784:5;3836:2;3821:18;;;;3808:32;;-1:-1:-1;;;3531:315:1:o;4674:456::-;4751:6;4759;4767;4820:2;4808:9;4799:7;4795:23;4791:32;4788:52;;;4836:1;4833;4826:12;4788:52;4875:9;4862:23;4894:31;4919:5;4894:31;:::i;:::-;4944:5;-1:-1:-1;5001:2:1;4986:18;;4973:32;5014:33;4973:32;5014:33;:::i;:::-;4674:456;;5066:7;;-1:-1:-1;;;5120:2:1;5105:18;;;;5092:32;;4674:456::o;5135:248::-;5203:6;5211;5264:2;5252:9;5243:7;5239:23;5235:32;5232:52;;;5280:1;5277;5270:12;5232:52;-1:-1:-1;;5303:23:1;;;5373:2;5358:18;;;5345:32;;-1:-1:-1;5135:248:1:o;5577:159::-;5644:20;;5704:6;5693:18;;5683:29;;5673:57;;5726:1;5723;5716:12;5741:328;5815:6;5823;5831;5884:2;5872:9;5863:7;5859:23;5855:32;5852:52;;;5900:1;5897;5890:12;5852:52;5923:28;5941:9;5923:28;:::i;:::-;5913:38;;5970:37;6003:2;5992:9;5988:18;5970:37;:::i;:::-;5960:47;;6026:37;6059:2;6048:9;6044:18;6026:37;:::i;:::-;6016:47;;5741:328;;;;;:::o;6074:247::-;6133:6;6186:2;6174:9;6165:7;6161:23;6157:32;6154:52;;;6202:1;6199;6192:12;6154:52;6241:9;6228:23;6260:31;6285:5;6260:31;:::i;6326:382::-;6391:6;6399;6452:2;6440:9;6431:7;6427:23;6423:32;6420:52;;;6468:1;6465;6458:12;6420:52;6507:9;6494:23;6526:31;6551:5;6526:31;:::i;:::-;6576:5;-1:-1:-1;6633:2:1;6618:18;;6605:32;6646:30;6605:32;6646:30;:::i;:::-;6695:7;6685:17;;;6326:382;;;;;:::o;6713:511::-;6781:6;6789;6797;6850:2;6838:9;6829:7;6825:23;6821:32;6818:52;;;6866:1;6863;6856:12;6818:52;6905:9;6892:23;6924:28;6946:5;6924:28;:::i;:::-;6971:5;-1:-1:-1;7028:2:1;7013:18;;7000:32;7041:30;7000:32;7041:30;:::i;:::-;7090:7;-1:-1:-1;7149:2:1;7134:18;;7121:32;7162:30;7121:32;7162:30;:::i;:::-;7211:7;7201:17;;;6713:511;;;;;:::o;7229:241::-;7285:6;7338:2;7326:9;7317:7;7313:23;7309:32;7306:52;;;7354:1;7351;7344:12;7306:52;7393:9;7380:23;7412:28;7434:5;7412:28;:::i;7475:404::-;7559:6;7567;7620:2;7608:9;7599:7;7595:23;7591:32;7588:52;;;7636:1;7633;7626:12;7588:52;7675:9;7662:23;7694:31;7719:5;7694:31;:::i;:::-;7744:5;-1:-1:-1;7801:2:1;7786:18;;7773:32;7814:33;7773:32;7814:33;:::i;8277:385::-;8363:6;8371;8379;8387;8440:3;8428:9;8419:7;8415:23;8411:33;8408:53;;;8457:1;8454;8447:12;8408:53;-1:-1:-1;;8480:23:1;;;8550:2;8535:18;;8522:32;;-1:-1:-1;8601:2:1;8586:18;;8573:32;;8652:2;8637:18;8624:32;;-1:-1:-1;8277:385:1;-1:-1:-1;8277:385:1:o;9013:484::-;9066:3;9104:5;9098:12;9131:6;9126:3;9119:19;9157:4;9186:2;9181:3;9177:12;9170:19;;9223:2;9216:5;9212:14;9244:1;9254:218;9268:6;9265:1;9262:13;9254:218;;;9333:13;;-1:-1:-1;;;;;9329:62:1;9317:75;;9412:12;;;;9447:15;;;;9290:1;9283:9;9254:218;;;-1:-1:-1;9488:3:1;;9013:484;-1:-1:-1;;;;;9013:484:1:o;9502:342::-;9703:2;9692:9;9685:21;9666:4;9723:56;9775:2;9764:9;9760:18;9752:6;9723:56;:::i;:::-;9715:64;;9829:6;9822:14;9815:22;9810:2;9799:9;9795:18;9788:50;9502:342;;;;;:::o;9849:184::-;9901:77;9898:1;9891:88;9998:4;9995:1;9988:15;10022:4;10019:1;10012:15;10038:125;10078:4;10106:1;10103;10100:8;10097:34;;;10111:18;;:::i;:::-;-1:-1:-1;10148:9:1;;10038:125::o;10168:228::-;10208:7;10334:1;-1:-1:-1;;10262:74:1;10259:1;10256:81;10251:1;10244:9;10237:17;10233:105;10230:131;;;10341:18;;:::i;:::-;-1:-1:-1;10381:9:1;;10168:228::o;10401:274::-;10441:1;10467;10457:189;;10502:77;10499:1;10492:88;10603:4;10600:1;10593:15;10631:4;10628:1;10621:15;10457:189;-1:-1:-1;10660:9:1;;10401:274::o;11099:128::-;11139:3;11170:1;11166:6;11163:1;11160:13;11157:39;;;11176:18;;:::i;:::-;-1:-1:-1;11212:9:1;;11099:128::o;12438:184::-;12508:6;12561:2;12549:9;12540:7;12536:23;12532:32;12529:52;;;12577:1;12574;12567:12;12529:52;-1:-1:-1;12600:16:1;;12438:184;-1:-1:-1;12438:184:1:o;15176:224::-;15215:3;15243:6;15276:2;15273:1;15269:10;15306:2;15303:1;15299:10;15337:3;15333:2;15329:12;15324:3;15321:21;15318:47;;;15345:18;;:::i;:::-;15381:13;;15176:224;-1:-1:-1;;;;15176:224:1:o;16115:251::-;16185:6;16238:2;16226:9;16217:7;16213:23;16209:32;16206:52;;;16254:1;16251;16244:12;16206:52;16286:9;16280:16;16305:31;16330:5;16305:31;:::i;17060:245::-;17127:6;17180:2;17168:9;17159:7;17155:23;17151:32;17148:52;;;17196:1;17193;17186:12;17148:52;17228:9;17222:16;17247:28;17269:5;17247:28;:::i;20051:184::-;20103:77;20100:1;20093:88;20200:4;20197:1;20190:15;20224:4;20221:1;20214:15;20240:605;20539:6;20528:9;20521:25;20582:6;20577:2;20566:9;20562:18;20555:34;20625:3;20620:2;20609:9;20605:18;20598:31;20502:4;20646:57;20698:3;20687:9;20683:19;20675:6;20646:57;:::i;:::-;-1:-1:-1;;;;;20739:55:1;;;;20734:2;20719:18;;20712:83;-1:-1:-1;20826:3:1;20811:19;20804:35;20638:65;20240:605;-1:-1:-1;;;20240:605:1:o;21485:306::-;21573:6;21581;21589;21642:2;21630:9;21621:7;21617:23;21613:32;21610:52;;;21658:1;21655;21648:12;21610:52;21687:9;21681:16;21671:26;;21737:2;21726:9;21722:18;21716:25;21706:35;;21781:2;21770:9;21766:18;21760:25;21750:35;;21485:306;;;;;:::o;22120:217::-;22159:4;22188:6;22244:10;;;;22214;;22266:12;;;22263:38;;;22281:18;;:::i;:::-;22318:13;;22120:217;-1:-1:-1;;;22120:217:1:o

Swarm Source

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