ETH Price: $3,587.20 (+4.79%)

Token

ForeverMoon (FOMO)
 

Overview

Max Total Supply

1,000,000 FOMO

Holders

12

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

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

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

Contract Source Code Verified (Exact Match)

Contract Name:
FMoon

Compiler Version
v0.8.9+commit.e5eed63a

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-26
*/

/**
*/

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


// SPDX-License-Identifier: MIT

//

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 = 25000 * 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 =0x21A4f30338E47B8f2685FEE06933d2Df08D36D09;
    address public devWallet = 0x4f86B0BeE308dD6C71bDDD77D7b0DD2462b3299a; 
    address public operationWallet = 0x4f86B0BeE308dD6C71bDDD77D7b0DD2462b3299a;
    address public charityWallet = 0x4f86B0BeE308dD6C71bDDD77D7b0DD2462b3299a; 

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

        swapTokensForBNB(toSwap);

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

        if(bnbToAddLiquidityWith > 0){
            // Add liquidity to pancake
            addLiquidity(tokensToAddLiquidityWith, bnbToAddLiquidityWith);
        }

        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 bnbAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(router), tokenAmount);

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

    function swapTokensForBNB(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 airdropTokens(address[] memory accounts, uint256[] memory amounts) external onlyOwner{
        require(accounts.length == amounts.length, "Arrays must have same size");
        for(uint256 i = 0; i < accounts.length; i++){
            _tokenTransfer(msg.sender, accounts[i], amounts[i], false, false);
        }
    }
    
    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;
    }
    
    //Use this in case BNB are sent to the contract by mistake
    function rescueBNB(uint256 weiAmount) external onlyOwner{
        require(address(this).balance >= weiAmount, "insufficient BNB balance");
        payable(msg.sender).transfer(weiAmount);
    }
    

    function rescueAnyBEP20Tokens(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":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdropTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","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":"rescueAnyBEP20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueBNB","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"}]

