ETH Price: $2,466.68 (+0.93%)

Token

Fibonacci (FIB)
 

Overview

Max Total Supply

99,973,532.619190836234195103 FIB

Holders

13

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
stinknuts.eth
Balance
1,000,264.813986744252717693 FIB

Value
$0.00
0xfeff3e7e11782020cbca7d8372d5334264685cd4
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:
Fibonacci

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 1 of 2: Fibonacci.sol
// SPDX-License-Identifier: No License

import "./Library.sol";

pragma solidity ^0.8.7;



//Fibonacci Token (FIB). An innovative token originally invented by @Nov

// t.me/FibonacciToken

/*                                               @@@@...@@@...@@@@                              
                                          @@...............................@@                      
                                    @@..........................................@.                
                               @@...................................................@             
                            @..........................................................@          
                        @................................................................@         
                     @.....................................................................@       
                   @.........................................................................&     
                 @............................................................................@    
              @................................................................................@   
             @..................................................................................@  
           @.....................................................................................@ 
          @.......................................................................................@ 
        @.........................................................................................@ 
       @..........................................................................................@ 
      @.......................................................    @@@.@..@  ,,,,,,,,,,,,,,,,,,,,,,@ 
     @........................................................ @....@.... @,,,,,,,,,,,,,,,,,,,,,,@ 
    @........................................................@......@..,,, @,,,,,,,,,,,,,,,,,,,,,@  
   @........................................................@........@@,@  ,,,,,,,,,,,,,,,,,,,,@   
  @.........................................................@..............,,,,,,,,,,,,,,,,,,,@    
  @..........................................................@.............,,,,,,,,,,,,,,,,,@      
 @........................................................... @............,,,,,,,,,,,,,,,@        
 @...........................................................   @..........,,,,,,,,,,,,,@          
 @...........................................................      @.......,,,,,,,,@@              
 
 
 
 
 */

//Update this version also has increasing fees that resets in a certain amount of time (1 day default) from your last sell or tx.
                                                                                                    
//Fiobonacci Token is a token that does not let price drop below a certain point 0.618 ratio from ATH for default.
//Every new ATH sets the price floor a new high, So price will be lifted at all times.
//This is against BNB not any stable token is BNB price drops any chart indicator will show you price is dropped below the threshold, this is not the case 
//Please look BNB pairing for charts not USD if you wanna see the real movements against BNB.

//Also apart from that , there is increased tax for investors who sell at close or at ATH. (About %5 percent near ATH).

//From psychological point of view I concluded these results:

//Token is self "marketing" or "shilling" , If you bought this token and price is below a certain point you will need other people to invest to gain access to your funds.
//So , any normal investor would "shill" their token to others , this would create a snowball effect and cycle would repeat with more people everytime.
//Normally when a token's price crashes people would just accept it and move on , this is not the case here.

//Selling close to ATH is a %12.5 percent loss for the maker. So any logical person would wait others to drop the price %5 percent before selling
//But if most people thinks like that amount of sell pressure at ATH is lowered by a lot.



//There is classic reflection and liquidity and burn traits of token which you can see below ( default is %0.5 , %3 , %0.5)
//Max wallet is %1.
//I do have a small dev fee %0.5 , but can be increased to 1.5% if something happens and i need funds for the token , (Maybe a marketing , or a new liquidity for other DEX etc.);
//I cannot increase dev fees beyond 1.5% contract does not allow that.

//Invest only what you can afford to lose.
//Price might be mathematically set to increase , BUT IF NO ONE BUYS THE TOKEN IT WILL STUCK !!!! BE CAREFUL WITH YOUR INVESTMENTS!!!.

//This is an experiment on BSC.Lets see if it goes viral.

//Disclaimer: By acquiring this token , you accept your own risks.

contract Fibonacci is Context, IBEP20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    using EnumerableSet for EnumerableSet.AddressSet;

    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;


    mapping(address => uint256) private _dumpTaxes;
    mapping(address => uint256) private _dumpTaxesBlockTime;


    uint256 private constant MAX_EXCLUDED = 1024;
    EnumerableSet.AddressSet private _isExcludedFromReward;
    EnumerableSet.AddressSet private _isExcludedFromFee;
    EnumerableSet.AddressSet private _isExcludedFromSwapAndLiquify;

    EnumerableSet.AddressSet private _isBlackListed;
    EnumerableSet.AddressSet private _isWhiteListed;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 100000000 * 10**18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));

    uint256 private _tFeeTotal;
    uint256 private _tBurnTotal;

    string private constant _name = "Fibonacci";
    string private constant _symbol = "FIB";
    uint8 private constant _decimals = 18;

    uint256 public _taxFeeVariable = 0;
    uint256 public _liquidityFeeVariable = 0;
    uint256 public _devFeeVariable = 0;
    uint256 public _burnFeeVariable = 0;


    uint256 public _taxFee = 0;
    uint256 public _liquidityFee = 0;
    uint256 public _devFee = 0;
    uint256 public _burnFee = 0;
    
    uint256 public _maxWalletSize = (_tTotal * 1) / 100; 
    
    uint256 private constant TOTAL_FEES_LIMIT = 2000;
    
    uint256 private constant DEV_FEES_LIMIT = 150;  //If needed.

    uint256 private constant MIN_TX_LIMIT = 100;
    uint256 public _maxTxAmount = 100000000 * 10**18;
    uint256 public _numTokensSellToAddToLiquidity = 20000 * 10**18;

    uint256 private _totalDevFeesCollected = 0;

    //Fibonacci Variables
    //They are multipled by 4 adding for Liq , Reflection , Burn and Dev fee.

    uint256 private constant ATH_DUMPER_FEE_MIN_LIMIT = 250;
    uint256 private constant ATH_DUMPER_FEE_MAX_LIMIT = 550;
    uint256 public _ATHDumperBurnAdd = 350;
 
    //Activates ATH Burn (max 17.5 percent.)
    uint256 private constant MIN_PER_ATH_LIMIT = 835;
    uint256 private constant MAX_PER_ATH_LIMIT = 975; 
    uint256 public PER_ATH_BURN_ACTIVATE = 950;
    
    uint256 _ATHPriceINBNB = 1000;
    
    //CurrentPrice but multipled by 10**20
    uint256 PriceNow = 1;
    uint256 MultPrecision = 10**20;
    
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    
    //Golden ratio cannot be set higher than 619. MAX is just in case something fail, halves the floor price.
    //1/3 = 3.333 MAX so this token only can drop 66 percent at ALL costs. (Against BNB)
    
    
    uint256 private constant  GoldenRatioDMAX = 333;
    //1/1.618 = 0.618 (Math is interesting)
    uint256 public  GoldenRatioDivider = 618 ;
    //Cant be honeypot
    uint256 private constant GoldenRatioDMIN = 900;
    uint256 private RatioNow = 1000;

    // Liquidity
    bool public _swapAndLiquifyEnabled = true;
    bool private _inSwapAndLiquify;

    IUniswapV2Router02 public _uniswapV2Router;
    address public _uniswapV2Pair;
    IUniswapV2Pair public uniSwapV2PairContract;


    address public pancakeRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;//0x10ED43C718714eb63d5aA57B78B54704E256024E;
   

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 bnbReceived,
        uint256 tokensIntoLiqudity
    );
    event DevFeesCollected(uint256 bnbCollected);

    modifier lockTheSwap() {
        _inSwapAndLiquify = true;
        _;
        _inSwapAndLiquify = false;
    }

    constructor(address cOwner) Ownable(cOwner) {
        _rOwned[cOwner] = _rTotal;

        // Create a uniswap pair for this new token
        IUniswapV2Router02 uniswapV2Router = IUniswapV2Router02(pancakeRouter);
        _uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        _uniswapV2Router = uniswapV2Router;

        // Exclude system addresses from fee
        
         IUniswapV2Pair pairContract = IUniswapV2Pair(_uniswapV2Pair);
         uniSwapV2PairContract = pairContract;
        
        _isExcludedFromFee.add(owner());
        _isExcludedFromFee.add(address(this));
        _isExcludedFromSwapAndLiquify.add(_uniswapV2Pair);

        _isWhiteListed.add(address(this));
        _isWhiteListed.add(_uniswapV2Pair);
        _isWhiteListed.add(owner());


        _taxesForEachSell[0] = 25;
        _taxesForEachSell[1] = 75;
        _taxesForEachSell[2] = 175;
        _taxesForEachSell[3] = 180;
        _taxesForEachSell[4] = 200;
        _taxesForEachSell[5] = 350;
        _taxesForEachSell[6] = 740;
        _taxesForEachSell[7] = 1180;
        _taxesForEachSell[8] = 2500;
        _taxesForEachSell[9] = 12500;

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

    receive() external payable {}

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

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

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcludedFromReward.contains(account)) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }
    
    
    //Fibonacci Price Checker Future
    function setPriceOfTokenSellFuture(uint256 soldBNB,uint256 golden) internal returns (uint256){

        uint256 FibonacciSupply; uint256 WBNB;

        //For some reason this gets swapped at every added liq.
       (uint256 token0,uint256 token1, uint256 blocktimestamp) = uniSwapV2PairContract.getReserves();
        
       if(token0 > token1){
           FibonacciSupply = token0;
            WBNB = token1;

       }
         else{
        
        FibonacciSupply = token1;
            WBNB = token0;
        
        }

        FibonacciSupply = FibonacciSupply.add(golden);
        WBNB = WBNB.sub(soldBNB);
        //Lets not blow up.
        if(FibonacciSupply == 0){
            
            return 1;
        }
        
        //Multipled by 10**20 to make division right;
         uint256 priceINBNB = (WBNB.mul(MultPrecision)).div(FibonacciSupply);
         
         
         if(priceINBNB > _ATHPriceINBNB){
             _ATHPriceINBNB = priceINBNB;
         }
         
         
        RatioNow = (priceINBNB.mul(1000)).div(_ATHPriceINBNB);
         
        return priceINBNB;
         
    } 


      function setPriceOfTokenBoughtFuture(uint256 addedBNB,uint256 soldgolden) internal returns (uint256){
        uint256 FibonacciSupply; uint256 WBNB;
    
        //For some reason this gets swapped at every added liq.
       (uint256 token0,uint256 token1, uint256 blocktimestamp) = uniSwapV2PairContract.getReserves();
        
        
       if(token0 > token1){
           FibonacciSupply = token0;
            WBNB = token1;

       }
         else{
        
        FibonacciSupply = token1;
            WBNB = token0;
        
        }


       FibonacciSupply = FibonacciSupply.sub(soldgolden);
       WBNB = WBNB.add(addedBNB);
        //Lets not blow up.
        if(FibonacciSupply == 0){
            
            return 1;
        }
        
        //Multipled by 10**20 to make division right;
         uint256 priceINBNB = (WBNB.mul(MultPrecision)).div(FibonacciSupply);
         
         
         if(priceINBNB > _ATHPriceINBNB){
             _ATHPriceINBNB = priceINBNB;
         }
         
         
        RatioNow = (priceINBNB.mul(1000)).div(_ATHPriceINBNB);
         
        return priceINBNB;
         
    } 


    function getPriceOfTokenNow() public view returns (uint256,uint256){
        return (RatioNow,_ATHPriceINBNB);        
    } 
    
    function getPriceOfTokenFuture(uint256 substractedBNB,uint256 addedGoldenRatio) public view returns (uint256){
              uint256 FibonacciSupply; uint256 WBNB;

        //For some reason this gets swapped at every added liq.
       (uint256 token0,uint256 token1, uint256 blocktimestamp) = uniSwapV2PairContract.getReserves();
        
        
       if(token0 > token1){
           FibonacciSupply = token0;
            WBNB = token1;
       }
         else{
        FibonacciSupply = token1;
            WBNB = token0;
        }
        //Lets not blow up.
        if(FibonacciSupply == 0){
            
            return 1;
        }

        //Multipled by 10**20 to make division right;
        uint256 totalGNow = FibonacciSupply.add(addedGoldenRatio);
        uint256 priceINBNB = ((WBNB.sub(substractedBNB)).mul(MultPrecision)).div(totalGNow);

        return priceINBNB;

    } 


    //10 is 1 percent.
    function setMaxWalletSize(uint256 maxWallet) external onlyOwner{
        require(maxWallet >= 10 , "Can't decerease maxwallet more than that.");
        _maxWalletSize = (_tTotal * maxWallet) / 10000; 

    }
    
    function setGoldenRatio(uint256 ratio) external onlyOwner{
        require(ratio > GoldenRatioDMAX,"Fibonacci cannot be lower than this.");
        require(ratio <= GoldenRatioDMIN,"Fibonacci cannot be higher than this.");
        GoldenRatioDivider = ratio;       

    }
    function setATHDumperFee(uint256 fee) external onlyOwner {
        require(fee <= ATH_DUMPER_FEE_MAX_LIMIT,"I know you want to punish them , but they are human too.");
        require(fee >= ATH_DUMPER_FEE_MIN_LIMIT, "I ain't that merciful.");
         _ATHDumperBurnAdd = fee;
    }

    function setATHDumperMaxPercent(uint256 feePercent) external onlyOwner {
        require(feePercent <= MAX_PER_ATH_LIMIT,"Can't increase ATH sell tax percentage more than this.");
        require(feePercent >= MIN_PER_ATH_LIMIT, "Can't decrease ATH sell tax percentage more than this.");
         PER_ATH_BURN_ACTIVATE = feePercent;
    }
    
    function transfer(address recipient, uint256 amount)
        public
        override
        returns (bool)
    {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        require(owner != address(0), "BEP20: approve from the zero address");
        require(spender != address(0), "BEP20: approve to the zero address");

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "BEP20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(
                subtractedValue,
                "BEP20: decreased allowance below zero"
            )
        );
        return true;
    }

    // REFLECTION
    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(
            !_isExcludedFromReward.contains(sender),
            "Excluded addresses cannot call this function"
        );

        (, uint256 tFee, uint256 tLiquidity, uint256 tBurn) = _getTValues(
            tAmount
        );
        uint256 currentRate = _getRate();
        (uint256 rAmount, , ) = _getRValues(
            tAmount,
            tFee,
            tLiquidity,
            tBurn,
            currentRate
        );

        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee)
        public
        view
        returns (uint256)
    {
        require(tAmount <= _tTotal, "Amount must be less than supply");

        if (!deductTransferFee) {
            (, uint256 tFee, uint256 tLiquidity, uint256 tBurn) = _getTValues(
                tAmount
            );
            uint256 currentRate = _getRate();
            (uint256 rAmount, , ) = _getRValues(
                tAmount,
                tFee,
                tLiquidity,
                tBurn,
                currentRate
            );

            return rAmount;
        } else {
            (, uint256 tFee, uint256 tLiquidity, uint256 tBurn) = _getTValues(
                tAmount
            );
            uint256 currentRate = _getRate();
            (, uint256 rTransferAmount, ) = _getRValues(
                tAmount,
                tFee,
                tLiquidity,
                tBurn,
                currentRate
            );

            return rTransferAmount;
        }
    }

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

        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner {
        require(
            !_isExcludedFromReward.contains(account),
            "Account is already excluded in reward"
        );
        require(
            _isExcludedFromReward.length() < MAX_EXCLUDED,
            "Excluded reward set reached maximum capacity"
        );

        if (_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcludedFromReward.add(account);
    }

    function includeInReward(address account) external onlyOwner {
        require(
            _isExcludedFromReward.contains(account),
            "Account is already included in reward"
        );

        _isExcludedFromReward.remove(account);
        _tOwned[account] = 0;
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function totalBurn() public view returns (uint256) {
        return _tBurnTotal;
    }

    function devPercentageOfLiquidity() public view returns (uint256) {
        return (_devFee * 10000) / (_devFee.add(_liquidityFee));
    }

    /**
        @dev This is the portion of liquidity that will be sent to the uniswap router.
        Dev fees are considered part of the liquidity conversion.
     */
    function pureLiquidityPercentage() public view returns (uint256) {
        return (_liquidityFee * 10000) / (_devFee.add(_liquidityFee));
    }

    function totalDevFeesCollected() external view onlyDev returns (uint256) {
        return _totalDevFeesCollected;
    }

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee.add(account);
    }

    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee.remove(account);
    }

    function setTaxFeePercent(uint256 taxFee) external onlyOwner {
        require(
            taxFee.add(_liquidityFee).add(_devFee).add(_burnFee) <=
                TOTAL_FEES_LIMIT,
            "Total fees can not exceed the declared limit"
        );
        _taxFee = taxFee;
    }

    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner {
        require(
            _taxFee.add(liquidityFee).add(_devFee).add(_burnFee) <=
                TOTAL_FEES_LIMIT,
            "Total fees can not exceed the declared limit"
        );
        _liquidityFee = liquidityFee;
    }

    function setDevFeePercent(uint256 devFee) external onlyOwner {
        require(
            devFee <= DEV_FEES_LIMIT,
            "Dev fees can not exceed the declared limit"
        );
        require(
            _taxFee.add(_liquidityFee).add(devFee).add(_burnFee) <=
                TOTAL_FEES_LIMIT,
            "Total fees can not exceed the declared limit"
        );
        _devFee = devFee;
    }

    function setBurnFeePercent(uint256 burnFee) external onlyOwner {
        require(
            _taxFee.add(_liquidityFee).add(_devFee).add(burnFee) <=
                TOTAL_FEES_LIMIT,
            "Total fees can not exceed the declared limit"
        );
        _burnFee = burnFee;
    }

    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner {
        require(
            maxTxPercent <= 10000,
            "Maximum transaction limit percentage can't be more than 100%"
        );
        require(
            maxTxPercent >= MIN_TX_LIMIT,
            "Maximum transaction limit can't be less than the declared limit"
        );
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(10000);
    }

    function setMinLiquidityPercent(uint256 minLiquidityPercent)
        external
        onlyOwner
    {
        require(
            minLiquidityPercent <= 10000,
            "Minimum liquidity percentage percentage can't be more than 100%"
        );
        require(
            minLiquidityPercent > 0,
            "Minimum liquidity percentage percentage can't be zero"
        );
        _numTokensSellToAddToLiquidity = _tTotal.mul(minLiquidityPercent).div(
            10000
        );
    }

    function setSwapAndLiquifyEnabled(bool enabled) public onlyOwner {
        _swapAndLiquifyEnabled = enabled;
        emit SwapAndLiquifyEnabledUpdated(enabled);
    }

    function isExcludedFromFee(address account) public view returns (bool) {
        return _isExcludedFromFee.contains(account);
    }

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcludedFromReward.contains(account);
    }

    function setIsExcludedFromSwapAndLiquify(address a, bool b)
        external
        onlyOwner
    {
        if (b) {
            _isExcludedFromSwapAndLiquify.add(a);
        } else {
            _isExcludedFromSwapAndLiquify.remove(a);
        }
    }

    function setUniswapRouter(address r) external onlyOwner {
        IUniswapV2Router02 uniswapV2Router = IUniswapV2Router02(r);
        _uniswapV2Router = uniswapV2Router;
    }

    function setUniswapPair(address p) external onlyOwner {
        _uniswapV2Pair = p;
    }
    

    // TRANSFER
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "BEP20: transfer from the zero address");
        require(to != address(0), "BEP20: transfer to the zero address");
        require(to != devWallet(), "Dev wallet address cannot receive tokens");
        require(from != devWallet(), "Dev wallet address cannot send tokens");
        require(amount > 0, "Transfer amount must be greater than zero");

        if (from != owner() && to != owner()) {
            require(
                amount <= _maxTxAmount,
                "Transfer amount exceeds the maxTxAmount."
            );
        }

        /*
            - swapAndLiquify will be initiated when token balance of this contract
            has accumulated enough over the minimum number of tokens required.
            - don't get caught in a circular liquidity event.
            - don't swapAndLiquify if sender is uniswap pair.
        */

        uint256 contractTokenBalance = balanceOf(address(this));

        if (contractTokenBalance >= _maxTxAmount) {
            contractTokenBalance = _maxTxAmount;
        }

        bool isOverMinTokenBalance = contractTokenBalance >=
            _numTokensSellToAddToLiquidity;
        if (
            isOverMinTokenBalance &&
            !_inSwapAndLiquify &&
            !_isExcludedFromSwapAndLiquify.contains(from) &&
            _swapAndLiquifyEnabled
        ) {
            swapAndLiquify(_numTokensSellToAddToLiquidity);
        }

        bool takeFee = true;
        if (
            _isExcludedFromFee.contains(from) || _isExcludedFromFee.contains(to)
        ) {
            takeFee = false;
        }
        _tokenTransfer(from, to, amount, takeFee);
    }

    function collectDevFees() public onlyDev {
        _totalDevFeesCollected = _totalDevFeesCollected.add(
            address(this).balance
        );
        devWallet().transfer(address(this).balance);
        emit DevFeesCollected(address(this).balance);
    }

    function swapAndLiquify(uint256 tokenAmount) private lockTheSwap {
        // This variable holds the liquidity tokens that won't be converted
        uint256 liqTokens = tokenAmount.mul(pureLiquidityPercentage()).div(
            20000
        );
        // Everything else from the tokens should be converted
        uint256 tokensForBnbExchange = tokenAmount.sub(liqTokens);
        // This would be in the non-percentage form, 0 (0%) < devPortion < 10000 (100%)
        // The devPortion here indicates the portion of the converted tokens (BNB) that
        // would be assigned to the devWallet
        uint256 devPortion = tokenAmount.mul(devPercentageOfLiquidity()).div(
            tokensForBnbExchange
        );

        uint256 initialBalance = address(this).balance;

        swapTokensForBnb(tokensForBnbExchange);

        // How many BNBs did we gain after this conversion?
        uint256 gainedBnb = address(this).balance.sub(initialBalance);

        // Calculate the amount of BNB that's assigned to devWallet
        uint256 balanceToDev = (gainedBnb.mul(devPortion)).div(10000);
        // The leftover BNBs are purely for liquidity
        uint256 liqBnb = gainedBnb.sub(balanceToDev);

        addLiquidity(liqTokens, liqBnb);

        emit SwapAndLiquify(tokensForBnbExchange, liqBnb, liqTokens);
    }

    function swapTokensForBnb(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _uniswapV2Router.WETH();

        _approve(address(this), address(_uniswapV2Router), tokenAmount);
        _uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 bnbAmount) private {
        // Approve token transfer to cover all possible scenarios
        _approve(address(this), address(_uniswapV2Router), tokenAmount);

        // Add the liquidity
        _uniswapV2Router.addLiquidityETH{value: bnbAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            lockedLiquidity(),
            block.timestamp
        );
    }

    //These are required for adding Liq and potential save mechanism if something fails
    //When shutdowncancel activated Owner can no longer interfere.
    bool AthThingEnabled = true;

    function setFeesToZero() external onlyOwner{
        
        _taxFeeVariable = 0;
        _liquidityFeeVariable = 0;
        _devFeeVariable = 0;
        _burnFeeVariable = 0;

    }

    function setFeesBackToDefault() external onlyOwner{

        _taxFee = 50;
        _liquidityFee = 300;
        _devFee = 150;
        _burnFee = 50;
   

    }

    function setFeesBackToNormalInternal() internal {

        _taxFeeVariable = _taxFee;
        _liquidityFeeVariable = _liquidityFee;
        _devFeeVariable = _devFee;
        _burnFeeVariable = _burnFee;
   

    }

    function setATHthingEnabled(bool isit) external onlyOwner{
        AthThingEnabled = isit;
    }

    function setFeeResetTime(uint256 time) external onlyOwner{
        feeResetTime = time;
    }

    uint256 feeResetTime = 60*60*24*14; //2 Weeks
    bool cancelSellConstraints  = false;
    bool canCancel = true;

    function ShutDownCancel() external onlyOwner{
        cancelSellConstraints = true;
        canCancel = false;
    }
    function setSellContraints(bool what) external onlyOwner{
        if(canCancel){
            cancelSellConstraints = what;
        }
    }

    //Sets increasing tax enabled.
    bool private increasingTax = false;
    function setIncreasingTaxForSellsEnabled(bool what) external onlyOwner{
        if(canCancel){
        increasingTax = what;
        }
    }

    //If something fails and tax are getting added constantly this function will be activated.
    bool private setToNormalOnSomeError  = false;
        function setToNormalOnAnyError(bool what) external onlyOwner{
        setToNormalOnSomeError = what;
    }

    function addATHFees() internal returns (bool) {
        bool ATHsAdded = false;
        if(AthThingEnabled){
        if(RatioNow > PER_ATH_BURN_ACTIVATE){   
             ATHsAdded = true;            
             _liquidityFeeVariable += _ATHDumperBurnAdd;
             _burnFeeVariable += _ATHDumperBurnAdd;
             _taxFeeVariable += _ATHDumperBurnAdd;
             _devFeeVariable += _ATHDumperBurnAdd;
                }
              }
        return ATHsAdded;  
    
    }
    
    mapping(uint256 => uint256) private _taxesForEachSell;

    function setTaxesByAmount(uint256 taxnumber,uint256 tax) external onlyOwner{
        _taxesForEachSell[taxnumber] = tax; 
    }

    function setTaxesToDefaultForSellTaxes() external onlyOwner(){
        _taxesForEachSell[0] = 25;
        _taxesForEachSell[1] = 55;
        _taxesForEachSell[2] = 60;
        _taxesForEachSell[3] = 120;
        _taxesForEachSell[4] = 180;
        _taxesForEachSell[5] = 350;
        _taxesForEachSell[6] = 740;
        _taxesForEachSell[7] = 1180;
        _taxesForEachSell[8] = 2500;
        _taxesForEachSell[9] = 12500;
    }

    function getMyTaxInformation () view public returns (uint256 myTx,uint256 tax,uint256 leftTime){
        uint256 blocktime = block.timestamp;
        uint256 currentSellTaxNumber = _dumpTaxes[msg.sender];
        uint256 currentBlockTimeSeller = _dumpTaxesBlockTime[msg.sender];
        uint256 time = 0;
        uint256 addedTaxesTotal = _taxesForEachSell[currentSellTaxNumber];
        if(blocktime > currentBlockTimeSeller){
            time = blocktime.sub(currentBlockTimeSeller);
         }
        
        if(addedTaxesTotal == 0 && currentSellTaxNumber > 3){
                        addedTaxesTotal = maxSellTax;

                    }
        return (currentSellTaxNumber,addedTaxesTotal,time);
    }

    uint256 private maxSellTax = 12500;

    function setMaxSellTax(uint256 maxTax) external onlyOwner {
        maxSellTax = maxTax;
    }

    function addIncreasedTaxes(address sender) internal{
        uint256 blocktime = block.timestamp;
        uint256 currentSellTaxNumber = _dumpTaxes[sender];
        uint256 currentBlockTimeSeller = _dumpTaxesBlockTime[sender];
        uint256 addedTaxesTotal = 0;

        if(increasingTax){
              if(sender != _uniswapV2Pair){
                if(blocktime > currentBlockTimeSeller){

                    uint256 left = blocktime.sub(currentBlockTimeSeller);
                    _dumpTaxesBlockTime[sender] = blocktime;
                    addedTaxesTotal = _taxesForEachSell[currentSellTaxNumber];
                    if(addedTaxesTotal == 0 && currentSellTaxNumber > 3){
                        addedTaxesTotal = maxSellTax;
                    }

                    if(left >= feeResetTime){
                        _dumpTaxes[sender] = 0;
                        addedTaxesTotal = 0;
                    }
                     if(left < feeResetTime){
                        _dumpTaxes[sender] = currentSellTaxNumber + 1;
                    }

                }
                }
              }

         _liquidityFeeVariable += addedTaxesTotal;
         _burnFeeVariable += addedTaxesTotal;
         _taxFeeVariable += addedTaxesTotal;
         _devFeeVariable += addedTaxesTotal;      

    }

    function removeTaxes(uint256 taxes) internal{
            if(_liquidityFeeVariable >= taxes){
             _liquidityFeeVariable = _liquidityFeeVariable - taxes;
            }
            if(_burnFeeVariable >= taxes){
             _burnFeeVariable = _burnFeeVariable - taxes; 
            }
            if(_taxFeeVariable >= taxes){
             _taxFeeVariable = _taxFeeVariable - taxes; 
            }
            if(_devFeeVariable >= taxes){
             _devFeeVariable = _devFeeVariable - taxes;
            }
    }


    bool whitelistEnabled = false;
    bool blacklistEnabled = false;

    function addToWhiteList(address added) external onlyOwner
    {
        _isWhiteListed.add(added);
    }


    function addToBlackList(address added) external onlyOwner
    {
        _isBlackListed.add(added);
    }

    function setWhitelistEnabled(bool whitelist) external onlyOwner {
        whitelistEnabled = whitelist;
    }

    function setBlackListEnabled(bool blacklist) external onlyOwner {
        blacklistEnabled = blacklist;
    }
    bool private removeDevM = false;
    function removeDevMode () external onlyOwner{
        removeDevM = true;
        devMod = false;


    }
    bool private devMod = true;
    function devMode(bool buys) external onlyOwner
    {
        require(!removeDevM,"Dev mode is closed forever.");
        devMod = buys;
    }


    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee
    ) private {
        

        //Checking _maxWalletSize
        if(!devMod){  
        if (recipient != _uniswapV2Pair && recipient != DEAD && recipient != pancakeRouter ) {

            require(balanceOf(recipient) + amount <= _maxWalletSize, "Transfer amount exceeds the max size.");
            
        }
        }
        //BlackList
        if(blacklistEnabled){
            require(!_isBlackListed.contains(sender) , "Address is blacklisted.");
            require(!_isBlackListed.contains(recipient) , "Address is blacklisted.");
        }
         //Whitelist
        if(whitelistEnabled){
            require(_isWhiteListed.contains(sender) , "Address is not whitelisted.");
            require(_isWhiteListed.contains(recipient) , "Address is not whitelisted.");
        }
        
        //Cancels liq additions while devmod is on.
        if(devMod){  
            if(recipient == _uniswapV2Pair){
                require(sender == owner(),"Only owner can add liq.");
            }

        }
        
        //Adding ATH sell fee and sell constraints
        if(recipient == _uniswapV2Pair && cancelSellConstraints){ //IF selling
            
              address[] memory path = new address[](2);
                path[0] = address(this);
                path[1] = _uniswapV2Router.WETH();
                
               uint256 WillbedrainedBNB = _uniswapV2Router.getAmountsOut(amount,path)[1];
               uint256 futurePrice = getPriceOfTokenFuture(WillbedrainedBNB,amount);
               
               
               //So if any future price goes below GoldenRatioDivider no selling will happen.
               
                require(futurePrice.mul(1000).div(_ATHPriceINBNB) >= GoldenRatioDivider,"Transaction will drop the price below the GoldenRatio , reverted.");
                require(RatioNow >= GoldenRatioDivider,"Idk how you passed that requirement but it stops here.");
                
               //Set price of token for sells.
                setPriceOfTokenSellFuture(WillbedrainedBNB,amount);
                //set IncreasedTaxes.
                addIncreasedTaxes(sender);
                //ATH dumper fee
                addATHFees();
            
        }

        if(sender == _uniswapV2Pair && cancelSellConstraints){  //If buying    
                address[] memory path = new address[](2);
                path[0] = address(this);
                path[1] = _uniswapV2Router.WETH();
                //This will be an estimate but should be pretty good if no big changes to price.
               uint256 WillbeAddedBNB = _uniswapV2Router.getAmountsOut(amount,path)[1];
               setPriceOfTokenBoughtFuture(WillbeAddedBNB,amount);

         }
            //Add the tax on everytransaction no matter what.So cannot send it to another wallets without tax.
         if(sender != _uniswapV2Pair && recipient != _uniswapV2Pair){
             //set IncreasedTaxes.
             addIncreasedTaxes(sender);
         }

        if (!takeFee || devMod) {
            _taxFeeVariable = 0;
            _liquidityFeeVariable = 0;
            _devFeeVariable = 0;
            _burnFeeVariable = 0;
        }

        bool senderExcluded = _isExcludedFromReward.contains(sender);
        bool recipientExcluded = _isExcludedFromReward.contains(recipient);
        if (senderExcluded && !recipientExcluded) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!senderExcluded && recipientExcluded) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!senderExcluded && !recipientExcluded) {
            _transferStandard(sender, recipient, amount);
        } else if (senderExcluded && recipientExcluded) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
     
        setFeesBackToNormalInternal();


   

        
        
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity,
            uint256 tBurn
        ) = _getTValues(tAmount);
        uint256 currentRate = _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            tFee,
            tLiquidity,
            tBurn,
            currentRate
        );
        uint256 rBurn = tBurn.mul(currentRate);

        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);

        takeTransactionFee(address(this), tLiquidity, currentRate);
        _reflectFee(rFee, rBurn, tFee, tBurn);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity,
            uint256 tBurn
        ) = _getTValues(tAmount);
        uint256 currentRate = _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            tFee,
            tLiquidity,
            tBurn,
            currentRate
        );
        uint256 rBurn = tBurn.mul(currentRate);

        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);

        takeTransactionFee(address(this), tLiquidity, currentRate);
        _reflectFee(rFee, rBurn, tFee, tBurn);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity,
            uint256 tBurn
        ) = _getTValues(tAmount);
        uint256 currentRate = _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            tFee,
            tLiquidity,
            tBurn,
            currentRate
        );
        uint256 rBurn = tBurn.mul(currentRate);

        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);

        takeTransactionFee(address(this), tLiquidity, currentRate);
        _reflectFee(rFee, rBurn, tFee, tBurn);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity,
            uint256 tBurn
        ) = _getTValues(tAmount);
        uint256 currentRate = _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            tFee,
            tLiquidity,
            tBurn,
            currentRate
        );
        uint256 rBurn = tBurn.mul(currentRate);

        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);

        takeTransactionFee(address(this), tLiquidity, currentRate);
        _reflectFee(rFee, rBurn, tFee, tBurn);
        emit Transfer(sender, recipient, tTransferAmount);
    }

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

    function _getTValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        uint256 tFee = tAmount.mul(_taxFeeVariable).div(10000);
        // We treat the dev fee as part of the total liquidity fee
        uint256 tLiquidity = tAmount.mul(_liquidityFeeVariable.add(_devFeeVariable)).div(10000);
        uint256 tBurn = tAmount.mul(_burnFeeVariable).div(10000);
        uint256 tTransferAmount = tAmount.sub(tFee);
        tTransferAmount = tTransferAmount.sub(tLiquidity);
        tTransferAmount = tTransferAmount.sub(tBurn);
        return (tTransferAmount, tFee, tLiquidity, tBurn);
    }

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

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

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _isExcludedFromReward.length(); i++) {
            address excludedAddress = _isExcludedFromReward.at(i);
            if (
                _rOwned[excludedAddress] > rSupply ||
                _tOwned[excludedAddress] > tSupply
            ) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[excludedAddress]);
            tSupply = tSupply.sub(_tOwned[excludedAddress]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function takeTransactionFee(
        address to,
        uint256 tAmount,
        uint256 currentRate
    ) private {
        if (tAmount <= 0) {
            return;
        }

        uint256 rAmount = tAmount.mul(currentRate);
        _rOwned[to] = _rOwned[to].add(rAmount);
        if (_isExcludedFromReward.contains(to)) {
            _tOwned[to] = _tOwned[to].add(tAmount);
        }
    }
}

