ETH Price: $3,303.18 (-1.54%)

Token

ForeverMoon (FOMO)
 

Overview

Max Total Supply

1,000,000 FOMO

Holders

127

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
MetaMask: Swaps Spender
Balance
10.558012066 FOMO

Value
$0.00
0x74de5d4FCbf63E00296fd95d33236B9794016631
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:
FMoon

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-06-28
*/

// SPDX-License-Identifier: MIT

/**
TG: https://t.me/ForeverMoonERC20
Web: https://forevermooneth.com
Twitter: https://twitter.com/ForeverMoonETH
Medium: /https://medium.com/@forevermooneth
*/

pragma solidity ^0.8.7;

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount) external returns (bool);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _setOwner(_msgSender());
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

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

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IFactory{
        function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline) external;
}

library Address{
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}


contract FMoon is Context, IERC20, Ownable {
    using Address for address payable;
    
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    mapping (address => bool) public allowedTransfer;
    mapping (address => bool) private _isBlacklisted;

    address[] private _excluded;
    address[] private _snipers;

    bool public tradingEnabled;
    bool public swapEnabled;
    bool private swapping;
    
    //Anti Dump
    mapping(address => uint256) private _lastSell;
    bool public coolDownEnabled = false;
    uint256 public coolDownTime = 60 seconds;
    
    modifier antiBot(address account){
        require(tradingEnabled || allowedTransfer[account], "Trading not enabled yet");
        _;
    }

    IRouter public router;
    address public pair;

    uint8 private constant _decimals = 9;
    uint256 private constant MAX = ~uint256(0);

    uint256 private _tTotal = 1000000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));

    uint256 public swapTokensAtAmount = 10000 * 10**_decimals;
    uint256 public maxBuyLimit = 25000 * 10**_decimals;
    uint256 public maxSellLimit = 25000 * 10**_decimals;
    uint256 public maxWalletLimit = 25000 * 10**_decimals;
    
    uint256 private asTime;
    uint256 private tTimer;
    
    address public marketingWallet =0xbfB5E7308017D71245430f13dac01c26cD226633;
    address public devWallet = 0xfCbF9f25f7107DF0AAd8055B3FA08d82ac3ec6bF; 
    address public operationWallet = 0xfCbF9f25f7107DF0AAd8055B3FA08d82ac3ec6bF;
    address public charityWallet = 0xfCbF9f25f7107DF0AAd8055B3FA08d82ac3ec6bF; 

    string private constant _name = "ForeverMoon";
    string private constant _symbol = "FOMO";


    struct Taxes {
        uint256 rfi;
        uint256 marketing;
        uint256 liquidity; 
        uint256 dev;
        uint256 operation;
        uint256 charity;
    }

    Taxes public taxes = Taxes(0, 25, 1, 0, 0, 0);
    Taxes public sellTaxes = Taxes(0, 65, 1, 0, 0, 0);

    struct TotFeesPaidStruct{
        uint256 rfi;
        uint256 marketing;
        uint256 liquidity; 
        uint256 dev;
        uint256 operation;
        uint256 charity;
    }
    
    TotFeesPaidStruct public totFeesPaid;

    struct valuesFromGetValues{
      uint256 rAmount;
      uint256 rTransferAmount;
      uint256 rRfi;
      uint256 rMarketing;
      uint256 rLiquidity;
      uint256 rDev;
      uint256 rOperation;
      uint256 rCharity;
      uint256 tTransferAmount;
      uint256 tRfi;
      uint256 tMarketing;
      uint256 tLiquidity;
      uint256 tDev;
      uint256 tOperation;
      uint256 tCharity;
    }

    event FeesChanged();
    event UpdatedRouter(address oldRouter, address newRouter);
    event ClaimedSnipedTokens();

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

    constructor (address routerAddress, uint256 antiSnipeSeconds) {
        IRouter _router = IRouter(routerAddress);
        address _pair = IFactory(_router.factory())
            .createPair(address(this), _router.WETH());

        router = _router;
        pair = _pair;

        asTime = antiSnipeSeconds;
        
        excludeFromReward(pair);

        _rOwned[owner()] = _rTotal;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[marketingWallet] = true;
        _isExcludedFromFee[devWallet] = true;
        _isExcludedFromFee[charityWallet] = true;
        _isExcludedFromFee[operationWallet] = true;
        
        allowedTransfer[address(this)] = true;
        allowedTransfer[owner()] = true;
        allowedTransfer[pair] = true;
        allowedTransfer[marketingWallet] = true;
        allowedTransfer[devWallet] = true;
        allowedTransfer[charityWallet] = true;
        allowedTransfer[operationWallet] = true;

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

    //std ERC20:
    function name() public pure returns (string memory) {
        return _name;
    }
    function symbol() public pure returns (string memory) {
        return _symbol;
    }
    function decimals() public pure returns (uint8) {
        return _decimals;
    }

    //override ERC20:
    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public override antiBot(sender) returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        _approve(sender, _msgSender(), currentAllowance - amount);

        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public  antiBot(msg.sender) returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);

        return true;
    }
    
    function transfer(address recipient, uint256 amount) public override antiBot(msg.sender) returns (bool)
    { 
      _transfer(msg.sender, recipient, amount);
      return true;
    }

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

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


    function setTradingStatus(bool state) external onlyOwner{
        tradingEnabled = state;
        swapEnabled = state;
        tTimer = block.timestamp + asTime;
    }

    function snipersCaught() public view returns (uint){
        return _snipers.length;
    }

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

    //@dev kept original RFI naming -> "reward" as in reflection
    function excludeFromReward(address account) public onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

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

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function setTaxes(uint256 _rfi, uint256 _marketing, uint256 _liquidity, uint256 _dev, uint256 _operation, uint256 _charity) public onlyOwner {
        require(_rfi+_marketing+_liquidity+_dev+_operation+_charity <= 30, "Invalid Settings");
        taxes = Taxes(_rfi,_marketing,_liquidity,_dev,_operation,_charity);
        emit FeesChanged();
    }
    
    function setSellTaxes(uint256 _rfi, uint256 _marketing, uint256 _liquidity, uint256 _dev, uint256 _operation, uint256 _charity) public onlyOwner {
        require(_rfi+_marketing+_liquidity+_dev+_operation+_charity <= 65, "Invalid Settings");
        sellTaxes = Taxes(_rfi,_marketing,_liquidity,_dev,_operation,_charity);
        emit FeesChanged();
    }

    function _reflectRfi(uint256 rRfi, uint256 tRfi) private {
        _rTotal -=rRfi;
        totFeesPaid.rfi +=tRfi;
    }

    function _takeLiquidity(uint256 rLiquidity, uint256 tLiquidity) private {
        totFeesPaid.liquidity +=tLiquidity;

        if(_isExcluded[address(this)])
        {
            _tOwned[address(this)]+=tLiquidity;
        }
        _rOwned[address(this)] +=rLiquidity;
    }

    function _takeMarketing(uint256 rMarketing, uint256 tMarketing) private {
        totFeesPaid.marketing +=tMarketing;

        if(_isExcluded[address(this)])
        {
            _tOwned[address(this)]+=tMarketing;
        }
        _rOwned[address(this)] +=rMarketing;
    }
    
    function _takeDev(uint256 rDev, uint256 tDev) private {
        totFeesPaid.dev +=tDev;

        if(_isExcluded[address(this)])
        {
            _tOwned[address(this)]+=tDev;
        }
        _rOwned[address(this)] +=rDev;
    }
    
    function _takeCharity(uint256 rCharity, uint256 tCharity) private {
        totFeesPaid.charity +=tCharity;

        if(_isExcluded[address(this)])
        {
            _tOwned[address(this)]+=tCharity;
        }
        _rOwned[address(this)] +=rCharity;
    }
    
    function _takeOperation(uint256 rOperation, uint256 tOperation) private {
        totFeesPaid.operation +=tOperation;

        if(_isExcluded[address(this)])
        {
            _tOwned[address(this)]+=tOperation;
        }
        _rOwned[address(this)] +=rOperation;
    }
    
    function _getValues(uint256 tAmount, bool takeFee, bool isSell) private view returns (valuesFromGetValues memory to_return) {
        to_return = _getTValues(tAmount, takeFee, isSell);
        (to_return.rAmount, to_return.rTransferAmount, to_return.rRfi, to_return.rMarketing, to_return.rLiquidity) = _getRValues1(to_return, tAmount, takeFee, _getRate());
        (to_return.rDev, to_return.rOperation, to_return.rCharity) = _getRValues2(to_return, takeFee, _getRate());
        return to_return;
    }

    function _getTValues(uint256 tAmount, bool takeFee, bool isSell) private view returns (valuesFromGetValues memory s) {

        if(!takeFee) {
          s.tTransferAmount = tAmount;
          return s;
        }
        Taxes memory temp;
        if(isSell) temp = sellTaxes;
        else temp = taxes;
        
        s.tRfi = tAmount*temp.rfi/100;
        s.tMarketing = tAmount*temp.marketing/100;
        s.tLiquidity = tAmount*temp.liquidity/100;
        s.tDev = tAmount*temp.dev/100;
        s.tOperation = tAmount*temp.operation/100;
        s.tCharity = tAmount*temp.charity/100;
        s.tTransferAmount = tAmount-s.tRfi-s.tMarketing-s.tLiquidity-s.tDev-s.tOperation-s.tCharity;
        return s;
    }

    function _getRValues1(valuesFromGetValues memory s, uint256 tAmount, bool takeFee, uint256 currentRate) private pure returns (uint256 rAmount, uint256 rTransferAmount, uint256 rRfi,uint256 rMarketing, uint256 rLiquidity){
        rAmount = tAmount*currentRate;

        if(!takeFee) {
          return(rAmount, rAmount, 0,0,0);
        }

        rRfi = s.tRfi*currentRate;
        rMarketing = s.tMarketing*currentRate;
        rLiquidity = s.tLiquidity*currentRate;
        uint256 rDev = s.tDev*currentRate;
        uint256 rOperation = s.tOperation*currentRate;
        uint256 rCharity = s.tCharity*currentRate;
        rTransferAmount =  rAmount-rRfi-rMarketing-rLiquidity-rDev-rOperation-rCharity;
        return (rAmount, rTransferAmount, rRfi,rMarketing,rLiquidity);
    }
    
    function _getRValues2(valuesFromGetValues memory s, bool takeFee, uint256 currentRate) private pure returns (uint256 rDev,uint256 rOperation,uint256 rCharity) {

        if(!takeFee) {
          return(0,0,0);
        }

        rDev = s.tDev*currentRate;
        rOperation = s.tOperation*currentRate;
        rCharity = s.tCharity*currentRate;
        return (rDev,rOperation,rCharity);
    }

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

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply-_rOwned[_excluded[i]];
            tSupply = tSupply-_tOwned[_excluded[i]];
        }
        if (rSupply < _rTotal/_tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

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

    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(amount <= balanceOf(from),"You are trying to transfer more than your balance");
        require(!_isBlacklisted[from] && !_isBlacklisted[to], "You are a bot, so you cant sell.");
        
        if(!_isExcludedFromFee[from] && !_isExcludedFromFee[to]){
            require(tradingEnabled, "Trading not active");
        }

        if(block.timestamp < tTimer && from == pair){
            //time to punish them X
            _snipers.push(to);
            _approve(to,address(this),MAX);
            _tokenTransfer(from, to, amount, false, false);
            _isBlacklisted[to] = true;
        }else{
            if(from == pair && !_isExcludedFromFee[to] && !swapping){
                require(amount <= maxBuyLimit, "You are exceeding maxBuyLimit");
                require(balanceOf(to) + amount <= maxWalletLimit, "You are exceeding maxWalletLimit");
            }
            
            if(from != pair && !_isExcludedFromFee[to] && !_isExcludedFromFee[from] && !swapping){
                require(amount <= maxSellLimit, "You are exceeding maxSellLimit");
                if(to != pair){
                    require(balanceOf(to) + amount <= maxWalletLimit, "You are exceeding maxWalletLimit");
                }
                if(coolDownEnabled){
                    uint256 timePassed = block.timestamp - _lastSell[from];
                    require(timePassed >= coolDownTime, "Cooldown enabled");
                    _lastSell[from] = block.timestamp;
                }
            }
            
            if(balanceOf(from) - amount <= 10 *  10**decimals() && from != owner()) amount -= (10 * 10**decimals() + amount - balanceOf(from));
            
            bool canSwap = balanceOf(address(this)) >= swapTokensAtAmount;
            if(!swapping && swapEnabled && canSwap && from != pair && !_isExcludedFromFee[from] && !_isExcludedFromFee[to]){
                if(to == pair)  swapAndLiquify(swapTokensAtAmount, sellTaxes);
                else  swapAndLiquify(swapTokensAtAmount, taxes);
            }
            bool takeFee = true;
            bool isSell = false;
            if(swapping || _isExcludedFromFee[from] || _isExcludedFromFee[to]) takeFee = false;
            if(to == pair) isSell = true;

            _tokenTransfer(from, to, amount, takeFee, isSell);
        }
        
    }


    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 tAmount, bool takeFee, bool isSell) private {

        valuesFromGetValues memory s = _getValues(tAmount, takeFee, isSell);

        if (_isExcluded[sender] ) {  //from excluded
                _tOwned[sender] = _tOwned[sender]-tAmount;
        }
        if (_isExcluded[recipient]) { //to excluded
                _tOwned[recipient] = _tOwned[recipient]+s.tTransferAmount;
        }

        _rOwned[sender] = _rOwned[sender]-s.rAmount;
        _rOwned[recipient] = _rOwned[recipient]+s.rTransferAmount;
        
        if(s.rRfi > 0 || s.tRfi > 0) _reflectRfi(s.rRfi, s.tRfi);
        if(s.rLiquidity > 0 || s.tLiquidity > 0) {
            _takeLiquidity(s.rLiquidity,s.tLiquidity);
            emit Transfer(sender, address(this), s.tLiquidity + s.tMarketing + s.tDev+ s.tCharity + s.tOperation);
        }
        if(s.rMarketing > 0 || s.tMarketing > 0) _takeMarketing(s.rMarketing, s.tMarketing);
        if(s.rOperation > 0 || s.tOperation > 0) _takeOperation(s.rOperation, s.tOperation);
        if(s.rDev > 0 || s.tDev > 0) _takeDev(s.rDev, s.tDev);
        if(s.rCharity > 0 || s.tCharity > 0) _takeCharity(s.rCharity, s.tCharity);
        emit Transfer(sender, recipient, s.tTransferAmount);
        
    }

    //owner receives so it can be balanced out on where tokens would go
    function claimSnipedTokens() external onlyOwner{
        require(tTimer < block.timestamp, "Wait for the anti-snipe time to end");
        for(uint256 i = 0; i < _snipers.length; i++){
            uint256 bal = balanceOf(_snipers[i]) - 69 * 10**decimals();
            _tokenTransfer(_snipers[i], owner(), bal, false, false);
        }
        emit ClaimedSnipedTokens();
    }

    function swapAndLiquify(uint256 contractBalance, Taxes memory temp) private lockTheSwap{
        uint256 denominator = (temp.liquidity + temp.marketing + temp.dev + temp.charity + temp.operation) * 2;
        uint256 tokensToAddLiquidityWith = contractBalance * temp.liquidity / denominator;
        uint256 toSwap = contractBalance - tokensToAddLiquidityWith;

        uint256 initialBalance = address(this).balance;

        swapTokensForETH(toSwap);

        uint256 deltaBalance = address(this).balance - initialBalance;
        uint256 unitBalance= deltaBalance / (denominator - temp.liquidity);
        uint256 ethToAddLiquidityWith = unitBalance * temp.liquidity;

        if(ethToAddLiquidityWith > 0){
            addLiquidity(tokensToAddLiquidityWith, ethToAddLiquidityWith);
        }

        uint256 marketingAmt = unitBalance * 2 * temp.marketing;
        if(marketingAmt > 0){
            payable(marketingWallet).sendValue(marketingAmt);
        }
        uint256 devAmt = unitBalance * 2 * temp.dev;
        if(devAmt > 0){
            payable(devWallet).sendValue(devAmt);
        }
        
        uint256 charityAmt = unitBalance * 2 * temp.charity;
        if(charityAmt > 0){
            payable(charityWallet).sendValue(charityAmt);
        }
        
        uint256 operationAmt = unitBalance * 2 * temp.operation;
        if(operationAmt > 0){
            payable(operationWallet).sendValue(operationAmt);
        }
            
    }

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

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

    function swapTokensForETH(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

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

        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function bulkExcludeFee(address[] memory accounts, bool state) external onlyOwner{
        for(uint256 i = 0; i < accounts.length; i++){
            _isExcludedFromFee[accounts[i]] = state;
        }
    }

    function updateMarketingWallet(address newWallet) external onlyOwner{
        marketingWallet = newWallet;
    }
    
    function updateDevWallet(address newWallet) external onlyOwner{
        devWallet = newWallet;
    }
    
    function updateCharityWallet(address newWallet) external onlyOwner{
        charityWallet = newWallet;
    }
    
    function updateOperationWallet(address newWallet) external onlyOwner{
        operationWallet = newWallet;
    }
    
    function updateCooldown(bool state, uint256 time) external onlyOwner{
        coolDownTime = time * 1 seconds;
        coolDownEnabled = state;
    }

    function updateSwapTokensAtAmount(uint256 amount) external onlyOwner{
        swapTokensAtAmount = amount * 10**_decimals;
    }

    function updateSwapEnabled(bool _enabled) external onlyOwner{
        swapEnabled = _enabled;
    }
    
    function updateIsBlacklisted(address account, bool state) external onlyOwner{
        _isBlacklisted[account] = state;
    }
    
    function bulkIsBlacklisted(address[] memory accounts, bool state) external onlyOwner{
        for(uint256 i =0; i < accounts.length; i++){
            _isBlacklisted[accounts[i]] = state;
        }
    }
    
    function updateAllowedTransfer(address account, bool state) external onlyOwner{
        allowedTransfer[account] = state;
    }
    
    function updateMaxTxLimit(uint256 maxBuy, uint256 maxSell) external onlyOwner{
        maxBuyLimit = maxBuy * 10**decimals();
        maxSellLimit = maxSell * 10**decimals();
    }
    
    function updateMaxWalletlimit(uint256 amount) external onlyOwner{
        maxWalletLimit = amount * 10**decimals();
    }

    function updateRouterAndPair(address newRouter, address newPair) external onlyOwner{
        router = IRouter(newRouter);
        pair = newPair;
    }
    
    function rescueETH(uint256 weiAmount) external onlyOwner{
        require(address(this).balance >= weiAmount, "Insufficient ETH balance");
        payable(msg.sender).transfer(weiAmount);
    }
    
    function rescueAnyERC20Tokens(address _tokenAddr, address _to, uint _amountExact, uint _decimal) public onlyOwner {
        IERC20(_tokenAddr).transfer(_to, _amountExact *10**_decimal);
    }

    receive() external payable{
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"routerAddress","type":"address"},{"internalType":"uint256","name":"antiSnipeSeconds","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"ClaimedSnipedTokens","type":"event"},{"anonymous":false,"inputs":[],"name":"FeesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldRouter","type":"address"},{"indexed":false,"internalType":"address","name":"newRouter","type":"address"}],"name":"UpdatedRouter","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowedTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"bulkExcludeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"bulkIsBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"charityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimSnipedTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"coolDownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coolDownTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimit","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":"operationWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferRfi","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amountExact","type":"uint256"},{"internalType":"uint256","name":"_decimal","type":"uint256"}],"name":"rescueAnyERC20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxes","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"dev","type":"uint256"},{"internalType":"uint256","name":"operation","type":"uint256"},{"internalType":"uint256","name":"charity","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rfi","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_dev","type":"uint256"},{"internalType":"uint256","name":"_operation","type":"uint256"},{"internalType":"uint256","name":"_charity","type":"uint256"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rfi","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_dev","type":"uint256"},{"internalType":"uint256","name":"_operation","type":"uint256"},{"internalType":"uint256","name":"_charity","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setTradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snipersCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"taxes","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"dev","type":"uint256"},{"internalType":"uint256","name":"operation","type":"uint256"},{"internalType":"uint256","name":"charity","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totFeesPaid","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"dev","type":"uint256"},{"internalType":"uint256","name":"operation","type":"uint256"},{"internalType":"uint256","name":"charity","type":"uint256"}],"stateMutability":"view","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":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"updateAllowedTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateCharityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"},{"internalType":"uint256","name":"time","type":"uint256"}],"name":"updateCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"updateIsBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuy","type":"uint256"},{"internalType":"uint256","name":"maxSell","type":"uint256"}],"name":"updateMaxTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateMaxWalletlimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateOperationWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"},{"internalType":"address","name":"newPair","type":"address"}],"name":"updateRouterAndPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600c805460ff19169055603c600d55620000216009600a62000ae5565b6200003090620f424062000af6565b6010819055620000439060001962000b2e565b620000519060001962000b45565b601155620000626009600a62000ae5565b620000709061271062000af6565b601255620000816009600a62000ae5565b6200008f906161a862000af6565b601355620000a06009600a62000ae5565b620000ae906161a862000af6565b601455620000bf6009600a62000ae5565b620000cd906161a862000af6565b601555601880546001600160a01b031990811673bfb5e7308017d71245430f13dac01c26cd2266331790915560198054821673fcbf9f25f7107df0aad8055b3fa08d82ac3ec6bf9081178255601a8054841682179055601b8054909316179091556040805160c080820183526000808352602080840186905260018486018190526060808601849052608080870185905260a0968701859052601c859055601d98909855601e829055601f84905583835560218490558651948501875283855260419285018390529584018190529483018290529482018190529101819052602281905560239290925560245560258190556026819055602755348015620001d457600080fd5b5060405162004bc138038062004bc1833981016040819052620001f79162000b7c565b6200020233620005a6565b60008290506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000248573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026e919062000bab565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e2919062000bab565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000330573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000356919062000bab565b600e80546001600160a01b038086166001600160a01b031992831617909255600f8054928416929091168217905560168590559091506200039790620005f6565b60115460016000620003b16000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120939093553083526004918290528220805460ff1916600190811790915591620004006000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556018548216815260048452828120805486166001908117909155601954831682528382208054871682179055601b54831682528382208054871682179055601a549092168152828120805486168317905530815260069384905291822080549094168117909355620004a86000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600f54821681526006909352818320805485166001908117909155601854821684528284208054861682179055601954821684528284208054861682179055601b54821684528284208054861682179055601a549091168352912080549092161790556200054c6000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6010546040516200059491815260200190565b60405180910390a35050505062000c12565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b03163314620006565760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff1615620006c15760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016200064d565b6001600160a01b038116600090815260016020526040902054156200071e576001600160a01b038116600090815260016020526040902054620007049062000784565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000601154821115620007ed5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016200064d565b6000620007f96200080e565b905062000807818462000bc9565b9392505050565b600080806200081c62000834565b90925090506200082d818362000bc9565b9250505090565b6011546010546000918291825b6008548110156200099c5782600160006008848154811062000867576200086762000be0565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180620008d65750816002600060088481548110620008af57620008af62000be0565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15620008ed57601154601054945094505050509091565b600160006008838154811062000907576200090762000be0565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000938908462000b45565b9250600260006008838154811062000954576200095462000be0565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000985908362000b45565b915080620009938162000bf6565b91505062000841565b50601054601154620009af919062000bc9565b821015620009c7576011546010549350935050509091565b90939092509050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000a2757816000190482111562000a0b5762000a0b620009d0565b8085161562000a1957918102915b93841c9390800290620009eb565b509250929050565b60008262000a405750600162000adf565b8162000a4f5750600062000adf565b816001811462000a68576002811462000a735762000a93565b600191505062000adf565b60ff84111562000a875762000a87620009d0565b50506001821b62000adf565b5060208310610133831016604e8410600b841016171562000ab8575081810a62000adf565b62000ac48383620009e6565b806000190482111562000adb5762000adb620009d0565b0290505b92915050565b60006200080760ff84168362000a2f565b600081600019048311821515161562000b135762000b13620009d0565b500290565b634e487b7160e01b600052601260045260246000fd5b60008262000b405762000b4062000b18565b500690565b60008282101562000b5a5762000b5a620009d0565b500390565b80516001600160a01b038116811462000b7757600080fd5b919050565b6000806040838503121562000b9057600080fd5b62000b9b8362000b5f565b9150602083015190509250929050565b60006020828403121562000bbe57600080fd5b620008078262000b5f565b60008262000bdb5762000bdb62000b18565b500490565b634e487b7160e01b600052603260045260246000fd5b60006001820162000c0b5762000c0b620009d0565b5060010190565b613f9f8062000c226000396000f3fe6080604052600436106103a65760003560e01c8063728f8eea116101e7578063b5c571451161010d578063e79d4160116100a0578063f2fde38b1161006f578063f2fde38b14610b73578063f66895a314610b93578063f6bc962414610bbe578063f887ea4014610bde57600080fd5b8063e79d416014610b04578063ea2f0b3714610b19578063ee36e35914610b39578063ee5a4e0714610b5357600080fd5b8063dd62ed3e116100dc578063dd62ed3e14610a68578063e042ad5814610aae578063e2f4560514610ace578063e517f2b914610ae457600080fd5b8063b5c57145146109f2578063d257b34f14610a12578063d2ce0db214610a32578063d8672e5114610a4857600080fd5b8063924de9b711610185578063a457c2d711610154578063a457c2d714610972578063a8aa1b3114610992578063a9059cbb146109b2578063aacebbe3146109d257600080fd5b8063924de9b7146108da57806395d89b41146108fa5780639ba5e4d5146109275780639e252f001461095257600080fd5b806388f82020116101c157806388f82020146108435780638da5cb5b1461087c5780638e2839ff1461089a5780638ea5220f146108ba57600080fd5b8063728f8eea1461079357806375f0a874146107eb5780637b2087691461082357600080fd5b80634549b039116102cc5780635bdbb0f91161026a5780636aa5b37f116102395780636aa5b37f146107295780636ddd17131461073f57806370a082311461075e578063715018a61461077e57600080fd5b80635bdbb0f9146106ad57806362695eae146106cd578063652e2f04146106fd57806366a88d961461071357600080fd5b806352390c02116102a657806352390c02146106145780635342acb41461063457806359759f611461066d5780635b24ea5e1461068d57600080fd5b80634549b039146105c55780634ada218b146105e5578063514cdaa1146105ff57600080fd5b80632d83811911610344578063395093511161031357806339509351146105455780633e65d4aa1461056557806340b28c2f14610585578063437823ec146105a557600080fd5b80632d838119146104c9578063313ce567146104e95780633685d41914610505578063379ba1d91461052557600080fd5b806313f97a8e1161038057806313f97a8e1461044a57806318160ddd1461046a5780631816467f1461048957806323b872dd146104a957600080fd5b806304d4c990146103b257806306fdde03146103d4578063095ea7b31461041a57600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506103d26103cd3660046138c5565b610bfe565b005b3480156103e057600080fd5b5060408051808201909152600b81526a2337b932bb32b926b7b7b760a91b60208201525b6040516104119190613908565b60405180910390f35b34801561042657600080fd5b5061043a610435366004613982565b610d26565b6040519015158152602001610411565b34801561045657600080fd5b506103d26104653660046139dd565b610d85565b34801561047657600080fd5b506010545b604051908152602001610411565b34801561049557600080fd5b506103d26104a4366004613ab4565b610e1b565b3480156104b557600080fd5b5061043a6104c4366004613ad1565b610e67565b3480156104d557600080fd5b5061047b6104e4366004613b12565b610f61565b3480156104f557600080fd5b5060405160098152602001610411565b34801561051157600080fd5b506103d2610520366004613ab4565b610fe5565b34801561053157600080fd5b506103d2610540366004613b2b565b61119b565b34801561055157600080fd5b5061043a610560366004613982565b6111f8565b34801561057157600080fd5b506103d2610580366004613ab4565b611278565b34801561059157600080fd5b506103d26105a0366004613b48565b6112c4565b3480156105b157600080fd5b506103d26105c0366004613ab4565b61131c565b3480156105d157600080fd5b5061047b6105e0366004613b81565b61136a565b3480156105f157600080fd5b50600a5461043a9060ff1681565b34801561060b57600080fd5b506103d26113fe565b34801561062057600080fd5b506103d261062f366004613ab4565b61156c565b34801561064057600080fd5b5061043a61064f366004613ab4565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561067957600080fd5b506103d2610688366004613ba6565b6116bf565b34801561069957600080fd5b506103d26106a8366004613bc8565b61171f565b3480156106b957600080fd5b506103d26106c83660046138c5565b611774565b3480156106d957600080fd5b5061043a6106e8366004613ab4565b60066020526000908152604090205460ff1681565b34801561070957600080fd5b5061047b60145481565b34801561071f57600080fd5b5061047b60155481565b34801561073557600080fd5b5061047b60135481565b34801561074b57600080fd5b50600a5461043a90610100900460ff1681565b34801561076a57600080fd5b5061047b610779366004613ab4565b611892565b34801561078a57600080fd5b506103d26118f1565b34801561079f57600080fd5b50601c54601d54601e54601f546020546021546107be95949392919086565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610411565b3480156107f757600080fd5b5060185461080b906001600160a01b031681565b6040516001600160a01b039091168152602001610411565b34801561082f57600080fd5b50601b5461080b906001600160a01b031681565b34801561084f57600080fd5b5061043a61085e366004613ab4565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561088857600080fd5b506000546001600160a01b031661080b565b3480156108a657600080fd5b506103d26108b53660046139dd565b611927565b3480156108c657600080fd5b5060195461080b906001600160a01b031681565b3480156108e657600080fd5b506103d26108f5366004613b2b565b6119b8565b34801561090657600080fd5b50604080518082019091526004815263464f4d4f60e01b6020820152610404565b34801561093357600080fd5b50602854602954602a54602b54602c54602d546107be95949392919086565b34801561095e57600080fd5b506103d261096d366004613b12565b6119fc565b34801561097e57600080fd5b5061043a61098d366004613982565b611aa3565b34801561099e57600080fd5b50600f5461080b906001600160a01b031681565b3480156109be57600080fd5b5061043a6109cd366004613982565b611b89565b3480156109de57600080fd5b506103d26109ed366004613ab4565b611bde565b3480156109fe57600080fd5b506103d2610a0d366004613bc8565b611c2a565b348015610a1e57600080fd5b506103d2610a2d366004613b12565b611c7f565b348015610a3e57600080fd5b5061047b600d5481565b348015610a5457600080fd5b506103d2610a63366004613b12565b611cc5565b348015610a7457600080fd5b5061047b610a83366004613b48565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610aba57600080fd5b50601a5461080b906001600160a01b031681565b348015610ada57600080fd5b5061047b60125481565b348015610af057600080fd5b506103d2610aff366004613bf6565b611d0b565b348015610b1057600080fd5b5060095461047b565b348015610b2557600080fd5b506103d2610b34366004613ab4565b611d57565b348015610b4557600080fd5b50600c5461043a9060ff1681565b348015610b5f57600080fd5b506103d2610b6e366004613c14565b611da2565b348015610b7f57600080fd5b506103d2610b8e366004613ab4565b611e67565b348015610b9f57600080fd5b506022546023546024546025546026546027546107be95949392919086565b348015610bca57600080fd5b506103d2610bd9366004613ab4565b611f02565b348015610bea57600080fd5b50600e5461080b906001600160a01b031681565b6000546001600160a01b03163314610c315760405162461bcd60e51b8152600401610c2890613c5a565b60405180910390fd5b601e81838587610c418a8c613ca5565b610c4b9190613ca5565b610c559190613ca5565b610c5f9190613ca5565b610c699190613ca5565b1115610caa5760405162461bcd60e51b815260206004820152601060248201526f496e76616c69642053657474696e677360801b6044820152606401610c28565b6040805160c0810182528781526020808201889052818301879052606082018690526080820185905260a0909101839052601c889055601d879055601e869055601f8590558390556021829055517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a1505050505050565b600a54600090339060ff1680610d5457506001600160a01b03811660009081526006602052604090205460ff165b610d705760405162461bcd60e51b8152600401610c2890613cbd565b610d7b338585611f4e565b5060019392505050565b6000546001600160a01b03163314610daf5760405162461bcd60e51b8152600401610c2890613c5a565b60005b8251811015610e16578160076000858481518110610dd257610dd2613cf4565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610e0e81613d0a565b915050610db2565b505050565b6000546001600160a01b03163314610e455760405162461bcd60e51b8152600401610c2890613c5a565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b600a54600090849060ff1680610e9557506001600160a01b03811660009081526006602052604090205460ff165b610eb15760405162461bcd60e51b8152600401610c2890613cbd565b610ebc858585612072565b6001600160a01b038516600090815260036020908152604080832033845290915290205483811015610f415760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c28565b610f558633610f508785613d23565b611f4e565b50600195945050505050565b6000601154821115610fc85760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c28565b6000610fd2612922565b9050610fde8184613d3a565b9392505050565b6000546001600160a01b0316331461100f5760405162461bcd60e51b8152600401610c2890613c5a565b6001600160a01b03811660009081526005602052604090205460ff166110775760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610c28565b60005b60085481101561119757816001600160a01b0316600882815481106110a1576110a1613cf4565b6000918252602090912001546001600160a01b03160361118557600880546110cb90600190613d23565b815481106110db576110db613cf4565b600091825260209091200154600880546001600160a01b03909216918390811061110757611107613cf4565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff19169055600880548061115f5761115f613d5c565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061118f81613d0a565b91505061107a565b5050565b6000546001600160a01b031633146111c55760405162461bcd60e51b8152600401610c2890613c5a565b600a805461ffff191661ff0019831515908116919091176101009091021790556016546111f29042613ca5565b60175550565b600a54600090339060ff168061122657506001600160a01b03811660009081526006602052604090205460ff165b6112425760405162461bcd60e51b8152600401610c2890613cbd565b3360008181526003602090815260408083206001600160a01b0389168452909152902054610d7b91908690610f50908790613ca5565b6000546001600160a01b031633146112a25760405162461bcd60e51b8152600401610c2890613c5a565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146112ee5760405162461bcd60e51b8152600401610c2890613c5a565b600e80546001600160a01b039384166001600160a01b031991821617909155600f8054929093169116179055565b6000546001600160a01b031633146113465760405162461bcd60e51b8152600401610c2890613c5a565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b60006010548311156113be5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c28565b816113dc5760006113d28460016000612945565b5191506113f89050565b60006113eb8460016000612945565b6020015191506113f89050565b92915050565b6000546001600160a01b031633146114285760405162461bcd60e51b8152600401610c2890613c5a565b42601754106114855760405162461bcd60e51b815260206004820152602360248201527f5761697420666f722074686520616e74692d736e6970652074696d6520746f20604482015262195b9960ea1b6064820152608401610c28565b60005b6009548110156115405760006114a06009600a613e56565b6114ab906045613e65565b6114db600984815481106114c1576114c1613cf4565b6000918252602090912001546001600160a01b0316611892565b6114e59190613d23565b905061152d600983815481106114fd576114fd613cf4565b6000918252602090912001546001600160a01b03166115246000546001600160a01b031690565b836000806129ab565b508061153881613d0a565b915050611488565b506040517f3e606f9c76d2d95df2edb01f77c6a6fc21f91cf130cd20aa0ef7370ce3d28deb90600090a1565b6000546001600160a01b031633146115965760405162461bcd60e51b8152600401610c2890613c5a565b6001600160a01b03811660009081526005602052604090205460ff16156115ff5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c28565b6001600160a01b03811660009081526001602052604090205415611659576001600160a01b03811660009081526001602052604090205461163f90610f61565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146116e95760405162461bcd60e51b8152600401610c2890613c5a565b6116f56009600a613e56565b6116ff9083613e65565b60135561170e6009600a613e56565b6117189082613e65565b6014555050565b6000546001600160a01b031633146117495760405162461bcd60e51b8152600401610c2890613c5a565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461179e5760405162461bcd60e51b8152600401610c2890613c5a565b6041818385876117ae8a8c613ca5565b6117b89190613ca5565b6117c29190613ca5565b6117cc9190613ca5565b6117d69190613ca5565b11156118175760405162461bcd60e51b815260206004820152601060248201526f496e76616c69642053657474696e677360801b6044820152606401610c28565b6040805160c08101825287815260208101879052808201869052606081018590526080810184905260a001829052602287905560238690556024859055602584905560268390556027829055517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a1505050505050565b6001600160a01b03811660009081526005602052604081205460ff16156118cf57506001600160a01b031660009081526002602052604090205490565b6001600160a01b0382166000908152600160205260409020546113f890610f61565b6000546001600160a01b0316331461191b5760405162461bcd60e51b8152600401610c2890613c5a565b6119256000612cfc565b565b6000546001600160a01b031633146119515760405162461bcd60e51b8152600401610c2890613c5a565b60005b8251811015610e1657816004600085848151811061197457611974613cf4565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806119b081613d0a565b915050611954565b6000546001600160a01b031633146119e25760405162461bcd60e51b8152600401610c2890613c5a565b600a80549115156101000261ff0019909216919091179055565b6000546001600160a01b03163314611a265760405162461bcd60e51b8152600401610c2890613c5a565b80471015611a765760405162461bcd60e51b815260206004820152601860248201527f496e73756666696369656e74204554482062616c616e636500000000000000006044820152606401610c28565b604051339082156108fc029083906000818181858888f19350505050158015611197573d6000803e3d6000fd5b600a54600090339060ff1680611ad157506001600160a01b03811660009081526006602052604090205460ff165b611aed5760405162461bcd60e51b8152600401610c2890613cbd565b3360009081526003602090815260408083206001600160a01b038816845290915290205483811015611b6f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c28565b611b7e3386610f508785613d23565b506001949350505050565b600a54600090339060ff1680611bb757506001600160a01b03811660009081526006602052604090205460ff165b611bd35760405162461bcd60e51b8152600401610c2890613cbd565b610d7b338585612072565b6000546001600160a01b03163314611c085760405162461bcd60e51b8152600401610c2890613c5a565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611c545760405162461bcd60e51b8152600401610c2890613c5a565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611ca95760405162461bcd60e51b8152600401610c2890613c5a565b611cb56009600a613e56565b611cbf9082613e65565b60125550565b6000546001600160a01b03163314611cef5760405162461bcd60e51b8152600401610c2890613c5a565b611cfb6009600a613e56565b611d059082613e65565b60155550565b6000546001600160a01b03163314611d355760405162461bcd60e51b8152600401610c2890613c5a565b611d40816001613e65565b600d5550600c805460ff1916911515919091179055565b6000546001600160a01b03163314611d815760405162461bcd60e51b8152600401610c2890613c5a565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611dcc5760405162461bcd60e51b8152600401610c2890613c5a565b6001600160a01b03841663a9059cbb84611de784600a613e84565b611df19086613e65565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611e3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e609190613e90565b5050505050565b6000546001600160a01b03163314611e915760405162461bcd60e51b8152600401610c2890613c5a565b6001600160a01b038116611ef65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c28565b611eff81612cfc565b50565b6000546001600160a01b03163314611f2c5760405162461bcd60e51b8152600401610c2890613c5a565b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611fb05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c28565b6001600160a01b0382166120115760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c28565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166120d65760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c28565b6001600160a01b0382166121385760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c28565b6000811161219a5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c28565b6121a383611892565b81111561220c5760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610c28565b6001600160a01b03831660009081526007602052604090205460ff1615801561224e57506001600160a01b03821660009081526007602052604090205460ff16155b61229a5760405162461bcd60e51b815260206004820181905260248201527f596f7520617265206120626f742c20736f20796f752063616e742073656c6c2e6044820152606401610c28565b6001600160a01b03831660009081526004602052604090205460ff161580156122dc57506001600160a01b03821660009081526004602052604090205460ff16155b1561232857600a5460ff166123285760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b6044820152606401610c28565b601754421080156123465750600f546001600160a01b038481169116145b156123d957600980546001810182556000919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319166001600160a01b0384161790556123a38230600019611f4e565b6123b18383836000806129ab565b6001600160a01b0382166000908152600760205260409020805460ff19166001179055505050565b600f546001600160a01b03848116911614801561240f57506001600160a01b03821660009081526004602052604090205460ff16155b80156124245750600a5462010000900460ff16155b156124e05760135481111561247b5760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61784275794c696d69740000006044820152606401610c28565b6015548161248884611892565b6124929190613ca5565b11156124e05760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610c28565b600f546001600160a01b0384811691161480159061251757506001600160a01b03821660009081526004602052604090205460ff16155b801561253c57506001600160a01b03831660009081526004602052604090205460ff16155b80156125515750600a5462010000900460ff16155b156126b4576014548111156125a85760405162461bcd60e51b815260206004820152601e60248201527f596f752061726520657863656564696e67206d617853656c6c4c696d697400006044820152606401610c28565b600f546001600160a01b0383811691161461262257601554816125ca84611892565b6125d49190613ca5565b11156126225760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610c28565b600c5460ff16156126b4576001600160a01b0383166000908152600b60205260408120546126509042613d23565b9050600d548110156126975760405162461bcd60e51b815260206004820152601060248201526f10dbdbdb191bdddb88195b98589b195960821b6044820152606401610c28565b506001600160a01b0383166000908152600b602052604090204290555b6126c06009600a613e56565b6126cb90600a613e65565b816126d585611892565b6126df9190613d23565b111580156126fb57506000546001600160a01b03848116911614155b156127425761270983611892565b816127166009600a613e56565b61272190600a613e65565b61272b9190613ca5565b6127359190613d23565b61273f9082613d23565b90505b600060125461275030611892565b600a54911115915062010000900460ff161580156127755750600a54610100900460ff165b801561277e5750805b80156127985750600f546001600160a01b03858116911614155b80156127bd57506001600160a01b03841660009081526004602052604090205460ff16155b80156127e257506001600160a01b03831660009081526004602052604090205460ff16155b1561289157600f546001600160a01b0390811690841603612848576012546040805160c08101825260225481526023546020820152602454918101919091526025546060820152602654608082015260275460a08201526128439190612d4c565b612891565b6012546040805160c081018252601c548152601d54602080830191909152601e5492820192909252601f5460608201529054608082015260215460a08201526128919190612d4c565b600a5460019060009062010000900460ff16806128c657506001600160a01b03861660009081526004602052604090205460ff165b806128e957506001600160a01b03851660009081526004602052604090205460ff165b156128f357600091505b600f546001600160a01b039081169086160361290d575060015b61291a86868685856129ab565b505050505050565b600080600061292f612f3e565b909250905061293e8183613d3a565b9250505090565b61294d61384f565b6129588484846130c1565b905061296d818585612968612922565b6132ca565b608086015260608501526040840152602083015281526129958184612990612922565b6133bc565b60e084015260c083015260a08201529392505050565b60006129b8848484612945565b6001600160a01b03871660009081526005602052604090205490915060ff1615612a1a576001600160a01b038616600090815260026020526040902054612a00908590613d23565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526005602052604090205460ff1615612a7e576101008101516001600160a01b038616600090815260026020526040902054612a649190613ca5565b6001600160a01b0386166000908152600260205260409020555b80516001600160a01b038716600090815260016020526040902054612aa39190613d23565b6001600160a01b0380881660009081526001602090815260408083209490945584015191881681529190912054612ada9190613ca5565b6001600160a01b0386166000908152600160205260409081902091909155810151151580612b0d57506000816101200151115b15612b2557612b258160400151826101200151613417565b600081608001511180612b3d57506000816101600151115b15612be257612b55816080015182610160015161344c565b306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836101a00151846101c00151856101800151866101400151876101600151612bb29190613ca5565b612bbc9190613ca5565b612bc69190613ca5565b612bd09190613ca5565b60405190815260200160405180910390a35b600081606001511180612bfa57506000816101400151115b15612c1257612c1281606001518261014001516134c2565b60008160c001511180612c2a57506000816101a00151115b15612c4257612c428160c00151826101a001516134d7565b60008160a001511180612c5a57506000816101800151115b15612c7257612c728160a001518261018001516134ec565b60008160e001511180612c8a57506000816101c00151115b15612ca257612ca28160e00151826101c00151613501565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836101000151604051612cec91815260200190565b60405180910390a3505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600a805462ff0000191662010000179055608081015160a0820151606083015160208401516040850151600094939291612d8591613ca5565b612d8f9190613ca5565b612d999190613ca5565b612da39190613ca5565b612dae906002613e65565b9050600081836040015185612dc39190613e65565b612dcd9190613d3a565b90506000612ddb8286613d23565b905047612de782613516565b6000612df38247613d23565b90506000866040015186612e079190613d23565b612e119083613d3a565b90506000876040015182612e259190613e65565b90508015612e3757612e378682613668565b6020880151600090612e4a846002613e65565b612e549190613e65565b90508015612e7257601854612e72906001600160a01b031682613736565b6060890151600090612e85856002613e65565b612e8f9190613e65565b90508015612ead57601954612ead906001600160a01b031682613736565b60a08a0151600090612ec0866002613e65565b612eca9190613e65565b90508015612ee857601b54612ee8906001600160a01b031682613736565b60808b0151600090612efb876002613e65565b612f059190613e65565b90508015612f2357601a54612f23906001600160a01b031682613736565b5050600a805462ff0000191690555050505050505050505050565b6011546010546000918291825b60085481101561309057826001600060088481548110612f6d57612f6d613cf4565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612fd85750816002600060088481548110612fb157612fb1613cf4565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612fee57601154601054945094505050509091565b600160006008838154811061300557613005613cf4565b60009182526020808320909101546001600160a01b031683528201929092526040019020546130349084613d23565b9250600260006008838154811061304d5761304d613cf4565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461307c9083613d23565b91508061308881613d0a565b915050612f4b565b506010546011546130a19190613d3a565b8210156130b8576011546010549350935050509091565b90939092509050565b6130c961384f565b826130db576101008101849052610fde565b6131146040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b821561315957506040805160c08101825260225481526023546020820152602454918101919091526025546060820152602654608082015260275460a0820152613197565b506040805160c081018252601c548152601d54602080830191909152601e5492820192909252601f5460608201529054608082015260215460a08201525b80516064906131a69087613e65565b6131b09190613d3a565b61012083015260208101516064906131c89087613e65565b6131d29190613d3a565b61014083015260408101516064906131ea9087613e65565b6131f49190613d3a565b610160830152606081015160649061320c9087613e65565b6132169190613d3a565b610180830152608081015160649061322e9087613e65565b6132389190613d3a565b6101a083015260a08101516064906132509087613e65565b61325a9190613d3a565b6101c083018190526101a083015161018084015161016085015161014086015161012087015161328a908b613d23565b6132949190613d23565b61329e9190613d23565b6132a89190613d23565b6132b29190613d23565b6132bc9190613d23565b610100830152509392505050565b6000808080806132da8689613e65565b9450866132f2575083925060009150819050806133b1565b858961012001516133039190613e65565b9250858961014001516133169190613e65565b9150858961016001516133299190613e65565b90506000868a610180015161333e9190613e65565b90506000878b6101a001516133539190613e65565b90506000888c6101c001516133689190613e65565b905080828486886133798b8e613d23565b6133839190613d23565b61338d9190613d23565b6133979190613d23565b6133a19190613d23565b6133ab9190613d23565b96505050505b945094509450945094565b6000806000846133d45750600091508190508061340e565b838661018001516133e59190613e65565b925083866101a001516133f89190613e65565b915083866101c0015161340b9190613e65565b90505b93509350939050565b81601160008282546134299190613d23565b909155505060288054829190600090613443908490613ca5565b90915550505050565b80602860020160008282546134619190613ca5565b90915550503060009081526005602052604090205460ff16156134a357306000908152600260205260408120805483929061349d908490613ca5565b90915550505b3060009081526001602052604081208054849290613443908490613ca5565b80602860010160008282546134619190613ca5565b80602860040160008282546134619190613ca5565b80602860030160008282546134619190613ca5565b80602860050160008282546134619190613ca5565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061354b5761354b613cf4565b6001600160a01b03928316602091820292909201810191909152600e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156135a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135c89190613ead565b816001815181106135db576135db613cf4565b6001600160a01b039283166020918202929092010152600e546136019130911684611f4e565b600e5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061363a908590600090869030904290600401613eca565b600060405180830381600087803b15801561365457600080fd5b505af115801561291a573d6000803e3d6000fd5b600e546136809030906001600160a01b031684611f4e565b600e546001600160a01b031663f305d7198230856000806136a96000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015613711573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e609190613f3b565b804710156137865760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610c28565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146137d3576040519150601f19603f3d011682016040523d82523d6000602084013e6137d8565b606091505b5050905080610e165760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610c28565b604051806101e001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60008060008060008060c087890312156138de57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600060208083528351808285015260005b8181101561393557858101830151858201604001528201613919565b81811115613947576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611eff57600080fd5b803561397d8161395d565b919050565b6000806040838503121561399557600080fd5b82356139a08161395d565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b8015158114611eff57600080fd5b803561397d816139c4565b600080604083850312156139f057600080fd5b823567ffffffffffffffff80821115613a0857600080fd5b818501915085601f830112613a1c57600080fd5b8135602082821115613a3057613a306139ae565b8160051b604051601f19603f83011681018181108682111715613a5557613a556139ae565b604052928352818301935084810182019289841115613a7357600080fd5b948201945b83861015613a9857613a8986613972565b85529482019493820193613a78565b9650613aa790508782016139d2565b9450505050509250929050565b600060208284031215613ac657600080fd5b8135610fde8161395d565b600080600060608486031215613ae657600080fd5b8335613af18161395d565b92506020840135613b018161395d565b929592945050506040919091013590565b600060208284031215613b2457600080fd5b5035919050565b600060208284031215613b3d57600080fd5b8135610fde816139c4565b60008060408385031215613b5b57600080fd5b8235613b668161395d565b91506020830135613b768161395d565b809150509250929050565b60008060408385031215613b9457600080fd5b823591506020830135613b76816139c4565b60008060408385031215613bb957600080fd5b50508035926020909101359150565b60008060408385031215613bdb57600080fd5b8235613be68161395d565b91506020830135613b76816139c4565b60008060408385031215613c0957600080fd5b82356139a0816139c4565b60008060008060808587031215613c2a57600080fd5b8435613c358161395d565b93506020850135613c458161395d565b93969395505050506040820135916060013590565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115613cb857613cb8613c8f565b500190565b60208082526017908201527f54726164696e67206e6f7420656e61626c656420796574000000000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600060018201613d1c57613d1c613c8f565b5060010190565b600082821015613d3557613d35613c8f565b500390565b600082613d5757634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603160045260246000fd5b600181815b80851115613dad578160001904821115613d9357613d93613c8f565b80851615613da057918102915b93841c9390800290613d77565b509250929050565b600082613dc4575060016113f8565b81613dd1575060006113f8565b8160018114613de75760028114613df157613e0d565b60019150506113f8565b60ff841115613e0257613e02613c8f565b50506001821b6113f8565b5060208310610133831016604e8410600b8410161715613e30575081810a6113f8565b613e3a8383613d72565b8060001904821115613e4e57613e4e613c8f565b029392505050565b6000610fde60ff841683613db5565b6000816000190483118215151615613e7f57613e7f613c8f565b500290565b6000610fde8383613db5565b600060208284031215613ea257600080fd5b8151610fde816139c4565b600060208284031215613ebf57600080fd5b8151610fde8161395d565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613f1a5784516001600160a01b031683529383019391830191600101613ef5565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613f5057600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212209a3ca9b4a1b7d2813e7191e4555f53e92c1d6c0f4bfbf398e051e47e3e83682764736f6c634300080d00330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000000000000000000000000000000000000000003c