6080604052600c805460ff19169055603c600d55620000216009600a62000b15565b6200003090620f424062000b26565b6010819055620000439060001962000b5e565b620000519060001962000b75565b601155620000626009600a62000b15565b62000070906161a862000b26565b601255620000816009600a62000b15565b6200008f906161a862000b26565b601355620000a06009600a62000b15565b620000ae906161a862000b26565b601455620000bf6009600a62000b15565b620000cd906161a862000b26565b601555601880546001600160a01b03199081167321a4f30338e47b8f2685fee06933d2df08d36d0917909155601980548216734f86b0bee308dd6c71bddd77d7b0dd2462b3299a9081178255601a8054841682179055601b8054909316179091556040805160c080820183526000808352602080840186905260018486018190526060808601849052608080870185905260a0968701859052601c859055601d98909855601e829055601f84905583835560218490558651948501875283855260419285018390529584018190529483018290529482018190529101819052602281905560239290925560245560258190556026819055602755348015620001d457600080fd5b5060405162004d0e38038062004d0e833981016040819052620001f79162000bac565b6200020233620005d6565b60008290506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200024357600080fd5b505afa15801562000258573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027e919062000bdb565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002c757600080fd5b505afa158015620002dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000302919062000bdb565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200034b57600080fd5b505af115801562000360573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000386919062000bdb565b600e80546001600160a01b038086166001600160a01b031992831617909255600f805492841692909116821790556016859055909150620003c79062000626565b60115460016000620003e16000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120939093553083526004918290528220805460ff1916600190811790915591620004306000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556018548216815260048452828120805486166001908117909155601954831682528382208054871682179055601b54831682528382208054871682179055601a549092168152828120805486168317905530815260069384905291822080549094168117909355620004d86000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600f54821681526006909352818320805485166001908117909155601854821684528284208054861682179055601954821684528284208054861682179055601b54821684528284208054861682179055601a549091168352912080549092161790556200057c6000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601054604051620005c491815260200190565b60405180910390a35050505062000c44565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b03163314620006865760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff1615620006f15760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016200067d565b6001600160a01b038116600090815260016020526040902054156200074e576001600160a01b0381166000908152600160205260409020546200073490620007b4565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b60006011548211156200081d5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016200067d565b6000620008296200083e565b905062000837818462000bf9565b9392505050565b600080806200084c62000864565b90925090506200085d818362000bf9565b9250505090565b6011546010546000918291825b600854811015620009cc5782600160006008848154811062000897576200089762000c10565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180620009065750816002600060088481548110620008df57620008df62000c10565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156200091d57601154601054945094505050509091565b600160006008838154811062000937576200093762000c10565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000968908462000b75565b9250600260006008838154811062000984576200098462000c10565b60009182526020808320909101546001600160a01b03168352820192909252604001902054620009b5908362000b75565b915080620009c38162000c26565b91505062000871565b50601054601154620009df919062000bf9565b821015620009f7576011546010549350935050509091565b90939092509050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000a5757816000190482111562000a3b5762000a3b62000a00565b8085161562000a4957918102915b93841c939080029062000a1b565b509250929050565b60008262000a705750600162000b0f565b8162000a7f5750600062000b0f565b816001811462000a98576002811462000aa35762000ac3565b600191505062000b0f565b60ff84111562000ab75762000ab762000a00565b50506001821b62000b0f565b5060208310610133831016604e8410600b841016171562000ae8575081810a62000b0f565b62000af4838362000a16565b806000190482111562000b0b5762000b0b62000a00565b0290505b92915050565b60006200083760ff84168362000a5f565b600081600019048311821515161562000b435762000b4362000a00565b500290565b634e487b7160e01b600052601260045260246000fd5b60008262000b705762000b7062000b48565b500690565b60008282101562000b8a5762000b8a62000a00565b500390565b80516001600160a01b038116811462000ba757600080fd5b919050565b6000806040838503121562000bc057600080fd5b62000bcb8362000b8f565b9150602083015190509250929050565b60006020828403121562000bee57600080fd5b620008378262000b8f565b60008262000c0b5762000c0b62000b48565b500490565b634e487b7160e01b600052603260045260246000fd5b600060001982141562000c3d5762000c3d62000a00565b5060010190565b6140ba8062000c546000396000f3fe6080604052600436106103b15760003560e01c806370a08231116101e7578063aacebbe31161010d578063e517f2b9116100a0578063f2fde38b1161006f578063f2fde38b14610b9e578063f66895a314610bbe578063f6bc962414610be9578063f887ea4014610c0957600080fd5b8063e517f2b914610b2f578063e79d416014610b4f578063ea2f0b3714610b64578063ee36e35914610b8457600080fd5b8063d8672e51116100dc578063d8672e5114610a93578063dd62ed3e14610ab3578063e042ad5814610af9578063e2f4560514610b1957600080fd5b8063aacebbe314610a1d578063b5c5714514610a3d578063d257b34f14610a5d578063d2ce0db214610a7d57600080fd5b80638e2839ff116101855780639ba5e4d5116101545780639ba5e4d514610992578063a457c2d7146109bd578063a8aa1b31146109dd578063a9059cbb146109fd57600080fd5b80638e2839ff146109055780638ea5220f14610925578063924de9b71461094557806395d89b411461096557600080fd5b806375f0a874116101c157806375f0a874146108565780637b2087691461088e57806388f82020146108ae5780638da5cb5b146108e757600080fd5b806370a08231146107c9578063715018a6146107e9578063728f8eea146107fe57600080fd5b8063441b1d30116102d75780635b24ea5e1161026a57806366a88d961161023957806366a88d961461075e5780636aa5b37f146107745780636ddd17131461078a578063706f6937146107a957600080fd5b80635b24ea5e146106d85780635bdbb0f9146106f857806362695eae14610718578063652e2f041461074857600080fd5b8063514cdaa1116102a6578063514cdaa11461064a57806352390c021461065f5780635342acb41461067f57806359759f61146106b857600080fd5b8063441b1d30146105d05780634549b039146105f05780634ada218b146106105780634d0509221461062a57600080fd5b80632d8381191161034f578063395093511161031e57806339509351146105505780633e65d4aa1461057057806340b28c2f14610590578063437823ec146105b057600080fd5b80632d838119146104d4578063313ce567146104f45780633685d41914610510578063379ba1d91461053057600080fd5b806313f97a8e1161038b57806313f97a8e1461045557806318160ddd146104755780631816467f1461049457806323b872dd146104b457600080fd5b806304d4c990146103bd57806306fdde03146103df578063095ea7b31461042557600080fd5b366103b857005b600080fd5b3480156103c957600080fd5b506103dd6103d8366004613905565b610c29565b005b3480156103eb57600080fd5b5060408051808201909152600b81526a2337b932bb32b926b7b7b760a91b60208201525b60405161041c9190613948565b60405180910390f35b34801561043157600080fd5b506104456104403660046139b2565b610cd8565b604051901515815260200161041c565b34801561046157600080fd5b506103dd610470366004613acb565b610d37565b34801561048157600080fd5b506010545b60405190815260200161041c565b3480156104a057600080fd5b506103dd6104af366004613b1d565b610dcd565b3480156104c057600080fd5b506104456104cf366004613b3a565b610e19565b3480156104e057600080fd5b506104866104ef366004613b7b565b610f13565b34801561050057600080fd5b506040516009815260200161041c565b34801561051c57600080fd5b506103dd61052b366004613b1d565b610f97565b34801561053c57600080fd5b506103dd61054b366004613b94565b61114e565b34801561055c57600080fd5b5061044561056b3660046139b2565b6111ab565b34801561057c57600080fd5b506103dd61058b366004613b1d565b61122b565b34801561059c57600080fd5b506103dd6105ab366004613bb1565b611277565b3480156105bc57600080fd5b506103dd6105cb366004613b1d565b6112cf565b3480156105dc57600080fd5b506103dd6105eb366004613b7b565b61131d565b3480156105fc57600080fd5b5061048661060b366004613bdf565b6113c4565b34801561061c57600080fd5b50600a546104459060ff1681565b34801561063657600080fd5b506103dd610645366004613c04565b611458565b34801561065657600080fd5b506103dd61152c565b34801561066b57600080fd5b506103dd61067a366004613b1d565b61169a565b34801561068b57600080fd5b5061044561069a366004613b1d565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156106c457600080fd5b506103dd6106d3366004613c4a565b6117ed565b3480156106e457600080fd5b506103dd6106f3366004613c6c565b61184d565b34801561070457600080fd5b506103dd610713366004613905565b6118a2565b34801561072457600080fd5b50610445610733366004613b1d565b60066020526000908152604090205460ff1681565b34801561075457600080fd5b5061048660145481565b34801561076a57600080fd5b5061048660155481565b34801561078057600080fd5b5061048660135481565b34801561079657600080fd5b50600a5461044590610100900460ff1681565b3480156107b557600080fd5b506103dd6107c4366004613c9a565b611947565b3480156107d557600080fd5b506104866107e4366004613b1d565b611a20565b3480156107f557600080fd5b506103dd611a7f565b34801561080a57600080fd5b50601c54601d54601e54601f5460205460215461082995949392919086565b604080519687526020870195909552938501929092526060840152608083015260a082015260c00161041c565b34801561086257600080fd5b50601854610876906001600160a01b031681565b6040516001600160a01b03909116815260200161041c565b34801561089a57600080fd5b50601b54610876906001600160a01b031681565b3480156108ba57600080fd5b506104456108c9366004613b1d565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156108f357600080fd5b506000546001600160a01b0316610876565b34801561091157600080fd5b506103dd610920366004613acb565b611ab5565b34801561093157600080fd5b50601954610876906001600160a01b031681565b34801561095157600080fd5b506103dd610960366004613b94565b611b46565b34801561097157600080fd5b50604080518082019091526004815263464f4d4f60e01b602082015261040f565b34801561099e57600080fd5b50602854602954602a54602b54602c54602d5461082995949392919086565b3480156109c957600080fd5b506104456109d83660046139b2565b611b8a565b3480156109e957600080fd5b50600f54610876906001600160a01b031681565b348015610a0957600080fd5b50610445610a183660046139b2565b611c70565b348015610a2957600080fd5b506103dd610a38366004613b1d565b611cc5565b348015610a4957600080fd5b506103dd610a58366004613c6c565b611d11565b348015610a6957600080fd5b506103dd610a78366004613b7b565b611d66565b348015610a8957600080fd5b50610486600d5481565b348015610a9f57600080fd5b506103dd610aae366004613b7b565b611dac565b348015610abf57600080fd5b50610486610ace366004613bb1565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610b0557600080fd5b50601a54610876906001600160a01b031681565b348015610b2557600080fd5b5061048660125481565b348015610b3b57600080fd5b506103dd610b4a366004613d55565b611df2565b348015610b5b57600080fd5b50600954610486565b348015610b7057600080fd5b506103dd610b7f366004613b1d565b611e3e565b348015610b9057600080fd5b50600c546104459060ff1681565b348015610baa57600080fd5b506103dd610bb9366004613b1d565b611e89565b348015610bca57600080fd5b5060225460235460245460255460265460275461082995949392919086565b348015610bf557600080fd5b506103dd610c04366004613b1d565b611f24565b348015610c1557600080fd5b50600e54610876906001600160a01b031681565b6000546001600160a01b03163314610c5c5760405162461bcd60e51b8152600401610c5390613d73565b60405180910390fd5b6040805160c0810182528781526020808201889052818301879052606082018690526080820185905260a0909101839052601c889055601d879055601e869055601f8590558390556021829055517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a1505050505050565b600a54600090339060ff1680610d0657506001600160a01b03811660009081526006602052604090205460ff165b610d225760405162461bcd60e51b8152600401610c5390613da8565b610d2d338585611f70565b5060019392505050565b6000546001600160a01b03163314610d615760405162461bcd60e51b8152600401610c5390613d73565b60005b8251811015610dc8578160076000858481518110610d8457610d84613ddf565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610dc081613e0b565b915050610d64565b505050565b6000546001600160a01b03163314610df75760405162461bcd60e51b8152600401610c5390613d73565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b600a54600090849060ff1680610e4757506001600160a01b03811660009081526006602052604090205460ff165b610e635760405162461bcd60e51b8152600401610c5390613da8565b610e6e858585612094565b6001600160a01b038516600090815260036020908152604080832033845290915290205483811015610ef35760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c53565b610f078633610f028785613e26565b611f70565b50600195945050505050565b6000601154821115610f7a5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c53565b6000610f84612944565b9050610f908184613e3d565b9392505050565b6000546001600160a01b03163314610fc15760405162461bcd60e51b8152600401610c5390613d73565b6001600160a01b03811660009081526005602052604090205460ff166110295760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610c53565b60005b60085481101561114a57816001600160a01b03166008828154811061105357611053613ddf565b6000918252602090912001546001600160a01b03161415611138576008805461107e90600190613e26565b8154811061108e5761108e613ddf565b600091825260209091200154600880546001600160a01b0390921691839081106110ba576110ba613ddf565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff19169055600880548061111257611112613e5f565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061114281613e0b565b91505061102c565b5050565b6000546001600160a01b031633146111785760405162461bcd60e51b8152600401610c5390613d73565b600a805461ffff191661ff0019831515908116919091176101009091021790556016546111a59042613e75565b60175550565b600a54600090339060ff16806111d957506001600160a01b03811660009081526006602052604090205460ff165b6111f55760405162461bcd60e51b8152600401610c5390613da8565b3360008181526003602090815260408083206001600160a01b0389168452909152902054610d2d91908690610f02908790613e75565b6000546001600160a01b031633146112555760405162461bcd60e51b8152600401610c5390613d73565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146112a15760405162461bcd60e51b8152600401610c5390613d73565b600e80546001600160a01b039384166001600160a01b031991821617909155600f8054929093169116179055565b6000546001600160a01b031633146112f95760405162461bcd60e51b8152600401610c5390613d73565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000546001600160a01b031633146113475760405162461bcd60e51b8152600401610c5390613d73565b804710156113975760405162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e7420424e422062616c616e636500000000000000006044820152606401610c53565b604051339082156108fc029083906000818181858888f1935050505015801561114a573d6000803e3d6000fd5b60006010548311156114185760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c53565b8161143657600061142c8460016000612967565b5191506114529050565b60006114458460016000612967565b6020015191506114529050565b92915050565b6000546001600160a01b031633146114825760405162461bcd60e51b8152600401610c5390613d73565b6001600160a01b03841663a9059cbb8461149d84600a613f71565b6114a79086613f7d565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b1580156114ed57600080fd5b505af1158015611501573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115259190613f9c565b5050505050565b6000546001600160a01b031633146115565760405162461bcd60e51b8152600401610c5390613d73565b42601754106115b35760405162461bcd60e51b815260206004820152602360248201527f5761697420666f722074686520616e74692d736e6970652074696d6520746f20604482015262195b9960ea1b6064820152608401610c53565b60005b60095481101561166e5760006115ce6009600a613fb9565b6115d9906045613f7d565b611609600984815481106115ef576115ef613ddf565b6000918252602090912001546001600160a01b0316611a20565b6116139190613e26565b905061165b6009838154811061162b5761162b613ddf565b6000918252602090912001546001600160a01b03166116526000546001600160a01b031690565b836000806129cd565b508061166681613e0b565b9150506115b6565b506040517f3e606f9c76d2d95df2edb01f77c6a6fc21f91cf130cd20aa0ef7370ce3d28deb90600090a1565b6000546001600160a01b031633146116c45760405162461bcd60e51b8152600401610c5390613d73565b6001600160a01b03811660009081526005602052604090205460ff161561172d5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c53565b6001600160a01b03811660009081526001602052604090205415611787576001600160a01b03811660009081526001602052604090205461176d90610f13565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146118175760405162461bcd60e51b8152600401610c5390613d73565b6118236009600a613fb9565b61182d9083613f7d565b60135561183c6009600a613fb9565b6118469082613f7d565b6014555050565b6000546001600160a01b031633146118775760405162461bcd60e51b8152600401610c5390613d73565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146118cc5760405162461bcd60e51b8152600401610c5390613d73565b6040805160c08101825287815260208101879052808201869052606081018590526080810184905260a001829052602287905560238690556024859055602584905560268390556027829055517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a1505050505050565b6000546001600160a01b031633146119715760405162461bcd60e51b8152600401610c5390613d73565b80518251146119c25760405162461bcd60e51b815260206004820152601a60248201527f417272617973206d75737420686176652073616d652073697a650000000000006044820152606401610c53565b60005b8251811015610dc857611a0e338483815181106119e4576119e4613ddf565b60200260200101518484815181106119fe576119fe613ddf565b60200260200101516000806129cd565b80611a1881613e0b565b9150506119c5565b6001600160a01b03811660009081526005602052604081205460ff1615611a5d57506001600160a01b031660009081526002602052604090205490565b6001600160a01b03821660009081526001602052604090205461145290610f13565b6000546001600160a01b03163314611aa95760405162461bcd60e51b8152600401610c5390613d73565b611ab36000612d1e565b565b6000546001600160a01b03163314611adf5760405162461bcd60e51b8152600401610c5390613d73565b60005b8251811015610dc8578160046000858481518110611b0257611b02613ddf565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611b3e81613e0b565b915050611ae2565b6000546001600160a01b03163314611b705760405162461bcd60e51b8152600401610c5390613d73565b600a80549115156101000261ff0019909216919091179055565b600a54600090339060ff1680611bb857506001600160a01b03811660009081526006602052604090205460ff165b611bd45760405162461bcd60e51b8152600401610c5390613da8565b3360009081526003602090815260408083206001600160a01b038816845290915290205483811015611c565760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c53565b611c653386610f028785613e26565b506001949350505050565b600a54600090339060ff1680611c9e57506001600160a01b03811660009081526006602052604090205460ff165b611cba5760405162461bcd60e51b8152600401610c5390613da8565b610d2d338585612094565b6000546001600160a01b03163314611cef5760405162461bcd60e51b8152600401610c5390613d73565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611d3b5760405162461bcd60e51b8152600401610c5390613d73565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611d905760405162461bcd60e51b8152600401610c5390613d73565b611d9c6009600a613fb9565b611da69082613f7d565b60125550565b6000546001600160a01b03163314611dd65760405162461bcd60e51b8152600401610c5390613d73565b611de26009600a613fb9565b611dec9082613f7d565b60155550565b6000546001600160a01b03163314611e1c5760405162461bcd60e51b8152600401610c5390613d73565b611e27816001613f7d565b600d5550600c805460ff1916911515919091179055565b6000546001600160a01b03163314611e685760405162461bcd60e51b8152600401610c5390613d73565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611eb35760405162461bcd60e51b8152600401610c5390613d73565b6001600160a01b038116611f185760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c53565b611f2181612d1e565b50565b6000546001600160a01b03163314611f4e5760405162461bcd60e51b8152600401610c5390613d73565b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611fd25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c53565b6001600160a01b0382166120335760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c53565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166120f85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c53565b6001600160a01b03821661215a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c53565b600081116121bc5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c53565b6121c583611a20565b81111561222e5760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610c53565b6001600160a01b03831660009081526007602052604090205460ff1615801561227057506001600160a01b03821660009081526007602052604090205460ff16155b6122bc5760405162461bcd60e51b815260206004820181905260248201527f596f7520617265206120626f742c20736f20796f752063616e742073656c6c2e6044820152606401610c53565b6001600160a01b03831660009081526004602052604090205460ff161580156122fe57506001600160a01b03821660009081526004602052604090205460ff16155b1561234a57600a5460ff1661234a5760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b6044820152606401610c53565b601754421080156123685750600f546001600160a01b038481169116145b156123fb57600980546001810182556000919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319166001600160a01b0384161790556123c58230600019611f70565b6123d38383836000806129cd565b6001600160a01b0382166000908152600760205260409020805460ff19166001179055505050565b600f546001600160a01b03848116911614801561243157506001600160a01b03821660009081526004602052604090205460ff16155b80156124465750600a5462010000900460ff16155b156125025760135481111561249d5760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61784275794c696d69740000006044820152606401610c53565b601554816124aa84611a20565b6124b49190613e75565b11156125025760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610c53565b600f546001600160a01b0384811691161480159061253957506001600160a01b03821660009081526004602052604090205460ff16155b801561255e57506001600160a01b03831660009081526004602052604090205460ff16155b80156125735750600a5462010000900460ff16155b156126d6576014548111156125ca5760405162461bcd60e51b815260206004820152601e60248201527f596f752061726520657863656564696e67206d617853656c6c4c696d697400006044820152606401610c53565b600f546001600160a01b0383811691161461264457601554816125ec84611a20565b6125f69190613e75565b11156126445760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610c53565b600c5460ff16156126d6576001600160a01b0383166000908152600b60205260408120546126729042613e26565b9050600d548110156126b95760405162461bcd60e51b815260206004820152601060248201526f10dbdbdb191bdddb88195b98589b195960821b6044820152606401610c53565b506001600160a01b0383166000908152600b602052604090204290555b6126e26009600a613fb9565b6126ed90600a613f7d565b816126f785611a20565b6127019190613e26565b1115801561271d57506000546001600160a01b03848116911614155b156127645761272b83611a20565b816127386009600a613fb9565b61274390600a613f7d565b61274d9190613e75565b6127579190613e26565b6127619082613e26565b90505b600060125461277230611a20565b600a54911115915062010000900460ff161580156127975750600a54610100900460ff165b80156127a05750805b80156127ba5750600f546001600160a01b03858116911614155b80156127df57506001600160a01b03841660009081526004602052604090205460ff16155b801561280457506001600160a01b03831660009081526004602052604090205460ff16155b156128b357600f546001600160a01b038481169116141561286a576012546040805160c08101825260225481526023546020820152602454918101919091526025546060820152602654608082015260275460a08201526128659190612d6e565b6128b3565b6012546040805160c081018252601c548152601d54602080830191909152601e5492820192909252601f5460608201529054608082015260215460a08201526128b39190612d6e565b600a5460019060009062010000900460ff16806128e857506001600160a01b03861660009081526004602052604090205460ff165b8061290b57506001600160a01b03851660009081526004602052604090205460ff165b1561291557600091505b600f546001600160a01b038681169116141561292f575060015b61293c86868685856129cd565b505050505050565b6000806000612951612f60565b90925090506129608183613e3d565b9250505090565b61296f61388f565b61297a8484846130e3565b905061298f81858561298a612944565b6132ec565b608086015260608501526040840152602083015281526129b781846129b2612944565b6133de565b60e084015260c083015260a08201529392505050565b60006129da848484612967565b6001600160a01b03871660009081526005602052604090205490915060ff1615612a3c576001600160a01b038616600090815260026020526040902054612a22908590613e26565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526005602052604090205460ff1615612aa0576101008101516001600160a01b038616600090815260026020526040902054612a869190613e75565b6001600160a01b0386166000908152600260205260409020555b80516001600160a01b038716600090815260016020526040902054612ac59190613e26565b6001600160a01b0380881660009081526001602090815260408083209490945584015191881681529190912054612afc9190613e75565b6001600160a01b0386166000908152600160205260409081902091909155810151151580612b2f57506000816101200151115b15612b4757612b478160400151826101200151613439565b600081608001511180612b5f57506000816101600151115b15612c0457612b77816080015182610160015161346e565b306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836101a00151846101c00151856101800151866101400151876101600151612bd49190613e75565b612bde9190613e75565b612be89190613e75565b612bf29190613e75565b60405190815260200160405180910390a35b600081606001511180612c1c57506000816101400151115b15612c3457612c3481606001518261014001516134e4565b60008160c001511180612c4c57506000816101a00151115b15612c6457612c648160c00151826101a001516134f9565b60008160a001511180612c7c57506000816101800151115b15612c9457612c948160a0015182610180015161350e565b60008160e001511180612cac57506000816101c00151115b15612cc457612cc48160e00151826101c00151613523565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836101000151604051612d0e91815260200190565b60405180910390a3505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600a805462ff0000191662010000179055608081015160a0820151606083015160208401516040850151600094939291612da791613e75565b612db19190613e75565b612dbb9190613e75565b612dc59190613e75565b612dd0906002613f7d565b9050600081836040015185612de59190613f7d565b612def9190613e3d565b90506000612dfd8286613e26565b905047612e0982613538565b6000612e158247613e26565b90506000866040015186612e299190613e26565b612e339083613e3d565b90506000876040015182612e479190613f7d565b90508015612e5957612e598682613699565b6020880151600090612e6c846002613f7d565b612e769190613f7d565b90508015612e9457601854612e94906001600160a01b031682613776565b6060890151600090612ea7856002613f7d565b612eb19190613f7d565b90508015612ecf57601954612ecf906001600160a01b031682613776565b60a08a0151600090612ee2866002613f7d565b612eec9190613f7d565b90508015612f0a57601b54612f0a906001600160a01b031682613776565b60808b0151600090612f1d876002613f7d565b612f279190613f7d565b90508015612f4557601a54612f45906001600160a01b031682613776565b5050600a805462ff0000191690555050505050505050505050565b6011546010546000918291825b6008548110156130b257826001600060088481548110612f8f57612f8f613ddf565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612ffa5750816002600060088481548110612fd357612fd3613ddf565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561301057601154601054945094505050509091565b600160006008838154811061302757613027613ddf565b60009182526020808320909101546001600160a01b031683528201929092526040019020546130569084613e26565b9250600260006008838154811061306f5761306f613ddf565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461309e9083613e26565b9150806130aa81613e0b565b915050612f6d565b506010546011546130c39190613e3d565b8210156130da576011546010549350935050509091565b90939092509050565b6130eb61388f565b826130fd576101008101849052610f90565b6131366040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b821561317b57506040805160c08101825260225481526023546020820152602454918101919091526025546060820152602654608082015260275460a08201526131b9565b506040805160c081018252601c548152601d54602080830191909152601e5492820192909252601f5460608201529054608082015260215460a08201525b80516064906131c89087613f7d565b6131d29190613e3d565b61012083015260208101516064906131ea9087613f7d565b6131f49190613e3d565b610140830152604081015160649061320c9087613f7d565b6132169190613e3d565b610160830152606081015160649061322e9087613f7d565b6132389190613e3d565b61018083015260808101516064906132509087613f7d565b61325a9190613e3d565b6101a083015260a08101516064906132729087613f7d565b61327c9190613e3d565b6101c083018190526101a08301516101808401516101608501516101408601516101208701516132ac908b613e26565b6132b69190613e26565b6132c09190613e26565b6132ca9190613e26565b6132d49190613e26565b6132de9190613e26565b610100830152509392505050565b6000808080806132fc8689613f7d565b945086613314575083925060009150819050806133d3565b858961012001516133259190613f7d565b9250858961014001516133389190613f7d565b91508589610160015161334b9190613f7d565b90506000868a61018001516133609190613f7d565b90506000878b6101a001516133759190613f7d565b90506000888c6101c0015161338a9190613f7d565b9050808284868861339b8b8e613e26565b6133a59190613e26565b6133af9190613e26565b6133b99190613e26565b6133c39190613e26565b6133cd9190613e26565b96505050505b945094509450945094565b6000806000846133f657506000915081905080613430565b838661018001516134079190613f7d565b925083866101a0015161341a9190613f7d565b915083866101c0015161342d9190613f7d565b90505b93509350939050565b816011600082825461344b9190613e26565b909155505060288054829190600090613465908490613e75565b90915550505050565b80602860020160008282546134839190613e75565b90915550503060009081526005602052604090205460ff16156134c55730600090815260026020526040812080548392906134bf908490613e75565b90915550505b3060009081526001602052604081208054849290613465908490613e75565b80602860010160008282546134839190613e75565b80602860040160008282546134839190613e75565b80602860030160008282546134839190613e75565b80602860050160008282546134839190613e75565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061356d5761356d613ddf565b6001600160a01b03928316602091820292909201810191909152600e54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156135c157600080fd5b505afa1580156135d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135f99190613fc8565b8160018151811061360c5761360c613ddf565b6001600160a01b039283166020918202929092010152600e546136329130911684611f70565b600e5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061366b908590600090869030904290600401613fe5565b600060405180830381600087803b15801561368557600080fd5b505af115801561293c573d6000803e3d6000fd5b600e546136b19030906001600160a01b031684611f70565b600e546001600160a01b031663f305d7198230856000806136da6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561373d57600080fd5b505af1158015613751573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906115259190614056565b804710156137c65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610c53565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613813576040519150601f19603f3d011682016040523d82523d6000602084013e613818565b606091505b5050905080610dc85760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610c53565b604051806101e001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60008060008060008060c0878903121561391e57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600060208083528351808285015260005b8181101561397557858101830151858201604001528201613959565b81811115613987576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611f2157600080fd5b600080604083850312156139c557600080fd5b82356139d08161399d565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613a1d57613a1d6139de565b604052919050565b600067ffffffffffffffff821115613a3f57613a3f6139de565b5060051b60200190565b600082601f830112613a5a57600080fd5b81356020613a6f613a6a83613a25565b6139f4565b82815260059290921b84018101918181019086841115613a8e57600080fd5b8286015b84811015613ab2578035613aa58161399d565b8352918301918301613a92565b509695505050505050565b8015158114611f2157600080fd5b60008060408385031215613ade57600080fd5b823567ffffffffffffffff811115613af557600080fd5b613b0185828601613a49565b9250506020830135613b1281613abd565b809150509250929050565b600060208284031215613b2f57600080fd5b8135610f908161399d565b600080600060608486031215613b4f57600080fd5b8335613b5a8161399d565b92506020840135613b6a8161399d565b929592945050506040919091013590565b600060208284031215613b8d57600080fd5b5035919050565b600060208284031215613ba657600080fd5b8135610f9081613abd565b60008060408385031215613bc457600080fd5b8235613bcf8161399d565b91506020830135613b128161399d565b60008060408385031215613bf257600080fd5b823591506020830135613b1281613abd565b60008060008060808587031215613c1a57600080fd5b8435613c258161399d565b93506020850135613c358161399d565b93969395505050506040820135916060013590565b60008060408385031215613c5d57600080fd5b50508035926020909101359150565b60008060408385031215613c7f57600080fd5b8235613c8a8161399d565b91506020830135613b1281613abd565b60008060408385031215613cad57600080fd5b823567ffffffffffffffff80821115613cc557600080fd5b613cd186838701613a49565b9350602091508185013581811115613ce857600080fd5b85019050601f81018613613cfb57600080fd5b8035613d09613a6a82613a25565b81815260059190911b82018301908381019088831115613d2857600080fd5b928401925b82841015613d4657833582529284019290840190613d2d565b80955050505050509250929050565b60008060408385031215613d6857600080fd5b82356139d081613abd565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526017908201527f54726164696e67206e6f7420656e61626c656420796574000000000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415613e1f57613e1f613df5565b5060010190565b600082821015613e3857613e38613df5565b500390565b600082613e5a57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603160045260246000fd5b60008219821115613e8857613e88613df5565b500190565b600181815b80851115613ec8578160001904821115613eae57613eae613df5565b80851615613ebb57918102915b93841c9390800290613e92565b509250929050565b600082613edf57506001611452565b81613eec57506000611452565b8160018114613f025760028114613f0c57613f28565b6001915050611452565b60ff841115613f1d57613f1d613df5565b50506001821b611452565b5060208310610133831016604e8410600b8410161715613f4b575081810a611452565b613f558383613e8d565b8060001904821115613f6957613f69613df5565b029392505050565b6000610f908383613ed0565b6000816000190483118215151615613f9757613f97613df5565b500290565b600060208284031215613fae57600080fd5b8151610f9081613abd565b6000610f9060ff841683613ed0565b600060208284031215613fda57600080fd5b8151610f908161399d565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156140355784516001600160a01b031683529383019391830191600101614010565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561406b57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220deed7b3f74379fcb0f21ed9726c5bc7d855f3cadcaa239ce3c69a990f833594964736f6c634300080900330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000000000000000000000000000000000000000000078