File 2 of 2: Library.sol
pragma solidity ^0.8.7;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(
        address target,
        bytes memory data,
        uint256 weiValue,
        string memory errorMessage
    ) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) =
            target.call{value: weiValue}(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}



pragma solidity ^0.8.7;

/**
 * @dev Library for managing
 * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive
 * types.
 *
 * Sets have the following properties:
 *
 * - Elements are added, removed, and checked for existence in constant time
 * (O(1)).
 * - Elements are enumerated in O(n). No guarantees are made on the ordering.
 *
 * ```
 * contract Example {
 *     // Add the library methods
 *     using EnumerableSet for EnumerableSet.AddressSet;
 *
 *     // Declare a set state variable
 *     EnumerableSet.AddressSet private mySet;
 * }
 * ```
 *
 * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)
 * and `uint256` (`UintSet`) are supported.
 */
library EnumerableSet {
    // To implement this library for multiple types with as little code
    // repetition as possible, we write it in terms of a generic Set type with
    // bytes32 values.
    // The Set implementation uses private functions, and user-facing
    // implementations (such as AddressSet) are just wrappers around the
    // underlying Set.
    // This means that we can only create new EnumerableSets for types that fit
    // in bytes32.

    struct Set {
        // Storage of set values
        bytes32[] _values;
        // Position of the value in the `values` array, plus 1 because index 0
        // means a value is not in the set.
        mapping(bytes32 => uint256) _indexes;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            // The value is stored at length-1, but we add 1 to all indexes
            // and use 0 as a sentinel value
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function _remove(Set storage set, bytes32 value) private returns (bool) {
        // We read and store the value's index to prevent multiple reads from the same storage slot
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) {
            // Equivalent to contains(set, value)
            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in
            // the array, and then remove the last element (sometimes called as 'swap and pop').
            // This modifies the order of the array, as noted in {at}.

            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs
            // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.

            bytes32 lastvalue = set._values[lastIndex];

            // Move the last value to the index where the value to delete is
            set._values[toDeleteIndex] = lastvalue;
            // Update the index for the moved value
            set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex

            // Delete the slot where the moved value was stored
            set._values.pop();

            // Delete the index for the deleted slot
            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function _contains(Set storage set, bytes32 value)
        private
        view
        returns (bool)
    {
        return set._indexes[value] != 0;
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function _at(Set storage set, uint256 index)
        private
        view
        returns (bytes32)
    {
        require(
            set._values.length > index,
            "EnumerableSet: index out of bounds"
        );
        return set._values[index];
    }

    // Bytes32Set

    struct Bytes32Set {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(Bytes32Set storage set, bytes32 value)
        internal
        returns (bool)
    {
        return _add(set._inner, value);
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(Bytes32Set storage set, bytes32 value)
        internal
        returns (bool)
    {
        return _remove(set._inner, value);
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(Bytes32Set storage set, bytes32 value)
        internal
        view
        returns (bool)
    {
        return _contains(set._inner, value);
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function at(Bytes32Set storage set, uint256 index)
        internal
        view
        returns (bytes32)
    {
        return _at(set._inner, index);
    }

    // AddressSet

    struct AddressSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(AddressSet storage set, address value)
        internal
        returns (bool)
    {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(AddressSet storage set, address value)
        internal
        returns (bool)
    {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(AddressSet storage set, address value)
        internal
        view
        returns (bool)
    {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function at(AddressSet storage set, uint256 index)
        internal
        view
        returns (address)
    {
        return address(uint160(uint256(_at(set._inner, index))));
    }

    // UintSet

    struct UintSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(UintSet storage set, uint256 value)
        internal
        returns (bool)
    {
        return _remove(set._inner, bytes32(value));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(UintSet storage set, uint256 value)
        internal
        view
        returns (bool)
    {
        return _contains(set._inner, bytes32(value));
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function at(UintSet storage set, uint256 index)
        internal
        view
        returns (uint256)
    {
        return uint256(_at(set._inner, index));
    }
}


pragma solidity ^0.8.7;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IBEP20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);
    
    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}



pragma solidity ^0.8.7;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
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;
    }
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address private _owner;
    address private _lockedLiquidity;
    address payable private _devWallet;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        _owner = initialOwner;
        emit OwnershipTransferred(address(0), initialOwner);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    function lockedLiquidity() public view returns (address) {
        return _lockedLiquidity;
    }

    function devWallet() internal view returns (address payable) {
        return _devWallet;
    }
    
    function devWalletByOwner() external view onlyOwner returns (address payable) {
        return _devWallet;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    modifier onlyDev() {
        require(
            _devWallet == _msgSender(),
            "Caller is not the devWallet address"
        );
        _;
    }

    function setDevWalletAddress(address payable devWalletAddress)
        public
        virtual
        onlyOwner
    {
        require(
            _devWallet == address(0),
            "Dev wallet address cannot be changed once set"
        );
        _devWallet = devWalletAddress;
    }

    function setLockedLiquidityAddress(address liquidityAddress)
        public
        virtual
        onlyOwner
    {
        require(
            _lockedLiquidity == address(0),
            "Locked liquidity address cannot be changed once set"
        );
        _lockedLiquidity = liquidityAddress;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.7;

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

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


pragma solidity ^0.8.7;

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}


Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"cOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"bnbCollected","type":"uint256"}],"name":"DevFeesCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"GoldenRatioDivider","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PER_ATH_BURN_ACTIVATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ShutDownCancel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_ATHDumperBurnAdd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_burnFeeVariable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devFeeVariable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFeeVariable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFeeVariable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"added","type":"address"}],"name":"addToBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"added","type":"address"}],"name":"addToWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"collectDevFees","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"buys","type":"bool"}],"name":"devMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devPercentageOfLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWalletByOwner","outputs":[{"internalType":"address payable","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":[],"name":"getMyTaxInformation","outputs":[{"internalType":"uint256","name":"myTx","type":"uint256"},{"internalType":"uint256","name":"tax","type":"uint256"},{"internalType":"uint256","name":"leftTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"substractedBNB","type":"uint256"},{"internalType":"uint256","name":"addedGoldenRatio","type":"uint256"}],"name":"getPriceOfTokenFuture","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPriceOfTokenNow","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"lockedLiquidity","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pancakeRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pureLiquidityPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeDevMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setATHDumperFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"feePercent","type":"uint256"}],"name":"setATHDumperMaxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isit","type":"bool"}],"name":"setATHthingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"blacklist","type":"bool"}],"name":"setBlackListEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"setBurnFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"devFee","type":"uint256"}],"name":"setDevFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"devWalletAddress","type":"address"}],"name":"setDevWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"setFeeResetTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setFeesBackToDefault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setFeesToZero","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ratio","type":"uint256"}],"name":"setGoldenRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"what","type":"bool"}],"name":"setIncreasingTaxForSellsEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"},{"internalType":"bool","name":"b","type":"bool"}],"name":"setIsExcludedFromSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"liquidityAddress","type":"address"}],"name":"setLockedLiquidityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTax","type":"uint256"}],"name":"setMaxSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minLiquidityPercent","type":"uint256"}],"name":"setMinLiquidityPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"what","type":"bool"}],"name":"setSellContraints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxnumber","type":"uint256"},{"internalType":"uint256","name":"tax","type":"uint256"}],"name":"setTaxesByAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setTaxesToDefaultForSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"what","type":"bool"}],"name":"setToNormalOnAnyError","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"p","type":"address"}],"name":"setUniswapPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"r","type":"address"}],"name":"setUniswapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"whitelist","type":"bool"}],"name":"setWhitelistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDevFeesCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":[],"name":"uniSwapV2PairContract","outputs":[{"internalType":"contract IUniswapV2Pair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526a52b7d2dcc80cd2e4000000601281905562000023906000196200073e565b620000319060001962000724565b60135560006016556000601755600060185560006019556000601a556000601b556000601c556000601d55606460125460016200006f919062000702565b6200007b9190620006eb565b601e556a52b7d2dcc80cd2e4000000601f5569043c33c1937564800000602055600060215561015e6022556103b66023556103e860248190556001602581905568056bc75e2d63100000602655602780546001600160a01b03191661dead17905561026a602855602991909155602a805460ff19169091179055602d805474017a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a81b031990911617905562127500602e55602f805463ffffffff19908116610100179091556130d46031556032805490911663010000001790553480156200015b57600080fd5b50604051620057a3380380620057a38339810160408190526200017e91620006b9565b600080546001600160a01b0319166001600160a01b03831690811782556040518392907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506013546001600160a01b0380831660009081526003602090815260409182902093909355602d54815163c45a015560e01b81529151921692839263c45a0155926004808201939291829003018186803b1580156200022457600080fd5b505afa15801562000239573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025f9190620006b9565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002a857600080fd5b505afa158015620002bd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e39190620006b9565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200032c57600080fd5b505af115801562000341573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003679190620006b9565b602b80546001600160a01b03199081166001600160a01b03938416908117909255602a805462010000600160b01b0319166201000086861602179055602c8054909116821790556000549091620003cf9116600a6200064760201b62002acf1790919060201c565b50620003eb30600a6200064760201b62002acf1790919060201c565b50602b546200041290600c906001600160a01b031662000647602090811b62002acf17901c565b506200042e3060106200064760201b62002acf1790919060201c565b50602b5462000455906010906001600160a01b031662000647602090811b62002acf17901c565b50620004836200046d6000546001600160a01b031690565b60106200064760201b62002acf1790919060201c565b506030602090815260197f686dc217b182b1fe88c7defdc5cd77807fc691ce05a160638669d7322051eee055604b7fc7874712a1c7fb891b421aa6c0d42dbf3cd912d7a18f183783fb32e938cbaa015560af7f89a47dfbb363dd4e64da56b4585033c9abd8a425d24b94630469c44bee7189c25560b47f11a30d68d5ffd3a101d3683e9a6997d49d9351e95dc004c6a4e652b897626df75560c87f2f780f5a40ea4901ca784926540b83b7459f13a98fc8f78e5634eb2a01df3af55561015e7f9d0b70a39d4b3569f175af8ea51ae318eac80460c467ee4a16ee63ec5720706e556102e47fd558ed0e54509c62efb2aedb46e6ad1b04c7bdca351e3613e136c946b91686d85561049c7f4ebb69666752feecd656ebf5f8cd3c2f1c70bb06a0c3d3744be479e4a580c233556109c47fa486383ba35136cdb74cd2aa7ac94004c5d7a5da0cbc794ef0a3909609a2b4a155600960009081526130d47fb0fb8c799ed0a9ebd24dd2177f752eb5b4872b0e0f3da30ee877615a016e915d556012546040519081526001600160a01b038616927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350505062000781565b60006200065e836001600160a01b03841662000667565b90505b92915050565b6000818152600183016020526040812054620006b05750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000661565b50600062000661565b600060208284031215620006cc57600080fd5b81516001600160a01b0381168114620006e457600080fd5b9392505050565b600082620006fd57620006fd6200076b565b500490565b60008160001904831182151516156200071f576200071f62000755565b500290565b60008282101562000739576200073962000755565b500390565b6000826200075057620007506200076b565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b61501280620007916000396000f3fe6080604052600436106104b95760003560e01c8063735d1cb81161026b578063b6b28a331161014f578063dd2a62e2116100c1578063f2fde38b11610085578063f2fde38b14610e5c578063f5c52ceb14610e7c578063f80e82b614610e92578063fda3947514610ea7578063fdc86c2f14610ebd578063ff35d22014610edd57600080fd5b8063dd2a62e214610dac578063dd62ed3e14610dc1578063e3c2578614610e07578063ea1644d514610e1c578063ea2f0b3714610e3c57600080fd5b8063c49b9a8011610113578063c49b9a8014610cf2578063cbecede014610d12578063cea2695814610d2c578063cf6a8e5114610d4c578063d543dbeb14610d6c578063d5aed6bf14610d8c57600080fd5b8063b6b28a3314610c72578063ba40007314610c87578063bea9849e14610c9c578063c0b0fda214610cbc578063c21ebd0714610cd257600080fd5b80639c74daf0116101e8578063a457c2d7116101ac578063a457c2d714610bd3578063a9059cbb14610bf3578063aa45026b14610c13578063ac41860e14610c29578063b3f22ce314610c3e578063b439824414610c5457600080fd5b80639c74daf014610b485780639c9c249214610b685780639e37da4314610b7e578063a19bd31914610b9e578063a3e4be6714610bbe57600080fd5b80638da5cb5b1161022f5780638da5cb5b14610aa85780638eb2406514610ac65780638ee88c5314610ae65780638f9a55c014610b0657806395d89b4114610b1c57600080fd5b8063735d1cb814610a1d5780637d1db4a514610a325780637d520dde14610a4857806387b27dec14610a6857806388f8202014610a8857600080fd5b80633bd5d1731161039d5780635054e8bf1161030f578063583e0568116102d3578063583e056814610944578063664e4ed1146109825780636833b55a146109a25780636bc87c3a146109d257806370a08231146109e8578063715018a614610a0857600080fd5b80635054e8bf146108b957806351bd2611146108ce57806352390c02146108ee5780635342acb41461090e57806354a417671461092e57600080fd5b80634549b039116103615780634549b0391461080357806345ed22c114610823578063479e72e01461084357806347ee03941461086357806348a8fe2e146108835780634ebe3cf2146108a357600080fd5b80633bd5d1731461076e5780633c9f861d1461078e57806340927952146107a3578063417c73a7146107c3578063437823ec146107e357600080fd5b806323b872dd116104365780633685d419116103fa5780633685d419146106c2578063379e2919146106e2578063380a21f81461070257806339509351146107185780633b03f45a146107385780633b124fe71461075857600080fd5b806323b872dd146106315780632a9319cb146106515780632d838119146106715780632eb2e9f414610691578063313ce567146106a657600080fd5b8063109fa9be1161047d578063109fa9be1461059f578063120a0612146105bf57806313114a9d146105df57806318160ddd146105f45780631e452d0d1461060957600080fd5b8063052d9e7e146104c5578063061c82d0146104e757806306fdde0314610507578063095ea7b31461054b5780630cffa75e1461057b57600080fd5b366104c057005b600080fd5b3480156104d157600080fd5b506104e56104e0366004614be6565b610efd565b005b3480156104f357600080fd5b506104e5610502366004614c51565b610f43565b34801561051357600080fd5b506040805180820190915260098152684669626f6e6163636960b81b60208201525b6040516105429190614d21565b60405180910390f35b34801561055757600080fd5b5061056b610566366004614af5565b610fba565b6040519015158152602001610542565b34801561058757600080fd5b5061059160195481565b604051908152602001610542565b3480156105ab57600080fd5b506104e56105ba366004614be6565b610fd1565b3480156105cb57600080fd5b506104e56105da366004614a0c565b611015565b3480156105eb57600080fd5b50601454610591565b34801561060057600080fd5b50601254610591565b34801561061557600080fd5b5060295460245460408051928352602083019190915201610542565b34801561063d57600080fd5b5061056b61064c366004614a7f565b6110d0565b34801561065d57600080fd5b506104e561066c366004614c51565b611139565b34801561067d57600080fd5b5061059161068c366004614c51565b611270565b34801561069d57600080fd5b506104e56112f4565b3480156106b257600080fd5b5060405160128152602001610542565b3480156106ce57600080fd5b506104e56106dd366004614a0c565b61132e565b3480156106ee57600080fd5b506104e56106fd366004614c51565b6113e3565b34801561070e57600080fd5b5061059160185481565b34801561072457600080fd5b5061056b610733366004614af5565b6114b8565b34801561074457600080fd5b506104e5610753366004614be6565b6114ee565b34801561076457600080fd5b50610591601a5481565b34801561077a57600080fd5b506104e5610789366004614c51565b611536565b34801561079a57600080fd5b50601554610591565b3480156107af57600080fd5b506104e56107be366004614ac0565b61163e565b3480156107cf57600080fd5b506104e56107de366004614a0c565b61168d565b3480156107ef57600080fd5b506104e56107fe366004614a0c565b6116c2565b34801561080f57600080fd5b5061059161081e366004614c6a565b6116f7565b34801561082f57600080fd5b506104e561083e366004614be6565b6117cf565b34801561084f57600080fd5b506104e561085e366004614c51565b61181b565b34801561086f57600080fd5b506104e561087e366004614a0c565b61190c565b34801561088f57600080fd5b506104e561089e366004614a0c565b611941565b3480156108af57600080fd5b5061059160175481565b3480156108c557600080fd5b506104e5611a02565b3480156108da57600080fd5b506104e56108e9366004614be6565b611aab565b3480156108fa57600080fd5b506104e5610909366004614a0c565b611af3565b34801561091a57600080fd5b5061056b610929366004614a0c565b611c57565b34801561093a57600080fd5b5061059160165481565b34801561095057600080fd5b50602a5461096a906201000090046001600160a01b031681565b6040516001600160a01b039091168152602001610542565b34801561098e57600080fd5b506104e561099d366004614c51565b611c64565b3480156109ae57600080fd5b506109b7611d75565b60408051938452602084019290925290820152606001610542565b3480156109de57600080fd5b50610591601b5481565b3480156109f457600080fd5b50610591610a03366004614a0c565b611de2565b348015610a1457600080fd5b506104e5611e32565b348015610a2957600080fd5b506104e5611ea6565b348015610a3e57600080fd5b50610591601f5481565b348015610a5457600080fd5b506104e5610a63366004614be6565b611ee4565b348015610a7457600080fd5b506104e5610a83366004614c8d565b611f85565b348015610a9457600080fd5b5061056b610aa3366004614a0c565b611fc1565b348015610ab457600080fd5b506000546001600160a01b031661096a565b348015610ad257600080fd5b506104e5610ae1366004614be6565b611fce565b348015610af257600080fd5b506104e5610b01366004614c51565b612022565b348015610b1257600080fd5b50610591601e5481565b348015610b2857600080fd5b506040805180820190915260038152622324a160e91b6020820152610535565b348015610b5457600080fd5b50602b5461096a906001600160a01b031681565b348015610b7457600080fd5b5061059160235481565b348015610b8a57600080fd5b50602c5461096a906001600160a01b031681565b348015610baa57600080fd5b506104e5610bb9366004614c51565b612093565b348015610bca57600080fd5b506104e56120c2565b348015610bdf57600080fd5b5061056b610bee366004614af5565b612102565b348015610bff57600080fd5b5061056b610c0e366004614af5565b612151565b348015610c1f57600080fd5b50610591601c5481565b348015610c3557600080fd5b506104e561215e565b348015610c4a57600080fd5b5061059160205481565b348015610c6057600080fd5b506001546001600160a01b031661096a565b348015610c7e57600080fd5b5061059161219f565b348015610c9357600080fd5b506105916121d6565b348015610ca857600080fd5b506104e5610cb7366004614a0c565b61220a565b348015610cc857600080fd5b50610591601d5481565b348015610cde57600080fd5b50602d5461096a906001600160a01b031681565b348015610cfe57600080fd5b506104e5610d0d366004614be6565b61225e565b348015610d1e57600080fd5b50602a5461056b9060ff1681565b348015610d3857600080fd5b506104e5610d47366004614c51565b6122cf565b348015610d5857600080fd5b50610591610d67366004614c8d565b612340565b348015610d7857600080fd5b506104e5610d87366004614c51565b61245b565b348015610d9857600080fd5b506104e5610da7366004614a0c565b612595565b348015610db857600080fd5b506104e56125e1565b348015610dcd57600080fd5b50610591610ddc366004614a46565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610e1357600080fd5b50610591612784565b348015610e2857600080fd5b506104e5610e37366004614c51565b6127ac565b348015610e4857600080fd5b506104e5610e57366004614a0c565b61285a565b348015610e6857600080fd5b506104e5610e77366004614a0c565b61288f565b348015610e8857600080fd5b5061059160225481565b348015610e9e57600080fd5b5061096a612979565b348015610eb357600080fd5b5061059160285481565b348015610ec957600080fd5b506104e5610ed8366004614c51565b6129b4565b348015610ee957600080fd5b506104e5610ef8366004614c51565b6129e3565b6000546001600160a01b03163314610f305760405162461bcd60e51b8152600401610f2790614dc2565b60405180910390fd5b6032805460ff1916911515919091179055565b6000546001600160a01b03163314610f6d5760405162461bcd60e51b8152600401610f2790614dc2565b6107d0610f97601d54610f91601c54610f91601b5487612ae490919063ffffffff16565b90612ae4565b1115610fb55760405162461bcd60e51b8152600401610f2790614d76565b601a55565b6000610fc7338484612b43565b5060015b92915050565b6000546001600160a01b03163314610ffb5760405162461bcd60e51b8152600401610f2790614dc2565b603280549115156101000261ff0019909216919091179055565b6000546001600160a01b0316331461103f5760405162461bcd60e51b8152600401610f2790614dc2565b6002546001600160a01b0316156110ae5760405162461bcd60e51b815260206004820152602d60248201527f4465762077616c6c657420616464726573732063616e6e6f742062652063686160448201526c1b99d959081bdb98d9481cd95d609a1b6064820152608401610f27565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b60006110dd848484612c67565b61112f843361112a85604051806060016040528060288152602001614f90602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190612fa2565b612b43565b5060019392505050565b6000546001600160a01b031633146111635760405162461bcd60e51b8152600401610f2790614dc2565b6127108111156111db5760405162461bcd60e51b815260206004820152603f60248201527f4d696e696d756d206c69717569646974792070657263656e746167652070657260448201527f63656e746167652063616e2774206265206d6f7265207468616e2031303025006064820152608401610f27565b600081116112495760405162461bcd60e51b815260206004820152603560248201527f4d696e696d756d206c69717569646974792070657263656e746167652070657260448201527463656e746167652063616e2774206265207a65726f60581b6064820152608401610f27565b61126a61271061126483601254612fdc90919063ffffffff16565b9061305b565b60205550565b60006013548211156112d75760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610f27565b60006112e161309d565b90506112ed838261305b565b9392505050565b6000546001600160a01b0316331461131e5760405162461bcd60e51b8152600401610f2790614dc2565b602f805461ffff19166001179055565b6000546001600160a01b031633146113585760405162461bcd60e51b8152600401610f2790614dc2565b6113636008826130c0565b6113bd5760405162461bcd60e51b815260206004820152602560248201527f4163636f756e7420697320616c726561647920696e636c7564656420696e2072604482015264195dd85c9960da1b6064820152608401610f27565b6113c86008826130e2565b506001600160a01b0316600090815260046020526040812055565b6000546001600160a01b0316331461140d5760405162461bcd60e51b8152600401610f2790614dc2565b60968111156114715760405162461bcd60e51b815260206004820152602a60248201527f44657620666565732063616e206e6f742065786365656420746865206465636c604482015269185c9959081b1a5b5a5d60b21b6064820152608401610f27565b6107d0611495601d54610f9184610f91601b54601a54612ae490919063ffffffff16565b11156114b35760405162461bcd60e51b8152600401610f2790614d76565b601c55565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610fc791859061112a9086612ae4565b6000546001600160a01b031633146115185760405162461bcd60e51b8152600401610f2790614dc2565b602f805491151563010000000263ff00000019909216919091179055565b336115426008826130c0565b156115a45760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610f27565b60008060006115b2856130f7565b9350935093505060006115c361309d565b905060006115d4878686868661319a565b50506001600160a01b0387166000908152600360205260409020549091506115fc908261320e565b6001600160a01b038716600090815260036020526040902055601354611622908261320e565b6013556014546116329088612ae4565b60145550505050505050565b6000546001600160a01b031633146116685760405162461bcd60e51b8152600401610f2790614dc2565b801561167e57611679600c83612acf565b505050565b611679600c836130e2565b5050565b6000546001600160a01b031633146116b75760405162461bcd60e51b8152600401610f2790614dc2565b611689600e82612acf565b6000546001600160a01b031633146116ec5760405162461bcd60e51b8152600401610f2790614dc2565b611689600a82612acf565b600060125483111561174b5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610f27565b8161179057600080600061175e866130f7565b93509350935050600061176f61309d565b90506000611780888686868661319a565b50909650610fcb95505050505050565b600080600061179e866130f7565b9350935093505060006117af61309d565b905060006117c0888686868661319a565b509650610fcb95505050505050565b6000546001600160a01b031633146117f95760405162461bcd60e51b8152600401610f2790614dc2565b602f54610100900460ff161561181857602f805460ff19168215151790555b50565b6000546001600160a01b031633146118455760405162461bcd60e51b8152600401610f2790614dc2565b6102268111156118bd5760405162461bcd60e51b815260206004820152603860248201527f49206b6e6f7720796f752077616e7420746f2070756e697368207468656d202c60448201527f206275742074686579206172652068756d616e20746f6f2e00000000000000006064820152608401610f27565b60fa8110156119075760405162461bcd60e51b8152602060048201526016602482015275249030b4b713ba103a3430ba1036b2b931b4b33ab61760511b6044820152606401610f27565b602255565b6000546001600160a01b031633146119365760405162461bcd60e51b8152600401610f2790614dc2565b611689601082612acf565b6000546001600160a01b0316331461196b5760405162461bcd60e51b8152600401610f2790614dc2565b6001546001600160a01b0316156119e05760405162461bcd60e51b815260206004820152603360248201527f4c6f636b6564206c697175696469747920616464726573732063616e6e6f742060448201527218994818da185b99d959081bdb98d9481cd95d606a1b6064820152608401610f27565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b03163314611a2c5760405162461bcd60e51b8152600401610f2790614df7565b602154611a399047612ae4565b6021556002546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611a75573d6000803e3d6000fd5b506040514781527f2163423df8c81336c4fbc2223f77e05e2d04aab842e4a5edf894b539ca7955309060200160405180910390a1565b6000546001600160a01b03163314611ad55760405162461bcd60e51b8152600401610f2790614dc2565b602d8054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b03163314611b1d5760405162461bcd60e51b8152600401610f2790614dc2565b611b286008826130c0565b15611b835760405162461bcd60e51b815260206004820152602560248201527f4163636f756e7420697320616c7265616479206578636c7564656420696e2072604482015264195dd85c9960da1b6064820152608401610f27565b610400611b906008613250565b10611bf25760405162461bcd60e51b815260206004820152602c60248201527f4578636c7564656420726577617264207365742072656163686564206d61786960448201526b6d756d20636170616369747960a01b6064820152608401610f27565b6001600160a01b03811660009081526003602052604090205415611c4c576001600160a01b038116600090815260036020526040902054611c3290611270565b6001600160a01b0382166000908152600460205260409020555b611689600882612acf565b6000610fcb600a836130c0565b6000546001600160a01b03163314611c8e5760405162461bcd60e51b8152600401610f2790614dc2565b6103cf811115611cff5760405162461bcd60e51b815260206004820152603660248201527f43616e277420696e637265617365204154482073656c6c20746178207065726360448201527532b73a30b3b29036b7b932903a3430b7103a3434b99760511b6064820152608401610f27565b610343811015611d705760405162461bcd60e51b815260206004820152603660248201527f43616e2774206465637265617365204154482073656c6c20746178207065726360448201527532b73a30b3b29036b7b932903a3430b7103a3434b99760511b6064820152608401610f27565b602355565b336000908152600660209081526040808320546007835281842054818552603090935290832054839283924292909190849082851115611dbc57611db9858461320e565b91505b80158015611dca5750600384115b15611dd457506031545b929792965094509092505050565b6000611def6008836130c0565b15611e1057506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610fcb90611270565b6000546001600160a01b03163314611e5c5760405162461bcd60e51b8152600401610f2790614dc2565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611ed05760405162461bcd60e51b8152600401610f2790614dc2565b6032805463ffff0000191662010000179055565b6000546001600160a01b03163314611f0e5760405162461bcd60e51b8152600401610f2790614dc2565b60325462010000900460ff1615611f675760405162461bcd60e51b815260206004820152601b60248201527f446576206d6f646520697320636c6f73656420666f72657665722e00000000006044820152606401610f27565b6032805491151563010000000263ff00000019909216919091179055565b6000546001600160a01b03163314611faf5760405162461bcd60e51b8152600401610f2790614dc2565b60009182526030602052604090912055565b6000610fcb6008836130c0565b6000546001600160a01b03163314611ff85760405162461bcd60e51b8152600401610f2790614dc2565b602f54610100900460ff161561181857602f8054821515620100000262ff00001990911617905550565b6000546001600160a01b0316331461204c5760405162461bcd60e51b8152600401610f2790614dc2565b6107d0612070601d54610f91601c54610f9186601a54612ae490919063ffffffff16565b111561208e5760405162461bcd60e51b8152600401610f2790614d76565b601b55565b6000546001600160a01b031633146120bd5760405162461bcd60e51b8152600401610f2790614dc2565b602e55565b6000546001600160a01b031633146120ec5760405162461bcd60e51b8152600401610f2790614dc2565b6000601681905560178190556018819055601955565b6000610fc7338461112a85604051806060016040528060258152602001614fb8602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190612fa2565b6000610fc7338484612c67565b6000546001600160a01b031633146121885760405162461bcd60e51b8152600401610f2790614dc2565b6032601a81905561012c601b556096601c55601d55565b60006121b8601b54601c54612ae490919063ffffffff16565b601b546121c790612710614ed1565b6121d19190614eaf565b905090565b6002546000906001600160a01b031633146122035760405162461bcd60e51b8152600401610f2790614df7565b5060215490565b6000546001600160a01b031633146122345760405162461bcd60e51b8152600401610f2790614dc2565b602a80546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6000546001600160a01b031633146122885760405162461bcd60e51b8152600401610f2790614dc2565b602a805460ff19168215159081179091556040519081527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599060200160405180910390a150565b6000546001600160a01b031633146122f95760405162461bcd60e51b8152600401610f2790614dc2565b6107d061231d82610f91601c54610f91601b54601a54612ae490919063ffffffff16565b111561233b5760405162461bcd60e51b8152600401610f2790614d76565b601d55565b600080600080600080602c60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561239757600080fd5b505afa1580156123ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123cf9190614c01565b63ffffffff1692506001600160701b031692506001600160701b031692508183111561240057829450819350612407565b8194508293505b8461241a57600195505050505050610fcb565b60006124268689612ae4565b9050600061244d826112646026546124478e8b61320e90919063ffffffff16565b90612fdc565b9a9950505050505050505050565b6000546001600160a01b031633146124855760405162461bcd60e51b8152600401610f2790614dc2565b6127108111156124fd5760405162461bcd60e51b815260206004820152603c60248201527f4d6178696d756d207472616e73616374696f6e206c696d69742070657263656e60448201527f746167652063616e2774206265206d6f7265207468616e2031303025000000006064820152608401610f27565b60648110156125745760405162461bcd60e51b815260206004820152603f60248201527f4d6178696d756d207472616e73616374696f6e206c696d69742063616e27742060448201527f6265206c657373207468616e20746865206465636c61726564206c696d6974006064820152608401610f27565b61258f61271061126483601254612fdc90919063ffffffff16565b601f5550565b6000546001600160a01b031633146125bf5760405162461bcd60e51b8152600401610f2790614dc2565b602b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461260b5760405162461bcd60e51b8152600401610f2790614dc2565b603060205260197f686dc217b182b1fe88c7defdc5cd77807fc691ce05a160638669d7322051eee05560377fc7874712a1c7fb891b421aa6c0d42dbf3cd912d7a18f183783fb32e938cbaa0155603c7f89a47dfbb363dd4e64da56b4585033c9abd8a425d24b94630469c44bee7189c25560787f11a30d68d5ffd3a101d3683e9a6997d49d9351e95dc004c6a4e652b897626df75560b47f2f780f5a40ea4901ca784926540b83b7459f13a98fc8f78e5634eb2a01df3af55561015e7f9d0b70a39d4b3569f175af8ea51ae318eac80460c467ee4a16ee63ec5720706e556102e47fd558ed0e54509c62efb2aedb46e6ad1b04c7bdca351e3613e136c946b91686d85561049c7f4ebb69666752feecd656ebf5f8cd3c2f1c70bb06a0c3d3744be479e4a580c233556109c47fa486383ba35136cdb74cd2aa7ac94004c5d7a5da0cbc794ef0a3909609a2b4a15560096000526130d47fb0fb8c799ed0a9ebd24dd2177f752eb5b4872b0e0f3da30ee877615a016e915d55565b600061279d601b54601c54612ae490919063ffffffff16565b601c546121c790612710614ed1565b6000546001600160a01b031633146127d65760405162461bcd60e51b8152600401610f2790614dc2565b600a8110156128395760405162461bcd60e51b815260206004820152602960248201527f43616e277420646563657265617365206d617877616c6c6574206d6f726520746044820152683430b7103a3430ba1760b91b6064820152608401610f27565b6127108160125461284a9190614ed1565b6128549190614eaf565b601e5550565b6000546001600160a01b031633146128845760405162461bcd60e51b8152600401610f2790614dc2565b611689600a826130e2565b6000546001600160a01b031633146128b95760405162461bcd60e51b8152600401610f2790614dc2565b6001600160a01b03811661291e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f27565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b031633146129a45760405162461bcd60e51b8152600401610f2790614dc2565b506002546001600160a01b031690565b6000546001600160a01b031633146129de5760405162461bcd60e51b8152600401610f2790614dc2565b603155565b6000546001600160a01b03163314612a0d5760405162461bcd60e51b8152600401610f2790614dc2565b61014d8111612a6a5760405162461bcd60e51b8152602060048201526024808201527f4669626f6e616363692063616e6e6f74206265206c6f776572207468616e20746044820152633434b99760e11b6064820152608401610f27565b610384811115612aca5760405162461bcd60e51b815260206004820152602560248201527f4669626f6e616363692063616e6e6f7420626520686967686572207468616e206044820152643a3434b99760d91b6064820152608401610f27565b602855565b60006112ed836001600160a01b03841661325a565b600080612af18385614e97565b9050838110156112ed5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610f27565b6001600160a01b038316612ba55760405162461bcd60e51b8152602060048201526024808201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f27565b6001600160a01b038216612c065760405162461bcd60e51b815260206004820152602260248201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f27565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612ccb5760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610f27565b6001600160a01b038216612d2d5760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610f27565b6002546001600160a01b0383811691161415612d9c5760405162461bcd60e51b815260206004820152602860248201527f4465762077616c6c657420616464726573732063616e6e6f74207265636569766044820152676520746f6b656e7360c01b6064820152608401610f27565b6002546001600160a01b0384811691161415612e085760405162461bcd60e51b815260206004820152602560248201527f4465762077616c6c657420616464726573732063616e6e6f742073656e6420746044820152646f6b656e7360d81b6064820152608401610f27565b60008111612e6a5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610f27565b6000546001600160a01b03848116911614801590612e9657506000546001600160a01b03838116911614155b15612efe57601f54811115612efe5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610f27565b6000612f0930611de2565b9050601f548110612f195750601f545b60205481108015908190612f355750602a54610100900460ff16155b8015612f495750612f47600c866130c0565b155b8015612f575750602a5460ff165b15612f6757612f676020546132a9565b6001612f74600a876130c0565b80612f855750612f85600a866130c0565b15612f8e575060005b612f9a86868684613396565b505050505050565b60008184841115612fc65760405162461bcd60e51b8152600401610f279190614d21565b506000612fd38486614ef0565b95945050505050565b600082612feb57506000610fcb565b6000612ff78385614ed1565b9050826130048583614eaf565b146112ed5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610f27565b60006112ed83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613c5c565b60008060006130aa613c8a565b90925090506130b9828261305b565b9250505090565b6001600160a01b038116600090815260018301602052604081205415156112ed565b60006112ed836001600160a01b038416613d9d565b600080600080600061311a61271061126460165489612fdc90919063ffffffff16565b9050600061314561271061126461313e601854601754612ae490919063ffffffff16565b8a90612fdc565b905060006131646127106112646019548b612fdc90919063ffffffff16565b90506000613172898561320e565b905061317e818461320e565b905061318a818361320e565b9993985091965094509092505050565b60008080806131a98986612fdc565b905060006131b78987612fdc565b905060006131c58988612fdc565b905060006131d38989612fdc565b905060006131e1858561320e565b90506131ed818461320e565b90506131f9818361320e565b949d949c50929a509298505050505050505050565b60006112ed83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612fa2565b6000610fcb825490565b60008181526001830160205260408120546132a157508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610fcb565b506000610fcb565b602a805461ff00191661010017905560006132d2614e206112646132cb61219f565b8590612fdc565b905060006132e0838361320e565b905060006132fa826112646132f3612784565b8790612fdc565b90504761330683613e8a565b6000613312478361320e565b905060006133266127106112648487612fdc565b90506000613334838361320e565b90506133408782614010565b60408051878152602081018390529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050602a805461ff0019169055505050505050565b6032546301000000900460ff1661346557602b546001600160a01b038481169116148015906133d357506027546001600160a01b03848116911614155b80156133ed5750602d546001600160a01b03848116911614155b1561346557601e54826133ff85611de2565b6134099190614e97565b11156134655760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61782060448201526439b4bd329760d91b6064820152608401610f27565b603254610100900460ff161561351957613480600e856130c0565b156134c75760405162461bcd60e51b815260206004820152601760248201527620b2323932b9b99034b990313630b1b5b634b9ba32b21760491b6044820152606401610f27565b6134d2600e846130c0565b156135195760405162461bcd60e51b815260206004820152601760248201527620b2323932b9b99034b990313630b1b5b634b9ba32b21760491b6044820152606401610f27565b60325460ff16156135d25761352f6010856130c0565b61357b5760405162461bcd60e51b815260206004820152601b60248201527f41646472657373206973206e6f742077686974656c69737465642e00000000006044820152606401610f27565b6135866010846130c0565b6135d25760405162461bcd60e51b815260206004820152601b60248201527f41646472657373206973206e6f742077686974656c69737465642e00000000006044820152606401610f27565b6032546301000000900460ff161561365757602b546001600160a01b0384811691161415613657576000546001600160a01b038581169116146136575760405162461bcd60e51b815260206004820152601760248201527f4f6e6c79206f776e65722063616e20616464206c69712e0000000000000000006044820152606401610f27565b602b546001600160a01b0384811691161480156136765750602f5460ff165b156139615760408051600280825260608201835260009260208301908036833701905050905030816000815181106136b0576136b0614f4e565b60200260200101906001600160a01b031690816001600160a01b031681525050602a60029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561371e57600080fd5b505afa158015613732573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137569190614a29565b8160018151811061376957613769614f4e565b6001600160a01b039283166020918202929092010152602a5460405163d06ca61f60e01b8152600092620100009092049091169063d06ca61f906137b39087908690600401614e3a565b60006040518083038186803b1580156137cb57600080fd5b505afa1580156137df573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526138079190810190614b21565b60018151811061381957613819614f4e565b60200260200101519050600061382f8286612340565b905060285461384f6024546112646103e885612fdc90919063ffffffff16565b10156138cd5760405162461bcd60e51b815260206004820152604160248201527f5472616e73616374696f6e2077696c6c2064726f70207468652070726963652060448201527f62656c6f772074686520476f6c64656e526174696f202c2072657665727465646064820152601760f91b608482015260a401610f27565b60285460295410156139405760405162461bcd60e51b815260206004820152603660248201527f49646b20686f7720796f7520706173736564207468617420726571756972656d60448201527532b73a10313aba1034ba1039ba37b839903432b9329760511b6064820152608401610f27565b61394a8286614101565b5061395487614242565b61395c6143aa565b505050505b602b546001600160a01b0385811691161480156139805750602f5460ff165b15613b3b5760408051600280825260608201835260009260208301908036833701905050905030816000815181106139ba576139ba614f4e565b60200260200101906001600160a01b031690816001600160a01b031681525050602a60029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613a2857600080fd5b505afa158015613a3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a609190614a29565b81600181518110613a7357613a73614f4e565b6001600160a01b039283166020918202929092010152602a5460405163d06ca61f60e01b8152600092620100009092049091169063d06ca61f90613abd9087908690600401614e3a565b60006040518083038186803b158015613ad557600080fd5b505afa158015613ae9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613b119190810190614b21565b600181518110613b2357613b23614f4e565b60200260200101519050613b37818561443e565b5050505b602b546001600160a01b03858116911614801590613b675750602b546001600160a01b03848116911614155b15613b7557613b7584614242565b801580613b8b57506032546301000000900460ff165b15613ba55760006016819055601781905560188190556019555b6000613bb26008866130c0565b90506000613bc16008866130c0565b9050818015613bce575080155b15613be357613bde86868661451b565b613c3f565b81158015613bee5750805b15613bfe57613bde868686614672565b81158015613c0a575080155b15613c1a57613bde868686614745565b818015613c245750805b15613c3457613bde8686866147b3565b613c3f868686614745565b612f9a601a54601655601b54601755601c54601855601d54601955565b60008183613c7d5760405162461bcd60e51b8152600401610f279190614d21565b506000612fd38486614eaf565b6013546012546000918291825b613ca16008613250565b811015613d6d576000613cb5600883614850565b6001600160a01b038116600090815260036020526040902054909150841080613cf557506001600160a01b03811660009081526004602052604090205483105b15613d0c5760135460125495509550505050509091565b6001600160a01b038116600090815260036020526040902054613d3090859061320e565b6001600160a01b038216600090815260046020526040902054909450613d5790849061320e565b9250508080613d6590614f07565b915050613c97565b50601254601354613d7d9161305b565b821015613d94576013546012549350935050509091565b90939092509050565b60008181526001830160205260408120548015613e80576000613dc1600183614ef0565b8554909150600090613dd590600190614ef0565b90506000866000018281548110613dee57613dee614f4e565b9060005260206000200154905080876000018481548110613e1157613e11614f4e565b600091825260208083209091019290925582815260018901909152604090208490558654879080613e4457613e44614f38565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610fcb565b6000915050610fcb565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613ebf57613ebf614f4e565b60200260200101906001600160a01b031690816001600160a01b031681525050602a60029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613f2d57600080fd5b505afa158015613f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f659190614a29565b81600181518110613f7857613f78614f4e565b6001600160a01b039283166020918202929092010152602a54613fa49130916201000090041684612b43565b602a5460405163791ac94760e01b8152620100009091046001600160a01b03169063791ac94790613fe2908590600090869030904290600401614e5b565b600060405180830381600087803b158015613ffc57600080fd5b505af1158015612f9a573d6000803e3d6000fd5b602a5461402e9030906201000090046001600160a01b031684612b43565b602a546001600160a01b03620100009091041663f305d71982308560008061405e6001546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b1580156140c157600080fd5b505af11580156140d5573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906140fa9190614caf565b5050505050565b600080600080600080602c60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561415857600080fd5b505afa15801561416c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141909190614c01565b63ffffffff1692506001600160701b031692506001600160701b03169250818311156141c1578294508193506141c8565b8194508293505b6141d28588612ae4565b94506141de848961320e565b9350846141f357600195505050505050610fcb565b600061420e8661126460265488612fdc90919063ffffffff16565b90506024548111156142205760248190555b60245461423390611264836103e8612fdc565b60295598975050505050505050565b6001600160a01b0381166000908152600660209081526040808320546007909252822054602f5442939062010000900460ff161561434157602b546001600160a01b0386811691161461434157818411156143415760006142a3858461320e565b6001600160a01b0387166000908152600760209081526040808320899055878352603090915290205492509050811580156142de5750600384115b156142e95760315491505b602e548110614310576001600160a01b038616600090815260066020526040812081905591505b602e5481101561433f57614325846001614e97565b6001600160a01b0387166000908152600660205260409020555b505b80601760008282546143539190614e97565b92505081905550806019600082825461436c9190614e97565b9250508190555080601660008282546143859190614e97565b92505081905550806018600082825461439e9190614e97565b90915550505050505050565b602d546000908190600160a01b900460ff16156144395760235460295411156144395760019050602254601760008282546143e59190614e97565b9091555050602254601980546000906143ff908490614e97565b909155505060225460168054600090614419908490614e97565b909155505060225460188054600090614433908490614e97565b90915550505b919050565b600080600080600080602c60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561449557600080fd5b505afa1580156144a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144cd9190614c01565b63ffffffff1692506001600160701b031692506001600160701b03169250818311156144fe57829450819350614505565b8194508293505b61450f858861320e565b94506141de8489612ae4565b60008060008061452a856130f7565b9350935093509350600061453c61309d565b90506000806000614550898888888861319a565b9194509250905060006145638686612fdc565b6001600160a01b038d16600090815260046020526040902054909150614589908b61320e565b6001600160a01b038d166000908152600460209081526040808320939093556003905220546145b8908561320e565b6001600160a01b03808e1660009081526003602052604080822093909355908d16815220546145e79084612ae4565b6001600160a01b038c1660009081526003602052604090205561460b30888761485c565b61461782828a89614907565b8a6001600160a01b03168c6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8b60405161465c91815260200190565b60405180910390a3505050505050505050505050565b600080600080614681856130f7565b9350935093509350600061469361309d565b905060008060006146a7898888888861319a565b9194509250905060006146ba8686612fdc565b6001600160a01b038d166000908152600360205260409020549091506146e0908561320e565b6001600160a01b03808e16600090815260036020908152604080832094909455918e16815260049091522054614716908a612ae4565b6001600160a01b038c166000908152600460209081526040808320939093556003905220546145e79084612ae4565b600080600080614754856130f7565b9350935093509350600061476661309d565b9050600080600061477a898888888861319a565b91945092509050600061478d8686612fdc565b6001600160a01b038d166000908152600360205260409020549091506145b8908561320e565b6000806000806147c2856130f7565b935093509350935060006147d461309d565b905060008060006147e8898888888861319a565b9194509250905060006147fb8686612fdc565b6001600160a01b038d16600090815260046020526040902054909150614821908b61320e565b6001600160a01b038d166000908152600460209081526040808320939093556003905220546146e0908561320e565b60006112ed838361495f565b6000821161486957505050565b60006148758383612fdc565b6001600160a01b03851660009081526003602052604090205490915061489b9082612ae4565b6001600160a01b0385166000908152600360205260409020556148bf6008856130c0565b15614901576001600160a01b0384166000908152600460205260409020546148e79084612ae4565b6001600160a01b0385166000908152600460205260409020555b50505050565b614926836149208660135461320e90919063ffffffff16565b9061320e565b6013556014546149369083612ae4565b6014556015546149469082612ae4565b601555601254614956908261320e565b60125550505050565b815460009082106149bd5760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610f27565b8260000182815481106149d2576149d2614f4e565b9060005260206000200154905092915050565b8035801515811461443957600080fd5b80516001600160701b038116811461443957600080fd5b600060208284031215614a1e57600080fd5b81356112ed81614f7a565b600060208284031215614a3b57600080fd5b81516112ed81614f7a565b60008060408385031215614a5957600080fd5b8235614a6481614f7a565b91506020830135614a7481614f7a565b809150509250929050565b600080600060608486031215614a9457600080fd5b8335614a9f81614f7a565b92506020840135614aaf81614f7a565b929592945050506040919091013590565b60008060408385031215614ad357600080fd5b8235614ade81614f7a565b9150614aec602084016149e5565b90509250929050565b60008060408385031215614b0857600080fd5b8235614b1381614f7a565b946020939093013593505050565b60006020808385031215614b3457600080fd5b825167ffffffffffffffff80821115614b4c57600080fd5b818501915085601f830112614b6057600080fd5b815181811115614b7257614b72614f64565b8060051b604051601f19603f83011681018181108582111715614b9757614b97614f64565b604052828152858101935084860182860187018a1015614bb657600080fd5b600095505b83861015614bd9578051855260019590950194938601938601614bbb565b5098975050505050505050565b600060208284031215614bf857600080fd5b6112ed826149e5565b600080600060608486031215614c1657600080fd5b614c1f846149f5565b9250614c2d602085016149f5565b9150604084015163ffffffff81168114614c4657600080fd5b809150509250925092565b600060208284031215614c6357600080fd5b5035919050565b60008060408385031215614c7d57600080fd5b82359150614aec602084016149e5565b60008060408385031215614ca057600080fd5b50508035926020909101359150565b600080600060608486031215614cc457600080fd5b8351925060208401519150604084015190509250925092565b600081518084526020808501945080840160005b83811015614d165781516001600160a01b031687529582019590820190600101614cf1565b509495945050505050565b600060208083528351808285015260005b81811015614d4e57858101830151858201604001528201614d32565b81811115614d60576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252602c908201527f546f74616c20666565732063616e206e6f74206578636565642074686520646560408201526b18db185c9959081b1a5b5a5d60a21b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526023908201527f43616c6c6572206973206e6f74207468652064657657616c6c6574206164647260408201526265737360e81b606082015260800190565b828152604060208201526000614e536040830184614cdd565b949350505050565b85815284602082015260a060408201526000614e7a60a0830186614cdd565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115614eaa57614eaa614f22565b500190565b600082614ecc57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614eeb57614eeb614f22565b500290565b600082821015614f0257614f02614f22565b500390565b6000600019821415614f1b57614f1b614f22565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461181857600080fdfe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207d52faad9126e7edca84c4398699b70936f3c9404abbb4b780e9eee212c3cb9f64736f6c634300080700330000000000000000000000007f8751b6567871b703090363284c6deb5e8fbd3d