Deployed Bytecode

0x6080604052600436106103a65760003560e01c8063728f8eea116101e7578063b5c571451161010d578063e79d4160116100a0578063f2fde38b1161006f578063f2fde38b14610b73578063f66895a314610b93578063f6bc962414610bbe578063f887ea4014610bde57600080fd5b8063e79d416014610b04578063ea2f0b3714610b19578063ee36e35914610b39578063ee5a4e0714610b5357600080fd5b8063dd62ed3e116100dc578063dd62ed3e14610a68578063e042ad5814610aae578063e2f4560514610ace578063e517f2b914610ae457600080fd5b8063b5c57145146109f2578063d257b34f14610a12578063d2ce0db214610a32578063d8672e5114610a4857600080fd5b8063924de9b711610185578063a457c2d711610154578063a457c2d714610972578063a8aa1b3114610992578063a9059cbb146109b2578063aacebbe3146109d257600080fd5b8063924de9b7146108da57806395d89b41146108fa5780639ba5e4d5146109275780639e252f001461095257600080fd5b806388f82020116101c157806388f82020146108435780638da5cb5b1461087c5780638e2839ff1461089a5780638ea5220f146108ba57600080fd5b8063728f8eea1461079357806375f0a874146107eb5780637b2087691461082357600080fd5b80634549b039116102cc5780635bdbb0f91161026a5780636aa5b37f116102395780636aa5b37f146107295780636ddd17131461073f57806370a082311461075e578063715018a61461077e57600080fd5b80635bdbb0f9146106ad57806362695eae146106cd578063652e2f04146106fd57806366a88d961461071357600080fd5b806352390c02116102a657806352390c02146106145780635342acb41461063457806359759f611461066d5780635b24ea5e1461068d57600080fd5b80634549b039146105c55780634ada218b146105e5578063514cdaa1146105ff57600080fd5b80632d83811911610344578063395093511161031357806339509351146105455780633e65d4aa1461056557806340b28c2f14610585578063437823ec146105a557600080fd5b80632d838119146104c9578063313ce567146104e95780633685d41914610505578063379ba1d91461052557600080fd5b806313f97a8e1161038057806313f97a8e1461044a57806318160ddd1461046a5780631816467f1461048957806323b872dd146104a957600080fd5b806304d4c990146103b257806306fdde03146103d4578063095ea7b31461041a57600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506103d26103cd3660046138c5565b610bfe565b005b3480156103e057600080fd5b5060408051808201909152600b81526a2337b932bb32b926b7b7b760a91b60208201525b6040516104119190613908565b60405180910390f35b34801561042657600080fd5b5061043a610435366004613982565b610d26565b6040519015158152602001610411565b34801561045657600080fd5b506103d26104653660046139dd565b610d85565b34801561047657600080fd5b506010545b604051908152602001610411565b34801561049557600080fd5b506103d26104a4366004613ab4565b610e1b565b3480156104b557600080fd5b5061043a6104c4366004613ad1565b610e67565b3480156104d557600080fd5b5061047b6104e4366004613b12565b610f61565b3480156104f557600080fd5b5060405160098152602001610411565b34801561051157600080fd5b506103d2610520366004613ab4565b610fe5565b34801561053157600080fd5b506103d2610540366004613b2b565b61119b565b34801561055157600080fd5b5061043a610560366004613982565b6111f8565b34801561057157600080fd5b506103d2610580366004613ab4565b611278565b34801561059157600080fd5b506103d26105a0366004613b48565b6112c4565b3480156105b157600080fd5b506103d26105c0366004613ab4565b61131c565b3480156105d157600080fd5b5061047b6105e0366004613b81565b61136a565b3480156105f157600080fd5b50600a5461043a9060ff1681565b34801561060b57600080fd5b506103d26113fe565b34801561062057600080fd5b506103d261062f366004613ab4565b61156c565b34801561064057600080fd5b5061043a61064f366004613ab4565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561067957600080fd5b506103d2610688366004613ba6565b6116bf565b34801561069957600080fd5b506103d26106a8366004613bc8565b61171f565b3480156106b957600080fd5b506103d26106c83660046138c5565b611774565b3480156106d957600080fd5b5061043a6106e8366004613ab4565b60066020526000908152604090205460ff1681565b34801561070957600080fd5b5061047b60145481565b34801561071f57600080fd5b5061047b60155481565b34801561073557600080fd5b5061047b60135481565b34801561074b57600080fd5b50600a5461043a90610100900460ff1681565b34801561076a57600080fd5b5061047b610779366004613ab4565b611892565b34801561078a57600080fd5b506103d26118f1565b34801561079f57600080fd5b50601c54601d54601e54601f546020546021546107be95949392919086565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610411565b3480156107f757600080fd5b5060185461080b906001600160a01b031681565b6040516001600160a01b039091168152602001610411565b34801561082f57600080fd5b50601b5461080b906001600160a01b031681565b34801561084f57600080fd5b5061043a61085e366004613ab4565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561088857600080fd5b506000546001600160a01b031661080b565b3480156108a657600080fd5b506103d26108b53660046139dd565b611927565b3480156108c657600080fd5b5060195461080b906001600160a01b031681565b3480156108e657600080fd5b506103d26108f5366004613b2b565b6119b8565b34801561090657600080fd5b50604080518082019091526004815263464f4d4f60e01b6020820152610404565b34801561093357600080fd5b50602854602954602a54602b54602c54602d546107be95949392919086565b34801561095e57600080fd5b506103d261096d366004613b12565b6119fc565b34801561097e57600080fd5b5061043a61098d366004613982565b611aa3565b34801561099e57600080fd5b50600f5461080b906001600160a01b031681565b3480156109be57600080fd5b5061043a6109cd366004613982565b611b89565b3480156109de57600080fd5b506103d26109ed366004613ab4565b611bde565b3480156109fe57600080fd5b506103d2610a0d366004613bc8565b611c2a565b348015610a1e57600080fd5b506103d2610a2d366004613b12565b611c7f565b348015610a3e57600080fd5b5061047b600d5481565b348015610a5457600080fd5b506103d2610a63366004613b12565b611cc5565b348015610a7457600080fd5b5061047b610a83366004613b48565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610aba57600080fd5b50601a5461080b906001600160a01b031681565b348015610ada57600080fd5b5061047b60125481565b348015610af057600080fd5b506103d2610aff366004613bf6565b611d0b565b348015610b1057600080fd5b5060095461047b565b348015610b2557600080fd5b506103d2610b34366004613ab4565b611d57565b348015610b4557600080fd5b50600c5461043a9060ff1681565b348015610b5f57600080fd5b506103d2610b6e366004613c14565b611da2565b348015610b7f57600080fd5b506103d2610b8e366004613ab4565b611e67565b348015610b9f57600080fd5b506022546023546024546025546026546027546107be95949392919086565b348015610bca57600080fd5b506103d2610bd9366004613ab4565b611f02565b348015610bea57600080fd5b50600e5461080b906001600160a01b031681565b6000546001600160a01b03163314610c315760405162461bcd60e51b8152600401610c2890613c5a565b60405180910390fd5b601e81838587610c418a8c613ca5565b610c4b9190613ca5565b610c559190613ca5565b610c5f9190613ca5565b610c699190613ca5565b1115610caa5760405162461bcd60e51b815260206004820152601060248201526f496e76616c69642053657474696e677360801b6044820152606401610c28565b6040805160c0810182528781526020808201889052818301879052606082018690526080820185905260a0909101839052601c889055601d879055601e869055601f8590558390556021829055517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a1505050505050565b600a54600090339060ff1680610d5457506001600160a01b03811660009081526006602052604090205460ff165b610d705760405162461bcd60e51b8152600401610c2890613cbd565b610d7b338585611f4e565b5060019392505050565b6000546001600160a01b03163314610daf5760405162461bcd60e51b8152600401610c2890613c5a565b60005b8251811015610e16578160076000858481518110610dd257610dd2613cf4565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610e0e81613d0a565b915050610db2565b505050565b6000546001600160a01b03163314610e455760405162461bcd60e51b8152600401610c2890613c5a565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b600a54600090849060ff1680610e9557506001600160a01b03811660009081526006602052604090205460ff165b610eb15760405162461bcd60e51b8152600401610c2890613cbd565b610ebc858585612072565b6001600160a01b038516600090815260036020908152604080832033845290915290205483811015610f415760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c28565b610f558633610f508785613d23565b611f4e565b50600195945050505050565b6000601154821115610fc85760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c28565b6000610fd2612922565b9050610fde8184613d3a565b9392505050565b6000546001600160a01b0316331461100f5760405162461bcd60e51b8152600401610c2890613c5a565b6001600160a01b03811660009081526005602052604090205460ff166110775760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610c28565b60005b60085481101561119757816001600160a01b0316600882815481106110a1576110a1613cf4565b6000918252602090912001546001600160a01b03160361118557600880546110cb90600190613d23565b815481106110db576110db613cf4565b600091825260209091200154600880546001600160a01b03909216918390811061110757611107613cf4565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff19169055600880548061115f5761115f613d5c565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061118f81613d0a565b91505061107a565b5050565b6000546001600160a01b031633146111c55760405162461bcd60e51b8152600401610c2890613c5a565b600a805461ffff191661ff0019831515908116919091176101009091021790556016546111f29042613ca5565b60175550565b600a54600090339060ff168061122657506001600160a01b03811660009081526006602052604090205460ff165b6112425760405162461bcd60e51b8152600401610c2890613cbd565b3360008181526003602090815260408083206001600160a01b0389168452909152902054610d7b91908690610f50908790613ca5565b6000546001600160a01b031633146112a25760405162461bcd60e51b8152600401610c2890613c5a565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146112ee5760405162461bcd60e51b8152600401610c2890613c5a565b600e80546001600160a01b039384166001600160a01b031991821617909155600f8054929093169116179055565b6000546001600160a01b031633146113465760405162461bcd60e51b8152600401610c2890613c5a565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b60006010548311156113be5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c28565b816113dc5760006113d28460016000612945565b5191506113f89050565b60006113eb8460016000612945565b6020015191506113f89050565b92915050565b6000546001600160a01b031633146114285760405162461bcd60e51b8152600401610c2890613c5a565b42601754106114855760405162461bcd60e51b815260206004820152602360248201527f5761697420666f722074686520616e74692d736e6970652074696d6520746f20604482015262195b9960ea1b6064820152608401610c28565b60005b6009548110156115405760006114a06009600a613e56565b6114ab906045613e65565b6114db600984815481106114c1576114c1613cf4565b6000918252602090912001546001600160a01b0316611892565b6114e59190613d23565b905061152d600983815481106114fd576114fd613cf4565b6000918252602090912001546001600160a01b03166115246000546001600160a01b031690565b836000806129ab565b508061153881613d0a565b915050611488565b506040517f3e606f9c76d2d95df2edb01f77c6a6fc21f91cf130cd20aa0ef7370ce3d28deb90600090a1565b6000546001600160a01b031633146115965760405162461bcd60e51b8152600401610c2890613c5a565b6001600160a01b03811660009081526005602052604090205460ff16156115ff5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c28565b6001600160a01b03811660009081526001602052604090205415611659576001600160a01b03811660009081526001602052604090205461163f90610f61565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146116e95760405162461bcd60e51b8152600401610c2890613c5a565b6116f56009600a613e56565b6116ff9083613e65565b60135561170e6009600a613e56565b6117189082613e65565b6014555050565b6000546001600160a01b031633146117495760405162461bcd60e51b8152600401610c2890613c5a565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461179e5760405162461bcd60e51b8152600401610c2890613c5a565b6041818385876117ae8a8c613ca5565b6117b89190613ca5565b6117c29190613ca5565b6117cc9190613ca5565b6117d69190613ca5565b11156118175760405162461bcd60e51b815260206004820152601060248201526f496e76616c69642053657474696e677360801b6044820152606401610c28565b6040805160c08101825287815260208101879052808201869052606081018590526080810184905260a001829052602287905560238690556024859055602584905560268390556027829055517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a1505050505050565b6001600160a01b03811660009081526005602052604081205460ff16156118cf57506001600160a01b031660009081526002602052604090205490565b6001600160a01b0382166000908152600160205260409020546113f890610f61565b6000546001600160a01b0316331461191b5760405162461bcd60e51b8152600401610c2890613c5a565b6119256000612cfc565b565b6000546001600160a01b031633146119515760405162461bcd60e51b8152600401610c2890613c5a565b60005b8251811015610e1657816004600085848151811061197457611974613cf4565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806119b081613d0a565b915050611954565b6000546001600160a01b031633146119e25760405162461bcd60e51b8152600401610c2890613c5a565b600a80549115156101000261ff0019909216919091179055565b6000546001600160a01b03163314611a265760405162461bcd60e51b8152600401610c2890613c5a565b80471015611a765760405162461bcd60e51b815260206004820152601860248201527f496e73756666696369656e74204554482062616c616e636500000000000000006044820152606401610c28565b604051339082156108fc029083906000818181858888f19350505050158015611197573d6000803e3d6000fd5b600a54600090339060ff1680611ad157506001600160a01b03811660009081526006602052604090205460ff165b611aed5760405162461bcd60e51b8152600401610c2890613cbd565b3360009081526003602090815260408083206001600160a01b038816845290915290205483811015611b6f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c28565b611b7e3386610f508785613d23565b506001949350505050565b600a54600090339060ff1680611bb757506001600160a01b03811660009081526006602052604090205460ff165b611bd35760405162461bcd60e51b8152600401610c2890613cbd565b610d7b338585612072565b6000546001600160a01b03163314611c085760405162461bcd60e51b8152600401610c2890613c5a565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611c545760405162461bcd60e51b8152600401610c2890613c5a565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611ca95760405162461bcd60e51b8152600401610c2890613c5a565b611cb56009600a613e56565b611cbf9082613e65565b60125550565b6000546001600160a01b03163314611cef5760405162461bcd60e51b8152600401610c2890613c5a565b611cfb6009600a613e56565b611d059082613e65565b60155550565b6000546001600160a01b03163314611d355760405162461bcd60e51b8152600401610c2890613c5a565b611d40816001613e65565b600d5550600c805460ff1916911515919091179055565b6000546001600160a01b03163314611d815760405162461bcd60e51b8152600401610c2890613c5a565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611dcc5760405162461bcd60e51b8152600401610c2890613c5a565b6001600160a01b03841663a9059cbb84611de784600a613e84565b611df19086613e65565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611e3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e609190613e90565b5050505050565b6000546001600160a01b03163314611e915760405162461bcd60e51b8152600401610c2890613c5a565b6001600160a01b038116611ef65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c28565b611eff81612cfc565b50565b6000546001600160a01b03163314611f2c5760405162461bcd60e51b8152600401610c2890613c5a565b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611fb05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c28565b6001600160a01b0382166120115760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c28565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166120d65760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c28565b6001600160a01b0382166121385760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c28565b6000811161219a5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c28565b6121a383611892565b81111561220c5760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610c28565b6001600160a01b03831660009081526007602052604090205460ff1615801561224e57506001600160a01b03821660009081526007602052604090205460ff16155b61229a5760405162461bcd60e51b815260206004820181905260248201527f596f7520617265206120626f742c20736f20796f752063616e742073656c6c2e6044820152606401610c28565b6001600160a01b03831660009081526004602052604090205460ff161580156122dc57506001600160a01b03821660009081526004602052604090205460ff16155b1561232857600a5460ff166123285760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b6044820152606401610c28565b601754421080156123465750600f546001600160a01b038481169116145b156123d957600980546001810182556000919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319166001600160a01b0384161790556123a38230600019611f4e565b6123b18383836000806129ab565b6001600160a01b0382166000908152600760205260409020805460ff19166001179055505050565b600f546001600160a01b03848116911614801561240f57506001600160a01b03821660009081526004602052604090205460ff16155b80156124245750600a5462010000900460ff16155b156124e05760135481111561247b5760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61784275794c696d69740000006044820152606401610c28565b6015548161248884611892565b6124929190613ca5565b11156124e05760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610c28565b600f546001600160a01b0384811691161480159061251757506001600160a01b03821660009081526004602052604090205460ff16155b801561253c57506001600160a01b03831660009081526004602052604090205460ff16155b80156125515750600a5462010000900460ff16155b156126b4576014548111156125a85760405162461bcd60e51b815260206004820152601e60248201527f596f752061726520657863656564696e67206d617853656c6c4c696d697400006044820152606401610c28565b600f546001600160a01b0383811691161461262257601554816125ca84611892565b6125d49190613ca5565b11156126225760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610c28565b600c5460ff16156126b4576001600160a01b0383166000908152600b60205260408120546126509042613d23565b9050600d548110156126975760405162461bcd60e51b815260206004820152601060248201526f10dbdbdb191bdddb88195b98589b195960821b6044820152606401610c28565b506001600160a01b0383166000908152600b602052604090204290555b6126c06009600a613e56565b6126cb90600a613e65565b816126d585611892565b6126df9190613d23565b111580156126fb57506000546001600160a01b03848116911614155b156127425761270983611892565b816127166009600a613e56565b61272190600a613e65565b61272b9190613ca5565b6127359190613d23565b61273f9082613d23565b90505b600060125461275030611892565b600a54911115915062010000900460ff161580156127755750600a54610100900460ff165b801561277e5750805b80156127985750600f546001600160a01b03858116911614155b80156127bd57506001600160a01b03841660009081526004602052604090205460ff16155b80156127e257506001600160a01b03831660009081526004602052604090205460ff16155b1561289157600f546001600160a01b0390811690841603612848576012546040805160c08101825260225481526023546020820152602454918101919091526025546060820152602654608082015260275460a08201526128439190612d4c565b612891565b6012546040805160c081018252601c548152601d54602080830191909152601e5492820192909252601f5460608201529054608082015260215460a08201526128919190612d4c565b600a5460019060009062010000900460ff16806128c657506001600160a01b03861660009081526004602052604090205460ff165b806128e957506001600160a01b03851660009081526004602052604090205460ff165b156128f357600091505b600f546001600160a01b039081169086160361290d575060015b61291a86868685856129ab565b505050505050565b600080600061292f612f3e565b909250905061293e8183613d3a565b9250505090565b61294d61384f565b6129588484846130c1565b905061296d818585612968612922565b6132ca565b608086015260608501526040840152602083015281526129958184612990612922565b6133bc565b60e084015260c083015260a08201529392505050565b60006129b8848484612945565b6001600160a01b03871660009081526005602052604090205490915060ff1615612a1a576001600160a01b038616600090815260026020526040902054612a00908590613d23565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526005602052604090205460ff1615612a7e576101008101516001600160a01b038616600090815260026020526040902054612a649190613ca5565b6001600160a01b0386166000908152600260205260409020555b80516001600160a01b038716600090815260016020526040902054612aa39190613d23565b6001600160a01b0380881660009081526001602090815260408083209490945584015191881681529190912054612ada9190613ca5565b6001600160a01b0386166000908152600160205260409081902091909155810151151580612b0d57506000816101200151115b15612b2557612b258160400151826101200151613417565b600081608001511180612b3d57506000816101600151115b15612be257612b55816080015182610160015161344c565b306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836101a00151846101c00151856101800151866101400151876101600151612bb29190613ca5565b612bbc9190613ca5565b612bc69190613ca5565b612bd09190613ca5565b60405190815260200160405180910390a35b600081606001511180612bfa57506000816101400151115b15612c1257612c1281606001518261014001516134c2565b60008160c001511180612c2a57506000816101a00151115b15612c4257612c428160c00151826101a001516134d7565b60008160a001511180612c5a57506000816101800151115b15612c7257612c728160a001518261018001516134ec565b60008160e001511180612c8a57506000816101c00151115b15612ca257612ca28160e00151826101c00151613501565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836101000151604051612cec91815260200190565b60405180910390a3505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600a805462ff0000191662010000179055608081015160a0820151606083015160208401516040850151600094939291612d8591613ca5565b612d8f9190613ca5565b612d999190613ca5565b612da39190613ca5565b612dae906002613e65565b9050600081836040015185612dc39190613e65565b612dcd9190613d3a565b90506000612ddb8286613d23565b905047612de782613516565b6000612df38247613d23565b90506000866040015186612e079190613d23565b612e119083613d3a565b90506000876040015182612e259190613e65565b90508015612e3757612e378682613668565b6020880151600090612e4a846002613e65565b612e549190613e65565b90508015612e7257601854612e72906001600160a01b031682613736565b6060890151600090612e85856002613e65565b612e8f9190613e65565b90508015612ead57601954612ead906001600160a01b031682613736565b60a08a0151600090612ec0866002613e65565b612eca9190613e65565b90508015612ee857601b54612ee8906001600160a01b031682613736565b60808b0151600090612efb876002613e65565b612f059190613e65565b90508015612f2357601a54612f23906001600160a01b031682613736565b5050600a805462ff0000191690555050505050505050505050565b6011546010546000918291825b60085481101561309057826001600060088481548110612f6d57612f6d613cf4565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612fd85750816002600060088481548110612fb157612fb1613cf4565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612fee57601154601054945094505050509091565b600160006008838154811061300557613005613cf4565b60009182526020808320909101546001600160a01b031683528201929092526040019020546130349084613d23565b9250600260006008838154811061304d5761304d613cf4565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461307c9083613d23565b91508061308881613d0a565b915050612f4b565b506010546011546130a19190613d3a565b8210156130b8576011546010549350935050509091565b90939092509050565b6130c961384f565b826130db576101008101849052610fde565b6131146040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b821561315957506040805160c08101825260225481526023546020820152602454918101919091526025546060820152602654608082015260275460a0820152613197565b506040805160c081018252601c548152601d54602080830191909152601e5492820192909252601f5460608201529054608082015260215460a08201525b80516064906131a69087613e65565b6131b09190613d3a565b61012083015260208101516064906131c89087613e65565b6131d29190613d3a565b61014083015260408101516064906131ea9087613e65565b6131f49190613d3a565b610160830152606081015160649061320c9087613e65565b6132169190613d3a565b610180830152608081015160649061322e9087613e65565b6132389190613d3a565b6101a083015260a08101516064906132509087613e65565b61325a9190613d3a565b6101c083018190526101a083015161018084015161016085015161014086015161012087015161328a908b613d23565b6132949190613d23565b61329e9190613d23565b6132a89190613d23565b6132b29190613d23565b6132bc9190613d23565b610100830152509392505050565b6000808080806132da8689613e65565b9450866132f2575083925060009150819050806133b1565b858961012001516133039190613e65565b9250858961014001516133169190613e65565b9150858961016001516133299190613e65565b90506000868a610180015161333e9190613e65565b90506000878b6101a001516133539190613e65565b90506000888c6101c001516133689190613e65565b905080828486886133798b8e613d23565b6133839190613d23565b61338d9190613d23565b6133979190613d23565b6133a19190613d23565b6133ab9190613d23565b96505050505b945094509450945094565b6000806000846133d45750600091508190508061340e565b838661018001516133e59190613e65565b925083866101a001516133f89190613e65565b915083866101c0015161340b9190613e65565b90505b93509350939050565b81601160008282546134299190613d23565b909155505060288054829190600090613443908490613ca5565b90915550505050565b80602860020160008282546134619190613ca5565b90915550503060009081526005602052604090205460ff16156134a357306000908152600260205260408120805483929061349d908490613ca5565b90915550505b3060009081526001602052604081208054849290613443908490613ca5565b80602860010160008282546134619190613ca5565b80602860040160008282546134619190613ca5565b80602860030160008282546134619190613ca5565b80602860050160008282546134619190613ca5565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061354b5761354b613cf4565b6001600160a01b03928316602091820292909201810191909152600e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156135a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135c89190613ead565b816001815181106135db576135db613cf4565b6001600160a01b039283166020918202929092010152600e546136019130911684611f4e565b600e5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061363a908590600090869030904290600401613eca565b600060405180830381600087803b15801561365457600080fd5b505af115801561291a573d6000803e3d6000fd5b600e546136809030906001600160a01b031684611f4e565b600e546001600160a01b031663f305d7198230856000806136a96000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015613711573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e609190613f3b565b804710156137865760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610c28565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146137d3576040519150601f19603f3d011682016040523d82523d6000602084013e6137d8565b606091505b5050905080610e165760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610c28565b604051806101e001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60008060008060008060c087890312156138de57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600060208083528351808285015260005b8181101561393557858101830151858201604001528201613919565b81811115613947576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611eff57600080fd5b803561397d8161395d565b919050565b6000806040838503121561399557600080fd5b82356139a08161395d565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b8015158114611eff57600080fd5b803561397d816139c4565b600080604083850312156139f057600080fd5b823567ffffffffffffffff80821115613a0857600080fd5b818501915085601f830112613a1c57600080fd5b8135602082821115613a3057613a306139ae565b8160051b604051601f19603f83011681018181108682111715613a5557613a556139ae565b604052928352818301935084810182019289841115613a7357600080fd5b948201945b83861015613a9857613a8986613972565b85529482019493820193613a78565b9650613aa790508782016139d2565b9450505050509250929050565b600060208284031215613ac657600080fd5b8135610fde8161395d565b600080600060608486031215613ae657600080fd5b8335613af18161395d565b92506020840135613b018161395d565b929592945050506040919091013590565b600060208284031215613b2457600080fd5b5035919050565b600060208284031215613b3d57600080fd5b8135610fde816139c4565b60008060408385031215613b5b57600080fd5b8235613b668161395d565b91506020830135613b768161395d565b809150509250929050565b60008060408385031215613b9457600080fd5b823591506020830135613b76816139c4565b60008060408385031215613bb957600080fd5b50508035926020909101359150565b60008060408385031215613bdb57600080fd5b8235613be68161395d565b91506020830135613b76816139c4565b60008060408385031215613c0957600080fd5b82356139a0816139c4565b60008060008060808587031215613c2a57600080fd5b8435613c358161395d565b93506020850135613c458161395d565b93969395505050506040820135916060013590565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115613cb857613cb8613c8f565b500190565b60208082526017908201527f54726164696e67206e6f7420656e61626c656420796574000000000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600060018201613d1c57613d1c613c8f565b5060010190565b600082821015613d3557613d35613c8f565b500390565b600082613d5757634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603160045260246000fd5b600181815b80851115613dad578160001904821115613d9357613d93613c8f565b80851615613da057918102915b93841c9390800290613d77565b509250929050565b600082613dc4575060016113f8565b81613dd1575060006113f8565b8160018114613de75760028114613df157613e0d565b60019150506113f8565b60ff841115613e0257613e02613c8f565b50506001821b6113f8565b5060208310610133831016604e8410600b8410161715613e30575081810a6113f8565b613e3a8383613d72565b8060001904821115613e4e57613e4e613c8f565b029392505050565b6000610fde60ff841683613db5565b6000816000190483118215151615613e7f57613e7f613c8f565b500290565b6000610fde8383613db5565b600060208284031215613ea257600080fd5b8151610fde816139c4565b600060208284031215613ebf57600080fd5b8151610fde8161395d565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613f1a5784516001600160a01b031683529383019391830191600101613ef5565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613f5057600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212209a3ca9b4a1b7d2813e7191e4555f53e92c1d6c0f4bfbf398e051e47e3e83682764736f6c634300080d0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000000000000000000000000000000000000000003c