Deployed Bytecode

0x6080604052600436106103b15760003560e01c806370a08231116101e7578063aacebbe31161010d578063e517f2b9116100a0578063f2fde38b1161006f578063f2fde38b14610b9e578063f66895a314610bbe578063f6bc962414610be9578063f887ea4014610c0957600080fd5b8063e517f2b914610b2f578063e79d416014610b4f578063ea2f0b3714610b64578063ee36e35914610b8457600080fd5b8063d8672e51116100dc578063d8672e5114610a93578063dd62ed3e14610ab3578063e042ad5814610af9578063e2f4560514610b1957600080fd5b8063aacebbe314610a1d578063b5c5714514610a3d578063d257b34f14610a5d578063d2ce0db214610a7d57600080fd5b80638e2839ff116101855780639ba5e4d5116101545780639ba5e4d514610992578063a457c2d7146109bd578063a8aa1b31146109dd578063a9059cbb146109fd57600080fd5b80638e2839ff146109055780638ea5220f14610925578063924de9b71461094557806395d89b411461096557600080fd5b806375f0a874116101c157806375f0a874146108565780637b2087691461088e57806388f82020146108ae5780638da5cb5b146108e757600080fd5b806370a08231146107c9578063715018a6146107e9578063728f8eea146107fe57600080fd5b8063441b1d30116102d75780635b24ea5e1161026a57806366a88d961161023957806366a88d961461075e5780636aa5b37f146107745780636ddd17131461078a578063706f6937146107a957600080fd5b80635b24ea5e146106d85780635bdbb0f9146106f857806362695eae14610718578063652e2f041461074857600080fd5b8063514cdaa1116102a6578063514cdaa11461064a57806352390c021461065f5780635342acb41461067f57806359759f61146106b857600080fd5b8063441b1d30146105d05780634549b039146105f05780634ada218b146106105780634d0509221461062a57600080fd5b80632d8381191161034f578063395093511161031e57806339509351146105505780633e65d4aa1461057057806340b28c2f14610590578063437823ec146105b057600080fd5b80632d838119146104d4578063313ce567146104f45780633685d41914610510578063379ba1d91461053057600080fd5b806313f97a8e1161038b57806313f97a8e1461045557806318160ddd146104755780631816467f1461049457806323b872dd146104b457600080fd5b806304d4c990146103bd57806306fdde03146103df578063095ea7b31461042557600080fd5b366103b857005b600080fd5b3480156103c957600080fd5b506103dd6103d8366004613905565b610c29565b005b3480156103eb57600080fd5b5060408051808201909152600b81526a2337b932bb32b926b7b7b760a91b60208201525b60405161041c9190613948565b60405180910390f35b34801561043157600080fd5b506104456104403660046139b2565b610cd8565b604051901515815260200161041c565b34801561046157600080fd5b506103dd610470366004613acb565b610d37565b34801561048157600080fd5b506010545b60405190815260200161041c565b3480156104a057600080fd5b506103dd6104af366004613b1d565b610dcd565b3480156104c057600080fd5b506104456104cf366004613b3a565b610e19565b3480156104e057600080fd5b506104866104ef366004613b7b565b610f13565b34801561050057600080fd5b506040516009815260200161041c565b34801561051c57600080fd5b506103dd61052b366004613b1d565b610f97565b34801561053c57600080fd5b506103dd61054b366004613b94565b61114e565b34801561055c57600080fd5b5061044561056b3660046139b2565b6111ab565b34801561057c57600080fd5b506103dd61058b366004613b1d565b61122b565b34801561059c57600080fd5b506103dd6105ab366004613bb1565b611277565b3480156105bc57600080fd5b506103dd6105cb366004613b1d565b6112cf565b3480156105dc57600080fd5b506103dd6105eb366004613b7b565b61131d565b3480156105fc57600080fd5b5061048661060b366004613bdf565b6113c4565b34801561061c57600080fd5b50600a546104459060ff1681565b34801561063657600080fd5b506103dd610645366004613c04565b611458565b34801561065657600080fd5b506103dd61152c565b34801561066b57600080fd5b506103dd61067a366004613b1d565b61169a565b34801561068b57600080fd5b5061044561069a366004613b1d565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156106c457600080fd5b506103dd6106d3366004613c4a565b6117ed565b3480156106e457600080fd5b506103dd6106f3366004613c6c565b61184d565b34801561070457600080fd5b506103dd610713366004613905565b6118a2565b34801561072457600080fd5b50610445610733366004613b1d565b60066020526000908152604090205460ff1681565b34801561075457600080fd5b5061048660145481565b34801561076a57600080fd5b5061048660155481565b34801561078057600080fd5b5061048660135481565b34801561079657600080fd5b50600a5461044590610100900460ff1681565b3480156107b557600080fd5b506103dd6107c4366004613c9a565b611947565b3480156107d557600080fd5b506104866107e4366004613b1d565b611a20565b3480156107f557600080fd5b506103dd611a7f565b34801561080a57600080fd5b50601c54601d54601e54601f5460205460215461082995949392919086565b604080519687526020870195909552938501929092526060840152608083015260a082015260c00161041c565b34801561086257600080fd5b50601854610876906001600160a01b031681565b6040516001600160a01b03909116815260200161041c565b34801561089a57600080fd5b50601b54610876906001600160a01b031681565b3480156108ba57600080fd5b506104456108c9366004613b1d565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156108f357600080fd5b506000546001600160a01b0316610876565b34801561091157600080fd5b506103dd610920366004613acb565b611ab5565b34801561093157600080fd5b50601954610876906001600160a01b031681565b34801561095157600080fd5b506103dd610960366004613b94565b611b46565b34801561097157600080fd5b50604080518082019091526004815263464f4d4f60e01b602082015261040f565b34801561099e57600080fd5b50602854602954602a54602b54602c54602d5461082995949392919086565b3480156109c957600080fd5b506104456109d83660046139b2565b611b8a565b3480156109e957600080fd5b50600f54610876906001600160a01b031681565b348015610a0957600080fd5b50610445610a183660046139b2565b611c70565b348015610a2957600080fd5b506103dd610a38366004613b1d565b611cc5565b348015610a4957600080fd5b506103dd610a58366004613c6c565b611d11565b348015610a6957600080fd5b506103dd610a78366004613b7b565b611d66565b348015610a8957600080fd5b50610486600d5481565b348015610a9f57600080fd5b506103dd610aae366004613b7b565b611dac565b348015610abf57600080fd5b50610486610ace366004613bb1565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610b0557600080fd5b50601a54610876906001600160a01b031681565b348015610b2557600080fd5b5061048660125481565b348015610b3b57600080fd5b506103dd610b4a366004613d55565b611df2565b348015610b5b57600080fd5b50600954610486565b348015610b7057600080fd5b506103dd610b7f366004613b1d565b611e3e565b348015610b9057600080fd5b50600c546104459060ff1681565b348015610baa57600080fd5b506103dd610bb9366004613b1d565b611e89565b348015610bca57600080fd5b5060225460235460245460255460265460275461082995949392919086565b348015610bf557600080fd5b506103dd610c04366004613b1d565b611f24565b348015610c1557600080fd5b50600e54610876906001600160a01b031681565b6000546001600160a01b03163314610c5c5760405162461bcd60e51b8152600401610c5390613d73565b60405180910390fd5b6040805160c0810182528781526020808201889052818301879052606082018690526080820185905260a0909101839052601c889055601d879055601e869055601f8590558390556021829055517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a1505050505050565b600a54600090339060ff1680610d0657506001600160a01b03811660009081526006602052604090205460ff165b610d225760405162461bcd60e51b8152600401610c5390613da8565b610d2d338585611f70565b5060019392505050565b6000546001600160a01b03163314610d615760405162461bcd60e51b8152600401610c5390613d73565b60005b8251811015610dc8578160076000858481518110610d8457610d84613ddf565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610dc081613e0b565b915050610d64565b505050565b6000546001600160a01b03163314610df75760405162461bcd60e51b8152600401610c5390613d73565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b600a54600090849060ff1680610e4757506001600160a01b03811660009081526006602052604090205460ff165b610e635760405162461bcd60e51b8152600401610c5390613da8565b610e6e858585612094565b6001600160a01b038516600090815260036020908152604080832033845290915290205483811015610ef35760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c53565b610f078633610f028785613e26565b611f70565b50600195945050505050565b6000601154821115610f7a5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c53565b6000610f84612944565b9050610f908184613e3d565b9392505050565b6000546001600160a01b03163314610fc15760405162461bcd60e51b8152600401610c5390613d73565b6001600160a01b03811660009081526005602052604090205460ff166110295760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610c53565b60005b60085481101561114a57816001600160a01b03166008828154811061105357611053613ddf565b6000918252602090912001546001600160a01b03161415611138576008805461107e90600190613e26565b8154811061108e5761108e613ddf565b600091825260209091200154600880546001600160a01b0390921691839081106110ba576110ba613ddf565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff19169055600880548061111257611112613e5f565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061114281613e0b565b91505061102c565b5050565b6000546001600160a01b031633146111785760405162461bcd60e51b8152600401610c5390613d73565b600a805461ffff191661ff0019831515908116919091176101009091021790556016546111a59042613e75565b60175550565b600a54600090339060ff16806111d957506001600160a01b03811660009081526006602052604090205460ff165b6111f55760405162461bcd60e51b8152600401610c5390613da8565b3360008181526003602090815260408083206001600160a01b0389168452909152902054610d2d91908690610f02908790613e75565b6000546001600160a01b031633146112555760405162461bcd60e51b8152600401610c5390613d73565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146112a15760405162461bcd60e51b8152600401610c5390613d73565b600e80546001600160a01b039384166001600160a01b031991821617909155600f8054929093169116179055565b6000546001600160a01b031633146112f95760405162461bcd60e51b8152600401610c5390613d73565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000546001600160a01b031633146113475760405162461bcd60e51b8152600401610c5390613d73565b804710156113975760405162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e7420424e422062616c616e636500000000000000006044820152606401610c53565b604051339082156108fc029083906000818181858888f1935050505015801561114a573d6000803e3d6000fd5b60006010548311156114185760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c53565b8161143657600061142c8460016000612967565b5191506114529050565b60006114458460016000612967565b6020015191506114529050565b92915050565b6000546001600160a01b031633146114825760405162461bcd60e51b8152600401610c5390613d73565b6001600160a01b03841663a9059cbb8461149d84600a613f71565b6114a79086613f7d565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b1580156114ed57600080fd5b505af1158015611501573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115259190613f9c565b5050505050565b6000546001600160a01b031633146115565760405162461bcd60e51b8152600401610c5390613d73565b42601754106115b35760405162461bcd60e51b815260206004820152602360248201527f5761697420666f722074686520616e74692d736e6970652074696d6520746f20604482015262195b9960ea1b6064820152608401610c53565b60005b60095481101561166e5760006115ce6009600a613fb9565b6115d9906045613f7d565b611609600984815481106115ef576115ef613ddf565b6000918252602090912001546001600160a01b0316611a20565b6116139190613e26565b905061165b6009838154811061162b5761162b613ddf565b6000918252602090912001546001600160a01b03166116526000546001600160a01b031690565b836000806129cd565b508061166681613e0b565b9150506115b6565b506040517f3e606f9c76d2d95df2edb01f77c6a6fc21f91cf130cd20aa0ef7370ce3d28deb90600090a1565b6000546001600160a01b031633146116c45760405162461bcd60e51b8152600401610c5390613d73565b6001600160a01b03811660009081526005602052604090205460ff161561172d5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c53565b6001600160a01b03811660009081526001602052604090205415611787576001600160a01b03811660009081526001602052604090205461176d90610f13565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146118175760405162461bcd60e51b8152600401610c5390613d73565b6118236009600a613fb9565b61182d9083613f7d565b60135561183c6009600a613fb9565b6118469082613f7d565b6014555050565b6000546001600160a01b031633146118775760405162461bcd60e51b8152600401610c5390613d73565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146118cc5760405162461bcd60e51b8152600401610c5390613d73565b6040805160c08101825287815260208101879052808201869052606081018590526080810184905260a001829052602287905560238690556024859055602584905560268390556027829055517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a1505050505050565b6000546001600160a01b031633146119715760405162461bcd60e51b8152600401610c5390613d73565b80518251146119c25760405162461bcd60e51b815260206004820152601a60248201527f417272617973206d75737420686176652073616d652073697a650000000000006044820152606401610c53565b60005b8251811015610dc857611a0e338483815181106119e4576119e4613ddf565b60200260200101518484815181106119fe576119fe613ddf565b60200260200101516000806129cd565b80611a1881613e0b565b9150506119c5565b6001600160a01b03811660009081526005602052604081205460ff1615611a5d57506001600160a01b031660009081526002602052604090205490565b6001600160a01b03821660009081526001602052604090205461145290610f13565b6000546001600160a01b03163314611aa95760405162461bcd60e51b8152600401610c5390613d73565b611ab36000612d1e565b565b6000546001600160a01b03163314611adf5760405162461bcd60e51b8152600401610c5390613d73565b60005b8251811015610dc8578160046000858481518110611b0257611b02613ddf565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611b3e81613e0b565b915050611ae2565b6000546001600160a01b03163314611b705760405162461bcd60e51b8152600401610c5390613d73565b600a80549115156101000261ff0019909216919091179055565b600a54600090339060ff1680611bb857506001600160a01b03811660009081526006602052604090205460ff165b611bd45760405162461bcd60e51b8152600401610c5390613da8565b3360009081526003602090815260408083206001600160a01b038816845290915290205483811015611c565760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c53565b611c653386610f028785613e26565b506001949350505050565b600a54600090339060ff1680611c9e57506001600160a01b03811660009081526006602052604090205460ff165b611cba5760405162461bcd60e51b8152600401610c5390613da8565b610d2d338585612094565b6000546001600160a01b03163314611cef5760405162461bcd60e51b8152600401610c5390613d73565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611d3b5760405162461bcd60e51b8152600401610c5390613d73565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611d905760405162461bcd60e51b8152600401610c5390613d73565b611d9c6009600a613fb9565b611da69082613f7d565b60125550565b6000546001600160a01b03163314611dd65760405162461bcd60e51b8152600401610c5390613d73565b611de26009600a613fb9565b611dec9082613f7d565b60155550565b6000546001600160a01b03163314611e1c5760405162461bcd60e51b8152600401610c5390613d73565b611e27816001613f7d565b600d5550600c805460ff1916911515919091179055565b6000546001600160a01b03163314611e685760405162461bcd60e51b8152600401610c5390613d73565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611eb35760405162461bcd60e51b8152600401610c5390613d73565b6001600160a01b038116611f185760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c53565b611f2181612d1e565b50565b6000546001600160a01b03163314611f4e5760405162461bcd60e51b8152600401610c5390613d73565b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611fd25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c53565b6001600160a01b0382166120335760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c53565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166120f85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c53565b6001600160a01b03821661215a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c53565b600081116121bc5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c53565b6121c583611a20565b81111561222e5760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610c53565b6001600160a01b03831660009081526007602052604090205460ff1615801561227057506001600160a01b03821660009081526007602052604090205460ff16155b6122bc5760405162461bcd60e51b815260206004820181905260248201527f596f7520617265206120626f742c20736f20796f752063616e742073656c6c2e6044820152606401610c53565b6001600160a01b03831660009081526004602052604090205460ff161580156122fe57506001600160a01b03821660009081526004602052604090205460ff16155b1561234a57600a5460ff1661234a5760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b6044820152606401610c53565b601754421080156123685750600f546001600160a01b038481169116145b156123fb57600980546001810182556000919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319166001600160a01b0384161790556123c58230600019611f70565b6123d38383836000806129cd565b6001600160a01b0382166000908152600760205260409020805460ff19166001179055505050565b600f546001600160a01b03848116911614801561243157506001600160a01b03821660009081526004602052604090205460ff16155b80156124465750600a5462010000900460ff16155b156125025760135481111561249d5760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61784275794c696d69740000006044820152606401610c53565b601554816124aa84611a20565b6124b49190613e75565b11156125025760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610c53565b600f546001600160a01b0384811691161480159061253957506001600160a01b03821660009081526004602052604090205460ff16155b801561255e57506001600160a01b03831660009081526004602052604090205460ff16155b80156125735750600a5462010000900460ff16155b156126d6576014548111156125ca5760405162461bcd60e51b815260206004820152601e60248201527f596f752061726520657863656564696e67206d617853656c6c4c696d697400006044820152606401610c53565b600f546001600160a01b0383811691161461264457601554816125ec84611a20565b6125f69190613e75565b11156126445760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610c53565b600c5460ff16156126d6576001600160a01b0383166000908152600b60205260408120546126729042613e26565b9050600d548110156126b95760405162461bcd60e51b815260206004820152601060248201526f10dbdbdb191bdddb88195b98589b195960821b6044820152606401610c53565b506001600160a01b0383166000908152600b602052604090204290555b6126e26009600a613fb9565b6126ed90600a613f7d565b816126f785611a20565b6127019190613e26565b1115801561271d57506000546001600160a01b03848116911614155b156127645761272b83611a20565b816127386009600a613fb9565b61274390600a613f7d565b61274d9190613e75565b6127579190613e26565b6127619082613e26565b90505b600060125461277230611a20565b600a54911115915062010000900460ff161580156127975750600a54610100900460ff165b80156127a05750805b80156127ba5750600f546001600160a01b03858116911614155b80156127df57506001600160a01b03841660009081526004602052604090205460ff16155b801561280457506001600160a01b03831660009081526004602052604090205460ff16155b156128b357600f546001600160a01b038481169116141561286a576012546040805160c08101825260225481526023546020820152602454918101919091526025546060820152602654608082015260275460a08201526128659190612d6e565b6128b3565b6012546040805160c081018252601c548152601d54602080830191909152601e5492820192909252601f5460608201529054608082015260215460a08201526128b39190612d6e565b600a5460019060009062010000900460ff16806128e857506001600160a01b03861660009081526004602052604090205460ff165b8061290b57506001600160a01b03851660009081526004602052604090205460ff165b1561291557600091505b600f546001600160a01b038681169116141561292f575060015b61293c86868685856129cd565b505050505050565b6000806000612951612f60565b90925090506129608183613e3d565b9250505090565b61296f61388f565b61297a8484846130e3565b905061298f81858561298a612944565b6132ec565b608086015260608501526040840152602083015281526129b781846129b2612944565b6133de565b60e084015260c083015260a08201529392505050565b60006129da848484612967565b6001600160a01b03871660009081526005602052604090205490915060ff1615612a3c576001600160a01b038616600090815260026020526040902054612a22908590613e26565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526005602052604090205460ff1615612aa0576101008101516001600160a01b038616600090815260026020526040902054612a869190613e75565b6001600160a01b0386166000908152600260205260409020555b80516001600160a01b038716600090815260016020526040902054612ac59190613e26565b6001600160a01b0380881660009081526001602090815260408083209490945584015191881681529190912054612afc9190613e75565b6001600160a01b0386166000908152600160205260409081902091909155810151151580612b2f57506000816101200151115b15612b4757612b478160400151826101200151613439565b600081608001511180612b5f57506000816101600151115b15612c0457612b77816080015182610160015161346e565b306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836101a00151846101c00151856101800151866101400151876101600151612bd49190613e75565b612bde9190613e75565b612be89190613e75565b612bf29190613e75565b60405190815260200160405180910390a35b600081606001511180612c1c57506000816101400151115b15612c3457612c3481606001518261014001516134e4565b60008160c001511180612c4c57506000816101a00151115b15612c6457612c648160c00151826101a001516134f9565b60008160a001511180612c7c57506000816101800151115b15612c9457612c948160a0015182610180015161350e565b60008160e001511180612cac57506000816101c00151115b15612cc457612cc48160e00151826101c00151613523565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836101000151604051612d0e91815260200190565b60405180910390a3505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600a805462ff0000191662010000179055608081015160a0820151606083015160208401516040850151600094939291612da791613e75565b612db19190613e75565b612dbb9190613e75565b612dc59190613e75565b612dd0906002613f7d565b9050600081836040015185612de59190613f7d565b612def9190613e3d565b90506000612dfd8286613e26565b905047612e0982613538565b6000612e158247613e26565b90506000866040015186612e299190613e26565b612e339083613e3d565b90506000876040015182612e479190613f7d565b90508015612e5957612e598682613699565b6020880151600090612e6c846002613f7d565b612e769190613f7d565b90508015612e9457601854612e94906001600160a01b031682613776565b6060890151600090612ea7856002613f7d565b612eb19190613f7d565b90508015612ecf57601954612ecf906001600160a01b031682613776565b60a08a0151600090612ee2866002613f7d565b612eec9190613f7d565b90508015612f0a57601b54612f0a906001600160a01b031682613776565b60808b0151600090612f1d876002613f7d565b612f279190613f7d565b90508015612f4557601a54612f45906001600160a01b031682613776565b5050600a805462ff0000191690555050505050505050505050565b6011546010546000918291825b6008548110156130b257826001600060088481548110612f8f57612f8f613ddf565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612ffa5750816002600060088481548110612fd357612fd3613ddf565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561301057601154601054945094505050509091565b600160006008838154811061302757613027613ddf565b60009182526020808320909101546001600160a01b031683528201929092526040019020546130569084613e26565b9250600260006008838154811061306f5761306f613ddf565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461309e9083613e26565b9150806130aa81613e0b565b915050612f6d565b506010546011546130c39190613e3d565b8210156130da576011546010549350935050509091565b90939092509050565b6130eb61388f565b826130fd576101008101849052610f90565b6131366040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b821561317b57506040805160c08101825260225481526023546020820152602454918101919091526025546060820152602654608082015260275460a08201526131b9565b506040805160c081018252601c548152601d54602080830191909152601e5492820192909252601f5460608201529054608082015260215460a08201525b80516064906131c89087613f7d565b6131d29190613e3d565b61012083015260208101516064906131ea9087613f7d565b6131f49190613e3d565b610140830152604081015160649061320c9087613f7d565b6132169190613e3d565b610160830152606081015160649061322e9087613f7d565b6132389190613e3d565b61018083015260808101516064906132509087613f7d565b61325a9190613e3d565b6101a083015260a08101516064906132729087613f7d565b61327c9190613e3d565b6101c083018190526101a08301516101808401516101608501516101408601516101208701516132ac908b613e26565b6132b69190613e26565b6132c09190613e26565b6132ca9190613e26565b6132d49190613e26565b6132de9190613e26565b610100830152509392505050565b6000808080806132fc8689613f7d565b945086613314575083925060009150819050806133d3565b858961012001516133259190613f7d565b9250858961014001516133389190613f7d565b91508589610160015161334b9190613f7d565b90506000868a61018001516133609190613f7d565b90506000878b6101a001516133759190613f7d565b90506000888c6101c0015161338a9190613f7d565b9050808284868861339b8b8e613e26565b6133a59190613e26565b6133af9190613e26565b6133b99190613e26565b6133c39190613e26565b6133cd9190613e26565b96505050505b945094509450945094565b6000806000846133f657506000915081905080613430565b838661018001516134079190613f7d565b925083866101a0015161341a9190613f7d565b915083866101c0015161342d9190613f7d565b90505b93509350939050565b816011600082825461344b9190613e26565b909155505060288054829190600090613465908490613e75565b90915550505050565b80602860020160008282546134839190613e75565b90915550503060009081526005602052604090205460ff16156134c55730600090815260026020526040812080548392906134bf908490613e75565b90915550505b3060009081526001602052604081208054849290613465908490613e75565b80602860010160008282546134839190613e75565b80602860040160008282546134839190613e75565b80602860030160008282546134839190613e75565b80602860050160008282546134839190613e75565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061356d5761356d613ddf565b6001600160a01b03928316602091820292909201810191909152600e54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156135c157600080fd5b505afa1580156135d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135f99190613fc8565b8160018151811061360c5761360c613ddf565b6001600160a01b039283166020918202929092010152600e546136329130911684611f70565b600e5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061366b908590600090869030904290600401613fe5565b600060405180830381600087803b15801561368557600080fd5b505af115801561293c573d6000803e3d6000fd5b600e546136b19030906001600160a01b031684611f70565b600e546001600160a01b031663f305d7198230856000806136da6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561373d57600080fd5b505af1158015613751573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906115259190614056565b804710156137c65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610c53565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613813576040519150601f19603f3d011682016040523d82523d6000602084013e613818565b606091505b5050905080610dc85760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610c53565b604051806101e001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60008060008060008060c0878903121561391e57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600060208083528351808285015260005b8181101561397557858101830151858201604001528201613959565b81811115613987576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611f2157600080fd5b600080604083850312156139c557600080fd5b82356139d08161399d565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613a1d57613a1d6139de565b604052919050565b600067ffffffffffffffff821115613a3f57613a3f6139de565b5060051b60200190565b600082601f830112613a5a57600080fd5b81356020613a6f613a6a83613a25565b6139f4565b82815260059290921b84018101918181019086841115613a8e57600080fd5b8286015b84811015613ab2578035613aa58161399d565b8352918301918301613a92565b509695505050505050565b8015158114611f2157600080fd5b60008060408385031215613ade57600080fd5b823567ffffffffffffffff811115613af557600080fd5b613b0185828601613a49565b9250506020830135613b1281613abd565b809150509250929050565b600060208284031215613b2f57600080fd5b8135610f908161399d565b600080600060608486031215613b4f57600080fd5b8335613b5a8161399d565b92506020840135613b6a8161399d565b929592945050506040919091013590565b600060208284031215613b8d57600080fd5b5035919050565b600060208284031215613ba657600080fd5b8135610f9081613abd565b60008060408385031215613bc457600080fd5b8235613bcf8161399d565b91506020830135613b128161399d565b60008060408385031215613bf257600080fd5b823591506020830135613b1281613abd565b60008060008060808587031215613c1a57600080fd5b8435613c258161399d565b93506020850135613c358161399d565b93969395505050506040820135916060013590565b60008060408385031215613c5d57600080fd5b50508035926020909101359150565b60008060408385031215613c7f57600080fd5b8235613c8a8161399d565b91506020830135613b1281613abd565b60008060408385031215613cad57600080fd5b823567ffffffffffffffff80821115613cc557600080fd5b613cd186838701613a49565b9350602091508185013581811115613ce857600080fd5b85019050601f81018613613cfb57600080fd5b8035613d09613a6a82613a25565b81815260059190911b82018301908381019088831115613d2857600080fd5b928401925b82841015613d4657833582529284019290840190613d2d565b80955050505050509250929050565b60008060408385031215613d6857600080fd5b82356139d081613abd565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526017908201527f54726164696e67206e6f7420656e61626c656420796574000000000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415613e1f57613e1f613df5565b5060010190565b600082821015613e3857613e38613df5565b500390565b600082613e5a57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603160045260246000fd5b60008219821115613e8857613e88613df5565b500190565b600181815b80851115613ec8578160001904821115613eae57613eae613df5565b80851615613ebb57918102915b93841c9390800290613e92565b509250929050565b600082613edf57506001611452565b81613eec57506000611452565b8160018114613f025760028114613f0c57613f28565b6001915050611452565b60ff841115613f1d57613f1d613df5565b50506001821b611452565b5060208310610133831016604e8410600b8410161715613f4b575081810a611452565b613f558383613e8d565b8060001904821115613f6957613f69613df5565b029392505050565b6000610f908383613ed0565b6000816000190483118215151615613f9757613f97613df5565b500290565b600060208284031215613fae57600080fd5b8151610f9081613abd565b6000610f9060ff841683613ed0565b600060208284031215613fda57600080fd5b8151610f908161399d565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156140355784516001600160a01b031683529383019391830191600101614010565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561406b57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220deed7b3f74379fcb0f21ed9726c5bc7d855f3cadcaa239ce3c69a990f833594964736f6c63430008090033

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

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000000000000000000000000000000000000000000078

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

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