Deployed Bytecode

0x6080604052600436106104b95760003560e01c8063735d1cb81161026b578063b6b28a331161014f578063dd2a62e2116100c1578063f2fde38b11610085578063f2fde38b14610e5c578063f5c52ceb14610e7c578063f80e82b614610e92578063fda3947514610ea7578063fdc86c2f14610ebd578063ff35d22014610edd57600080fd5b8063dd2a62e214610dac578063dd62ed3e14610dc1578063e3c2578614610e07578063ea1644d514610e1c578063ea2f0b3714610e3c57600080fd5b8063c49b9a8011610113578063c49b9a8014610cf2578063cbecede014610d12578063cea2695814610d2c578063cf6a8e5114610d4c578063d543dbeb14610d6c578063d5aed6bf14610d8c57600080fd5b8063b6b28a3314610c72578063ba40007314610c87578063bea9849e14610c9c578063c0b0fda214610cbc578063c21ebd0714610cd257600080fd5b80639c74daf0116101e8578063a457c2d7116101ac578063a457c2d714610bd3578063a9059cbb14610bf3578063aa45026b14610c13578063ac41860e14610c29578063b3f22ce314610c3e578063b439824414610c5457600080fd5b80639c74daf014610b485780639c9c249214610b685780639e37da4314610b7e578063a19bd31914610b9e578063a3e4be6714610bbe57600080fd5b80638da5cb5b1161022f5780638da5cb5b14610aa85780638eb2406514610ac65780638ee88c5314610ae65780638f9a55c014610b0657806395d89b4114610b1c57600080fd5b8063735d1cb814610a1d5780637d1db4a514610a325780637d520dde14610a4857806387b27dec14610a6857806388f8202014610a8857600080fd5b80633bd5d1731161039d5780635054e8bf1161030f578063583e0568116102d3578063583e056814610944578063664e4ed1146109825780636833b55a146109a25780636bc87c3a146109d257806370a08231146109e8578063715018a614610a0857600080fd5b80635054e8bf146108b957806351bd2611146108ce57806352390c02146108ee5780635342acb41461090e57806354a417671461092e57600080fd5b80634549b039116103615780634549b0391461080357806345ed22c114610823578063479e72e01461084357806347ee03941461086357806348a8fe2e146108835780634ebe3cf2146108a357600080fd5b80633bd5d1731461076e5780633c9f861d1461078e57806340927952146107a3578063417c73a7146107c3578063437823ec146107e357600080fd5b806323b872dd116104365780633685d419116103fa5780633685d419146106c2578063379e2919146106e2578063380a21f81461070257806339509351146107185780633b03f45a146107385780633b124fe71461075857600080fd5b806323b872dd146106315780632a9319cb146106515780632d838119146106715780632eb2e9f414610691578063313ce567146106a657600080fd5b8063109fa9be1161047d578063109fa9be1461059f578063120a0612146105bf57806313114a9d146105df57806318160ddd146105f45780631e452d0d1461060957600080fd5b8063052d9e7e146104c5578063061c82d0146104e757806306fdde0314610507578063095ea7b31461054b5780630cffa75e1461057b57600080fd5b366104c057005b600080fd5b3480156104d157600080fd5b506104e56104e0366004614be6565b610efd565b005b3480156104f357600080fd5b506104e5610502366004614c51565b610f43565b34801561051357600080fd5b506040805180820190915260098152684669626f6e6163636960b81b60208201525b6040516105429190614d21565b60405180910390f35b34801561055757600080fd5b5061056b610566366004614af5565b610fba565b6040519015158152602001610542565b34801561058757600080fd5b5061059160195481565b604051908152602001610542565b3480156105ab57600080fd5b506104e56105ba366004614be6565b610fd1565b3480156105cb57600080fd5b506104e56105da366004614a0c565b611015565b3480156105eb57600080fd5b50601454610591565b34801561060057600080fd5b50601254610591565b34801561061557600080fd5b5060295460245460408051928352602083019190915201610542565b34801561063d57600080fd5b5061056b61064c366004614a7f565b6110d0565b34801561065d57600080fd5b506104e561066c366004614c51565b611139565b34801561067d57600080fd5b5061059161068c366004614c51565b611270565b34801561069d57600080fd5b506104e56112f4565b3480156106b257600080fd5b5060405160128152602001610542565b3480156106ce57600080fd5b506104e56106dd366004614a0c565b61132e565b3480156106ee57600080fd5b506104e56106fd366004614c51565b6113e3565b34801561070e57600080fd5b5061059160185481565b34801561072457600080fd5b5061056b610733366004614af5565b6114b8565b34801561074457600080fd5b506104e5610753366004614be6565b6114ee565b34801561076457600080fd5b50610591601a5481565b34801561077a57600080fd5b506104e5610789366004614c51565b611536565b34801561079a57600080fd5b50601554610591565b3480156107af57600080fd5b506104e56107be366004614ac0565b61163e565b3480156107cf57600080fd5b506104e56107de366004614a0c565b61168d565b3480156107ef57600080fd5b506104e56107fe366004614a0c565b6116c2565b34801561080f57600080fd5b5061059161081e366004614c6a565b6116f7565b34801561082f57600080fd5b506104e561083e366004614be6565b6117cf565b34801561084f57600080fd5b506104e561085e366004614c51565b61181b565b34801561086f57600080fd5b506104e561087e366004614a0c565b61190c565b34801561088f57600080fd5b506104e561089e366004614a0c565b611941565b3480156108af57600080fd5b5061059160175481565b3480156108c557600080fd5b506104e5611a02565b3480156108da57600080fd5b506104e56108e9366004614be6565b611aab565b3480156108fa57600080fd5b506104e5610909366004614a0c565b611af3565b34801561091a57600080fd5b5061056b610929366004614a0c565b611c57565b34801561093a57600080fd5b5061059160165481565b34801561095057600080fd5b50602a5461096a906201000090046001600160a01b031681565b6040516001600160a01b039091168152602001610542565b34801561098e57600080fd5b506104e561099d366004614c51565b611c64565b3480156109ae57600080fd5b506109b7611d75565b60408051938452602084019290925290820152606001610542565b3480156109de57600080fd5b50610591601b5481565b3480156109f457600080fd5b50610591610a03366004614a0c565b611de2565b348015610a1457600080fd5b506104e5611e32565b348015610a2957600080fd5b506104e5611ea6565b348015610a3e57600080fd5b50610591601f5481565b348015610a5457600080fd5b506104e5610a63366004614be6565b611ee4565b348015610a7457600080fd5b506104e5610a83366004614c8d565b611f85565b348015610a9457600080fd5b5061056b610aa3366004614a0c565b611fc1565b348015610ab457600080fd5b506000546001600160a01b031661096a565b348015610ad257600080fd5b506104e5610ae1366004614be6565b611fce565b348015610af257600080fd5b506104e5610b01366004614c51565b612022565b348015610b1257600080fd5b50610591601e5481565b348015610b2857600080fd5b506040805180820190915260038152622324a160e91b6020820152610535565b348015610b5457600080fd5b50602b5461096a906001600160a01b031681565b348015610b7457600080fd5b5061059160235481565b348015610b8a57600080fd5b50602c5461096a906001600160a01b031681565b348015610baa57600080fd5b506104e5610bb9366004614c51565b612093565b348015610bca57600080fd5b506104e56120c2565b348015610bdf57600080fd5b5061056b610bee366004614af5565b612102565b348015610bff57600080fd5b5061056b610c0e366004614af5565b612151565b348015610c1f57600080fd5b50610591601c5481565b348015610c3557600080fd5b506104e561215e565b348015610c4a57600080fd5b5061059160205481565b348015610c6057600080fd5b506001546001600160a01b031661096a565b348015610c7e57600080fd5b5061059161219f565b348015610c9357600080fd5b506105916121d6565b348015610ca857600080fd5b506104e5610cb7366004614a0c565b61220a565b348015610cc857600080fd5b50610591601d5481565b348015610cde57600080fd5b50602d5461096a906001600160a01b031681565b348015610cfe57600080fd5b506104e5610d0d366004614be6565b61225e565b348015610d1e57600080fd5b50602a5461056b9060ff1681565b348015610d3857600080fd5b506104e5610d47366004614c51565b6122cf565b348015610d5857600080fd5b50610591610d67366004614c8d565b612340565b348015610d7857600080fd5b506104e5610d87366004614c51565b61245b565b348015610d9857600080fd5b506104e5610da7366004614a0c565b612595565b348015610db857600080fd5b506104e56125e1565b348015610dcd57600080fd5b50610591610ddc366004614a46565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610e1357600080fd5b50610591612784565b348015610e2857600080fd5b506104e5610e37366004614c51565b6127ac565b348015610e4857600080fd5b506104e5610e57366004614a0c565b61285a565b348015610e6857600080fd5b506104e5610e77366004614a0c565b61288f565b348015610e8857600080fd5b5061059160225481565b348015610e9e57600080fd5b5061096a612979565b348015610eb357600080fd5b5061059160285481565b348015610ec957600080fd5b506104e5610ed8366004614c51565b6129b4565b348015610ee957600080fd5b506104e5610ef8366004614c51565b6129e3565b6000546001600160a01b03163314610f305760405162461bcd60e51b8152600401610f2790614dc2565b60405180910390fd5b6032805460ff1916911515919091179055565b6000546001600160a01b03163314610f6d5760405162461bcd60e51b8152600401610f2790614dc2565b6107d0610f97601d54610f91601c54610f91601b5487612ae490919063ffffffff16565b90612ae4565b1115610fb55760405162461bcd60e51b8152600401610f2790614d76565b601a55565b6000610fc7338484612b43565b5060015b92915050565b6000546001600160a01b03163314610ffb5760405162461bcd60e51b8152600401610f2790614dc2565b603280549115156101000261ff0019909216919091179055565b6000546001600160a01b0316331461103f5760405162461bcd60e51b8152600401610f2790614dc2565b6002546001600160a01b0316156110ae5760405162461bcd60e51b815260206004820152602d60248201527f4465762077616c6c657420616464726573732063616e6e6f742062652063686160448201526c1b99d959081bdb98d9481cd95d609a1b6064820152608401610f27565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b60006110dd848484612c67565b61112f843361112a85604051806060016040528060288152602001614f90602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190612fa2565b612b43565b5060019392505050565b6000546001600160a01b031633146111635760405162461bcd60e51b8152600401610f2790614dc2565b6127108111156111db5760405162461bcd60e51b815260206004820152603f60248201527f4d696e696d756d206c69717569646974792070657263656e746167652070657260448201527f63656e746167652063616e2774206265206d6f7265207468616e2031303025006064820152608401610f27565b600081116112495760405162461bcd60e51b815260206004820152603560248201527f4d696e696d756d206c69717569646974792070657263656e746167652070657260448201527463656e746167652063616e2774206265207a65726f60581b6064820152608401610f27565b61126a61271061126483601254612fdc90919063ffffffff16565b9061305b565b60205550565b60006013548211156112d75760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610f27565b60006112e161309d565b90506112ed838261305b565b9392505050565b6000546001600160a01b0316331461131e5760405162461bcd60e51b8152600401610f2790614dc2565b602f805461ffff19166001179055565b6000546001600160a01b031633146113585760405162461bcd60e51b8152600401610f2790614dc2565b6113636008826130c0565b6113bd5760405162461bcd60e51b815260206004820152602560248201527f4163636f756e7420697320616c726561647920696e636c7564656420696e2072604482015264195dd85c9960da1b6064820152608401610f27565b6113c86008826130e2565b506001600160a01b0316600090815260046020526040812055565b6000546001600160a01b0316331461140d5760405162461bcd60e51b8152600401610f2790614dc2565b60968111156114715760405162461bcd60e51b815260206004820152602a60248201527f44657620666565732063616e206e6f742065786365656420746865206465636c604482015269185c9959081b1a5b5a5d60b21b6064820152608401610f27565b6107d0611495601d54610f9184610f91601b54601a54612ae490919063ffffffff16565b11156114b35760405162461bcd60e51b8152600401610f2790614d76565b601c55565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610fc791859061112a9086612ae4565b6000546001600160a01b031633146115185760405162461bcd60e51b8152600401610f2790614dc2565b602f805491151563010000000263ff00000019909216919091179055565b336115426008826130c0565b156115a45760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610f27565b60008060006115b2856130f7565b9350935093505060006115c361309d565b905060006115d4878686868661319a565b50506001600160a01b0387166000908152600360205260409020549091506115fc908261320e565b6001600160a01b038716600090815260036020526040902055601354611622908261320e565b6013556014546116329088612ae4565b60145550505050505050565b6000546001600160a01b031633146116685760405162461bcd60e51b8152600401610f2790614dc2565b801561167e57611679600c83612acf565b505050565b611679600c836130e2565b5050565b6000546001600160a01b031633146116b75760405162461bcd60e51b8152600401610f2790614dc2565b611689600e82612acf565b6000546001600160a01b031633146116ec5760405162461bcd60e51b8152600401610f2790614dc2565b611689600a82612acf565b600060125483111561174b5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610f27565b8161179057600080600061175e866130f7565b93509350935050600061176f61309d565b90506000611780888686868661319a565b50909650610fcb95505050505050565b600080600061179e866130f7565b9350935093505060006117af61309d565b905060006117c0888686868661319a565b509650610fcb95505050505050565b6000546001600160a01b031633146117f95760405162461bcd60e51b8152600401610f2790614dc2565b602f54610100900460ff161561181857602f805460ff19168215151790555b50565b6000546001600160a01b031633146118455760405162461bcd60e51b8152600401610f2790614dc2565b6102268111156118bd5760405162461bcd60e51b815260206004820152603860248201527f49206b6e6f7720796f752077616e7420746f2070756e697368207468656d202c60448201527f206275742074686579206172652068756d616e20746f6f2e00000000000000006064820152608401610f27565b60fa8110156119075760405162461bcd60e51b8152602060048201526016602482015275249030b4b713ba103a3430ba1036b2b931b4b33ab61760511b6044820152606401610f27565b602255565b6000546001600160a01b031633146119365760405162461bcd60e51b8152600401610f2790614dc2565b611689601082612acf565b6000546001600160a01b0316331461196b5760405162461bcd60e51b8152600401610f2790614dc2565b6001546001600160a01b0316156119e05760405162461bcd60e51b815260206004820152603360248201527f4c6f636b6564206c697175696469747920616464726573732063616e6e6f742060448201527218994818da185b99d959081bdb98d9481cd95d606a1b6064820152608401610f27565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b03163314611a2c5760405162461bcd60e51b8152600401610f2790614df7565b602154611a399047612ae4565b6021556002546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611a75573d6000803e3d6000fd5b506040514781527f2163423df8c81336c4fbc2223f77e05e2d04aab842e4a5edf894b539ca7955309060200160405180910390a1565b6000546001600160a01b03163314611ad55760405162461bcd60e51b8152600401610f2790614dc2565b602d8054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b03163314611b1d5760405162461bcd60e51b8152600401610f2790614dc2565b611b286008826130c0565b15611b835760405162461bcd60e51b815260206004820152602560248201527f4163636f756e7420697320616c7265616479206578636c7564656420696e2072604482015264195dd85c9960da1b6064820152608401610f27565b610400611b906008613250565b10611bf25760405162461bcd60e51b815260206004820152602c60248201527f4578636c7564656420726577617264207365742072656163686564206d61786960448201526b6d756d20636170616369747960a01b6064820152608401610f27565b6001600160a01b03811660009081526003602052604090205415611c4c576001600160a01b038116600090815260036020526040902054611c3290611270565b6001600160a01b0382166000908152600460205260409020555b611689600882612acf565b6000610fcb600a836130c0565b6000546001600160a01b03163314611c8e5760405162461bcd60e51b8152600401610f2790614dc2565b6103cf811115611cff5760405162461bcd60e51b815260206004820152603660248201527f43616e277420696e637265617365204154482073656c6c20746178207065726360448201527532b73a30b3b29036b7b932903a3430b7103a3434b99760511b6064820152608401610f27565b610343811015611d705760405162461bcd60e51b815260206004820152603660248201527f43616e2774206465637265617365204154482073656c6c20746178207065726360448201527532b73a30b3b29036b7b932903a3430b7103a3434b99760511b6064820152608401610f27565b602355565b336000908152600660209081526040808320546007835281842054818552603090935290832054839283924292909190849082851115611dbc57611db9858461320e565b91505b80158015611dca5750600384115b15611dd457506031545b929792965094509092505050565b6000611def6008836130c0565b15611e1057506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610fcb90611270565b6000546001600160a01b03163314611e5c5760405162461bcd60e51b8152600401610f2790614dc2565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611ed05760405162461bcd60e51b8152600401610f2790614dc2565b6032805463ffff0000191662010000179055565b6000546001600160a01b03163314611f0e5760405162461bcd60e51b8152600401610f2790614dc2565b60325462010000900460ff1615611f675760405162461bcd60e51b815260206004820152601b60248201527f446576206d6f646520697320636c6f73656420666f72657665722e00000000006044820152606401610f27565b6032805491151563010000000263ff00000019909216919091179055565b6000546001600160a01b03163314611faf5760405162461bcd60e51b8152600401610f2790614dc2565b60009182526030602052604090912055565b6000610fcb6008836130c0565b6000546001600160a01b03163314611ff85760405162461bcd60e51b8152600401610f2790614dc2565b602f54610100900460ff161561181857602f8054821515620100000262ff00001990911617905550565b6000546001600160a01b0316331461204c5760405162461bcd60e51b8152600401610f2790614dc2565b6107d0612070601d54610f91601c54610f9186601a54612ae490919063ffffffff16565b111561208e5760405162461bcd60e51b8152600401610f2790614d76565b601b55565b6000546001600160a01b031633146120bd5760405162461bcd60e51b8152600401610f2790614dc2565b602e55565b6000546001600160a01b031633146120ec5760405162461bcd60e51b8152600401610f2790614dc2565b6000601681905560178190556018819055601955565b6000610fc7338461112a85604051806060016040528060258152602001614fb8602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190612fa2565b6000610fc7338484612c67565b6000546001600160a01b031633146121885760405162461bcd60e51b8152600401610f2790614dc2565b6032601a81905561012c601b556096601c55601d55565b60006121b8601b54601c54612ae490919063ffffffff16565b601b546121c790612710614ed1565b6121d19190614eaf565b905090565b6002546000906001600160a01b031633146122035760405162461bcd60e51b8152600401610f2790614df7565b5060215490565b6000546001600160a01b031633146122345760405162461bcd60e51b8152600401610f2790614dc2565b602a80546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6000546001600160a01b031633146122885760405162461bcd60e51b8152600401610f2790614dc2565b602a805460ff19168215159081179091556040519081527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599060200160405180910390a150565b6000546001600160a01b031633146122f95760405162461bcd60e51b8152600401610f2790614dc2565b6107d061231d82610f91601c54610f91601b54601a54612ae490919063ffffffff16565b111561233b5760405162461bcd60e51b8152600401610f2790614d76565b601d55565b600080600080600080602c60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561239757600080fd5b505afa1580156123ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123cf9190614c01565b63ffffffff1692506001600160701b031692506001600160701b031692508183111561240057829450819350612407565b8194508293505b8461241a57600195505050505050610fcb565b60006124268689612ae4565b9050600061244d826112646026546124478e8b61320e90919063ffffffff16565b90612fdc565b9a9950505050505050505050565b6000546001600160a01b031633146124855760405162461bcd60e51b8152600401610f2790614dc2565b6127108111156124fd5760405162461bcd60e51b815260206004820152603c60248201527f4d6178696d756d207472616e73616374696f6e206c696d69742070657263656e60448201527f746167652063616e2774206265206d6f7265207468616e2031303025000000006064820152608401610f27565b60648110156125745760405162461bcd60e51b815260206004820152603f60248201527f4d6178696d756d207472616e73616374696f6e206c696d69742063616e27742060448201527f6265206c657373207468616e20746865206465636c61726564206c696d6974006064820152608401610f27565b61258f61271061126483601254612fdc90919063ffffffff16565b601f5550565b6000546001600160a01b031633146125bf5760405162461bcd60e51b8152600401610f2790614dc2565b602b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461260b5760405162461bcd60e51b8152600401610f2790614dc2565b603060205260197f686dc217b182b1fe88c7defdc5cd77807fc691ce05a160638669d7322051eee05560377fc7874712a1c7fb891b421aa6c0d42dbf3cd912d7a18f183783fb32e938cbaa0155603c7f89a47dfbb363dd4e64da56b4585033c9abd8a425d24b94630469c44bee7189c25560787f11a30d68d5ffd3a101d3683e9a6997d49d9351e95dc004c6a4e652b897626df75560b47f2f780f5a40ea4901ca784926540b83b7459f13a98fc8f78e5634eb2a01df3af55561015e7f9d0b70a39d4b3569f175af8ea51ae318eac80460c467ee4a16ee63ec5720706e556102e47fd558ed0e54509c62efb2aedb46e6ad1b04c7bdca351e3613e136c946b91686d85561049c7f4ebb69666752feecd656ebf5f8cd3c2f1c70bb06a0c3d3744be479e4a580c233556109c47fa486383ba35136cdb74cd2aa7ac94004c5d7a5da0cbc794ef0a3909609a2b4a15560096000526130d47fb0fb8c799ed0a9ebd24dd2177f752eb5b4872b0e0f3da30ee877615a016e915d55565b600061279d601b54601c54612ae490919063ffffffff16565b601c546121c790612710614ed1565b6000546001600160a01b031633146127d65760405162461bcd60e51b8152600401610f2790614dc2565b600a8110156128395760405162461bcd60e51b815260206004820152602960248201527f43616e277420646563657265617365206d617877616c6c6574206d6f726520746044820152683430b7103a3430ba1760b91b6064820152608401610f27565b6127108160125461284a9190614ed1565b6128549190614eaf565b601e5550565b6000546001600160a01b031633146128845760405162461bcd60e51b8152600401610f2790614dc2565b611689600a826130e2565b6000546001600160a01b031633146128b95760405162461bcd60e51b8152600401610f2790614dc2565b6001600160a01b03811661291e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f27565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b031633146129a45760405162461bcd60e51b8152600401610f2790614dc2565b506002546001600160a01b031690565b6000546001600160a01b031633146129de5760405162461bcd60e51b8152600401610f2790614dc2565b603155565b6000546001600160a01b03163314612a0d5760405162461bcd60e51b8152600401610f2790614dc2565b61014d8111612a6a5760405162461bcd60e51b8152602060048201526024808201527f4669626f6e616363692063616e6e6f74206265206c6f776572207468616e20746044820152633434b99760e11b6064820152608401610f27565b610384811115612aca5760405162461bcd60e51b815260206004820152602560248201527f4669626f6e616363692063616e6e6f7420626520686967686572207468616e206044820152643a3434b99760d91b6064820152608401610f27565b602855565b60006112ed836001600160a01b03841661325a565b600080612af18385614e97565b9050838110156112ed5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610f27565b6001600160a01b038316612ba55760405162461bcd60e51b8152602060048201526024808201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f27565b6001600160a01b038216612c065760405162461bcd60e51b815260206004820152602260248201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f27565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612ccb5760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610f27565b6001600160a01b038216612d2d5760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610f27565b6002546001600160a01b0383811691161415612d9c5760405162461bcd60e51b815260206004820152602860248201527f4465762077616c6c657420616464726573732063616e6e6f74207265636569766044820152676520746f6b656e7360c01b6064820152608401610f27565b6002546001600160a01b0384811691161415612e085760405162461bcd60e51b815260206004820152602560248201527f4465762077616c6c657420616464726573732063616e6e6f742073656e6420746044820152646f6b656e7360d81b6064820152608401610f27565b60008111612e6a5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610f27565b6000546001600160a01b03848116911614801590612e9657506000546001600160a01b03838116911614155b15612efe57601f54811115612efe5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610f27565b6000612f0930611de2565b9050601f548110612f195750601f545b60205481108015908190612f355750602a54610100900460ff16155b8015612f495750612f47600c866130c0565b155b8015612f575750602a5460ff165b15612f6757612f676020546132a9565b6001612f74600a876130c0565b80612f855750612f85600a866130c0565b15612f8e575060005b612f9a86868684613396565b505050505050565b60008184841115612fc65760405162461bcd60e51b8152600401610f279190614d21565b506000612fd38486614ef0565b95945050505050565b600082612feb57506000610fcb565b6000612ff78385614ed1565b9050826130048583614eaf565b146112ed5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610f27565b60006112ed83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613c5c565b60008060006130aa613c8a565b90925090506130b9828261305b565b9250505090565b6001600160a01b038116600090815260018301602052604081205415156112ed565b60006112ed836001600160a01b038416613d9d565b600080600080600061311a61271061126460165489612fdc90919063ffffffff16565b9050600061314561271061126461313e601854601754612ae490919063ffffffff16565b8a90612fdc565b905060006131646127106112646019548b612fdc90919063ffffffff16565b90506000613172898561320e565b905061317e818461320e565b905061318a818361320e565b9993985091965094509092505050565b60008080806131a98986612fdc565b905060006131b78987612fdc565b905060006131c58988612fdc565b905060006131d38989612fdc565b905060006131e1858561320e565b90506131ed818461320e565b90506131f9818361320e565b949d949c50929a509298505050505050505050565b60006112ed83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612fa2565b6000610fcb825490565b60008181526001830160205260408120546132a157508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610fcb565b506000610fcb565b602a805461ff00191661010017905560006132d2614e206112646132cb61219f565b8590612fdc565b905060006132e0838361320e565b905060006132fa826112646132f3612784565b8790612fdc565b90504761330683613e8a565b6000613312478361320e565b905060006133266127106112648487612fdc565b90506000613334838361320e565b90506133408782614010565b60408051878152602081018390529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050602a805461ff0019169055505050505050565b6032546301000000900460ff1661346557602b546001600160a01b038481169116148015906133d357506027546001600160a01b03848116911614155b80156133ed5750602d546001600160a01b03848116911614155b1561346557601e54826133ff85611de2565b6134099190614e97565b11156134655760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61782060448201526439b4bd329760d91b6064820152608401610f27565b603254610100900460ff161561351957613480600e856130c0565b156134c75760405162461bcd60e51b815260206004820152601760248201527620b2323932b9b99034b990313630b1b5b634b9ba32b21760491b6044820152606401610f27565b6134d2600e846130c0565b156135195760405162461bcd60e51b815260206004820152601760248201527620b2323932b9b99034b990313630b1b5b634b9ba32b21760491b6044820152606401610f27565b60325460ff16156135d25761352f6010856130c0565b61357b5760405162461bcd60e51b815260206004820152601b60248201527f41646472657373206973206e6f742077686974656c69737465642e00000000006044820152606401610f27565b6135866010846130c0565b6135d25760405162461bcd60e51b815260206004820152601b60248201527f41646472657373206973206e6f742077686974656c69737465642e00000000006044820152606401610f27565b6032546301000000900460ff161561365757602b546001600160a01b0384811691161415613657576000546001600160a01b038581169116146136575760405162461bcd60e51b815260206004820152601760248201527f4f6e6c79206f776e65722063616e20616464206c69712e0000000000000000006044820152606401610f27565b602b546001600160a01b0384811691161480156136765750602f5460ff165b156139615760408051600280825260608201835260009260208301908036833701905050905030816000815181106136b0576136b0614f4e565b60200260200101906001600160a01b031690816001600160a01b031681525050602a60029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561371e57600080fd5b505afa158015613732573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137569190614a29565b8160018151811061376957613769614f4e565b6001600160a01b039283166020918202929092010152602a5460405163d06ca61f60e01b8152600092620100009092049091169063d06ca61f906137b39087908690600401614e3a565b60006040518083038186803b1580156137cb57600080fd5b505afa1580156137df573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526138079190810190614b21565b60018151811061381957613819614f4e565b60200260200101519050600061382f8286612340565b905060285461384f6024546112646103e885612fdc90919063ffffffff16565b10156138cd5760405162461bcd60e51b815260206004820152604160248201527f5472616e73616374696f6e2077696c6c2064726f70207468652070726963652060448201527f62656c6f772074686520476f6c64656e526174696f202c2072657665727465646064820152601760f91b608482015260a401610f27565b60285460295410156139405760405162461bcd60e51b815260206004820152603660248201527f49646b20686f7720796f7520706173736564207468617420726571756972656d60448201527532b73a10313aba1034ba1039ba37b839903432b9329760511b6064820152608401610f27565b61394a8286614101565b5061395487614242565b61395c6143aa565b505050505b602b546001600160a01b0385811691161480156139805750602f5460ff165b15613b3b5760408051600280825260608201835260009260208301908036833701905050905030816000815181106139ba576139ba614f4e565b60200260200101906001600160a01b031690816001600160a01b031681525050602a60029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613a2857600080fd5b505afa158015613a3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a609190614a29565b81600181518110613a7357613a73614f4e565b6001600160a01b039283166020918202929092010152602a5460405163d06ca61f60e01b8152600092620100009092049091169063d06ca61f90613abd9087908690600401614e3a565b60006040518083038186803b158015613ad557600080fd5b505afa158015613ae9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613b119190810190614b21565b600181518110613b2357613b23614f4e565b60200260200101519050613b37818561443e565b5050505b602b546001600160a01b03858116911614801590613b675750602b546001600160a01b03848116911614155b15613b7557613b7584614242565b801580613b8b57506032546301000000900460ff165b15613ba55760006016819055601781905560188190556019555b6000613bb26008866130c0565b90506000613bc16008866130c0565b9050818015613bce575080155b15613be357613bde86868661451b565b613c3f565b81158015613bee5750805b15613bfe57613bde868686614672565b81158015613c0a575080155b15613c1a57613bde868686614745565b818015613c245750805b15613c3457613bde8686866147b3565b613c3f868686614745565b612f9a601a54601655601b54601755601c54601855601d54601955565b60008183613c7d5760405162461bcd60e51b8152600401610f279190614d21565b506000612fd38486614eaf565b6013546012546000918291825b613ca16008613250565b811015613d6d576000613cb5600883614850565b6001600160a01b038116600090815260036020526040902054909150841080613cf557506001600160a01b03811660009081526004602052604090205483105b15613d0c5760135460125495509550505050509091565b6001600160a01b038116600090815260036020526040902054613d3090859061320e565b6001600160a01b038216600090815260046020526040902054909450613d5790849061320e565b9250508080613d6590614f07565b915050613c97565b50601254601354613d7d9161305b565b821015613d94576013546012549350935050509091565b90939092509050565b60008181526001830160205260408120548015613e80576000613dc1600183614ef0565b8554909150600090613dd590600190614ef0565b90506000866000018281548110613dee57613dee614f4e565b9060005260206000200154905080876000018481548110613e1157613e11614f4e565b600091825260208083209091019290925582815260018901909152604090208490558654879080613e4457613e44614f38565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610fcb565b6000915050610fcb565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613ebf57613ebf614f4e565b60200260200101906001600160a01b031690816001600160a01b031681525050602a60029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613f2d57600080fd5b505afa158015613f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f659190614a29565b81600181518110613f7857613f78614f4e565b6001600160a01b039283166020918202929092010152602a54613fa49130916201000090041684612b43565b602a5460405163791ac94760e01b8152620100009091046001600160a01b03169063791ac94790613fe2908590600090869030904290600401614e5b565b600060405180830381600087803b158015613ffc57600080fd5b505af1158015612f9a573d6000803e3d6000fd5b602a5461402e9030906201000090046001600160a01b031684612b43565b602a546001600160a01b03620100009091041663f305d71982308560008061405e6001546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b1580156140c157600080fd5b505af11580156140d5573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906140fa9190614caf565b5050505050565b600080600080600080602c60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561415857600080fd5b505afa15801561416c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141909190614c01565b63ffffffff1692506001600160701b031692506001600160701b03169250818311156141c1578294508193506141c8565b8194508293505b6141d28588612ae4565b94506141de848961320e565b9350846141f357600195505050505050610fcb565b600061420e8661126460265488612fdc90919063ffffffff16565b90506024548111156142205760248190555b60245461423390611264836103e8612fdc565b60295598975050505050505050565b6001600160a01b0381166000908152600660209081526040808320546007909252822054602f5442939062010000900460ff161561434157602b546001600160a01b0386811691161461434157818411156143415760006142a3858461320e565b6001600160a01b0387166000908152600760209081526040808320899055878352603090915290205492509050811580156142de5750600384115b156142e95760315491505b602e548110614310576001600160a01b038616600090815260066020526040812081905591505b602e5481101561433f57614325846001614e97565b6001600160a01b0387166000908152600660205260409020555b505b80601760008282546143539190614e97565b92505081905550806019600082825461436c9190614e97565b9250508190555080601660008282546143859190614e97565b92505081905550806018600082825461439e9190614e97565b90915550505050505050565b602d546000908190600160a01b900460ff16156144395760235460295411156144395760019050602254601760008282546143e59190614e97565b9091555050602254601980546000906143ff908490614e97565b909155505060225460168054600090614419908490614e97565b909155505060225460188054600090614433908490614e97565b90915550505b919050565b600080600080600080602c60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561449557600080fd5b505afa1580156144a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144cd9190614c01565b63ffffffff1692506001600160701b031692506001600160701b03169250818311156144fe57829450819350614505565b8194508293505b61450f858861320e565b94506141de8489612ae4565b60008060008061452a856130f7565b9350935093509350600061453c61309d565b90506000806000614550898888888861319a565b9194509250905060006145638686612fdc565b6001600160a01b038d16600090815260046020526040902054909150614589908b61320e565b6001600160a01b038d166000908152600460209081526040808320939093556003905220546145b8908561320e565b6001600160a01b03808e1660009081526003602052604080822093909355908d16815220546145e79084612ae4565b6001600160a01b038c1660009081526003602052604090205561460b30888761485c565b61461782828a89614907565b8a6001600160a01b03168c6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8b60405161465c91815260200190565b60405180910390a3505050505050505050505050565b600080600080614681856130f7565b9350935093509350600061469361309d565b905060008060006146a7898888888861319a565b9194509250905060006146ba8686612fdc565b6001600160a01b038d166000908152600360205260409020549091506146e0908561320e565b6001600160a01b03808e16600090815260036020908152604080832094909455918e16815260049091522054614716908a612ae4565b6001600160a01b038c166000908152600460209081526040808320939093556003905220546145e79084612ae4565b600080600080614754856130f7565b9350935093509350600061476661309d565b9050600080600061477a898888888861319a565b91945092509050600061478d8686612fdc565b6001600160a01b038d166000908152600360205260409020549091506145b8908561320e565b6000806000806147c2856130f7565b935093509350935060006147d461309d565b905060008060006147e8898888888861319a565b9194509250905060006147fb8686612fdc565b6001600160a01b038d16600090815260046020526040902054909150614821908b61320e565b6001600160a01b038d166000908152600460209081526040808320939093556003905220546146e0908561320e565b60006112ed838361495f565b6000821161486957505050565b60006148758383612fdc565b6001600160a01b03851660009081526003602052604090205490915061489b9082612ae4565b6001600160a01b0385166000908152600360205260409020556148bf6008856130c0565b15614901576001600160a01b0384166000908152600460205260409020546148e79084612ae4565b6001600160a01b0385166000908152600460205260409020555b50505050565b614926836149208660135461320e90919063ffffffff16565b9061320e565b6013556014546149369083612ae4565b6014556015546149469082612ae4565b601555601254614956908261320e565b60125550505050565b815460009082106149bd5760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610f27565b8260000182815481106149d2576149d2614f4e565b9060005260206000200154905092915050565b8035801515811461443957600080fd5b80516001600160701b038116811461443957600080fd5b600060208284031215614a1e57600080fd5b81356112ed81614f7a565b600060208284031215614a3b57600080fd5b81516112ed81614f7a565b60008060408385031215614a5957600080fd5b8235614a6481614f7a565b91506020830135614a7481614f7a565b809150509250929050565b600080600060608486031215614a9457600080fd5b8335614a9f81614f7a565b92506020840135614aaf81614f7a565b929592945050506040919091013590565b60008060408385031215614ad357600080fd5b8235614ade81614f7a565b9150614aec602084016149e5565b90509250929050565b60008060408385031215614b0857600080fd5b8235614b1381614f7a565b946020939093013593505050565b60006020808385031215614b3457600080fd5b825167ffffffffffffffff80821115614b4c57600080fd5b818501915085601f830112614b6057600080fd5b815181811115614b7257614b72614f64565b8060051b604051601f19603f83011681018181108582111715614b9757614b97614f64565b604052828152858101935084860182860187018a1015614bb657600080fd5b600095505b83861015614bd9578051855260019590950194938601938601614bbb565b5098975050505050505050565b600060208284031215614bf857600080fd5b6112ed826149e5565b600080600060608486031215614c1657600080fd5b614c1f846149f5565b9250614c2d602085016149f5565b9150604084015163ffffffff81168114614c4657600080fd5b809150509250925092565b600060208284031215614c6357600080fd5b5035919050565b60008060408385031215614c7d57600080fd5b82359150614aec602084016149e5565b60008060408385031215614ca057600080fd5b50508035926020909101359150565b600080600060608486031215614cc457600080fd5b8351925060208401519150604084015190509250925092565b600081518084526020808501945080840160005b83811015614d165781516001600160a01b031687529582019590820190600101614cf1565b509495945050505050565b600060208083528351808285015260005b81811015614d4e57858101830151858201604001528201614d32565b81811115614d60576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252602c908201527f546f74616c20666565732063616e206e6f74206578636565642074686520646560408201526b18db185c9959081b1a5b5a5d60a21b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526023908201527f43616c6c6572206973206e6f74207468652064657657616c6c6574206164647260408201526265737360e81b606082015260800190565b828152604060208201526000614e536040830184614cdd565b949350505050565b85815284602082015260a060408201526000614e7a60a0830186614cdd565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115614eaa57614eaa614f22565b500190565b600082614ecc57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614eeb57614eeb614f22565b500290565b600082821015614f0257614f02614f22565b500390565b6000600019821415614f1b57614f1b614f22565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461181857600080fdfe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207d52faad9126e7edca84c4398699b70936f3c9404abbb4b780e9eee212c3cb9f64736f6c63430008070033

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

