ETH Price: $3,377.01 (-2.34%)

Token

Bobatama (BOBA)
 

Overview

Max Total Supply

1,000,000,000,000 BOBA

Holders

2,314 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
24,043,260.895668890165729264 BOBA

Value
$0.00
0x295a882972ada328ba557c7a7eef3d0d55059213
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Bobatama is the developing a multi-chain GHOST wallet to allow for anonymous transactions on the blockchain.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Bobatama

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity 0.8.11;

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

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

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

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

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

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

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

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

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

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

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

library Address {
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

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

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

    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        return _functionCallWithValue(target, data, value, errorMessage);
    }

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

        (bool success, bytes memory returndata) = target.call{value: weiValue}(
            data
        );
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

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

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

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

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

    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

    function getTime() public view returns (uint256) {
        return block.timestamp;
    }
}


interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);

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

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

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

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

contract Bobatama is Context, IERC20, Ownable {
    using Address for address;

    address payable public operationsAddress;
    address payable public devAddress;      
        
    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    
    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;
    bool public limitsInEffect = true;

    mapping(address => bool) private _isExcludedFromFee;

    mapping(address => bool) private _isExcluded;
    address[] private _excluded;
    
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 1 * 1e12 * 1e18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private constant _name = "Bobatama";
    string private constant _symbol = "BOBA";
    uint8 private constant _decimals = 18;

    // these values are pretty much arbitrary since they get overwritten for every txn, but the placeholders make it easier to work with current contract.
    uint256 private _taxFee;
    uint256 private _previousTaxFee = _taxFee;

    uint256 private _operationsFee;
    
    uint256 private _liquidityFee;
    uint256 private _previousLiquidityFee = _liquidityFee;
    
    uint256 private constant BUY = 1;
    uint256 private constant SELL = 2;
    uint256 private constant TRANSFER = 3;
    uint256 private buyOrSellSwitch;

    uint256 public _buyTaxFee = 100;
    uint256 public _buyLiquidityFee = 600;
    uint256 public _buyOperationsFee = 500;

    uint256 public _sellTaxFee = 100;
    uint256 public _sellLiquidityFee = 600;
    uint256 public _sellOperationsFee = 700;

    mapping (address => bool) public privateSaleWallets;
    mapping (address => uint256) public nextPrivateWalletSellDate;
    uint256 public maxPrivSaleSell = 0.5 ether;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    uint256 public blockForPenaltyEnd;
    mapping (address => bool) public boughtEarly;
    uint256 public botsCaught;
    
    uint256 public _liquidityTokensToSwap;
    uint256 public _operationsTokensToSwap;
    
    uint256 public maxTransactionAmount;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
    uint256 public maxWallet;
    
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

    uint256 private minimumTokensBeforeSwap;

    IDexRouter public dexRouter;
    address public lpPair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    bool public tradingActive = false;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event SwapETHForTokens(uint256 amountIn, address[] path);

    event SwapTokensForETH(uint256 amountIn, address[] path);
    
    event SetAutomatedMarketMakerPair(address pair, bool value);
    
    event ExcludeFromReward(address excludedAddress);
    
    event IncludeInReward(address includedAddress);
    
    event ExcludeFromFee(address excludedAddress);
    
    event IncludeInFee(address includedAddress);
    
    event SetBuyFee(uint256 operationsFee, uint256 liquidityFee, uint256 reflectFee);
    
    event SetSellFee(uint256 operationsFee, uint256 liquidityFee, uint256 reflectFee);
    
    event TransferForeignToken(address token, uint256 amount);
    
    event UpdatedOperationsAddress(address operations);
    
    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtEarlyBuyer(address sniper);

    event EnabledTrading();

    event RemovedLimits();
    
    event TransferDelayDisabled();

    event UpdatedPrivateMaxSell(uint256 amount);


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

    constructor() payable {
        _rOwned[address(this)] = _rTotal/100*45;
        _rOwned[0x058E3149Ef06F348aC384C3F10c043ae567cC01f] = _rTotal/100*28;
        _rOwned[0x2941905BC065726d0b5A9b79eA7AF7B01F96C193] = _rTotal/1000*83;
        _rOwned[0x626C1ddD20b691E441fC8d18398E6Fa8E0DebF3F] = _rTotal/100*5;
        _rOwned[0x903D52723560543f550828B508eC66fe03ed0ABC] = _rTotal/1000*2;
        _rOwned[address(0xdead)] = _rTotal/1000*65;
        _rOwned[msg.sender] = _rTotal/100*7;
        
        maxTransactionAmount = _tTotal * 1 / 10000;
        minimumTokensBeforeSwap = _tTotal * 50 / 100000;
        
        operationsAddress = payable(0x4579dd0cF46a192f71fd1be3F5843139E5c67F5c); // Operations Address
        
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[operationsAddress] = true;
        _isExcludedFromFee[0x058E3149Ef06F348aC384C3F10c043ae567cC01f] = true;
        _isExcludedFromFee[0x2941905BC065726d0b5A9b79eA7AF7B01F96C193] = true;
        _isExcludedFromFee[0x626C1ddD20b691E441fC8d18398E6Fa8E0DebF3F] = true;
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(operationsAddress, true);
        
        excludeFromReward(msg.sender);
        
        emit Transfer(address(0), address(this), _tTotal/100*45);
        emit Transfer(address(0), address(0x058E3149Ef06F348aC384C3F10c043ae567cC01f), _tTotal/100*28);
        emit Transfer(address(0), address(0x2941905BC065726d0b5A9b79eA7AF7B01F96C193), _tTotal/1000*83);
        emit Transfer(address(0), address(0x626C1ddD20b691E441fC8d18398E6Fa8E0DebF3F), _tTotal/100*5);
        emit Transfer(address(0), address(0x903D52723560543f550828B508eC66fe03ed0ABC), _tTotal/1000*2);
        emit Transfer(address(0), address(0xdead), _tTotal/1000*65);
        emit Transfer(address(0), address(msg.sender), _tTotal/100*7);
    }

    function name() external pure returns (string memory) {
        return _name;
    }

    function symbol() external pure returns (string memory) {
        return _symbol;
    }

    function decimals() external pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() external pure override returns (uint256) {
        return _tTotal;
    }

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

    function totalFees() external view returns (uint256) {
        return _tFeeTotal;
    }
    
    // remove limits after token is stable - 30-60 minutes
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        transferDelayEnabled = false;
        emit RemovedLimits();
    }
    
    // disable Transfer delay
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
        emit TransferDelayDisabled();
    }
    
    function removeBoughtEarly(address wallet) external onlyOwner {
        require(boughtEarly[wallet], "Wallet is already not flagged.");
        boughtEarly[wallet] = false;
    }

    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
            
    function minimumTokensBeforeSwapAmount() external view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

    function setPrivateSaleMaxSell(uint256 amount) external onlyOwner{
        require(amount >= 25 && amount <= 500, "Must set between 0.25 and 50 ETH");
        maxPrivSaleSell = amount * 1e16;
        emit UpdatedPrivateMaxSell(amount);
    }

     // change the minimum amount of tokens to sell from fees
    function updateMinimumTokensBeforeSwap(uint256 newAmount) external onlyOwner{
  	    require(newAmount >= _tTotal * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= _tTotal * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    minimumTokensBeforeSwap = newAmount;
  	}

    function updateMaxAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (_tTotal * 2 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.2%");
        maxTransactionAmount = newNum * (1e18);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != lpPair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        _isExcludedMaxTransactionAmount[pair] = value;
        if(value){excludeFromReward(pair);}
        if(!value){includeInReward(pair);}
    }

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

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

    function excludeFromReward(address account) public onlyOwner {
        require(!_isExcluded[account], "Account is already excluded");
        require(_excluded.length + 1 <= 50, "Cannot exclude more than 50 accounts.  Include a previously excluded address.");
        if (_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) public onlyOwner {
        require(_isExcluded[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
 
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        
        if(!tradingActive){
            require(_isExcludedFromFee[from] || _isExcludedFromFee[to], "Trading is not active yet.");
        }

        if(privateSaleWallets[from]){
            if(automatedMarketMakerPairs[to]){
                //enforce max sell restrictions.
                require(nextPrivateWalletSellDate[from] <= block.timestamp, "Cannot sell yet");
                require(amount <= getPrivateSaleMaxSell(), "Attempting to sell over max sell amount.  Check max.");
                nextPrivateWalletSellDate[from] = block.timestamp + 24 hours;
            } else if(!_isExcludedFromFee[to]){
                revert("Private sale cannot transfer and must sell only or transfer to a whitelisted address.");
            }
        }

        if(!earlyBuyPenaltyInEffect()){
            require(!boughtEarly[from] || to == owner() || to == address(0xdead), "Bots cannot transfer tokens in or out except to owner or dead address.");
        }

        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !inSwapAndLiquify
            ){                

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != address(dexRouter) && to != address(lpPair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number && _holderLastTransferTimestamp[to] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }
                
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                } 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;

        // swap and liquify
        if (
            !inSwapAndLiquify &&
            swapAndLiquifyEnabled &&
            balanceOf(lpPair) > 0 &&
            !_isExcludedFromFee[to] &&
            !_isExcludedFromFee[from] &&
            automatedMarketMakerPairs[to] &&
            overMinimumTokenBalance
        ) {
            swapBack();
        }

        removeAllFee();
        
        buyOrSellSwitch = TRANSFER;
        
        if (!_isExcludedFromFee[from] && !_isExcludedFromFee[to]) {
            if(earlyBuyPenaltyInEffect() && automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to]){
                
                if(!boughtEarly[to]){
                    boughtEarly[to] = true;
                    botsCaught += 1;
                    emit CaughtEarlyBuyer(to);
                }

                _taxFee = _buyTaxFee;
                _liquidityFee = _buyLiquidityFee + _buyOperationsFee;
                if(_liquidityFee > 0){
                    buyOrSellSwitch = BUY;
                }
            }

            // Buy
            if (automatedMarketMakerPairs[from]) {
                _taxFee = _buyTaxFee;
                _liquidityFee = _buyLiquidityFee + _buyOperationsFee;
                if(_liquidityFee > 0){
                    buyOrSellSwitch = BUY;
                }
            } 
            // Sell
            else if (automatedMarketMakerPairs[to]) {
                _taxFee = _sellTaxFee;
                _liquidityFee = _sellLiquidityFee + _sellOperationsFee;
                if(_liquidityFee > 0){
                    buyOrSellSwitch = SELL;
                }
            }
        }
        
        _tokenTransfer(from, to, amount);
        
        restoreAllFee();
        
    }

    function earlyBuyPenaltyInEffect() public view returns (bool){
        return block.number < blockForPenaltyEnd;
    }

    function swapBack() private lockTheSwap {

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _liquidityTokensToSwap + _operationsTokensToSwap;
        bool success;

        // prevent overly large contract sells.
        if(contractBalance >= minimumTokensBeforeSwap * 20){
            contractBalance = minimumTokensBeforeSwap * 20;
        }

        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
        
        // Halve the amount of liquidity tokens
        uint256 tokensForLiquidity = contractBalance * _liquidityTokensToSwap / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance-(tokensForLiquidity);
        
        swapTokensForETH(amountToSwapForETH);
        
        uint256 ethBalance = address(this).balance;
        
        uint256 ethForOperations = ethBalance* (_operationsTokensToSwap) / (totalTokensToSwap - (_liquidityTokensToSwap/2));
        
        uint256 ethForLiquidity = ethBalance - ethForOperations;

        _liquidityTokensToSwap = 0;
        _operationsTokensToSwap = 0;        
        
        if(tokensForLiquidity > 0 && ethForLiquidity > 0){
            addLiquidity(tokensForLiquidity, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
        
        // send remainder to operations
        (success,) = address(operationsAddress).call{value: address(this).balance}("");
    }
    
    // force Swap back if slippage above 49% for launch.
    function forceSwapBack() external onlyOwner {
        uint256 contractBalance = balanceOf(address(this));
        require(contractBalance >= minimumTokensBeforeSwap, "Can only swap back if above the threshold.");
        swapBack();
        emit OwnerForcedSwapBack(block.timestamp);
    }
    
    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();
        _approve(address(this), address(dexRouter), tokenAmount);
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function getPrivateSaleMaxSell() public view returns (uint256){
        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);
        
        uint256[] memory amounts = new uint256[](2);
        amounts = dexRouter.getAmountsOut(maxPrivSaleSell, path);
        return amounts[1] + (amounts[1] * (_sellTaxFee + _sellLiquidityFee + _sellOperationsFee))/10000;
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(dexRouter), tokenAmount);
        dexRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(0xdead),
            block.timestamp
        );
    }

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

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
    }

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

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

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

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

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal-(rFee);
        _tFeeTotal = _tFeeTotal+(tFee);
    }

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

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

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

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

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

    function _takeLiquidity(uint256 tLiquidity) private {
        if(buyOrSellSwitch == BUY){
            _liquidityTokensToSwap += tLiquidity * _buyLiquidityFee / _liquidityFee;
            _operationsTokensToSwap += tLiquidity * _buyOperationsFee / _liquidityFee;
        } else if(buyOrSellSwitch == SELL){
            _liquidityTokensToSwap += tLiquidity * _sellLiquidityFee / _liquidityFee;
            _operationsTokensToSwap += tLiquidity * _sellOperationsFee / _liquidityFee;
        }
        uint256 currentRate = _getRate();
        uint256 rLiquidity = tLiquidity * (currentRate);
        _rOwned[address(this)] = _rOwned[address(this)] + rLiquidity;
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)] + tLiquidity;
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount * _taxFee / 10000;
    }

    function calculateLiquidityFee(uint256 _amount)
        private
        view
        returns (uint256)
    {
        return _amount * _liquidityFee / 10000;
    }

    function removeAllFee() private {
        if (_taxFee == 0 && _liquidityFee == 0) return;

        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;

        _taxFee = 0;
        _liquidityFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }

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

    function excludeFromFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = true;
        emit ExcludeFromFee(account);
    }

    function includeInFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = false;
        emit IncludeInFee(account);
    }

    function setBuyFee(uint256 buyTaxFee, uint256 buyLiquidityFee, uint256 buyOperationsFee)
        external
        onlyOwner
    {
        _buyTaxFee = buyTaxFee;
        _buyLiquidityFee = buyLiquidityFee;
        _buyOperationsFee = buyOperationsFee;
        require(_buyTaxFee + _buyLiquidityFee + _buyOperationsFee <= 1500, "Must keep buy taxes below 15%");
        emit SetBuyFee(buyOperationsFee, buyLiquidityFee, buyTaxFee);
    }

    function setSellFee(uint256 sellTaxFee, uint256 sellLiquidityFee, uint256 sellOperationsFee)
        external
        onlyOwner
    {
        _sellTaxFee = sellTaxFee;
        _sellLiquidityFee = sellLiquidityFee;
        _sellOperationsFee = sellOperationsFee;
        require(_sellTaxFee + _sellLiquidityFee + _sellOperationsFee <= 2000, "Must keep sell taxes below 20%");
        emit SetSellFee(sellOperationsFee, sellLiquidityFee, sellTaxFee);
    }
    
    function setOperationsAddress(address _operationsAddress) external onlyOwner {
        require(_operationsAddress != address(0), "_operationsAddress address cannot be 0");
        _isExcludedFromFee[operationsAddress] = false;
        operationsAddress = payable(_operationsAddress);
        _isExcludedFromFee[operationsAddress] = true;
        emit UpdatedOperationsAddress(_operationsAddress);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    // To receive ETH from dexRouter when swapping
    receive() external payable {}

    function transferForeignToken(address _token, address _to)
        external
        onlyOwner
        returns (bool _sent)
    {
        require(_token != address(0), "_token address cannot be 0");
        require(_token != address(this), "Can't withdraw native tokens");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }
    
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function launch(address[] memory wallets, uint256[] memory amountsInTokens, uint256 blocksForPenalty) external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot relaunch.");
        require(blocksForPenalty < 10, "Cannot make penalty blocks more than 10");

        removeAllFee();
        require(wallets.length == amountsInTokens.length, "arrays must be the same length");
        require(wallets.length < 200, "Can only airdrop 200 wallets per txn due to gas limits"); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
        for(uint256 i = 0; i < wallets.length; i++){
            address wallet = wallets[i];
            privateSaleWallets[wallet] = true;
            nextPrivateWalletSellDate[wallet] = block.timestamp + 24 hours;
            uint256 amount = amountsInTokens[i];
            _transfer(msg.sender, wallet, amount);
        }

        maxTransactionAmount = _tTotal * 25 / 10000;

        //standard enable trading
        tradingActive = true;
        swapAndLiquifyEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty;
        emit EnabledTrading();

        // initialize router
        IDexRouter _dexRouter = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        dexRouter = _dexRouter;

        // create pair
        lpPair = IDexFactory(_dexRouter.factory()).createPair(address(this), _dexRouter.WETH());
        excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);
   
        // add the liquidity

        require(address(this).balance > 0, "Must have ETH on contract to launch");

        require(balanceOf(address(this)) > 0, "Must have Tokens on contract to launch");

        _approve(address(this), address(dexRouter), balanceOf(address(this)));
        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            msg.sender,
            block.timestamp
        );
        restoreAllFee();
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"excludedAddress","type":"address"}],"name":"ExcludeFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"excludedAddress","type":"address"}],"name":"ExcludeFromReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"includedAddress","type":"address"}],"name":"IncludeInFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"includedAddress","type":"address"}],"name":"IncludeInReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","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":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"operationsFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflectFee","type":"uint256"}],"name":"SetBuyFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"operationsFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflectFee","type":"uint256"}],"name":"SetSellFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","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":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[],"name":"TransferDelayDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"operations","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UpdatedPrivateMaxSell","type":"event"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_operationsTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getPrivateSaleMaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"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":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"},{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPrivSaleSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nextPrivateWalletSellDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"privateSaleWallets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"address","name":"wallet","type":"address"}],"name":"removeBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTaxFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"buyOperationsFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setPrivateSaleMaxSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellTaxFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellOperationsFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526008805461ffff19166101011790556200002e6c0c9f2c9cd04674edea4000000060001962000c55565b6200003c9060001962000c82565b600c55600e54600f556011546012556064601481905561025860158190556101f46016556017919091556018556102bc6019556706f05b59d3b20000601c556000601d8190556029805461ffff60a81b1916905580546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506064600c54620000e0919062000c9c565b620000ed90602d62000cb3565b30600090815260046020526040902055600c546200010e9060649062000c9c565b6200011b90601c62000cb3565b73058e3149ef06f348ac384c3f10c043ae567cc01f60005260046020527ffa281a56e586838f5d3ac77e3f7aa5a162d2d4530e733bf952656d4fd9f1864e55600c546200016c906103e89062000c9c565b6200017990605362000cb3565b732941905bc065726d0b5a9b79ea7af7b01f96c19360005260046020527fb3e6e0d1bb8930f2870582a1a9e274c7c3bb96e7a95f680d1c0111ff1e781f1255600c54620001c99060649062000c9c565b620001d690600562000cb3565b73626c1ddd20b691e441fc8d18398e6fa8e0debf3f60005260046020527fab9c5dd827661376e77c45d18ac533dcddf9b3a897d2bb7dd30ad5e6c02d5bb655600c5462000227906103e89062000c9c565b6200023490600262000cb3565b73903d52723560543f550828b508ec66fe03ed0abc60005260046020527f3f09375b69595cb4b741570a879711dce24dad792b2e698c7fe207956239efbe55600c5462000285906103e89062000c9c565b6200029290604162000cb3565b61dead60005260046020527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd55600c54620002d09060649062000c9c565b620002dd90600762000cb3565b336000908152600460205260409020556127106200030a6c0c9f2c9cd04674edea40000000600162000cb3565b62000316919062000c9c565b602355620186a0620003376c0c9f2c9cd04674edea40000000603262000cb3565b62000343919062000c9c565b602755600280546001600160a01b031916734579dd0cf46a192f71fd1be3f5843139e5c67f5c179055600160096000620003856000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526009909352818320805485166001908117909155600254909116835290822080548416821790557fab7835badfee4915d63bc2b479065c28fcc89957f10ae2db80c7efef740370ed80548416821790557fff740585044d3dd78145f8517d0e7cc297e6ee84bc217baa55db8c0de960bd78805484168217905573626c1ddd20b691e441fc8d18398e6fa8e0debf3f9091527faa53fcbb38a694fd3af7b29fccf6f63fd746873cbfa32352ddcdece966c4bb5780549092161790556200048f620004876000546001600160a01b031690565b600162000737565b6200049c30600162000737565b620004ab61dead600162000737565b600254620004c4906001600160a01b0316600162000737565b620004cf33620007b1565b30600060008051602062005636833981519152620004fc60646c0c9f2c9cd04674edea4000000062000c9c565b6200050990602d62000cb3565b60405190815260200160405180910390a373058e3149ef06f348ac384c3f10c043ae567cc01f6000600080516020620056368339815191526200055b60646c0c9f2c9cd04674edea4000000062000c9c565b6200056890601c62000cb3565b60405190815260200160405180910390a3732941905bc065726d0b5a9b79ea7af7b01f96c193600060008051602062005636833981519152620005bb6103e86c0c9f2c9cd04674edea4000000062000c9c565b620005c890605362000cb3565b60405190815260200160405180910390a373626c1ddd20b691e441fc8d18398e6fa8e0debf3f6000600080516020620056368339815191526200061a60646c0c9f2c9cd04674edea4000000062000c9c565b6200062790600562000cb3565b60405190815260200160405180910390a373903d52723560543f550828b508ec66fe03ed0abc6000600080516020620056368339815191526200067a6103e86c0c9f2c9cd04674edea4000000062000c9c565b6200068790600262000cb3565b60405190815260200160405180910390a361dead600060008051602062005636833981519152620006c86103e86c0c9f2c9cd04674edea4000000062000c9c565b620006d590604162000cb3565b60405190815260200160405180910390a3336000600080516020620056368339815191526200071360646c0c9f2c9cd04674edea4000000062000c9c565b6200072090600762000cb3565b60405190815260200160405180910390a362000d24565b6000546001600160a01b03163314620007865760405162461bcd60e51b815260206004820181905260248201526000805160206200561683398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314620007fc5760405162461bcd60e51b815260206004820181905260248201526000805160206200561683398151915260448201526064016200077d565b6001600160a01b0381166000908152600a602052604090205460ff1615620008675760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016200077d565b600b546032906200087a90600162000cd5565b1115620009065760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a4016200077d565b6001600160a01b0381166000908152600460205260409020541562000963576001600160a01b0381166000908152600460205260409020546200094990620009c9565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6000600c5482111562000a325760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016200077d565b600062000a3e62000a53565b905062000a4c818462000c9c565b9392505050565b6000808062000a6162000a79565b909250905062000a72818362000c9c565b9250505090565b600c5460009081906c0c9f2c9cd04674edea40000000825b600b5481101562000bf6578260046000600b848154811062000ab75762000ab762000cf0565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118062000b2657508160056000600b848154811062000aff5762000aff62000cf0565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1562000b47575050600c54936c0c9f2c9cd04674edea400000009350915050565b60046000600b838154811062000b615762000b6162000cf0565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000b92908462000c82565b925060056000600b838154811062000bae5762000bae62000cf0565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000bdf908362000c82565b91508062000bed8162000d06565b91505062000a91565b506c0c9f2c9cd04674edea40000000600c5462000c14919062000c9c565b82101562000c36575050600c54926c0c9f2c9cd04674edea4000000092509050565b90939092509050565b634e487b7160e01b600052601260045260246000fd5b60008262000c675762000c6762000c3f565b500690565b634e487b7160e01b600052601160045260246000fd5b60008282101562000c975762000c9762000c6c565b500390565b60008262000cae5762000cae62000c3f565b500490565b600081600019048311821515161562000cd05762000cd062000c6c565b500290565b6000821982111562000ceb5762000ceb62000c6c565b500190565b634e487b7160e01b600052603260045260246000fd5b600060001982141562000d1d5762000d1d62000c6c565b5060010190565b6148e28062000d346000396000f3fe6080604052600436106104095760003560e01c806370a0823111610213578063afd6ce6111610123578063e884f260116100ab578063ee40166e1161007a578063ee40166e14610c61578063efcc52de14610c77578063f2fde38b14610c8d578063f5648a4f14610cad578063f8b45b0514610cc257600080fd5b8063e884f26014610bec578063ea2f0b3714610c01578063ea4cfe1214610c21578063ead010ae14610c4157600080fd5b8063c876d0b9116100f2578063c876d0b914610b4a578063c8c8ebe414610b64578063dc44b6a014610b7a578063dd62ed3e14610b90578063e82a416d14610bd657600080fd5b8063afd6ce6114610aa9578063b62496f514610ad9578063bbc0c74214610b09578063c49b9a8014610b2a57600080fd5b806388f82020116101a6578063a073d37f11610175578063a073d37f14610a28578063a457c2d714610a3d578063a62068ce14610a5d578063a9059cbb14610a73578063acee28d114610a9357600080fd5b806388f82020146109845780638da5cb5b146109bd57806395d89b41146109db5780639a7a23d614610a0857600080fd5b80637571336a116101e25780637571336a146108fe5780638366e79a1461091e57806385ecfd281461093e57806388790a681461096e57600080fd5b806370a082311461089f578063713d0974146108bf578063715018a6146108d4578063751039fc146108e957600080fd5b806339509351116103195780634a74bb02116102a1578063557ed1ba11610270578063557ed1ba1461081257806358a6d531146108255780635bb988c91461083c5780635c3352d31461085c5780636b0a894c1461088957600080fd5b80634a74bb021461078357806351f205e4146107a457806352390c02146107b95780635342acb4146107d957600080fd5b8063437823ec116102e8578063437823ec146106e4578063452ed4f1146107045780634549b03914610724578063499b8394146107445780634a62bb651461076457600080fd5b806339509351146106785780633ad10ef6146106985780634047ea3e146106b8578063416381ea146106ce57600080fd5b806318e1c1231161039c57806323b872dd1161036b57806323b872dd146105dc57806325519cf2146105fc5780632d8381191461061c578063313ce5671461063c5780633685d4191461065857600080fd5b806318e1c123146105705780631c68372d146105905780631d865c30146105a6578063200a692d146105c657600080fd5b8063106b5da1116103d8578063106b5da1146104e257806310d5de531461050257806313114a9d1461053257806318160ddd1461055157600080fd5b806306fdde03146104155780630758d924146104585780630804375114610490578063095ea7b3146104b257600080fd5b3661041057005b600080fd5b34801561042157600080fd5b50604080518082019091526008815267426f626174616d6160c01b60208201525b60405161044f9190614228565b60405180910390f35b34801561046457600080fd5b50602854610478906001600160a01b031681565b6040516001600160a01b03909116815260200161044f565b34801561049c57600080fd5b506104b06104ab36600461427d565b610cd8565b005b3480156104be57600080fd5b506104d26104cd3660046142ae565b610e32565b604051901515815260200161044f565b3480156104ee57600080fd5b506104b06104fd36600461427d565b610e49565b34801561050e57600080fd5b506104d261051d3660046142da565b60246020526000908152604090205460ff1681565b34801561053e57600080fd5b50600d545b60405190815260200161044f565b34801561055d57600080fd5b5068327cb2734119d3b7a9601e1b610543565b34801561057c57600080fd5b506104b061058b36600461427d565b610f29565b34801561059c57600080fd5b5061054360195481565b3480156105b257600080fd5b506104b06105c13660046142f7565b610ffd565b3480156105d257600080fd5b5061054360175481565b3480156105e857600080fd5b506104d26105f7366004614323565b6110e3565b34801561060857600080fd5b506104b06106173660046142f7565b61118d565b34801561062857600080fd5b5061054361063736600461427d565b61126a565b34801561064857600080fd5b506040516012815260200161044f565b34801561066457600080fd5b506104b06106733660046142da565b6112ee565b34801561068457600080fd5b506104d26106933660046142ae565b6114a5565b3480156106a457600080fd5b50600354610478906001600160a01b031681565b3480156106c457600080fd5b5061054360215481565b3480156106da57600080fd5b5061054360225481565b3480156106f057600080fd5b506104b06106ff3660046142da565b6114e1565b34801561071057600080fd5b50602954610478906001600160a01b031681565b34801561073057600080fd5b5061054361073f366004614372565b61155f565b34801561075057600080fd5b506104b061075f3660046142da565b6115f6565b34801561077057600080fd5b506008546104d290610100900460ff1681565b34801561078f57600080fd5b506029546104d290600160a81b900460ff1681565b3480156107b057600080fd5b506104b0611703565b3480156107c557600080fd5b506104b06107d43660046142da565b6117d7565b3480156107e557600080fd5b506104d26107f43660046142da565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561081e57600080fd5b5042610543565b34801561083157600080fd5b50601e5443106104d2565b34801561084857600080fd5b506104b06108573660046142da565b6119c5565b34801561086857600080fd5b506105436108773660046142da565b601b6020526000908152604090205481565b34801561089557600080fd5b5061054360205481565b3480156108ab57600080fd5b506105436108ba3660046142da565b611a78565b3480156108cb57600080fd5b50610543611ad7565b3480156108e057600080fd5b506104b0611ce1565b3480156108f557600080fd5b506104b0611d55565b34801561090a57600080fd5b506104b06109193660046143a2565b611db5565b34801561092a57600080fd5b506104d26109393660046143d0565b611e0a565b34801561094a57600080fd5b506104d26109593660046142da565b601f6020526000908152604090205460ff1681565b34801561097a57600080fd5b5061054360185481565b34801561099057600080fd5b506104d261099f3660046142da565b6001600160a01b03166000908152600a602052604090205460ff1690565b3480156109c957600080fd5b506000546001600160a01b0316610478565b3480156109e757600080fd5b50604080518082019091526004815263424f424160e01b6020820152610442565b348015610a1457600080fd5b506104b0610a233660046143a2565b612012565b348015610a3457600080fd5b50602754610543565b348015610a4957600080fd5b506104d2610a583660046142ae565b6120ca565b348015610a6957600080fd5b50610543601e5481565b348015610a7f57600080fd5b506104d2610a8e3660046142ae565b612163565b348015610a9f57600080fd5b50610543601c5481565b348015610ab557600080fd5b506104d2610ac43660046142da565b601a6020526000908152604090205460ff1681565b348015610ae557600080fd5b506104d2610af43660046142da565b60266020526000908152604090205460ff1681565b348015610b1557600080fd5b506029546104d290600160b01b900460ff1681565b348015610b3657600080fd5b506104b0610b453660046143fe565b612170565b348015610b5657600080fd5b506008546104d29060ff1681565b348015610b7057600080fd5b5061054360235481565b348015610b8657600080fd5b5061054360155481565b348015610b9c57600080fd5b50610543610bab3660046143d0565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b348015610be257600080fd5b5061054360165481565b348015610bf857600080fd5b506104b06121e7565b348015610c0d57600080fd5b506104b0610c1c3660046142da565b612246565b348015610c2d57600080fd5b50600254610478906001600160a01b031681565b348015610c4d57600080fd5b506104b0610c5c3660046144f1565b6122c1565b348015610c6d57600080fd5b50610543601d5481565b348015610c8357600080fd5b5061054360145481565b348015610c9957600080fd5b506104b0610ca83660046142da565b6128de565b348015610cb957600080fd5b506104b06129c8565b348015610cce57600080fd5b5061054360255481565b6000546001600160a01b03163314610d0b5760405162461bcd60e51b8152600401610d02906145bc565b60405180910390fd5b620186a0610d2668327cb2734119d3b7a9601e1b6001614607565b610d309190614626565b811015610d9d5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610d02565b6103e8610db768327cb2734119d3b7a9601e1b6005614607565b610dc19190614626565b811115610e2d5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610d02565b602755565b6000610e3f338484612a34565b5060015b92915050565b6000546001600160a01b03163314610e735760405162461bcd60e51b8152600401610d02906145bc565b670de0b6b3a76400006103e8610e9668327cb2734119d3b7a9601e1b6002614607565b610ea09190614626565b610eaa9190614626565b811015610f115760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e322560881b6064820152608401610d02565b610f2381670de0b6b3a7640000614607565b60235550565b6000546001600160a01b03163314610f535760405162461bcd60e51b8152600401610d02906145bc565b60198110158015610f6657506101f48111155b610fb25760405162461bcd60e51b815260206004820181905260248201527f4d75737420736574206265747765656e20302e323520616e64203530204554486044820152606401610d02565b610fc381662386f26fc10000614607565b601c556040518181527f0320a651094de4f5fc35c0f1c336811904e8f465b6599a93eb0dec4919b8fec5906020015b60405180910390a150565b6000546001600160a01b031633146110275760405162461bcd60e51b8152600401610d02906145bc565b6017839055601882905560198190556107d0816110448486614648565b61104e9190614648565b111561109c5760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b6565702073656c6c2074617865732062656c6f772032302500006044820152606401610d02565b60408051828152602081018490529081018490527f5ff33e060dbf96ff8c11eeadaaa320b34884dc8af8156d77ab6134d2bece22c3906060015b60405180910390a1505050565b60006110f0848484612b58565b6001600160a01b0384166000908152600660209081526040808320338452909152902054828110156111755760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610d02565b6111828533858403612a34565b506001949350505050565b6000546001600160a01b031633146111b75760405162461bcd60e51b8152600401610d02906145bc565b6014839055601582905560168190556105dc816111d48486614648565b6111de9190614648565b111561122c5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206275792074617865732062656c6f77203135250000006044820152606401610d02565b60408051828152602081018490529081018490527f4b44023290188702187818a2359a9d40279e516e5e9bbade40c321936a773620906060016110d6565b6000600c548211156112d15760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610d02565b60006112db6135df565b90506112e78184614626565b9392505050565b6000546001600160a01b031633146113185760405162461bcd60e51b8152600401610d02906145bc565b6001600160a01b0381166000908152600a602052604090205460ff166113805760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610d02565b60005b600b548110156114a157816001600160a01b0316600b82815481106113aa576113aa614660565b6000918252602090912001546001600160a01b0316141561148f57600b80546113d590600190614676565b815481106113e5576113e5614660565b600091825260209091200154600b80546001600160a01b03909216918390811061141157611411614660565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600a90925220805460ff19169055600b8054806114695761146961468d565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80611499816146a3565b915050611383565b5050565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610e3f9185906114dc908690614648565b612a34565b6000546001600160a01b0316331461150b5760405162461bcd60e51b8152600401610d02906145bc565b6001600160a01b038116600081815260096020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b629101610ff2565b600068327cb2734119d3b7a9601e1b8311156115bd5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610d02565b816115dc5760006115cd846135fb565b50939550610e43945050505050565b60006115e7846135fb565b50929550610e43945050505050565b6000546001600160a01b031633146116205760405162461bcd60e51b8152600401610d02906145bc565b6001600160a01b0381166116855760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610d02565b600280546001600160a01b039081166000908152600960209081526040808320805460ff1990811690915585546001600160a01b031916948716948517909555838352918290208054909416600117909355519081527f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d29829101610ff2565b6000546001600160a01b0316331461172d5760405162461bcd60e51b8152600401610d02906145bc565b600061173830611a78565b905060275481101561179f5760405162461bcd60e51b815260206004820152602a60248201527f43616e206f6e6c792073776170206261636b2069662061626f766520746865206044820152693a343932b9b437b6321760b11b6064820152608401610d02565b6117a761364a565b6040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb3290602001610ff2565b6000546001600160a01b031633146118015760405162461bcd60e51b8152600401610d02906145bc565b6001600160a01b0381166000908152600a602052604090205460ff161561186a5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610d02565b600b5460329061187b906001614648565b11156119055760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610d02565b6001600160a01b0381166000908152600460205260409020541561195f576001600160a01b0381166000908152600460205260409020546119459061126a565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6000546001600160a01b031633146119ef5760405162461bcd60e51b8152600401610d02906145bc565b6001600160a01b0381166000908152601f602052604090205460ff16611a575760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610d02565b6001600160a01b03166000908152601f60205260409020805460ff19169055565b6001600160a01b0381166000908152600a602052604081205460ff1615611ab557506001600160a01b031660009081526005602052604090205490565b6001600160a01b038216600090815260046020526040902054610e439061126a565b604080516002808252606082018352600092839291906020830190803683375050602854604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611b45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6991906146be565b81600081518110611b7c57611b7c614660565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611bb057611bb0614660565b6001600160a01b0392909216602092830291909101820152604080516002808252606082018352600093919290918301908036833701905050602854601c5460405163d06ca61f60e01b81529293506001600160a01b039091169163d06ca61f91611c1f91869060040161471f565b600060405180830381865afa158015611c3c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c649190810190614740565b9050612710601954601854601754611c7c9190614648565b611c869190614648565b82600181518110611c9957611c99614660565b6020026020010151611cab9190614607565b611cb59190614626565b81600181518110611cc857611cc8614660565b6020026020010151611cda9190614648565b9250505090565b6000546001600160a01b03163314611d0b5760405162461bcd60e51b8152600401610d02906145bc565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611d7f5760405162461bcd60e51b8152600401610d02906145bc565b6008805461ffff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6000546001600160a01b03163314611ddf5760405162461bcd60e51b8152600401610d02906145bc565b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314611e355760405162461bcd60e51b8152600401610d02906145bc565b6001600160a01b038316611e8b5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610d02565b6001600160a01b038316301415611ee45760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610d02565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f4f91906147d1565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611fa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc691906147ea565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6000546001600160a01b0316331461203c5760405162461bcd60e51b8152600401610d02906145bc565b6029546001600160a01b03838116911614156120c05760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610d02565b6114a1828261381a565b3360009081526006602090815260408083206001600160a01b03861684529091528120548281101561214c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d02565b6121593385858403612a34565b5060019392505050565b6000610e3f338484612b58565b6000546001600160a01b0316331461219a5760405162461bcd60e51b8152600401610d02906145bc565b60298054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610ff290831515815260200190565b6000546001600160a01b031633146122115760405162461bcd60e51b8152600401610d02906145bc565b6008805460ff191690556040517fa29c2b578a5a679452d146ddd35ea04a2e7c57fe555cc7a3d91b3b8b06e6103d90600090a1565b6000546001600160a01b031633146122705760405162461bcd60e51b8152600401610d02906145bc565b6001600160a01b038116600081815260096020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e9101610ff2565b6000546001600160a01b031633146122eb5760405162461bcd60e51b8152600401610d02906145bc565b602954600160b01b900460ff16156123595760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610d02565b600a81106123b95760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610d02565b6123c1613875565b81518351146124125760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610d02565b60c88351106124825760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610d02565b60005b835181101561253b5760008482815181106124a2576124a2614660565b6020908102919091018101516001600160a01b0381166000908152601a9092526040909120805460ff1916600117905590506124e14262015180614648565b6001600160a01b0382166000908152601b6020526040812091909155845185908490811061251157612511614660565b60200260200101519050612526338383612b58565b50508080612533906146a3565b915050612485565b5061271061255668327cb2734119d3b7a9601e1b6019614607565b6125609190614626565b6023556029805461ffff60a81b191661010160a81b17905543601d819055612589908290614648565b601e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1602880546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051829163c45a01559160048083019260209291908290030181865afa15801561261a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263e91906146be565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561268b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126af91906146be565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156126fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061272091906146be565b602980546001600160a01b0319166001600160a01b0392909216918217905561274a906001611db5565b602954612761906001600160a01b0316600161381a565b600047116127bd5760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610d02565b60006127c830611a78565b116128245760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610d02565b60285461283f9030906001600160a01b03166114dc82611a78565b6028546001600160a01b031663f305d719473061285b81611a78565b60008033426040518863ffffffff1660e01b815260040161288196959493929190614807565b60606040518083038185885af115801561289f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128c49190614842565b5050506128d8600f54600e55601254601155565b50505050565b6000546001600160a01b031633146129085760405162461bcd60e51b8152600401610d02906145bc565b6001600160a01b03811661296d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d02565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146129f25760405162461bcd60e51b8152600401610d02906145bc565b604051600090339047908381818185875af1925050503d80600081146128d8576040519150601f19603f3d011682016040523d82523d6000602084013e6128d8565b6001600160a01b038316612a965760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d02565b6001600160a01b038216612af75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d02565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612bbc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610d02565b6001600160a01b038216612c1e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610d02565b60008111612c805760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610d02565b602954600160b01b900460ff16612d1c576001600160a01b03831660009081526009602052604090205460ff1680612cd057506001600160a01b03821660009081526009602052604090205460ff165b612d1c5760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610d02565b6001600160a01b0383166000908152601a602052604090205460ff1615612f03576001600160a01b03821660009081526026602052604090205460ff1615612e57576001600160a01b0383166000908152601b6020526040902054421015612db85760405162461bcd60e51b815260206004820152600f60248201526e10d85b9b9bdd081cd95b1b081e595d608a1b6044820152606401610d02565b612dc0611ad7565b811115612e2c5760405162461bcd60e51b815260206004820152603460248201527f417474656d7074696e6720746f2073656c6c206f766572206d61782073656c6c6044820152731030b6b7bab73a17101021b432b1b59036b0bc1760611b6064820152608401610d02565b612e394262015180614648565b6001600160a01b0384166000908152601b6020526040902055612f03565b6001600160a01b03821660009081526009602052604090205460ff16612f035760405162461bcd60e51b815260206004820152605560248201527f507269766174652073616c652063616e6e6f74207472616e7366657220616e6460448201527f206d7573742073656c6c206f6e6c79206f72207472616e7366657220746f2061606482015274103bb434ba32b634b9ba32b21030b2323932b9b99760591b608482015260a401610d02565b601e544310612fd7576001600160a01b0383166000908152601f602052604090205460ff161580612f4157506000546001600160a01b038381169116145b80612f5657506001600160a01b03821661dead145b612fd75760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610d02565b600854610100900460ff16156132e5576000546001600160a01b0384811691161480159061301357506000546001600160a01b03838116911614155b801561302757506001600160a01b03821615155b801561303e57506001600160a01b03821661dead14155b80156130545750602954600160a01b900460ff16155b156132e55760085460ff1615613173576028546001600160a01b0383811691161480159061309057506029546001600160a01b03838116911614155b156131735732600090815260076020526040902054431180156130ca57506001600160a01b03821660009081526007602052604090205443115b61314e5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610d02565b3260009081526007602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526026602052604090205460ff1680156131b457506001600160a01b03821660009081526024602052604090205460ff16155b1561322e576023548111156132295760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610d02565b6132e5565b6001600160a01b03821660009081526026602052604090205460ff16801561326f57506001600160a01b03831660009081526024602052604090205460ff16155b156132e5576023548111156132e55760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610d02565b60006132f030611a78565b60275460295491925082101590600160a01b900460ff1615801561331d5750602954600160a81b900460ff165b801561333e575060295460009061333c906001600160a01b0316611a78565b115b801561336357506001600160a01b03841660009081526009602052604090205460ff16155b801561338857506001600160a01b03851660009081526009602052604090205460ff16155b80156133ac57506001600160a01b03841660009081526026602052604090205460ff165b80156133b55750805b156133c2576133c261364a565b6133ca613875565b60036013556001600160a01b03851660009081526009602052604090205460ff1615801561341157506001600160a01b03841660009081526009602052604090205460ff16155b156135bc57601e544310801561343f57506001600160a01b03851660009081526026602052604090205460ff165b801561346457506001600160a01b03841660009081526026602052604090205460ff16155b15613529576001600160a01b0384166000908152601f602052604090205460ff16613503576001600160a01b0384166000908152601f602090815260408220805460ff1916600190811790915581549092906134c1908490614648565b90915550506040516001600160a01b03851681527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b601454600e556016546015546135199190614648565b6011819055156135295760016013555b6001600160a01b03851660009081526026602052604090205460ff161561357557601454600e556016546015546135609190614648565b6011819055156135705760016013555b6135bc565b6001600160a01b03841660009081526026602052604090205460ff16156135bc57601754600e556019546018546135ac9190614648565b6011819055156135bc5760026013555b6135c78585856138a3565b6135d8600f54600e55601254601155565b5050505050565b60008060006135ec6139a5565b9092509050611cda8183614626565b60008060008060008060008060006136128a613b4e565b92509250925060008060006136308d868661362b6135df565b613b91565b919f909e50909c50959a5093985091965092945050505050565b6029805460ff60a01b1916600160a01b179055600061366830611a78565b9050600060225460215461367c9190614648565b90506000602754601461368f9190614607565b83106136a6576027546136a3906014614607565b92505b8215806136b1575081155b156136be5750505061380b565b6000600283602154866136d19190614607565b6136db9190614626565b6136e59190614626565b905060006136f38286614676565b90506136fe81613be8565b602154479060009061371290600290614626565b61371c9087614676565b6022546137299084614607565b6137339190614626565b905060006137418284614676565b600060218190556022559050841580159061375c5750600081115b156137ad5761376b8582613d42565b60408051858152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6002546040516001600160a01b03909116904790600081818185875af1925050503d80600081146137fa576040519150601f19603f3d011682016040523d82523d6000602084013e6137ff565b606091505b50505050505050505050505b6029805460ff60a01b19169055565b6001600160a01b038216600090815260266020908152604080832080548515801560ff199283168117909355602490945291909320805490911690921790915561386757613867826117d7565b806114a1576114a1826112ee565b600e541580156138855750601154155b1561388c57565b600e8054600f556011805460125560009182905555565b6001600160a01b0383166000908152600a602052604090205460ff1680156138e457506001600160a01b0382166000908152600a602052604090205460ff16155b156138f9576138f4838383613ddc565b505050565b6001600160a01b0383166000908152600a602052604090205460ff1615801561393a57506001600160a01b0382166000908152600a602052604090205460ff165b1561394a576138f4838383613f05565b6001600160a01b0383166000908152600a602052604090205460ff16801561398a57506001600160a01b0382166000908152600a602052604090205460ff165b1561399a576138f4838383613fb1565b6138f4838383614026565b600c54600090819068327cb2734119d3b7a9601e1b825b600b54811015613b0a578260046000600b84815481106139de576139de614660565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613a4957508160056000600b8481548110613a2257613a22614660565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613a68575050600c549368327cb2734119d3b7a9601e1b9350915050565b60046000600b8381548110613a7f57613a7f614660565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613aae9084614676565b925060056000600b8381548110613ac757613ac7614660565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613af69083614676565b915080613b02816146a3565b9150506139bc565b5068327cb2734119d3b7a9601e1b600c54613b259190614626565b821015613b45575050600c549268327cb2734119d3b7a9601e1b92509050565b90939092509050565b600080600080613b5d8561406b565b90506000613b6a86614088565b9050600081613b798489614676565b613b839190614676565b979296509094509092505050565b6000808080613ba08589614607565b90506000613bae8689614607565b90506000613bbc8789614607565b9050600081613bcb8486614676565b613bd59190614676565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613c1d57613c1d614660565b6001600160a01b03928316602091820292909201810191909152602854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613c76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c9a91906146be565b81600181518110613cad57613cad614660565b6001600160a01b039283166020918202929092010152602854613cd39130911684612a34565b60285460405163791ac94760e01b81526001600160a01b039091169063791ac94790613d0c908590600090869030904290600401614870565b600060405180830381600087803b158015613d2657600080fd5b505af1158015613d3a573d6000803e3d6000fd5b505050505050565b602854613d5a9030906001600160a01b031684612a34565b60285460405163f305d71960e01b81526001600160a01b039091169063f305d719908390613d999030908790600090819061dead904290600401614807565b60606040518083038185885af1158015613db7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135d89190614842565b600080600080600080613dee876135fb565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150613e21908890614676565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054613e51908790614676565b6001600160a01b03808b1660009081526004602052604080822093909355908a1681522054613e81908690614648565b6001600160a01b038916600090815260046020526040902055613ea38161409b565b613ead8483614202565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613ef291815260200190565b60405180910390a3505050505050505050565b600080600080600080613f17876135fb565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150613f4a908790614676565b6001600160a01b03808b16600090815260046020908152604080832094909455918b16815260059091522054613f81908490614648565b6001600160a01b038916600090815260056020908152604080832093909355600490522054613e81908690614648565b600080600080600080613fc3876135fb565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150613ff6908890614676565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054613f4a908790614676565b600080600080600080614038876135fb565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150613e51908790614676565b6000612710600e548361407e9190614607565b610e439190614626565b60006127106011548361407e9190614607565b6001601354141561410c576011546015546140b69083614607565b6140c09190614626565b602160008282546140d19190614648565b90915550506011546016546140e69083614607565b6140f09190614626565b602260008282546141019190614648565b909155506141789050565b60026013541415614178576011546018546141279083614607565b6141319190614626565b602160008282546141429190614648565b90915550506011546019546141579083614607565b6141619190614626565b602260008282546141729190614648565b90915550505b60006141826135df565b905060006141908284614607565b306000908152600460205260409020549091506141ae908290614648565b30600090815260046020908152604080832093909355600a9052205460ff16156138f457306000908152600560205260409020546141ed908490614648565b30600090815260056020526040902055505050565b81600c546142109190614676565b600c55600d54614221908290614648565b600d555050565b600060208083528351808285015260005b8181101561425557858101830151858201604001528201614239565b81811115614267576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561428f57600080fd5b5035919050565b6001600160a01b03811681146142ab57600080fd5b50565b600080604083850312156142c157600080fd5b82356142cc81614296565b946020939093013593505050565b6000602082840312156142ec57600080fd5b81356112e781614296565b60008060006060848603121561430c57600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561433857600080fd5b833561434381614296565b9250602084013561435381614296565b929592945050506040919091013590565b80151581146142ab57600080fd5b6000806040838503121561438557600080fd5b82359150602083013561439781614364565b809150509250929050565b600080604083850312156143b557600080fd5b82356143c081614296565b9150602083013561439781614364565b600080604083850312156143e357600080fd5b82356143ee81614296565b9150602083013561439781614296565b60006020828403121561441057600080fd5b81356112e781614364565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561445a5761445a61441b565b604052919050565b600067ffffffffffffffff82111561447c5761447c61441b565b5060051b60200190565b600082601f83011261449757600080fd5b813560206144ac6144a783614462565b614431565b82815260059290921b840181019181810190868411156144cb57600080fd5b8286015b848110156144e657803583529183019183016144cf565b509695505050505050565b60008060006060848603121561450657600080fd5b833567ffffffffffffffff8082111561451e57600080fd5b818601915086601f83011261453257600080fd5b813560206145426144a783614462565b82815260059290921b8401810191818101908a84111561456157600080fd5b948201945b8386101561458857853561457981614296565b82529482019490820190614566565b9750508701359250508082111561459e57600080fd5b506145ab86828701614486565b925050604084013590509250925092565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615614621576146216145f1565b500290565b60008261464357634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561465b5761465b6145f1565b500190565b634e487b7160e01b600052603260045260246000fd5b600082821015614688576146886145f1565b500390565b634e487b7160e01b600052603160045260246000fd5b60006000198214156146b7576146b76145f1565b5060010190565b6000602082840312156146d057600080fd5b81516112e781614296565b600081518084526020808501945080840160005b838110156147145781516001600160a01b0316875295820195908201906001016146ef565b509495945050505050565b82815260406020820152600061473860408301846146db565b949350505050565b6000602080838503121561475357600080fd5b825167ffffffffffffffff81111561476a57600080fd5b8301601f8101851361477b57600080fd5b80516147896144a782614462565b81815260059190911b820183019083810190878311156147a857600080fd5b928401925b828410156147c6578351825292840192908401906147ad565b979650505050505050565b6000602082840312156147e357600080fd5b5051919050565b6000602082840312156147fc57600080fd5b81516112e781614364565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561485757600080fd5b8351925060208401519150604084015190509250925092565b85815284602082015260a06040820152600061488f60a08301866146db565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220f8eea1d35ce83c153728b2a366c85fa14cc95da626a94a0679fb77b261a1a71d64736f6c634300080b00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

Deployed Bytecode

0x6080604052600436106104095760003560e01c806370a0823111610213578063afd6ce6111610123578063e884f260116100ab578063ee40166e1161007a578063ee40166e14610c61578063efcc52de14610c77578063f2fde38b14610c8d578063f5648a4f14610cad578063f8b45b0514610cc257600080fd5b8063e884f26014610bec578063ea2f0b3714610c01578063ea4cfe1214610c21578063ead010ae14610c4157600080fd5b8063c876d0b9116100f2578063c876d0b914610b4a578063c8c8ebe414610b64578063dc44b6a014610b7a578063dd62ed3e14610b90578063e82a416d14610bd657600080fd5b8063afd6ce6114610aa9578063b62496f514610ad9578063bbc0c74214610b09578063c49b9a8014610b2a57600080fd5b806388f82020116101a6578063a073d37f11610175578063a073d37f14610a28578063a457c2d714610a3d578063a62068ce14610a5d578063a9059cbb14610a73578063acee28d114610a9357600080fd5b806388f82020146109845780638da5cb5b146109bd57806395d89b41146109db5780639a7a23d614610a0857600080fd5b80637571336a116101e25780637571336a146108fe5780638366e79a1461091e57806385ecfd281461093e57806388790a681461096e57600080fd5b806370a082311461089f578063713d0974146108bf578063715018a6146108d4578063751039fc146108e957600080fd5b806339509351116103195780634a74bb02116102a1578063557ed1ba11610270578063557ed1ba1461081257806358a6d531146108255780635bb988c91461083c5780635c3352d31461085c5780636b0a894c1461088957600080fd5b80634a74bb021461078357806351f205e4146107a457806352390c02146107b95780635342acb4146107d957600080fd5b8063437823ec116102e8578063437823ec146106e4578063452ed4f1146107045780634549b03914610724578063499b8394146107445780634a62bb651461076457600080fd5b806339509351146106785780633ad10ef6146106985780634047ea3e146106b8578063416381ea146106ce57600080fd5b806318e1c1231161039c57806323b872dd1161036b57806323b872dd146105dc57806325519cf2146105fc5780632d8381191461061c578063313ce5671461063c5780633685d4191461065857600080fd5b806318e1c123146105705780631c68372d146105905780631d865c30146105a6578063200a692d146105c657600080fd5b8063106b5da1116103d8578063106b5da1146104e257806310d5de531461050257806313114a9d1461053257806318160ddd1461055157600080fd5b806306fdde03146104155780630758d924146104585780630804375114610490578063095ea7b3146104b257600080fd5b3661041057005b600080fd5b34801561042157600080fd5b50604080518082019091526008815267426f626174616d6160c01b60208201525b60405161044f9190614228565b60405180910390f35b34801561046457600080fd5b50602854610478906001600160a01b031681565b6040516001600160a01b03909116815260200161044f565b34801561049c57600080fd5b506104b06104ab36600461427d565b610cd8565b005b3480156104be57600080fd5b506104d26104cd3660046142ae565b610e32565b604051901515815260200161044f565b3480156104ee57600080fd5b506104b06104fd36600461427d565b610e49565b34801561050e57600080fd5b506104d261051d3660046142da565b60246020526000908152604090205460ff1681565b34801561053e57600080fd5b50600d545b60405190815260200161044f565b34801561055d57600080fd5b5068327cb2734119d3b7a9601e1b610543565b34801561057c57600080fd5b506104b061058b36600461427d565b610f29565b34801561059c57600080fd5b5061054360195481565b3480156105b257600080fd5b506104b06105c13660046142f7565b610ffd565b3480156105d257600080fd5b5061054360175481565b3480156105e857600080fd5b506104d26105f7366004614323565b6110e3565b34801561060857600080fd5b506104b06106173660046142f7565b61118d565b34801561062857600080fd5b5061054361063736600461427d565b61126a565b34801561064857600080fd5b506040516012815260200161044f565b34801561066457600080fd5b506104b06106733660046142da565b6112ee565b34801561068457600080fd5b506104d26106933660046142ae565b6114a5565b3480156106a457600080fd5b50600354610478906001600160a01b031681565b3480156106c457600080fd5b5061054360215481565b3480156106da57600080fd5b5061054360225481565b3480156106f057600080fd5b506104b06106ff3660046142da565b6114e1565b34801561071057600080fd5b50602954610478906001600160a01b031681565b34801561073057600080fd5b5061054361073f366004614372565b61155f565b34801561075057600080fd5b506104b061075f3660046142da565b6115f6565b34801561077057600080fd5b506008546104d290610100900460ff1681565b34801561078f57600080fd5b506029546104d290600160a81b900460ff1681565b3480156107b057600080fd5b506104b0611703565b3480156107c557600080fd5b506104b06107d43660046142da565b6117d7565b3480156107e557600080fd5b506104d26107f43660046142da565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561081e57600080fd5b5042610543565b34801561083157600080fd5b50601e5443106104d2565b34801561084857600080fd5b506104b06108573660046142da565b6119c5565b34801561086857600080fd5b506105436108773660046142da565b601b6020526000908152604090205481565b34801561089557600080fd5b5061054360205481565b3480156108ab57600080fd5b506105436108ba3660046142da565b611a78565b3480156108cb57600080fd5b50610543611ad7565b3480156108e057600080fd5b506104b0611ce1565b3480156108f557600080fd5b506104b0611d55565b34801561090a57600080fd5b506104b06109193660046143a2565b611db5565b34801561092a57600080fd5b506104d26109393660046143d0565b611e0a565b34801561094a57600080fd5b506104d26109593660046142da565b601f6020526000908152604090205460ff1681565b34801561097a57600080fd5b5061054360185481565b34801561099057600080fd5b506104d261099f3660046142da565b6001600160a01b03166000908152600a602052604090205460ff1690565b3480156109c957600080fd5b506000546001600160a01b0316610478565b3480156109e757600080fd5b50604080518082019091526004815263424f424160e01b6020820152610442565b348015610a1457600080fd5b506104b0610a233660046143a2565b612012565b348015610a3457600080fd5b50602754610543565b348015610a4957600080fd5b506104d2610a583660046142ae565b6120ca565b348015610a6957600080fd5b50610543601e5481565b348015610a7f57600080fd5b506104d2610a8e3660046142ae565b612163565b348015610a9f57600080fd5b50610543601c5481565b348015610ab557600080fd5b506104d2610ac43660046142da565b601a6020526000908152604090205460ff1681565b348015610ae557600080fd5b506104d2610af43660046142da565b60266020526000908152604090205460ff1681565b348015610b1557600080fd5b506029546104d290600160b01b900460ff1681565b348015610b3657600080fd5b506104b0610b453660046143fe565b612170565b348015610b5657600080fd5b506008546104d29060ff1681565b348015610b7057600080fd5b5061054360235481565b348015610b8657600080fd5b5061054360155481565b348015610b9c57600080fd5b50610543610bab3660046143d0565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b348015610be257600080fd5b5061054360165481565b348015610bf857600080fd5b506104b06121e7565b348015610c0d57600080fd5b506104b0610c1c3660046142da565b612246565b348015610c2d57600080fd5b50600254610478906001600160a01b031681565b348015610c4d57600080fd5b506104b0610c5c3660046144f1565b6122c1565b348015610c6d57600080fd5b50610543601d5481565b348015610c8357600080fd5b5061054360145481565b348015610c9957600080fd5b506104b0610ca83660046142da565b6128de565b348015610cb957600080fd5b506104b06129c8565b348015610cce57600080fd5b5061054360255481565b6000546001600160a01b03163314610d0b5760405162461bcd60e51b8152600401610d02906145bc565b60405180910390fd5b620186a0610d2668327cb2734119d3b7a9601e1b6001614607565b610d309190614626565b811015610d9d5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610d02565b6103e8610db768327cb2734119d3b7a9601e1b6005614607565b610dc19190614626565b811115610e2d5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610d02565b602755565b6000610e3f338484612a34565b5060015b92915050565b6000546001600160a01b03163314610e735760405162461bcd60e51b8152600401610d02906145bc565b670de0b6b3a76400006103e8610e9668327cb2734119d3b7a9601e1b6002614607565b610ea09190614626565b610eaa9190614626565b811015610f115760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e322560881b6064820152608401610d02565b610f2381670de0b6b3a7640000614607565b60235550565b6000546001600160a01b03163314610f535760405162461bcd60e51b8152600401610d02906145bc565b60198110158015610f6657506101f48111155b610fb25760405162461bcd60e51b815260206004820181905260248201527f4d75737420736574206265747765656e20302e323520616e64203530204554486044820152606401610d02565b610fc381662386f26fc10000614607565b601c556040518181527f0320a651094de4f5fc35c0f1c336811904e8f465b6599a93eb0dec4919b8fec5906020015b60405180910390a150565b6000546001600160a01b031633146110275760405162461bcd60e51b8152600401610d02906145bc565b6017839055601882905560198190556107d0816110448486614648565b61104e9190614648565b111561109c5760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b6565702073656c6c2074617865732062656c6f772032302500006044820152606401610d02565b60408051828152602081018490529081018490527f5ff33e060dbf96ff8c11eeadaaa320b34884dc8af8156d77ab6134d2bece22c3906060015b60405180910390a1505050565b60006110f0848484612b58565b6001600160a01b0384166000908152600660209081526040808320338452909152902054828110156111755760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610d02565b6111828533858403612a34565b506001949350505050565b6000546001600160a01b031633146111b75760405162461bcd60e51b8152600401610d02906145bc565b6014839055601582905560168190556105dc816111d48486614648565b6111de9190614648565b111561122c5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206275792074617865732062656c6f77203135250000006044820152606401610d02565b60408051828152602081018490529081018490527f4b44023290188702187818a2359a9d40279e516e5e9bbade40c321936a773620906060016110d6565b6000600c548211156112d15760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610d02565b60006112db6135df565b90506112e78184614626565b9392505050565b6000546001600160a01b031633146113185760405162461bcd60e51b8152600401610d02906145bc565b6001600160a01b0381166000908152600a602052604090205460ff166113805760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610d02565b60005b600b548110156114a157816001600160a01b0316600b82815481106113aa576113aa614660565b6000918252602090912001546001600160a01b0316141561148f57600b80546113d590600190614676565b815481106113e5576113e5614660565b600091825260209091200154600b80546001600160a01b03909216918390811061141157611411614660565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600a90925220805460ff19169055600b8054806114695761146961468d565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80611499816146a3565b915050611383565b5050565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610e3f9185906114dc908690614648565b612a34565b6000546001600160a01b0316331461150b5760405162461bcd60e51b8152600401610d02906145bc565b6001600160a01b038116600081815260096020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b629101610ff2565b600068327cb2734119d3b7a9601e1b8311156115bd5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610d02565b816115dc5760006115cd846135fb565b50939550610e43945050505050565b60006115e7846135fb565b50929550610e43945050505050565b6000546001600160a01b031633146116205760405162461bcd60e51b8152600401610d02906145bc565b6001600160a01b0381166116855760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610d02565b600280546001600160a01b039081166000908152600960209081526040808320805460ff1990811690915585546001600160a01b031916948716948517909555838352918290208054909416600117909355519081527f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d29829101610ff2565b6000546001600160a01b0316331461172d5760405162461bcd60e51b8152600401610d02906145bc565b600061173830611a78565b905060275481101561179f5760405162461bcd60e51b815260206004820152602a60248201527f43616e206f6e6c792073776170206261636b2069662061626f766520746865206044820152693a343932b9b437b6321760b11b6064820152608401610d02565b6117a761364a565b6040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb3290602001610ff2565b6000546001600160a01b031633146118015760405162461bcd60e51b8152600401610d02906145bc565b6001600160a01b0381166000908152600a602052604090205460ff161561186a5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610d02565b600b5460329061187b906001614648565b11156119055760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610d02565b6001600160a01b0381166000908152600460205260409020541561195f576001600160a01b0381166000908152600460205260409020546119459061126a565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6000546001600160a01b031633146119ef5760405162461bcd60e51b8152600401610d02906145bc565b6001600160a01b0381166000908152601f602052604090205460ff16611a575760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610d02565b6001600160a01b03166000908152601f60205260409020805460ff19169055565b6001600160a01b0381166000908152600a602052604081205460ff1615611ab557506001600160a01b031660009081526005602052604090205490565b6001600160a01b038216600090815260046020526040902054610e439061126a565b604080516002808252606082018352600092839291906020830190803683375050602854604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611b45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6991906146be565b81600081518110611b7c57611b7c614660565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611bb057611bb0614660565b6001600160a01b0392909216602092830291909101820152604080516002808252606082018352600093919290918301908036833701905050602854601c5460405163d06ca61f60e01b81529293506001600160a01b039091169163d06ca61f91611c1f91869060040161471f565b600060405180830381865afa158015611c3c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c649190810190614740565b9050612710601954601854601754611c7c9190614648565b611c869190614648565b82600181518110611c9957611c99614660565b6020026020010151611cab9190614607565b611cb59190614626565b81600181518110611cc857611cc8614660565b6020026020010151611cda9190614648565b9250505090565b6000546001600160a01b03163314611d0b5760405162461bcd60e51b8152600401610d02906145bc565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611d7f5760405162461bcd60e51b8152600401610d02906145bc565b6008805461ffff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6000546001600160a01b03163314611ddf5760405162461bcd60e51b8152600401610d02906145bc565b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314611e355760405162461bcd60e51b8152600401610d02906145bc565b6001600160a01b038316611e8b5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610d02565b6001600160a01b038316301415611ee45760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610d02565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f4f91906147d1565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611fa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc691906147ea565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6000546001600160a01b0316331461203c5760405162461bcd60e51b8152600401610d02906145bc565b6029546001600160a01b03838116911614156120c05760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610d02565b6114a1828261381a565b3360009081526006602090815260408083206001600160a01b03861684529091528120548281101561214c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d02565b6121593385858403612a34565b5060019392505050565b6000610e3f338484612b58565b6000546001600160a01b0316331461219a5760405162461bcd60e51b8152600401610d02906145bc565b60298054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610ff290831515815260200190565b6000546001600160a01b031633146122115760405162461bcd60e51b8152600401610d02906145bc565b6008805460ff191690556040517fa29c2b578a5a679452d146ddd35ea04a2e7c57fe555cc7a3d91b3b8b06e6103d90600090a1565b6000546001600160a01b031633146122705760405162461bcd60e51b8152600401610d02906145bc565b6001600160a01b038116600081815260096020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e9101610ff2565b6000546001600160a01b031633146122eb5760405162461bcd60e51b8152600401610d02906145bc565b602954600160b01b900460ff16156123595760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610d02565b600a81106123b95760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610d02565b6123c1613875565b81518351146124125760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610d02565b60c88351106124825760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610d02565b60005b835181101561253b5760008482815181106124a2576124a2614660565b6020908102919091018101516001600160a01b0381166000908152601a9092526040909120805460ff1916600117905590506124e14262015180614648565b6001600160a01b0382166000908152601b6020526040812091909155845185908490811061251157612511614660565b60200260200101519050612526338383612b58565b50508080612533906146a3565b915050612485565b5061271061255668327cb2734119d3b7a9601e1b6019614607565b6125609190614626565b6023556029805461ffff60a81b191661010160a81b17905543601d819055612589908290614648565b601e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1602880546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051829163c45a01559160048083019260209291908290030181865afa15801561261a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263e91906146be565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561268b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126af91906146be565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156126fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061272091906146be565b602980546001600160a01b0319166001600160a01b0392909216918217905561274a906001611db5565b602954612761906001600160a01b0316600161381a565b600047116127bd5760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610d02565b60006127c830611a78565b116128245760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610d02565b60285461283f9030906001600160a01b03166114dc82611a78565b6028546001600160a01b031663f305d719473061285b81611a78565b60008033426040518863ffffffff1660e01b815260040161288196959493929190614807565b60606040518083038185885af115801561289f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128c49190614842565b5050506128d8600f54600e55601254601155565b50505050565b6000546001600160a01b031633146129085760405162461bcd60e51b8152600401610d02906145bc565b6001600160a01b03811661296d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d02565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146129f25760405162461bcd60e51b8152600401610d02906145bc565b604051600090339047908381818185875af1925050503d80600081146128d8576040519150601f19603f3d011682016040523d82523d6000602084013e6128d8565b6001600160a01b038316612a965760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d02565b6001600160a01b038216612af75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d02565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612bbc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610d02565b6001600160a01b038216612c1e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610d02565b60008111612c805760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610d02565b602954600160b01b900460ff16612d1c576001600160a01b03831660009081526009602052604090205460ff1680612cd057506001600160a01b03821660009081526009602052604090205460ff165b612d1c5760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610d02565b6001600160a01b0383166000908152601a602052604090205460ff1615612f03576001600160a01b03821660009081526026602052604090205460ff1615612e57576001600160a01b0383166000908152601b6020526040902054421015612db85760405162461bcd60e51b815260206004820152600f60248201526e10d85b9b9bdd081cd95b1b081e595d608a1b6044820152606401610d02565b612dc0611ad7565b811115612e2c5760405162461bcd60e51b815260206004820152603460248201527f417474656d7074696e6720746f2073656c6c206f766572206d61782073656c6c6044820152731030b6b7bab73a17101021b432b1b59036b0bc1760611b6064820152608401610d02565b612e394262015180614648565b6001600160a01b0384166000908152601b6020526040902055612f03565b6001600160a01b03821660009081526009602052604090205460ff16612f035760405162461bcd60e51b815260206004820152605560248201527f507269766174652073616c652063616e6e6f74207472616e7366657220616e6460448201527f206d7573742073656c6c206f6e6c79206f72207472616e7366657220746f2061606482015274103bb434ba32b634b9ba32b21030b2323932b9b99760591b608482015260a401610d02565b601e544310612fd7576001600160a01b0383166000908152601f602052604090205460ff161580612f4157506000546001600160a01b038381169116145b80612f5657506001600160a01b03821661dead145b612fd75760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610d02565b600854610100900460ff16156132e5576000546001600160a01b0384811691161480159061301357506000546001600160a01b03838116911614155b801561302757506001600160a01b03821615155b801561303e57506001600160a01b03821661dead14155b80156130545750602954600160a01b900460ff16155b156132e55760085460ff1615613173576028546001600160a01b0383811691161480159061309057506029546001600160a01b03838116911614155b156131735732600090815260076020526040902054431180156130ca57506001600160a01b03821660009081526007602052604090205443115b61314e5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610d02565b3260009081526007602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526026602052604090205460ff1680156131b457506001600160a01b03821660009081526024602052604090205460ff16155b1561322e576023548111156132295760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610d02565b6132e5565b6001600160a01b03821660009081526026602052604090205460ff16801561326f57506001600160a01b03831660009081526024602052604090205460ff16155b156132e5576023548111156132e55760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610d02565b60006132f030611a78565b60275460295491925082101590600160a01b900460ff1615801561331d5750602954600160a81b900460ff165b801561333e575060295460009061333c906001600160a01b0316611a78565b115b801561336357506001600160a01b03841660009081526009602052604090205460ff16155b801561338857506001600160a01b03851660009081526009602052604090205460ff16155b80156133ac57506001600160a01b03841660009081526026602052604090205460ff165b80156133b55750805b156133c2576133c261364a565b6133ca613875565b60036013556001600160a01b03851660009081526009602052604090205460ff1615801561341157506001600160a01b03841660009081526009602052604090205460ff16155b156135bc57601e544310801561343f57506001600160a01b03851660009081526026602052604090205460ff165b801561346457506001600160a01b03841660009081526026602052604090205460ff16155b15613529576001600160a01b0384166000908152601f602052604090205460ff16613503576001600160a01b0384166000908152601f602090815260408220805460ff1916600190811790915581549092906134c1908490614648565b90915550506040516001600160a01b03851681527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b601454600e556016546015546135199190614648565b6011819055156135295760016013555b6001600160a01b03851660009081526026602052604090205460ff161561357557601454600e556016546015546135609190614648565b6011819055156135705760016013555b6135bc565b6001600160a01b03841660009081526026602052604090205460ff16156135bc57601754600e556019546018546135ac9190614648565b6011819055156135bc5760026013555b6135c78585856138a3565b6135d8600f54600e55601254601155565b5050505050565b60008060006135ec6139a5565b9092509050611cda8183614626565b60008060008060008060008060006136128a613b4e565b92509250925060008060006136308d868661362b6135df565b613b91565b919f909e50909c50959a5093985091965092945050505050565b6029805460ff60a01b1916600160a01b179055600061366830611a78565b9050600060225460215461367c9190614648565b90506000602754601461368f9190614607565b83106136a6576027546136a3906014614607565b92505b8215806136b1575081155b156136be5750505061380b565b6000600283602154866136d19190614607565b6136db9190614626565b6136e59190614626565b905060006136f38286614676565b90506136fe81613be8565b602154479060009061371290600290614626565b61371c9087614676565b6022546137299084614607565b6137339190614626565b905060006137418284614676565b600060218190556022559050841580159061375c5750600081115b156137ad5761376b8582613d42565b60408051858152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6002546040516001600160a01b03909116904790600081818185875af1925050503d80600081146137fa576040519150601f19603f3d011682016040523d82523d6000602084013e6137ff565b606091505b50505050505050505050505b6029805460ff60a01b19169055565b6001600160a01b038216600090815260266020908152604080832080548515801560ff199283168117909355602490945291909320805490911690921790915561386757613867826117d7565b806114a1576114a1826112ee565b600e541580156138855750601154155b1561388c57565b600e8054600f556011805460125560009182905555565b6001600160a01b0383166000908152600a602052604090205460ff1680156138e457506001600160a01b0382166000908152600a602052604090205460ff16155b156138f9576138f4838383613ddc565b505050565b6001600160a01b0383166000908152600a602052604090205460ff1615801561393a57506001600160a01b0382166000908152600a602052604090205460ff165b1561394a576138f4838383613f05565b6001600160a01b0383166000908152600a602052604090205460ff16801561398a57506001600160a01b0382166000908152600a602052604090205460ff165b1561399a576138f4838383613fb1565b6138f4838383614026565b600c54600090819068327cb2734119d3b7a9601e1b825b600b54811015613b0a578260046000600b84815481106139de576139de614660565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613a4957508160056000600b8481548110613a2257613a22614660565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613a68575050600c549368327cb2734119d3b7a9601e1b9350915050565b60046000600b8381548110613a7f57613a7f614660565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613aae9084614676565b925060056000600b8381548110613ac757613ac7614660565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613af69083614676565b915080613b02816146a3565b9150506139bc565b5068327cb2734119d3b7a9601e1b600c54613b259190614626565b821015613b45575050600c549268327cb2734119d3b7a9601e1b92509050565b90939092509050565b600080600080613b5d8561406b565b90506000613b6a86614088565b9050600081613b798489614676565b613b839190614676565b979296509094509092505050565b6000808080613ba08589614607565b90506000613bae8689614607565b90506000613bbc8789614607565b9050600081613bcb8486614676565b613bd59190614676565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613c1d57613c1d614660565b6001600160a01b03928316602091820292909201810191909152602854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613c76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c9a91906146be565b81600181518110613cad57613cad614660565b6001600160a01b039283166020918202929092010152602854613cd39130911684612a34565b60285460405163791ac94760e01b81526001600160a01b039091169063791ac94790613d0c908590600090869030904290600401614870565b600060405180830381600087803b158015613d2657600080fd5b505af1158015613d3a573d6000803e3d6000fd5b505050505050565b602854613d5a9030906001600160a01b031684612a34565b60285460405163f305d71960e01b81526001600160a01b039091169063f305d719908390613d999030908790600090819061dead904290600401614807565b60606040518083038185885af1158015613db7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135d89190614842565b600080600080600080613dee876135fb565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150613e21908890614676565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054613e51908790614676565b6001600160a01b03808b1660009081526004602052604080822093909355908a1681522054613e81908690614648565b6001600160a01b038916600090815260046020526040902055613ea38161409b565b613ead8483614202565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613ef291815260200190565b60405180910390a3505050505050505050565b600080600080600080613f17876135fb565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150613f4a908790614676565b6001600160a01b03808b16600090815260046020908152604080832094909455918b16815260059091522054613f81908490614648565b6001600160a01b038916600090815260056020908152604080832093909355600490522054613e81908690614648565b600080600080600080613fc3876135fb565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150613ff6908890614676565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054613f4a908790614676565b600080600080600080614038876135fb565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150613e51908790614676565b6000612710600e548361407e9190614607565b610e439190614626565b60006127106011548361407e9190614607565b6001601354141561410c576011546015546140b69083614607565b6140c09190614626565b602160008282546140d19190614648565b90915550506011546016546140e69083614607565b6140f09190614626565b602260008282546141019190614648565b909155506141789050565b60026013541415614178576011546018546141279083614607565b6141319190614626565b602160008282546141429190614648565b90915550506011546019546141579083614607565b6141619190614626565b602260008282546141729190614648565b90915550505b60006141826135df565b905060006141908284614607565b306000908152600460205260409020549091506141ae908290614648565b30600090815260046020908152604080832093909355600a9052205460ff16156138f457306000908152600560205260409020546141ed908490614648565b30600090815260056020526040902055505050565b81600c546142109190614676565b600c55600d54614221908290614648565b600d555050565b600060208083528351808285015260005b8181101561425557858101830151858201604001528201614239565b81811115614267576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561428f57600080fd5b5035919050565b6001600160a01b03811681146142ab57600080fd5b50565b600080604083850312156142c157600080fd5b82356142cc81614296565b946020939093013593505050565b6000602082840312156142ec57600080fd5b81356112e781614296565b60008060006060848603121561430c57600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561433857600080fd5b833561434381614296565b9250602084013561435381614296565b929592945050506040919091013590565b80151581146142ab57600080fd5b6000806040838503121561438557600080fd5b82359150602083013561439781614364565b809150509250929050565b600080604083850312156143b557600080fd5b82356143c081614296565b9150602083013561439781614364565b600080604083850312156143e357600080fd5b82356143ee81614296565b9150602083013561439781614296565b60006020828403121561441057600080fd5b81356112e781614364565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561445a5761445a61441b565b604052919050565b600067ffffffffffffffff82111561447c5761447c61441b565b5060051b60200190565b600082601f83011261449757600080fd5b813560206144ac6144a783614462565b614431565b82815260059290921b840181019181810190868411156144cb57600080fd5b8286015b848110156144e657803583529183019183016144cf565b509695505050505050565b60008060006060848603121561450657600080fd5b833567ffffffffffffffff8082111561451e57600080fd5b818601915086601f83011261453257600080fd5b813560206145426144a783614462565b82815260059290921b8401810191818101908a84111561456157600080fd5b948201945b8386101561458857853561457981614296565b82529482019490820190614566565b9750508701359250508082111561459e57600080fd5b506145ab86828701614486565b925050604084013590509250925092565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615614621576146216145f1565b500290565b60008261464357634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561465b5761465b6145f1565b500190565b634e487b7160e01b600052603260045260246000fd5b600082821015614688576146886145f1565b500390565b634e487b7160e01b600052603160045260246000fd5b60006000198214156146b7576146b76145f1565b5060010190565b6000602082840312156146d057600080fd5b81516112e781614296565b600081518084526020808501945080840160005b838110156147145781516001600160a01b0316875295820195908201906001016146ef565b509495945050505050565b82815260406020820152600061473860408301846146db565b949350505050565b6000602080838503121561475357600080fd5b825167ffffffffffffffff81111561476a57600080fd5b8301601f8101851361477b57600080fd5b80516147896144a782614462565b81815260059190911b820183019083810190878311156147a857600080fd5b928401925b828410156147c6578351825292840192908401906147ad565b979650505050505050565b6000602082840312156147e357600080fd5b5051919050565b6000602082840312156147fc57600080fd5b81516112e781614364565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561485757600080fd5b8351925060208401519150604084015190509250925092565b85815284602082015260a06040820152600061488f60a08301866146db565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220f8eea1d35ce83c153728b2a366c85fa14cc95da626a94a0679fb77b261a1a71d64736f6c634300080b0033

Deployed Bytecode Sourcemap

8380:34098:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14779:85;;;;;;;;;;-1:-1:-1;14851:5:0;;;;;;;;;;;;-1:-1:-1;;;14851:5:0;;;;14779:85;;;;;;;:::i;:::-;;;;;;;;11203:27;;;;;;;;;;-1:-1:-1;11203:27:0;;;;-1:-1:-1;;;;;11203:27:0;;;;;;-1:-1:-1;;;;;798:32:1;;;780:51;;768:2;753:18;11203:27:0;616:221:1;18572:343:0;;;;;;;;;;-1:-1:-1;18572:343:0;;;;;:::i;:::-;;:::i;:::-;;15776:193;;;;;;;;;;-1:-1:-1;15776:193:0;;;;;:::i;:::-;;:::i;:::-;;;1648:14:1;;1641:22;1623:41;;1611:2;1596:18;15776:193:0;1483:187:1;18923:223:0;;;;;;;;;;-1:-1:-1;18923:223:0;;;;;:::i;:::-;;:::i;10831:64::-;;;;;;;;;;-1:-1:-1;10831:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17266:89;;;;;;;;;;-1:-1:-1;17337:10:0;;17266:89;;;2073:25:1;;;2061:2;2046:18;17266:89:0;1927:177:1;15062:97:0;;;;;;;;;;-1:-1:-1;;;;15062:97:0;;18256:245;;;;;;;;;;-1:-1:-1;18256:245:0;;;;;:::i;:::-;;:::i;10263:39::-;;;;;;;;;;;;;;;;38390:463;;;;;;;;;;-1:-1:-1;38390:463:0;;;;;:::i;:::-;;:::i;10179:32::-;;;;;;;;;;;;;;;;15977:475;;;;;;;;;;-1:-1:-1;15977:475:0;;;;;:::i;:::-;;:::i;37937:445::-;;;;;;;;;;-1:-1:-1;37937:445:0;;;;;:::i;:::-;;:::i;20171:321::-;;;;;;;;;;-1:-1:-1;20171:321:0;;;;;:::i;:::-;;:::i;14969:85::-;;;;;;;;;;-1:-1:-1;14969:85:0;;9495:2;3033:36:1;;3021:2;3006:18;14969:85:0;2891:184:1;20967:471:0;;;;;;;;;;-1:-1:-1;20967:471:0;;;;;:::i;:::-;;:::i;16460:215::-;;;;;;;;;;-1:-1:-1;16460:215:0;;;;;:::i;:::-;;:::i;8514:33::-;;;;;;;;;;-1:-1:-1;8514:33:0;;;;-1:-1:-1;;;;;8514:33:0;;;10694:37;;;;;;;;;;;;;;;;10738:38;;;;;;;;;;;;;;;;37620:152;;;;;;;;;;-1:-1:-1;37620:152:0;;;;;:::i;:::-;;:::i;11237:21::-;;;;;;;;;;-1:-1:-1;11237:21:0;;;;-1:-1:-1;;;;;11237:21:0;;;19682:481;;;;;;;;;;-1:-1:-1;19682:481:0;;;;;:::i;:::-;;:::i;38865:408::-;;;;;;;;;;-1:-1:-1;38865:408:0;;;;;:::i;:::-;;:::i;8974:33::-;;;;;;;;;;-1:-1:-1;8974:33:0;;;;;;;;;;;11295:41;;;;;;;;;;-1:-1:-1;11295:41:0;;;;-1:-1:-1;;;11295:41:0;;;;;;28332:294;;;;;;;;;;;;;:::i;20500:459::-;;;;;;;;;;-1:-1:-1;20500:459:0;;;;;:::i;:::-;;:::i;37486:126::-;;;;;;;;;;-1:-1:-1;37486:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;37577:27:0;37553:4;37577:27;;;:18;:27;;;;;;;;;37486:126;7083:90;;;;;;;;;;-1:-1:-1;7150:15:0;7083:90;;26624:120;;;;;;;;;;-1:-1:-1;26718:18:0;;26703:12;:33;26624:120;;17773:181;;;;;;;;;;-1:-1:-1;17773:181:0;;;;;:::i;:::-;;:::i;10369:61::-;;;;;;;;;;-1:-1:-1;10369:61:0;;;;;:::i;:::-;;;;;;;;;;;;;;10656:25;;;;;;;;;;;;;;;;15167:198;;;;;;;;;;-1:-1:-1;15167:198:0;;;;;:::i;:::-;;:::i;29127:429::-;;;;;;;;;;;;;:::i;6634:150::-;;;;;;;;;;;;;:::i;17427:154::-;;;;;;;;;;;;;:::i;17962:144::-;;;;;;;;;;-1:-1:-1;17962:144:0;;;;;:::i;:::-;;:::i;39549:488::-;;;;;;;;;;-1:-1:-1;39549:488:0;;;;;:::i;:::-;;:::i;10605:44::-;;;;;;;;;;-1:-1:-1;10605:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10218:38;;;;;;;;;;;;;;;;17104:154;;;;;;;;;;-1:-1:-1;17104:154:0;;;;;:::i;:::-;-1:-1:-1;;;;;17230:20:0;17201:4;17230:20;;;:11;:20;;;;;;;;;17104:154;6420:79;;;;;;;;;;-1:-1:-1;6458:7:0;6485:6;-1:-1:-1;;;;;6485:6:0;6420:79;;14872:89;;;;;;;;;;-1:-1:-1;14946:7:0;;;;;;;;;;;;-1:-1:-1;;;14946:7:0;;;;14872:89;;19154:237;;;;;;;;;;-1:-1:-1;19154:237:0;;;;;:::i;:::-;;:::i;18126:122::-;;;;;;;;;;-1:-1:-1;18217:23:0;;18126:122;;16683:413;;;;;;;;;;-1:-1:-1;16683:413:0;;;;;:::i;:::-;;:::i;10565:33::-;;;;;;;;;;;;;;;;15373:201;;;;;;;;;;-1:-1:-1;15373:201:0;;;;;:::i;:::-;;:::i;10437:42::-;;;;;;;;;;;;;;;;10311:51;;;;;;;;;;-1:-1:-1;10311:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11088:58;;;;;;;;;;-1:-1:-1;11088:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11343:33;;;;;;;;;;-1:-1:-1;11343:33:0;;;;-1:-1:-1;;;11343:33:0;;;;;;39281:171;;;;;;;;;;-1:-1:-1;39281:171:0;;;;;:::i;:::-;;:::i;8928:39::-;;;;;;;;;;-1:-1:-1;8928:39:0;;;;;;;;10789:35;;;;;;;;;;;;;;;;10088:37;;;;;;;;;;;;;;;;15582:186;;;;;;;;;;-1:-1:-1;15582:186:0;;;;;:::i;:::-;-1:-1:-1;;;;;15733:18:0;;;15701:7;15733:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;15582:186;10132:38;;;;;;;;;;;;;;;;17624:137;;;;;;;;;;;;;:::i;37780:149::-;;;;;;;;;;-1:-1:-1;37780:149:0;;;;;:::i;:::-;;:::i;8467:40::-;;;;;;;;;;-1:-1:-1;8467:40:0;;;;-1:-1:-1;;;;;8467:40:0;;;40217:2258;;;;;;;;;;-1:-1:-1;40217:2258:0;;;;;:::i;:::-;;:::i;10488:37::-;;;;;;;;;;;;;;;;10050:31;;;;;;;;;;;;;;;;6792:283;;;;;;;;;;-1:-1:-1;6792:283:0;;;;;:::i;:::-;;:::i;40049:160::-;;;;;;;;;;;;;:::i;10902:24::-;;;;;;;;;;;;;;;;18572:343;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;;;;;;;;;18693:6:::1;18679:11;-1:-1:-1::0;;;18689:1:0::1;18679:11;:::i;:::-;:20;;;;:::i;:::-;18666:9;:33;;18658:99;;;::::0;-1:-1:-1;;;18658:99:0;;8620:2:1;18658:99:0::1;::::0;::::1;8602:21:1::0;8659:2;8639:18;;;8632:30;8698:34;8678:18;;;8671:62;-1:-1:-1;;;8749:18:1;;;8742:51;8810:19;;18658:99:0::1;8418:417:1::0;18658:99:0::1;18802:4;18788:11;-1:-1:-1::0;;;18798:1:0::1;18788:11;:::i;:::-;:18;;;;:::i;:::-;18775:9;:31;;18767:96;;;::::0;-1:-1:-1;;;18767:96:0;;9042:2:1;18767:96:0::1;::::0;::::1;9024:21:1::0;9081:2;9061:18;;;9054:30;9120:34;9100:18;;;9093:62;-1:-1:-1;;;9171:18:1;;;9164:50;9231:19;;18767:96:0::1;8840:416:1::0;18767:96:0::1;18873:23;:35:::0;18572:343::o;15776:193::-;15878:4;15900:39;191:10;15923:7;15932:6;15900:8;:39::i;:::-;-1:-1:-1;15957:4:0;15776:193;;;;;:::o;18923:223::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;19033:4:::1;19027;19013:11;-1:-1:-1::0;;;19023:1:0::1;19013:11;:::i;:::-;:18;;;;:::i;:::-;19012:25;;;;:::i;:::-;19002:6;:35;;18994:95;;;::::0;-1:-1:-1;;;18994:95:0;;9463:2:1;18994:95:0::1;::::0;::::1;9445:21:1::0;9502:2;9482:18;;;9475:30;9541:34;9521:18;;;9514:62;-1:-1:-1;;;9592:18:1;;;9585:45;9647:19;;18994:95:0::1;9261:411:1::0;18994:95:0::1;19123:15;:6:::0;19133:4:::1;19123:15;:::i;:::-;19100:20;:38:::0;-1:-1:-1;18923:223:0:o;18256:245::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;18350:2:::1;18340:6;:12;;:29;;;;;18366:3;18356:6;:13;;18340:29;18332:74;;;::::0;-1:-1:-1;;;18332:74:0;;9879:2:1;18332:74:0::1;::::0;::::1;9861:21:1::0;;;9898:18;;;9891:30;9957:34;9937:18;;;9930:62;10009:18;;18332:74:0::1;9677:356:1::0;18332:74:0::1;18435:13;:6:::0;18444:4:::1;18435:13;:::i;:::-;18417:15;:31:::0;18464:29:::1;::::0;2073:25:1;;;18464:29:0::1;::::0;2061:2:1;2046:18;18464:29:0::1;;;;;;;;18256:245:::0;:::o;38390:463::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;38536:11:::1;:24:::0;;;38571:17:::1;:36:::0;;;38618:18:::1;:38:::0;;;38731:4:::1;38639:17:::0;38675:31:::1;38591:16:::0;38550:10;38675:31:::1;:::i;:::-;:52;;;;:::i;:::-;:60;;38667:103;;;::::0;-1:-1:-1;;;38667:103:0;;10373:2:1;38667:103:0::1;::::0;::::1;10355:21:1::0;10412:2;10392:18;;;10385:30;10451:32;10431:18;;;10424:60;10501:18;;38667:103:0::1;10171:354:1::0;38667:103:0::1;38786:59;::::0;;10732:25:1;;;10788:2;10773:18;;10766:34;;;10816:18;;;10809:34;;;38786:59:0::1;::::0;10720:2:1;10705:18;38786:59:0::1;;;;;;;;38390:463:::0;;;:::o;15977:475::-;16100:4;16117:36;16127:6;16135:9;16146:6;16117:9;:36::i;:::-;-1:-1:-1;;;;;16193:19:0;;16166:24;16193:19;;;:11;:19;;;;;;;;191:10;16193:33;;;;;;;;16245:26;;;;16237:79;;;;-1:-1:-1;;;16237:79:0;;11056:2:1;16237:79:0;;;11038:21:1;11095:2;11075:18;;;11068:30;11134:34;11114:18;;;11107:62;-1:-1:-1;;;11185:18:1;;;11178:38;11233:19;;16237:79:0;10854:404:1;16237:79:0;16352:57;16361:6;191:10;16402:6;16383:16;:25;16352:8;:57::i;:::-;-1:-1:-1;16440:4:0;;15977:475;-1:-1:-1;;;;15977:475:0:o;37937:445::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;38079:10:::1;:22:::0;;;38112:16:::1;:34:::0;;;38157:17:::1;:36:::0;;;38265:4:::1;38177:16:::0;38212:29:::1;38131:15:::0;38092:9;38212:29:::1;:::i;:::-;:49;;;;:::i;:::-;:57;;38204:99;;;::::0;-1:-1:-1;;;38204:99:0;;11465:2:1;38204:99:0::1;::::0;::::1;11447:21:1::0;11504:2;11484:18;;;11477:30;11543:31;11523:18;;;11516:59;11592:18;;38204:99:0::1;11263:353:1::0;38204:99:0::1;38319:55;::::0;;10732:25:1;;;10788:2;10773:18;;10766:34;;;10816:18;;;10809:34;;;38319:55:0::1;::::0;10720:2:1;10705:18;38319:55:0::1;10530:319:1::0;20171:321:0;20265:7;20323;;20312;:18;;20290:110;;;;-1:-1:-1;;;20290:110:0;;11823:2:1;20290:110:0;;;11805:21:1;11862:2;11842:18;;;11835:30;11901:34;11881:18;;;11874:62;-1:-1:-1;;;11952:18:1;;;11945:40;12002:19;;20290:110:0;11621:406:1;20290:110:0;20411:19;20433:10;:8;:10::i;:::-;20411:32;-1:-1:-1;20461:23:0;20411:32;20461:7;:23;:::i;:::-;20454:30;20171:321;-1:-1:-1;;;20171:321:0:o;20967:471::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21045:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;21037:56;;;::::0;-1:-1:-1;;;21037:56:0;;12234:2:1;21037:56:0::1;::::0;::::1;12216:21:1::0;12273:2;12253:18;;;12246:30;12312:25;12292:18;;;12285:53;12355:18;;21037:56:0::1;12032:347:1::0;21037:56:0::1;21109:9;21104:327;21128:9;:16:::0;21124:20;::::1;21104:327;;;21186:7;-1:-1:-1::0;;;;;21170:23:0::1;:9;21180:1;21170:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;21170:12:0::1;:23;21166:254;;;21229:9;21239:16:::0;;:20:::1;::::0;21258:1:::1;::::0;21239:20:::1;:::i;:::-;21229:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;21214:9:::1;:12:::0;;-1:-1:-1;;;;;21229:31:0;;::::1;::::0;21224:1;;21214:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;21214:46:0::1;-1:-1:-1::0;;;;;21214:46:0;;::::1;;::::0;;21279:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;21318:11:::1;:20:::0;;;;:28;;-1:-1:-1;;21318:28:0::1;::::0;;21365:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;21365:15:0;;;;;-1:-1:-1;;;;;;21365:15:0::1;::::0;;;;;21104:327:::1;20967:471:::0;:::o;21166:254::-:1;21146:3:::0;::::1;::::0;::::1;:::i;:::-;;;;21104:327;;;;20967:471:::0;:::o;16460:215::-;191:10;16548:4;16597:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16597:34:0;;;;;;;;;;16548:4;;16565:80;;16588:7;;16597:47;;16634:10;;16597:47;:::i;:::-;16565:8;:80::i;37620:152::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37691:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;37691:34:0::1;37721:4;37691:34;::::0;;37741:23;;780:51:1;;;37741:23:0::1;::::0;753:18:1;37741:23:0::1;616:221:1::0;19682:481:0;19802:7;-1:-1:-1;;;19835:7:0;:18;;19827:62;;;;-1:-1:-1;;;19827:62:0;;13120:2:1;19827:62:0;;;13102:21:1;13159:2;13139:18;;;13132:30;13198:33;13178:18;;;13171:61;13249:18;;19827:62:0;12918:355:1;19827:62:0;19905:17;19900:256;;19940:15;19969:19;19980:7;19969:10;:19::i;:::-;-1:-1:-1;19939:49:0;;-1:-1:-1;20003:14:0;;-1:-1:-1;;;;;20003:14:0;19900:256;20053:23;20088:19;20099:7;20088:10;:19::i;:::-;-1:-1:-1;20050:57:0;;-1:-1:-1;20122:22:0;;-1:-1:-1;;;;;20122:22:0;38865:408;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38961:32:0;::::1;38953:83;;;::::0;-1:-1:-1;;;38953:83:0;;13480:2:1;38953:83:0::1;::::0;::::1;13462:21:1::0;13519:2;13499:18;;;13492:30;13558:34;13538:18;;;13531:62;-1:-1:-1;;;13609:18:1;;;13602:36;13655:19;;38953:83:0::1;13278:402:1::0;38953:83:0::1;39066:17;::::0;;-1:-1:-1;;;;;39066:17:0;;::::1;39087:5;39047:37:::0;;;:18:::1;:37;::::0;;;;;;;:45;;-1:-1:-1;;39047:45:0;;::::1;::::0;;;39103:47;;-1:-1:-1;;;;;;39103:47:0::1;::::0;;::::1;::::0;;::::1;::::0;;;39161:37;;;;;;;:44;;;;::::1;-1:-1:-1::0;39161:44:0::1;::::0;;;39221;780:51:1;;;39221:44:0::1;::::0;753:18:1;39221:44:0::1;616:221:1::0;28332:294:0;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;28387:23:::1;28413:24;28431:4;28413:9;:24::i;:::-;28387:50;;28475:23;;28456:15;:42;;28448:97;;;::::0;-1:-1:-1;;;28448:97:0;;13887:2:1;28448:97:0::1;::::0;::::1;13869:21:1::0;13926:2;13906:18;;;13899:30;13965:34;13945:18;;;13938:62;-1:-1:-1;;;14016:18:1;;;14009:40;14066:19;;28448:97:0::1;13685:406:1::0;28448:97:0::1;28556:10;:8;:10::i;:::-;28582:36;::::0;28602:15:::1;2073:25:1::0;;28582:36:0::1;::::0;2061:2:1;2046:18;28582:36:0::1;1927:177:1::0;20500:459:0;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20581:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;20580:21;20572:61;;;::::0;-1:-1:-1;;;20572:61:0;;14298:2:1;20572:61:0::1;::::0;::::1;14280:21:1::0;14337:2;14317:18;;;14310:30;14376:29;14356:18;;;14349:57;14423:18;;20572:61:0::1;14096:351:1::0;20572:61:0::1;20652:9;:16:::0;20676:2:::1;::::0;20652:20:::1;::::0;20671:1:::1;20652:20;:::i;:::-;:26;;20644:116;;;::::0;-1:-1:-1;;;20644:116:0;;14654:2:1;20644:116:0::1;::::0;::::1;14636:21:1::0;14693:2;14673:18;;;14666:30;14732:34;14712:18;;;14705:62;14803:34;14783:18;;;14776:62;-1:-1:-1;;;14854:19:1;;;14847:44;14908:19;;20644:116:0::1;14452:481:1::0;20644:116:0::1;-1:-1:-1::0;;;;;20775:16:0;::::1;20794:1;20775:16:::0;;;:7:::1;:16;::::0;;;;;:20;20771:109:::1;;-1:-1:-1::0;;;;;20851:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;20831:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;20812:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;20771:109:::1;-1:-1:-1::0;;;;;20890:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;20890:27:0::1;20913:4;20890:27:::0;;::::1;::::0;;;20928:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;20928:23:0::1;::::0;;::::1;::::0;;20500:459::o;17773:181::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17854:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;::::1;;17846:62;;;::::0;-1:-1:-1;;;17846:62:0;;15140:2:1;17846:62:0::1;::::0;::::1;15122:21:1::0;15179:2;15159:18;;;15152:30;15218:32;15198:18;;;15191:60;15268:18;;17846:62:0::1;14938:354:1::0;17846:62:0::1;-1:-1:-1::0;;;;;17919:19:0::1;17941:5;17919:19:::0;;;:11:::1;:19;::::0;;;;:27;;-1:-1:-1;;17919:27:0::1;::::0;;17773:181::o;15167:198::-;-1:-1:-1;;;;;15257:20:0;;15233:7;15257:20;;;:11;:20;;;;;;;;15253:49;;;-1:-1:-1;;;;;;15286:16:0;;;;;:7;:16;;;;;;;15167:198::o;15253:49::-;-1:-1:-1;;;;;15340:16:0;;;;;;:7;:16;;;;;;15320:37;;:19;:37::i;29127:429::-;29224:16;;;29238:1;29224:16;;;;;;;;29181:7;;;;29224:16;29238:1;29224:16;;;;;;;;-1:-1:-1;;29261:9:0;;:16;;;-1:-1:-1;;;29261:16:0;;;;29200:40;;-1:-1:-1;;;;;;29261:9:0;;;;:14;;-1:-1:-1;29261:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29251:4;29256:1;29251:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;29251:26:0;;;-1:-1:-1;;;;;29251:26:0;;;;;29306:4;29288;29293:1;29288:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29288:23:0;;;;:7;;;;;;;;;;:23;29359:16;;;29373:1;29359:16;;;;;;;;29332:24;;29359:16;;29373:1;;29359:16;;;;;;;;;-1:-1:-1;;29396:9:0;;29420:15;;29396:46;;-1:-1:-1;;;29396:46:0;;29332:43;;-1:-1:-1;;;;;;29396:9:0;;;;:23;;:46;;29437:4;;29396:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29396:46:0;;;;;;;;;;;;:::i;:::-;29386:56;;29543:5;29522:18;;29502:17;;29488:11;;:31;;;;:::i;:::-;:52;;;;:::i;:::-;29474:7;29482:1;29474:10;;;;;;;;:::i;:::-;;;;;;;:67;;;;:::i;:::-;29473:75;;;;:::i;:::-;29460:7;29468:1;29460:10;;;;;;;;:::i;:::-;;;;;;;:88;;;;:::i;:::-;29453:95;;;;29127:429;:::o;6634:150::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;6743:1:::1;6727:6:::0;;6706:40:::1;::::0;-1:-1:-1;;;;;6727:6:0;;::::1;::::0;6706:40:::1;::::0;6743:1;;6706:40:::1;6774:1;6757:19:::0;;-1:-1:-1;;;;;;6757:19:0::1;::::0;;6634:150::o;17427:154::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;17481:14:::1;:22:::0;;-1:-1:-1;;17514:28:0;;;17558:15:::1;::::0;::::1;::::0;17498:5:::1;::::0;17558:15:::1;17427:154::o:0;17962:144::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18052:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;18052:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17962:144::o;39549:488::-;39663:10;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39699:20:0;::::1;39691:59;;;::::0;-1:-1:-1;;;39691:59:0;;17444:2:1;39691:59:0::1;::::0;::::1;17426:21:1::0;17483:2;17463:18;;;17456:30;17522:28;17502:18;;;17495:56;17568:18;;39691:59:0::1;17242:350:1::0;39691:59:0::1;-1:-1:-1::0;;;;;39769:23:0;::::1;39787:4;39769:23;;39761:64;;;::::0;-1:-1:-1;;;39761:64:0;;17799:2:1;39761:64:0::1;::::0;::::1;17781:21:1::0;17838:2;17818:18;;;17811:30;17877;17857:18;;;17850:58;17925:18;;39761:64:0::1;17597:352:1::0;39761:64:0::1;39863:39;::::0;-1:-1:-1;;;39863:39:0;;39896:4:::1;39863:39;::::0;::::1;780:51:1::0;39836:24:0::1;::::0;-1:-1:-1;;;;;39863:24:0;::::1;::::0;::::1;::::0;753:18:1;;39863:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39921:46;::::0;-1:-1:-1;;;39921:46:0;;-1:-1:-1;;;;;18335:32:1;;;39921:46:0::1;::::0;::::1;18317:51:1::0;18384:18;;;18377:34;;;39836:66:0;;-1:-1:-1;39921:23:0;;::::1;::::0;::::1;::::0;18290:18:1;;39921:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39983;::::0;;-1:-1:-1;;;;;18335:32:1;;18317:51;;18399:2;18384:18;;18377:34;;;39913:54:0;;-1:-1:-1;39983:46:0::1;::::0;18290:18:1;39983:46:0::1;;;;;;;39680:357;39549:488:::0;;;;:::o;19154:237::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;19261:6:::1;::::0;-1:-1:-1;;;;;19253:14:0;;::::1;19261:6:::0;::::1;19253:14;;19245:84;;;::::0;-1:-1:-1;;;19245:84:0;;18874:2:1;19245:84:0::1;::::0;::::1;18856:21:1::0;18913:2;18893:18;;;18886:30;18952:34;18932:18;;;18925:62;19023:27;19003:18;;;18996:55;19068:19;;19245:84:0::1;18672:421:1::0;19245:84:0::1;19342:41;19371:4;19377:5;19342:28;:41::i;16683:413::-:0;191:10;16776:4;16820:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16820:34:0;;;;;;;;;;16873:35;;;;16865:85;;;;-1:-1:-1;;;16865:85:0;;19300:2:1;16865:85:0;;;19282:21:1;19339:2;19319:18;;;19312:30;19378:34;19358:18;;;19351:62;-1:-1:-1;;;19429:18:1;;;19422:35;19474:19;;16865:85:0;19098:401:1;16865:85:0;16986:67;191:10;17009:7;17037:15;17018:16;:34;16986:8;:67::i;:::-;-1:-1:-1;17084:4:0;;16683:413;-1:-1:-1;;;16683:413:0:o;15373:201::-;15480:4;15502:42;191:10;15526:9;15537:6;15502:9;:42::i;39281:171::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;39358:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;39358:32:0::1;-1:-1:-1::0;;;;39358:32:0;;::::1;;::::0;;39406:38:::1;::::0;::::1;::::0;::::1;::::0;39382:8;1648:14:1;1641:22;1623:41;;1611:2;1596:18;;1483:187;17624:137:0;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;17686:20:::1;:28:::0;;-1:-1:-1;;17686:28:0::1;::::0;;17730:23:::1;::::0;::::1;::::0;17709:5:::1;::::0;17730:23:::1;17624:137::o:0;37780:149::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37849:27:0;::::1;37879:5;37849:27:::0;;;:18:::1;:27;::::0;;;;;;;;:35;;-1:-1:-1;;37849:35:0::1;::::0;;37900:21;;780:51:1;;;37900:21:0::1;::::0;753:18:1;37900:21:0::1;616:221:1::0;40217:2258:0;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;40358:13:::1;::::0;-1:-1:-1;;;40358:13:0;::::1;;;40357:14;40349:70;;;::::0;-1:-1:-1;;;40349:70:0;;19706:2:1;40349:70:0::1;::::0;::::1;19688:21:1::0;19745:2;19725:18;;;19718:30;19784:34;19764:18;;;19757:62;-1:-1:-1;;;19835:18:1;;;19828:41;19886:19;;40349:70:0::1;19504:407:1::0;40349:70:0::1;40457:2;40438:16;:21;40430:73;;;::::0;-1:-1:-1;;;40430:73:0;;20118:2:1;40430:73:0::1;::::0;::::1;20100:21:1::0;20157:2;20137:18;;;20130:30;20196:34;20176:18;;;20169:62;-1:-1:-1;;;20247:18:1;;;20240:37;20294:19;;40430:73:0::1;19916:403:1::0;40430:73:0::1;40516:14;:12;:14::i;:::-;40567:15;:22;40549:7;:14;:40;40541:83;;;::::0;-1:-1:-1;;;40541:83:0;;20526:2:1;40541:83:0::1;::::0;::::1;20508:21:1::0;20565:2;20545:18;;;20538:30;20604:32;20584:18;;;20577:60;20654:18;;40541:83:0::1;20324:354:1::0;40541:83:0::1;40660:3;40643:7;:14;:20;40635:87;;;::::0;-1:-1:-1;;;40635:87:0;;20885:2:1;40635:87:0::1;::::0;::::1;20867:21:1::0;20924:2;20904:18;;;20897:30;20963:34;20943:18;;;20936:62;-1:-1:-1;;;21014:18:1;;;21007:52;21076:19;;40635:87:0::1;20683:418:1::0;40635:87:0::1;40835:9;40831:324;40854:7;:14;40850:1;:18;40831:324;;;40889:14;40906:7;40914:1;40906:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;40931:26:0;::::1;;::::0;;;:18:::1;:26:::0;;;;;;;:33;;-1:-1:-1;;40931:33:0::1;40960:4;40931:33;::::0;;40906:10;-1:-1:-1;41015:26:0::1;:15;41033:8;41015:26;:::i;:::-;-1:-1:-1::0;;;;;40979:33:0;::::1;;::::0;;;:25:::1;:33;::::0;;;;:62;;;;41073:18;;:15;;41089:1;;41073:18;::::1;;;;;:::i;:::-;;;;;;;41056:35;;41106:37;41116:10;41128:6;41136;41106:9;:37::i;:::-;40874:281;;40870:3;;;;;:::i;:::-;;;;40831:324;;;-1:-1:-1::0;41205:5:0::1;41190:12;-1:-1:-1::0;;;41200:2:0::1;41190:12;:::i;:::-;:20;;;;:::i;:::-;41167;:43:::0;41258:13:::1;:20:::0;;-1:-1:-1;;;;41289:28:0;-1:-1:-1;;;41289:28:0;;;41349:12:::1;41328:18;:33:::0;;;41393:37:::1;::::0;41414:16;;41393:37:::1;:::i;:::-;41372:18;:58:::0;41446:16:::1;::::0;::::1;::::0;;;::::1;41594:9;:22:::0;;-1:-1:-1;;;;;;41594:22:0::1;41540:42;41594:22:::0;;::::1;::::0;;;41674:20:::1;::::0;;-1:-1:-1;;;41674:20:0;;;;41540:42;;41674:18:::1;::::0;:20:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;41540:42;41674:20:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;41662:44:0::1;;41715:4;41722:10;-1:-1:-1::0;;;;;41722:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41662:78;::::0;-1:-1:-1;;;;;;41662:78:0::1;::::0;;;;;;-1:-1:-1;;;;;21336:15:1;;;41662:78:0::1;::::0;::::1;21318:34:1::0;21388:15;;21368:18;;;21361:43;21253:18;;41662:78:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41653:6;:87:::0;;-1:-1:-1;;;;;;41653:87:0::1;-1:-1:-1::0;;;;;41653:87:0;;;::::1;::::0;;::::1;::::0;;41751:48:::1;::::0;-1:-1:-1;41751:25:0::1;:48::i;:::-;41847:6;::::0;41810:51:::1;::::0;-1:-1:-1;;;;;41847:6:0::1;::::0;41810:28:::1;:51::i;:::-;41941:1;41917:21;:25;41909:73;;;::::0;-1:-1:-1;;;41909:73:0;;21617:2:1;41909:73:0::1;::::0;::::1;21599:21:1::0;21656:2;21636:18;;;21629:30;21695:34;21675:18;;;21668:62;-1:-1:-1;;;21746:18:1;;;21739:33;21789:19;;41909:73:0::1;21415:399:1::0;41909:73:0::1;42030:1;42003:24;42021:4;42003:9;:24::i;:::-;:28;41995:79;;;::::0;-1:-1:-1;;;41995:79:0;;22021:2:1;41995:79:0::1;::::0;::::1;22003:21:1::0;22060:2;22040:18;;;22033:30;22099:34;22079:18;;;22072:62;-1:-1:-1;;;22150:18:1;;;22143:36;22196:19;;41995:79:0::1;21819:402:1::0;41995:79:0::1;42119:9;::::0;42087:69:::1;::::0;42104:4:::1;::::0;-1:-1:-1;;;;;42119:9:0::1;42131:24;42104:4:::0;42131:9:::1;:24::i;42087:69::-;42167:9;::::0;-1:-1:-1;;;;;42167:9:0::1;:25;42200:21;42245:4;42265:24;42245:4:::0;42265:9:::1;:24::i;:::-;42304:1;42347::::0;42390:10:::1;42415:15;42167:274;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;42452:15;37407::::0;;37397:7;:25;37449:21;;37433:13;:37;37353:125;42452:15:::1;40338:2137;40217:2258:::0;;;:::o;6792:283::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6897:22:0;::::1;6875:110;;;::::0;-1:-1:-1;;;6875:110:0;;23351:2:1;6875:110:0::1;::::0;::::1;23333:21:1::0;23390:2;23370:18;;;23363:30;23429:34;23409:18;;;23402:62;-1:-1:-1;;;23480:18:1;;;23473:36;23526:19;;6875:110:0::1;23149:402:1::0;6875:110:0::1;7022:6;::::0;;7001:38:::1;::::0;-1:-1:-1;;;;;7001:38:0;;::::1;::::0;7022:6;::::1;::::0;7001:38:::1;::::0;::::1;7050:6;:17:::0;;-1:-1:-1;;;;;;7050:17:0::1;-1:-1:-1::0;;;;;7050:17:0;;;::::1;::::0;;;::::1;::::0;;6792:283::o;40049:160::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;40143:58:::1;::::0;40107:12:::1;::::0;40151:10:::1;::::0;40175:21:::1;::::0;40107:12;40143:58;40107:12;40143:58;40175:21;40151:10;40143:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21447:371:::0;-1:-1:-1;;;;;21574:19:0;;21566:68;;;;-1:-1:-1;;;21566:68:0;;23968:2:1;21566:68:0;;;23950:21:1;24007:2;23987:18;;;23980:30;24046:34;24026:18;;;24019:62;-1:-1:-1;;;24097:18:1;;;24090:34;24141:19;;21566:68:0;23766:400:1;21566:68:0;-1:-1:-1;;;;;21653:21:0;;21645:68;;;;-1:-1:-1;;;21645:68:0;;24373:2:1;21645:68:0;;;24355:21:1;24412:2;24392:18;;;24385:30;24451:34;24431:18;;;24424:62;-1:-1:-1;;;24502:18:1;;;24495:32;24544:19;;21645:68:0;24171:398:1;21645:68:0;-1:-1:-1;;;;;21726:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;21778:32;;2073:25:1;;;21778:32:0;;2046:18:1;21778:32:0;;;;;;;21447:371;;;:::o;21826:4790::-;-1:-1:-1;;;;;21948:18:0;;21940:68;;;;-1:-1:-1;;;21940:68:0;;24776:2:1;21940:68:0;;;24758:21:1;24815:2;24795:18;;;24788:30;24854:34;24834:18;;;24827:62;-1:-1:-1;;;24905:18:1;;;24898:35;24950:19;;21940:68:0;24574:401:1;21940:68:0;-1:-1:-1;;;;;22027:16:0;;22019:64;;;;-1:-1:-1;;;22019:64:0;;25182:2:1;22019:64:0;;;25164:21:1;25221:2;25201:18;;;25194:30;25260:34;25240:18;;;25233:62;-1:-1:-1;;;25311:18:1;;;25304:33;25354:19;;22019:64:0;24980:399:1;22019:64:0;22111:1;22102:6;:10;22094:64;;;;-1:-1:-1;;;22094:64:0;;25586:2:1;22094:64:0;;;25568:21:1;25625:2;25605:18;;;25598:30;25664:34;25644:18;;;25637:62;-1:-1:-1;;;25715:18:1;;;25708:39;25764:19;;22094:64:0;25384:405:1;22094:64:0;22183:13;;-1:-1:-1;;;22183:13:0;;;;22179:134;;-1:-1:-1;;;;;22220:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;22248:22:0;;;;;;:18;:22;;;;;;;;22220:50;22212:89;;;;-1:-1:-1;;;22212:89:0;;25996:2:1;22212:89:0;;;25978:21:1;26035:2;26015:18;;;26008:30;26074:28;26054:18;;;26047:56;26120:18;;22212:89:0;25794:350:1;22212:89:0;-1:-1:-1;;;;;22328:24:0;;;;;;:18;:24;;;;;;;;22325:609;;;-1:-1:-1;;;;;22371:29:0;;;;;;:25;:29;;;;;;;;22368:555;;;-1:-1:-1;;;;;22478:31:0;;;;;;:25;:31;;;;;;22513:15;-1:-1:-1;22478:50:0;22470:78;;;;-1:-1:-1;;;22470:78:0;;26351:2:1;22470:78:0;;;26333:21:1;26390:2;26370:18;;;26363:30;-1:-1:-1;;;26409:18:1;;;26402:45;26464:18;;22470:78:0;26149:339:1;22470:78:0;22585:23;:21;:23::i;:::-;22575:6;:33;;22567:98;;;;-1:-1:-1;;;22567:98:0;;26695:2:1;22567:98:0;;;26677:21:1;26734:2;26714:18;;;26707:30;26773:34;26753:18;;;26746:62;-1:-1:-1;;;26824:18:1;;;26817:50;26884:19;;22567:98:0;26493:416:1;22567:98:0;22718:26;:15;22736:8;22718:26;:::i;:::-;-1:-1:-1;;;;;22684:31:0;;;;;;:25;:31;;;;;:60;22368:555;;;-1:-1:-1;;;;;22770:22:0;;;;;;:18;:22;;;;;;;;22766:157;;22812:95;;-1:-1:-1;;;22812:95:0;;27116:2:1;22812:95:0;;;27098:21:1;27155:2;27135:18;;;27128:30;27194:34;27174:18;;;27167:62;27265:34;27245:18;;;27238:62;-1:-1:-1;;;27316:19:1;;;27309:52;27378:19;;22812:95:0;26914:489:1;22766:157:0;26718:18;;26703:12;:33;22946:200;;-1:-1:-1;;;;;23000:17:0;;;;;;:11;:17;;;;;;;;22999:18;;:35;;-1:-1:-1;6458:7:0;6485:6;-1:-1:-1;;;;;23021:13:0;;;6485:6;;23021:13;22999:35;:60;;;-1:-1:-1;;;;;;23038:21:0;;23052:6;23038:21;22999:60;22991:143;;;;-1:-1:-1;;;22991:143:0;;27610:2:1;22991:143:0;;;27592:21:1;27649:2;27629:18;;;27622:30;27688:34;27668:18;;;27661:62;27759:34;27739:18;;;27732:62;-1:-1:-1;;;27810:19:1;;;27803:37;27857:19;;22991:143:0;27408:474:1;22991:143:0;23161:14;;;;;;;23158:1501;;;6458:7;6485:6;-1:-1:-1;;;;;23213:15:0;;;6485:6;;23213:15;;;;:49;;-1:-1:-1;6458:7:0;6485:6;-1:-1:-1;;;;;23249:13:0;;;6485:6;;23249:13;;23213:49;:86;;;;-1:-1:-1;;;;;;23283:16:0;;;;23213:86;:128;;;;-1:-1:-1;;;;;;23320:21:0;;23334:6;23320:21;;23213:128;:166;;;;-1:-1:-1;23363:16:0;;-1:-1:-1;;;23363:16:0;;;;23362:17;23213:166;23191:1457;;;23569:20;;;;23565:518;;;23631:9;;-1:-1:-1;;;;;23617:24:0;;;23631:9;;23617:24;;;;:49;;-1:-1:-1;23659:6:0;;-1:-1:-1;;;;;23645:21:0;;;23659:6;;23645:21;;23617:49;23613:451;;;23731:9;23702:39;;;;:28;:39;;;;;;23744:12;-1:-1:-1;23702:105:0;;;;-1:-1:-1;;;;;;23760:32:0;;;;;;:28;:32;;;;;;23795:12;-1:-1:-1;23702:105:0;23694:191;;;;-1:-1:-1;;;23694:191:0;;28089:2:1;23694:191:0;;;28071:21:1;28128:2;28108:18;;;28101:30;28167:34;28147:18;;;28140:62;28238:34;28218:18;;;28211:62;-1:-1:-1;;;28289:19:1;;;28282:40;28339:19;;23694:191:0;27887:477:1;23694:191:0;23941:9;23912:39;;;;:28;:39;;;;;;23954:12;23912:54;;;;-1:-1:-1;;;;;23993:32:0;;;;;;:47;23613:451;-1:-1:-1;;;;;24151:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;24187:35:0;;;;;;:31;:35;;;;;;;;24186:36;24151:71;24147:486;;;24265:20;;24255:6;:30;;24247:96;;;;-1:-1:-1;;;24247:96:0;;28571:2:1;24247:96:0;;;28553:21:1;28610:2;28590:18;;;28583:30;28649:34;28629:18;;;28622:62;-1:-1:-1;;;28700:18:1;;;28693:51;28761:19;;24247:96:0;28369:417:1;24247:96:0;24147:486;;;-1:-1:-1;;;;;24420:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;24454:37:0;;;;;;:31;:37;;;;;;;;24453:38;24420:71;24416:217;;;24534:20;;24524:6;:30;;24516:97;;;;-1:-1:-1;;;24516:97:0;;28993:2:1;24516:97:0;;;28975:21:1;29032:2;29012:18;;;29005:30;29071:34;29051:18;;;29044:62;-1:-1:-1;;;29122:18:1;;;29115:52;29184:19;;24516:97:0;28791:418:1;24516:97:0;24671:28;24702:24;24720:4;24702:9;:24::i;:::-;24792:23;;24876:16;;24671:55;;-1:-1:-1;24768:47:0;;;;-1:-1:-1;;;24876:16:0;;;;24875:17;:55;;;;-1:-1:-1;24909:21:0;;-1:-1:-1;;;24909:21:0;;;;24875:55;:93;;;;-1:-1:-1;24957:6:0;;24967:1;;24947:17;;-1:-1:-1;;;;;24957:6:0;24947:9;:17::i;:::-;:21;24875:93;:133;;;;-1:-1:-1;;;;;;24986:22:0;;;;;;:18;:22;;;;;;;;24985:23;24875:133;:175;;;;-1:-1:-1;;;;;;25026:24:0;;;;;;:18;:24;;;;;;;;25025:25;24875:175;:221;;;;-1:-1:-1;;;;;;25067:29:0;;;;;;:25;:29;;;;;;;;24875:221;:261;;;;;25113:23;24875:261;24857:328;;;25163:10;:8;:10::i;:::-;25197:14;:12;:14::i;:::-;10002:1;25232:15;:26;-1:-1:-1;;;;;25284:24:0;;;;;;:18;:24;;;;;;;;25283:25;:52;;;;-1:-1:-1;;;;;;25313:22:0;;;;;;:18;:22;;;;;;;;25312:23;25283:52;25279:1231;;;26718:18;;26703:12;:33;25355:60;;;;-1:-1:-1;;;;;;25384:31:0;;;;;;:25;:31;;;;;;;;25355:60;:94;;;;-1:-1:-1;;;;;;25420:29:0;;;;;;:25;:29;;;;;;;;25419:30;25355:94;25352:536;;;-1:-1:-1;;;;;25491:15:0;;;;;;:11;:15;;;;;;;;25487:171;;-1:-1:-1;;;;;25530:15:0;;;;;;:11;:15;;;;;;;:22;;-1:-1:-1;;25530:22:0;25548:4;25530:22;;;;;;25575:15;;25548:4;;25530:15;25575;;25548:4;;25575:15;:::i;:::-;;;;-1:-1:-1;;25618:20:0;;-1:-1:-1;;;;;798:32:1;;780:51;;25618:20:0;;768:2:1;753:18;25618:20:0;;;;;;;25487:171;25688:10;;25678:7;:20;25752:17;;25733:16;;:36;;25752:17;25733:36;:::i;:::-;25717:13;:52;;;25791:17;25788:85;;9918:1;25832:15;:21;25788:85;-1:-1:-1;;;;;25928:31:0;;;;;;:25;:31;;;;;;;;25924:575;;;25990:10;;25980:7;:20;26054:17;;26035:16;;:36;;26054:17;26035:36;:::i;:::-;26019:13;:52;;;26093:17;26090:85;;9918:1;26134:15;:21;26090:85;25924:575;;;-1:-1:-1;;;;;26235:29:0;;;;;;:25;:29;;;;;;;;26231:268;;;26295:11;;26285:7;:21;26361:18;;26341:17;;:38;;26361:18;26341:38;:::i;:::-;26325:13;:54;;;26401:17;26398:86;;9958:1;26442:15;:22;26398:86;26530:32;26545:4;26551:2;26555:6;26530:14;:32::i;:::-;26583:15;37407;;37397:7;:25;37449:21;;37433:13;:37;37353:125;26583:15;21929:4687;;21826:4790;;;:::o;35226:163::-;35268:7;35289:15;35306;35325:19;:17;:19::i;:::-;35288:56;;-1:-1:-1;35288:56:0;-1:-1:-1;35362:19:0;35288:56;;35362:19;:::i;33515:742::-;33615:7;33637;33659;33681;33703;33725;33775:23;33813:12;33840:18;33872:20;33884:7;33872:11;:20::i;:::-;33760:132;;;;;;33904:15;33921:23;33946:12;33962:113;33988:7;34010:4;34029:10;34054;:8;:10::i;:::-;33962:11;:113::i;:::-;33903:172;;;;-1:-1:-1;33903:172:0;;-1:-1:-1;34179:15:0;;-1:-1:-1;34209:4:0;;-1:-1:-1;34228:10:0;;-1:-1:-1;33515:742:0;;-1:-1:-1;;;;;33515:742:0:o;26752:1510::-;12627:16;:23;;-1:-1:-1;;;;12627:23:0;-1:-1:-1;;;12627:23:0;;;;26831:24:::1;26849:4;26831:9;:24::i;:::-;26805:50;;26866:25;26919:23;;26894:22;;:48;;;;:::i;:::-;26866:76;;26953:12;27049:23;;27075:2;27049:28;;;;:::i;:::-;27030:15;:47;27027:124;;27111:23;::::0;:28:::1;::::0;27137:2:::1;27111:28;:::i;:::-;27093:46;;27027:124;27166:20:::0;;;:46:::1;;-1:-1:-1::0;27190:22:0;;27166:46:::1;27163:60;;;27215:7;;;;;27163:60;27292:26;27384:1;27364:17;27339:22;;27321:15;:40;;;;:::i;:::-;:60;;;;:::i;:::-;:64;;;;:::i;:::-;27292:93:::0;-1:-1:-1;27396:26:0::1;27425:36;27292:93:::0;27425:15;:36:::1;:::i;:::-;27396:65;;27482:36;27499:18;27482:16;:36::i;:::-;27691:22;::::0;27560:21:::1;::::0;27539:18:::1;::::0;27691:24:::1;::::0;27714:1:::1;::::0;27691:24:::1;:::i;:::-;27670:46;::::0;:17;:46:::1;:::i;:::-;27642:23;::::0;27629:37:::1;::::0;:10;:37:::1;:::i;:::-;:88;;;;:::i;:::-;27602:115:::0;-1:-1:-1;27738:23:0::1;27764:29;27602:115:::0;27764:10;:29:::1;:::i;:::-;27831:1;27806:22;:26:::0;;;27843:23:::1;:27:::0;27738:55;-1:-1:-1;27902:22:0;;;;;:45:::1;;;27946:1;27928:15;:19;27902:45;27899:216;;;27963:49;27976:18;27996:15;27963:12;:49::i;:::-;28032:71;::::0;;10732:25:1;;;10788:2;10773:18;;10766:34;;;10816:18;;;10809:34;;;28032:71:0::1;::::0;10720:2:1;10705:18;28032:71:0::1;;;;;;;27899:216;28197:17;::::0;28189:65:::1;::::0;-1:-1:-1;;;;;28197:17:0;;::::1;::::0;28228:21:::1;::::0;28189:65:::1;::::0;;;28228:21;28197:17;28189:65:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;12661:1:0::1;12673:16:::0;:24;;-1:-1:-1;;;;12673:24:0;;;26752:1510::o;19399:275::-;-1:-1:-1;;;;;19482:31:0;;;;;;:25;:31;;;;;;;;:39;;;;;;-1:-1:-1;;19482:39:0;;;;;;;;19532:31;:37;;;;;;;:45;;;;;;;;;;;19588:35;;19598:23;19616:4;19598:17;:23::i;:::-;19637:5;19633:34;;19644:21;19660:4;19644:15;:21::i;37110:235::-;37157:7;;:12;:34;;;;-1:-1:-1;37173:13:0;;:18;37157:34;37153:47;;;37110:235::o;37153:47::-;37230:7;;;37212:15;:25;37272:13;;;37248:21;:37;-1:-1:-1;37298:11:0;;;;37320:17;37110:235::o;29986:604::-;-1:-1:-1;;;;;30120:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;30144:22:0;;;;;;:11;:22;;;;;;;;30143:23;30120:46;30116:467;;;30183:48;30205:6;30213:9;30224:6;30183:21;:48::i;:::-;29986:604;;;:::o;30116:467::-;-1:-1:-1;;;;;30254:19:0;;;;;;:11;:19;;;;;;;;30253:20;:46;;;;-1:-1:-1;;;;;;30277:22:0;;;;;;:11;:22;;;;;;;;30253:46;30249:334;;;30316:46;30336:6;30344:9;30355:6;30316:19;:46::i;30249:334::-;-1:-1:-1;;;;;30384:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;30407:22:0;;;;;;:11;:22;;;;;;;;30384:45;30380:203;;;30446:48;30468:6;30476:9;30487:6;30446:21;:48::i;30380:203::-;30527:44;30545:6;30553:9;30564:6;30527:17;:44::i;35397:598::-;35495:7;;35448;;;;-1:-1:-1;;;35448:7:0;35549:332;35573:9;:16;35569:20;;35549:332;;;35657:7;35633;:21;35641:9;35651:1;35641:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35641:12:0;35633:21;;;;;;;;;;;;;:31;;:83;;;35709:7;35685;:21;35693:9;35703:1;35693:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35693:12:0;35685:21;;;;;;;;;;;;;:31;35633:83;35611:146;;;-1:-1:-1;;35740:7:0;;;-1:-1:-1;;;9251:15:0;-1:-1:-1;35397:598:0;-1:-1:-1;;35397:598:0:o;35611:146::-;35791:7;:21;35799:9;35809:1;35799:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35799:12:0;35791:21;;;;;;;;;;;;;35782:31;;:7;:31;:::i;:::-;35772:41;;35847:7;:21;35855:9;35865:1;35855:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35855:12:0;35847:21;;;;;;;;;;;;;35838:31;;:7;:31;:::i;:::-;35828:41;-1:-1:-1;35591:3:0;;;;:::i;:::-;;;;35549:332;;;;-1:-1:-1;;;35905:7:0;;:19;;;;:::i;:::-;35895:7;:29;35891:60;;;-1:-1:-1;;35934:7:0;;;-1:-1:-1;;;9251:15:0;-1:-1:-1;35397:598:0;-1:-1:-1;35397:598:0:o;35891:60::-;35970:7;;35979;;-1:-1:-1;35397:598:0;-1:-1:-1;35397:598:0:o;34265:406::-;34366:7;34388;34410;34445:12;34460:24;34476:7;34460:15;:24::i;:::-;34445:39;;34495:18;34516:30;34538:7;34516:21;:30::i;:::-;34495:51;-1:-1:-1;34557:23:0;34495:51;34583:14;34592:4;34583:7;:14;:::i;:::-;:27;;;;:::i;:::-;34557:53;34646:4;;-1:-1:-1;34652:10:0;;-1:-1:-1;34265:406:0;;-1:-1:-1;;;34265:406:0:o;34679:539::-;34878:7;;;;34975:21;34984:11;34975:7;:21;:::i;:::-;34957:39;-1:-1:-1;35007:12:0;35022:18;35028:11;35022:4;:18;:::i;:::-;35007:33;-1:-1:-1;35051:18:0;35072:24;35084:11;35072:10;:24;:::i;:::-;35051:45;-1:-1:-1;35107:23:0;35051:45;35133:14;35142:4;35133:7;:14;:::i;:::-;:27;;;;:::i;:::-;35179:7;;;;-1:-1:-1;35205:4:0;;-1:-1:-1;34679:539:0;;-1:-1:-1;;;;;;;34679:539:0:o;28638:481::-;28728:16;;;28742:1;28728:16;;;;;;;;28704:21;;28728:16;;;;;;;;;;-1:-1:-1;28728:16:0;28704:40;;28773:4;28755;28760:1;28755:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28755:23:0;;;:7;;;;;;;;;;:23;;;;28799:9;;:16;;;-1:-1:-1;;;28799:16:0;;;;:9;;;;;:14;;:16;;;;;28755:7;;28799:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28789:4;28794:1;28789:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28789:26:0;;;:7;;;;;;;;;:26;28858:9;;28826:56;;28843:4;;28858:9;28870:11;28826:8;:56::i;:::-;28893:9;;:218;;-1:-1:-1;;;28893:218:0;;-1:-1:-1;;;;;28893:9:0;;;;:60;;:218;;28968:11;;28893:9;;29038:4;;29065;;29085:15;;28893:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28693:426;28638:481;:::o;29568:410::-;29681:9;;29649:56;;29666:4;;-1:-1:-1;;;;;29681:9:0;29693:11;29649:8;:56::i;:::-;29716:9;;:254;;-1:-1:-1;;;29716:254:0;;-1:-1:-1;;;;;29716:9:0;;;;:25;;29749:9;;29716:254;;29782:4;;29802:11;;29716:9;;;;29922:6;;29944:15;;29716:254;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31928:677::-;32079:15;32109:23;32147:12;32174:23;32212:12;32239:18;32271:19;32282:7;32271:10;:19::i;:::-;-1:-1:-1;;;;;32319:15:0;;;;;;:7;:15;;;;;;32064:226;;-1:-1:-1;32064:226:0;;-1:-1:-1;32064:226:0;;-1:-1:-1;32064:226:0;-1:-1:-1;32064:226:0;-1:-1:-1;32064:226:0;-1:-1:-1;32319:25:0;;32336:7;;32319:25;:::i;:::-;-1:-1:-1;;;;;32301:15:0;;;;;;:7;:15;;;;;;;;:43;;;;32373:7;:15;;;;:25;;32390:7;;32373:25;:::i;:::-;-1:-1:-1;;;;;32355:15:0;;;;;;;:7;:15;;;;;;:43;;;;32430:18;;;;;;;:36;;32450:15;;32430:36;:::i;:::-;-1:-1:-1;;;;;32409:18:0;;;;;;:7;:18;;;;;:57;32477:26;32492:10;32477:14;:26::i;:::-;32514:23;32526:4;32532;32514:11;:23::i;:::-;32570:9;-1:-1:-1;;;;;32553:44:0;32562:6;-1:-1:-1;;;;;32553:44:0;;32581:15;32553:44;;;;2073:25:1;;2061:2;2046:18;;1927:177;32553:44:0;;;;;;;;32053:552;;;;;;31928:677;;;:::o;31225:695::-;31374:15;31404:23;31442:12;31469:23;31507:12;31534:18;31566:19;31577:7;31566:10;:19::i;:::-;-1:-1:-1;;;;;31614:15:0;;;;;;:7;:15;;;;;;31359:226;;-1:-1:-1;31359:226:0;;-1:-1:-1;31359:226:0;;-1:-1:-1;31359:226:0;-1:-1:-1;31359:226:0;-1:-1:-1;31359:226:0;-1:-1:-1;31614:27:0;;31359:226;;31614:27;:::i;:::-;-1:-1:-1;;;;;31596:15:0;;;;;;;:7;:15;;;;;;;;:45;;;;31673:18;;;;;:7;:18;;;;;:38;;31695:15;;31673:38;:::i;:::-;-1:-1:-1;;;;;31652:18:0;;;;;;:7;:18;;;;;;;;:59;;;;31743:7;:18;;;;:38;;31765:15;;31743:38;:::i;32613:745::-;32764:15;32794:23;32832:12;32859:23;32897:12;32924:18;32956:19;32967:7;32956:10;:19::i;:::-;-1:-1:-1;;;;;33004:15:0;;;;;;:7;:15;;;;;;32749:226;;-1:-1:-1;32749:226:0;;-1:-1:-1;32749:226:0;;-1:-1:-1;32749:226:0;-1:-1:-1;32749:226:0;-1:-1:-1;32749:226:0;-1:-1:-1;33004:25:0;;33021:7;;33004:25;:::i;:::-;-1:-1:-1;;;;;32986:15:0;;;;;;:7;:15;;;;;;;;:43;;;;33058:7;:15;;;;:25;;33075:7;;33058:25;:::i;30598:619::-;30745:15;30775:23;30813:12;30840:23;30878:12;30905:18;30937:19;30948:7;30937:10;:19::i;:::-;-1:-1:-1;;;;;30985:15:0;;;;;;:7;:15;;;;;;30730:226;;-1:-1:-1;30730:226:0;;-1:-1:-1;30730:226:0;;-1:-1:-1;30730:226:0;-1:-1:-1;30730:226:0;-1:-1:-1;30730:226:0;-1:-1:-1;30985:25:0;;30730:226;;30985:25;:::i;36802:124::-;36866:7;36913:5;36903:7;;36893;:17;;;;:::i;:::-;:25;;;;:::i;36934:168::-;37031:7;37089:5;37073:13;;37063:7;:23;;;;:::i;36003:791::-;9918:1;36069:15;;:22;36066:433;;;36165:13;;36146:16;;36133:29;;:10;:29;:::i;:::-;:45;;;;:::i;:::-;36107:22;;:71;;;;;;;:::i;:::-;;;;-1:-1:-1;;36253:13:0;;36233:17;;36220:30;;:10;:30;:::i;:::-;:46;;;;:::i;:::-;36193:23;;:73;;;;;;;:::i;:::-;;;;-1:-1:-1;36066:433:0;;-1:-1:-1;36066:433:0;;9958:1;36287:15;;:23;36284:215;;;36385:13;;36365:17;;36352:30;;:10;:30;:::i;:::-;:46;;;;:::i;:::-;36326:22;;:72;;;;;;;:::i;:::-;;;;-1:-1:-1;;36474:13:0;;36453:18;;36440:31;;:10;:31;:::i;:::-;:47;;;;:::i;:::-;36413:23;;:74;;;;;;;:::i;:::-;;;;-1:-1:-1;;36284:215:0;36509:19;36531:10;:8;:10::i;:::-;36509:32;-1:-1:-1;36552:18:0;36573:26;36509:32;36573:10;:26;:::i;:::-;36651:4;36635:22;;;;:7;:22;;;;;;36552:47;;-1:-1:-1;36635:35:0;;36552:47;;36635:35;:::i;:::-;36626:4;36610:22;;;;:7;:22;;;;;;;;:60;;;;36685:11;:26;;;;;;36681:105;;;36767:4;36751:22;;;;:7;:22;;;;;;:35;;36776:10;;36751:35;:::i;:::-;36742:4;36726:22;;;;:7;:22;;;;;:60;36055:739;;36003:791;:::o;33366:141::-;33453:4;33444:7;;:14;;;;:::i;:::-;33434:7;:24;33482:10;;:17;;33494:4;;33482:17;:::i;:::-;33469:10;:30;-1:-1:-1;;33366:141:0:o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;842:180::-;901:6;954:2;942:9;933:7;929:23;925:32;922:52;;;970:1;967;960:12;922:52;-1:-1:-1;993:23:1;;842:180;-1:-1:-1;842:180:1:o;1027:131::-;-1:-1:-1;;;;;1102:31:1;;1092:42;;1082:70;;1148:1;1145;1138:12;1082:70;1027:131;:::o;1163:315::-;1231:6;1239;1292:2;1280:9;1271:7;1267:23;1263:32;1260:52;;;1308:1;1305;1298:12;1260:52;1347:9;1334:23;1366:31;1391:5;1366:31;:::i;:::-;1416:5;1468:2;1453:18;;;;1440:32;;-1:-1:-1;;;1163:315:1:o;1675:247::-;1734:6;1787:2;1775:9;1766:7;1762:23;1758:32;1755:52;;;1803:1;1800;1793:12;1755:52;1842:9;1829:23;1861:31;1886:5;1861:31;:::i;2109:316::-;2186:6;2194;2202;2255:2;2243:9;2234:7;2230:23;2226:32;2223:52;;;2271:1;2268;2261:12;2223:52;-1:-1:-1;;2294:23:1;;;2364:2;2349:18;;2336:32;;-1:-1:-1;2415:2:1;2400:18;;;2387:32;;2109:316;-1:-1:-1;2109:316:1:o;2430:456::-;2507:6;2515;2523;2576:2;2564:9;2555:7;2551:23;2547:32;2544:52;;;2592:1;2589;2582:12;2544:52;2631:9;2618:23;2650:31;2675:5;2650:31;:::i;:::-;2700:5;-1:-1:-1;2757:2:1;2742:18;;2729:32;2770:33;2729:32;2770:33;:::i;:::-;2430:456;;2822:7;;-1:-1:-1;;;2876:2:1;2861:18;;;;2848:32;;2430:456::o;3512:118::-;3598:5;3591:13;3584:21;3577:5;3574:32;3564:60;;3620:1;3617;3610:12;3635:309;3700:6;3708;3761:2;3749:9;3740:7;3736:23;3732:32;3729:52;;;3777:1;3774;3767:12;3729:52;3813:9;3800:23;3790:33;;3873:2;3862:9;3858:18;3845:32;3886:28;3908:5;3886:28;:::i;:::-;3933:5;3923:15;;;3635:309;;;;;:::o;3949:382::-;4014:6;4022;4075:2;4063:9;4054:7;4050:23;4046:32;4043:52;;;4091:1;4088;4081:12;4043:52;4130:9;4117:23;4149:31;4174:5;4149:31;:::i;:::-;4199:5;-1:-1:-1;4256:2:1;4241:18;;4228:32;4269:30;4228:32;4269:30;:::i;4336:388::-;4404:6;4412;4465:2;4453:9;4444:7;4440:23;4436:32;4433:52;;;4481:1;4478;4471:12;4433:52;4520:9;4507:23;4539:31;4564:5;4539:31;:::i;:::-;4589:5;-1:-1:-1;4646:2:1;4631:18;;4618:32;4659:33;4618:32;4659:33;:::i;4729:241::-;4785:6;4838:2;4826:9;4817:7;4813:23;4809:32;4806:52;;;4854:1;4851;4844:12;4806:52;4893:9;4880:23;4912:28;4934:5;4912:28;:::i;4975:127::-;5036:10;5031:3;5027:20;5024:1;5017:31;5067:4;5064:1;5057:15;5091:4;5088:1;5081:15;5107:275;5178:2;5172:9;5243:2;5224:13;;-1:-1:-1;;5220:27:1;5208:40;;5278:18;5263:34;;5299:22;;;5260:62;5257:88;;;5325:18;;:::i;:::-;5361:2;5354:22;5107:275;;-1:-1:-1;5107:275:1:o;5387:183::-;5447:4;5480:18;5472:6;5469:30;5466:56;;;5502:18;;:::i;:::-;-1:-1:-1;5547:1:1;5543:14;5559:4;5539:25;;5387:183::o;5575:662::-;5629:5;5682:3;5675:4;5667:6;5663:17;5659:27;5649:55;;5700:1;5697;5690:12;5649:55;5736:6;5723:20;5762:4;5786:60;5802:43;5842:2;5802:43;:::i;:::-;5786:60;:::i;:::-;5880:15;;;5966:1;5962:10;;;;5950:23;;5946:32;;;5911:12;;;;5990:15;;;5987:35;;;6018:1;6015;6008:12;5987:35;6054:2;6046:6;6042:15;6066:142;6082:6;6077:3;6074:15;6066:142;;;6148:17;;6136:30;;6186:12;;;;6099;;6066:142;;;-1:-1:-1;6226:5:1;5575:662;-1:-1:-1;;;;;;5575:662:1:o;6242:1283::-;6369:6;6377;6385;6438:2;6426:9;6417:7;6413:23;6409:32;6406:52;;;6454:1;6451;6444:12;6406:52;6494:9;6481:23;6523:18;6564:2;6556:6;6553:14;6550:34;;;6580:1;6577;6570:12;6550:34;6618:6;6607:9;6603:22;6593:32;;6663:7;6656:4;6652:2;6648:13;6644:27;6634:55;;6685:1;6682;6675:12;6634:55;6721:2;6708:16;6743:4;6767:60;6783:43;6823:2;6783:43;:::i;6767:60::-;6861:15;;;6943:1;6939:10;;;;6931:19;;6927:28;;;6892:12;;;;6967:19;;;6964:39;;;6999:1;6996;6989:12;6964:39;7023:11;;;;7043:217;7059:6;7054:3;7051:15;7043:217;;;7139:3;7126:17;7156:31;7181:5;7156:31;:::i;:::-;7200:18;;7076:12;;;;7238;;;;7043:217;;;7279:5;-1:-1:-1;;7322:18:1;;7309:32;;-1:-1:-1;;7353:16:1;;;7350:36;;;7382:1;7379;7372:12;7350:36;;7405:63;7460:7;7449:8;7438:9;7434:24;7405:63;:::i;:::-;7395:73;;;7515:2;7504:9;7500:18;7487:32;7477:42;;6242:1283;;;;;:::o;7530:356::-;7732:2;7714:21;;;7751:18;;;7744:30;7810:34;7805:2;7790:18;;7783:62;7877:2;7862:18;;7530:356::o;7891:127::-;7952:10;7947:3;7943:20;7940:1;7933:31;7983:4;7980:1;7973:15;8007:4;8004:1;7997:15;8023:168;8063:7;8129:1;8125;8121:6;8117:14;8114:1;8111:21;8106:1;8099:9;8092:17;8088:45;8085:71;;;8136:18;;:::i;:::-;-1:-1:-1;8176:9:1;;8023:168::o;8196:217::-;8236:1;8262;8252:132;;8306:10;8301:3;8297:20;8294:1;8287:31;8341:4;8338:1;8331:15;8369:4;8366:1;8359:15;8252:132;-1:-1:-1;8398:9:1;;8196:217::o;10038:128::-;10078:3;10109:1;10105:6;10102:1;10099:13;10096:39;;;10115:18;;:::i;:::-;-1:-1:-1;10151:9:1;;10038:128::o;12384:127::-;12445:10;12440:3;12436:20;12433:1;12426:31;12476:4;12473:1;12466:15;12500:4;12497:1;12490:15;12516:125;12556:4;12584:1;12581;12578:8;12575:34;;;12589:18;;:::i;:::-;-1:-1:-1;12626:9:1;;12516:125::o;12646:127::-;12707:10;12702:3;12698:20;12695:1;12688:31;12738:4;12735:1;12728:15;12762:4;12759:1;12752:15;12778:135;12817:3;-1:-1:-1;;12838:17:1;;12835:43;;;12858:18;;:::i;:::-;-1:-1:-1;12905:1:1;12894:13;;12778:135::o;15297:251::-;15367:6;15420:2;15408:9;15399:7;15395:23;15391:32;15388:52;;;15436:1;15433;15426:12;15388:52;15468:9;15462:16;15487:31;15512:5;15487:31;:::i;15553:461::-;15606:3;15644:5;15638:12;15671:6;15666:3;15659:19;15697:4;15726:2;15721:3;15717:12;15710:19;;15763:2;15756:5;15752:14;15784:1;15794:195;15808:6;15805:1;15802:13;15794:195;;;15873:13;;-1:-1:-1;;;;;15869:39:1;15857:52;;15929:12;;;;15964:15;;;;15905:1;15823:9;15794:195;;;-1:-1:-1;16005:3:1;;15553:461;-1:-1:-1;;;;;15553:461:1:o;16019:332::-;16226:6;16215:9;16208:25;16269:2;16264;16253:9;16249:18;16242:30;16189:4;16289:56;16341:2;16330:9;16326:18;16318:6;16289:56;:::i;:::-;16281:64;16019:332;-1:-1:-1;;;;16019:332:1:o;16356:881::-;16451:6;16482:2;16525;16513:9;16504:7;16500:23;16496:32;16493:52;;;16541:1;16538;16531:12;16493:52;16574:9;16568:16;16607:18;16599:6;16596:30;16593:50;;;16639:1;16636;16629:12;16593:50;16662:22;;16715:4;16707:13;;16703:27;-1:-1:-1;16693:55:1;;16744:1;16741;16734:12;16693:55;16773:2;16767:9;16796:60;16812:43;16852:2;16812:43;:::i;16796:60::-;16890:15;;;16972:1;16968:10;;;;16960:19;;16956:28;;;16921:12;;;;16996:19;;;16993:39;;;17028:1;17025;17018:12;16993:39;17052:11;;;;17072:135;17088:6;17083:3;17080:15;17072:135;;;17154:10;;17142:23;;17105:12;;;;17185;;;;17072:135;;;17226:5;16356:881;-1:-1:-1;;;;;;;16356:881:1:o;17954:184::-;18024:6;18077:2;18065:9;18056:7;18052:23;18048:32;18045:52;;;18093:1;18090;18083:12;18045:52;-1:-1:-1;18116:16:1;;17954:184;-1:-1:-1;17954:184:1:o;18422:245::-;18489:6;18542:2;18530:9;18521:7;18517:23;18513:32;18510:52;;;18558:1;18555;18548:12;18510:52;18590:9;18584:16;18609:28;18631:5;18609:28;:::i;22226:607::-;-1:-1:-1;;;;;22585:15:1;;;22567:34;;22632:2;22617:18;;22610:34;;;;22675:2;22660:18;;22653:34;;;;22718:2;22703:18;;22696:34;;;;22767:15;;;22761:3;22746:19;;22739:44;22547:3;22799:19;;22792:35;;;;22516:3;22501:19;;22226:607::o;22838:306::-;22926:6;22934;22942;22995:2;22983:9;22974:7;22970:23;22966:32;22963:52;;;23011:1;23008;23001:12;22963:52;23040:9;23034:16;23024:26;;23090:2;23079:9;23075:18;23069:25;23059:35;;23134:2;23123:9;23119:18;23113:25;23103:35;;22838:306;;;;;:::o;29214:582::-;29513:6;29502:9;29495:25;29556:6;29551:2;29540:9;29536:18;29529:34;29599:3;29594:2;29583:9;29579:18;29572:31;29476:4;29620:57;29672:3;29661:9;29657:19;29649:6;29620:57;:::i;:::-;-1:-1:-1;;;;;29713:32:1;;;;29708:2;29693:18;;29686:60;-1:-1:-1;29777:3:1;29762:19;29755:35;29612:65;29214:582;-1:-1:-1;;;29214:582:1:o

Swarm Source

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