Deployed Bytecode Sourcemap

3381:24711:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12303:254;;;;;;;;;;-1:-1:-1;12303:254:0;;;;;:::i;:::-;;:::i;:::-;;7678:83;;;;;;;;;;-1:-1:-1;7748:5:0;;;;;;;;;;;;-1:-1:-1;;;7748:5:0;;;;7678:83;;;;;;;:::i;:::-;;;;;;;;8438:181;;;;;;;;;;-1:-1:-1;8438:181:0;;;;;:::i;:::-;;:::i;:::-;;;1765:14:1;;1758:22;1740:41;;1728:2;1713:18;8438:181:0;1600:187:1;26726:209:0;;;;;;;;;;-1:-1:-1;26726:209:0;;;;;:::i;:::-;;:::i;7974:95::-;;;;;;;;;;-1:-1:-1;8054:7:0;;7974:95;;;3885:25:1;;;3873:2;3858:18;7974:95:0;3739:177:1;25815:102:0;;;;;;;;;;-1:-1:-1;25815:102:0;;;;;:::i;:::-;;:::i;8627:430::-;;;;;;;;;;-1:-1:-1;8627:430:0;;;;;:::i;:::-;;:::i;10785:248::-;;;;;;;;;;-1:-1:-1;10785:248:0;;;;;:::i;:::-;;:::i;7860:83::-;;;;;;;;;;-1:-1:-1;7860:83:0;;4461:1;4961:36:1;;4949:2;4934:18;7860:83:0;4819:184:1;11448:475:0;;;;;;;;;;-1:-1:-1;11448:475:0;;;;;:::i;:::-;;:::i;10506:171::-;;;;;;;;;;-1:-1:-1;10506:171:0;;;;;:::i;:::-;;:::i;9065:228::-;;;;;;;;;;-1:-1:-1;9065:228:0;;;;;:::i;:::-;;:::i;25929:110::-;;;;;;;;;;-1:-1:-1;25929:110:0;;;;;:::i;:::-;;:::i;27414:154::-;;;;;;;;;;-1:-1:-1;27414:154:0;;;;;:::i;:::-;;:::i;11933:111::-;;;;;;;;;;-1:-1:-1;11933:111:0;;;;;:::i;:::-;;:::i;27644:196::-;;;;;;;;;;-1:-1:-1;27644:196:0;;;;;:::i;:::-;;:::i;10026:470::-;;;;;;;;;;-1:-1:-1;10026:470:0;;;;;:::i;:::-;;:::i;3947:26::-;;;;;;;;;;-1:-1:-1;3947:26:0;;;;;;;;27854:193;;;;;;;;;;-1:-1:-1;27854:193:0;;;;;:::i;:::-;;:::i;22114:384::-;;;;;;;;;;;;;:::i;11107:333::-;;;;;;;;;;-1:-1:-1;11107:333:0;;;;;:::i;:::-;;:::i;12172:123::-;;;;;;;;;;-1:-1:-1;12172:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;12260:27:0;12236:4;12260:27;;;:18;:27;;;;;;;;;12172:123;27088:183;;;;;;;;;;-1:-1:-1;27088:183:0;;;;;:::i;:::-;;:::i;26588:126::-;;;;;;;;;;-1:-1:-1;26588:126:0;;;;;:::i;:::-;;:::i;12569:262::-;;;;;;;;;;-1:-1:-1;12569:262:0;;;;;:::i;:::-;;:::i;3766:48::-;;;;;;;;;;-1:-1:-1;3766:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4755:51;;;;;;;;;;;;;;;;4813:53;;;;;;;;;;;;;;;;4698:50;;;;;;;;;;;;;;;;3980:23;;;;;;;;;;-1:-1:-1;3980:23:0;;;;;;;;;;;25129:331;;;;;;;;;;-1:-1:-1;25129:331:0;;;;;:::i;:::-;;:::i;8077:198::-;;;;;;;;;;-1:-1:-1;8077:198:0;;;;;:::i;:::-;;:::i;1810:94::-;;;;;;;;;;;;;:::i;5553:45::-;;;;;;;;;;-1:-1:-1;5553:45:0;;;;;;;;;;;;;;;;;;;;;;;;;8561:25:1;;;8617:2;8602:18;;8595:34;;;;8645:18;;;8638:34;;;;8703:2;8688:18;;8681:34;8746:3;8731:19;;8724:35;8790:3;8775:19;;8768:35;8548:3;8533:19;5553:45:0;8274:535:1;4943:74:0;;;;;;;;;;-1:-1:-1;4943:74:0;;;;-1:-1:-1;;;;;4943:74:0;;;;;;-1:-1:-1;;;;;8978:32:1;;;8960:51;;8948:2;8933:18;4943:74:0;8814:203:1;5183:73:0;;;;;;;;;;-1:-1:-1;5183:73:0;;;;-1:-1:-1;;;;;5183:73:0;;;9898:120;;;;;;;;;;-1:-1:-1;9898:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;9990:20:0;9966:4;9990:20;;;:11;:20;;;;;;;;;9898:120;1587:87;;;;;;;;;;-1:-1:-1;1633:7:0;1660:6;-1:-1:-1;;;;;1660:6:0;1587:87;;25472:209;;;;;;;;;;-1:-1:-1;25472:209:0;;;;;:::i;:::-;;:::i;5024:69::-;;;;;;;;;;-1:-1:-1;5024:69:0;;;;-1:-1:-1;;;;;5024:69:0;;;26475:101;;;;;;;;;;-1:-1:-1;26475:101:0;;;;;:::i;:::-;;:::i;7767:87::-;;;;;;;;;;-1:-1:-1;7839:7:0;;;;;;;;;;;;-1:-1:-1;;;7839:7:0;;;;7767:87;;5862:36;;;;;;;;;;-1:-1:-1;5862:36:0;;;;;;;;;;;;;;;;;;;;;9301:390;;;;;;;;;;-1:-1:-1;9301:390:0;;;;;:::i;:::-;;:::i;4398:19::-;;;;;;;;;;-1:-1:-1;4398:19:0;;;;-1:-1:-1;;;;;4398:19:0;;;9703:187;;;;;;;;;;-1:-1:-1;9703:187:0;;;;;:::i;:::-;;:::i;25689:114::-;;;;;;;;;;-1:-1:-1;25689:114:0;;;;;:::i;:::-;;:::i;26947:129::-;;;;;;;;;;-1:-1:-1;26947:129:0;;;;;:::i;:::-;;:::i;26337:130::-;;;;;;;;;;-1:-1:-1;26337:130:0;;;;;:::i;:::-;;:::i;4167:40::-;;;;;;;;;;;;;;;;27283:123;;;;;;;;;;-1:-1:-1;27283:123:0;;;;;:::i;:::-;;:::i;8287:143::-;;;;;;;;;;-1:-1:-1;8287:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;8395:18:0;;;8368:7;8395:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8287:143;5101:75;;;;;;;;;;-1:-1:-1;5101:75:0;;;;-1:-1:-1;;;;;5101:75:0;;;4634:57;;;;;;;;;;;;;;;;26177:152;;;;;;;;;;-1:-1:-1;26177:152:0;;;;;:::i;:::-;;:::i;10685:92::-;;;;;;;;;;-1:-1:-1;10754:8:0;:15;10685:92;;12052:110;;;;;;;;;;-1:-1:-1;12052:110:0;;;;;:::i;:::-;;:::i;4125:35::-;;;;;;;;;;-1:-1:-1;4125:35:0;;;;;;;;1912:192;;;;;;;;;;-1:-1:-1;1912:192:0;;;;;:::i;:::-;;:::i;5605:49::-;;;;;;;;;;-1:-1:-1;5605:49:0;;;;;;;;;;;;;;;;;;;;;26051:114;;;;;;;;;;-1:-1:-1;26051:114:0;;;;;:::i;:::-;;:::i;4370:21::-;;;;;;;;;;-1:-1:-1;4370:21:0;;;;-1:-1:-1;;;;;4370:21:0;;;12303:254;1633:7;1660:6;-1:-1:-1;;;;;1660:6:0;1088:10;1722:23;1714:68;;;;-1:-1:-1;;;1714:68:0;;;;;;;:::i;:::-;;;;;;;;;12462:58:::1;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12454:5:::1;:66:::0;;;;;;;;;;;;;;;;;;;;;;12536:13;::::1;::::0;-1:-1:-1;;12536:13:0::1;12303:254:::0;;;;;;:::o;8438:181::-;4272:14;;8533:4;;8513:10;;4272:14;;;:42;;-1:-1:-1;;;;;;4290:24:0;;;;;;:15;:24;;;;;;;;4272:42;4264:78;;;;-1:-1:-1;;;4264:78:0;;;;;;;:::i;:::-;8550:39:::1;1088:10:::0;8573:7:::1;8582:6;8550:8;:39::i;:::-;-1:-1:-1::0;8607:4:0::1;::::0;8438:181;-1:-1:-1;;;8438:181:0:o;26726:209::-;1633:7;1660:6;-1:-1:-1;;;;;1660:6:0;1088:10;1722:23;1714:68;;;;-1:-1:-1;;;1714:68:0;;;;;;;:::i;:::-;26825:9:::1;26821:107;26843:8;:15;26839:1;:19;26821:107;;;26909:5;26879:14;:27;26894:8;26903:1;26894:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;26879:27:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;26879:27:0;:35;;-1:-1:-1;;26879:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26860:3;::::1;::::0;::::1;:::i;:::-;;;;26821:107;;;;26726:209:::0;;:::o;25815:102::-;1633:7;1660:6;-1:-1:-1;;;;;1660:6:0;1088:10;1722:23;1714:68;;;;-1:-1:-1;;;1714:68:0;;;;;;;:::i;:::-;25888:9:::1;:21:::0;;-1:-1:-1;;;;;;25888:21:0::1;-1:-1:-1::0;;;;;25888:21:0;;;::::1;::::0;;;::::1;::::0;;25815:102::o;8627:430::-;4272:14;;8741:4;;8724:6;;4272:14;;;:42;;-1:-1:-1;;;;;;4290:24:0;;;;;;:15;:24;;;;;;;;4272:42;4264:78;;;;-1:-1:-1;;;4264:78:0;;;;;;;:::i;:::-;8758:36:::1;8768:6;8776:9;8787:6;8758:9;:36::i;:::-;-1:-1:-1::0;;;;;8834:19:0;::::1;8807:24;8834:19:::0;;;:11:::1;:19;::::0;;;;;;;1088:10;8834:33;;;;;;;;8886:26;;::::1;;8878:79;;;::::0;-1:-1:-1;;;8878:79:0;;10878:2:1;8878:79:0::1;::::0;::::1;10860:21:1::0;10917:2;10897:18;;;10890:30;10956:34;10936:18;;;10929:62;-1:-1:-1;;;11007:18:1;;;11000:38;11055:19;;8878:79:0::1;10676:404:1::0;8878:79:0::1;8968:57;8977:6:::0;1088:10;8999:25:::1;9018:6:::0;8999:16;:25:::1;:::i;:::-;8968:8;:57::i;:::-;-1:-1:-1::0;9045:4:0::1;::::0;8627:430;-1:-1:-1;;;;;8627:430:0:o;10785:248::-;10851:7;10890;;10879;:18;;10871:73;;;;-1:-1:-1;;;10871:73:0;;11417:2:1;10871:73:0;;;11399:21:1;11456:2;11436:18;;;11429:30;11495:34;11475:18;;;11468:62;-1:-1:-1;;;11546:18:1;;;11539:40;11596:19;;10871:73:0;11215:406:1;10871:73:0;10955:19;10978:10;:8;:10::i;:::-;10955:33;-1:-1:-1;11006:19:0;10955:33;11006:7;:19;:::i;:::-;10999:26;10785:248;-1:-1:-1;;;10785:248:0:o;11448:475::-;1633:7;1660:6;-1:-1:-1;;;;;1660:6:0;1088:10;1722:23;1714:68;;;;-1:-1:-1;;;1714:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11530:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;11522:56;;;::::0;-1:-1:-1;;;11522:56:0;;12050:2:1;11522:56:0::1;::::0;::::1;12032:21:1::0;12089:2;12069:18;;;12062:30;12128:25;12108:18;;;12101:53;12171:18;;11522:56:0::1;11848:347:1::0;11522:56:0::1;11594:9;11589:327;11613:9;:16:::0;11609:20;::::1;11589:327;;;11671:7;-1:-1:-1::0;;;;;11655:23:0::1;:9;11665:1;11655:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;11655:12:0::1;:23;11651:254;;;11714:9;11724:16:::0;;:20:::1;::::0;11743:1:::1;::::0;11724:20:::1;:::i;:::-;11714:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;11699:9:::1;:12:::0;;-1:-1:-1;;;;;11714:31:0;;::::1;::::0;11709:1;;11699:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;11699:46:0::1;-1:-1:-1::0;;;;;11699:46:0;;::::1;;::::0;;11764:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;11803:11:::1;:20:::0;;;;:28;;-1:-1:-1;;11803:28:0::1;::::0;;11850:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;11850:15:0;;;;;-1:-1:-1;;;;;;11850:15:0::1;::::0;;;;;11589:327:::1;11448:475:::0;:::o;11651:254::-:1;11631:3:::0;::::1;::::0;::::1;:::i;:::-;;;;11589:327;;;;11448:475:::0;:::o;10506:171::-;1633:7;1660:6;-1:-1:-1;;;;;1660:6:0;1088:10;1722:23;1714:68;;;;-1:-1:-1;;;1714:68:0;;;;;;;:::i;:::-;10573:14:::1;:22:::0;;-1:-1:-1;;10606:19:0;-1:-1:-1;;10573:22:0;::::1;;10606:19:::0;;;;;;;10573:22:::1;10606:19:::0;;::::1;;::::0;;10663:6:::1;::::0;10645:24:::1;::::0;:15:::1;:24;:::i;:::-;10636:6;:33:::0;-1:-1:-1;10506:171:0:o;9065:228::-;4272:14;;9166:4;;9145:10;;4272:14;;;:42;;-1:-1:-1;;;;;;4290:24:0;;;;;;:15;:24;;;;;;;;4272:42;4264:78;;;;-1:-1:-1;;;4264:78:0;;;;;;;:::i;:::-;1088:10;9215:25:::1;::::0;;;:11:::1;:25;::::0;;;;;;;-1:-1:-1;;;;;9215:34:0;::::1;::::0;;;;;;;;9183:80:::1;::::0;1088:10;9206:7;;9215:47:::1;::::0;9252:10;;9215:47:::1;:::i;25929:110::-:0;1633:7;1660:6;-1:-1:-1;;;;;1660:6:0;1088:10;1722:23;1714:68;;;;-1:-1:-1;;;1714:68:0;;;;;;;:::i;:::-;26006:13:::1;:25:::0;;-1:-1:-1;;;;;;26006:25:0::1;-1:-1:-1::0;;;;;26006:25:0;;;::::1;::::0;;;::::1;::::0;;25929:110::o;27414:154::-;1633:7;1660:6;-1:-1:-1;;;;;1660:6:0;1088:10;1722:23;1714:68;;;;-1:-1:-1;;;1714:68:0;;;;;;;:::i;:::-;27508:6:::1;:27:::0;;-1:-1:-1;;;;;27508:27:0;;::::1;-1:-1:-1::0;;;;;;27508:27:0;;::::1;;::::0;;;27546:4:::1;:14:::0;;;;;::::1;::::0;::::1;;::::0;;27414:154::o;11933:111::-;1633:7;1660:6;-1:-1:-1;;;;;1660:6:0;1088:10;1722:23;1714:68;;;;-1:-1:-1;;;1714:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12002:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;12002:34:0::1;12032:4;12002:34;::::0;;11933:111::o;27644:196::-;1633:7;1660:6;-1:-1:-1;;;;;1660:6:0;1088:10;1722:23;1714:68;;;;-1:-1:-1;;;1714:68:0;;;;;;;:::i;:::-;27744:9:::1;27719:21;:34;;27711:71;;;::::0;-1:-1:-1;;;27711:71:0;;12667:2:1;27711:71:0::1;::::0;::::1;12649:21:1::0;12706:2;12686:18;;;12679:30;12745:26;12725:18;;;12718:54;12789:18;;27711:71:0::1;12465:348:1::0;27711:71:0::1;27793:39;::::0;27801:10:::1;::::0;27793:39;::::1;;;::::0;27822:9;;27793:39:::1;::::0;;;27822:9;27801:10;27793:39;::::1;;;;;;;;;;;;;::::0;::::1;;;;10026:470:::0;10116:7;10155;;10144;:18;;10136:62;;;;-1:-1:-1;;;10136:62:0;;13020:2:1;10136:62:0;;;13002:21:1;13059:2;13039:18;;;13032:30;13098:33;13078:18;;;13071:61;13149:18;;10136:62:0;12818:355:1;10136:62:0;10214:17;10209:280;;10248:28;10279:32;10290:7;10299:4;10305:5;10279:10;:32::i;:::-;10333:9;;-1:-1:-1;10326:16:0;;-1:-1:-1;10326:16:0;10209:280;10375:28;10406:32;10417:7;10426:4;10432:5;10406:10;:32::i;:::-;10460:17;;;;-1:-1:-1;10453:24:0;;-1:-1:-1;10453:24:0;10209:280;10026:470;;;;:::o;27854:193::-;1633:7;1660:6;-1:-1:-1;;;;;1660:6:0;1088:10;1722:23;1714:68;;;;-1:-1:-1;;;1714:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27979:27:0;::::1;;28007:3:::0;28026:12:::1;28030:8:::0;28026:2:::1;:12;:::i;:::-;28012:26;::::0;:12;:26:::1;:::i;:::-;27979:60;::::0;-1:-1:-1;;;;;;27979:60:0::1;::::0;;;;;;-1:-1:-1;;;;;14917:32:1;;;27979:60:0::1;::::0;::::1;14899:51:1::0;14966:18;;;14959:34;14872:18;;27979:60:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27854:193:::0;;;;:::o;22114:384::-;1633:7;1660:6;-1:-1:-1;;;;;1660:6:0;1088:10;1722:23;1714:68;;;;-1:-1:-1;;;1714:68:0;;;;;;;:::i;:::-;22189:15:::1;22180:6;;:24;22172:72;;;::::0;-1:-1:-1;;;22172:72:0;;15456:2:1;22172:72:0::1;::::0;::::1;15438:21:1::0;15495:2;15475:18;;;15468:30;15534:34;15514:18;;;15507:62;-1:-1:-1;;;15585:18:1;;;15578:33;15628:19;;22172:72:0::1;15254:399:1::0;22172:72:0::1;22259:9;22255:199;22278:8;:15:::0;22274:19;::::1;22255:199;;;22314:11;22358:14;4461:1:::0;22358:2:::1;:14;:::i;:::-;22353:19;::::0;:2:::1;:19;:::i;:::-;22328:22;22338:8;22347:1;22338:11;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;22338:11:0::1;22328:9;:22::i;:::-;:44;;;;:::i;:::-;22314:58;;22387:55;22402:8;22411:1;22402:11;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;22402:11:0::1;22415:7;1633::::0;1660:6;-1:-1:-1;;;;;1660:6:0;;1587:87;22415:7:::1;22424:3;22429:5;22436::::0;22387:14:::1;:55::i;:::-;-1:-1:-1::0;22295:3:0;::::1;::::0;::::1;:::i;:::-;;;;22255:199;;;-1:-1:-1::0;22469:21:0::1;::::0;::::1;::::0;;;::::1;22114:384::o:0;11107:333::-;1633:7;1660:6;-1:-1:-1;;;;;1660:6:0;1088:10;1722:23;1714:68;;;;-1:-1:-1;;;1714:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11190:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;11189:21;11181:61;;;::::0;-1:-1:-1;;;11181:61:0;;16005:2:1;11181:61:0::1;::::0;::::1;15987:21:1::0;16044:2;16024:18;;;16017:30;16083:29;16063:18;;;16056:57;16130:18;;11181:61:0::1;15803:351:1::0;11181:61:0::1;-1:-1:-1::0;;;;;11256:16:0;::::1;11275:1;11256:16:::0;;;:7:::1;:16;::::0;;;;;:20;11253:108:::1;;-1:-1:-1::0;;;;;11332:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;11312:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;11293:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;11253:108:::1;-1:-1:-1::0;;;;;11371:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;11371:27:0::1;11394:4;11371:27:::0;;::::1;::::0;;;11409:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;11409:23:0::1;::::0;;::::1;::::0;;11107:333::o;27088:183::-;1633:7;1660:6;-1:-1:-1;;;;;1660:6:0;1088:10;1722:23;1714:68;;;;-1:-1:-1;;;1714:68:0;;;;;;;:::i;:::-;27199:14:::1;4461:1:::0;27199:2:::1;:14;:::i;:::-;27190:23;::::0;:6;:23:::1;:::i;:::-;27176:11;:37:::0;27249:14:::1;4461:1:::0;27249:2:::1;:14;:::i;:::-;27239:24;::::0;:7;:24:::1;:::i;:::-;27224:12;:39:::0;-1:-1:-1;;27088:183:0:o;26588:126::-;1633:7;1660:6;-1:-1:-1;;;;;1660:6:0;1088:10;1722:23;1714:68;;;;-1:-1:-1;;;1714:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26675:23:0;;;::::1;;::::0;;;:14:::1;:23;::::0;;;;:31;;-1:-1:-1;;26675:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26588:126::o;12569:262::-;1633:7;1660:6;-1:-1:-1;;;;;1660:6:0;1088:10;1722:23;1714:68;;;;-1:-1:-1;;;1714:68:0;;;;;;;:::i;:::-;12736:58:::1;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;12724:9:::1;:70:::0;;;;;;;;;;;;;;;;;;;;;;;12810:13;::::1;::::0;-1:-1:-1;;12810:13:0::1;12569:262:::0;;;;;;:::o;25129:331::-;1633:7;1660:6;-1:-1:-1;;;;;1660:6:0;1088:10;1722:23;1714:68;;;;-1:-1:-1;;;1714:68:0;;;;;;;:::i;:::-;25261:7:::1;:14;25242:8;:15;:33;25234:72;;;::::0;-1:-1:-1;;;25234:72:0;;16361:2:1;25234:72:0::1;::::0;::::1;16343:21:1::0;16400:2;16380:18;;;16373:30;16439:28;16419:18;;;16412:56;16485:18;;25234:72:0::1;16159:350:1::0;25234:72:0::1;25321:9;25317:136;25340:8;:15;25336:1;:19;25317:136;;;25376:65;25391:10;25403:8;25412:1;25403:11;;;;;;;;:::i;:::-;;;;;;;25416:7;25424:1;25416:10;;;;;;;;:::i;:::-;;;;;;;25428:5;25435::::0;25376:14:::1;:65::i;:::-;25357:3:::0;::::1;::::0;::::1;:::i;:::-;;;;25317:136;;8077:198:::0;-1:-1:-1;;;;;8167:20:0;;8143:7;8167:20;;;:11;:20;;;;;;;;8163:49;;;-1:-1:-1;;;;;;8196:16:0;;;;;:7;:16;;;;;;;8077:198::o;8163:49::-;-1:-1:-1;;;;;8250:16:0;;;;;;:7;:16;;;;;;8230:37;;:19;:37::i;1810:94::-;1633:7;1660:6;-1:-1:-1;;;;;1660:6:0;1088:10;1722:23;1714:68;;;;-1:-1:-1;;;1714:68:0;;;;;;;:::i;:::-;1875:21:::1;1893:1;1875:9;:21::i;:::-;1810:94::o:0;25472:209::-;1633:7;1660:6;-1:-1:-1;;;;;1660:6:0;1088:10;1722:23;1714:68;;;;-1:-1:-1;;;1714:68:0;;;;;;;:::i;:::-;25568:9:::1;25564:110;25587:8;:15;25583:1;:19;25564:110;;;25657:5;25623:18;:31;25642:8;25651:1;25642:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;25623:31:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;25623:31:0;:39;;-1:-1:-1;;25623:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25604:3;::::1;::::0;::::1;:::i;:::-;;;;25564:110;;26475:101:::0;1633:7;1660:6;-1:-1:-1;;;;;1660:6:0;1088:10;1722:23;1714:68;;;;-1:-1:-1;;;1714:68:0;;;;;;;:::i;:::-;26546:11:::1;:22:::0;;;::::1;;;;-1:-1:-1::0;;26546:22:0;;::::1;::::0;;;::::1;::::0;;26475:101::o;9301:390::-;4272:14;;9407:4;;9386:10;;4272:14;;;:42;;-1:-1:-1;;;;;;4290:24:0;;;;;;:15;:24;;;;;;;;4272:42;4264:78;;;;-1:-1:-1;;;4264:78:0;;;;;;;:::i;:::-;1088:10;9424:24:::1;9451:25:::0;;;:11:::1;:25;::::0;;;;;;;-1:-1:-1;;;;;9451:34:0;::::1;::::0;;;;;;;;9504:35;;::::1;;9496:85;;;::::0;-1:-1:-1;;;9496:85:0;;16716:2:1;9496:85:0::1;::::0;::::1;16698:21:1::0;16755:2;16735:18;;;16728:30;16794:34;16774:18;;;16767:62;-1:-1:-1;;;16845:18:1;;;16838:35;16890:19;;9496:85:0::1;16514:401:1::0;9496:85:0::1;9592:67;1088:10:::0;9615:7;9624:34:::1;9643:15:::0;9624:16;:34:::1;:::i;9592:67::-;-1:-1:-1::0;9679:4:0::1;::::0;9301:390;-1:-1:-1;;;;9301:390:0:o;9703:187::-;4272:14;;9801:4;;9780:10;;4272:14;;;:42;;-1:-1:-1;;;;;;4290:24:0;;;;;;:15;:24;;;;;;;;4272:42;4264:78;;;;-1:-1:-1;;;4264:78:0;;;;;;;:::i;:::-;9822:40:::1;9832:10;9844:9;9855:6;9822:9;:40::i;25689:114::-:0;1633:7;1660:6;-1:-1:-1;;;;;1660:6:0;1088:10;1722:23;1714:68;;;;-1:-1:-1;;;1714:68:0;;;;;;;:::i;:::-;25768:15:::1;:27:::0;;-1:-1:-1;;;;;;25768:27:0::1;-1:-1:-1::0;;;;;25768:27:0;;;::::1;::::0;;;::::1;::::0;;25689:114::o;26947:129::-;1633:7;1660:6;-1:-1:-1;;;;;1660:6:0;1088:10;1722:23;1714:68;;;;-1:-1:-1;;;1714:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27036:24:0;;;::::1;;::::0;;;:15:::1;:24;::::0;;;;:32;;-1:-1:-1;;27036:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26947:129::o;26337:130::-;1633:7;1660:6;-1:-1:-1;;;;;1660:6:0;1088:10;1722:23;1714:68;;;;-1:-1:-1;;;1714:68:0;;;;;;;:::i;:::-;26446:13:::1;4461:1;26446:2;:13;:::i;:::-;26437:22;::::0;:6;:22:::1;:::i;:::-;26416:18;:43:::0;-1:-1:-1;26337:130:0:o;27283:123::-;1633:7;1660:6;-1:-1:-1;;;;;1660:6:0;1088:10;1722:23;1714:68;;;;-1:-1:-1;;;1714:68:0;;;;;;;:::i;:::-;27384:14:::1;4461:1:::0;27384:2:::1;:14;:::i;:::-;27375:23;::::0;:6;:23:::1;:::i;:::-;27358:14;:40:::0;-1:-1:-1;27283:123:0:o;26177:152::-;1633:7;1660:6;-1:-1:-1;;;;;1660:6:0;1088:10;1722:23;1714:68;;;;-1:-1:-1;;;1714:68:0;;;;;;;:::i;:::-;26271:16:::1;:4:::0;26278:9:::1;26271:16;:::i;:::-;26256:12;:31:::0;-1:-1:-1;26298:15:0::1;:23:::0;;-1:-1:-1;;26298:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26177:152::o;12052:110::-;1633:7;1660:6;-1:-1:-1;;;;;1660:6:0;1088:10;1722:23;1714:68;;;;-1:-1:-1;;;1714:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12119:27:0::1;12149:5;12119:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;12119:35:0::1;::::0;;12052:110::o;1912:192::-;1633:7;1660:6;-1:-1:-1;;;;;1660:6:0;1088:10;1722:23;1714:68;;;;-1:-1:-1;;;1714:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2001:22:0;::::1;1993:73;;;::::0;-1:-1:-1;;;1993:73:0;;17122:2:1;1993:73:0::1;::::0;::::1;17104:21:1::0;17161:2;17141:18;;;17134:30;17200:34;17180:18;;;17173:62;-1:-1:-1;;;17251:18:1;;;17244:36;17297:19;;1993:73:0::1;16920:402:1::0;1993:73:0::1;2077:19;2087:8;2077:9;:19::i;:::-;1912:192:::0;:::o;26051:114::-;1633:7;1660:6;-1:-1:-1;;;;;1660:6:0;1088:10;1722:23;1714:68;;;;-1:-1:-1;;;1714:68:0;;;;;;;:::i;:::-;26130:15:::1;:27:::0;;-1:-1:-1;;;;;;26130:27:0::1;-1:-1:-1::0;;;;;26130:27:0;;;::::1;::::0;;;::::1;::::0;;26051:114::o;17580:335::-;-1:-1:-1;;;;;17673:19:0;;17665:68;;;;-1:-1:-1;;;17665:68:0;;17529:2:1;17665:68:0;;;17511:21:1;17568:2;17548:18;;;17541:30;17607:34;17587:18;;;17580:62;-1:-1:-1;;;17658:18:1;;;17651:34;17702:19;;17665:68:0;17327:400:1;17665:68:0;-1:-1:-1;;;;;17752:21:0;;17744:68;;;;-1:-1:-1;;;17744:68:0;;17934:2:1;17744:68:0;;;17916:21:1;17973:2;17953:18;;;17946:30;18012:34;17992:18;;;17985:62;-1:-1:-1;;;18063:18:1;;;18056:32;18105:19;;17744:68:0;17732:398:1;17744:68:0;-1:-1:-1;;;;;17823:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;17875:32;;3885:25:1;;;17875:32:0;;3858:18:1;17875:32:0;;;;;;;17580:335;;;:::o;17923:2717::-;-1:-1:-1;;;;;18011:18:0;;18003:68;;;;-1:-1:-1;;;18003:68:0;;18337:2:1;18003:68:0;;;18319:21:1;18376:2;18356:18;;;18349:30;18415:34;18395:18;;;18388:62;-1:-1:-1;;;18466:18:1;;;18459:35;18511:19;;18003:68:0;18135:401:1;18003:68:0;-1:-1:-1;;;;;18090:16:0;;18082:64;;;;-1:-1:-1;;;18082:64:0;;18743:2:1;18082:64:0;;;18725:21:1;18782:2;18762:18;;;18755:30;18821:34;18801:18;;;18794:62;-1:-1:-1;;;18872:18:1;;;18865:33;18915:19;;18082:64:0;18541:399:1;18082:64:0;18174:1;18165:6;:10;18157:64;;;;-1:-1:-1;;;18157:64:0;;19147:2:1;18157:64:0;;;19129:21:1;19186:2;19166:18;;;19159:30;19225:34;19205:18;;;19198:62;-1:-1:-1;;;19276:18:1;;;19269:39;19325:19;;18157:64:0;18945:405:1;18157:64:0;18250:15;18260:4;18250:9;:15::i;:::-;18240:6;:25;;18232:86;;;;-1:-1:-1;;;18232:86:0;;19557:2:1;18232:86:0;;;19539:21:1;19596:2;19576:18;;;19569:30;19635:34;19615:18;;;19608:62;-1:-1:-1;;;19686:18:1;;;19679:47;19743:19;;18232:86:0;19355:413:1;18232:86:0;-1:-1:-1;;;;;18338:20:0;;;;;;:14;:20;;;;;;;;18337:21;:44;;;;-1:-1:-1;;;;;;18363:18:0;;;;;;:14;:18;;;;;;;;18362:19;18337:44;18329:89;;;;-1:-1:-1;;;18329:89:0;;19975:2:1;18329:89:0;;;19957:21:1;;;19994:18;;;19987:30;20053:34;20033:18;;;20026:62;20105:18;;18329:89:0;19773:356:1;18329:89:0;-1:-1:-1;;;;;18443:24:0;;;;;;:18;:24;;;;;;;;18442:25;:52;;;;-1:-1:-1;;;;;;18472:22:0;;;;;;:18;:22;;;;;;;;18471:23;18442:52;18439:128;;;18518:14;;;;18510:45;;;;-1:-1:-1;;;18510:45:0;;20336:2:1;18510:45:0;;;20318:21:1;20375:2;20355:18;;;20348:30;-1:-1:-1;;;20394:18:1;;;20387:48;20452:18;;18510:45:0;20134:342:1;18510:45:0;18600:6;;18582:15;:24;:40;;;;-1:-1:-1;18618:4:0;;-1:-1:-1;;;;;18610:12:0;;;18618:4;;18610:12;18582:40;18579:2034;;;18675:8;:17;;;;;;;-1:-1:-1;18675:17:0;;;;;;;;-1:-1:-1;;;;;;18675:17:0;-1:-1:-1;;;;;18675:17:0;;;;;18707:30;18675:17;18727:4;-1:-1:-1;;18707:8:0;:30::i;:::-;18752:46;18767:4;18773:2;18777:6;18785:5;18792;18752:14;:46::i;:::-;-1:-1:-1;;;;;18813:18:0;;;;;;:14;:18;;;;;:25;;-1:-1:-1;;18813:25:0;18834:4;18813:25;;;26821:107:::1;26726:209:::0;;:::o;18579:2034::-;18880:4;;-1:-1:-1;;;;;18872:12:0;;;18880:4;;18872:12;:39;;;;-1:-1:-1;;;;;;18889:22:0;;;;;;:18;:22;;;;;;;;18888:23;18872:39;:52;;;;-1:-1:-1;18916:8:0;;;;;;;18915:9;18872:52;18869:258;;;18962:11;;18952:6;:21;;18944:63;;;;-1:-1:-1;;;18944:63:0;;20683:2:1;18944:63:0;;;20665:21:1;20722:2;20702:18;;;20695:30;20761:31;20741:18;;;20734:59;20810:18;;18944:63:0;20481:353:1;18944:63:0;19060:14;;19050:6;19034:13;19044:2;19034:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;19026:85;;;;-1:-1:-1;;;19026:85:0;;21041:2:1;19026:85:0;;;21023:21:1;;;21060:18;;;21053:30;21119:34;21099:18;;;21092:62;21171:18;;19026:85:0;20839:356:1;19026:85:0;19166:4;;-1:-1:-1;;;;;19158:12:0;;;19166:4;;19158:12;;;;:39;;-1:-1:-1;;;;;;19175:22:0;;;;;;:18;:22;;;;;;;;19174:23;19158:39;:68;;;;-1:-1:-1;;;;;;19202:24:0;;;;;;:18;:24;;;;;;;;19201:25;19158:68;:81;;;;-1:-1:-1;19231:8:0;;;;;;;19230:9;19158:81;19155:613;;;19277:12;;19267:6;:22;;19259:65;;;;-1:-1:-1;;;19259:65:0;;21402:2:1;19259:65:0;;;21384:21:1;21441:2;21421:18;;;21414:30;21480:32;21460:18;;;21453:60;21530:18;;19259:65:0;21200:354:1;19259:65:0;19352:4;;-1:-1:-1;;;;;19346:10:0;;;19352:4;;19346:10;19343:142;;19414:14;;19404:6;19388:13;19398:2;19388:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;19380:85;;;;-1:-1:-1;;;19380:85:0;;21041:2:1;19380:85:0;;;21023:21:1;;;21060:18;;;21053:30;21119:34;21099:18;;;21092:62;21171:18;;19380:85:0;20839:356:1;19380:85:0;19506:15;;;;19503:250;;;-1:-1:-1;;;;;19584:15:0;;19545:18;19584:15;;;:9;:15;;;;;;19566:33;;:15;:33;:::i;:::-;19545:54;;19644:12;;19630:10;:26;;19622:55;;;;-1:-1:-1;;;19622:55:0;;21761:2:1;19622:55:0;;;21743:21:1;21800:2;21780:18;;;21773:30;-1:-1:-1;;;21819:18:1;;;21812:46;21875:18;;19622:55:0;21559:340:1;19622:55:0;-1:-1:-1;;;;;;19700:15:0;;;;;;:9;:15;;;;;19718;19700:33;;19503:250;19847:14;4461:1;19847:2;:14;:::i;:::-;19841:20;;:2;:20;:::i;:::-;19831:6;19813:15;19823:4;19813:9;:15::i;:::-;:24;;;;:::i;:::-;:48;;:67;;;;-1:-1:-1;1633:7:0;1660:6;-1:-1:-1;;;;;19865:15:0;;;1660:6;;19865:15;;19813:67;19810:130;;;19924:15;19934:4;19924:9;:15::i;:::-;19915:6;19898:14;4461:1;19898:2;:14;:::i;:::-;19893:19;;:2;:19;:::i;:::-;:28;;;;:::i;:::-;:46;;;;:::i;:::-;19882:58;;;;:::i;:::-;;;19810:130;19979:12;20022:18;;19994:24;20012:4;19994:9;:24::i;:::-;20059:8;;-1:-1:-1;;19994:46:0;;-1:-1:-1;20059:8:0;;;;;20058:9;:24;;;;-1:-1:-1;20071:11:0;;;;;;;20058:24;:35;;;;;20086:7;20058:35;:51;;;;-1:-1:-1;20105:4:0;;-1:-1:-1;;;;;20097:12:0;;;20105:4;;20097:12;;20058:51;:80;;;;-1:-1:-1;;;;;;20114:24:0;;;;;;:18;:24;;;;;;;;20113:25;20058:80;:107;;;;-1:-1:-1;;;;;;20143:22:0;;;;;;:18;:22;;;;;;;;20142:23;20058:107;20055:273;;;20194:4;;-1:-1:-1;;;;;20188:10:0;;;20194:4;;20188:10;20185:127;;;20216:18;;20201:45;;;;;;;;20236:9;20201:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20216:18;20201:14;:45::i;:::-;20185:127;;;20286:18;;20271:41;;;;;;;;20306:5;20271:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20286:18;20271:14;:41::i;:::-;20413:8;;20357:4;;20342:12;;20413:8;;;;;;:36;;-1:-1:-1;;;;;;20425:24:0;;;;;;:18;:24;;;;;;;;20413:36;:62;;;-1:-1:-1;;;;;;20453:22:0;;;;;;:18;:22;;;;;;;;20413:62;20410:82;;;20487:5;20477:15;;20410:82;20516:4;;-1:-1:-1;;;;;20510:10:0;;;20516:4;;20510:10;20507:28;;;-1:-1:-1;20531:4:0;20507:28;20552:49;20567:4;20573:2;20577:6;20585:7;20594:6;20552:14;:49::i;:::-;18854:1759;;;17923:2717;;;:::o;16866:158::-;16907:7;16928:15;16945;16964:19;:17;:19::i;:::-;16927:56;;-1:-1:-1;16927:56:0;-1:-1:-1;17001:15:0;16927:56;;17001:15;:::i;:::-;16994:22;;;;16866:158;:::o;14390:508::-;14476:36;;:::i;:::-;14537:37;14549:7;14558;14567:6;14537:11;:37::i;:::-;14525:49;;14694:53;14707:9;14718:7;14727;14736:10;:8;:10::i;:::-;14694:12;:53::i;:::-;14670:20;;;14585:162;14648:20;;;14585:162;14632:14;;;14585:162;14605:25;;;14585:162;;;14819:44;14586:9;14843:7;14852:10;:8;:10::i;:::-;14819:12;:44::i;:::-;14797:18;;;14758:105;14775:20;;;14758:105;14759:14;;;14758:105;14390:508;;;;;:::o;20723:1310::-;20847:28;20878:36;20889:7;20898;20907:6;20878:10;:36::i;:::-;-1:-1:-1;;;;;20931:19:0;;;;;;:11;:19;;;;;;20847:67;;-1:-1:-1;20931:19:0;;20927:115;;;-1:-1:-1;;;;;21007:15:0;;;;;;:7;:15;;;;;;:23;;21023:7;;21007:23;:::i;:::-;-1:-1:-1;;;;;20989:15:0;;;;;;:7;:15;;;;;:41;20927:115;-1:-1:-1;;;;;21056:22:0;;;;;;:11;:22;;;;;;;;21052:130;;;21153:17;;;;-1:-1:-1;;;;;21134:18:0;;;;;;:7;:18;;;;;;:36;;21153:17;21134:36;:::i;:::-;-1:-1:-1;;;;;21113:18:0;;;;;;:7;:18;;;;;:57;21052:130;21228:9;;-1:-1:-1;;;;;21212:15:0;;21228:9;21212:15;;;:7;:15;;;;;;:25;;21228:9;21212:25;:::i;:::-;-1:-1:-1;;;;;21194:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;21288:17;;;21269:18;;;;;;;;;;:36;;21288:17;21269:36;:::i;:::-;-1:-1:-1;;;;;21248:18:0;;;;;;:7;:18;;;;;;;:57;;;;21329:6;;;:10;;;:24;;;21352:1;21343;:6;;;:10;21329:24;21326:56;;;21355:27;21367:1;:6;;;21375:1;:6;;;21355:11;:27::i;:::-;21411:1;21396;:12;;;:16;:36;;;;21431:1;21416;:12;;;:16;21396:36;21393:225;;;21449:41;21464:1;:12;;;21477:1;:12;;;21449:14;:41::i;:::-;21535:4;-1:-1:-1;;;;;21510:96:0;21519:6;-1:-1:-1;;;;;21510:96:0;;21593:1;:12;;;21580:1;:10;;;21572:1;:6;;;21557:1;:12;;;21542:1;:12;;;:27;;;;:::i;:::-;:36;;;;:::i;:::-;:48;;;;:::i;:::-;:63;;;;:::i;:::-;21510:96;;3885:25:1;;;3873:2;3858:18;21510:96:0;;;;;;;21393:225;21646:1;21631;:12;;;:16;:36;;;;21666:1;21651;:12;;;:16;21631:36;21628:83;;;21669:42;21684:1;:12;;;21698:1;:12;;;21669:14;:42::i;:::-;21740:1;21725;:12;;;:16;:36;;;;21760:1;21745;:12;;;:16;21725:36;21722:83;;;21763:42;21778:1;:12;;;21792:1;:12;;;21763:14;:42::i;:::-;21828:1;21819;:6;;;:10;:24;;;;21842:1;21833;:6;;;:10;21819:24;21816:53;;;21845:24;21854:1;:6;;;21862:1;:6;;;21845:8;:24::i;:::-;21896:1;21883;:10;;;:14;:32;;;;21914:1;21901;:10;;;:14;21883:32;21880:73;;;21917:36;21930:1;:10;;;21942:1;:10;;;21917:12;:36::i;:::-;21986:9;-1:-1:-1;;;;;21969:46:0;21978:6;-1:-1:-1;;;;;21969:46:0;;21997:1;:17;;;21969:46;;;;3885:25:1;;3873:2;3858:18;;3739:177;21969:46:0;;;;;;;;20834:1199;20723:1310;;;;;:::o;2112:173::-;2168:16;2187:6;;-1:-1:-1;;;;;2204:17:0;;;-1:-1:-1;;;;;;2204:17:0;;;;;;2237:40;;2187:6;;;;;;;2237:40;;2168:16;2237:40;2157:128;2112:173;:::o;22506:1538::-;6491:8;:15;;-1:-1:-1;;6491:15:0;;;;;22687:14:::1;::::0;::::1;::::0;22672:12:::1;::::0;::::1;::::0;22661:8:::1;::::0;::::1;::::0;22644:14:::1;::::0;::::1;::::0;22627::::1;::::0;::::1;::::0;6491:15;;22687:14;22672:12;22661:8;22627:31:::1;::::0;::::1;:::i;:::-;:42;;;;:::i;:::-;:57;;;;:::i;:::-;:74;;;;:::i;:::-;22626:80;::::0;22705:1:::1;22626:80;:::i;:::-;22604:102;;22717:32;22787:11;22770:4;:14;;;22752:15;:32;;;;:::i;:::-;:46;;;;:::i;:::-;22717:81:::0;-1:-1:-1;22809:14:0::1;22826:42;22717:81:::0;22826:15;:42:::1;:::i;:::-;22809:59:::0;-1:-1:-1;22906:21:0::1;22940:24;22809:59:::0;22940:16:::1;:24::i;:::-;22977:20;23000:38;23024:14:::0;23000:21:::1;:38;:::i;:::-;22977:61;;23049:19;23100:4;:14;;;23086:11;:28;;;;:::i;:::-;23070:45;::::0;:12;:45:::1;:::i;:::-;23049:66;;23126:29;23172:4;:14;;;23158:11;:28;;;;:::i;:::-;23126:60:::0;-1:-1:-1;23202:25:0;;23199:158:::1;;23284:61;23297:24;23323:21;23284:12;:61::i;:::-;23410:14;::::0;::::1;::::0;23369:20:::1;::::0;23392:15:::1;:11:::0;23406:1:::1;23392:15;:::i;:::-;:32;;;;:::i;:::-;23369:55:::0;-1:-1:-1;23438:16:0;;23435:95:::1;;23478:15;::::0;23470:48:::1;::::0;-1:-1:-1;;;;;23478:15:0::1;23505:12:::0;23470:34:::1;:48::i;:::-;23575:8;::::0;::::1;::::0;23540:14:::1;::::0;23557:15:::1;:11:::0;23571:1:::1;23557:15;:::i;:::-;:26;;;;:::i;:::-;23540:43:::0;-1:-1:-1;23597:10:0;;23594:77:::1;;23631:9;::::0;23623:36:::1;::::0;-1:-1:-1;;;;;23631:9:0::1;23652:6:::0;23623:28:::1;:36::i;:::-;23730:12;::::0;::::1;::::0;23691:18:::1;::::0;23712:15:::1;:11:::0;23726:1:::1;23712:15;:::i;:::-;:30;;;;:::i;:::-;23691:51:::0;-1:-1:-1;23756:14:0;;23753:89:::1;;23794:13;::::0;23786:44:::1;::::0;-1:-1:-1;;;;;23794:13:0::1;23819:10:::0;23786:32:::1;:44::i;:::-;23903:14;::::0;::::1;::::0;23862:20:::1;::::0;23885:15:::1;:11:::0;23899:1:::1;23885:15;:::i;:::-;:32;;;;:::i;:::-;23862:55:::0;-1:-1:-1;23931:16:0;;23928:95:::1;;23971:15;::::0;23963:48:::1;::::0;-1:-1:-1;;;;;23971:15:0::1;23998:12:::0;23963:34:::1;:48::i;:::-;-1:-1:-1::0;;6529:8:0;:16;;-1:-1:-1;;6529:16:0;;;-1:-1:-1;;;;;;;;;;;22506:1538:0:o;17032:540::-;17129:7;;17165;;17082;;;;;17183:279;17207:9;:16;17203:20;;17183:279;;;17273:7;17249;:21;17257:9;17267:1;17257:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;17257:12:0;17249:21;;;;;;;;;;;;;:31;;:66;;;17308:7;17284;:21;17292:9;17302:1;17292:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;17292:12:0;17284:21;;;;;;;;;;;;;:31;17249:66;17245:97;;;17325:7;;17334;;17317:25;;;;;;;17032:540;;:::o;17245:97::-;17375:7;:21;17383:9;17393:1;17383:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;17383:12:0;17375:21;;;;;;;;;;;;;17367:29;;:7;:29;:::i;:::-;17357:39;;17429:7;:21;17437:9;17447:1;17437:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;17437:12:0;17429:21;;;;;;;;;;;;;17421:29;;:7;:29;:::i;:::-;17411:39;-1:-1:-1;17225:3:0;;;;:::i;:::-;;;;17183:279;;;;17494:7;;17486;;:15;;;;:::i;:::-;17476:7;:25;17472:56;;;17511:7;;17520;;17503:25;;;;;;17032:540;;:::o;17472:56::-;17547:7;;17556;;-1:-1:-1;17032:540:0;-1:-1:-1;17032:540:0:o;14906:732::-;14993:28;;:::i;:::-;15040:7;15036:86;;15062:17;;;:27;;;15102:8;;15036:86;15132:17;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15132:17:0;15163:6;15160:55;;;-1:-1:-1;15171:16:0;;;;;;;;15178:9;15171:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15160:55;;;-1:-1:-1;15203:12:0;;;;;;;;15210:5;15203:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15160:55;15253:8;;15262:3;;15245:16;;:7;:16;:::i;:::-;:20;;;;:::i;:::-;15236:6;;;:29;15299:14;;;;15314:3;;15291:22;;:7;:22;:::i;:::-;:26;;;;:::i;:::-;15276:12;;;:41;15351:14;;;;15366:3;;15343:22;;:7;:22;:::i;:::-;:26;;;;:::i;:::-;15328:12;;;:41;15397:8;;;;15406:3;;15389:16;;:7;:16;:::i;:::-;:20;;;;:::i;:::-;15380:6;;;:29;15443:14;;;;15458:3;;15435:22;;:7;:22;:::i;:::-;:26;;;;:::i;:::-;15420:12;;;:41;15493:12;;;;15506:3;;15485:20;;:7;:20;:::i;:::-;:24;;;;:::i;:::-;15472:10;;;:37;;;15588:12;;;;15581:6;;;;15568:12;;;;15555;;;;15548:6;;;;15540:14;;:7;:14;:::i;:::-;:27;;;;:::i;:::-;:40;;;;:::i;:::-;:47;;;;:::i;:::-;:60;;;;:::i;:::-;:71;;;;:::i;:::-;15520:17;;;:91;-1:-1:-1;14906:732:0;;;;;:::o;15646:796::-;15772:15;;;;;15887:19;15895:11;15887:7;:19;:::i;:::-;15877:29;;15923:7;15919:69;;-1:-1:-1;15952:7:0;;-1:-1:-1;15970:1:0;;-1:-1:-1;15970:1:0;;-1:-1:-1;15970:1:0;15945:31;;15919:69;16014:11;16007:1;:6;;;:18;;;;:::i;:::-;16000:25;;16062:11;16049:1;:12;;;:24;;;;:::i;:::-;16036:37;;16110:11;16097:1;:12;;;:24;;;;:::i;:::-;16084:37;;16132:12;16154:11;16147:1;:6;;;:18;;;;:::i;:::-;16132:33;;16176:18;16210:11;16197:1;:12;;;:24;;;;:::i;:::-;16176:45;;16232:16;16262:11;16251:1;:10;;;:22;;;;:::i;:::-;16232:41;-1:-1:-1;16232:41:0;16343:10;16338:4;16327:10;16316;16303:12;16311:4;16303:7;:12;:::i;:::-;:23;;;;:::i;:::-;:34;;;;:::i;:::-;:39;;;;:::i;:::-;:50;;;;:::i;:::-;:59;;;;:::i;:::-;16284:78;;16373:61;;;15646:796;;;;;;;;;;:::o;16454:404::-;16563:12;16576:18;16595:16;16630:7;16626:51;;-1:-1:-1;16659:1:0;;-1:-1:-1;16659:1:0;;-1:-1:-1;16659:1:0;16652:13;;16626:51;16703:11;16696:1;:6;;;:18;;;;:::i;:::-;16689:25;;16751:11;16738:1;:12;;;:24;;;;:::i;:::-;16725:37;;16795:11;16784:1;:10;;;:22;;;;:::i;:::-;16773:33;;16454:404;;;;;;;;:::o;12839:123::-;12917:4;12907:7;;:14;;;;;;;:::i;:::-;;;;-1:-1:-1;;12932:11:0;:22;;12950:4;;12932:11;:15;;:22;;12950:4;;12932:22;:::i;:::-;;;;-1:-1:-1;;;;12839:123:0:o;12970:284::-;13077:10;13053:11;:21;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;;13123:4:0;13103:26;;;;:11;:26;;;;;;;;13100:101;;;13171:4;13155:22;;;;:7;:22;;;;;:34;;13179:10;;13155:22;:34;;13179:10;;13155:34;:::i;:::-;;;;-1:-1:-1;;13100:101:0;13227:4;13211:22;;;;:7;:22;;;;;:35;;13236:10;;13211:22;:35;;13236:10;;13211:35;:::i;13262:284::-;13369:10;13345:11;:21;;;:34;;;;;;;:::i;14094:284::-;14201:10;14177:11;:21;;;:34;;;;;;;:::i;13558:242::-;13641:4;13623:11;:15;;;:22;;;;;;;:::i;13812:270::-;13911:8;13889:11;:19;;;:30;;;;;;;:::i;24555:562::-;24705:16;;;24719:1;24705:16;;;;;;;;24681:21;;24705:16;;;;;;;;;;-1:-1:-1;24705:16:0;24681:40;;24750:4;24732;24737:1;24732:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24732:23:0;;;:7;;;;;;;;;;:23;;;;24776:6;;:13;;;-1:-1:-1;;;24776:13:0;;;;:6;;;;;:11;;:13;;;;;24732:7;;24776:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24766:4;24771:1;24766:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24766:23:0;;;:7;;;;;;;;;:23;24834:6;;24802:53;;24819:4;;24834:6;24843:11;24802:8;:53::i;:::-;24894:6;;:215;;-1:-1:-1;;;24894:215:0;;-1:-1:-1;;;;;24894:6:0;;;;:57;;:215;;24966:11;;24894:6;;25036:4;;25063;;25083:15;;24894:215;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24052:495;24232:6;;24200:53;;24217:4;;-1:-1:-1;;;;;24232:6:0;24241:11;24200:8;:53::i;:::-;24296:6;;-1:-1:-1;;;;;24296:6:0;:22;24326:9;24359:4;24379:11;24296:6;;24491:7;1633;1660:6;-1:-1:-1;;;;;1660:6:0;;1587:87;24491:7;24296:243;;;;;;-1:-1:-1;;;;;;24296:243:0;;;-1:-1:-1;;;;;23504:15:1;;;24296:243:0;;;23486:34:1;23536:18;;;23529:34;;;;23579:18;;;23572:34;;;;23622:18;;;23615:34;23686:15;;;23665:19;;;23658:44;24513:15:0;23718:19:1;;;23711:35;23420:19;;24296:243:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3055:317::-;3170:6;3145:21;:31;;3137:73;;;;-1:-1:-1;;;3137:73:0;;24270:2:1;3137:73:0;;;24252:21:1;24309:2;24289:18;;;24282:30;24348:31;24328:18;;;24321:59;24397:18;;3137:73:0;24068:353:1;3137:73:0;3224:12;3242:9;-1:-1:-1;;;;;3242:14:0;3264:6;3242:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3223:52;;;3294:7;3286:78;;;;-1:-1:-1;;;3286:78:0;;24838:2:1;3286:78:0;;;24820:21:1;24877:2;24857:18;;;24850:30;24916:34;24896:18;;;24889:62;24987:28;24967:18;;;24960:56;25033:19;;3286:78:0;24636: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:315;1348:6;1356;1409:2;1397:9;1388:7;1384:23;1380:32;1377:52;;;1425:1;1422;1415:12;1377:52;1464:9;1451:23;1483:31;1508:5;1483:31;:::i;:::-;1533:5;1585:2;1570:18;;;;1557:32;;-1:-1:-1;;;1280:315:1:o;1792:127::-;1853:10;1848:3;1844:20;1841:1;1834:31;1884:4;1881:1;1874:15;1908:4;1905:1;1898:15;1924:275;1995:2;1989:9;2060:2;2041:13;;-1:-1:-1;;2037:27:1;2025:40;;2095:18;2080:34;;2116:22;;;2077:62;2074:88;;;2142:18;;:::i;:::-;2178:2;2171:22;1924:275;;-1:-1:-1;1924:275:1:o;2204:183::-;2264:4;2297:18;2289:6;2286:30;2283:56;;;2319:18;;:::i;:::-;-1:-1:-1;2364:1:1;2360:14;2376:4;2356:25;;2204:183::o;2392:737::-;2446:5;2499:3;2492:4;2484:6;2480:17;2476:27;2466:55;;2517:1;2514;2507:12;2466:55;2553:6;2540:20;2579:4;2603:60;2619:43;2659:2;2619:43;:::i;:::-;2603:60;:::i;:::-;2697:15;;;2783:1;2779:10;;;;2767:23;;2763:32;;;2728:12;;;;2807:15;;;2804:35;;;2835:1;2832;2825:12;2804:35;2871:2;2863:6;2859:15;2883:217;2899:6;2894:3;2891:15;2883:217;;;2979:3;2966:17;2996:31;3021:5;2996:31;:::i;:::-;3040:18;;3078:12;;;;2916;;2883:217;;;-1:-1:-1;3118:5:1;2392:737;-1:-1:-1;;;;;;2392:737:1:o;3134:118::-;3220:5;3213:13;3206:21;3199:5;3196:32;3186:60;;3242:1;3239;3232:12;3257:477;3347:6;3355;3408:2;3396:9;3387:7;3383:23;3379:32;3376:52;;;3424:1;3421;3414:12;3376:52;3464:9;3451:23;3497:18;3489:6;3486:30;3483:50;;;3529:1;3526;3519:12;3483:50;3552:61;3605:7;3596:6;3585:9;3581:22;3552:61;:::i;:::-;3542:71;;;3663:2;3652:9;3648:18;3635:32;3676:28;3698:5;3676:28;:::i;:::-;3723:5;3713:15;;;3257:477;;;;;:::o;3921:247::-;3980:6;4033:2;4021:9;4012:7;4008:23;4004:32;4001:52;;;4049:1;4046;4039:12;4001:52;4088:9;4075:23;4107:31;4132:5;4107:31;:::i;4173:456::-;4250:6;4258;4266;4319:2;4307:9;4298:7;4294:23;4290:32;4287:52;;;4335:1;4332;4325:12;4287:52;4374:9;4361:23;4393:31;4418:5;4393:31;:::i;:::-;4443:5;-1:-1:-1;4500:2:1;4485:18;;4472:32;4513:33;4472:32;4513:33;:::i;:::-;4173:456;;4565:7;;-1:-1:-1;;;4619:2:1;4604:18;;;;4591:32;;4173:456::o;4634:180::-;4693:6;4746:2;4734:9;4725:7;4721:23;4717:32;4714:52;;;4762:1;4759;4752:12;4714:52;-1:-1:-1;4785:23:1;;4634:180;-1:-1:-1;4634:180:1:o;5008:241::-;5064:6;5117:2;5105:9;5096:7;5092:23;5088:32;5085:52;;;5133:1;5130;5123:12;5085:52;5172:9;5159:23;5191:28;5213:5;5191:28;:::i;5254:388::-;5322:6;5330;5383:2;5371:9;5362:7;5358:23;5354:32;5351:52;;;5399:1;5396;5389:12;5351:52;5438:9;5425:23;5457:31;5482:5;5457:31;:::i;:::-;5507:5;-1:-1:-1;5564:2:1;5549:18;;5536:32;5577:33;5536:32;5577:33;:::i;5647:309::-;5712:6;5720;5773:2;5761:9;5752:7;5748:23;5744:32;5741:52;;;5789:1;5786;5779:12;5741:52;5825:9;5812:23;5802:33;;5885:2;5874:9;5870:18;5857:32;5898:28;5920:5;5898:28;:::i;5961:525::-;6047:6;6055;6063;6071;6124:3;6112:9;6103:7;6099:23;6095:33;6092:53;;;6141:1;6138;6131:12;6092:53;6180:9;6167:23;6199:31;6224:5;6199:31;:::i;:::-;6249:5;-1:-1:-1;6306:2:1;6291:18;;6278:32;6319:33;6278:32;6319:33;:::i;:::-;5961:525;;6371:7;;-1:-1:-1;;;;6425:2:1;6410:18;;6397:32;;6476:2;6461:18;6448:32;;5961:525::o;6491:248::-;6559:6;6567;6620:2;6608:9;6599:7;6595:23;6591:32;6588:52;;;6636:1;6633;6626:12;6588:52;-1:-1:-1;;6659:23:1;;;6729:2;6714:18;;;6701:32;;-1:-1:-1;6491:248:1:o;6744:382::-;6809:6;6817;6870:2;6858:9;6849:7;6845:23;6841:32;6838:52;;;6886:1;6883;6876:12;6838:52;6925:9;6912:23;6944:31;6969:5;6944:31;:::i;:::-;6994:5;-1:-1:-1;7051:2:1;7036:18;;7023:32;7064:30;7023:32;7064:30;:::i;7131:1138::-;7249:6;7257;7310:2;7298:9;7289:7;7285:23;7281:32;7278:52;;;7326:1;7323;7316:12;7278:52;7366:9;7353:23;7395:18;7436:2;7428:6;7425:14;7422:34;;;7452:1;7449;7442:12;7422:34;7475:61;7528:7;7519:6;7508:9;7504:22;7475:61;:::i;:::-;7465:71;;7555:2;7545:12;;7610:2;7599:9;7595:18;7582:32;7639:2;7629:8;7626:16;7623:36;;;7655:1;7652;7645:12;7623:36;7678:24;;;-1:-1:-1;7733:4:1;7725:13;;7721:27;-1:-1:-1;7711:55:1;;7762:1;7759;7752:12;7711:55;7798:2;7785:16;7821:60;7837:43;7877:2;7837:43;:::i;7821:60::-;7915:15;;;7997:1;7993:10;;;;7985:19;;7981:28;;;7946:12;;;;8021:19;;;8018:39;;;8053:1;8050;8043:12;8018:39;8077:11;;;;8097:142;8113:6;8108:3;8105:15;8097:142;;;8179:17;;8167:30;;8130:12;;;;8217;;;;8097:142;;;8258:5;8248:15;;;;;;;7131:1138;;;;;:::o;9022:309::-;9087:6;9095;9148:2;9136:9;9127:7;9123:23;9119:32;9116:52;;;9164:1;9161;9154:12;9116:52;9203:9;9190:23;9222:28;9244:5;9222:28;:::i;9559:356::-;9761:2;9743:21;;;9780:18;;;9773:30;9839:34;9834:2;9819:18;;9812:62;9906:2;9891:18;;9559:356::o;9920:347::-;10122:2;10104:21;;;10161:2;10141:18;;;10134:30;10200:25;10195:2;10180:18;;10173:53;10258:2;10243:18;;9920:347::o;10272:127::-;10333:10;10328:3;10324:20;10321:1;10314:31;10364:4;10361:1;10354:15;10388:4;10385:1;10378:15;10404:127;10465:10;10460:3;10456:20;10453:1;10446:31;10496:4;10493:1;10486:15;10520:4;10517:1;10510:15;10536:135;10575:3;-1:-1:-1;;10596:17:1;;10593:43;;;10616:18;;:::i;:::-;-1:-1:-1;10663:1:1;10652:13;;10536:135::o;11085:125::-;11125:4;11153:1;11150;11147:8;11144:34;;;11158:18;;:::i;:::-;-1:-1:-1;11195:9:1;;11085:125::o;11626:217::-;11666:1;11692;11682:132;;11736:10;11731:3;11727:20;11724:1;11717:31;11771:4;11768:1;11761:15;11799:4;11796:1;11789:15;11682:132;-1:-1:-1;11828:9:1;;11626:217::o;12200:127::-;12261:10;12256:3;12252:20;12249:1;12242:31;12292:4;12289:1;12282:15;12316:4;12313:1;12306:15;12332:128;12372:3;12403:1;12399:6;12396:1;12393:13;12390:39;;;12409:18;;:::i;:::-;-1:-1:-1;12445:9:1;;12332:128::o;13178:422::-;13267:1;13310:5;13267:1;13324:270;13345:7;13335:8;13332:21;13324:270;;;13404:4;13400:1;13396:6;13392:17;13386:4;13383:27;13380:53;;;13413:18;;:::i;:::-;13463:7;13453:8;13449:22;13446:55;;;13483:16;;;;13446:55;13562:22;;;;13522:15;;;;13324:270;;;13328:3;13178:422;;;;;:::o;13605:806::-;13654:5;13684:8;13674:80;;-1:-1:-1;13725:1:1;13739:5;;13674:80;13773:4;13763:76;;-1:-1:-1;13810:1:1;13824:5;;13763:76;13855:4;13873:1;13868:59;;;;13941:1;13936:130;;;;13848:218;;13868:59;13898:1;13889:10;;13912:5;;;13936:130;13973:3;13963:8;13960:17;13957:43;;;13980:18;;:::i;:::-;-1:-1:-1;;14036:1:1;14022:16;;14051:5;;13848:218;;14150:2;14140:8;14137:16;14131:3;14125:4;14122:13;14118:36;14112:2;14102:8;14099:16;14094:2;14088:4;14085:12;14081:35;14078:77;14075:159;;;-1:-1:-1;14187:19:1;;;14219:5;;14075:159;14266:34;14291:8;14285:4;14266:34;:::i;:::-;14336:6;14332:1;14328:6;14324:19;14315:7;14312:32;14309:58;;;14347:18;;:::i;:::-;14385:20;;13605:806;-1:-1:-1;;;13605:806:1:o;14416:131::-;14476:5;14505:36;14532:8;14526:4;14505:36;:::i;14552:168::-;14592:7;14658:1;14654;14650:6;14646:14;14643:1;14640:21;14635:1;14628:9;14621:17;14617:45;14614:71;;;14665:18;;:::i;:::-;-1:-1:-1;14705:9:1;;14552:168::o;15004:245::-;15071:6;15124:2;15112:9;15103:7;15099:23;15095:32;15092:52;;;15140:1;15137;15130:12;15092:52;15172:9;15166:16;15191:28;15213:5;15191:28;:::i;15658:140::-;15716:5;15745:47;15786:4;15776:8;15772:19;15766:4;15745:47;:::i;21904:251::-;21974:6;22027:2;22015:9;22006:7;22002:23;21998:32;21995:52;;;22043:1;22040;22033:12;21995:52;22075:9;22069:16;22094:31;22119:5;22094:31;:::i;22160:980::-;22422:4;22470:3;22459:9;22455:19;22501:6;22490:9;22483:25;22527:2;22565:6;22560:2;22549:9;22545:18;22538:34;22608:3;22603:2;22592:9;22588:18;22581:31;22632:6;22667;22661:13;22698:6;22690;22683:22;22736:3;22725:9;22721:19;22714:26;;22775:2;22767:6;22763:15;22749:29;;22796:1;22806:195;22820:6;22817:1;22814:13;22806:195;;;22885:13;;-1:-1:-1;;;;;22881:39:1;22869:52;;22976:15;;;;22941:12;;;;22917:1;22835:9;22806:195;;;-1:-1:-1;;;;;;;23057:32:1;;;;23052:2;23037:18;;23030:60;-1:-1:-1;;;23121:3:1;23106:19;23099:35;23018:3;22160:980;-1:-1:-1;;;22160:980:1:o;23757:306::-;23845:6;23853;23861;23914:2;23902:9;23893:7;23889:23;23885:32;23882:52;;;23930:1;23927;23920:12;23882:52;23959:9;23953:16;23943:26;;24009:2;23998:9;23994:18;23988:25;23978:35;;24053:2;24042:9;24038:18;24032:25;24022:35;;23757:306;;;;;:::o

Swarm Source

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