0000000000000000000000007f8751b6567871b703090363284c6deb5e8fbd3d

-----Decoded View---------------
Arg [0] : cOwner (address): 0x7F8751b6567871b703090363284c6DeB5e8Fbd3D

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000007f8751b6567871b703090363284c6deb5e8fbd3d


Deployed Bytecode Sourcemap

4917:42415:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35582:111;;;;;;;;;;-1:-1:-1;35582:111:0;;;;;:::i;:::-;;:::i;:::-;;21616:290;;;;;;;;;;-1:-1:-1;21616:290:0;;;;;:::i;:::-;;:::i;10201:83::-;;;;;;;;;;-1:-1:-1;10271:5:0;;;;;;;;;;;;-1:-1:-1;;;10271:5:0;;;;10201:83;;;;;;;:::i;:::-;;;;;;;;15856:193;;;;;;;;;;-1:-1:-1;15856:193:0;;;;;:::i;:::-;;:::i;:::-;;;7072:14:2;;7065:22;7047:41;;7035:2;7020:18;15856:193:0;6907:187:2;6239:35:0;;;;;;;;;;;;;;;;;;;25242:25:2;;;25230:2;25215:18;6239:35:0;25096:177:2;35701:111:0;;;;;;;;;;-1:-1:-1;35701:111:0;;;;;:::i;:::-;;:::i;22188:298:1:-;;;;;;;;;;-1:-1:-1;22188:298:1;;;;;:::i;:::-;;:::i;20589:87:0:-;;;;;;;;;;-1:-1:-1;20658:10:0;;20589:87;;10478:95;;;;;;;;;;-1:-1:-1;10558:7:0;;10478:95;;13208:126;;;;;;;;;;-1:-1:-1;13294:8:0;;13303:14;;13208:126;;;26376:25:2;;;26432:2;26417:18;;26410:34;;;;26349:18;13208:126:0;26202:248:2;16436:446:0;;;;;;;;;;-1:-1:-1;16436:446:0;;;;;:::i;:::-;;:::i;23401:511::-;;;;;;;;;;-1:-1:-1;23401:511:0;;;;;:::i;:::-;;:::i;19431:324::-;;;;;;;;;;-1:-1:-1;19431:324:0;;;;;:::i;:::-;;:::i;30571:119::-;;;;;;;;;;;;;:::i;10387:83::-;;;;;;;;;;-1:-1:-1;10387:83:0;;6099:2;26921:36:2;;26909:2;26894:18;10387:83:0;26779:184:2;20294:287:0;;;;;;;;;;-1:-1:-1;20294:287:0;;;;;:::i;:::-;;:::i;22236:417::-;;;;;;;;;;-1:-1:-1;22236:417:0;;;;;:::i;:::-;;:::i;6198:34::-;;;;;;;;;;;;;;;;16890:300;;;;;;;;;;-1:-1:-1;16890:300:0;;;;;:::i;:::-;;:::i;31226:108::-;;;;;;;;;;-1:-1:-1;31226:108:0;;;;;:::i;:::-;;:::i;6285:26::-;;;;;;;;;;;;;;;;17625:703;;;;;;;;;;-1:-1:-1;17625:703:0;;;;;:::i;:::-;;:::i;20684:88::-;;;;;;;;;;-1:-1:-1;20753:11:0;;20684:88;;24385:262;;;;;;;;;;-1:-1:-1;24385:262:0;;;;;:::i;:::-;;:::i;35467:107::-;;;;;;;;;;-1:-1:-1;35467:107:0;;;;;:::i;:::-;;:::i;21383:108::-;;;;;;;;;;-1:-1:-1;21383:108:0;;;;;:::i;:::-;;:::i;18336:1087::-;;;;;;;;;;-1:-1:-1;18336:1087:0;;;;;:::i;:::-;;:::i;30696:142::-;;;;;;;;;;-1:-1:-1;30696:142:0;;;;;:::i;:::-;;:::i;14808:287::-;;;;;;;;;;-1:-1:-1;14808:287:0;;;;;:::i;:::-;;:::i;35350:107::-;;;;;;;;;;-1:-1:-1;35350:107:0;;;;;:::i;:::-;;:::i;22494:314:1:-;;;;;;;;;;-1:-1:-1;22494:314:1;;;;;:::i;:::-;;:::i;6151:40:0:-;;;;;;;;;;;;;;;;26786:267;;;;;;;;;;;;;:::i;30239:98::-;;;;;;;;;;-1:-1:-1;30239:98:0;;;;;:::i;:::-;;:::i;19763:523::-;;;;;;;;;;-1:-1:-1;19763:523:0;;;;;:::i;:::-;;:::i;24097:133::-;;;;;;;;;;-1:-1:-1;24097:133:0;;;;;:::i;:::-;;:::i;6110:34::-;;;;;;;;;;;;;;;;8151:42;;;;;;;;;;-1:-1:-1;8151:42:0;;;;;;;-1:-1:-1;;;;;8151:42:0;;;;;;-1:-1:-1;;;;;6027:32:2;;;6009:51;;5997:2;5982:18;8151:42:0;5863:203:2;15103:342:0;;;;;;;;;;-1:-1:-1;15103:342:0;;;;;:::i;:::-;;:::i;32498:725::-;;;;;;;;;;;;;:::i;:::-;;;;26657:25:2;;;26713:2;26698:18;;26691:34;;;;26741:18;;;26734:34;26645:2;26630:18;32498:725:0;26455:319:2;6318:32:0;;;;;;;;;;;;;;;;10581:217;;;;;;;;;;-1:-1:-1;10581:217:0;;;;;:::i;:::-;;:::i;23159:148:1:-;;;;;;;;;;;;;:::i;35856:109:0:-;;;;;;;;;;;;;:::i;6674:48::-;;;;;;;;;;;;;;;;36004:145;;;;;;;;;;-1:-1:-1;36004:145:0;;;;;:::i;:::-;;:::i;31913:129::-;;;;;;;;;;-1:-1:-1;31913:129:0;;;;;:::i;:::-;;:::i;24238:139::-;;;;;;;;;;-1:-1:-1;24238:139:0;;;;;:::i;:::-;;:::i;21382:79:1:-;;;;;;;;;;-1:-1:-1;21420:7:1;21447:6;-1:-1:-1;;;;;21447:6:1;21382:79;;30923:144:0;;;;;;;;;;-1:-1:-1;30923:144:0;;;;;:::i;:::-;;:::i;21914:314::-;;;;;;;;;;-1:-1:-1;21914:314:0;;;;;:::i;:::-;;:::i;6430:51::-;;;;;;;;;;;;;;;;10292:87;;;;;;;;;;-1:-1:-1;10364:7:0;;;;;;;;;;;;-1:-1:-1;;;10364:7:0;;;;10292:87;;8200:29;;;;;;;;;;-1:-1:-1;8200:29:0;;;;-1:-1:-1;;;;;8200:29:0;;;7288:42;;;;;;;;;;;;;;;;8236:43;;;;;;;;;;-1:-1:-1;8236:43:0;;;;-1:-1:-1;;;;;8236:43:0;;;30345:95;;;;;;;;;;-1:-1:-1;30345:95:0;;;;;:::i;:::-;;:::i;29634:190::-;;;;;;;;;;;;;:::i;17198:400::-;;;;;;;;;;-1:-1:-1;17198:400:0;;;;;:::i;:::-;;:::i;15457:199::-;;;;;;;;;;-1:-1:-1;15457:199:0;;;;;:::i;:::-;;:::i;6357:26::-;;;;;;;;;;;;;;;;29832:168;;;;;;;;;;;;;:::i;6729:62::-;;;;;;;;;;;;;;;;21469:99:1;;;;;;;;;;-1:-1:-1;21544:16:1;;-1:-1:-1;;;;;21544:16:1;21469:99;;21101:145:0;;;;;;;;;;;;;:::i;21254:121::-;;;;;;;;;;;;;:::i;24655:178::-;;;;;;;;;;-1:-1:-1;24655:178:0;;;;;:::i;:::-;;:::i;6390:27::-;;;;;;;;;;;;;;;;8290:73;;;;;;;;;;-1:-1:-1;8290:73:0;;;;-1:-1:-1;;;;;8290:73:0;;;23920:169;;;;;;;;;;-1:-1:-1;23920:169:0;;;;;:::i;:::-;;:::i;8064:41::-;;;;;;;;;;-1:-1:-1;8064:41:0;;;;;;;;22661:294;;;;;;;;;;-1:-1:-1;22661:294:0;;;;;:::i;:::-;;:::i;13347:919::-;;;;;;;;;;-1:-1:-1;13347:919:0;;;;;:::i;:::-;;:::i;22963:430::-;;;;;;;;;;-1:-1:-1;22963:430:0;;;;;:::i;:::-;;:::i;24841:91::-;;;;;;;;;;-1:-1:-1;24841:91:0;;;;;:::i;:::-;;:::i;32050:440::-;;;;;;;;;;;;;:::i;15664:184::-;;;;;;;;;;-1:-1:-1;15664:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;15813:18:0;;;15781:7;15813:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;15664:184;20780:140;;;;;;;;;;;;;:::i;14301:212::-;;;;;;;;;;-1:-1:-1;14301:212:0;;;;;:::i;:::-;;:::i;21499:109::-;;;;;;;;;;-1:-1:-1;21499:109:0;;;;;:::i;:::-;;:::i;23315:281:1:-;;;;;;;;;;-1:-1:-1;23315:281:1;;;;;:::i;:::-;;:::i;7083:38:0:-;;;;;;;;;;;;;;;;21685:114:1;;;;;;;;;;;;;:::i;7881:40:0:-;;;;;;;;;;;;;;;;33274:96;;;;;;;;;;-1:-1:-1;33274:96:0;;;;;:::i;:::-;;:::i;14525:277::-;;;;;;;;;;-1:-1:-1;14525:277:0;;;;;:::i;:::-;;:::i;35582:111::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;;;;;;;;;35657:16:0::1;:28:::0;;-1:-1:-1;;35657:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35582:111::o;21616:290::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;6539:4:0::1;21710:52;21753:8;;21710:38;21740:7;;21710:25;21721:13;;21710:6;:10;;:25;;;;:::i;:::-;:29:::0;::::1;:38::i;:52::-;:89;;21688:183;;;;-1:-1:-1::0;;;21688:183:0::1;;;;;;;:::i;:::-;21882:7;:16:::0;21616:290::o;15856:193::-;15958:4;15980:39;20028:10:1;16003:7:0;16012:6;15980:8;:39::i;:::-;-1:-1:-1;16037:4:0;15856:193;;;;;:::o;35701:111::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;35776:16:0::1;:28:::0;;;::::1;;;;-1:-1:-1::0;;35776:28:0;;::::1;::::0;;;::::1;::::0;;35701:111::o;22188:298:1:-;21932:6;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;22341:10:::1;::::0;-1:-1:-1;;;;;22341:10:1::1;:24:::0;22319:119:::1;;;::::0;-1:-1:-1;;;22319:119:1;;20255:2:2;22319:119:1::1;::::0;::::1;20237:21:2::0;20294:2;20274:18;;;20267:30;20333:34;20313:18;;;20306:62;-1:-1:-1;;;20384:18:2;;;20377:43;20437:19;;22319:119:1::1;20053:409:2::0;22319:119:1::1;22449:10;:29:::0;;-1:-1:-1;;;;;;22449:29:1::1;-1:-1:-1::0;;;;;22449:29:1;;;::::1;::::0;;;::::1;::::0;;22188:298::o;16436:446:0:-;16568:4;16585:36;16595:6;16603:9;16614:6;16585:9;:36::i;:::-;16632:220;16655:6;20028:10:1;16703:138:0;16759:6;16703:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16703:19:0;;;;;;:11;:19;;;;;;;;20028:10:1;16703:33:0;;;;;;;;;;:37;:138::i;:::-;16632:8;:220::i;:::-;-1:-1:-1;16870:4:0;16436:446;;;;;:::o;23401:511::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;23560:5:0::1;23537:19;:28;;23515:141;;;::::0;-1:-1:-1;;;23515:141:0;;18709:2:2;23515:141:0::1;::::0;::::1;18691:21:2::0;18748:2;18728:18;;;18721:30;18787:34;18767:18;;;18760:62;18858:33;18838:18;;;18831:61;18909:19;;23515:141:0::1;18507:427:2::0;23515:141:0::1;23711:1;23689:19;:23;23667:126;;;::::0;-1:-1:-1;;;23667:126:0;;16630:2:2;23667:126:0::1;::::0;::::1;16612:21:2::0;16669:2;16649:18;;;16642:30;16708:34;16688:18;;;16681:62;-1:-1:-1;;;16759:18:2;;;16752:51;16820:19;;23667:126:0::1;16428:417:2::0;23667:126:0::1;23837:67;23888:5;23837:32;23849:19;23837:7;;:11;;:32;;;;:::i;:::-;:36:::0;::::1;:67::i;:::-;23804:30;:100:::0;-1:-1:-1;23401:511:0:o;19431:324::-;19525:7;19583;;19572;:18;;19550:110;;;;-1:-1:-1;;;19550:110:0;;10406:2:2;19550:110:0;;;10388:21:2;10445:2;10425:18;;;10418:30;10484:34;10464:18;;;10457:62;-1:-1:-1;;;10535:18:2;;;10528:40;10585:19;;19550:110:0;10204:406:2;19550:110:0;19673:19;19695:10;:8;:10::i;:::-;19673:32;-1:-1:-1;19723:24:0;:7;19673:32;19723:11;:24::i;:::-;19716:31;19431:324;-1:-1:-1;;;19431:324:0:o;30571:119::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;30626:21:0::1;:28:::0;;-1:-1:-1;;30665:17:0;30650:4:::1;30665:17:::0;;;30571:119::o;20294:287::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;20388:39:0::1;:21;20419:7:::0;20388:30:::1;:39::i;:::-;20366:126;;;::::0;-1:-1:-1;;;20366:126:0;;12747:2:2;20366:126:0::1;::::0;::::1;12729:21:2::0;12786:2;12766:18;;;12759:30;12825:34;12805:18;;;12798:62;-1:-1:-1;;;12876:18:2;;;12869:35;12921:19;;20366:126:0::1;12545:401:2::0;20366:126:0::1;20505:37;:21;20534:7:::0;20505:28:::1;:37::i;:::-;-1:-1:-1::0;;;;;;20553:16:0::1;20572:1;20553:16:::0;;;:7:::1;:16;::::0;;;;:20;20294:287::o;22236:417::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;6598:3:0::1;22330:6;:24;;22308:116;;;::::0;-1:-1:-1;;;22308:116:0;;12336:2:2;22308:116:0::1;::::0;::::1;12318:21:2::0;12375:2;12355:18;;;12348:30;12414:34;12394:18;;;12387:62;-1:-1:-1;;;12465:18:2;;;12458:40;12515:19;;22308:116:0::1;12134:406:2::0;22308:116:0::1;6539:4;22457:52;22500:8;;22457:38;22488:6;22457:26;22469:13;;22457:7;;:11;;:26;;;;:::i;:52::-;:89;;22435:183;;;;-1:-1:-1::0;;;22435:183:0::1;;;;;;;:::i;:::-;22629:7;:16:::0;22236:417::o;16890:300::-;20028:10:1;17005:4:0;17099:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17099:34:0;;;;;;;;;;17005:4;;17027:133;;17077:7;;17099:50;;17138:10;17099:38;:50::i;31226:108::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;31297:22:0::1;:29:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;31297:29:0;;::::1;::::0;;;::::1;::::0;;31226:108::o;17625:703::-;20028:10:1;17740:38:0;:21;20028:10:1;17740:30:0;:38::i;:::-;17739:39;17717:133;;;;-1:-1:-1;;;17717:133:0;;23660:2:2;17717:133:0;;;23642:21:2;23699:2;23679:18;;;23672:30;23738:34;23718:18;;;23711:62;-1:-1:-1;;;23789:18:2;;;23782:42;23841:19;;17717:133:0;23458:408:2;17717:133:0;17866:12;17880:18;17900:13;17917:44;17943:7;17917:11;:44::i;:::-;17863:98;;;;;;;17972:19;17994:10;:8;:10::i;:::-;17972:32;;18016:15;18039:134;18065:7;18087:4;18106:10;18131:5;18151:11;18039;:134::i;:::-;-1:-1:-1;;;;;;;18204:15:0;;;;;;:7;:15;;;;;;18015:158;;-1:-1:-1;18204:28:0;;18015:158;18204:19;:28::i;:::-;-1:-1:-1;;;;;18186:15:0;;;;;;:7;:15;;;;;:46;18253:7;;:20;;18265:7;18253:11;:20::i;:::-;18243:7;:30;18297:10;;:23;;18312:7;18297:14;:23::i;:::-;18284:10;:36;-1:-1:-1;;;;;;;17625:703:0:o;24385:262::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;24502:1:0::1;24498:142;;;24520:36;:29;24554:1:::0;24520:33:::1;:36::i;:::-;;24385:262:::0;;:::o;24498:142::-:1;24589:39;:29;24626:1:::0;24589:36:::1;:39::i;24498:142::-;24385:262:::0;;:::o;35467:107::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;35541:25:0::1;:14;35560:5:::0;35541:18:::1;:25::i;21383:108::-:0;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;21452:31:0::1;:18;21475:7:::0;21452:22:::1;:31::i;18336:1087::-:0;18454:7;18498;;18487;:18;;18479:62;;;;-1:-1:-1;;;18479:62:0;;13911:2:2;18479:62:0;;;13893:21:2;13950:2;13930:18;;;13923:30;13989:33;13969:18;;;13962:61;14040:18;;18479:62:0;13709:355:2;18479:62:0;18559:17;18554:862;;18596:12;18610:18;18630:13;18647:52;18677:7;18647:11;:52::i;:::-;18593:106;;;;;;;18714:19;18736:10;:8;:10::i;:::-;18714:32;;18762:15;18785:158;18815:7;18841:4;18864:10;18893:5;18917:11;18785;:158::i;:::-;-1:-1:-1;18761:182:0;;-1:-1:-1;18960:14:0;;-1:-1:-1;;;;;;18960:14:0;18554:862;19010:12;19024:18;19044:13;19061:52;19091:7;19061:11;:52::i;:::-;19007:106;;;;;;;19128:19;19150:10;:8;:10::i;:::-;19128:32;;19178:23;19207:158;19237:7;19263:4;19286:10;19315:5;19339:11;19207;:158::i;:::-;-1:-1:-1;19175:190:0;-1:-1:-1;19382:22:0;;-1:-1:-1;;;;;;19382:22:0;30696:142;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;30766:9:0::1;::::0;::::1;::::0;::::1;;;30763:68;;;30791:21;:28:::0;;-1:-1:-1;;30791:28:0::1;::::0;::::1;;;::::0;;30763:68:::1;30696:142:::0;:::o;14808:287::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;7073:3:0::1;14884;:31;;14876:99;;;::::0;-1:-1:-1;;;14876:99:0;;16205:2:2;14876:99:0::1;::::0;::::1;16187:21:2::0;16244:2;16224:18;;;16217:30;16283:34;16263:18;;;16256:62;16354:26;16334:18;;;16327:54;16398:19;;14876:99:0::1;16003:420:2::0;14876:99:0::1;7011:3;14994;:31;;14986:66;;;::::0;-1:-1:-1;;;14986:66:0;;11224:2:2;14986:66:0::1;::::0;::::1;11206:21:2::0;11263:2;11243:18;;;11236:30;-1:-1:-1;;;11282:18:2;;;11275:52;11344:18;;14986:66:0::1;11022:346:2::0;14986:66:0::1;15064:17;:23:::0;14808:287::o;35350:107::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;35424:25:0::1;:14;35443:5:::0;35424:18:::1;:25::i;22494:314:1:-:0;21932:6;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;22645:16:::1;::::0;-1:-1:-1;;;;;22645:16:1::1;:30:::0;22623:131:::1;;;::::0;-1:-1:-1;;;22623:131:1;;17885:2:2;22623:131:1::1;::::0;::::1;17867:21:2::0;17924:2;17904:18;;;17897:30;17963:34;17943:18;;;17936:62;-1:-1:-1;;;18014:18:2;;;18007:49;18073:19;;22623:131:1::1;17683:415:2::0;22623:131:1::1;22765:16;:35:::0;;-1:-1:-1;;;;;;22765:35:1::1;-1:-1:-1::0;;;;;22765:35:1;;;::::1;::::0;;;::::1;::::0;;22494:314::o;26786:267:0:-;22071:10:1;;-1:-1:-1;;;;;22071:10:1;20028;22071:26;22049:111;;;;-1:-1:-1;;;22049:111:1;;;;;;;:::i;:::-;26863:22:0::1;::::0;:73:::1;::::0;26904:21:::1;26863:26;:73::i;:::-;26838:22;:98:::0;21655:10:1;;26947:43:0::1;::::0;-1:-1:-1;;;;;21655:10:1;;;;26968:21:0::1;26947:43:::0;::::1;;;::::0;::::1;::::0;;;26968:21;21655:10:1;26947:43:0;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;27006:39:0::1;::::0;27023:21:::1;25242:25:2::0;;27006:39:0::1;::::0;25230:2:2;25215:18;27006:39:0::1;;;;;;;26786:267::o:0;30239:98::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;30307:15:0::1;:22:::0;;;::::1;;-1:-1:-1::0;;;30307:22:0::1;-1:-1:-1::0;;;;30307:22:0;;::::1;::::0;;;::::1;::::0;;30239:98::o;19763:523::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;19858:39:0::1;:21;19889:7:::0;19858:30:::1;:39::i;:::-;19857:40;19835:127;;;::::0;-1:-1:-1;;;19835:127:0;;15438:2:2;19835:127:0::1;::::0;::::1;15420:21:2::0;15477:2;15457:18;;;15450:30;15516:34;15496:18;;;15489:62;-1:-1:-1;;;15567:18:2;;;15560:35;15612:19;;19835:127:0::1;15236:401:2::0;19835:127:0::1;5430:4;19995:30;:21;:28;:30::i;:::-;:45;19973:139;;;::::0;-1:-1:-1;;;19973:139:0;;24482:2:2;19973:139:0::1;::::0;::::1;24464:21:2::0;24521:2;24501:18;;;24494:30;24560:34;24540:18;;;24533:62;-1:-1:-1;;;24611:18:2;;;24604:42;24663:19;;19973:139:0::1;24280:408:2::0;19973:139:0::1;-1:-1:-1::0;;;;;20129:16:0;::::1;20148:1;20129:16:::0;;;:7:::1;:16;::::0;;;;;:20;20125:109:::1;;-1:-1:-1::0;;;;;20205:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;20185:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;20166:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;20125:109:::1;20244:34;:21;20270:7:::0;20244:25:::1;:34::i;24097:133::-:0;24162:4;24186:36;:18;24214:7;24186:27;:36::i;15103:342::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;7277:3:0::1;15193:10;:31;;15185:97;;;::::0;-1:-1:-1;;;15185:97:0;;17462:2:2;15185:97:0::1;::::0;::::1;17444:21:2::0;17501:2;17481:18;;;17474:30;17540:34;17520:18;;;17513:62;-1:-1:-1;;;17591:18:2;;;17584:52;17653:19;;15185:97:0::1;17260:418:2::0;15185:97:0::1;7222:3;15301:10;:31;;15293:98;;;::::0;-1:-1:-1;;;15293:98:0;;21075:2:2;15293:98:0::1;::::0;::::1;21057:21:2::0;21114:2;21094:18;;;21087:30;21153:34;21133:18;;;21126:62;-1:-1:-1;;;21204:18:2;;;21197:52;21266:19;;15293:98:0::1;20873:418:2::0;15293:98:0::1;15403:21;:34:::0;15103:342::o;32498:725::-;32692:10;32551:12;32681:22;;;:10;:22;;;;;;;;;32747:19;:31;;;;;;32842:39;;;:17;:39;;;;;;;32551:12;;;;32624:15;;32681:22;;32747:31;32551:12;;32895:34;;;32892:110;;;32952:37;:9;32966:22;32952:13;:37::i;:::-;32945:44;;32892:110;33025:20;;:48;;;;;33072:1;33049:20;:24;33025:48;33022:133;;;-1:-1:-1;33119:10:0;;33022:133;33173:20;;33194:15;;-1:-1:-1;33210:4:0;-1:-1:-1;32498:725:0;;-1:-1:-1;;;32498:725:0:o;10581:217::-;10647:7;10671:39;:21;10702:7;10671:30;:39::i;:::-;10667:68;;;-1:-1:-1;;;;;;10719:16:0;;;;;:7;:16;;;;;;;10581:217::o;10667:68::-;-1:-1:-1;;;;;10773:16:0;;;;;;:7;:16;;;;;;10753:37;;:19;:37::i;23159:148:1:-;21932:6;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;23266:1:::1;23250:6:::0;;23229:40:::1;::::0;-1:-1:-1;;;;;23250:6:1;;::::1;::::0;23229:40:::1;::::0;23266:1;;23229:40:::1;23297:1;23280:19:::0;;-1:-1:-1;;;;;;23280:19:1::1;::::0;;23159:148::o;35856:109:0:-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;35911:10:0::1;:17:::0;;-1:-1:-1;;35939:14:0;35911:17;35939:14;;;35856:109::o;36004:145::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;36076:10:0::1;::::0;;;::::1;;;36075:11;36067:50;;;::::0;-1:-1:-1;;;36067:50:0;;14680:2:2;36067:50:0::1;::::0;::::1;14662:21:2::0;14719:2;14699:18;;;14692:30;14758:29;14738:18;;;14731:57;14805:18;;36067:50:0::1;14478:351:2::0;36067:50:0::1;36128:6;:13:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;36128:13:0;;::::1;::::0;;;::::1;::::0;;36004:145::o;31913:129::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;31999:28:0::1;::::0;;;:17:::1;:28;::::0;;;;;:34;31913:129::o;24238:139::-;24306:4;24330:39;:21;24361:7;24330:30;:39::i;30923:144::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;31007:9:0::1;::::0;::::1;::::0;::::1;;;31004:56;;;31028:13;:20:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;31028:20:0;;::::1;;::::0;;30923:144;:::o;21914:314::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;6539:4:0::1;22020:52;22063:8;;22020:38;22050:7;;22020:25;22032:12;22020:7;;:11;;:25;;;;:::i;:52::-;:89;;21998:183;;;;-1:-1:-1::0;;;21998:183:0::1;;;;;;;:::i;:::-;22192:13;:28:::0;21914:314::o;30345:95::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;30413:12:0::1;:19:::0;30345:95::o;29634:190::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;29716:1:0::1;29698:15;:19:::0;;;29728:21:::1;:25:::0;;;29764:15:::1;:19:::0;;;29794:16:::1;:20:::0;29634:190::o;17198:400::-;17318:4;17340:228;20028:10:1;17390:7:0;17412:145;17469:15;17412:145;;;;;;;;;;;;;;;;;20028:10:1;17412:25:0;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17412:34:0;;;;;;;;;;;;:38;:145::i;15457:199::-;15562:4;15584:42;20028:10:1;15608:9:0;15619:6;15584:9;:42::i;29832:168::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;29905:2:0::1;29895:7;:12:::0;;;29934:3:::1;29918:13;:19:::0;29958:3:::1;29948:7;:13:::0;29972:8:::1;:13:::0;29832:168::o;21101:145::-;21157:7;21211:26;21223:13;;21211:7;;:11;;:26;;;;:::i;:::-;21185:13;;:21;;21201:5;21185:21;:::i;:::-;21184:54;;;;:::i;:::-;21177:61;;21101:145;:::o;21254:121::-;22071:10:1;;21318:7:0;;-1:-1:-1;;;;;22071:10:1;20028;22071:26;22049:111;;;;-1:-1:-1;;;22049:111:1;;;;;;;:::i;:::-;-1:-1:-1;21345:22:0::1;::::0;21254:121;:::o;24655:178::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;24791:16:0::1;:34:::0;;-1:-1:-1;;;;;24791:34:0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;24791:34:0;;::::1;::::0;;;::::1;::::0;;24655:178::o;23920:169::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;23996:22:0::1;:32:::0;;-1:-1:-1;;23996:32:0::1;::::0;::::1;;::::0;;::::1;::::0;;;24044:37:::1;::::0;7047:41:2;;;24044:37:0::1;::::0;7035:2:2;7020:18;24044:37:0::1;;;;;;;23920:169:::0;:::o;22661:294::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;6539:4:0::1;22757:52;22801:7;22757:39;22788:7;;22757:26;22769:13;;22757:7;;:11;;:26;;;;:::i;:52::-;:89;;22735:183;;;;-1:-1:-1::0;;;22735:183:0::1;;;;;;;:::i;:::-;22929:8;:18:::0;22661:294::o;13347:919::-;13448:7;13473:23;13498:12;13588:14;13603;13619:22;13645:21;;;;;;;;;-1:-1:-1;;;;;13645:21:0;-1:-1:-1;;;;;13645:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13587:93;;;;-1:-1:-1;;;;;13587:93:0;;;-1:-1:-1;;;;;13587:93:0;;;13722:6;13713;:15;13710:186;;;13761:6;13743:24;;13789:6;13782:13;;13710:186;;;13850:6;13832:24;;13878:6;13871:13;;13710:186;13938:20;13935:73;;13995:1;13988:8;;;;;;;;;13935:73;14075:17;14095:37;:15;14115:16;14095:19;:37::i;:::-;14075:57;;14143:18;14164:62;14216:9;14165:45;14196:13;;14166:24;14175:14;14166:4;:8;;:24;;;;:::i;:::-;14165:30;;:45::i;14164:62::-;14143:83;13347:919;-1:-1:-1;;;;;;;;;;13347:919:0:o;22963:430::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;23078:5:0::1;23062:12;:21;;23040:131;;;::::0;-1:-1:-1;;;23040:131:0;;21930:2:2;23040:131:0::1;::::0;::::1;21912:21:2::0;21969:2;21949:18;;;21942:30;22008:34;21988:18;;;21981:62;22079:30;22059:18;;;22052:58;22127:19;;23040:131:0::1;21728:424:2::0;23040:131:0::1;6664:3;23204:12;:28;;23182:141;;;::::0;-1:-1:-1;;;23182:141:0;;21498:2:2;23182:141:0::1;::::0;::::1;21480:21:2::0;21537:2;21517:18;;;21510:30;21576:34;21556:18;;;21549:62;21647:33;21627:18;;;21620:61;21698:19;;23182:141:0::1;21296:427:2::0;23182:141:0::1;23349:36;23379:5;23349:25;23361:12;23349:7;;:11;;:25;;;;:::i;:36::-;23334:12;:51:::0;-1:-1:-1;22963:430:0:o;24841:91::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;24906:14:0::1;:18:::0;;-1:-1:-1;;;;;;24906:18:0::1;-1:-1:-1::0;;;;;24906:18:0;;;::::1;::::0;;;::::1;::::0;;24841:91::o;32050:440::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;32122:17:0::1;:20;::::0;32145:2:::1;32122:20:::0;:25;32181:2:::1;32158:20:::0;:25;32217:2:::1;32194:20:::0;:25;32253:3:::1;32230:20:::0;:26;32290:3:::1;32267:20:::0;:26;32327:3:::1;32304:20:::0;:26;32364:3:::1;32341:20:::0;:26;32401:4:::1;32378:20:::0;:27;32439:4:::1;32416:20:::0;:27;32472:1:::1;32122:20;32454::::0;32477:5:::1;32454:20:::0;:28;32050:440::o;20780:140::-;20837:7;20885:26;20897:13;;20885:7;;:11;;:26;;;;:::i;:::-;20865:7;;:15;;20875:5;20865:15;:::i;14301:212::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;14396:2:0::1;14383:9;:15;;14375:70;;;::::0;-1:-1:-1;;;14375:70:0;;8772:2:2;14375:70:0::1;::::0;::::1;8754:21:2::0;8811:2;8791:18;;;8784:30;8850:34;8830:18;;;8823:62;-1:-1:-1;;;8901:18:2;;;8894:39;8950:19;;14375:70:0::1;8570:405:2::0;14375:70:0::1;14497:5;14484:9;14474:7;;:19;;;;:::i;:::-;14473:29;;;;:::i;:::-;14456:14;:46:::0;-1:-1:-1;14301:212:0:o;21499:109::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;21566:34:0::1;:18;21592:7:::0;21566:25:::1;:34::i;23315:281:1:-:0;21932:6;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;23418:22:1;::::1;23396:110;;;::::0;-1:-1:-1;;;23396:110:1;;10817:2:2;23396:110:1::1;::::0;::::1;10799:21:2::0;10856:2;10836:18;;;10829:30;10895:34;10875:18;;;10868:62;-1:-1:-1;;;10946:18:2;;;10939:36;10992:19;;23396:110:1::1;10615:402:2::0;23396:110:1::1;23543:6;::::0;;23522:38:::1;::::0;-1:-1:-1;;;;;23522:38:1;;::::1;::::0;23543:6;::::1;::::0;23522:38:::1;::::0;::::1;23571:6;:17:::0;;-1:-1:-1;;;;;;23571:17:1::1;-1:-1:-1::0;;;;;23571:17:1;;;::::1;::::0;;;::::1;::::0;;23315:281::o;21685:114::-;21746:15;21932:6;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;-1:-1:-1;21781:10:1::1;::::0;-1:-1:-1;;;;;21781:10:1::1;21685:114:::0;:::o;33274:96:0:-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;33343:10:0::1;:19:::0;33274:96::o;14525:277::-;21932:6:1;;-1:-1:-1;;;;;21932:6:1;20028:10;21932:22;21924:67;;;;-1:-1:-1;;;21924:67:1;;;;;;;:::i;:::-;7826:3:0::1;14601:5;:23;14593:71;;;::::0;-1:-1:-1;;;14593:71:0;;11575:2:2;14593:71:0::1;::::0;::::1;11557:21:2::0;11614:2;11594:18;;;11587:30;11653:34;11633:18;;;11626:62;-1:-1:-1;;;11704:18:2;;;11697:34;11748:19;;14593:71:0::1;11373:400:2::0;14593:71:0::1;7996:3;14683:5;:24;;14675:73;;;::::0;-1:-1:-1;;;14675:73:0;;13153:2:2;14675:73:0::1;::::0;::::1;13135:21:2::0;13192:2;13172:18;;;13165:30;13231:34;13211:18;;;13204:62;-1:-1:-1;;;13282:18:2;;;13275:35;13327:19;;14675:73:0::1;12951:401:2::0;14675:73:0::1;14759:18;:26:::0;14525:277::o;13246:175:1:-;13334:4;13363:50;13368:3;-1:-1:-1;;;;;13388:23:1;;13363:4;:50::i;33061:181::-;33119:7;;33151:5;33155:1;33151;:5;:::i;:::-;33139:17;;33180:1;33175;:6;;33167:46;;;;-1:-1:-1;;;33167:46:1;;11980:2:2;33167:46:1;;;11962:21:2;12019:2;11999:18;;;11992:30;12058:29;12038:18;;;12031:57;12105:18;;33167:46:1;11778:351:2;16057:371:0;-1:-1:-1;;;;;16184:19:0;;16176:68;;;;-1:-1:-1;;;16176:68:0;;10001:2:2;16176:68:0;;;9983:21:2;10040:2;10020:18;;;10013:30;10079:34;10059:18;;;10052:62;-1:-1:-1;;;10130:18:2;;;10123:34;10174:19;;16176:68:0;9799:400:2;16176:68:0;-1:-1:-1;;;;;16263:21:0;;16255:68;;;;-1:-1:-1;;;16255:68:0;;24895:2:2;16255:68:0;;;24877:21:2;24934:2;24914:18;;;24907:30;24973:34;24953:18;;;24946:62;-1:-1:-1;;;25024:18:2;;;25017:32;25066:19;;16255:68:0;24693:398:2;16255:68:0;-1:-1:-1;;;;;16336:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;16388:32;;25242:25:2;;;16388:32:0;;25215:18:2;16388:32:0;;;;;;;16057:371;;;:::o;24963:1815::-;-1:-1:-1;;;;;25085:18:0;;25077:68;;;;-1:-1:-1;;;25077:68:0;;9182:2:2;25077:68:0;;;9164:21:2;9221:2;9201:18;;;9194:30;9260:34;9240:18;;;9233:62;-1:-1:-1;;;9311:18:2;;;9304:35;9356:19;;25077:68:0;8980:401:2;25077:68:0;-1:-1:-1;;;;;25164:16:0;;25156:64;;;;-1:-1:-1;;;25156:64:0;;18305:2:2;25156:64:0;;;18287:21:2;18344:2;18324:18;;;18317:30;18383:34;18363:18;;;18356:62;-1:-1:-1;;;18434:18:2;;;18427:33;18477:19;;25156:64:0;18103:399:2;25156:64:0;21655:10:1;;-1:-1:-1;;;;;25239:17:0;;;21655:10:1;;25239:17:0;;25231:70;;;;-1:-1:-1;;;25231:70:0;;24073:2:2;25231:70:0;;;24055:21:2;24112:2;24092:18;;;24085:30;24151:34;24131:18;;;24124:62;-1:-1:-1;;;24202:18:2;;;24195:38;24250:19;;25231:70:0;23871:404:2;25231:70:0;21655:10:1;;-1:-1:-1;;;;;25320:19:0;;;21655:10:1;;25320:19:0;;25312:69;;;;-1:-1:-1;;;25312:69:0;;19497:2:2;25312:69:0;;;19479:21:2;19536:2;19516:18;;;19509:30;19575:34;19555:18;;;19548:62;-1:-1:-1;;;19626:18:2;;;19619:35;19671:19;;25312:69:0;19295:401:2;25312:69:0;25409:1;25400:6;:10;25392:64;;;;-1:-1:-1;;;25392:64:0;;17052:2:2;25392:64:0;;;17034:21:2;17091:2;17071:18;;;17064:30;17130:34;17110:18;;;17103:62;-1:-1:-1;;;17181:18:2;;;17174:39;17230:19;;25392:64:0;16850:405:2;25392:64:0;21420:7:1;21447:6;-1:-1:-1;;;;;25473:15:0;;;21447:6:1;;25473:15:0;;;;:32;;-1:-1:-1;21420:7:1;21447:6;-1:-1:-1;;;;;25492:13:0;;;21447:6:1;;25492:13:0;;25473:32;25469:189;;;25558:12;;25548:6;:22;;25522:124;;;;-1:-1:-1;;;25522:124:0;;14271:2:2;25522:124:0;;;14253:21:2;14310:2;14290:18;;;14283:30;14349:34;14329:18;;;14322:62;-1:-1:-1;;;14400:18:2;;;14393:38;14448:19;;25522:124:0;14069:404:2;25522:124:0;25986:28;26017:24;26035:4;26017:9;:24::i;:::-;25986:55;;26082:12;;26058:20;:36;26054:104;;-1:-1:-1;26134:12:0;;26054:104;26236:30;;26199:67;;;;;;;26295:56;;-1:-1:-1;26334:17:0;;;;;;;26333:18;26295:56;:118;;;;-1:-1:-1;26369:44:0;:29;26408:4;26369:38;:44::i;:::-;26368:45;26295:118;:157;;;;-1:-1:-1;26430:22:0;;;;26295:157;26277:260;;;26479:46;26494:30;;26479:14;:46::i;:::-;26564:4;26597:33;:18;26625:4;26597:27;:33::i;:::-;:68;;;-1:-1:-1;26634:31:0;:18;26662:2;26634:27;:31::i;:::-;26579:140;;;-1:-1:-1;26702:5:0;26579:140;26729:41;26744:4;26750:2;26754:6;26762:7;26729:14;:41::i;:::-;25066:1712;;;24963:1815;;;:::o;33394:226:1:-;33514:7;33550:12;33542:6;;;;33534:29;;;;-1:-1:-1;;;33534:29:1;;;;;;;;:::i;:::-;-1:-1:-1;33574:9:1;33586:5;33590:1;33586;:5;:::i;:::-;33574:17;33394:226;-1:-1:-1;;;;;33394:226:1:o;33628:250::-;33686:7;33710:6;33706:47;;-1:-1:-1;33740:1:1;33733:8;;33706:47;33765:9;33777:5;33781:1;33777;:5;:::i;:::-;33765:17;-1:-1:-1;33810:1:1;33801:5;33805:1;33765:17;33801:5;:::i;:::-;:10;33793:56;;;;-1:-1:-1;;;33793:56:1;;15036:2:2;33793:56:1;;;15018:21:2;15075:2;15055:18;;;15048:30;15114:34;15094:18;;;15087:62;-1:-1:-1;;;15165:18:2;;;15158:31;15206:19;;33793:56:1;14834:397:2;33886:132:1;33944:7;33971:39;33975:1;33978;33971:39;;;;;;;;;;;;;;;;;:3;:39::i;46042:164:0:-;46084:7;46105:15;46122;46141:19;:17;:19::i;:::-;46104:56;;-1:-1:-1;46104:56:0;-1:-1:-1;46178:20:0;46104:56;;46178:11;:20::i;:::-;46171:27;;;;46042:164;:::o;13864:199:1:-;-1:-1:-1;;;;;14030:23:1;;13971:4;10428:19;;;:12;;;:19;;;;;;:24;;14000:55;10299:161;13597:181;13688:4;13717:53;13725:3;-1:-1:-1;;;;;13745:23:1;;13717:7;:53::i;44574:726:0:-;44675:7;44697;44719;44741;44776:12;44791:39;44824:5;44791:28;44803:15;;44791:7;:11;;:28;;;;:::i;:39::-;44776:54;;44909:18;44930:66;44990:5;44930:55;44942:42;44968:15;;44942:21;;:25;;:42;;;;:::i;:::-;44930:7;;:11;:55::i;:66::-;44909:87;;45007:13;45023:40;45057:5;45023:29;45035:16;;45023:7;:11;;:29;;;;:::i;:40::-;45007:56;-1:-1:-1;45074:23:0;45100:17;:7;45112:4;45100:11;:17::i;:::-;45074:43;-1:-1:-1;45146:31:0;45074:43;45166:10;45146:19;:31::i;:::-;45128:49;-1:-1:-1;45206:26:0;45128:49;45226:5;45206:19;:26::i;:::-;45188:44;45268:4;;-1:-1:-1;45274:10:0;;-1:-1:-1;45274:10:0;-1:-1:-1;44574:726:0;;-1:-1:-1;;;44574:726:0:o;45308:::-;45531:7;;;;45628:24;:7;45640:11;45628;:24::i;:::-;45610:42;-1:-1:-1;45663:12:0;45678:21;:4;45687:11;45678:8;:21::i;:::-;45663:36;-1:-1:-1;45710:18:0;45731:27;:10;45746:11;45731:14;:27::i;:::-;45710:48;-1:-1:-1;45769:13:0;45785:22;:5;45795:11;45785:9;:22::i;:::-;45769:38;-1:-1:-1;45818:23:0;45844:17;:7;45856:4;45844:11;:17::i;:::-;45818:43;-1:-1:-1;45890:31:0;45818:43;45910:10;45890:19;:31::i;:::-;45872:49;-1:-1:-1;45950:26:0;45872:49;45970:5;45950:19;:26::i;:::-;45995:7;;;;-1:-1:-1;46021:4:0;;-1:-1:-1;45308:726:0;;-1:-1:-1;;;;;;;;;45308:726:0:o;33250:136:1:-;33308:7;33335:43;33339:1;33342;33335:43;;;;;;;;;;;;;;;;;:3;:43::i;14149:117::-;14212:7;14239:19;14247:3;10629:18;;10546:109;8057:414;8120:4;10428:19;;;:12;;;:19;;;;;;8137:327;;-1:-1:-1;8180:23:1;;;;;;;;:11;:23;;;;;;;;;;;;;8363:18;;8341:19;;;:12;;;:19;;;;;;:40;;;;8396:11;;8137:327;-1:-1:-1;8447:5:1;8440:12;;27061:1355:0;8765:17;:24;;-1:-1:-1;;8765:24:0;;;;;;27234:77:::1;27295:5;27234:42;27250:25;:23;:25::i;:::-;27234:11:::0;;:15:::1;:42::i;:77::-;27214:97:::0;-1:-1:-1;27386:28:0::1;27417:26;:11:::0;27214:97;27417:15:::1;:26::i;:::-;27386:57;;27679:18;27700:93;27762:20;27700:43;27716:26;:24;:26::i;:::-;27700:11:::0;;:15:::1;:43::i;:93::-;27679:114:::0;-1:-1:-1;27831:21:0::1;27865:38;27882:20:::0;27865:16:::1;:38::i;:::-;27977:17;27997:41;:21;28023:14:::0;27997:25:::1;:41::i;:::-;27977:61:::0;-1:-1:-1;28120:20:0::1;28143:38;28175:5;28144:25;27977:61:::0;28158:10;28144:13:::1;:25::i;28143:38::-;28120:61:::0;-1:-1:-1;28247:14:0::1;28264:27;:9:::0;28120:61;28264:13:::1;:27::i;:::-;28247:44;;28304:31;28317:9;28328:6;28304:12;:31::i;:::-;28353:55;::::0;;26657:25:2;;;26713:2;26698:18;;26691:34;;;26741:18;;;26734:34;;;28353:55:0::1;::::0;26645:2:2;26630:18;28353:55:0::1;;;;;;;-1:-1:-1::0;;8812:17:0;:25;;-1:-1:-1;;8812:25:0;;;-1:-1:-1;;;;;;27061:1355:0:o;36159:4164::-;36361:6;;;;;;;36357:260;;36398:14;;-1:-1:-1;;;;;36385:27:0;;;36398:14;;36385:27;;;;:48;;-1:-1:-1;36429:4:0;;-1:-1:-1;;;;;36416:17:0;;;36429:4;;36416:17;;36385:48;:78;;;;-1:-1:-1;36450:13:0;;-1:-1:-1;;;;;36437:26:0;;;36450:13;;36437:26;;36385:78;36381:225;;;36524:14;;36514:6;36491:20;36501:9;36491;:20::i;:::-;:29;;;;:::i;:::-;:47;;36483:97;;;;-1:-1:-1;;;36483:97:0;;20669:2:2;36483:97:0;;;20651:21:2;20708:2;20688:18;;;20681:30;20747:34;20727:18;;;20720:62;-1:-1:-1;;;20798:18:2;;;20791:35;20843:19;;36483:97:0;20467:401:2;36483:97:0;36651:16;;;;;;;36648:203;;;36692:31;:14;36716:6;36692:23;:31::i;:::-;36691:32;36683:69;;;;-1:-1:-1;;;36683:69:0;;19903:2:2;36683:69:0;;;19885:21:2;19942:2;19922:18;;;19915:30;-1:-1:-1;;;19961:18:2;;;19954:53;20024:18;;36683:69:0;19701:347:2;36683:69:0;36776:34;:14;36800:9;36776:23;:34::i;:::-;36775:35;36767:72;;;;-1:-1:-1;;;36767:72:0;;19903:2:2;36767:72:0;;;19885:21:2;19942:2;19922:18;;;19915:30;-1:-1:-1;;;19961:18:2;;;19954:53;20024:18;;36767:72:0;19701:347:2;36767:72:0;36886:16;;;;36883:209;;;36926:31;:14;36950:6;36926:23;:31::i;:::-;36918:72;;;;-1:-1:-1;;;36918:72:0;;19141:2:2;36918:72:0;;;19123:21:2;19180:2;19160:18;;;19153:30;19219:29;19199:18;;;19192:57;19266:18;;36918:72:0;18939:351:2;36918:72:0;37013:34;:14;37037:9;37013:23;:34::i;:::-;37005:75;;;;-1:-1:-1;;;37005:75:0;;19141:2:2;37005:75:0;;;19123:21:2;19180:2;19160:18;;;19153:30;19219:29;19199:18;;;19192:57;19266:18;;37005:75:0;18939:351:2;37005:75:0;37168:6;;;;;;;37165:158;;;37208:14;;-1:-1:-1;;;;;37195:27:0;;;37208:14;;37195:27;37192:118;;;21420:7:1;21447:6;-1:-1:-1;;;;;37250:17:0;;;21447:6:1;;37250:17:0;37242:52;;;;-1:-1:-1;;;37242:52:0;;13559:2:2;37242:52:0;;;13541:21:2;13598:2;13578:18;;;13571:30;13637:25;13617:18;;;13610:53;13680:18;;37242:52:0;13357:347:2;37242:52:0;37411:14;;-1:-1:-1;;;;;37398:27:0;;;37411:14;;37398:27;:52;;;;-1:-1:-1;37429:21:0;;;;37398:52;37395:1158;;;37519:16;;;37533:1;37519:16;;;;;;;;37495:21;;37519:16;;;;;;;;;;-1:-1:-1;37519:16:0;37495:40;;37572:4;37554;37559:1;37554:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;37554:23:0;;;-1:-1:-1;;;;;37554:23:0;;;;;37606:16;;;;;;;;;-1:-1:-1;;;;;37606:16:0;-1:-1:-1;;;;;37606:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37596:4;37601:1;37596:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37596:33:0;;;:7;;;;;;;;;:33;37692:16;;:43;;-1:-1:-1;;;37692:43:0;;37665:24;;37692:16;;;;;;;;:30;;:43;;37723:6;;37730:4;;37692:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;37692:43:0;;;;;;;;;;;;:::i;:::-;37736:1;37692:46;;;;;;;;:::i;:::-;;;;;;;37665:73;;37756:19;37778:46;37800:16;37817:6;37778:21;:46::i;:::-;37756:68;;38042:18;;37997:41;38023:14;;37997:21;38013:4;37997:11;:15;;:21;;;;:::i;:41::-;:63;;37989:140;;;;-1:-1:-1;;;37989:140:0;;22782:2:2;37989:140:0;;;22764:21:2;22821:2;22801:18;;;22794:30;22860:34;22840:18;;;22833:62;22931:34;22911:18;;;22904:62;-1:-1:-1;;;22982:19:2;;;22975:32;23024:19;;37989:140:0;22580:469:2;37989:140:0;38168:18;;38156:8;;:30;;38148:96;;;;-1:-1:-1;;;38148:96:0;;22359:2:2;38148:96:0;;;22341:21:2;22398:2;22378:18;;;22371:30;22437:34;22417:18;;;22410:62;-1:-1:-1;;;22488:18:2;;;22481:52;22550:19;;38148:96:0;22157:418:2;38148:96:0;38329:50;38355:16;38372:6;38329:25;:50::i;:::-;;38437:25;38455:6;38437:17;:25::i;:::-;38515:12;:10;:12::i;:::-;;37451:1102;;;37395:1158;38578:14;;-1:-1:-1;;;;;38568:24:0;;;38578:14;;38568:24;:49;;;;-1:-1:-1;38596:21:0;;;;38568:49;38565:493;;;38678:16;;;38692:1;38678:16;;;;;;;;38654:21;;38678:16;;;;;;;;;;-1:-1:-1;38678:16:0;38654:40;;38731:4;38713;38718:1;38713:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;38713:23:0;;;-1:-1:-1;;;;;38713:23:0;;;;;38765:16;;;;;;;;;-1:-1:-1;;;;;38765:16:0;-1:-1:-1;;;;;38765:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38755:4;38760:1;38755:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38755:33:0;;;:7;;;;;;;;;:33;38929:16;;:43;;-1:-1:-1;;;38929:43:0;;38904:22;;38929:16;;;;;;;;:30;;:43;;38960:6;;38967:4;;38929:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;38929:43:0;;;;;;;;;;;;:::i;:::-;38973:1;38929:46;;;;;;;;:::i;:::-;;;;;;;38904:71;;38993:50;39021:14;39036:6;38993:27;:50::i;:::-;;38618:440;;38565:493;39194:14;;-1:-1:-1;;;;;39184:24:0;;;39194:14;;39184:24;;;;:55;;-1:-1:-1;39225:14:0;;-1:-1:-1;;;;;39212:27:0;;;39225:14;;39212:27;;39184:55;39181:149;;;39292:25;39310:6;39292:17;:25::i;:::-;39347:7;39346:8;:18;;;-1:-1:-1;39358:6:0;;;;;;;39346:18;39342:179;;;39399:1;39381:15;:19;;;39415:21;:25;;;39455:15;:19;;;39489:16;:20;39342:179;39533:19;39555:38;:21;39586:6;39555:30;:38::i;:::-;39533:60;-1:-1:-1;39604:22:0;39629:41;:21;39660:9;39629:30;:41::i;:::-;39604:66;;39685:14;:36;;;;;39704:17;39703:18;39685:36;39681:557;;;39738:48;39760:6;39768:9;39779:6;39738:21;:48::i;:::-;39681:557;;;39809:14;39808:15;:36;;;;;39827:17;39808:36;39804:434;;;39861:46;39881:6;39889:9;39900:6;39861:19;:46::i;39804:434::-;39930:14;39929:15;:37;;;;;39949:17;39948:18;39929:37;39925:313;;;39983:44;40001:6;40009:9;40020:6;39983:17;:44::i;39925:313::-;40049:14;:35;;;;;40067:17;40049:35;40045:193;;;40101:48;40123:6;40131:9;40142:6;40101:21;:48::i;40045:193::-;40182:44;40200:6;40208:9;40219:6;40182:17;:44::i;:::-;40255:29;30087:7;;30069:15;:25;30129:13;;30105:21;:37;30171:7;;30153:15;:25;30208:8;;30189:16;:27;30008:223;34026:225:1;34146:7;34181:12;34174:5;34166:28;;;;-1:-1:-1;;;34166:28:1;;;;;;;;:::i;:::-;-1:-1:-1;34205:9:1;34217:5;34221:1;34217;:5;:::i;46214:699:0:-;46312:7;;46348;;46265;;;;;46366:432;46390:30;:21;:28;:30::i;:::-;46386:1;:34;46366:432;;;46442:23;46468:27;:21;46493:1;46468:24;:27::i;:::-;-1:-1:-1;;;;;46532:24:0;;;;;;:7;:24;;;;;;46442:53;;-1:-1:-1;46532:34:0;-1:-1:-1;46532:34:0;:89;;-1:-1:-1;;;;;;46587:24:0;;;;;;:7;:24;;;;;;:34;-1:-1:-1;46532:89:0;46510:152;;;46645:7;;46654;;46637:25;;;;;;;;46214:699;;:::o;46510:152::-;-1:-1:-1;;;;;46699:24:0;;;;;;:7;:24;;;;;;46687:37;;:7;;:11;:37::i;:::-;-1:-1:-1;;;;;46761:24:0;;;;;;:7;:24;;;;;;46677:47;;-1:-1:-1;46749:37:0;;:7;;:11;:37::i;:::-;46739:47;;46427:371;46422:3;;;;;:::i;:::-;;;;46366:432;;;-1:-1:-1;46834:7:0;;46822;;:20;;:11;:20::i;:::-;46812:7;:30;46808:61;;;46852:7;;46861;;46844:25;;;;;;46214:699;;:::o;46808:61::-;46888:7;;46897;;-1:-1:-1;46214:699:0;-1:-1:-1;46214:699:0:o;8647:1566:1:-;8713:4;8852:19;;;:12;;;:19;;;;;;8888:15;;8884:1322;;9263:21;9287:14;9300:1;9287:10;:14;:::i;:::-;9336:18;;9263:38;;-1:-1:-1;9316:17:1;;9336:22;;9357:1;;9336:22;:::i;:::-;9316:42;;9603:17;9623:3;:11;;9635:9;9623:22;;;;;;;;:::i;:::-;;;;;;;;;9603:42;;9769:9;9740:3;:11;;9752:13;9740:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;9846:23;;;:12;;;:23;;;;;;:36;;;10007:17;;9846:3;;10007:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;10102:3;:12;;:19;10115:5;10102:19;;;;;;;;;;;10095:26;;;10145:4;10138:11;;;;;;;;8884:1322;10189:5;10182:12;;;;;28424:476:0;28514:16;;;28528:1;28514:16;;;;;;;;28490:21;;28514:16;;;;;;;;;;-1:-1:-1;28514:16:0;28490:40;;28559:4;28541;28546:1;28541:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;28541:23:0;;;-1:-1:-1;;;;;28541:23:0;;;;;28585:16;;;;;;;;;-1:-1:-1;;;;;28585:16:0;-1:-1:-1;;;;;28585:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28575:4;28580:1;28575:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28575:33:0;;;:7;;;;;;;;;:33;28653:16;;28621:63;;28638:4;;28653:16;;;;28672:11;28621:8;:63::i;:::-;28695:16;;:197;;-1:-1:-1;;;28695:197:0;;:16;;;;-1:-1:-1;;;;;28695:16:0;;:67;;:197;;28777:11;;28803:1;;28819:4;;28846;;28866:15;;28695:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28908:525;29088:16;;29056:63;;29073:4;;29088:16;;;-1:-1:-1;;;;;29088:16:0;29107:11;29056:8;:63::i;:::-;29162:16;;-1:-1:-1;;;;;29162:16:0;;;;;:32;29202:9;29235:4;29255:11;29281:1;;29367:17;21544:16:1;;-1:-1:-1;;;;;21544:16:1;;21469:99;29367:17:0;29162:263;;;;;;-1:-1:-1;;;;;;29162:263:0;;;-1:-1:-1;;;;;6654:15:2;;;29162:263:0;;;6636:34:2;6686:18;;;6679:34;;;;6729:18;;;6722:34;;;;6772:18;;;6765:34;6836:15;;;6815:19;;;6808:44;29399:15:0;6868:19:2;;;6861:35;6570:19;;29162:263:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28908:525;;:::o;10854:1153::-;10939:7;10960:23;10985:12;11075:14;11090;11106:22;11132:21;;;;;;;;;-1:-1:-1;;;;;11132:21:0;-1:-1:-1;;;;;11132:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11074:93;;;;-1:-1:-1;;;;;11074:93:0;;;-1:-1:-1;;;;;11074:93:0;;;11199:6;11190;:15;11187:208;;;11238:6;11220:24;;11266:6;11259:13;;11187:208;;;11339:6;11321:24;;11367:6;11360:13;;11187:208;11425:27;:15;11445:6;11425:19;:27::i;:::-;11407:45;-1:-1:-1;11470:17:0;:4;11479:7;11470:8;:17::i;:::-;11463:24;-1:-1:-1;11530:20:0;11527:73;;11587:1;11580:8;;;;;;;;;11527:73;11676:18;11697:46;11727:15;11698:23;11707:13;;11698:4;:8;;:23;;;;:::i;11697:46::-;11676:67;;11793:14;;11780:10;:27;11777:87;;;11824:14;:27;;;11777:87;11934:14;;11907:42;;11908:20;:10;11923:4;11908:14;:20::i;11907:42::-;11896:8;:53;11978:10;10854:1153;-1:-1:-1;;;;;;;;10854:1153:0:o;33378:1345::-;-1:-1:-1;;;;;33517:18:0;;33440:17;33517:18;;;:10;:18;;;;;;;;;33579:19;:27;;;;;;33660:13;;33460:15;;33440:17;33660:13;;;;;33657:858;;;33704:14;;-1:-1:-1;;;;;33694:24:0;;;33704:14;;33694:24;33691:807;;33753:22;33741:9;:34;33738:741;;;33801:12;33816:37;:9;33830:22;33816:13;:37::i;:::-;-1:-1:-1;;;;;33876:27:0;;;;;;:19;:27;;;;;;;;:39;;;33956;;;:17;:39;;;;;;;-1:-1:-1;33801:52:0;-1:-1:-1;34021:20:0;;:48;;;;;34068:1;34045:20;:24;34021:48;34018:131;;;34115:10;;34097:28;;34018:131;34184:12;;34176:4;:20;34173:143;;-1:-1:-1;;;;;34224:18:0;;34245:1;34224:18;;;:10;:18;;;;;:22;;;34245:1;-1:-1:-1;34173:143:0;34349:12;;34342:4;:19;34339:119;;;34410:24;:20;34433:1;34410:24;:::i;:::-;-1:-1:-1;;;;;34389:18:0;;;;;;:10;:18;;;;;:45;34339:119;33776:703;33738:741;34553:15;34528:21;;:40;;;;;;;:::i;:::-;;;;;;;;34600:15;34580:16;;:35;;;;;;;:::i;:::-;;;;;;;;34646:15;34627;;:34;;;;;;;:::i;:::-;;;;;;;;34692:15;34673;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;33378:1345:0:o;31342:497::-;31435:15;;31382:4;;;;-1:-1:-1;;;31435:15:0;;;;31432:365;;;31476:21;;31465:8;;:32;31462:318;;;31529:4;31517:16;;31586:17;;31561:21;;:42;;;;;;;:::i;:::-;;;;-1:-1:-1;;31639:17:0;;31619:16;:37;;:16;;:37;;31639:17;;31619:37;:::i;:::-;;;;-1:-1:-1;;31691:17:0;;31672:15;:36;;:15;;:36;;31691:17;;31672:36;:::i;:::-;;;;-1:-1:-1;;31743:17:0;;31724:15;:36;;:15;;:36;;31743:17;;31724:36;:::i;:::-;;;;-1:-1:-1;;31462:318:0;31814:9;31342:497;-1:-1:-1;31342:497:0:o;12020:1177::-;12112:7;12131:23;12156:12;12250:14;12265;12281:22;12307:21;;;;;;;;;-1:-1:-1;;;;;12307:21:0;-1:-1:-1;;;;;12307:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12249:93;;;;-1:-1:-1;;;;;12249:93:0;;;-1:-1:-1;;;;;12249:93:0;;;12384:6;12375;:15;12372:208;;;12423:6;12405:24;;12451:6;12444:13;;12372:208;;;12524:6;12506:24;;12552:6;12545:13;;12372:208;12611:31;:15;12631:10;12611:19;:31::i;:::-;12593:49;-1:-1:-1;12659:18:0;:4;12668:8;12659;:18::i;43275:966::-;43426:23;43464:12;43491:18;43524:13;43551:20;43563:7;43551:11;:20::i;:::-;43411:160;;;;;;;;43582:19;43604:10;:8;:10::i;:::-;43582:32;;43626:15;43643:23;43668:12;43684:134;43710:7;43732:4;43751:10;43776:5;43796:11;43684;:134::i;:::-;43625:193;;-1:-1:-1;43625:193:0;-1:-1:-1;43625:193:0;-1:-1:-1;43829:13:0;43845:22;:5;43855:11;43845:9;:22::i;:::-;-1:-1:-1;;;;;43898:15:0;;;;;;:7;:15;;;;;;43829:38;;-1:-1:-1;43898:28:0;;43918:7;43898:19;:28::i;:::-;-1:-1:-1;;;;;43880:15:0;;;;;;:7;:15;;;;;;;;:46;;;;43955:7;:15;;;;:28;;43975:7;43955:19;:28::i;:::-;-1:-1:-1;;;;;43937:15:0;;;;;;;:7;:15;;;;;;:46;;;;44015:18;;;;;;;:39;;44038:15;44015:22;:39::i;:::-;-1:-1:-1;;;;;43994:18:0;;;;;;:7;:18;;;;;:60;44067:58;44094:4;44101:10;44113:11;44067:18;:58::i;:::-;44136:37;44148:4;44154:5;44161:4;44167:5;44136:11;:37::i;:::-;44206:9;-1:-1:-1;;;;;44189:44:0;44198:6;-1:-1:-1;;;;;44189:44:0;;44217:15;44189:44;;;;25242:25:2;;25230:2;25215:18;;25096:177;44189:44:0;;;;;;;;43400:841;;;;;;;;;43275:966;;;:::o;42289:978::-;42438:23;42476:12;42503:18;42536:13;42563:20;42575:7;42563:11;:20::i;:::-;42423:160;;;;;;;;42594:19;42616:10;:8;:10::i;:::-;42594:32;;42638:15;42655:23;42680:12;42696:134;42722:7;42744:4;42763:10;42788:5;42808:11;42696;:134::i;:::-;42637:193;;-1:-1:-1;42637:193:0;-1:-1:-1;42637:193:0;-1:-1:-1;42841:13:0;42857:22;:5;42867:11;42857:9;:22::i;:::-;-1:-1:-1;;;;;42910:15:0;;;;;;:7;:15;;;;;;42841:38;;-1:-1:-1;42910:28:0;;42930:7;42910:19;:28::i;:::-;-1:-1:-1;;;;;42892:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;42970:18;;;;;:7;:18;;;;;:39;;42993:15;42970:22;:39::i;:::-;-1:-1:-1;;;;;42949:18:0;;;;;;:7;:18;;;;;;;;:60;;;;43041:7;:18;;;;:39;;43064:15;43041:22;:39::i;40331:905::-;40478:23;40516:12;40543:18;40576:13;40603:20;40615:7;40603:11;:20::i;:::-;40463:160;;;;;;;;40634:19;40656:10;:8;:10::i;:::-;40634:32;;40678:15;40695:23;40720:12;40736:134;40762:7;40784:4;40803:10;40828:5;40848:11;40736;:134::i;:::-;40677:193;;-1:-1:-1;40677:193:0;-1:-1:-1;40677:193:0;-1:-1:-1;40881:13:0;40897:22;:5;40907:11;40897:9;:22::i;:::-;-1:-1:-1;;;;;40950:15:0;;;;;;:7;:15;;;;;;40881:38;;-1:-1:-1;40950:28:0;;40970:7;40950:19;:28::i;41244:1037::-;41395:23;41433:12;41460:18;41493:13;41520:20;41532:7;41520:11;:20::i;:::-;41380:160;;;;;;;;41551:19;41573:10;:8;:10::i;:::-;41551:32;;41595:15;41612:23;41637:12;41653:134;41679:7;41701:4;41720:10;41745:5;41765:11;41653;:134::i;:::-;41594:193;;-1:-1:-1;41594:193:0;-1:-1:-1;41594:193:0;-1:-1:-1;41798:13:0;41814:22;:5;41824:11;41814:9;:22::i;:::-;-1:-1:-1;;;;;41867:15:0;;;;;;:7;:15;;;;;;41798:38;;-1:-1:-1;41867:28:0;;41887:7;41867:19;:28::i;:::-;-1:-1:-1;;;;;41849:15:0;;;;;;:7;:15;;;;;;;;:46;;;;41924:7;:15;;;;:28;;41944:7;41924:19;:28::i;14620:190:1:-;14721:7;14777:22;14781:3;14793:5;14777:3;:22::i;46921:408:0:-;47067:1;47056:7;:12;47052:51;;46921:408;;;:::o;47052:51::-;47115:15;47133:24;:7;47145:11;47133;:24::i;:::-;-1:-1:-1;;;;;47182:11:0;;;;;;:7;:11;;;;;;47115:42;;-1:-1:-1;47182:24:0;;47115:42;47182:15;:24::i;:::-;-1:-1:-1;;;;;47168:11:0;;;;;;:7;:11;;;;;:38;47221:34;:21;47176:2;47221:30;:34::i;:::-;47217:105;;;-1:-1:-1;;;;;47286:11:0;;;;;;:7;:11;;;;;;:24;;47302:7;47286:15;:24::i;:::-;-1:-1:-1;;;;;47272:11:0;;;;;;:7;:11;;;;;:38;47217:105;47041:288;46921:408;;;:::o;44249:317::-;44400:28;44422:5;44400:17;44412:4;44400:7;;:11;;:17;;;;:::i;:::-;:21;;:28::i;:::-;44390:7;:38;44452:10;;:20;;44467:4;44452:14;:20::i;:::-;44439:10;:33;44497:11;;:22;;44513:5;44497:15;:22::i;:::-;44483:11;:36;44540:7;;:18;;44552:5;44540:11;:18::i;:::-;44530:7;:28;-1:-1:-1;;;;44249:317:0:o;11009:273:1:-;11150:18;;11103:7;;11150:26;-1:-1:-1;11128:110:1;;;;-1:-1:-1;;;11128:110:1;;8369:2:2;11128:110:1;;;8351:21:2;8408:2;8388:18;;;8381:30;8447:34;8427:18;;;8420:62;-1:-1:-1;;;8498:18:2;;;8491:32;8540:19;;11128:110:1;8167:398:2;11128:110:1;11256:3;:11;;11268:5;11256:18;;;;;;;;:::i;:::-;;;;;;;;;11249:25;;11009:273;;;;:::o;14:160:2:-;79:20;;135:13;;128:21;118:32;;108:60;;164:1;161;154:12;179:188;258:13;;-1:-1:-1;;;;;300:42:2;;290:53;;280:81;;357:1;354;347:12;372:247;431:6;484:2;472:9;463:7;459:23;455:32;452:52;;;500:1;497;490:12;452:52;539:9;526:23;558:31;583:5;558:31;:::i;624:251::-;694:6;747:2;735:9;726:7;722:23;718:32;715:52;;;763:1;760;753:12;715:52;795:9;789:16;814:31;839:5;814:31;:::i;1140:388::-;1208:6;1216;1269:2;1257:9;1248:7;1244:23;1240:32;1237:52;;;1285:1;1282;1275:12;1237:52;1324:9;1311:23;1343:31;1368:5;1343:31;:::i;:::-;1393:5;-1:-1:-1;1450:2:2;1435:18;;1422:32;1463:33;1422:32;1463:33;:::i;:::-;1515:7;1505:17;;;1140:388;;;;;:::o;1533:456::-;1610:6;1618;1626;1679:2;1667:9;1658:7;1654:23;1650:32;1647:52;;;1695:1;1692;1685:12;1647:52;1734:9;1721:23;1753:31;1778:5;1753:31;:::i;:::-;1803:5;-1:-1:-1;1860:2:2;1845:18;;1832:32;1873:33;1832:32;1873:33;:::i;:::-;1533:456;;1925:7;;-1:-1:-1;;;1979:2:2;1964:18;;;;1951:32;;1533:456::o;1994:315::-;2059:6;2067;2120:2;2108:9;2099:7;2095:23;2091:32;2088:52;;;2136:1;2133;2126:12;2088:52;2175:9;2162:23;2194:31;2219:5;2194:31;:::i;:::-;2244:5;-1:-1:-1;2268:35:2;2299:2;2284:18;;2268:35;:::i;:::-;2258:45;;1994:315;;;;;:::o;2314:::-;2382:6;2390;2443:2;2431:9;2422:7;2418:23;2414:32;2411:52;;;2459:1;2456;2449:12;2411:52;2498:9;2485:23;2517:31;2542:5;2517:31;:::i;:::-;2567:5;2619:2;2604:18;;;;2591:32;;-1:-1:-1;;;2314:315:2:o;2634:1116::-;2729:6;2760:2;2803;2791:9;2782:7;2778:23;2774:32;2771:52;;;2819:1;2816;2809:12;2771:52;2852:9;2846:16;2881:18;2922:2;2914:6;2911:14;2908:34;;;2938:1;2935;2928:12;2908:34;2976:6;2965:9;2961:22;2951:32;;3021:7;3014:4;3010:2;3006:13;3002:27;2992:55;;3043:1;3040;3033:12;2992:55;3072:2;3066:9;3094:2;3090;3087:10;3084:36;;;3100:18;;:::i;:::-;3146:2;3143:1;3139:10;3178:2;3172:9;3241:2;3237:7;3232:2;3228;3224:11;3220:25;3212:6;3208:38;3296:6;3284:10;3281:22;3276:2;3264:10;3261:18;3258:46;3255:72;;;3307:18;;:::i;:::-;3343:2;3336:22;3393:18;;;3427:15;;;;-1:-1:-1;3462:11:2;;;3492;;;3488:20;;3485:33;-1:-1:-1;3482:53:2;;;3531:1;3528;3521:12;3482:53;3553:1;3544:10;;3563:156;3577:2;3574:1;3571:9;3563:156;;;3634:10;;3622:23;;3595:1;3588:9;;;;;3665:12;;;;3697;;3563:156;;;-1:-1:-1;3738:6:2;2634:1116;-1:-1:-1;;;;;;;;2634:1116:2:o;3755:180::-;3811:6;3864:2;3852:9;3843:7;3839:23;3835:32;3832:52;;;3880:1;3877;3870:12;3832:52;3903:26;3919:9;3903:26;:::i;3940:450::-;4027:6;4035;4043;4096:2;4084:9;4075:7;4071:23;4067:32;4064:52;;;4112:1;4109;4102:12;4064:52;4135:40;4165:9;4135:40;:::i;:::-;4125:50;;4194:49;4239:2;4228:9;4224:18;4194:49;:::i;:::-;4184:59;;4286:2;4275:9;4271:18;4265:25;4330:10;4323:5;4319:22;4312:5;4309:33;4299:61;;4356:1;4353;4346:12;4299:61;4379:5;4369:15;;;3940:450;;;;;:::o;4395:180::-;4454:6;4507:2;4495:9;4486:7;4482:23;4478:32;4475:52;;;4523:1;4520;4513:12;4475:52;-1:-1:-1;4546:23:2;;4395:180;-1:-1:-1;4395:180:2:o;4580:248::-;4645:6;4653;4706:2;4694:9;4685:7;4681:23;4677:32;4674:52;;;4722:1;4719;4712:12;4674:52;4758:9;4745:23;4735:33;;4787:35;4818:2;4807:9;4803:18;4787:35;:::i;4833:248::-;4901:6;4909;4962:2;4950:9;4941:7;4937:23;4933:32;4930:52;;;4978:1;4975;4968:12;4930:52;-1:-1:-1;;5001:23:2;;;5071:2;5056:18;;;5043:32;;-1:-1:-1;4833:248:2:o;5086:306::-;5174:6;5182;5190;5243:2;5231:9;5222:7;5218:23;5214:32;5211:52;;;5259:1;5256;5249:12;5211:52;5288:9;5282:16;5272:26;;5338:2;5327:9;5323:18;5317:25;5307:35;;5382:2;5371:9;5367:18;5361:25;5351:35;;5086:306;;;;;:::o;5397:461::-;5450:3;5488:5;5482:12;5515:6;5510:3;5503:19;5541:4;5570:2;5565:3;5561:12;5554:19;;5607:2;5600:5;5596:14;5628:1;5638:195;5652:6;5649:1;5646:13;5638:195;;;5717:13;;-1:-1:-1;;;;;5713:39:2;5701:52;;5773:12;;;;5808:15;;;;5749:1;5667:9;5638:195;;;-1:-1:-1;5849:3:2;;5397:461;-1:-1:-1;;;;;5397:461:2:o;7565:597::-;7677:4;7706:2;7735;7724:9;7717:21;7767:6;7761:13;7810:6;7805:2;7794:9;7790:18;7783:34;7835:1;7845:140;7859:6;7856:1;7853:13;7845:140;;;7954:14;;;7950:23;;7944:30;7920:17;;;7939:2;7916:26;7909:66;7874:10;;7845:140;;;8003:6;8000:1;7997:13;7994:91;;;8073:1;8068:2;8059:6;8048:9;8044:22;8040:31;8033:42;7994:91;-1:-1:-1;8146:2:2;8125:15;-1:-1:-1;;8121:29:2;8106:45;;;;8153:2;8102:54;;7565:597;-1:-1:-1;;;7565:597:2:o;9386:408::-;9588:2;9570:21;;;9627:2;9607:18;;;9600:30;9666:34;9661:2;9646:18;;9639:62;-1:-1:-1;;;9732:2:2;9717:18;;9710:42;9784:3;9769:19;;9386:408::o;15642:356::-;15844:2;15826:21;;;15863:18;;;15856:30;15922:34;15917:2;15902:18;;15895:62;15989:2;15974:18;;15642:356::o;23054:399::-;23256:2;23238:21;;;23295:2;23275:18;;;23268:30;23334:34;23329:2;23314:18;;23307:62;-1:-1:-1;;;23400:2:2;23385:18;;23378:33;23443:3;23428:19;;23054:399::o;25278:332::-;25485:6;25474:9;25467:25;25528:2;25523;25512:9;25508:18;25501:30;25448:4;25548:56;25600:2;25589:9;25585:18;25577:6;25548:56;:::i;:::-;25540:64;25278:332;-1:-1:-1;;;;25278:332:2:o;25615:582::-;25914:6;25903:9;25896:25;25957:6;25952:2;25941:9;25937:18;25930:34;26000:3;25995:2;25984:9;25980:18;25973:31;25877:4;26021:57;26073:3;26062:9;26058:19;26050:6;26021:57;:::i;:::-;-1:-1:-1;;;;;26114:32:2;;;;26109:2;26094:18;;26087:60;-1:-1:-1;26178:3:2;26163:19;26156:35;26013:65;25615:582;-1:-1:-1;;;25615:582:2:o;26968:128::-;27008:3;27039:1;27035:6;27032:1;27029:13;27026:39;;;27045:18;;:::i;:::-;-1:-1:-1;27081:9:2;;26968:128::o;27101:217::-;27141:1;27167;27157:132;;27211:10;27206:3;27202:20;27199:1;27192:31;27246:4;27243:1;27236:15;27274:4;27271:1;27264:15;27157:132;-1:-1:-1;27303:9:2;;27101:217::o;27323:168::-;27363:7;27429:1;27425;27421:6;27417:14;27414:1;27411:21;27406:1;27399:9;27392:17;27388:45;27385:71;;;27436:18;;:::i;:::-;-1:-1:-1;27476:9:2;;27323:168::o;27496:125::-;27536:4;27564:1;27561;27558:8;27555:34;;;27569:18;;:::i;:::-;-1:-1:-1;27606:9:2;;27496:125::o;27626:135::-;27665:3;-1:-1:-1;;27686:17:2;;27683:43;;;27706:18;;:::i;:::-;-1:-1:-1;27753:1:2;27742:13;;27626:135::o;27766:127::-;27827:10;27822:3;27818:20;27815:1;27808:31;27858:4;27855:1;27848:15;27882:4;27879:1;27872:15;27898:127;27959:10;27954:3;27950:20;27947:1;27940:31;27990:4;27987:1;27980:15;28014:4;28011:1;28004:15;28030:127;28091:10;28086:3;28082:20;28079:1;28072:31;28122:4;28119:1;28112:15;28146:4;28143:1;28136:15;28162:127;28223:10;28218:3;28214:20;28211:1;28204:31;28254:4;28251:1;28244:15;28278:4;28275:1;28268:15;28294:131;-1:-1:-1;;;;;28369:31:2;;28359:42;;28349:70;;28415:1;28412;28405:12

Swarm Source

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