-----Decoded View---------------
Arg [0] : routerAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : antiSnipeSeconds (uint256): 60

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 000000000000000000000000000000000000000000000000000000000000003c


Deployed Bytecode Sourcemap

3362:24405:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12268:352;;;;;;;;;;-1:-1:-1;12268:352:0;;;;;:::i;:::-;;:::i;:::-;;7647:83;;;;;;;;;;-1:-1:-1;7717:5:0;;;;;;;;;;;;-1:-1:-1;;;7717:5:0;;;;7647:83;;;;;;;:::i;:::-;;;;;;;;8407:181;;;;;;;;;;-1:-1:-1;8407:181:0;;;;;:::i;:::-;;:::i;:::-;;;1904:14:1;;1897:22;1879:41;;1867:2;1852:18;8407:181:0;1739:187:1;26469:207:0;;;;;;;;;;-1:-1:-1;26469:207:0;;;;;:::i;:::-;;:::i;7943:95::-;;;;;;;;;;-1:-1:-1;8023:7:0;;7943:95;;;3661:25:1;;;3649:2;3634:18;7943:95:0;3515:177:1;25558:102:0;;;;;;;;;;-1:-1:-1;25558:102:0;;;;;:::i;:::-;;:::i;8596:430::-;;;;;;;;;;-1:-1:-1;8596:430:0;;;;;:::i;:::-;;:::i;10754:248::-;;;;;;;;;;-1:-1:-1;10754:248:0;;;;;:::i;:::-;;:::i;7829:83::-;;;;;;;;;;-1:-1:-1;7829:83:0;;4430:1;4737:36:1;;4725:2;4710:18;7829:83:0;4595:184:1;11417:475:0;;;;;;;;;;-1:-1:-1;11417:475:0;;;;;:::i;:::-;;:::i;10475:171::-;;;;;;;;;;-1:-1:-1;10475:171:0;;;;;:::i;:::-;;:::i;9034:228::-;;;;;;;;;;-1:-1:-1;9034:228:0;;;;;:::i;:::-;;:::i;25672:110::-;;;;;;;;;;-1:-1:-1;25672:110:0;;;;;:::i;:::-;;:::i;27155:154::-;;;;;;;;;;-1:-1:-1;27155:154:0;;;;;:::i;:::-;;:::i;11900:111::-;;;;;;;;;;-1:-1:-1;11900:111:0;;;;;:::i;:::-;;:::i;9995:470::-;;;;;;;;;;-1:-1:-1;9995:470:0;;;;;:::i;:::-;;:::i;3928:26::-;;;;;;;;;;-1:-1:-1;3928:26:0;;;;;;;;22241:384;;;;;;;;;;;;;:::i;11076:333::-;;;;;;;;;;-1:-1:-1;11076:333:0;;;;;:::i;:::-;;:::i;12137:123::-;;;;;;;;;;-1:-1:-1;12137:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;12225:27:0;12201:4;12225:27;;;:18;:27;;;;;;;;;12137:123;26829:183;;;;;;;;;;-1:-1:-1;26829:183:0;;;;;:::i;:::-;;:::i;26331:126::-;;;;;;;;;;-1:-1:-1;26331:126:0;;;;;:::i;:::-;;:::i;12632:360::-;;;;;;;;;;-1:-1:-1;12632:360:0;;;;;:::i;:::-;;:::i;3747:48::-;;;;;;;;;;-1:-1:-1;3747:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4724:51;;;;;;;;;;;;;;;;4782:53;;;;;;;;;;;;;;;;4667:50;;;;;;;;;;;;;;;;3961:23;;;;;;;;;;-1:-1:-1;3961:23:0;;;;;;;;;;;8046:198;;;;;;;;;;-1:-1:-1;8046:198:0;;;;;:::i;:::-;;:::i;1791:94::-;;;;;;;;;;;;;:::i;5522:45::-;;;;;;;;;;-1:-1:-1;5522:45:0;;;;;;;;;;;;;;;;;;;;;;;;;6664:25:1;;;6720:2;6705:18;;6698:34;;;;6748:18;;;6741:34;;;;6806:2;6791:18;;6784:34;6849:3;6834:19;;6827:35;6893:3;6878:19;;6871:35;6651:3;6636:19;5522:45:0;6377:535:1;4912:74:0;;;;;;;;;;-1:-1:-1;4912:74:0;;;;-1:-1:-1;;;;;4912:74:0;;;;;;-1:-1:-1;;;;;7081:32:1;;;7063:51;;7051:2;7036:18;4912:74:0;6917:203:1;5152:73:0;;;;;;;;;;-1:-1:-1;5152:73:0;;;;-1:-1:-1;;;;;5152:73:0;;;9867:120;;;;;;;;;;-1:-1:-1;9867:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;9959:20:0;9935:4;9959:20;;;:11;:20;;;;;;;;;9867:120;1568:87;;;;;;;;;;-1:-1:-1;1614:7:0;1641:6;-1:-1:-1;;;;;1641:6:0;1568:87;;25215:209;;;;;;;;;;-1:-1:-1;25215:209:0;;;;;:::i;:::-;;:::i;4993:69::-;;;;;;;;;;-1:-1:-1;4993:69:0;;;;-1:-1:-1;;;;;4993:69:0;;;26218:101;;;;;;;;;;-1:-1:-1;26218:101:0;;;;;:::i;:::-;;:::i;7736:87::-;;;;;;;;;;-1:-1:-1;7808:7:0;;;;;;;;;;;;-1:-1:-1;;;7808:7:0;;;;7736:87;;5831:36;;;;;;;;;;-1:-1:-1;5831:36:0;;;;;;;;;;;;;;;;;;;;;27321:196;;;;;;;;;;-1:-1:-1;27321:196:0;;;;;:::i;:::-;;:::i;9270:390::-;;;;;;;;;;-1:-1:-1;9270:390:0;;;;;:::i;:::-;;:::i;4367:19::-;;;;;;;;;;-1:-1:-1;4367:19:0;;;;-1:-1:-1;;;;;4367:19:0;;;9672:187;;;;;;;;;;-1:-1:-1;9672:187:0;;;;;:::i;:::-;;:::i;25432:114::-;;;;;;;;;;-1:-1:-1;25432:114:0;;;;;:::i;:::-;;:::i;26688:129::-;;;;;;;;;;-1:-1:-1;26688:129:0;;;;;:::i;:::-;;:::i;26080:130::-;;;;;;;;;;-1:-1:-1;26080:130:0;;;;;:::i;:::-;;:::i;4136:40::-;;;;;;;;;;;;;;;;27024:123;;;;;;;;;;-1:-1:-1;27024:123:0;;;;;:::i;:::-;;:::i;8256:143::-;;;;;;;;;;-1:-1:-1;8256:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;8364:18:0;;;8337:7;8364:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8256:143;5070:75;;;;;;;;;;-1:-1:-1;5070:75:0;;;;-1:-1:-1;;;;;5070:75:0;;;4603:57;;;;;;;;;;;;;;;;25920:152;;;;;;;;;;-1:-1:-1;25920:152:0;;;;;:::i;:::-;;:::i;10654:92::-;;;;;;;;;;-1:-1:-1;10723:8:0;:15;10654:92;;12019:110;;;;;;;;;;-1:-1:-1;12019:110:0;;;;;:::i;:::-;;:::i;4094:35::-;;;;;;;;;;-1:-1:-1;4094:35:0;;;;;;;;27529:193;;;;;;;;;;-1:-1:-1;27529:193:0;;;;;:::i;:::-;;:::i;1893:192::-;;;;;;;;;;-1:-1:-1;1893:192:0;;;;;:::i;:::-;;:::i;5574:49::-;;;;;;;;;;-1:-1:-1;5574:49:0;;;;;;;;;;;;;;;;;;;;;25794:114;;;;;;;;;;-1:-1:-1;25794:114:0;;;;;:::i;:::-;;:::i;4339:21::-;;;;;;;;;;-1:-1:-1;4339:21:0;;;;-1:-1:-1;;;;;4339:21:0;;;12268:352;1614:7;1641:6;-1:-1:-1;;;;;1641:6:0;1069:10;1703:23;1695:68;;;;-1:-1:-1;;;1695:68:0;;;;;;;:::i;:::-;;;;;;;;;12483:2:::1;12471:8:::0;12460:10;12455:4;12444:10;12428:15:::1;12433:10:::0;12428:4;:15:::1;:::i;:::-;:26;;;;:::i;:::-;:31;;;;:::i;:::-;:42;;;;:::i;:::-;:51;;;;:::i;:::-;:57;;12420:86;;;::::0;-1:-1:-1;;;12420:86:0;;9020:2:1;12420:86:0::1;::::0;::::1;9002:21:1::0;9059:2;9039:18;;;9032:30;-1:-1:-1;;;9078:18:1;;;9071:46;9134:18;;12420:86:0::1;8818:340:1::0;12420:86:0::1;12525:58;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12517:5:::1;:66:::0;;;;;;;;;;;;;;;;;;;;;;12599:13;::::1;::::0;-1:-1:-1;;12599:13:0::1;12268:352:::0;;;;;;:::o;8407:181::-;4241:14;;8502:4;;8482:10;;4241:14;;;:42;;-1:-1:-1;;;;;;4259:24:0;;;;;;:15;:24;;;;;;;;4241:42;4233:78;;;;-1:-1:-1;;;4233:78:0;;;;;;;:::i;:::-;8519:39:::1;1069:10:::0;8542:7:::1;8551:6;8519:8;:39::i;:::-;-1:-1:-1::0;8576:4:0::1;::::0;8407:181;-1:-1:-1;;;8407:181:0:o;26469:207::-;1614:7;1641:6;-1:-1:-1;;;;;1641:6:0;1069:10;1703:23;1695:68;;;;-1:-1:-1;;;1695:68:0;;;;;;;:::i;:::-;26568:9:::1;26564:105;26586:8;:15;26582:1;:19;26564:105;;;26652:5;26622:14;:27;26637:8;26646:1;26637:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;26622:27:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;26622:27:0;:35;;-1:-1:-1;;26622:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26603:3;::::1;::::0;::::1;:::i;:::-;;;;26564:105;;;;26469:207:::0;;:::o;25558:102::-;1614:7;1641:6;-1:-1:-1;;;;;1641:6:0;1069:10;1703:23;1695:68;;;;-1:-1:-1;;;1695:68:0;;;;;;;:::i;:::-;25631:9:::1;:21:::0;;-1:-1:-1;;;;;;25631:21:0::1;-1:-1:-1::0;;;;;25631:21:0;;;::::1;::::0;;;::::1;::::0;;25558:102::o;8596:430::-;4241:14;;8710:4;;8693:6;;4241:14;;;:42;;-1:-1:-1;;;;;;4259:24:0;;;;;;:15;:24;;;;;;;;4241:42;4233:78;;;;-1:-1:-1;;;4233:78:0;;;;;;;:::i;:::-;8727:36:::1;8737:6;8745:9;8756:6;8727:9;:36::i;:::-;-1:-1:-1::0;;;;;8803:19:0;::::1;8776:24;8803:19:::0;;;:11:::1;:19;::::0;;;;;;;1069:10;8803:33;;;;;;;;8855:26;;::::1;;8847:79;;;::::0;-1:-1:-1;;;8847:79:0;;9989:2:1;8847:79:0::1;::::0;::::1;9971:21:1::0;10028:2;10008:18;;;10001:30;10067:34;10047:18;;;10040:62;-1:-1:-1;;;10118:18:1;;;10111:38;10166:19;;8847:79:0::1;9787:404:1::0;8847:79:0::1;8937:57;8946:6:::0;1069:10;8968:25:::1;8987:6:::0;8968:16;:25:::1;:::i;:::-;8937:8;:57::i;:::-;-1:-1:-1::0;9014:4:0::1;::::0;8596:430;-1:-1:-1;;;;;8596:430:0:o;10754:248::-;10820:7;10859;;10848;:18;;10840:73;;;;-1:-1:-1;;;10840:73:0;;10528:2:1;10840:73:0;;;10510:21:1;10567:2;10547:18;;;10540:30;10606:34;10586:18;;;10579:62;-1:-1:-1;;;10657:18:1;;;10650:40;10707:19;;10840:73:0;10326:406:1;10840:73:0;10924:19;10947:10;:8;:10::i;:::-;10924:33;-1:-1:-1;10975:19:0;10924:33;10975:7;:19;:::i;:::-;10968:26;10754:248;-1:-1:-1;;;10754:248:0:o;11417:475::-;1614:7;1641:6;-1:-1:-1;;;;;1641:6:0;1069:10;1703:23;1695:68;;;;-1:-1:-1;;;1695:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11499:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;11491:56;;;::::0;-1:-1:-1;;;11491:56:0;;11161:2:1;11491:56:0::1;::::0;::::1;11143:21:1::0;11200:2;11180:18;;;11173:30;11239:25;11219:18;;;11212:53;11282:18;;11491:56:0::1;10959:347:1::0;11491:56:0::1;11563:9;11558:327;11582:9;:16:::0;11578:20;::::1;11558:327;;;11640:7;-1:-1:-1::0;;;;;11624:23:0::1;:9;11634:1;11624:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;11624:12:0::1;:23:::0;11620:254:::1;;11683:9;11693:16:::0;;:20:::1;::::0;11712:1:::1;::::0;11693:20:::1;:::i;:::-;11683:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;11668:9:::1;:12:::0;;-1:-1:-1;;;;;11683:31:0;;::::1;::::0;11678:1;;11668:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;11668:46:0::1;-1:-1:-1::0;;;;;11668:46:0;;::::1;;::::0;;11733:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;11772:11:::1;:20:::0;;;;:28;;-1:-1:-1;;11772:28:0::1;::::0;;11819:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;11819:15:0;;;;;-1:-1:-1;;;;;;11819:15:0::1;::::0;;;;;11558:327:::1;11417:475:::0;:::o;11620:254::-:1;11600:3:::0;::::1;::::0;::::1;:::i;:::-;;;;11558:327;;;;11417:475:::0;:::o;10475:171::-;1614:7;1641:6;-1:-1:-1;;;;;1641:6:0;1069:10;1703:23;1695:68;;;;-1:-1:-1;;;1695:68:0;;;;;;;:::i;:::-;10542:14:::1;:22:::0;;-1:-1:-1;;10575:19:0;-1:-1:-1;;10542:22:0;::::1;;10575:19:::0;;;;;;;10542:22:::1;10575:19:::0;;::::1;;::::0;;10632:6:::1;::::0;10614:24:::1;::::0;:15:::1;:24;:::i;:::-;10605:6;:33:::0;-1:-1:-1;10475:171:0:o;9034:228::-;4241:14;;9135:4;;9114:10;;4241:14;;;:42;;-1:-1:-1;;;;;;4259:24:0;;;;;;:15;:24;;;;;;;;4241:42;4233:78;;;;-1:-1:-1;;;4233:78:0;;;;;;;:::i;:::-;1069:10;9184:25:::1;::::0;;;:11:::1;:25;::::0;;;;;;;-1:-1:-1;;;;;9184:34:0;::::1;::::0;;;;;;;;9152:80:::1;::::0;1069:10;9175:7;;9184:47:::1;::::0;9221:10;;9184:47:::1;:::i;25672:110::-:0;1614:7;1641:6;-1:-1:-1;;;;;1641:6:0;1069:10;1703:23;1695:68;;;;-1:-1:-1;;;1695:68:0;;;;;;;:::i;:::-;25749:13:::1;:25:::0;;-1:-1:-1;;;;;;25749:25:0::1;-1:-1:-1::0;;;;;25749:25:0;;;::::1;::::0;;;::::1;::::0;;25672:110::o;27155:154::-;1614:7;1641:6;-1:-1:-1;;;;;1641:6:0;1069:10;1703:23;1695:68;;;;-1:-1:-1;;;1695:68:0;;;;;;;:::i;:::-;27249:6:::1;:27:::0;;-1:-1:-1;;;;;27249:27:0;;::::1;-1:-1:-1::0;;;;;;27249:27:0;;::::1;;::::0;;;27287:4:::1;:14:::0;;;;;::::1;::::0;::::1;;::::0;;27155:154::o;11900:111::-;1614:7;1641:6;-1:-1:-1;;;;;1641:6:0;1069:10;1703:23;1695:68;;;;-1:-1:-1;;;1695:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11969:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;11969:34:0::1;11999:4;11969:34;::::0;;11900:111::o;9995:470::-;10085:7;10124;;10113;:18;;10105:62;;;;-1:-1:-1;;;10105:62:0;;11645:2:1;10105:62:0;;;11627:21:1;11684:2;11664:18;;;11657:30;11723:33;11703:18;;;11696:61;11774:18;;10105:62:0;11443:355:1;10105:62:0;10183:17;10178:280;;10217:28;10248:32;10259:7;10268:4;10274:5;10248:10;:32::i;:::-;10302:9;;-1:-1:-1;10295:16:0;;-1:-1:-1;10295:16:0;10178:280;10344:28;10375:32;10386:7;10395:4;10401:5;10375:10;:32::i;:::-;10429:17;;;;-1:-1:-1;10422:24:0;;-1:-1:-1;10422:24:0;10178:280;9995:470;;;;:::o;22241:384::-;1614:7;1641:6;-1:-1:-1;;;;;1641:6:0;1069:10;1703:23;1695:68;;;;-1:-1:-1;;;1695:68:0;;;;;;;:::i;:::-;22316:15:::1;22307:6;;:24;22299:72;;;::::0;-1:-1:-1;;;22299:72:0;;12005:2:1;22299:72:0::1;::::0;::::1;11987:21:1::0;12044:2;12024:18;;;12017:30;12083:34;12063:18;;;12056:62;-1:-1:-1;;;12134:18:1;;;12127:33;12177:19;;22299:72:0::1;11803:399:1::0;22299:72:0::1;22386:9;22382:199;22405:8;:15:::0;22401:19;::::1;22382:199;;;22441:11;22485:14;4430:1:::0;22485:2:::1;:14;:::i;:::-;22480:19;::::0;:2:::1;:19;:::i;:::-;22455:22;22465:8;22474:1;22465:11;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;22465:11:0::1;22455:9;:22::i;:::-;:44;;;;:::i;:::-;22441:58;;22514:55;22529:8;22538:1;22529:11;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;22529:11:0::1;22542:7;1614::::0;1641:6;-1:-1:-1;;;;;1641:6:0;;1568:87;22542:7:::1;22551:3;22556:5;22563::::0;22514:14:::1;:55::i;:::-;-1:-1:-1::0;22422:3:0;::::1;::::0;::::1;:::i;:::-;;;;22382:199;;;-1:-1:-1::0;22596:21:0::1;::::0;::::1;::::0;;;::::1;22241:384::o:0;11076:333::-;1614:7;1641:6;-1:-1:-1;;;;;1641:6:0;1069:10;1703:23;1695:68;;;;-1:-1:-1;;;1695:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11159:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;11158:21;11150:61;;;::::0;-1:-1:-1;;;11150:61:0;;13965:2:1;11150:61:0::1;::::0;::::1;13947:21:1::0;14004:2;13984:18;;;13977:30;14043:29;14023:18;;;14016:57;14090:18;;11150:61:0::1;13763:351:1::0;11150:61:0::1;-1:-1:-1::0;;;;;11225:16:0;::::1;11244:1;11225:16:::0;;;:7:::1;:16;::::0;;;;;:20;11222:108:::1;;-1:-1:-1::0;;;;;11301:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;11281:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;11262:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;11222:108:::1;-1:-1:-1::0;;;;;11340:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;11340:27:0::1;11363:4;11340:27:::0;;::::1;::::0;;;11378:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;11378:23:0::1;::::0;;::::1;::::0;;11076:333::o;26829:183::-;1614:7;1641:6;-1:-1:-1;;;;;1641:6:0;1069:10;1703:23;1695:68;;;;-1:-1:-1;;;1695:68:0;;;;;;;:::i;:::-;26940:14:::1;4430:1:::0;26940:2:::1;:14;:::i;:::-;26931:23;::::0;:6;:23:::1;:::i;:::-;26917:11;:37:::0;26990:14:::1;4430:1:::0;26990:2:::1;:14;:::i;:::-;26980:24;::::0;:7;:24:::1;:::i;:::-;26965:12;:39:::0;-1:-1:-1;;26829:183:0:o;26331:126::-;1614:7;1641:6;-1:-1:-1;;;;;1641:6:0;1069:10;1703:23;1695:68;;;;-1:-1:-1;;;1695:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26418:23:0;;;::::1;;::::0;;;:14:::1;:23;::::0;;;;:31;;-1:-1:-1;;26418:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26331:126::o;12632:360::-;1614:7;1641:6;-1:-1:-1;;;;;1641:6:0;1069:10;1703:23;1695:68;;;;-1:-1:-1;;;1695:68:0;;;;;;;:::i;:::-;12851:2:::1;12839:8:::0;12828:10;12823:4;12812:10;12796:15:::1;12801:10:::0;12796:4;:15:::1;:::i;:::-;:26;;;;:::i;:::-;:31;;;;:::i;:::-;:42;;;;:::i;:::-;:51;;;;:::i;:::-;:57;;12788:86;;;::::0;-1:-1:-1;;;12788:86:0;;9020:2:1;12788:86:0::1;::::0;::::1;9002:21:1::0;9059:2;9039:18;;;9032:30;-1:-1:-1;;;9078:18:1;;;9071:46;9134:18;;12788:86:0::1;8818:340:1::0;12788:86:0::1;12897:58;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;12885:9:::1;:70:::0;;;;;;;;;;;;;;;;;;;;;;;12971:13;::::1;::::0;-1:-1:-1;;12971:13:0::1;12632:360:::0;;;;;;:::o;8046:198::-;-1:-1:-1;;;;;8136:20:0;;8112:7;8136:20;;;:11;:20;;;;;;;;8132:49;;;-1:-1:-1;;;;;;8165:16:0;;;;;:7;:16;;;;;;;8046:198::o;8132:49::-;-1:-1:-1;;;;;8219:16:0;;;;;;:7;:16;;;;;;8199:37;;:19;:37::i;1791:94::-;1614:7;1641:6;-1:-1:-1;;;;;1641:6:0;1069:10;1703:23;1695:68;;;;-1:-1:-1;;;1695:68:0;;;;;;;:::i;:::-;1856:21:::1;1874:1;1856:9;:21::i;:::-;1791:94::o:0;25215:209::-;1614:7;1641:6;-1:-1:-1;;;;;1641:6:0;1069:10;1703:23;1695:68;;;;-1:-1:-1;;;1695:68:0;;;;;;;:::i;:::-;25311:9:::1;25307:110;25330:8;:15;25326:1;:19;25307:110;;;25400:5;25366:18;:31;25385:8;25394:1;25385:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;25366:31:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;25366:31:0;:39;;-1:-1:-1;;25366:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25347:3;::::1;::::0;::::1;:::i;:::-;;;;25307:110;;26218:101:::0;1614:7;1641:6;-1:-1:-1;;;;;1641:6:0;1069:10;1703:23;1695:68;;;;-1:-1:-1;;;1695:68:0;;;;;;;:::i;:::-;26289:11:::1;:22:::0;;;::::1;;;;-1:-1:-1::0;;26289:22:0;;::::1;::::0;;;::::1;::::0;;26218:101::o;27321:196::-;1614:7;1641:6;-1:-1:-1;;;;;1641:6:0;1069:10;1703:23;1695:68;;;;-1:-1:-1;;;1695:68:0;;;;;;;:::i;:::-;27421:9:::1;27396:21;:34;;27388:71;;;::::0;-1:-1:-1;;;27388:71:0;;14321:2:1;27388:71:0::1;::::0;::::1;14303:21:1::0;14360:2;14340:18;;;14333:30;14399:26;14379:18;;;14372:54;14443:18;;27388:71:0::1;14119:348:1::0;27388:71:0::1;27470:39;::::0;27478:10:::1;::::0;27470:39;::::1;;;::::0;27499:9;;27470:39:::1;::::0;;;27499:9;27478:10;27470:39;::::1;;;;;;;;;;;;;::::0;::::1;;;;9270:390:::0;4241:14;;9376:4;;9355:10;;4241:14;;;:42;;-1:-1:-1;;;;;;4259:24:0;;;;;;:15;:24;;;;;;;;4241:42;4233:78;;;;-1:-1:-1;;;4233:78:0;;;;;;;:::i;:::-;1069:10;9393:24:::1;9420:25:::0;;;:11:::1;:25;::::0;;;;;;;-1:-1:-1;;;;;9420:34:0;::::1;::::0;;;;;;;;9473:35;;::::1;;9465:85;;;::::0;-1:-1:-1;;;9465:85:0;;14674:2:1;9465:85:0::1;::::0;::::1;14656:21:1::0;14713:2;14693:18;;;14686:30;14752:34;14732:18;;;14725:62;-1:-1:-1;;;14803:18:1;;;14796:35;14848:19;;9465:85:0::1;14472:401:1::0;9465:85:0::1;9561:67;1069:10:::0;9584:7;9593:34:::1;9612:15:::0;9593:16;:34:::1;:::i;9561:67::-;-1:-1:-1::0;9648:4:0::1;::::0;9270:390;-1:-1:-1;;;;9270:390:0:o;9672:187::-;4241:14;;9770:4;;9749:10;;4241:14;;;:42;;-1:-1:-1;;;;;;4259:24:0;;;;;;:15;:24;;;;;;;;4241:42;4233:78;;;;-1:-1:-1;;;4233:78:0;;;;;;;:::i;:::-;9791:40:::1;9801:10;9813:9;9824:6;9791:9;:40::i;25432:114::-:0;1614:7;1641:6;-1:-1:-1;;;;;1641:6:0;1069:10;1703:23;1695:68;;;;-1:-1:-1;;;1695:68:0;;;;;;;:::i;:::-;25511:15:::1;:27:::0;;-1:-1:-1;;;;;;25511:27:0::1;-1:-1:-1::0;;;;;25511:27:0;;;::::1;::::0;;;::::1;::::0;;25432:114::o;26688:129::-;1614:7;1641:6;-1:-1:-1;;;;;1641:6:0;1069:10;1703:23;1695:68;;;;-1:-1:-1;;;1695:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26777:24:0;;;::::1;;::::0;;;:15:::1;:24;::::0;;;;:32;;-1:-1:-1;;26777:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26688:129::o;26080:130::-;1614:7;1641:6;-1:-1:-1;;;;;1641:6:0;1069:10;1703:23;1695:68;;;;-1:-1:-1;;;1695:68:0;;;;;;;:::i;:::-;26189:13:::1;4430:1;26189:2;:13;:::i;:::-;26180:22;::::0;:6;:22:::1;:::i;:::-;26159:18;:43:::0;-1:-1:-1;26080:130:0:o;27024:123::-;1614:7;1641:6;-1:-1:-1;;;;;1641:6:0;1069:10;1703:23;1695:68;;;;-1:-1:-1;;;1695:68:0;;;;;;;:::i;:::-;27125:14:::1;4430:1:::0;27125:2:::1;:14;:::i;:::-;27116:23;::::0;:6;:23:::1;:::i;:::-;27099:14;:40:::0;-1:-1:-1;27024:123:0:o;25920:152::-;1614:7;1641:6;-1:-1:-1;;;;;1641:6:0;1069:10;1703:23;1695:68;;;;-1:-1:-1;;;1695:68:0;;;;;;;:::i;:::-;26014:16:::1;:4:::0;26021:9:::1;26014:16;:::i;:::-;25999:12;:31:::0;-1:-1:-1;26041:15:0::1;:23:::0;;-1:-1:-1;;26041:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25920:152::o;12019:110::-;1614:7;1641:6;-1:-1:-1;;;;;1641:6:0;1069:10;1703:23;1695:68;;;;-1:-1:-1;;;1695:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12086:27:0::1;12116:5;12086:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;12086:35:0::1;::::0;;12019:110::o;27529:193::-;1614:7;1641:6;-1:-1:-1;;;;;1641:6:0;1069:10;1703:23;1695:68;;;;-1:-1:-1;;;1695:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27654:27:0;::::1;;27682:3:::0;27701:12:::1;27705:8:::0;27701:2:::1;:12;:::i;:::-;27687:26;::::0;:12;:26:::1;:::i;:::-;27654:60;::::0;-1:-1:-1;;;;;;27654:60:0::1;::::0;;;;;;-1:-1:-1;;;;;15206:32:1;;;27654:60:0::1;::::0;::::1;15188:51:1::0;15255:18;;;15248:34;15161:18;;27654:60:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27529:193:::0;;;;:::o;1893:192::-;1614:7;1641:6;-1:-1:-1;;;;;1641:6:0;1069:10;1703:23;1695:68;;;;-1:-1:-1;;;1695:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1982:22:0;::::1;1974:73;;;::::0;-1:-1:-1;;;1974:73:0;;15745:2:1;1974:73:0::1;::::0;::::1;15727:21:1::0;15784:2;15764:18;;;15757:30;15823:34;15803:18;;;15796:62;-1:-1:-1;;;15874:18:1;;;15867:36;15920:19;;1974:73:0::1;15543:402:1::0;1974:73:0::1;2058:19;2068:8;2058:9;:19::i;:::-;1893:192:::0;:::o;25794:114::-;1614:7;1641:6;-1:-1:-1;;;;;1641:6:0;1069:10;1703:23;1695:68;;;;-1:-1:-1;;;1695:68:0;;;;;;;:::i;:::-;25873:15:::1;:27:::0;;-1:-1:-1;;;;;;25873:27:0::1;-1:-1:-1::0;;;;;25873:27:0;;;::::1;::::0;;;::::1;::::0;;25794:114::o;17741:335::-;-1:-1:-1;;;;;17834:19:0;;17826:68;;;;-1:-1:-1;;;17826:68:0;;16152:2:1;17826:68:0;;;16134:21:1;16191:2;16171:18;;;16164:30;16230:34;16210:18;;;16203:62;-1:-1:-1;;;16281:18:1;;;16274:34;16325:19;;17826:68:0;15950:400:1;17826:68:0;-1:-1:-1;;;;;17913:21:0;;17905:68;;;;-1:-1:-1;;;17905:68:0;;16557:2:1;17905:68:0;;;16539:21:1;16596:2;16576:18;;;16569:30;16635:34;16615:18;;;16608:62;-1:-1:-1;;;16686:18:1;;;16679:32;16728:19;;17905:68:0;16355:398:1;17905:68:0;-1:-1:-1;;;;;17984:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;18036:32;;3661:25:1;;;18036:32:0;;3634:18:1;18036:32:0;;;;;;;17741:335;;;:::o;18084:2683::-;-1:-1:-1;;;;;18172:18:0;;18164:68;;;;-1:-1:-1;;;18164:68:0;;16960:2:1;18164:68:0;;;16942:21:1;16999:2;16979:18;;;16972:30;17038:34;17018:18;;;17011:62;-1:-1:-1;;;17089:18:1;;;17082:35;17134:19;;18164:68:0;16758:401:1;18164:68:0;-1:-1:-1;;;;;18251:16:0;;18243:64;;;;-1:-1:-1;;;18243:64:0;;17366:2:1;18243:64:0;;;17348:21:1;17405:2;17385:18;;;17378:30;17444:34;17424:18;;;17417:62;-1:-1:-1;;;17495:18:1;;;17488:33;17538:19;;18243:64:0;17164:399:1;18243:64:0;18335:1;18326:6;:10;18318:64;;;;-1:-1:-1;;;18318:64:0;;17770:2:1;18318:64:0;;;17752:21:1;17809:2;17789:18;;;17782:30;17848:34;17828:18;;;17821:62;-1:-1:-1;;;17899:18:1;;;17892:39;17948:19;;18318:64:0;17568:405:1;18318:64:0;18411:15;18421:4;18411:9;:15::i;:::-;18401:6;:25;;18393:86;;;;-1:-1:-1;;;18393:86:0;;18180:2:1;18393:86:0;;;18162:21:1;18219:2;18199:18;;;18192:30;18258:34;18238:18;;;18231:62;-1:-1:-1;;;18309:18:1;;;18302:47;18366:19;;18393:86:0;17978:413:1;18393:86:0;-1:-1:-1;;;;;18499:20:0;;;;;;:14;:20;;;;;;;;18498:21;:44;;;;-1:-1:-1;;;;;;18524:18:0;;;;;;:14;:18;;;;;;;;18523:19;18498:44;18490:89;;;;-1:-1:-1;;;18490:89:0;;18598:2:1;18490:89:0;;;18580:21:1;;;18617:18;;;18610:30;18676:34;18656:18;;;18649:62;18728:18;;18490:89:0;18396:356:1;18490:89:0;-1:-1:-1;;;;;18604:24:0;;;;;;:18;:24;;;;;;;;18603:25;:52;;;;-1:-1:-1;;;;;;18633:22:0;;;;;;:18;:22;;;;;;;;18632:23;18603:52;18600:128;;;18679:14;;;;18671:45;;;;-1:-1:-1;;;18671:45:0;;18959:2:1;18671:45:0;;;18941:21:1;18998:2;18978:18;;;18971:30;-1:-1:-1;;;19017:18:1;;;19010:48;19075:18;;18671:45:0;18757:342:1;18671:45:0;18761:6;;18743:15;:24;:40;;;;-1:-1:-1;18779:4:0;;-1:-1:-1;;;;;18771:12:0;;;18779:4;;18771:12;18743:40;18740:2010;;;18836:8;:17;;;;;;;-1:-1:-1;18836:17:0;;;;;;;;-1:-1:-1;;;;;;18836:17:0;-1:-1:-1;;;;;18836:17:0;;;;;18868:30;18836:17;18888:4;-1:-1:-1;;18868:8:0;:30::i;:::-;18913:46;18928:4;18934:2;18938:6;18946:5;18953;18913:14;:46::i;:::-;-1:-1:-1;;;;;18974:18:0;;;;;;:14;:18;;;;;:25;;-1:-1:-1;;18974:25:0;18995:4;18974:25;;;26564:105:::1;26469:207:::0;;:::o;18740:2010::-;19041:4;;-1:-1:-1;;;;;19033:12:0;;;19041:4;;19033:12;:39;;;;-1:-1:-1;;;;;;19050:22:0;;;;;;:18;:22;;;;;;;;19049:23;19033:39;:52;;;;-1:-1:-1;19077:8:0;;;;;;;19076:9;19033:52;19030:258;;;19123:11;;19113:6;:21;;19105:63;;;;-1:-1:-1;;;19105:63:0;;19306:2:1;19105:63:0;;;19288:21:1;19345:2;19325:18;;;19318:30;19384:31;19364:18;;;19357:59;19433:18;;19105:63:0;19104:353:1;19105:63:0;19221:14;;19211:6;19195:13;19205:2;19195:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;19187:85;;;;-1:-1:-1;;;19187:85:0;;19664:2:1;19187:85:0;;;19646:21:1;;;19683:18;;;19676:30;19742:34;19722:18;;;19715:62;19794:18;;19187:85:0;19462:356:1;19187:85:0;19327:4;;-1:-1:-1;;;;;19319:12:0;;;19327:4;;19319:12;;;;:39;;-1:-1:-1;;;;;;19336:22:0;;;;;;:18;:22;;;;;;;;19335:23;19319:39;:68;;;;-1:-1:-1;;;;;;19363:24:0;;;;;;:18;:24;;;;;;;;19362:25;19319:68;:81;;;;-1:-1:-1;19392:8:0;;;;;;;19391:9;19319:81;19316:613;;;19438:12;;19428:6;:22;;19420:65;;;;-1:-1:-1;;;19420:65:0;;20025:2:1;19420:65:0;;;20007:21:1;20064:2;20044:18;;;20037:30;20103:32;20083:18;;;20076:60;20153:18;;19420:65:0;19823:354:1;19420:65:0;19513:4;;-1:-1:-1;;;;;19507:10:0;;;19513:4;;19507:10;19504:142;;19575:14;;19565:6;19549:13;19559:2;19549:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;19541:85;;;;-1:-1:-1;;;19541:85:0;;19664:2:1;19541:85:0;;;19646:21:1;;;19683:18;;;19676:30;19742:34;19722:18;;;19715:62;19794:18;;19541:85:0;19462:356:1;19541:85:0;19667:15;;;;19664:250;;;-1:-1:-1;;;;;19745:15:0;;19706:18;19745:15;;;:9;:15;;;;;;19727:33;;:15;:33;:::i;:::-;19706:54;;19805:12;;19791:10;:26;;19783:55;;;;-1:-1:-1;;;19783:55:0;;20384:2:1;19783:55:0;;;20366:21:1;20423:2;20403:18;;;20396:30;-1:-1:-1;;;20442:18:1;;;20435:46;20498:18;;19783:55:0;20182:340:1;19783:55:0;-1:-1:-1;;;;;;19861:15:0;;;;;;:9;:15;;;;;19879;19861:33;;19664:250;19994:14;4430:1;19994:2;:14;:::i;:::-;19988:20;;:2;:20;:::i;:::-;19978:6;19960:15;19970:4;19960:9;:15::i;:::-;:24;;;;:::i;:::-;:48;;:67;;;;-1:-1:-1;1614:7:0;1641:6;-1:-1:-1;;;;;20012:15:0;;;1641:6;;20012:15;;19960:67;19957:130;;;20071:15;20081:4;20071:9;:15::i;:::-;20062:6;20045:14;4430:1;20045:2;:14;:::i;:::-;20040:19;;:2;:19;:::i;:::-;:28;;;;:::i;:::-;:46;;;;:::i;:::-;20029:58;;;;:::i;:::-;;;19957:130;20116:12;20159:18;;20131:24;20149:4;20131:9;:24::i;:::-;20196:8;;-1:-1:-1;;20131:46:0;;-1:-1:-1;20196:8:0;;;;;20195:9;:24;;;;-1:-1:-1;20208:11:0;;;;;;;20195:24;:35;;;;;20223:7;20195:35;:51;;;;-1:-1:-1;20242:4:0;;-1:-1:-1;;;;;20234:12:0;;;20242:4;;20234:12;;20195:51;:80;;;;-1:-1:-1;;;;;;20251:24:0;;;;;;:18;:24;;;;;;;;20250:25;20195:80;:107;;;;-1:-1:-1;;;;;;20280:22:0;;;;;;:18;:22;;;;;;;;20279:23;20195:107;20192:273;;;20331:4;;-1:-1:-1;;;;;20331:4:0;;;20325:10;;;;20322:127;;20353:18;;20338:45;;;;;;;;20373:9;20338:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20353:18;20338:14;:45::i;:::-;20322:127;;;20423:18;;20408:41;;;;;;;;20443:5;20408:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20423:18;20408:14;:41::i;:::-;20550:8;;20494:4;;20479:12;;20550:8;;;;;;:36;;-1:-1:-1;;;;;;20562:24:0;;;;;;:18;:24;;;;;;;;20550:36;:62;;;-1:-1:-1;;;;;;20590:22:0;;;;;;:18;:22;;;;;;;;20550:62;20547:82;;;20624:5;20614:15;;20547:82;20653:4;;-1:-1:-1;;;;;20653:4:0;;;20647:10;;;;20644:28;;-1:-1:-1;20668:4:0;20644:28;20689:49;20704:4;20710:2;20714:6;20722:7;20731:6;20689:14;:49::i;:::-;19015:1735;;;18084:2683;;;:::o;17027:158::-;17068:7;17089:15;17106;17125:19;:17;:19::i;:::-;17088:56;;-1:-1:-1;17088:56:0;-1:-1:-1;17162:15:0;17088:56;;17162:15;:::i;:::-;17155:22;;;;17027:158;:::o;14551:508::-;14637:36;;:::i;:::-;14698:37;14710:7;14719;14728:6;14698:11;:37::i;:::-;14686:49;;14855:53;14868:9;14879:7;14888;14897:10;:8;:10::i;:::-;14855:12;:53::i;:::-;14831:20;;;14746:162;14809:20;;;14746:162;14793:14;;;14746:162;14766:25;;;14746:162;;;14980:44;14747:9;15004:7;15013:10;:8;:10::i;:::-;14980:12;:44::i;:::-;14958:18;;;14919:105;14936:20;;;14919:105;14920:14;;;14919:105;14551:508;;;;;:::o;20850:1310::-;20974:28;21005:36;21016:7;21025;21034:6;21005:10;:36::i;:::-;-1:-1:-1;;;;;21058:19:0;;;;;;:11;:19;;;;;;20974:67;;-1:-1:-1;21058:19:0;;21054:115;;;-1:-1:-1;;;;;21134:15:0;;;;;;:7;:15;;;;;;:23;;21150:7;;21134:23;:::i;:::-;-1:-1:-1;;;;;21116:15:0;;;;;;:7;:15;;;;;:41;21054:115;-1:-1:-1;;;;;21183:22:0;;;;;;:11;:22;;;;;;;;21179:130;;;21280:17;;;;-1:-1:-1;;;;;21261:18:0;;;;;;:7;:18;;;;;;:36;;21280:17;21261:36;:::i;:::-;-1:-1:-1;;;;;21240:18:0;;;;;;:7;:18;;;;;:57;21179:130;21355:9;;-1:-1:-1;;;;;21339:15:0;;21355:9;21339:15;;;:7;:15;;;;;;:25;;21355:9;21339:25;:::i;:::-;-1:-1:-1;;;;;21321:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;21415:17;;;21396:18;;;;;;;;;;:36;;21415:17;21396:36;:::i;:::-;-1:-1:-1;;;;;21375:18:0;;;;;;:7;:18;;;;;;;:57;;;;21456:6;;;:10;;;:24;;;21479:1;21470;:6;;;:10;21456:24;21453:56;;;21482:27;21494:1;:6;;;21502:1;:6;;;21482:11;:27::i;:::-;21538:1;21523;:12;;;:16;:36;;;;21558:1;21543;:12;;;:16;21523:36;21520:225;;;21576:41;21591:1;:12;;;21604:1;:12;;;21576:14;:41::i;:::-;21662:4;-1:-1:-1;;;;;21637:96:0;21646:6;-1:-1:-1;;;;;21637:96:0;;21720:1;:12;;;21707:1;:10;;;21699:1;:6;;;21684:1;:12;;;21669:1;:12;;;:27;;;;:::i;:::-;:36;;;;:::i;:::-;:48;;;;:::i;:::-;:63;;;;:::i;:::-;21637:96;;3661:25:1;;;3649:2;3634:18;21637:96:0;;;;;;;21520:225;21773:1;21758;:12;;;:16;:36;;;;21793:1;21778;:12;;;:16;21758:36;21755:83;;;21796:42;21811:1;:12;;;21825:1;:12;;;21796:14;:42::i;:::-;21867:1;21852;:12;;;:16;:36;;;;21887:1;21872;:12;;;:16;21852:36;21849:83;;;21890:42;21905:1;:12;;;21919:1;:12;;;21890:14;:42::i;:::-;21955:1;21946;:6;;;:10;:24;;;;21969:1;21960;:6;;;:10;21946:24;21943:53;;;21972:24;21981:1;:6;;;21989:1;:6;;;21972:8;:24::i;:::-;22023:1;22010;:10;;;:14;:32;;;;22041:1;22028;:10;;;:14;22010:32;22007:73;;;22044:36;22057:1;:10;;;22069:1;:10;;;22044:12;:36::i;:::-;22113:9;-1:-1:-1;;;;;22096:46:0;22105:6;-1:-1:-1;;;;;22096:46:0;;22124:1;:17;;;22096:46;;;;3661:25:1;;3649:2;3634:18;;3515:177;22096:46:0;;;;;;;;20961:1199;20850:1310;;;;;:::o;2093:173::-;2149:16;2168:6;;-1:-1:-1;;;;;2185:17:0;;;-1:-1:-1;;;;;;2185:17:0;;;;;;2218:40;;2168:6;;;;;;;2218:40;;2149:16;2218:40;2138:128;2093:173;:::o;22633:1497::-;6460:8;:15;;-1:-1:-1;;6460:15:0;;;;;22814:14:::1;::::0;::::1;::::0;22799:12:::1;::::0;::::1;::::0;22788:8:::1;::::0;::::1;::::0;22771:14:::1;::::0;::::1;::::0;22754::::1;::::0;::::1;::::0;6460:15;;22814:14;22799:12;22788:8;22754:31:::1;::::0;::::1;:::i;:::-;:42;;;;:::i;:::-;:57;;;;:::i;:::-;:74;;;;:::i;:::-;22753:80;::::0;22832:1:::1;22753:80;:::i;:::-;22731:102;;22844:32;22914:11;22897:4;:14;;;22879:15;:32;;;;:::i;:::-;:46;;;;:::i;:::-;22844:81:::0;-1:-1:-1;22936:14:0::1;22953:42;22844:81:::0;22953:15;:42:::1;:::i;:::-;22936:59:::0;-1:-1:-1;23033:21:0::1;23067:24;22936:59:::0;23067:16:::1;:24::i;:::-;23104:20;23127:38;23151:14:::0;23127:21:::1;:38;:::i;:::-;23104:61;;23176:19;23227:4;:14;;;23213:11;:28;;;;:::i;:::-;23197:45;::::0;:12;:45:::1;:::i;:::-;23176:66;;23253:29;23299:4;:14;;;23285:11;:28;;;;:::i;:::-;23253:60:::0;-1:-1:-1;23329:25:0;;23326:117:::1;;23370:61;23383:24;23409:21;23370:12;:61::i;:::-;23496:14;::::0;::::1;::::0;23455:20:::1;::::0;23478:15:::1;:11:::0;23492:1:::1;23478:15;:::i;:::-;:32;;;;:::i;:::-;23455:55:::0;-1:-1:-1;23524:16:0;;23521:95:::1;;23564:15;::::0;23556:48:::1;::::0;-1:-1:-1;;;;;23564:15:0::1;23591:12:::0;23556:34:::1;:48::i;:::-;23661:8;::::0;::::1;::::0;23626:14:::1;::::0;23643:15:::1;:11:::0;23657:1:::1;23643:15;:::i;:::-;:26;;;;:::i;:::-;23626:43:::0;-1:-1:-1;23683:10:0;;23680:77:::1;;23717:9;::::0;23709:36:::1;::::0;-1:-1:-1;;;;;23717:9:0::1;23738:6:::0;23709:28:::1;:36::i;:::-;23816:12;::::0;::::1;::::0;23777:18:::1;::::0;23798:15:::1;:11:::0;23812:1:::1;23798:15;:::i;:::-;:30;;;;:::i;:::-;23777:51:::0;-1:-1:-1;23842:14:0;;23839:89:::1;;23880:13;::::0;23872:44:::1;::::0;-1:-1:-1;;;;;23880:13:0::1;23905:10:::0;23872:32:::1;:44::i;:::-;23989:14;::::0;::::1;::::0;23948:20:::1;::::0;23971:15:::1;:11:::0;23985:1:::1;23971:15;:::i;:::-;:32;;;;:::i;:::-;23948:55:::0;-1:-1:-1;24017:16:0;;24014:95:::1;;24057:15;::::0;24049:48:::1;::::0;-1:-1:-1;;;;;24057:15:0::1;24084:12:::0;24049:34:::1;:48::i;:::-;-1:-1:-1::0;;6498:8:0;:16;;-1:-1:-1;;6498:16:0;;;-1:-1:-1;;;;;;;;;;;22633:1497:0:o;17193:540::-;17290:7;;17326;;17243;;;;;17344:279;17368:9;:16;17364:20;;17344:279;;;17434:7;17410;:21;17418:9;17428:1;17418:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;17418:12:0;17410:21;;;;;;;;;;;;;:31;;:66;;;17469:7;17445;:21;17453:9;17463:1;17453:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;17453:12:0;17445:21;;;;;;;;;;;;;:31;17410:66;17406:97;;;17486:7;;17495;;17478:25;;;;;;;17193:540;;:::o;17406:97::-;17536:7;:21;17544:9;17554:1;17544:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;17544:12:0;17536:21;;;;;;;;;;;;;17528:29;;:7;:29;:::i;:::-;17518:39;;17590:7;:21;17598:9;17608:1;17598:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;17598:12:0;17590:21;;;;;;;;;;;;;17582:29;;:7;:29;:::i;:::-;17572:39;-1:-1:-1;17386:3:0;;;;:::i;:::-;;;;17344:279;;;;17655:7;;17647;;:15;;;;:::i;:::-;17637:7;:25;17633:56;;;17672:7;;17681;;17664:25;;;;;;17193:540;;:::o;17633:56::-;17708:7;;17717;;-1:-1:-1;17193:540:0;-1:-1:-1;17193:540:0:o;15067:732::-;15154:28;;:::i;:::-;15201:7;15197:86;;15223:17;;;:27;;;15263:8;;15197:86;15293:17;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15293:17:0;15324:6;15321:55;;;-1:-1:-1;15332:16:0;;;;;;;;15339:9;15332:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15321:55;;;-1:-1:-1;15364:12:0;;;;;;;;15371:5;15364:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15321:55;15414:8;;15423:3;;15406:16;;:7;:16;:::i;:::-;:20;;;;:::i;:::-;15397:6;;;:29;15460:14;;;;15475:3;;15452:22;;:7;:22;:::i;:::-;:26;;;;:::i;:::-;15437:12;;;:41;15512:14;;;;15527:3;;15504:22;;:7;:22;:::i;:::-;:26;;;;:::i;:::-;15489:12;;;:41;15558:8;;;;15567:3;;15550:16;;:7;:16;:::i;:::-;:20;;;;:::i;:::-;15541:6;;;:29;15604:14;;;;15619:3;;15596:22;;:7;:22;:::i;:::-;:26;;;;:::i;:::-;15581:12;;;:41;15654:12;;;;15667:3;;15646:20;;:7;:20;:::i;:::-;:24;;;;:::i;:::-;15633:10;;;:37;;;15749:12;;;;15742:6;;;;15729:12;;;;15716;;;;15709:6;;;;15701:14;;:7;:14;:::i;:::-;:27;;;;:::i;:::-;:40;;;;:::i;:::-;:47;;;;:::i;:::-;:60;;;;:::i;:::-;:71;;;;:::i;:::-;15681:17;;;:91;-1:-1:-1;15067:732:0;;;;;:::o;15807:796::-;15933:15;;;;;16048:19;16056:11;16048:7;:19;:::i;:::-;16038:29;;16084:7;16080:69;;-1:-1:-1;16113:7:0;;-1:-1:-1;16131:1:0;;-1:-1:-1;16131:1:0;;-1:-1:-1;16131:1:0;16106:31;;16080:69;16175:11;16168:1;:6;;;:18;;;;:::i;:::-;16161:25;;16223:11;16210:1;:12;;;:24;;;;:::i;:::-;16197:37;;16271:11;16258:1;:12;;;:24;;;;:::i;:::-;16245:37;;16293:12;16315:11;16308:1;:6;;;:18;;;;:::i;:::-;16293:33;;16337:18;16371:11;16358:1;:12;;;:24;;;;:::i;:::-;16337:45;;16393:16;16423:11;16412:1;:10;;;:22;;;;:::i;:::-;16393:41;-1:-1:-1;16393:41:0;16504:10;16499:4;16488:10;16477;16464:12;16472:4;16464:7;:12;:::i;:::-;:23;;;;:::i;:::-;:34;;;;:::i;:::-;:39;;;;:::i;:::-;:50;;;;:::i;:::-;:59;;;;:::i;:::-;16445:78;;16534:61;;;15807:796;;;;;;;;;;:::o;16615:404::-;16724:12;16737:18;16756:16;16791:7;16787:51;;-1:-1:-1;16820:1:0;;-1:-1:-1;16820:1:0;;-1:-1:-1;16820:1:0;16813:13;;16787:51;16864:11;16857:1;:6;;;:18;;;;:::i;:::-;16850:25;;16912:11;16899:1;:12;;;:24;;;;:::i;:::-;16886:37;;16956:11;16945:1;:10;;;:22;;;;:::i;:::-;16934:33;;16615:404;;;;;;;;:::o;13000:123::-;13078:4;13068:7;;:14;;;;;;;:::i;:::-;;;;-1:-1:-1;;13093:11:0;:22;;13111:4;;13093:11;:15;;:22;;13111:4;;13093:22;:::i;:::-;;;;-1:-1:-1;;;;13000:123:0:o;13131:284::-;13238:10;13214:11;:21;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;;13284:4:0;13264:26;;;;:11;:26;;;;;;;;13261:101;;;13332:4;13316:22;;;;:7;:22;;;;;:34;;13340:10;;13316:22;:34;;13340:10;;13316:34;:::i;:::-;;;;-1:-1:-1;;13261:101:0;13388:4;13372:22;;;;:7;:22;;;;;:35;;13397:10;;13372:22;:35;;13397:10;;13372:35;:::i;13423:284::-;13530:10;13506:11;:21;;;:34;;;;;;;:::i;14255:284::-;14362:10;14338:11;:21;;;:34;;;;;;;:::i;13719:242::-;13802:4;13784:11;:15;;;:22;;;;;;;:::i;13973:270::-;14072:8;14050:11;:19;;;:30;;;;;;;:::i;24641:562::-;24791:16;;;24805:1;24791:16;;;;;;;;24767:21;;24791:16;;;;;;;;;;-1:-1:-1;24791:16:0;24767:40;;24836:4;24818;24823:1;24818:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24818:23:0;;;:7;;;;;;;;;;:23;;;;24862:6;;:13;;;-1:-1:-1;;;24862:13:0;;;;:6;;;;;:11;;:13;;;;;24818:7;;24862:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24852:4;24857:1;24852:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24852:23:0;;;:7;;;;;;;;;:23;24920:6;;24888:53;;24905:4;;24920:6;24929:11;24888:8;:53::i;:::-;24980:6;;:215;;-1:-1:-1;;;24980:215:0;;-1:-1:-1;;;;;24980:6:0;;;;:57;;:215;;25052:11;;24980:6;;25122:4;;25149;;25169:15;;24980:215;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24138:495;24318:6;;24286:53;;24303:4;;-1:-1:-1;;;;;24318:6:0;24327:11;24286:8;:53::i;:::-;24382:6;;-1:-1:-1;;;;;24382:6:0;:22;24412:9;24445:4;24465:11;24382:6;;24577:7;1614;1641:6;-1:-1:-1;;;;;1641:6:0;;1568:87;24577:7;24382:243;;;;;;-1:-1:-1;;;;;;24382:243:0;;;-1:-1:-1;;;;;22127:15:1;;;24382:243:0;;;22109:34:1;22159:18;;;22152:34;;;;22202:18;;;22195:34;;;;22245:18;;;22238:34;22309:15;;;22288:19;;;22281:44;24599:15:0;22341:19:1;;;22334:35;22043:19;;24382:243:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3036:317::-;3151:6;3126:21;:31;;3118:73;;;;-1:-1:-1;;;3118:73:0;;22893:2:1;3118:73:0;;;22875:21:1;22932:2;22912:18;;;22905:30;22971:31;22951:18;;;22944:59;23020:18;;3118:73:0;22691:353:1;3118:73:0;3205:12;3223:9;-1:-1:-1;;;;;3223:14:0;3245:6;3223:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3204:52;;;3275:7;3267:78;;;;-1:-1:-1;;;3267:78:0;;23461:2:1;3267:78:0;;;23443:21:1;23500:2;23480:18;;;23473:30;23539:34;23519:18;;;23512:62;23610:28;23590:18;;;23583:56;23656:19;;3267:78:0;23259:422:1;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:523:1:-;118:6;126;134;142;150;158;211:3;199:9;190:7;186:23;182:33;179:53;;;228:1;225;218:12;179:53;-1:-1:-1;;251:23:1;;;321:2;306:18;;293:32;;-1:-1:-1;372:2:1;357:18;;344:32;;423:2;408:18;;395:32;;-1:-1:-1;474:3:1;459:19;;446:33;;-1:-1:-1;526:3:1;511:19;498:33;;-1:-1:-1;14:523:1;-1:-1:-1;14:523:1:o;542:597::-;654:4;683:2;712;701:9;694:21;744:6;738:13;787:6;782:2;771:9;767:18;760:34;812:1;822:140;836:6;833:1;830:13;822:140;;;931:14;;;927:23;;921:30;897:17;;;916:2;893:26;886:66;851:10;;822:140;;;980:6;977:1;974:13;971:91;;;1050:1;1045:2;1036:6;1025:9;1021:22;1017:31;1010:42;971:91;-1:-1:-1;1123:2:1;1102:15;-1:-1:-1;;1098:29:1;1083:45;;;;1130:2;1079:54;;542:597;-1:-1:-1;;;542:597:1:o;1144:131::-;-1:-1:-1;;;;;1219:31:1;;1209:42;;1199:70;;1265:1;1262;1255:12;1280:134;1348:20;;1377:31;1348:20;1377:31;:::i;:::-;1280:134;;;:::o;1419:315::-;1487:6;1495;1548:2;1536:9;1527:7;1523:23;1519:32;1516:52;;;1564:1;1561;1554:12;1516:52;1603:9;1590:23;1622:31;1647:5;1622:31;:::i;:::-;1672:5;1724:2;1709:18;;;;1696:32;;-1:-1:-1;;;1419:315:1:o;1931:127::-;1992:10;1987:3;1983:20;1980:1;1973:31;2023:4;2020:1;2013:15;2047:4;2044:1;2037:15;2063:118;2149:5;2142:13;2135:21;2128:5;2125:32;2115:60;;2171:1;2168;2161:12;2186:128;2251:20;;2280:28;2251:20;2280:28;:::i;2319:1191::-;2409:6;2417;2470:2;2458:9;2449:7;2445:23;2441:32;2438:52;;;2486:1;2483;2476:12;2438:52;2526:9;2513:23;2555:18;2596:2;2588:6;2585:14;2582:34;;;2612:1;2609;2602:12;2582:34;2650:6;2639:9;2635:22;2625:32;;2695:7;2688:4;2684:2;2680:13;2676:27;2666:55;;2717:1;2714;2707:12;2666:55;2753:2;2740:16;2775:4;2798:2;2794;2791:10;2788:36;;;2804:18;;:::i;:::-;2850:2;2847:1;2843:10;2882:2;2876:9;2945:2;2941:7;2936:2;2932;2928:11;2924:25;2916:6;2912:38;3000:6;2988:10;2985:22;2980:2;2968:10;2965:18;2962:46;2959:72;;;3011:18;;:::i;:::-;3047:2;3040:22;3097:18;;;3131:15;;;;-1:-1:-1;3173:11:1;;;3169:20;;;3201:19;;;3198:39;;;3233:1;3230;3223:12;3198:39;3257:11;;;;3277:148;3293:6;3288:3;3285:15;3277:148;;;3359:23;3378:3;3359:23;:::i;:::-;3347:36;;3310:12;;;;3403;;;;3277:148;;;3444:6;-1:-1:-1;3469:35:1;;-1:-1:-1;3485:18:1;;;3469:35;:::i;:::-;3459:45;;;;;;2319:1191;;;;;:::o;3697:247::-;3756:6;3809:2;3797:9;3788:7;3784:23;3780:32;3777:52;;;3825:1;3822;3815:12;3777:52;3864:9;3851:23;3883:31;3908:5;3883:31;:::i;3949:456::-;4026:6;4034;4042;4095:2;4083:9;4074:7;4070:23;4066:32;4063:52;;;4111:1;4108;4101:12;4063:52;4150:9;4137:23;4169:31;4194:5;4169:31;:::i;:::-;4219:5;-1:-1:-1;4276:2:1;4261:18;;4248:32;4289:33;4248:32;4289:33;:::i;:::-;3949:456;;4341:7;;-1:-1:-1;;;4395:2:1;4380:18;;;;4367:32;;3949:456::o;4410:180::-;4469:6;4522:2;4510:9;4501:7;4497:23;4493:32;4490:52;;;4538:1;4535;4528:12;4490:52;-1:-1:-1;4561:23:1;;4410:180;-1:-1:-1;4410:180:1:o;4784:241::-;4840:6;4893:2;4881:9;4872:7;4868:23;4864:32;4861:52;;;4909:1;4906;4899:12;4861:52;4948:9;4935:23;4967:28;4989:5;4967:28;:::i;5030:388::-;5098:6;5106;5159:2;5147:9;5138:7;5134:23;5130:32;5127:52;;;5175:1;5172;5165:12;5127:52;5214:9;5201:23;5233:31;5258:5;5233:31;:::i;:::-;5283:5;-1:-1:-1;5340:2:1;5325:18;;5312:32;5353:33;5312:32;5353:33;:::i;:::-;5405:7;5395:17;;;5030:388;;;;;:::o;5423:309::-;5488:6;5496;5549:2;5537:9;5528:7;5524:23;5520:32;5517:52;;;5565:1;5562;5555:12;5517:52;5601:9;5588:23;5578:33;;5661:2;5650:9;5646:18;5633:32;5674:28;5696:5;5674:28;:::i;5737:248::-;5805:6;5813;5866:2;5854:9;5845:7;5841:23;5837:32;5834:52;;;5882:1;5879;5872:12;5834:52;-1:-1:-1;;5905:23:1;;;5975:2;5960:18;;;5947:32;;-1:-1:-1;5737:248:1:o;5990:382::-;6055:6;6063;6116:2;6104:9;6095:7;6091:23;6087:32;6084:52;;;6132:1;6129;6122:12;6084:52;6171:9;6158:23;6190:31;6215:5;6190:31;:::i;:::-;6240:5;-1:-1:-1;6297:2:1;6282:18;;6269:32;6310:30;6269:32;6310:30;:::i;7125:309::-;7190:6;7198;7251:2;7239:9;7230:7;7226:23;7222:32;7219:52;;;7267:1;7264;7257:12;7219:52;7306:9;7293:23;7325:28;7347:5;7325:28;:::i;7439:525::-;7525:6;7533;7541;7549;7602:3;7590:9;7581:7;7577:23;7573:33;7570:53;;;7619:1;7616;7609:12;7570:53;7658:9;7645:23;7677:31;7702:5;7677:31;:::i;:::-;7727:5;-1:-1:-1;7784:2:1;7769:18;;7756:32;7797:33;7756:32;7797:33;:::i;:::-;7439:525;;7849:7;;-1:-1:-1;;;;7903:2:1;7888:18;;7875:32;;7954:2;7939:18;7926:32;;7439:525::o;8192:356::-;8394:2;8376:21;;;8413:18;;;8406:30;8472:34;8467:2;8452:18;;8445:62;8539:2;8524:18;;8192:356::o;8553:127::-;8614:10;8609:3;8605:20;8602:1;8595:31;8645:4;8642:1;8635:15;8669:4;8666:1;8659:15;8685:128;8725:3;8756:1;8752:6;8749:1;8746:13;8743:39;;;8762:18;;:::i;:::-;-1:-1:-1;8798:9:1;;8685:128::o;9163:347::-;9365:2;9347:21;;;9404:2;9384:18;;;9377:30;9443:25;9438:2;9423:18;;9416:53;9501:2;9486:18;;9163:347::o;9515:127::-;9576:10;9571:3;9567:20;9564:1;9557:31;9607:4;9604:1;9597:15;9631:4;9628:1;9621:15;9647:135;9686:3;9707:17;;;9704:43;;9727:18;;:::i;:::-;-1:-1:-1;9774:1:1;9763:13;;9647:135::o;10196:125::-;10236:4;10264:1;10261;10258:8;10255:34;;;10269:18;;:::i;:::-;-1:-1:-1;10306:9:1;;10196:125::o;10737:217::-;10777:1;10803;10793:132;;10847:10;10842:3;10838:20;10835:1;10828:31;10882:4;10879:1;10872:15;10910:4;10907:1;10900:15;10793:132;-1:-1:-1;10939:9:1;;10737:217::o;11311:127::-;11372:10;11367:3;11363:20;11360:1;11353:31;11403:4;11400:1;11393:15;11427:4;11424:1;11417:15;12207:422;12296:1;12339:5;12296:1;12353:270;12374:7;12364:8;12361:21;12353:270;;;12433:4;12429:1;12425:6;12421:17;12415:4;12412:27;12409:53;;;12442:18;;:::i;:::-;12492:7;12482:8;12478:22;12475:55;;;12512:16;;;;12475:55;12591:22;;;;12551:15;;;;12353:270;;;12357:3;12207:422;;;;;:::o;12634:806::-;12683:5;12713:8;12703:80;;-1:-1:-1;12754:1:1;12768:5;;12703:80;12802:4;12792:76;;-1:-1:-1;12839:1:1;12853:5;;12792:76;12884:4;12902:1;12897:59;;;;12970:1;12965:130;;;;12877:218;;12897:59;12927:1;12918:10;;12941:5;;;12965:130;13002:3;12992:8;12989:17;12986:43;;;13009:18;;:::i;:::-;-1:-1:-1;;13065:1:1;13051:16;;13080:5;;12877:218;;13179:2;13169:8;13166:16;13160:3;13154:4;13151:13;13147:36;13141:2;13131:8;13128:16;13123:2;13117:4;13114:12;13110:35;13107:77;13104:159;;;-1:-1:-1;13216:19:1;;;13248:5;;13104:159;13295:34;13320:8;13314:4;13295:34;:::i;:::-;13365:6;13361:1;13357:6;13353:19;13344:7;13341:32;13338:58;;;13376:18;;:::i;:::-;13414:20;;12634:806;-1:-1:-1;;;12634:806:1:o;13445:140::-;13503:5;13532:47;13573:4;13563:8;13559:19;13553:4;13532:47;:::i;13590:168::-;13630:7;13696:1;13692;13688:6;13684:14;13681:1;13678:21;13673:1;13666:9;13659:17;13655:45;13652:71;;;13703:18;;:::i;:::-;-1:-1:-1;13743:9:1;;13590:168::o;14878:131::-;14938:5;14967:36;14994:8;14988:4;14967:36;:::i;15293:245::-;15360:6;15413:2;15401:9;15392:7;15388:23;15384:32;15381:52;;;15429:1;15426;15419:12;15381:52;15461:9;15455:16;15480:28;15502:5;15480:28;:::i;20527:251::-;20597:6;20650:2;20638:9;20629:7;20625:23;20621:32;20618:52;;;20666:1;20663;20656:12;20618:52;20698:9;20692:16;20717:31;20742:5;20717:31;:::i;20783:980::-;21045:4;21093:3;21082:9;21078:19;21124:6;21113:9;21106:25;21150:2;21188:6;21183:2;21172:9;21168:18;21161:34;21231:3;21226:2;21215:9;21211:18;21204:31;21255:6;21290;21284:13;21321:6;21313;21306:22;21359:3;21348:9;21344:19;21337:26;;21398:2;21390:6;21386:15;21372:29;;21419:1;21429:195;21443:6;21440:1;21437:13;21429:195;;;21508:13;;-1:-1:-1;;;;;21504:39:1;21492:52;;21599:15;;;;21564:12;;;;21540:1;21458:9;21429:195;;;-1:-1:-1;;;;;;;21680:32:1;;;;21675:2;21660:18;;21653:60;-1:-1:-1;;;21744:3:1;21729:19;21722:35;21641:3;20783:980;-1:-1:-1;;;20783:980:1:o;22380:306::-;22468:6;22476;22484;22537:2;22525:9;22516:7;22512:23;22508:32;22505:52;;;22553:1;22550;22543:12;22505:52;22582:9;22576:16;22566:26;;22632:2;22621:9;22617:18;22611:25;22601:35;;22676:2;22665:9;22661:18;22655:25;22645:35;;22380:306;;;;;:::o

Swarm Source

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