ETH Price: $2,879.11 (-10.64%)
Gas: 13 Gwei

Token

RAWR (XD)
 

Overview

Max Total Supply

100,000,000 XD

Holders

69

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
105,885.939532959509862154 XD

Value
$0.00
0x3bc7c16569842389c019f2a36eafe22317eabe56
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
RAWR

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-30
*/

// SPDX-License-Identifier: MIT                                                                               
pragma solidity 0.8.17;

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

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

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);
}

interface IERC20Metadata is IERC20 {

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

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

    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override 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 _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    function _createInitialSupply(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        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);
    }
}

contract Ownable is Context {
    address private _owner;

    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) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    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);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function removeLiquidityETH(address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline) external returns (uint amountToken, uint amountETH);
}

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

contract RAWR is ERC20, Ownable {

    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWallet;

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address public treasuryAddress;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    uint256 public blockForPenaltyEnd;
    mapping (address => bool) public blacklist;
    address[] public earlyBuyers;
    uint256 public botsCaught;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    mapping (address => bool) public privateSaleWallets;
    mapping (address => uint256) public nextPrivateWalletSellDate;
    uint256 public maxPrivSaleSell = 1 ether;
    
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyTreasuryFee;
    uint256 public buyLiquidityFee;
    uint256 public buyBurnFee;

    uint256 public sellTotalFees;
    uint256 public sellTreasuryFee;
    uint256 public sellLiquidityFee;
    uint256 public sellBurnFee;

    uint256 public constant FEE_DIVISOR = 10000;

    uint256 public tokensForTreasury;
    uint256 public tokensForLiquidity;

    uint256 public lpWithdrawRequestTimestamp;
    uint256 public lpWithdrawRequestDuration = 1 seconds;
    bool public lpWithdrawRequestPending;
    uint256 public lpPercToWithDraw;

    uint256 public percentForLPBurn = 5; // 5 = .05%
    bool public lpBurnEnabled = false;
    uint256 public lpBurnFrequency = 1800 seconds;
    uint256 public lastLpBurnTime;
    
    uint256 public manualBurnFrequency = 30 seconds;
    uint256 public lastManualLpBurnTime;
    
    /******************/

    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

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

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event EnabledTrading();

    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedTreasuryAddress(address indexed newWallet);

    event UpdatedDevAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtEarlyBuyer(address sniper);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event AutoBurnLP(uint256 indexed tokensBurned);

    event ManualBurnLP(uint256 indexed tokensBurned);

    event TransferForeignToken(address token, uint256 amount);

    event UpdatedPrivateMaxSell(uint256 amount);

    event RequestedLPWithdraw();
    
    event WithdrewLPForMigration();

    event CanceledLpWithdrawRequest();

    constructor() ERC20("RAWR", "XD") payable {
        
        address newOwner = msg.sender; // can leave alone if owner is deployer.
        address _dexRouter;

        if(block.chainid == 1){
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2
        } else if(block.chainid == 5){
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2
        } else if(block.chainid == 56){
            _dexRouter = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BNB Chain: PCS V2
        } else if(block.chainid == 97){
            _dexRouter = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // BNB Chain: PCS V2
        } else if(block.chainid == 42161){
            _dexRouter = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506; // Arbitrum: SushiSwap
        } else {
            revert("Chain not configured");
        }

        // initialize router
        dexRouter = IDexRouter(_dexRouter);

        uint256 totalSupply = 1 * 1e8 * (10 ** decimals());
        
        maxBuyAmount = totalSupply * 1 / 100;
        maxSellAmount = totalSupply * 1 / 100;
        maxWallet = totalSupply * 1 / 100;
        swapTokensAtAmount = totalSupply * 25 / 100000;

        buyTreasuryFee = 500;
        buyLiquidityFee = 0;
        buyBurnFee = 0;
        buyTotalFees = buyTreasuryFee + buyLiquidityFee + buyBurnFee;

        sellTreasuryFee = 500;
        sellLiquidityFee = 0;
        sellBurnFee = 0;
        sellTotalFees = sellTreasuryFee + sellLiquidityFee + sellBurnFee;

        treasuryAddress = address(msg.sender);

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);
        _excludeFromMaxTransaction(address(treasuryAddress), true);
        _excludeFromMaxTransaction(address(dexRouter), true);

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(treasuryAddress), true);
        excludeFromFees(address(dexRouter), true);

        
        _createInitialSupply(address(this), totalSupply * 99 / 100);  // update with % for LP
        _createInitialSupply(newOwner, totalSupply - balanceOf(address(this)));
        transferOwnership(newOwner);
    }

    receive() external payable {}
    
    function enableTrading(uint256 blocksForPenalty) external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        require(blocksForPenalty <= 50, "Cannot make penalty blocks more than 50");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty;
        emit EnabledTrading();
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        transferDelayEnabled = false;
        maxBuyAmount = totalSupply();
        maxSellAmount = totalSupply();
        emit RemovedLimits();
    }

    function getEarlyBuyers() external view returns (address[] memory){
        return earlyBuyers;
    }

    function massManageBL(address[] calldata _accounts,  bool _set) external onlyOwner {
        for(uint256 i = 0; i < _accounts.length; i++){
            blacklist[_accounts[i]] = _set;
        }
    }
    function emergencyUpdateRouter(address router) external onlyOwner {
        require(!tradingActive, "Cannot update after trading is functional");
        dexRouter = IDexRouter(router);
    }
    
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }
    
    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000) / (10 ** decimals()), "Cannot set max buy amount lower than 0.1%");
        maxBuyAmount = newNum * (10 ** decimals());
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }
    
    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000) / (10 ** decimals()), "Cannot set max sell amount lower than 0.1%");
        maxSellAmount = newNum * (10 ** decimals());
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    function updateMaxWallet(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 100) / (10 ** decimals()), "Cannot set max wallet amount lower than %");
        maxWallet = newNum * (10 ** decimals());
        emit UpdatedMaxWalletAmount(maxWallet);
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 1 / 1000, "Swap amount cannot be higher than 0.1% total supply.");
  	    swapTokensAtAmount = newAmount;
  	}
    
    function _excludeFromMaxTransaction(address updAds, bool isExcluded) private {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }
     
    function excludeFromMaxTransaction(address updAds, bool isEx) external onlyOwner {
        if(!isEx){
            require(updAds != lpPair, "Cannot remove uniswap pair from max txn");
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != lpPair, "The pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        _excludeFromMaxTransaction(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateBuyFees(uint256 _treasuryFee, uint256 _liquidityFee, uint256 _burnFee) external onlyOwner {
        buyTreasuryFee = _treasuryFee;
        buyLiquidityFee = _liquidityFee;
        buyBurnFee = _burnFee;
        buyTotalFees = buyTreasuryFee + buyLiquidityFee + buyBurnFee;
        require(buyTotalFees <= 30 * FEE_DIVISOR / 100, "Must keep fees at 10% or less");
    }

    function updateSellFees(uint256 _treasuryFee, uint256 _liquidityFee,uint256 _burnFee) external onlyOwner {
        sellTreasuryFee = _treasuryFee;
        sellLiquidityFee = _liquidityFee;
        sellBurnFee = _burnFee;
        sellTotalFees = sellTreasuryFee + sellLiquidityFee + sellBurnFee;
        require(sellTotalFees <= 30 * FEE_DIVISOR / 100, "Must keep fees at 20% or less");
    }

    function massExcludeFromFees(address[] calldata accounts, bool excluded) external onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++){
            _isExcludedFromFees[accounts[i]] = excluded;
            emit ExcludeFromFees(accounts[i], excluded);
        }
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function _transfer(address from, address to, uint256 amount) internal override {

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

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

        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(!_isExcludedFromFees[to]){
                revert("Private sale cannot transfer and must sell only or transfer to a whitelisted address.");
            }
        }
        
        if(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]){
                
                // 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 - 2 && _holderLastTransferTimestamp[to] < block.number - 2, "_transfer:: Transfer Delay enabled.  Try again later.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxBuyAmount, "Buy transfer amount exceeds the max buy.");
                    require(amount + balanceOf(to) <= maxWallet, "Cannot exceed max wallet");
                } 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxSellAmount, "Sell transfer amount exceeds the max sell.");
                }
                else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(amount + balanceOf(to) <= maxWallet, "Cannot exceed max wallet");
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if(canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            swapping = true;
            swapBack();
            swapping = false;
        }

        if(!swapping && automatedMarketMakerPairs[to] && lpBurnEnabled && block.timestamp >= lastLpBurnTime + lpBurnFrequency && !_isExcludedFromFees[from]){
            autoBurnLiquidityPairTokens();
        }

        bool takeFee = true;
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        uint256 tokensToBurn = 0;

        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // bot/sniper penalty.
            if(earlyBuyPenaltyInEffect() && automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to] && !_isExcludedFromFees[to] && buyTotalFees > 0){
                
                if(!earlyBuyPenaltyInEffect()){
                    // reduce by 1 wei per max buy over what Uniswap will allow to revert bots as best as possible to limit erroneously blacklisted wallets. First bot will get in and be blacklisted, rest will be reverted (*cross fingers*)
                    maxBuyAmount -= 1;
                }

                if(!blacklist[to]){
                    blacklist[to] = true;
                    botsCaught += 1;
                    earlyBuyers.push(to);
                    emit CaughtEarlyBuyer(to);
                }

                fees = amount * buyTotalFees / FEE_DIVISOR;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForTreasury += fees * buyTreasuryFee / buyTotalFees;
                tokensToBurn = fees * buyBurnFee / buyTotalFees;
            }

            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees / FEE_DIVISOR;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForTreasury += fees * sellTreasuryFee / sellTotalFees;
                tokensToBurn = fees * sellBurnFee / buyTotalFees;
            }

            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount * buyTotalFees / FEE_DIVISOR;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForTreasury += fees * buyTreasuryFee / buyTotalFees;
                tokensToBurn = fees * buyBurnFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
                if(tokensToBurn > 0){
                    super._transfer(address(this), address(0xdead), tokensToBurn);
                }
            }
        	
        	amount -= fees;
        }

        super._transfer(from, to, amount);
    }

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

    function swapTokensForEth(uint256 tokenAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

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

        // make the swap
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(dexRouter), tokenAmount);

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

    function swapBack() private {

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForTreasury;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 10){
            contractBalance = swapTokensAtAmount * 10;
        }

        bool success;
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        
        swapTokensForEth(contractBalance - liquidityTokens); 
        
        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;

        uint256 ethForTreasury = ethBalance * tokensForTreasury / (totalTokensToSwap - (tokensForLiquidity/2));

        ethForLiquidity -= ethForTreasury;
            
        tokensForLiquidity = 0;
        tokensForTreasury = 0;
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

        (success,) = address(treasuryAddress).call{value: address(this).balance}("");
    }

    function transferForeignToken(address _token, address _to) external onlyOwner returns (bool _sent) {
        require(_token != address(0), "_token address cannot be 0");
        require(_token != address(this) || !tradingActive, "Can't withdraw native tokens while trading is active");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    // withdraw ETH if stuck or someone sends to the address
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function setTreasuryAddress(address _treasuryAddress) external onlyOwner {
        require(_treasuryAddress != address(0), "_treasuryAddress address cannot be 0");
        treasuryAddress = payable(_treasuryAddress);
        emit UpdatedTreasuryAddress(_treasuryAddress);
    }

    // force Swap back if slippage issues.
    function forceSwapBack() external onlyOwner {
        require(balanceOf(address(this)) >= swapTokensAtAmount, "Can only swap when token amount is at or higher than restriction");
        swapping = true;
        swapBack();
        swapping = false;
        emit OwnerForcedSwapBack(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] * (sellLiquidityFee + sellTreasuryFee))/100;
    }

    function setPrivateSaleMaxSell(uint256 amount) external onlyOwner{
        require(amount >= 10 && amount <= 50000, "Must set between 0.1 and 500 BNB");
        maxPrivSaleSell = amount * 1e16;
        emit UpdatedPrivateMaxSell(amount);
    }

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

        require(wallets.length == amountsInTokens.length, "arrays must be the same length");
        require(wallets.length < 300, "Can only airdrop 300 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] * (10 ** decimals());
            super._transfer(msg.sender, wallet, amount);
        }

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

        // 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
            address(this),
            block.timestamp
        );
    }

    function setAutoLPBurnSettings(uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled) external onlyOwner {
        require(_frequencyInSeconds >= 600, "cannot set buyback more often than every 10 minutes");
        require(_percent <= 1000 && _percent >= 0, "Must set auto LP burn percent between 0% and 10%");
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }
    
    function autoBurnLiquidityPairTokens() internal {
        
        lastLpBurnTime = block.timestamp;
        
        lastManualLpBurnTime = block.timestamp;
        uint256 lpBalance = IERC20(lpPair).balanceOf(address(this));
        uint256 tokenBalance = balanceOf(address(this));
        uint256 lpAmount = lpBalance * percentForLPBurn / 10000;
        uint256 initialEthBalance = address(this).balance;

        // approve token transfer to cover all possible scenarios
        IERC20(lpPair).approve(address(dexRouter), lpAmount);

        // remove the liquidity
        dexRouter.removeLiquidityETH(
            address(this),
            lpAmount,
            1, // slippage is unavoidable
            1, // slippage is unavoidable
            address(this),
            block.timestamp
        );

        uint256 deltaTokenBalance = balanceOf(address(this)) - tokenBalance;
        if(deltaTokenBalance > 0){
            super._transfer(address(this), address(0xdead), deltaTokenBalance);
        }

        uint256 deltaEthBalance = address(this).balance - initialEthBalance;

        if(deltaEthBalance > 0){
            buyBackTokens(deltaEthBalance);
        }

        emit AutoBurnLP(lpAmount);
    }

    function manualBurnLiquidityPairTokens(uint256 percent) external onlyOwner {
        require(percent <=2000, "May not burn more than 20% of contract's LP at a time");
        require(lastManualLpBurnTime <= block.timestamp - manualBurnFrequency, "Burn too soon");
        lastManualLpBurnTime = block.timestamp;
        uint256 lpBalance = IERC20(lpPair).balanceOf(address(this));
        uint256 tokenBalance = balanceOf(address(this));
        uint256 lpAmount = lpBalance * percent / 10000;
        uint256 initialEthBalance = address(this).balance;

        // approve token transfer to cover all possible scenarios
        IERC20(lpPair).approve(address(dexRouter), lpAmount);

        // remove the liquidity
        dexRouter.removeLiquidityETH(
            address(this),
            lpAmount,
            1, // slippage is unavoidable
            1, // slippage is unavoidable
            address(this),
            block.timestamp
        );

        uint256 deltaTokenBalance = balanceOf(address(this)) - tokenBalance;
        if(deltaTokenBalance > 0){
            super._transfer(address(this), address(0xdead), deltaTokenBalance);
        }

        uint256 deltaEthBalance = address(this).balance - initialEthBalance;

        if(deltaEthBalance > 0){
            buyBackTokens(deltaEthBalance);
        }

        emit ManualBurnLP(lpAmount);
    }

    function buyBackTokens(uint256 amountInWei) internal {
        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);

        dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountInWei}(
            0,
            path,
            address(0xdead),
            block.timestamp
        );
    }

    function requestToWithdrawLP(uint256 percToWithdraw) external onlyOwner {
        require(!lpWithdrawRequestPending, "Cannot request again until first request is over.");
        require(percToWithdraw <= 100 && percToWithdraw > 0, "Need to set between 1-100%");
        lpWithdrawRequestTimestamp = block.timestamp;
        lpWithdrawRequestPending = true;
        lpPercToWithDraw = percToWithdraw;
        emit RequestedLPWithdraw();
    }

    function nextAvailableLpWithdrawDate() public view returns (uint256){
        if(lpWithdrawRequestPending){
            return lpWithdrawRequestTimestamp + lpWithdrawRequestDuration;
        }
        else {
            return 0;  // 0 means no open requests
        }
    }

    function withdrawRequestedLP() external onlyOwner {
        require(block.timestamp >= nextAvailableLpWithdrawDate() && nextAvailableLpWithdrawDate() > 0, "Must request and wait.");
        lpWithdrawRequestTimestamp = 0;
        lpWithdrawRequestPending = false;

        uint256 amtToWithdraw = IERC20(address(lpPair)).balanceOf(address(this)) * lpPercToWithDraw / 100;
        
        lpPercToWithDraw = 0;

        IERC20(lpPair).transfer(msg.sender, amtToWithdraw);
    }

    function cancelLPWithdrawRequest() external onlyOwner {
        lpWithdrawRequestPending = false;
        lpPercToWithDraw = 0;
        lpWithdrawRequestTimestamp = 0;
        emit CanceledLpWithdrawRequest();
    }
}

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":true,"internalType":"uint256","name":"tokensBurned","type":"uint256"}],"name":"AutoBurnLP","type":"event"},{"anonymous":false,"inputs":[],"name":"CanceledLpWithdrawRequest","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":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokensBurned","type":"uint256"}],"name":"ManualBurnLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","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":[],"name":"RequestedLPWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedDevAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UpdatedPrivateMaxSell","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedTreasuryAddress","type":"event"},{"anonymous":false,"inputs":[],"name":"WithdrewLPForMigration","type":"event"},{"inputs":[],"name":"FEE_DIVISOR","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":[{"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":[{"internalType":"address","name":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cancelLPWithdrawRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract 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":"uint256","name":"","type":"uint256"}],"name":"earlyBuyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"emergencyUpdateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","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":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getEarlyBuyers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrivateSaleMaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPercToWithDraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWithdrawRequestDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWithdrawRequestPending","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWithdrawRequestTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"massExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_accounts","type":"address[]"},{"internalType":"bool","name":"_set","type":"bool"}],"name":"massManageBL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPrivSaleSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextAvailableLpWithdrawDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nextPrivateWalletSellDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"privateSaleWallets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percToWithdraw","type":"uint256"}],"name":"requestToWithdrawLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","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":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","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":"amount","type":"uint256"}],"name":"setPrivateSaleMaxSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryAddress","type":"address"}],"name":"setTreasuryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTreasury","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"treasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawRequestedLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000600d556012805462ffffff19166001908117909155670de0b6b3a76400006015556017805460ff1990811683179091556023919091556005602655602780549091169055610708602855601e602a5560046080908152632920aba960e11b60a052610100604052600260c090815261161160f21b60e0526003620000868382620007cf565b506004620000958282620007cf565b5050506000620000aa6200043760201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062005f03833981519152908290a350336000466001036200010f5750737a250d5630b4cf539739df2c5dacb4c659f2488d620001f1565b46600503620001345750737a250d5630b4cf539739df2c5dacb4c659f2488d620001f1565b466038036200015957507310ed43c718714eb63d5aa57b78b54704e256024e620001f1565b466061036200017e575073d99d1c33f9fc3444f8101754abc46c52416550d1620001f1565b4661a4b103620001a45750731b02da8cb0d097eb8d57a175b88c7d8b47997506620001f1565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b600980546001600160a01b0319166001600160a01b038316179055600062000217601290565b6200022490600a620009b0565b62000234906305f5e100620009c8565b9050606462000245826001620009c8565b620002519190620009e2565b600655606462000263826001620009c8565b6200026f9190620009e2565b600755606462000281826001620009c8565b6200028d9190620009e2565b600855620186a0620002a1826019620009c8565b620002ad9190620009e2565b600b556101f460198190556000601a819055601b81905590620002d290829062000a05565b620002de919062000a05565b6018556101f4601d8190556000601e819055601f819055906200030390829062000a05565b6200030f919062000a05565b601c55600c80546001600160a01b03191633179055620003318360016200043b565b6200033e3060016200043b565b6200034d61dead60016200043b565b600c5462000366906001600160a01b031660016200043b565b6009546200037f906001600160a01b031660016200043b565b6200038c8360016200049e565b620003993060016200049e565b620003a861dead60016200049e565b600c54620003c1906001600160a01b031660016200049e565b600954620003da906001600160a01b031660016200049e565b62000400306064620003ee846063620009c8565b620003fa9190620009e2565b62000548565b3060009081526020819052604090205462000423908490620003fa908462000a1b565b6200042e836200062d565b50505062000a31565b3390565b6001600160a01b0382166000818152602d6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6005546001600160a01b03163314620004e95760405162461bcd60e51b8152602060048201819052602482015260008051602062005ee38339815191526044820152606401620001e8565b6001600160a01b0382166000818152602c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620005a05760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620001e8565b8060026000828254620005b4919062000a05565b90915550506001600160a01b03821660009081526020819052604081208054839290620005e390849062000a05565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620006785760405162461bcd60e51b8152602060048201819052602482015260008051602062005ee38339815191526044820152606401620001e8565b6001600160a01b038116620006df5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620001e8565b6005546040516001600160a01b0380841692169060008051602062005f0383398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200075557607f821691505b6020821081036200077657634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620007ca57600081815260208120601f850160051c81016020861015620007a55750805b601f850160051c820191505b81811015620007c657828155600101620007b1565b5050505b505050565b81516001600160401b03811115620007eb57620007eb6200072a565b6200080381620007fc845462000740565b846200077c565b602080601f8311600181146200083b5760008415620008225750858301515b600019600386901b1c1916600185901b178555620007c6565b600085815260208120601f198616915b828110156200086c578886015182559484019460019091019084016200084b565b50858210156200088b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620008f2578160001904821115620008d657620008d66200089b565b80851615620008e457918102915b93841c9390800290620008b6565b509250929050565b6000826200090b57506001620009aa565b816200091a57506000620009aa565b81600181146200093357600281146200093e576200095e565b6001915050620009aa565b60ff8411156200095257620009526200089b565b50506001821b620009aa565b5060208310610133831016604e8410600b841016171562000983575081810a620009aa565b6200098f8383620008b1565b8060001904821115620009a657620009a66200089b565b0290505b92915050565b6000620009c160ff841683620008fa565b9392505050565b8082028115828204841417620009aa57620009aa6200089b565b60008262000a0057634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620009aa57620009aa6200089b565b81810381811115620009aa57620009aa6200089b565b6154a28062000a416000396000f3fe6080604052600436106104b95760003560e01c80638da5cb5b1161026b578063c7c61e2c1161014f578063eb472fc4116100c1578063f5648a4f11610085578063f5648a4f14610ddf578063f637434214610df4578063f8b45b0514610e0a578063f9f92be414610e20578063fd361d0e14610e50578063fe72b27a14610e6a57600080fd5b8063eb472fc414610d5d578063ee40166e14610d7d578063ee44b44e14610d93578063f11a24d314610da9578063f2fde38b14610dbf57600080fd5b8063dc3f0d0f11610113578063dc3f0d0f14610c96578063dd62ed3e14610cb6578063e2f4560514610cfc578063e71dc3f514610d12578063e884f26014610d28578063ead010ae14610d3d57600080fd5b8063c7c61e2c14610c1b578063c876d0b914610c30578063cc2ffe7c14610c4a578063d257b34f14610c60578063d85ba06314610c8057600080fd5b8063a9059cbb116101e8578063bbc0c742116101ac578063bbc0c74214610b5c578063bd5fb92014610b7b578063befd2fac14610b9b578063c024666814610bbb578063c17b5b8c14610bdb578063c5f956af14610bfb57600080fd5b8063a9059cbb14610ab0578063acee28d114610ad0578063adb873bd14610ae6578063afd6ce6114610afc578063b62496f514610b2c57600080fd5b80639e93ad8e1161022f5780639e93ad8e14610a385780639ec22c0e14610a4e578063a457c2d714610a64578063a4c82a0014610a84578063a62068ce14610a9a57600080fd5b80638da5cb5b146109a35780638e38b7cb146109c157806395d89b41146109e15780639a5bd2dd146109f65780639a7a23d614610a1857600080fd5b806358a6d5311161039d578063713d09741161030f578063763cef49116102d3578063763cef4914610902578063783102eb146109175780638095d5641461092d57806382aa7c681461094d5780638366e79a1461096d57806388e765ff1461098d57600080fd5b8063713d097414610883578063715018a614610898578063730c1888146108ad578063751039fc146108cd5780637571336a146108e257600080fd5b80636a486a8e116103615780636a486a8e146107ec5780636b0a894c146108025780636b2fb124146108185780636ddd17131461082e57806370a082311461084e578063712c29851461086e57600080fd5b806358a6d5311461075c5780635c068a8c146107735780635c3352d3146107895780636605bfda146107b657806366d602ae146107d657600080fd5b80631a8145bb116104365780632e82f1a0116103fa5780632e82f1a0146106b7578063313ce567146106d157806339509351146106ed578063452ed4f11461070d5780634a62bb651461072d57806351f205e41461074757600080fd5b80631a8145bb1461062b5780631c499ab01461064157806323b872dd146106615780632be32b61146106815780632c3e486c146106a157600080fd5b80631805805b1161047d5780631805805b146105a857806318160ddd146105ca578063184c16c5146105df57806318e1c123146105f5578063199ffc721461061557600080fd5b8063058054c9146104c557806306fdde03146104ee5780630758d92414610510578063095ea7b31461054857806310d5de531461057857600080fd5b366104c057005b600080fd5b3480156104d157600080fd5b506104db60225481565b6040519081526020015b60405180910390f35b3480156104fa57600080fd5b50610503610e8a565b6040516104e59190614b37565b34801561051c57600080fd5b50600954610530906001600160a01b031681565b6040516001600160a01b0390911681526020016104e5565b34801561055457600080fd5b50610568610563366004614b9d565b610f1c565b60405190151581526020016104e5565b34801561058457600080fd5b50610568610593366004614bc9565b602d6020526000908152604090205460ff1681565b3480156105b457600080fd5b506105c86105c3366004614bc9565b610f33565b005b3480156105d657600080fd5b506002546104db565b3480156105eb57600080fd5b506104db602a5481565b34801561060157600080fd5b506105c8610610366004614bed565b610ff2565b34801561062157600080fd5b506104db60265481565b34801561063757600080fd5b506104db60215481565b34801561064d57600080fd5b506105c861065c366004614bed565b6110c6565b34801561066d57600080fd5b5061056861067c366004614c06565b6111d2565b34801561068d57600080fd5b506105c861069c366004614bed565b61127c565b3480156106ad57600080fd5b506104db60285481565b3480156106c357600080fd5b506027546105689060ff1681565b3480156106dd57600080fd5b50604051601281526020016104e5565b3480156106f957600080fd5b50610568610708366004614b9d565b611389565b34801561071957600080fd5b50600a54610530906001600160a01b031681565b34801561073957600080fd5b506012546105689060ff1681565b34801561075357600080fd5b506105c86113c5565b34801561076857600080fd5b50600e544310610568565b34801561077f57600080fd5b506104db60195481565b34801561079557600080fd5b506104db6107a4366004614bc9565b60146020526000908152604090205481565b3480156107c257600080fd5b506105c86107d1366004614bc9565b6114ce565b3480156107e257600080fd5b506104db60075481565b3480156107f857600080fd5b506104db601c5481565b34801561080e57600080fd5b506104db60115481565b34801561082457600080fd5b506104db601d5481565b34801561083a57600080fd5b506012546105689062010000900460ff1681565b34801561085a57600080fd5b506104db610869366004614bc9565b6115a4565b34801561087a57600080fd5b506104db6115bf565b34801561088f57600080fd5b506104db6115e8565b3480156108a457600080fd5b506105c86117e4565b3480156108b957600080fd5b506105c86108c8366004614c55565b611858565b3480156108d957600080fd5b506105c8611981565b3480156108ee57600080fd5b506105c86108fd366004614c8e565b6119f8565b34801561090e57600080fd5b506105c8611ac0565b34801561092357600080fd5b506104db60255481565b34801561093957600080fd5b506105c8610948366004614cc7565b611c61565b34801561095957600080fd5b506105c8610968366004614bed565b611d21565b34801561097957600080fd5b50610568610988366004614cf3565b611e15565b34801561099957600080fd5b506104db60065481565b3480156109af57600080fd5b506005546001600160a01b0316610530565b3480156109cd57600080fd5b506105c86109dc366004614d21565b61204f565b3480156109ed57600080fd5b506105036120f0565b348015610a0257600080fd5b50610a0b6120ff565b6040516104e59190614de0565b348015610a2457600080fd5b506105c8610a33366004614c8e565b612160565b348015610a4457600080fd5b506104db61271081565b348015610a5a57600080fd5b506104db602b5481565b348015610a7057600080fd5b50610568610a7f366004614b9d565b612254565b348015610a9057600080fd5b506104db60295481565b348015610aa657600080fd5b506104db600e5481565b348015610abc57600080fd5b50610568610acb366004614b9d565b6122ed565b348015610adc57600080fd5b506104db60155481565b348015610af257600080fd5b506104db601f5481565b348015610b0857600080fd5b50610568610b17366004614bc9565b60136020526000908152604090205460ff1681565b348015610b3857600080fd5b50610568610b47366004614bc9565b602e6020526000908152604090205460ff1681565b348015610b6857600080fd5b5060125461056890610100900460ff1681565b348015610b8757600080fd5b506105c8610b96366004614d21565b6122fa565b348015610ba757600080fd5b506105c8610bb6366004614bed565b612400565b348015610bc757600080fd5b506105c8610bd6366004614c8e565b612536565b348015610be757600080fd5b506105c8610bf6366004614cc7565b6125bf565b348015610c0757600080fd5b50600c54610530906001600160a01b031681565b348015610c2757600080fd5b506105c861267a565b348015610c3c57600080fd5b506017546105689060ff1681565b348015610c5657600080fd5b506104db60205481565b348015610c6c57600080fd5b506105c8610c7b366004614bed565b6126e3565b348015610c8c57600080fd5b506104db60185481565b348015610ca257600080fd5b506105c8610cb1366004614bed565b61282e565b348015610cc257600080fd5b506104db610cd1366004614cf3565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610d0857600080fd5b506104db600b5481565b348015610d1e57600080fd5b506104db601b5481565b348015610d3457600080fd5b506105c861293c565b348015610d4957600080fd5b506105c8610d58366004614ec9565b612972565b348015610d6957600080fd5b50610530610d78366004614bed565b612f20565b348015610d8957600080fd5b506104db600d5481565b348015610d9f57600080fd5b506104db60235481565b348015610db557600080fd5b506104db601a5481565b348015610dcb57600080fd5b506105c8610dda366004614bc9565b612f4a565b348015610deb57600080fd5b506105c8613035565b348015610e0057600080fd5b506104db601e5481565b348015610e1657600080fd5b506104db60085481565b348015610e2c57600080fd5b50610568610e3b366004614bc9565b600f6020526000908152604090205460ff1681565b348015610e5c57600080fd5b506024546105689060ff1681565b348015610e7657600080fd5b506105c8610e85366004614bed565b6130a1565b606060038054610e9990614f94565b80601f0160208091040260200160405190810160405280929190818152602001828054610ec590614f94565b8015610f125780601f10610ee757610100808354040283529160200191610f12565b820191906000526020600020905b815481529060010190602001808311610ef557829003601f168201915b5050505050905090565b6000610f2933848461339b565b5060015b92915050565b6005546001600160a01b03163314610f665760405162461bcd60e51b8152600401610f5d90614fce565b60405180910390fd5b601254610100900460ff1615610fd05760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401610f5d565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461101c5760405162461bcd60e51b8152600401610f5d90614fce565b600a811015801561102f575061c3508111155b61107b5760405162461bcd60e51b815260206004820181905260248201527f4d75737420736574206265747765656e20302e3120616e642035303020424e426044820152606401610f5d565b61108c81662386f26fc10000615019565b6015556040518181527f0320a651094de4f5fc35c0f1c336811904e8f465b6599a93eb0dec4919b8fec5906020015b60405180910390a150565b6005546001600160a01b031633146110f05760405162461bcd60e51b8152600401610f5d90614fce565b6110fc6012600a615114565b606461110760025490565b611112906001615019565b61111c9190615123565b6111269190615123565b8110156111875760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f776044820152686572207468616e202560b81b6064820152608401610f5d565b6111936012600a615114565b61119d9082615019565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020016110bb565b60006111df8484846134bf565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156112645760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610f5d565b611271853385840361339b565b506001949350505050565b6005546001600160a01b031633146112a65760405162461bcd60e51b8152600401610f5d90614fce565b6112b26012600a615114565b6103e86112be60025490565b6112c9906001615019565b6112d39190615123565b6112dd9190615123565b81101561133e5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610f5d565b61134a6012600a615114565b6113549082615019565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020016110bb565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610f299185906113c0908690615145565b61339b565b6005546001600160a01b031633146113ef5760405162461bcd60e51b8152600401610f5d90614fce565b600b546113fb306115a4565b1015611471576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610f5d565b600a805460ff60a01b1916600160a01b17905561148c614291565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146114f85760405162461bcd60e51b8152600401610f5d90614fce565b6001600160a01b03811661155a5760405162461bcd60e51b8152602060048201526024808201527f5f74726561737572794164647265737320616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610f5d565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b6001600160a01b031660009081526020819052604090205490565b60245460009060ff16156115e2576023546022546115dd9190615145565b905090565b50600090565b604080516002808252606082018352600092839291906020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611656573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167a9190615158565b8160008151811061168d5761168d615175565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106116c1576116c1615175565b6001600160a01b039290921660209283029190910182015260408051600280825260608201835260009391929091830190803683370190505060095460155460405163d06ca61f60e01b81529293506001600160a01b039091169163d06ca61f9161173091869060040161518b565b600060405180830381865afa15801561174d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261177591908101906151ac565b90506064601d54601e546117899190615145565b8260018151811061179c5761179c615175565b60200260200101516117ae9190615019565b6117b89190615123565b816001815181106117cb576117cb615175565b60200260200101516117dd9190615145565b9250505090565b6005546001600160a01b0316331461180e5760405162461bcd60e51b8152600401610f5d90614fce565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146118825760405162461bcd60e51b8152600401610f5d90614fce565b6102588310156118f05760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610f5d565b6103e88211158015611900575060015b6119655760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610f5d565b6028929092556026556027805460ff1916911515919091179055565b6005546001600160a01b031633146119ab5760405162461bcd60e51b8152600401610f5d90614fce565b6012805460ff199081169091556017805490911690556002546006556002546007556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b03163314611a225760405162461bcd60e51b8152600401610f5d90614fce565b80611a9557600a546001600160a01b0390811690831603611a955760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610f5d565b6001600160a01b03919091166000908152602d60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611aea5760405162461bcd60e51b8152600401610f5d90614fce565b611af26115bf565b4210158015611b0857506000611b066115bf565b115b611b4d5760405162461bcd60e51b815260206004820152601660248201527526bab9ba103932b8bab2b9ba1030b732103bb0b4ba1760511b6044820152606401610f5d565b600060228190556024805460ff19168155602554600a546040516370a0823160e01b81523060048201526064936001600160a01b03909216916370a082319101602060405180830381865afa158015611baa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bce919061523d565b611bd89190615019565b611be29190615123565b6000602555600a5460405163a9059cbb60e01b8152336004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611c39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5d9190615256565b5050565b6005546001600160a01b03163314611c8b5760405162461bcd60e51b8152600401610f5d90614fce565b6019839055601a829055601b81905580611ca58385615145565b611caf9190615145565b6018556064611cc1612710601e615019565b611ccb9190615123565b6018541115611d1c5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610f5d565b505050565b6005546001600160a01b03163314611d4b5760405162461bcd60e51b8152600401610f5d90614fce565b601254610100900460ff1615611da35760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610f5d565b6032811115611dc45760405162461bcd60e51b8152600401610f5d90615273565b6012805462ffff0019166201010017905543600d819055611de6908290615145565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b03163314611e425760405162461bcd60e51b8152600401610f5d90614fce565b6001600160a01b038316611e985760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610f5d565b6001600160a01b03831630141580611eb85750601254610100900460ff16155b611f215760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610f5d565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611f68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f8c919061523d565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611fdf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120039190615256565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146120795760405162461bcd60e51b8152600401610f5d90614fce565b60005b828110156120ea5781600f600086868581811061209b5761209b615175565b90506020020160208101906120b09190614bc9565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806120e2816152ba565b91505061207c565b50505050565b606060048054610e9990614f94565b60606010805480602002602001604051908101604052809291908181526020018280548015610f1257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612139575050505050905090565b6005546001600160a01b0316331461218a5760405162461bcd60e51b8152600401610f5d90614fce565b600a546001600160a01b039081169083160361220e5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610f5d565b61221882826143f3565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156122d65760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610f5d565b6122e3338585840361339b565b5060019392505050565b6000610f293384846134bf565b6005546001600160a01b031633146123245760405162461bcd60e51b8152600401610f5d90614fce565b60005b828110156120ea5781602c600086868581811061234657612346615175565b905060200201602081019061235b9190614bc9565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905583838281811061239557612395615175565b90506020020160208101906123aa9190614bc9565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7836040516123e6911515815260200190565b60405180910390a2806123f8816152ba565b915050612327565b6005546001600160a01b0316331461242a5760405162461bcd60e51b8152600401610f5d90614fce565b60245460ff16156124975760405162461bcd60e51b815260206004820152603160248201527f43616e6e6f74207265717565737420616761696e20756e74696c206669727374604482015270103932b8bab2b9ba1034b99037bb32b91760791b6064820152608401610f5d565b606481111580156124a85750600081115b6124f45760405162461bcd60e51b815260206004820152601a60248201527f4e65656420746f20736574206265747765656e20312d313030250000000000006044820152606401610f5d565b426022556024805460ff1916600117905560258190556040517fd99a77b2f3951cd076e75814e44db497e6abc203dd251329da0b62c288f9f48b90600090a150565b6005546001600160a01b031633146125605760405162461bcd60e51b8152600401610f5d90614fce565b6001600160a01b0382166000818152602c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146125e95760405162461bcd60e51b8152600401610f5d90614fce565b601d839055601e829055601f819055806126038385615145565b61260d9190615145565b601c55606461261f612710601e615019565b6126299190615123565b601c541115611d1c5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610f5d565b6005546001600160a01b031633146126a45760405162461bcd60e51b8152600401610f5d90614fce565b6024805460ff191690556000602581905560228190556040517ffbcc1c208c9c4d1d9f557267b55c5ae316e74ce676a0db72ef18c6d5f5767c619190a1565b6005546001600160a01b0316331461270d5760405162461bcd60e51b8152600401610f5d90614fce565b620186a061271a60025490565b612725906001615019565b61272f9190615123565b81101561279c5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610f5d565b6103e86127a860025490565b6127b3906001615019565b6127bd9190615123565b8111156128295760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610f5d565b600b55565b6005546001600160a01b031633146128585760405162461bcd60e51b8152600401610f5d90614fce565b6128646012600a615114565b6103e861287060025490565b61287b906001615019565b6128859190615123565b61288f9190615123565b8110156128f15760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610f5d565b6128fd6012600a615114565b6129079082615019565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e906020016110bb565b6005546001600160a01b031633146129665760405162461bcd60e51b8152600401610f5d90614fce565b6017805460ff19169055565b6005546001600160a01b0316331461299c5760405162461bcd60e51b8152600401610f5d90614fce565b601254610100900460ff1615612a085760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610f5d565b60328110612a285760405162461bcd60e51b8152600401610f5d90615273565b8151835114612a795760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610f5d565b61012c835110612aea5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203330302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610f5d565b60005b8351811015612bb7576000848281518110612b0a57612b0a615175565b6020908102919091018101516001600160a01b038116600090815260139092526040909120805460ff191660011790559050612b494262015180615145565b6001600160a01b038216600090815260146020526040812091909155612b716012600a615114565b858481518110612b8357612b83615175565b6020026020010151612b959190615019565b9050612ba2338383614421565b50508080612baf906152ba565b915050612aed565b506012805462ffff0019166201010017905543600d819055612bda908290615145565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7d9190615158565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d039190615158565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612d50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d749190615158565b600a80546001600160a01b0319166001600160a01b03929092169182179055612d9e906001614576565b600a54612db5906001600160a01b031660016143f3565b60004711612e115760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610f5d565b6000612e1c306115a4565b11612e785760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610f5d565b600954612e939030906001600160a01b03166113c0826115a4565b6009546001600160a01b031663f305d7194730612eaf816115a4565b60008030426040518863ffffffff1660e01b8152600401612ed5969594939291906152d3565b60606040518083038185885af1158015612ef3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612f18919061530e565b505050505050565b60108181548110612f3057600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b03163314612f745760405162461bcd60e51b8152600401610f5d90614fce565b6001600160a01b038116612fd95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f5d565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461305f5760405162461bcd60e51b8152600401610f5d90614fce565b604051600090339047908381818185875af1925050503d80600081146120ea576040519150601f19603f3d011682016040523d82523d6000602084013e6120ea565b6005546001600160a01b031633146130cb5760405162461bcd60e51b8152600401610f5d90614fce565b6107d081111561313b5760405162461bcd60e51b815260206004820152603560248201527f4d6179206e6f74206275726e206d6f7265207468616e20323025206f6620636f6044820152746e74726163742773204c5020617420612074696d6560581b6064820152608401610f5d565b602a54613148904261533c565b602b5411156131895760405162461bcd60e51b815260206004820152600d60248201526c213ab937103a37b79039b7b7b760991b6044820152606401610f5d565b42602b55600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156131d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131fa919061523d565b90506000613207306115a4565b905060006127106132188585615019565b6132229190615123565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af115801561327c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a09190615256565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec906132db90309086906001908190849042906004016152d3565b60408051808303816000875af11580156132f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061331d919061534f565b505060008361332b306115a4565b613335919061533c565b9050801561334a5761334a3061dead83614421565b6000613356834761533c565b9050801561336757613367816145d9565b60405184907f81b7e7967a97e0708996ad25e859322b1c2e22612ac6798c9c95cfda2dca265f90600090a250505050505050565b6001600160a01b0383166133fd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f5d565b6001600160a01b03821661345e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f5d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166134e55760405162461bcd60e51b8152600401610f5d90615373565b6001600160a01b03821661350b5760405162461bcd60e51b8152600401610f5d906153b8565b6000811161355b5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610f5d565b601254610100900460ff166135ee576001600160a01b0383166000908152602c602052604090205460ff16806135a957506001600160a01b0382166000908152602c602052604090205460ff165b6135ee5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610f5d565b600e5443101580156136075750601254610100900460ff165b156136fc576001600160a01b0383166000908152600f602052604090205460ff1615801561364e57506001600160a01b0382166000908152600f602052604090205460ff16155b8061366657506005546001600160a01b038381169116145b8061367b57506001600160a01b03821661dead145b6136fc5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610f5d565b6001600160a01b03831660009081526013602052604090205460ff16156138e3576001600160a01b0382166000908152602e602052604090205460ff1615613837576001600160a01b0383166000908152601460205260409020544210156137985760405162461bcd60e51b815260206004820152600f60248201526e10d85b9b9bdd081cd95b1b081e595d608a1b6044820152606401610f5d565b6137a06115e8565b81111561380c5760405162461bcd60e51b815260206004820152603460248201527f417474656d7074696e6720746f2073656c6c206f766572206d61782073656c6c6044820152731030b6b7bab73a17101021b432b1b59036b0bc1760611b6064820152608401610f5d565b6138194262015180615145565b6001600160a01b0384166000908152601460205260409020556138e3565b6001600160a01b0382166000908152602c602052604090205460ff166138e35760405162461bcd60e51b815260206004820152605560248201527f507269766174652073616c652063616e6e6f74207472616e7366657220616e6460448201527f206d7573742073656c6c206f6e6c79206f72207472616e7366657220746f2061606482015274103bb434ba32b634b9ba32b21030b2323932b9b99760591b608482015260a401610f5d565b60125460ff1615613cdf576005546001600160a01b0384811691161480159061391a57506005546001600160a01b03838116911614155b801561392e57506001600160a01b03821615155b801561394557506001600160a01b03821661dead14155b801561396a57506001600160a01b0383166000908152602c602052604090205460ff16155b801561398f57506001600160a01b0382166000908152602c602052604090205460ff16155b15613cdf5760175460ff1615613aa8576009546001600160a01b038381169116148015906139cb5750600a546001600160a01b03838116911614155b15613aa8576139db60024361533c565b32600090815260166020526040902054108015613a1957506139fe60024361533c565b6001600160a01b038316600090815260166020526040902054105b613a835760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610f5d565b3260009081526016602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152602e602052604090205460ff168015613ae957506001600160a01b0382166000908152602d602052604090205460ff16155b15613bb557600654811115613b515760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610f5d565b600854613b5d836115a4565b613b679083615145565b1115613bb05760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d95959081b585e081dd85b1b195d60421b6044820152606401610f5d565b613cdf565b6001600160a01b0382166000908152602e602052604090205460ff168015613bf657506001600160a01b0383166000908152602d602052604090205460ff16155b15613c6057600754811115613bb05760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610f5d565b6001600160a01b0382166000908152602d602052604090205460ff16613cdf57600854613c8c836115a4565b613c969083615145565b1115613cdf5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d95959081b585e081dd85b1b195d60421b6044820152606401610f5d565b6000613cea306115a4565b600b5490915081108015908190613d09575060125462010000900460ff165b8015613d1f5750600a54600160a01b900460ff16155b8015613d4457506001600160a01b0385166000908152602e602052604090205460ff16155b8015613d6957506001600160a01b0385166000908152602c602052604090205460ff16155b8015613d8e57506001600160a01b0384166000908152602c602052604090205460ff16155b15613dbc57600a805460ff60a01b1916600160a01b179055613dae614291565b600a805460ff60a01b191690555b600a54600160a01b900460ff16158015613dee57506001600160a01b0384166000908152602e602052604090205460ff165b8015613dfc575060275460ff165b8015613e175750602854602954613e139190615145565b4210155b8015613e3c57506001600160a01b0385166000908152602c602052604090205460ff16155b15613e4957613e4961472c565b6001600160a01b0385166000908152602c602052604090205460019060ff1680613e8b57506001600160a01b0385166000908152602c602052604090205460ff165b15613e94575060005b600080821561427c57600e5443108015613ec657506001600160a01b0388166000908152602e602052604090205460ff165b8015613eeb57506001600160a01b0387166000908152602e602052604090205460ff16155b8015613f1057506001600160a01b0387166000908152602c602052604090205460ff16155b8015613f1e57506000601854115b156140c457600e544310613f4557600160066000828254613f3f919061533c565b90915550505b6001600160a01b0387166000908152600f602052604090205460ff16614025576001600160a01b0387166000908152600f60205260408120805460ff191660019081179091556011805491929091613f9e908490615145565b9091555050601080546001810182556000919091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319166001600160a01b0389169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b612710601854876140369190615019565b6140409190615123565b9150601854601a54836140539190615019565b61405d9190615123565b6021600082825461406e9190615145565b90915550506018546019546140839084615019565b61408d9190615123565b6020600082825461409e9190615145565b9091555050601854601b546140b39084615019565b6140bd9190615123565b905061424b565b6001600160a01b0387166000908152602e602052604090205460ff1680156140ee57506000601c54115b1561418157612710601c54876141049190615019565b61410e9190615123565b9150601c54601e54836141219190615019565b61412b9190615123565b6021600082825461413c9190615145565b9091555050601c54601d546141519084615019565b61415b9190615123565b6020600082825461416c9190615145565b9091555050601854601f546140b39084615019565b6001600160a01b0388166000908152602e602052604090205460ff1680156141ab57506000601854115b1561424b57612710601854876141c19190615019565b6141cb9190615123565b9150601854601a54836141de9190615019565b6141e89190615123565b602160008282546141f99190615145565b909155505060185460195461420e9084615019565b6142189190615123565b602060008282546142299190615145565b9091555050601854601b5461423e9084615019565b6142489190615123565b90505b811561426f5761425c883084614421565b801561426f5761426f3061dead83614421565b614279828761533c565b95505b614287888888614421565b5050505050505050565b600061429c306115a4565b905060006020546021546142b09190615145565b90508115806142bd575080155b156142c6575050565b600b546142d490600a615019565b8211156142ec57600b546142e990600a615019565b91505b600080600283602154866143009190615019565b61430a9190615123565b6143149190615123565b9050614328614323828661533c565b614946565b6021544790819060009061433e90600290615123565b614348908761533c565b6020546143559085615019565b61435f9190615123565b905061436b818361533c565b60006021819055602055915083158015906143865750600082115b15614395576143958483614a98565b600c546040516001600160a01b03909116904790600081818185875af1925050503d80600081146143e2576040519150601f19603f3d011682016040523d82523d6000602084013e6143e7565b606091505b50505050505050505050565b6001600160a01b0382166000908152602e60205260409020805460ff19168215151790556122188282614576565b6001600160a01b0383166144475760405162461bcd60e51b8152600401610f5d90615373565b6001600160a01b03821661446d5760405162461bcd60e51b8152600401610f5d906153b8565b6001600160a01b038316600090815260208190526040902054818110156144e55760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610f5d565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061451c908490615145565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161456891815260200190565b60405180910390a350505050565b6001600160a01b0382166000818152602d6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015614643573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146679190615158565b8160008151811061467a5761467a615175565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106146ae576146ae615175565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de959084906146f690600090869061dead9042906004016153fb565b6000604051808303818588803b15801561470f57600080fd5b505af1158015614723573d6000803e3d6000fd5b50505050505050565b426029819055602b55600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561477e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147a2919061523d565b905060006147af306115a4565b90506000612710602654846147c49190615019565b6147ce9190615123565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af1158015614828573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061484c9190615256565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec9061488790309086906001908190849042906004016152d3565b60408051808303816000875af11580156148a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148c9919061534f565b50506000836148d7306115a4565b6148e1919061533c565b905080156148f6576148f63061dead83614421565b6000614902834761533c565b9050801561491357614913816145d9565b60405184907f30464008593337c7762c84338a125f5c481ce1997dbf1d7931bcce0b6430787a90600090a2505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061497b5761497b615175565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156149d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149f89190615158565b81600181518110614a0b57614a0b615175565b6001600160a01b039283166020918202929092010152600954614a31913091168461339b565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790614a6a908590600090869030904290600401615430565b600060405180830381600087803b158015614a8457600080fd5b505af1158015612f18573d6000803e3d6000fd5b600954614ab09030906001600160a01b03168461339b565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d719908390614aed90309087906000908190849042906004016152d3565b60606040518083038185885af1158015614b0b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614b30919061530e565b5050505050565b600060208083528351808285015260005b81811015614b6457858101830151858201604001528201614b48565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114614b9a57600080fd5b50565b60008060408385031215614bb057600080fd5b8235614bbb81614b85565b946020939093013593505050565b600060208284031215614bdb57600080fd5b8135614be681614b85565b9392505050565b600060208284031215614bff57600080fd5b5035919050565b600080600060608486031215614c1b57600080fd5b8335614c2681614b85565b92506020840135614c3681614b85565b929592945050506040919091013590565b8015158114614b9a57600080fd5b600080600060608486031215614c6a57600080fd5b83359250602084013591506040840135614c8381614c47565b809150509250925092565b60008060408385031215614ca157600080fd5b8235614cac81614b85565b91506020830135614cbc81614c47565b809150509250929050565b600080600060608486031215614cdc57600080fd5b505081359360208301359350604090920135919050565b60008060408385031215614d0657600080fd5b8235614d1181614b85565b91506020830135614cbc81614b85565b600080600060408486031215614d3657600080fd5b833567ffffffffffffffff80821115614d4e57600080fd5b818601915086601f830112614d6257600080fd5b813581811115614d7157600080fd5b8760208260051b8501011115614d8657600080fd5b60209283019550935050840135614c8381614c47565b600081518084526020808501945080840160005b83811015614dd55781516001600160a01b031687529582019590820190600101614db0565b509495945050505050565b602081526000614be66020830184614d9c565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614e3257614e32614df3565b604052919050565b600067ffffffffffffffff821115614e5457614e54614df3565b5060051b60200190565b600082601f830112614e6f57600080fd5b81356020614e84614e7f83614e3a565b614e09565b82815260059290921b84018101918181019086841115614ea357600080fd5b8286015b84811015614ebe5780358352918301918301614ea7565b509695505050505050565b600080600060608486031215614ede57600080fd5b833567ffffffffffffffff80821115614ef657600080fd5b818601915086601f830112614f0a57600080fd5b81356020614f1a614e7f83614e3a565b82815260059290921b8401810191818101908a841115614f3957600080fd5b948201945b83861015614f60578535614f5181614b85565b82529482019490820190614f3e565b97505087013592505080821115614f7657600080fd5b50614f8386828701614e5e565b925050604084013590509250925092565b600181811c90821680614fa857607f821691505b602082108103614fc857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610f2d57610f2d615003565b600181815b8085111561506b57816000190482111561505157615051615003565b8085161561505e57918102915b93841c9390800290615035565b509250929050565b60008261508257506001610f2d565b8161508f57506000610f2d565b81600181146150a557600281146150af576150cb565b6001915050610f2d565b60ff8411156150c0576150c0615003565b50506001821b610f2d565b5060208310610133831016604e8410600b84101617156150ee575081810a610f2d565b6150f88383615030565b806000190482111561510c5761510c615003565b029392505050565b6000614be660ff841683615073565b60008261514057634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610f2d57610f2d615003565b60006020828403121561516a57600080fd5b8151614be681614b85565b634e487b7160e01b600052603260045260246000fd5b8281526040602082015260006151a46040830184614d9c565b949350505050565b600060208083850312156151bf57600080fd5b825167ffffffffffffffff8111156151d657600080fd5b8301601f810185136151e757600080fd5b80516151f5614e7f82614e3a565b81815260059190911b8201830190838101908783111561521457600080fd5b928401925b8284101561523257835182529284019290840190615219565b979650505050505050565b60006020828403121561524f57600080fd5b5051919050565b60006020828403121561526857600080fd5b8151614be681614c47565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2035360cc1b606082015260800190565b6000600182016152cc576152cc615003565b5060010190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561532357600080fd5b8351925060208401519150604084015190509250925092565b81810381811115610f2d57610f2d615003565b6000806040838503121561536257600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8481526080602082015260006154146080830186614d9c565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061544f60a0830186614d9c565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212206a4263ddcc3acdc4fc60a94de156465966a98dad775ffe0907736dfb1e0848a364736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106104b95760003560e01c80638da5cb5b1161026b578063c7c61e2c1161014f578063eb472fc4116100c1578063f5648a4f11610085578063f5648a4f14610ddf578063f637434214610df4578063f8b45b0514610e0a578063f9f92be414610e20578063fd361d0e14610e50578063fe72b27a14610e6a57600080fd5b8063eb472fc414610d5d578063ee40166e14610d7d578063ee44b44e14610d93578063f11a24d314610da9578063f2fde38b14610dbf57600080fd5b8063dc3f0d0f11610113578063dc3f0d0f14610c96578063dd62ed3e14610cb6578063e2f4560514610cfc578063e71dc3f514610d12578063e884f26014610d28578063ead010ae14610d3d57600080fd5b8063c7c61e2c14610c1b578063c876d0b914610c30578063cc2ffe7c14610c4a578063d257b34f14610c60578063d85ba06314610c8057600080fd5b8063a9059cbb116101e8578063bbc0c742116101ac578063bbc0c74214610b5c578063bd5fb92014610b7b578063befd2fac14610b9b578063c024666814610bbb578063c17b5b8c14610bdb578063c5f956af14610bfb57600080fd5b8063a9059cbb14610ab0578063acee28d114610ad0578063adb873bd14610ae6578063afd6ce6114610afc578063b62496f514610b2c57600080fd5b80639e93ad8e1161022f5780639e93ad8e14610a385780639ec22c0e14610a4e578063a457c2d714610a64578063a4c82a0014610a84578063a62068ce14610a9a57600080fd5b80638da5cb5b146109a35780638e38b7cb146109c157806395d89b41146109e15780639a5bd2dd146109f65780639a7a23d614610a1857600080fd5b806358a6d5311161039d578063713d09741161030f578063763cef49116102d3578063763cef4914610902578063783102eb146109175780638095d5641461092d57806382aa7c681461094d5780638366e79a1461096d57806388e765ff1461098d57600080fd5b8063713d097414610883578063715018a614610898578063730c1888146108ad578063751039fc146108cd5780637571336a146108e257600080fd5b80636a486a8e116103615780636a486a8e146107ec5780636b0a894c146108025780636b2fb124146108185780636ddd17131461082e57806370a082311461084e578063712c29851461086e57600080fd5b806358a6d5311461075c5780635c068a8c146107735780635c3352d3146107895780636605bfda146107b657806366d602ae146107d657600080fd5b80631a8145bb116104365780632e82f1a0116103fa5780632e82f1a0146106b7578063313ce567146106d157806339509351146106ed578063452ed4f11461070d5780634a62bb651461072d57806351f205e41461074757600080fd5b80631a8145bb1461062b5780631c499ab01461064157806323b872dd146106615780632be32b61146106815780632c3e486c146106a157600080fd5b80631805805b1161047d5780631805805b146105a857806318160ddd146105ca578063184c16c5146105df57806318e1c123146105f5578063199ffc721461061557600080fd5b8063058054c9146104c557806306fdde03146104ee5780630758d92414610510578063095ea7b31461054857806310d5de531461057857600080fd5b366104c057005b600080fd5b3480156104d157600080fd5b506104db60225481565b6040519081526020015b60405180910390f35b3480156104fa57600080fd5b50610503610e8a565b6040516104e59190614b37565b34801561051c57600080fd5b50600954610530906001600160a01b031681565b6040516001600160a01b0390911681526020016104e5565b34801561055457600080fd5b50610568610563366004614b9d565b610f1c565b60405190151581526020016104e5565b34801561058457600080fd5b50610568610593366004614bc9565b602d6020526000908152604090205460ff1681565b3480156105b457600080fd5b506105c86105c3366004614bc9565b610f33565b005b3480156105d657600080fd5b506002546104db565b3480156105eb57600080fd5b506104db602a5481565b34801561060157600080fd5b506105c8610610366004614bed565b610ff2565b34801561062157600080fd5b506104db60265481565b34801561063757600080fd5b506104db60215481565b34801561064d57600080fd5b506105c861065c366004614bed565b6110c6565b34801561066d57600080fd5b5061056861067c366004614c06565b6111d2565b34801561068d57600080fd5b506105c861069c366004614bed565b61127c565b3480156106ad57600080fd5b506104db60285481565b3480156106c357600080fd5b506027546105689060ff1681565b3480156106dd57600080fd5b50604051601281526020016104e5565b3480156106f957600080fd5b50610568610708366004614b9d565b611389565b34801561071957600080fd5b50600a54610530906001600160a01b031681565b34801561073957600080fd5b506012546105689060ff1681565b34801561075357600080fd5b506105c86113c5565b34801561076857600080fd5b50600e544310610568565b34801561077f57600080fd5b506104db60195481565b34801561079557600080fd5b506104db6107a4366004614bc9565b60146020526000908152604090205481565b3480156107c257600080fd5b506105c86107d1366004614bc9565b6114ce565b3480156107e257600080fd5b506104db60075481565b3480156107f857600080fd5b506104db601c5481565b34801561080e57600080fd5b506104db60115481565b34801561082457600080fd5b506104db601d5481565b34801561083a57600080fd5b506012546105689062010000900460ff1681565b34801561085a57600080fd5b506104db610869366004614bc9565b6115a4565b34801561087a57600080fd5b506104db6115bf565b34801561088f57600080fd5b506104db6115e8565b3480156108a457600080fd5b506105c86117e4565b3480156108b957600080fd5b506105c86108c8366004614c55565b611858565b3480156108d957600080fd5b506105c8611981565b3480156108ee57600080fd5b506105c86108fd366004614c8e565b6119f8565b34801561090e57600080fd5b506105c8611ac0565b34801561092357600080fd5b506104db60255481565b34801561093957600080fd5b506105c8610948366004614cc7565b611c61565b34801561095957600080fd5b506105c8610968366004614bed565b611d21565b34801561097957600080fd5b50610568610988366004614cf3565b611e15565b34801561099957600080fd5b506104db60065481565b3480156109af57600080fd5b506005546001600160a01b0316610530565b3480156109cd57600080fd5b506105c86109dc366004614d21565b61204f565b3480156109ed57600080fd5b506105036120f0565b348015610a0257600080fd5b50610a0b6120ff565b6040516104e59190614de0565b348015610a2457600080fd5b506105c8610a33366004614c8e565b612160565b348015610a4457600080fd5b506104db61271081565b348015610a5a57600080fd5b506104db602b5481565b348015610a7057600080fd5b50610568610a7f366004614b9d565b612254565b348015610a9057600080fd5b506104db60295481565b348015610aa657600080fd5b506104db600e5481565b348015610abc57600080fd5b50610568610acb366004614b9d565b6122ed565b348015610adc57600080fd5b506104db60155481565b348015610af257600080fd5b506104db601f5481565b348015610b0857600080fd5b50610568610b17366004614bc9565b60136020526000908152604090205460ff1681565b348015610b3857600080fd5b50610568610b47366004614bc9565b602e6020526000908152604090205460ff1681565b348015610b6857600080fd5b5060125461056890610100900460ff1681565b348015610b8757600080fd5b506105c8610b96366004614d21565b6122fa565b348015610ba757600080fd5b506105c8610bb6366004614bed565b612400565b348015610bc757600080fd5b506105c8610bd6366004614c8e565b612536565b348015610be757600080fd5b506105c8610bf6366004614cc7565b6125bf565b348015610c0757600080fd5b50600c54610530906001600160a01b031681565b348015610c2757600080fd5b506105c861267a565b348015610c3c57600080fd5b506017546105689060ff1681565b348015610c5657600080fd5b506104db60205481565b348015610c6c57600080fd5b506105c8610c7b366004614bed565b6126e3565b348015610c8c57600080fd5b506104db60185481565b348015610ca257600080fd5b506105c8610cb1366004614bed565b61282e565b348015610cc257600080fd5b506104db610cd1366004614cf3565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610d0857600080fd5b506104db600b5481565b348015610d1e57600080fd5b506104db601b5481565b348015610d3457600080fd5b506105c861293c565b348015610d4957600080fd5b506105c8610d58366004614ec9565b612972565b348015610d6957600080fd5b50610530610d78366004614bed565b612f20565b348015610d8957600080fd5b506104db600d5481565b348015610d9f57600080fd5b506104db60235481565b348015610db557600080fd5b506104db601a5481565b348015610dcb57600080fd5b506105c8610dda366004614bc9565b612f4a565b348015610deb57600080fd5b506105c8613035565b348015610e0057600080fd5b506104db601e5481565b348015610e1657600080fd5b506104db60085481565b348015610e2c57600080fd5b50610568610e3b366004614bc9565b600f6020526000908152604090205460ff1681565b348015610e5c57600080fd5b506024546105689060ff1681565b348015610e7657600080fd5b506105c8610e85366004614bed565b6130a1565b606060038054610e9990614f94565b80601f0160208091040260200160405190810160405280929190818152602001828054610ec590614f94565b8015610f125780601f10610ee757610100808354040283529160200191610f12565b820191906000526020600020905b815481529060010190602001808311610ef557829003601f168201915b5050505050905090565b6000610f2933848461339b565b5060015b92915050565b6005546001600160a01b03163314610f665760405162461bcd60e51b8152600401610f5d90614fce565b60405180910390fd5b601254610100900460ff1615610fd05760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401610f5d565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461101c5760405162461bcd60e51b8152600401610f5d90614fce565b600a811015801561102f575061c3508111155b61107b5760405162461bcd60e51b815260206004820181905260248201527f4d75737420736574206265747765656e20302e3120616e642035303020424e426044820152606401610f5d565b61108c81662386f26fc10000615019565b6015556040518181527f0320a651094de4f5fc35c0f1c336811904e8f465b6599a93eb0dec4919b8fec5906020015b60405180910390a150565b6005546001600160a01b031633146110f05760405162461bcd60e51b8152600401610f5d90614fce565b6110fc6012600a615114565b606461110760025490565b611112906001615019565b61111c9190615123565b6111269190615123565b8110156111875760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f776044820152686572207468616e202560b81b6064820152608401610f5d565b6111936012600a615114565b61119d9082615019565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020016110bb565b60006111df8484846134bf565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156112645760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610f5d565b611271853385840361339b565b506001949350505050565b6005546001600160a01b031633146112a65760405162461bcd60e51b8152600401610f5d90614fce565b6112b26012600a615114565b6103e86112be60025490565b6112c9906001615019565b6112d39190615123565b6112dd9190615123565b81101561133e5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610f5d565b61134a6012600a615114565b6113549082615019565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020016110bb565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610f299185906113c0908690615145565b61339b565b6005546001600160a01b031633146113ef5760405162461bcd60e51b8152600401610f5d90614fce565b600b546113fb306115a4565b1015611471576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610f5d565b600a805460ff60a01b1916600160a01b17905561148c614291565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146114f85760405162461bcd60e51b8152600401610f5d90614fce565b6001600160a01b03811661155a5760405162461bcd60e51b8152602060048201526024808201527f5f74726561737572794164647265737320616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610f5d565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b6001600160a01b031660009081526020819052604090205490565b60245460009060ff16156115e2576023546022546115dd9190615145565b905090565b50600090565b604080516002808252606082018352600092839291906020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611656573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167a9190615158565b8160008151811061168d5761168d615175565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106116c1576116c1615175565b6001600160a01b039290921660209283029190910182015260408051600280825260608201835260009391929091830190803683370190505060095460155460405163d06ca61f60e01b81529293506001600160a01b039091169163d06ca61f9161173091869060040161518b565b600060405180830381865afa15801561174d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261177591908101906151ac565b90506064601d54601e546117899190615145565b8260018151811061179c5761179c615175565b60200260200101516117ae9190615019565b6117b89190615123565b816001815181106117cb576117cb615175565b60200260200101516117dd9190615145565b9250505090565b6005546001600160a01b0316331461180e5760405162461bcd60e51b8152600401610f5d90614fce565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146118825760405162461bcd60e51b8152600401610f5d90614fce565b6102588310156118f05760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610f5d565b6103e88211158015611900575060015b6119655760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610f5d565b6028929092556026556027805460ff1916911515919091179055565b6005546001600160a01b031633146119ab5760405162461bcd60e51b8152600401610f5d90614fce565b6012805460ff199081169091556017805490911690556002546006556002546007556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b03163314611a225760405162461bcd60e51b8152600401610f5d90614fce565b80611a9557600a546001600160a01b0390811690831603611a955760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610f5d565b6001600160a01b03919091166000908152602d60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611aea5760405162461bcd60e51b8152600401610f5d90614fce565b611af26115bf565b4210158015611b0857506000611b066115bf565b115b611b4d5760405162461bcd60e51b815260206004820152601660248201527526bab9ba103932b8bab2b9ba1030b732103bb0b4ba1760511b6044820152606401610f5d565b600060228190556024805460ff19168155602554600a546040516370a0823160e01b81523060048201526064936001600160a01b03909216916370a082319101602060405180830381865afa158015611baa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bce919061523d565b611bd89190615019565b611be29190615123565b6000602555600a5460405163a9059cbb60e01b8152336004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611c39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5d9190615256565b5050565b6005546001600160a01b03163314611c8b5760405162461bcd60e51b8152600401610f5d90614fce565b6019839055601a829055601b81905580611ca58385615145565b611caf9190615145565b6018556064611cc1612710601e615019565b611ccb9190615123565b6018541115611d1c5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610f5d565b505050565b6005546001600160a01b03163314611d4b5760405162461bcd60e51b8152600401610f5d90614fce565b601254610100900460ff1615611da35760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610f5d565b6032811115611dc45760405162461bcd60e51b8152600401610f5d90615273565b6012805462ffff0019166201010017905543600d819055611de6908290615145565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b03163314611e425760405162461bcd60e51b8152600401610f5d90614fce565b6001600160a01b038316611e985760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610f5d565b6001600160a01b03831630141580611eb85750601254610100900460ff16155b611f215760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610f5d565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611f68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f8c919061523d565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611fdf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120039190615256565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146120795760405162461bcd60e51b8152600401610f5d90614fce565b60005b828110156120ea5781600f600086868581811061209b5761209b615175565b90506020020160208101906120b09190614bc9565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806120e2816152ba565b91505061207c565b50505050565b606060048054610e9990614f94565b60606010805480602002602001604051908101604052809291908181526020018280548015610f1257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612139575050505050905090565b6005546001600160a01b0316331461218a5760405162461bcd60e51b8152600401610f5d90614fce565b600a546001600160a01b039081169083160361220e5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610f5d565b61221882826143f3565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156122d65760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610f5d565b6122e3338585840361339b565b5060019392505050565b6000610f293384846134bf565b6005546001600160a01b031633146123245760405162461bcd60e51b8152600401610f5d90614fce565b60005b828110156120ea5781602c600086868581811061234657612346615175565b905060200201602081019061235b9190614bc9565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905583838281811061239557612395615175565b90506020020160208101906123aa9190614bc9565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7836040516123e6911515815260200190565b60405180910390a2806123f8816152ba565b915050612327565b6005546001600160a01b0316331461242a5760405162461bcd60e51b8152600401610f5d90614fce565b60245460ff16156124975760405162461bcd60e51b815260206004820152603160248201527f43616e6e6f74207265717565737420616761696e20756e74696c206669727374604482015270103932b8bab2b9ba1034b99037bb32b91760791b6064820152608401610f5d565b606481111580156124a85750600081115b6124f45760405162461bcd60e51b815260206004820152601a60248201527f4e65656420746f20736574206265747765656e20312d313030250000000000006044820152606401610f5d565b426022556024805460ff1916600117905560258190556040517fd99a77b2f3951cd076e75814e44db497e6abc203dd251329da0b62c288f9f48b90600090a150565b6005546001600160a01b031633146125605760405162461bcd60e51b8152600401610f5d90614fce565b6001600160a01b0382166000818152602c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146125e95760405162461bcd60e51b8152600401610f5d90614fce565b601d839055601e829055601f819055806126038385615145565b61260d9190615145565b601c55606461261f612710601e615019565b6126299190615123565b601c541115611d1c5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610f5d565b6005546001600160a01b031633146126a45760405162461bcd60e51b8152600401610f5d90614fce565b6024805460ff191690556000602581905560228190556040517ffbcc1c208c9c4d1d9f557267b55c5ae316e74ce676a0db72ef18c6d5f5767c619190a1565b6005546001600160a01b0316331461270d5760405162461bcd60e51b8152600401610f5d90614fce565b620186a061271a60025490565b612725906001615019565b61272f9190615123565b81101561279c5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610f5d565b6103e86127a860025490565b6127b3906001615019565b6127bd9190615123565b8111156128295760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610f5d565b600b55565b6005546001600160a01b031633146128585760405162461bcd60e51b8152600401610f5d90614fce565b6128646012600a615114565b6103e861287060025490565b61287b906001615019565b6128859190615123565b61288f9190615123565b8110156128f15760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610f5d565b6128fd6012600a615114565b6129079082615019565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e906020016110bb565b6005546001600160a01b031633146129665760405162461bcd60e51b8152600401610f5d90614fce565b6017805460ff19169055565b6005546001600160a01b0316331461299c5760405162461bcd60e51b8152600401610f5d90614fce565b601254610100900460ff1615612a085760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610f5d565b60328110612a285760405162461bcd60e51b8152600401610f5d90615273565b8151835114612a795760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610f5d565b61012c835110612aea5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203330302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610f5d565b60005b8351811015612bb7576000848281518110612b0a57612b0a615175565b6020908102919091018101516001600160a01b038116600090815260139092526040909120805460ff191660011790559050612b494262015180615145565b6001600160a01b038216600090815260146020526040812091909155612b716012600a615114565b858481518110612b8357612b83615175565b6020026020010151612b959190615019565b9050612ba2338383614421565b50508080612baf906152ba565b915050612aed565b506012805462ffff0019166201010017905543600d819055612bda908290615145565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7d9190615158565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d039190615158565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612d50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d749190615158565b600a80546001600160a01b0319166001600160a01b03929092169182179055612d9e906001614576565b600a54612db5906001600160a01b031660016143f3565b60004711612e115760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610f5d565b6000612e1c306115a4565b11612e785760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610f5d565b600954612e939030906001600160a01b03166113c0826115a4565b6009546001600160a01b031663f305d7194730612eaf816115a4565b60008030426040518863ffffffff1660e01b8152600401612ed5969594939291906152d3565b60606040518083038185885af1158015612ef3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612f18919061530e565b505050505050565b60108181548110612f3057600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b03163314612f745760405162461bcd60e51b8152600401610f5d90614fce565b6001600160a01b038116612fd95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f5d565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461305f5760405162461bcd60e51b8152600401610f5d90614fce565b604051600090339047908381818185875af1925050503d80600081146120ea576040519150601f19603f3d011682016040523d82523d6000602084013e6120ea565b6005546001600160a01b031633146130cb5760405162461bcd60e51b8152600401610f5d90614fce565b6107d081111561313b5760405162461bcd60e51b815260206004820152603560248201527f4d6179206e6f74206275726e206d6f7265207468616e20323025206f6620636f6044820152746e74726163742773204c5020617420612074696d6560581b6064820152608401610f5d565b602a54613148904261533c565b602b5411156131895760405162461bcd60e51b815260206004820152600d60248201526c213ab937103a37b79039b7b7b760991b6044820152606401610f5d565b42602b55600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156131d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131fa919061523d565b90506000613207306115a4565b905060006127106132188585615019565b6132229190615123565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af115801561327c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a09190615256565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec906132db90309086906001908190849042906004016152d3565b60408051808303816000875af11580156132f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061331d919061534f565b505060008361332b306115a4565b613335919061533c565b9050801561334a5761334a3061dead83614421565b6000613356834761533c565b9050801561336757613367816145d9565b60405184907f81b7e7967a97e0708996ad25e859322b1c2e22612ac6798c9c95cfda2dca265f90600090a250505050505050565b6001600160a01b0383166133fd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f5d565b6001600160a01b03821661345e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f5d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166134e55760405162461bcd60e51b8152600401610f5d90615373565b6001600160a01b03821661350b5760405162461bcd60e51b8152600401610f5d906153b8565b6000811161355b5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610f5d565b601254610100900460ff166135ee576001600160a01b0383166000908152602c602052604090205460ff16806135a957506001600160a01b0382166000908152602c602052604090205460ff165b6135ee5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610f5d565b600e5443101580156136075750601254610100900460ff165b156136fc576001600160a01b0383166000908152600f602052604090205460ff1615801561364e57506001600160a01b0382166000908152600f602052604090205460ff16155b8061366657506005546001600160a01b038381169116145b8061367b57506001600160a01b03821661dead145b6136fc5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610f5d565b6001600160a01b03831660009081526013602052604090205460ff16156138e3576001600160a01b0382166000908152602e602052604090205460ff1615613837576001600160a01b0383166000908152601460205260409020544210156137985760405162461bcd60e51b815260206004820152600f60248201526e10d85b9b9bdd081cd95b1b081e595d608a1b6044820152606401610f5d565b6137a06115e8565b81111561380c5760405162461bcd60e51b815260206004820152603460248201527f417474656d7074696e6720746f2073656c6c206f766572206d61782073656c6c6044820152731030b6b7bab73a17101021b432b1b59036b0bc1760611b6064820152608401610f5d565b6138194262015180615145565b6001600160a01b0384166000908152601460205260409020556138e3565b6001600160a01b0382166000908152602c602052604090205460ff166138e35760405162461bcd60e51b815260206004820152605560248201527f507269766174652073616c652063616e6e6f74207472616e7366657220616e6460448201527f206d7573742073656c6c206f6e6c79206f72207472616e7366657220746f2061606482015274103bb434ba32b634b9ba32b21030b2323932b9b99760591b608482015260a401610f5d565b60125460ff1615613cdf576005546001600160a01b0384811691161480159061391a57506005546001600160a01b03838116911614155b801561392e57506001600160a01b03821615155b801561394557506001600160a01b03821661dead14155b801561396a57506001600160a01b0383166000908152602c602052604090205460ff16155b801561398f57506001600160a01b0382166000908152602c602052604090205460ff16155b15613cdf5760175460ff1615613aa8576009546001600160a01b038381169116148015906139cb5750600a546001600160a01b03838116911614155b15613aa8576139db60024361533c565b32600090815260166020526040902054108015613a1957506139fe60024361533c565b6001600160a01b038316600090815260166020526040902054105b613a835760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610f5d565b3260009081526016602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152602e602052604090205460ff168015613ae957506001600160a01b0382166000908152602d602052604090205460ff16155b15613bb557600654811115613b515760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610f5d565b600854613b5d836115a4565b613b679083615145565b1115613bb05760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d95959081b585e081dd85b1b195d60421b6044820152606401610f5d565b613cdf565b6001600160a01b0382166000908152602e602052604090205460ff168015613bf657506001600160a01b0383166000908152602d602052604090205460ff16155b15613c6057600754811115613bb05760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610f5d565b6001600160a01b0382166000908152602d602052604090205460ff16613cdf57600854613c8c836115a4565b613c969083615145565b1115613cdf5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d95959081b585e081dd85b1b195d60421b6044820152606401610f5d565b6000613cea306115a4565b600b5490915081108015908190613d09575060125462010000900460ff165b8015613d1f5750600a54600160a01b900460ff16155b8015613d4457506001600160a01b0385166000908152602e602052604090205460ff16155b8015613d6957506001600160a01b0385166000908152602c602052604090205460ff16155b8015613d8e57506001600160a01b0384166000908152602c602052604090205460ff16155b15613dbc57600a805460ff60a01b1916600160a01b179055613dae614291565b600a805460ff60a01b191690555b600a54600160a01b900460ff16158015613dee57506001600160a01b0384166000908152602e602052604090205460ff165b8015613dfc575060275460ff165b8015613e175750602854602954613e139190615145565b4210155b8015613e3c57506001600160a01b0385166000908152602c602052604090205460ff16155b15613e4957613e4961472c565b6001600160a01b0385166000908152602c602052604090205460019060ff1680613e8b57506001600160a01b0385166000908152602c602052604090205460ff165b15613e94575060005b600080821561427c57600e5443108015613ec657506001600160a01b0388166000908152602e602052604090205460ff165b8015613eeb57506001600160a01b0387166000908152602e602052604090205460ff16155b8015613f1057506001600160a01b0387166000908152602c602052604090205460ff16155b8015613f1e57506000601854115b156140c457600e544310613f4557600160066000828254613f3f919061533c565b90915550505b6001600160a01b0387166000908152600f602052604090205460ff16614025576001600160a01b0387166000908152600f60205260408120805460ff191660019081179091556011805491929091613f9e908490615145565b9091555050601080546001810182556000919091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319166001600160a01b0389169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b612710601854876140369190615019565b6140409190615123565b9150601854601a54836140539190615019565b61405d9190615123565b6021600082825461406e9190615145565b90915550506018546019546140839084615019565b61408d9190615123565b6020600082825461409e9190615145565b9091555050601854601b546140b39084615019565b6140bd9190615123565b905061424b565b6001600160a01b0387166000908152602e602052604090205460ff1680156140ee57506000601c54115b1561418157612710601c54876141049190615019565b61410e9190615123565b9150601c54601e54836141219190615019565b61412b9190615123565b6021600082825461413c9190615145565b9091555050601c54601d546141519084615019565b61415b9190615123565b6020600082825461416c9190615145565b9091555050601854601f546140b39084615019565b6001600160a01b0388166000908152602e602052604090205460ff1680156141ab57506000601854115b1561424b57612710601854876141c19190615019565b6141cb9190615123565b9150601854601a54836141de9190615019565b6141e89190615123565b602160008282546141f99190615145565b909155505060185460195461420e9084615019565b6142189190615123565b602060008282546142299190615145565b9091555050601854601b5461423e9084615019565b6142489190615123565b90505b811561426f5761425c883084614421565b801561426f5761426f3061dead83614421565b614279828761533c565b95505b614287888888614421565b5050505050505050565b600061429c306115a4565b905060006020546021546142b09190615145565b90508115806142bd575080155b156142c6575050565b600b546142d490600a615019565b8211156142ec57600b546142e990600a615019565b91505b600080600283602154866143009190615019565b61430a9190615123565b6143149190615123565b9050614328614323828661533c565b614946565b6021544790819060009061433e90600290615123565b614348908761533c565b6020546143559085615019565b61435f9190615123565b905061436b818361533c565b60006021819055602055915083158015906143865750600082115b15614395576143958483614a98565b600c546040516001600160a01b03909116904790600081818185875af1925050503d80600081146143e2576040519150601f19603f3d011682016040523d82523d6000602084013e6143e7565b606091505b50505050505050505050565b6001600160a01b0382166000908152602e60205260409020805460ff19168215151790556122188282614576565b6001600160a01b0383166144475760405162461bcd60e51b8152600401610f5d90615373565b6001600160a01b03821661446d5760405162461bcd60e51b8152600401610f5d906153b8565b6001600160a01b038316600090815260208190526040902054818110156144e55760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610f5d565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061451c908490615145565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161456891815260200190565b60405180910390a350505050565b6001600160a01b0382166000818152602d6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015614643573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146679190615158565b8160008151811061467a5761467a615175565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106146ae576146ae615175565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de959084906146f690600090869061dead9042906004016153fb565b6000604051808303818588803b15801561470f57600080fd5b505af1158015614723573d6000803e3d6000fd5b50505050505050565b426029819055602b55600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561477e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147a2919061523d565b905060006147af306115a4565b90506000612710602654846147c49190615019565b6147ce9190615123565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af1158015614828573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061484c9190615256565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec9061488790309086906001908190849042906004016152d3565b60408051808303816000875af11580156148a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148c9919061534f565b50506000836148d7306115a4565b6148e1919061533c565b905080156148f6576148f63061dead83614421565b6000614902834761533c565b9050801561491357614913816145d9565b60405184907f30464008593337c7762c84338a125f5c481ce1997dbf1d7931bcce0b6430787a90600090a2505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061497b5761497b615175565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156149d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149f89190615158565b81600181518110614a0b57614a0b615175565b6001600160a01b039283166020918202929092010152600954614a31913091168461339b565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790614a6a908590600090869030904290600401615430565b600060405180830381600087803b158015614a8457600080fd5b505af1158015612f18573d6000803e3d6000fd5b600954614ab09030906001600160a01b03168461339b565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d719908390614aed90309087906000908190849042906004016152d3565b60606040518083038185885af1158015614b0b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614b30919061530e565b5050505050565b600060208083528351808285015260005b81811015614b6457858101830151858201604001528201614b48565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114614b9a57600080fd5b50565b60008060408385031215614bb057600080fd5b8235614bbb81614b85565b946020939093013593505050565b600060208284031215614bdb57600080fd5b8135614be681614b85565b9392505050565b600060208284031215614bff57600080fd5b5035919050565b600080600060608486031215614c1b57600080fd5b8335614c2681614b85565b92506020840135614c3681614b85565b929592945050506040919091013590565b8015158114614b9a57600080fd5b600080600060608486031215614c6a57600080fd5b83359250602084013591506040840135614c8381614c47565b809150509250925092565b60008060408385031215614ca157600080fd5b8235614cac81614b85565b91506020830135614cbc81614c47565b809150509250929050565b600080600060608486031215614cdc57600080fd5b505081359360208301359350604090920135919050565b60008060408385031215614d0657600080fd5b8235614d1181614b85565b91506020830135614cbc81614b85565b600080600060408486031215614d3657600080fd5b833567ffffffffffffffff80821115614d4e57600080fd5b818601915086601f830112614d6257600080fd5b813581811115614d7157600080fd5b8760208260051b8501011115614d8657600080fd5b60209283019550935050840135614c8381614c47565b600081518084526020808501945080840160005b83811015614dd55781516001600160a01b031687529582019590820190600101614db0565b509495945050505050565b602081526000614be66020830184614d9c565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614e3257614e32614df3565b604052919050565b600067ffffffffffffffff821115614e5457614e54614df3565b5060051b60200190565b600082601f830112614e6f57600080fd5b81356020614e84614e7f83614e3a565b614e09565b82815260059290921b84018101918181019086841115614ea357600080fd5b8286015b84811015614ebe5780358352918301918301614ea7565b509695505050505050565b600080600060608486031215614ede57600080fd5b833567ffffffffffffffff80821115614ef657600080fd5b818601915086601f830112614f0a57600080fd5b81356020614f1a614e7f83614e3a565b82815260059290921b8401810191818101908a841115614f3957600080fd5b948201945b83861015614f60578535614f5181614b85565b82529482019490820190614f3e565b97505087013592505080821115614f7657600080fd5b50614f8386828701614e5e565b925050604084013590509250925092565b600181811c90821680614fa857607f821691505b602082108103614fc857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610f2d57610f2d615003565b600181815b8085111561506b57816000190482111561505157615051615003565b8085161561505e57918102915b93841c9390800290615035565b509250929050565b60008261508257506001610f2d565b8161508f57506000610f2d565b81600181146150a557600281146150af576150cb565b6001915050610f2d565b60ff8411156150c0576150c0615003565b50506001821b610f2d565b5060208310610133831016604e8410600b84101617156150ee575081810a610f2d565b6150f88383615030565b806000190482111561510c5761510c615003565b029392505050565b6000614be660ff841683615073565b60008261514057634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610f2d57610f2d615003565b60006020828403121561516a57600080fd5b8151614be681614b85565b634e487b7160e01b600052603260045260246000fd5b8281526040602082015260006151a46040830184614d9c565b949350505050565b600060208083850312156151bf57600080fd5b825167ffffffffffffffff8111156151d657600080fd5b8301601f810185136151e757600080fd5b80516151f5614e7f82614e3a565b81815260059190911b8201830190838101908783111561521457600080fd5b928401925b8284101561523257835182529284019290840190615219565b979650505050505050565b60006020828403121561524f57600080fd5b5051919050565b60006020828403121561526857600080fd5b8151614be681614c47565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2035360cc1b606082015260800190565b6000600182016152cc576152cc615003565b5060010190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561532357600080fd5b8351925060208401519150604084015190509250925092565b81810381811115610f2d57610f2d615003565b6000806040838503121561536257600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8481526080602082015260006154146080830186614d9c565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061544f60a0830186614d9c565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212206a4263ddcc3acdc4fc60a94de156465966a98dad775ffe0907736dfb1e0848a364736f6c63430008110033

Deployed Bytecode Sourcemap

7483:28846:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8979:41;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;8979:41:0;;;;;;;;1884:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;7626:27::-;;;;;;;;;;-1:-1:-1;7626:27:0;;;;-1:-1:-1;;;;;7626:27:0;;;;;;-1:-1:-1;;;;;931:32:1;;;913:51;;901:2;886:18;7626:27:0;749:221:1;2798:169:0;;;;;;;;;;-1:-1:-1;2798:169:0;;;;;:::i;:::-;;:::i;:::-;;;1596:14:1;;1589:22;1571:41;;1559:2;1544:18;2798:169:0;1431:187:1;9600:64:0;;;;;;;;;;-1:-1:-1;9600:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14543:194;;;;;;;;;;-1:-1:-1;14543:194:0;;;;;:::i;:::-;;:::i;:::-;;2205:108;;;;;;;;;;-1:-1:-1;2293:12:0;;2205:108;;9357:47;;;;;;;;;;;;;;;;29071:247;;;;;;;;;;-1:-1:-1;29071:247:0;;;;;:::i;:::-;;:::i;9169:35::-;;;;;;;;;;;;;;;;8937:33;;;;;;;;;;;;;;;;15527:288;;;;;;;;;;-1:-1:-1;15527:288:0;;;;;:::i;:::-;;:::i;2975:492::-;;;;;;;;;;-1:-1:-1;2975:492:0;;;;;:::i;:::-;;:::i;14912:295::-;;;;;;;;;;-1:-1:-1;14912:295:0;;;;;:::i;:::-;;:::i;9263:45::-;;;;;;;;;;;;;;;;9223:33;;;;;;;;;;-1:-1:-1;9223:33:0;;;;;;;;2104:93;;;;;;;;;;-1:-1:-1;2104:93:0;;2187:2;2663:36:1;;2651:2;2636:18;2104:93:0;2521:184:1;3475:215:0;;;;;;;;;;-1:-1:-1;3475:215:0;;;;;:::i;:::-;;:::i;7660:21::-;;;;;;;;;;-1:-1:-1;7660:21:0;;;;-1:-1:-1;;;;;7660:21:0;;;8034:33;;;;;;;;;;-1:-1:-1;8034:33:0;;;;;;;;28334:312;;;;;;;;;;;;;:::i;24816:120::-;;;;;;;;;;-1:-1:-1;24910:18:0;;24895:12;:33;24816:120;;8594:29;;;;;;;;;;;;;;;;8212:61;;;;;;;;;;-1:-1:-1;8212:61:0;;;;;:::i;:::-;;;;;;;;;;;;;;28001:281;;;;;;;;;;-1:-1:-1;28001:281:0;;;;;:::i;:::-;;:::i;7558:28::-;;;;;;;;;;;;;;;;8701;;;;;;;;;;;;;;;;8000:25;;;;;;;;;;;;;;;;8736:30;;;;;;;;;;;;;;;;8114:31;;;;;;;;;;-1:-1:-1;8114:31:0;;;;;;;;;;;2321:127;;;;;;;;;;-1:-1:-1;2321:127:0;;;;;:::i;:::-;;:::i;35322:281::-;;;;;;;;;;;;;:::i;28654:409::-;;;;;;;;;;;;;:::i;5965:150::-;;;;;;;;;;;;;:::i;31350:447::-;;;;;;;;;;-1:-1:-1;31350:447:0;;;;;:::i;:::-;;:::i;13982:233::-;;;;;;;;;;;;;:::i;16463:260::-;;;;;;;;;;-1:-1:-1;16463:260:0;;;;;:::i;:::-;;:::i;35611:487::-;;;;;;;;;;;;;:::i;9129:31::-;;;;;;;;;;;;;;;;17276:389;;;;;;;;;;-1:-1:-1;17276:389:0;;;;;:::i;:::-;;:::i;13499:427::-;;;;;;;;;;-1:-1:-1;13499:427:0;;;;;:::i;:::-;;:::i;27265:498::-;;;;;;;;;;-1:-1:-1;27265:498:0;;;;;:::i;:::-;;:::i;7524:27::-;;;;;;;;;;;;;;;;5751:79;;;;;;;;;;-1:-1:-1;5816:6:0;;-1:-1:-1;;;;;5816:6:0;5751:79;;14334:203;;;;;;;;;;-1:-1:-1;14334:203:0;;;;;:::i;:::-;;:::i;1992:104::-;;;;;;;;;;;;;:::i;14223:103::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;16731:293::-;;;;;;;;;;-1:-1:-1;16731:293:0;;;;;:::i;:::-;;:::i;8846:43::-;;;;;;;;;;;;8884:5;8846:43;;9411:35;;;;;;;;;;;;;;;;3698:413;;;;;;;;;;-1:-1:-1;3698:413:0;;;;;:::i;:::-;;:::i;9315:29::-;;;;;;;;;;;;;;;;7876:33;;;;;;;;;;;;;;;;2456:175;;;;;;;;;;-1:-1:-1;2456:175:0;;;;;:::i;:::-;;:::i;8280:40::-;;;;;;;;;;;;;;;;8811:26;;;;;;;;;;;;;;;;8154:51;;;;;;;;;;-1:-1:-1;8154:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9822:58;;;;;;;;;;-1:-1:-1;9822:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8074:33;;;;;;;;;;-1:-1:-1;8074:33:0;;;;;;;;;;;18078:282;;;;;;;;;;-1:-1:-1;18078:282:0;;;;;:::i;:::-;;:::i;34865:449::-;;;;;;;;;;-1:-1:-1;34865:449:0;;;;;:::i;:::-;;:::i;18368:182::-;;;;;;;;;;-1:-1:-1;18368:182:0;;;;;:::i;:::-;;:::i;17673:397::-;;;;;;;;;;-1:-1:-1;17673:397:0;;;;;:::i;:::-;;:::i;7760:30::-;;;;;;;;;;-1:-1:-1;7760:30:0;;;;-1:-1:-1;;;;;7760:30:0;;;36106:220;;;;;;;;;;;;;:::i;8512:39::-;;;;;;;;;;-1:-1:-1;8512:39:0;;;;;;;;8898:32;;;;;;;;;;;;;;;;15885:346;;;;;;;;;;-1:-1:-1;15885:346:0;;;;;:::i;:::-;;:::i;8560:27::-;;;;;;;;;;;;;;;;15219:300;;;;;;;;;;-1:-1:-1;15219:300:0;;;;;:::i;:::-;;:::i;2639:151::-;;;;;;;;;;-1:-1:-1;2639:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;2755:18:0;;;2728:7;2755:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;2639:151;7718:33;;;;;;;;;;;;;;;;8667:25;;;;;;;;;;;;;;;;14802:98;;;;;;;;;;;;;:::i;29326:2016::-;;;;;;;;;;-1:-1:-1;29326:2016:0;;;;;:::i;:::-;;:::i;7965:28::-;;;;;;;;;;-1:-1:-1;7965:28:0;;;;;:::i;:::-;;:::i;7799:37::-;;;;;;;;;;;;;;;;9027:52;;;;;;;;;;;;;;;;8630:30;;;;;;;;;;;;;;;;6123:244;;;;;;;;;;-1:-1:-1;6123:244:0;;;;;:::i;:::-;;:::i;27833:160::-;;;;;;;;;;;;;:::i;8773:31::-;;;;;;;;;;;;;;;;7593:24;;;;;;;;;;;;;;;;7916:42;;;;;;;;;;-1:-1:-1;7916:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9086:36;;;;;;;;;;-1:-1:-1;9086:36:0;;;;;;;;33069:1398;;;;;;;;;;-1:-1:-1;33069:1398:0;;;;;:::i;:::-;;:::i;1884:100::-;1938:13;1971:5;1964:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1884:100;:::o;2798:169::-;2881:4;2898:39;252:10;2921:7;2930:6;2898:8;:39::i;:::-;-1:-1:-1;2955:4:0;2798:169;;;;;:::o;14543:194::-;5878:6;;-1:-1:-1;;;;;5878:6:0;252:10;5878:22;5870:67;;;;-1:-1:-1;;;5870:67:0;;;;;;;:::i;:::-;;;;;;;;;14629:13:::1;::::0;::::1;::::0;::::1;;;14628:14;14620:68;;;::::0;-1:-1:-1;;;14620:68:0;;9514:2:1;14620:68:0::1;::::0;::::1;9496:21:1::0;9553:2;9533:18;;;9526:30;9592:34;9572:18;;;9565:62;-1:-1:-1;;;9643:18:1;;;9636:39;9692:19;;14620:68:0::1;9312:405:1::0;14620:68:0::1;14699:9;:30:::0;;-1:-1:-1;;;;;;14699:30:0::1;-1:-1:-1::0;;;;;14699:30:0;;;::::1;::::0;;;::::1;::::0;;14543:194::o;29071:247::-;5878:6;;-1:-1:-1;;;;;5878:6:0;252:10;5878:22;5870:67;;;;-1:-1:-1;;;5870:67:0;;;;;;;:::i;:::-;29165:2:::1;29155:6;:12;;:31;;;;;29181:5;29171:6;:15;;29155:31;29147:76;;;::::0;-1:-1:-1;;;29147:76:0;;9924:2:1;29147:76:0::1;::::0;::::1;9906:21:1::0;;;9943:18;;;9936:30;10002:34;9982:18;;;9975:62;10054:18;;29147:76:0::1;9722:356:1::0;29147:76:0::1;29252:13;:6:::0;29261:4:::1;29252:13;:::i;:::-;29234:15;:31:::0;29281:29:::1;::::0;160:25:1;;;29281:29:0::1;::::0;148:2:1;133:18;29281:29:0::1;;;;;;;;29071:247:::0;:::o;15527:288::-;5878:6;;-1:-1:-1;;;;;5878:6:0;252:10;5878:22;5870:67;;;;-1:-1:-1;;;5870:67:0;;;;;;;:::i;:::-;15645:16:::1;2187:2:::0;15645::::1;:16;:::i;:::-;15637:3;15617:13;2293:12:::0;;;2205:108;15617:13:::1;:17;::::0;15633:1:::1;15617:17;:::i;:::-;:23;;;;:::i;:::-;15616:46;;;;:::i;:::-;15606:6;:56;;15598:110;;;::::0;-1:-1:-1;;;15598:110:0;;12195:2:1;15598:110:0::1;::::0;::::1;12177:21:1::0;12234:2;12214:18;;;12207:30;12273:34;12253:18;;;12246:62;-1:-1:-1;;;12324:18:1;;;12317:39;12373:19;;15598:110:0::1;11993:405:1::0;15598:110:0::1;15741:16;2187:2:::0;15741::::1;:16;:::i;:::-;15731:27;::::0;:6;:27:::1;:::i;:::-;15719:9;:39:::0;;;15774:33:::1;::::0;160:25:1;;;15774:33:0::1;::::0;148:2:1;133:18;15774:33:0::1;14:177:1::0;2975:492:0;3115:4;3132:36;3142:6;3150:9;3161:6;3132:9;:36::i;:::-;-1:-1:-1;;;;;3208:19:0;;3181:24;3208:19;;;:11;:19;;;;;;;;252:10;3208:33;;;;;;;;3260:26;;;;3252:79;;;;-1:-1:-1;;;3252:79:0;;12605:2:1;3252:79:0;;;12587:21:1;12644:2;12624:18;;;12617:30;12683:34;12663:18;;;12656:62;-1:-1:-1;;;12734:18:1;;;12727:38;12782:19;;3252:79:0;12403:404:1;3252:79:0;3367:57;3376:6;252:10;3417:6;3398:16;:25;3367:8;:57::i;:::-;-1:-1:-1;3455:4:0;;2975:492;-1:-1:-1;;;;2975:492:0:o;14912:295::-;5878:6;;-1:-1:-1;;;;;5878:6:0;252:10;5878:22;5870:67;;;;-1:-1:-1;;;5870:67:0;;;;;;;:::i;:::-;15034:16:::1;2187:2:::0;15034::::1;:16;:::i;:::-;15025:4;15005:13;2293:12:::0;;;2205:108;15005:13:::1;:17;::::0;15021:1:::1;15005:17;:::i;:::-;:24;;;;:::i;:::-;15004:47;;;;:::i;:::-;14994:6;:57;;14986:111;;;::::0;-1:-1:-1;;;14986:111:0;;13014:2:1;14986:111:0::1;::::0;::::1;12996:21:1::0;13053:2;13033:18;;;13026:30;13092:34;13072:18;;;13065:62;-1:-1:-1;;;13143:18:1;;;13136:39;13192:19;;14986:111:0::1;12812:405:1::0;14986:111:0::1;15133:16;2187:2:::0;15133::::1;:16;:::i;:::-;15123:27;::::0;:6;:27:::1;:::i;:::-;15108:12;:42:::0;;;15166:33:::1;::::0;160:25:1;;;15166:33:0::1;::::0;148:2:1;133:18;15166:33:0::1;14:177:1::0;3475:215:0;252:10;3563:4;3612:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;3612:34:0;;;;;;;;;;3563:4;;3580:80;;3603:7;;3612:47;;3649:10;;3612:47;:::i;:::-;3580:8;:80::i;28334:312::-;5878:6;;-1:-1:-1;;;;;5878:6:0;252:10;5878:22;5870:67;;;;-1:-1:-1;;;5870:67:0;;;;;;;:::i;:::-;28425:18:::1;;28397:24;28415:4;28397:9;:24::i;:::-;:46;;28389:123;;;::::0;;-1:-1:-1;;;28389:123:0;;13554:2:1;28389:123:0::1;::::0;::::1;13536:21:1::0;13573:18;;;13566:30;;;;13632:34;13612:18;;;13605:62;13703:34;13683:18;;;13676:62;13755:19;;28389:123:0::1;13352:428:1::0;28389:123:0::1;28523:8;:15:::0;;-1:-1:-1;;;;28523:15:0::1;-1:-1:-1::0;;;28523:15:0::1;::::0;;28549:10:::1;:8;:10::i;:::-;28570:8;:16:::0;;-1:-1:-1;;;;28570:16:0::1;::::0;;28602:36:::1;::::0;28622:15:::1;160:25:1::0;;28602:36:0::1;::::0;148:2:1;133:18;28602:36:0::1;;;;;;;28334:312::o:0;28001:281::-;5878:6;;-1:-1:-1;;;;;5878:6:0;252:10;5878:22;5870:67;;;;-1:-1:-1;;;5870:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28093:30:0;::::1;28085:79;;;::::0;-1:-1:-1;;;28085:79:0;;13987:2:1;28085:79:0::1;::::0;::::1;13969:21:1::0;14026:2;14006:18;;;13999:30;14065:34;14045:18;;;14038:62;-1:-1:-1;;;14116:18:1;;;14109:34;14160:19;;28085:79:0::1;13785:400:1::0;28085:79:0::1;28175:15;:43:::0;;-1:-1:-1;;;;;;28175:43:0::1;-1:-1:-1::0;;;;;28175:43:0;::::1;::::0;;::::1;::::0;;;28234:40:::1;::::0;::::1;::::0;-1:-1:-1;;28234:40:0::1;28001:281:::0;:::o;2321:127::-;-1:-1:-1;;;;;2422:18:0;2395:7;2422:18;;;;;;;;;;;;2321:127::o;35322:281::-;35404:24;;35382:7;;35404:24;;35401:195;;;35480:25;;35451:26;;:54;;;;:::i;:::-;35444:61;;35322:281;:::o;35401:195::-;-1:-1:-1;35554:1:0;;35322:281::o;28654:409::-;28751:16;;;28765:1;28751:16;;;;;;;;28708:7;;;;28751:16;28765:1;28751:16;;;;;;;;-1:-1:-1;;28788:9:0;;:16;;;-1:-1:-1;;;28788:16:0;;;;28727:40;;-1:-1:-1;;;;;;28788:9:0;;;;:14;;-1:-1:-1;28788:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28778:4;28783:1;28778:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;28778:26:0;;;-1:-1:-1;;;;;28778:26:0;;;;;28833:4;28815;28820:1;28815:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28815:23:0;;;;:7;;;;;;;;;;:23;28886:16;;;28900:1;28886:16;;;;;;;;28859:24;;28886:16;;28900:1;;28886:16;;;;;;;;;-1:-1:-1;;28923:9:0;;28947:15;;28923:46;;-1:-1:-1;;;28923:46:0;;28859:43;;-1:-1:-1;;;;;;28923:9:0;;;;:23;;:46;;28964:4;;28923:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28923:46:0;;;;;;;;;;;;:::i;:::-;28913:56;;29052:3;29034:15;;29015:16;;:34;;;;:::i;:::-;29001:7;29009:1;29001:10;;;;;;;;:::i;:::-;;;;;;;:49;;;;:::i;:::-;29000:55;;;;:::i;:::-;28987:7;28995:1;28987:10;;;;;;;;:::i;:::-;;;;;;;:68;;;;:::i;:::-;28980:75;;;;28654:409;:::o;5965:150::-;5878:6;;-1:-1:-1;;;;;5878:6:0;252:10;5878:22;5870:67;;;;-1:-1:-1;;;5870:67:0;;;;;;;:::i;:::-;6058:6:::1;::::0;6037:40:::1;::::0;6074:1:::1;::::0;-1:-1:-1;;;;;6058:6:0::1;::::0;6037:40:::1;::::0;6074:1;;6037:40:::1;6088:6;:19:::0;;-1:-1:-1;;;;;;6088:19:0::1;::::0;;5965:150::o;31350:447::-;5878:6;;-1:-1:-1;;;;;5878:6:0;252:10;5878:22;5870:67;;;;-1:-1:-1;;;5870:67:0;;;;;;;:::i;:::-;31504:3:::1;31481:19;:26;;31473:90;;;::::0;-1:-1:-1;;;31473:90:0;;16003:2:1;31473:90:0::1;::::0;::::1;15985:21:1::0;16042:2;16022:18;;;16015:30;16081:34;16061:18;;;16054:62;-1:-1:-1;;;16132:18:1;;;16125:49;16191:19;;31473:90:0::1;15801:415:1::0;31473:90:0::1;31594:4;31582:8;:16;;:33;;;;-1:-1:-1::0;31602:13:0;31582:33:::1;31574:94;;;::::0;-1:-1:-1;;;31574:94:0;;16423:2:1;31574:94:0::1;::::0;::::1;16405:21:1::0;16462:2;16442:18;;;16435:30;16501:34;16481:18;;;16474:62;-1:-1:-1;;;16552:18:1;;;16545:46;16608:19;;31574:94:0::1;16221:412:1::0;31574:94:0::1;31679:15;:37:::0;;;;31727:16:::1;:27:::0;31765:13:::1;:24:::0;;-1:-1:-1;;31765:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31350:447::o;13982:233::-;5878:6;;-1:-1:-1;;;;;5878:6:0;252:10;5878:22;5870:67;;;;-1:-1:-1;;;5870:67:0;;;;;;;:::i;:::-;14036:14:::1;:22:::0;;-1:-1:-1;;14036:22:0;;::::1;::::0;;;14069:20:::1;:28:::0;;;;::::1;::::0;;2293:12;;14108::::1;:28:::0;2293:12;;14147:13:::1;:29:::0;14192:15:::1;::::0;::::1;::::0;;;::::1;13982:233::o:0;16463:260::-;5878:6;;-1:-1:-1;;;;;5878:6:0;252:10;5878:22;5870:67;;;;-1:-1:-1;;;5870:67:0;;;;;;;:::i;:::-;16559:4:::1;16555:104;;16597:6;::::0;-1:-1:-1;;;;;16597:6:0;;::::1;16587:16:::0;;::::1;::::0;16579:68:::1;;;::::0;-1:-1:-1;;;16579:68:0;;16840:2:1;16579:68:0::1;::::0;::::1;16822:21:1::0;16879:2;16859:18;;;16852:30;16918:34;16898:18;;;16891:62;-1:-1:-1;;;16969:18:1;;;16962:37;17016:19;;16579:68:0::1;16638:403:1::0;16579:68:0::1;-1:-1:-1::0;;;;;16669:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;16669:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16463:260::o;35611:487::-;5878:6;;-1:-1:-1;;;;;5878:6:0;252:10;5878:22;5870:67;;;;-1:-1:-1;;;5870:67:0;;;;;;;:::i;:::-;35699:29:::1;:27;:29::i;:::-;35680:15;:48;;:85;;;;;35764:1;35732:29;:27;:29::i;:::-;:33;35680:85;35672:120;;;::::0;-1:-1:-1;;;35672:120:0;;17248:2:1;35672:120:0::1;::::0;::::1;17230:21:1::0;17287:2;17267:18;;;17260:30;-1:-1:-1;;;17306:18:1;;;17299:52;17368:18;;35672:120:0::1;17046:346:1::0;35672:120:0::1;35832:1;35803:26;:30:::0;;;35844:24:::1;:32:::0;;-1:-1:-1;;35844:32:0::1;::::0;;35964:16:::1;::::0;35928:6:::1;::::0;35913:48:::1;::::0;-1:-1:-1;;;35913:48:0;;35955:4:::1;35913:48;::::0;::::1;913:51:1::0;35983:3:0::1;::::0;-1:-1:-1;;;;;35928:6:0;;::::1;::::0;35913:33:::1;::::0;886:18:1;35913:48:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:67;;;;:::i;:::-;:73;;;;:::i;:::-;36026:1;36007:16;:20:::0;36047:6:::1;::::0;36040:50:::1;::::0;-1:-1:-1;;;36040:50:0;;36064:10:::1;36040:50;::::0;::::1;17760:51:1::0;17827:18;;;17820:34;;;35889:97:0;;-1:-1:-1;;;;;;36047:6:0::1;::::0;36040:23:::1;::::0;17733:18:1;;36040:50:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35661:437;35611:487::o:0;17276:389::-;5878:6;;-1:-1:-1;;;;;5878:6:0;252:10;5878:22;5870:67;;;;-1:-1:-1;;;5870:67:0;;;;;;;:::i;:::-;17392:14:::1;:29:::0;;;17432:15:::1;:31:::0;;;17474:10:::1;:21:::0;;;17487:8;17521:32:::1;17450:13:::0;17409:12;17521:32:::1;:::i;:::-;:45;;;;:::i;:::-;17506:12;:60:::0;17620:3:::1;17601:16;8884:5;17601:2;:16;:::i;:::-;:22;;;;:::i;:::-;17585:12;;:38;;17577:80;;;::::0;-1:-1:-1;;;17577:80:0;;18317:2:1;17577:80:0::1;::::0;::::1;18299:21:1::0;18356:2;18336:18;;;18329:30;18395:31;18375:18;;;18368:59;18444:18;;17577:80:0::1;18115:353:1::0;17577:80:0::1;17276:389:::0;;;:::o;13499:427::-;5878:6;;-1:-1:-1;;;;;5878:6:0;252:10;5878:22;5870:67;;;;-1:-1:-1;;;5870:67:0;;;;;;;:::i;:::-;13587:13:::1;::::0;::::1;::::0;::::1;;;13586:14;13578:50;;;::::0;-1:-1:-1;;;13578:50:0;;18675:2:1;13578:50:0::1;::::0;::::1;18657:21:1::0;18714:2;18694:18;;;18687:30;18753:25;18733:18;;;18726:53;18796:18;;13578:50:0::1;18473:347:1::0;13578:50:0::1;13667:2;13647:16;:22;;13639:74;;;;-1:-1:-1::0;;;13639:74:0::1;;;;;;;:::i;:::-;13724:13;:20:::0;;-1:-1:-1;;13755:18:0;;;;;13805:12:::1;13784:18;:33:::0;;;13849:37:::1;::::0;13870:16;;13849:37:::1;:::i;:::-;13828:18;:58:::0;13902:16:::1;::::0;::::1;::::0;;;::::1;13499:427:::0;:::o;27265:498::-;5878:6;;27352:10;;-1:-1:-1;;;;;5878:6:0;252:10;5878:22;5870:67;;;;-1:-1:-1;;;5870:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27383:20:0;::::1;27375:59;;;::::0;-1:-1:-1;;;27375:59:0;;19435:2:1;27375:59:0::1;::::0;::::1;19417:21:1::0;19474:2;19454:18;;;19447:30;19513:28;19493:18;;;19486:56;19559:18;;27375:59:0::1;19233:350:1::0;27375:59:0::1;-1:-1:-1::0;;;;;27453:23:0;::::1;27471:4;27453:23;;::::0;:41:::1;;-1:-1:-1::0;27481:13:0::1;::::0;::::1;::::0;::::1;;;27480:14;27453:41;27445:106;;;::::0;-1:-1:-1;;;27445:106:0;;19790:2:1;27445:106:0::1;::::0;::::1;19772:21:1::0;19829:2;19809:18;;;19802:30;19868:34;19848:18;;;19841:62;-1:-1:-1;;;19919:18:1;;;19912:50;19979:19;;27445:106:0::1;19588:416:1::0;27445:106:0::1;27589:39;::::0;-1:-1:-1;;;27589:39:0;;27622:4:::1;27589:39;::::0;::::1;913:51:1::0;27562:24:0::1;::::0;-1:-1:-1;;;;;27589:24:0;::::1;::::0;::::1;::::0;886:18:1;;27589:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27647:46;::::0;-1:-1:-1;;;27647:46:0;;-1:-1:-1;;;;;17778:32:1;;;27647:46:0::1;::::0;::::1;17760:51:1::0;17827:18;;;17820:34;;;27562:66:0;;-1:-1:-1;27647:23:0;;::::1;::::0;::::1;::::0;17733:18:1;;27647:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27709;::::0;;-1:-1:-1;;;;;17778:32:1;;17760:51;;17842:2;17827:18;;17820:34;;;27639:54:0;;-1:-1:-1;27709:46:0::1;::::0;17733:18:1;27709:46:0::1;;;;;;;27364:399;27265:498:::0;;;;:::o;14334:203::-;5878:6;;-1:-1:-1;;;;;5878:6:0;252:10;5878:22;5870:67;;;;-1:-1:-1;;;5870:67:0;;;;;;;:::i;:::-;14432:9:::1;14428:102;14447:20:::0;;::::1;14428:102;;;14514:4;14488:9;:23;14498:9;;14508:1;14498:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14488:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;14488:23:0;:30;;-1:-1:-1;;14488:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14469:3;::::1;::::0;::::1;:::i;:::-;;;;14428:102;;;;14334:203:::0;;;:::o;1992:104::-;2048:13;2081:7;2074:14;;;;;:::i;14223:103::-;14272:16;14307:11;14300:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14300:18:0;;;;;;;;;;;;;;;;;;;;;;14223:103;:::o;16731:293::-;5878:6;;-1:-1:-1;;;;;5878:6:0;252:10;5878:22;5870:67;;;;-1:-1:-1;;;5870:67:0;;;;;;;:::i;:::-;16840:6:::1;::::0;-1:-1:-1;;;;;16840:6:0;;::::1;16832:14:::0;;::::1;::::0;16824:84:::1;;;::::0;-1:-1:-1;;;16824:84:0;;20351:2:1;16824:84:0::1;::::0;::::1;20333:21:1::0;20390:2;20370:18;;;20363:30;20429:34;20409:18;;;20402:62;20500:27;20480:18;;;20473:55;20545:19;;16824:84:0::1;20149:421:1::0;16824:84:0::1;16919:41;16948:4;16954:5;16919:28;:41::i;:::-;16976:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;16976:40:0;::::1;::::0;::::1;::::0;;;::::1;16731:293:::0;;:::o;3698:413::-;252:10;3791:4;3835:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;3835:34:0;;;;;;;;;;3888:35;;;;3880:85;;;;-1:-1:-1;;;3880:85:0;;20777:2:1;3880:85:0;;;20759:21:1;20816:2;20796:18;;;20789:30;20855:34;20835:18;;;20828:62;-1:-1:-1;;;20906:18:1;;;20899:35;20951:19;;3880:85:0;20575:401:1;3880:85:0;4001:67;252:10;4024:7;4052:15;4033:16;:34;4001:8;:67::i;:::-;-1:-1:-1;4099:4:0;;3698:413;-1:-1:-1;;;3698:413:0:o;2456:175::-;2542:4;2559:42;252:10;2583:9;2594:6;2559:9;:42::i;18078:282::-;5878:6;;-1:-1:-1;;;;;5878:6:0;252:10;5878:22;5870:67;;;;-1:-1:-1;;;5870:67:0;;;;;;;:::i;:::-;18185:9:::1;18181:172;18200:19:::0;;::::1;18181:172;;;18275:8;18240:19;:32;18260:8;;18269:1;18260:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18240:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;18240:32:0;:43;;-1:-1:-1;;18240:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18319:8;;18328:1;18319:11;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18303:38:0::1;;18332:8;18303:38;;;;1596:14:1::0;1589:22;1571:41;;1559:2;1544:18;;1431:187;18303:38:0::1;;;;;;;;18221:3:::0;::::1;::::0;::::1;:::i;:::-;;;;18181:172;;34865:449:::0;5878:6;;-1:-1:-1;;;;;5878:6:0;252:10;5878:22;5870:67;;;;-1:-1:-1;;;5870:67:0;;;;;;;:::i;:::-;34957:24:::1;::::0;::::1;;34956:25;34948:87;;;::::0;-1:-1:-1;;;34948:87:0;;21183:2:1;34948:87:0::1;::::0;::::1;21165:21:1::0;21222:2;21202:18;;;21195:30;21261:34;21241:18;;;21234:62;-1:-1:-1;;;21312:18:1;;;21305:47;21369:19;;34948:87:0::1;20981:413:1::0;34948:87:0::1;35072:3;35054:14;:21;;:43;;;;;35096:1;35079:14;:18;35054:43;35046:82;;;::::0;-1:-1:-1;;;35046:82:0;;21601:2:1;35046:82:0::1;::::0;::::1;21583:21:1::0;21640:2;21620:18;;;21613:30;21679:28;21659:18;;;21652:56;21725:18;;35046:82:0::1;21399:350:1::0;35046:82:0::1;35168:15;35139:26;:44:::0;35194:24:::1;:31:::0;;-1:-1:-1;;35194:31:0::1;35221:4;35194:31;::::0;;35236:16:::1;:33:::0;;;35285:21:::1;::::0;::::1;::::0;35194:24:::1;::::0;35285:21:::1;34865:449:::0;:::o;18368:182::-;5878:6;;-1:-1:-1;;;;;5878:6:0;252:10;5878:22;5870:67;;;;-1:-1:-1;;;5870:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18453:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;18453:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;18508:34;;1571:41:1;;;18508:34:0::1;::::0;1544:18:1;18508:34:0::1;;;;;;;18368:182:::0;;:::o;17673:397::-;5878:6;;-1:-1:-1;;;;;5878:6:0;252:10;5878:22;5870:67;;;;-1:-1:-1;;;5870:67:0;;;;;;;:::i;:::-;17789:15:::1;:30:::0;;;17830:16:::1;:32:::0;;;17873:11:::1;:22:::0;;;17887:8;17922:34:::1;17849:13:::0;17807:12;17922:34:::1;:::i;:::-;:48;;;;:::i;:::-;17906:13;:64:::0;18025:3:::1;18006:16;8884:5;18006:2;:16;:::i;:::-;:22;;;;:::i;:::-;17989:13;;:39;;17981:81;;;::::0;-1:-1:-1;;;17981:81:0;;21956:2:1;17981:81:0::1;::::0;::::1;21938:21:1::0;21995:2;21975:18;;;21968:30;22034:31;22014:18;;;22007:59;22083:18;;17981:81:0::1;21754:353:1::0;36106:220:0;5878:6;;-1:-1:-1;;;;;5878:6:0;252:10;5878:22;5870:67;;;;-1:-1:-1;;;5870:67:0;;;;;;;:::i;:::-;36171:24:::1;:32:::0;;-1:-1:-1;;36171:32:0::1;::::0;;36198:5:::1;36214:16;:20:::0;;;36245:26:::1;:30:::0;;;36291:27:::1;::::0;::::1;::::0;36198:5;36291:27:::1;36106:220::o:0;15885:346::-;5878:6;;-1:-1:-1;;;;;5878:6:0;252:10;5878:22;5870:67;;;;-1:-1:-1;;;5870:67:0;;;;;;;:::i;:::-;16008:6:::1;15988:13;2293:12:::0;;;2205:108;15988:13:::1;:17;::::0;16004:1:::1;15988:17;:::i;:::-;:26;;;;:::i;:::-;15975:9;:39;;15967:105;;;::::0;-1:-1:-1;;;15967:105:0;;22314:2:1;15967:105:0::1;::::0;::::1;22296:21:1::0;22353:2;22333:18;;;22326:30;22392:34;22372:18;;;22365:62;-1:-1:-1;;;22443:18:1;;;22436:51;22504:19;;15967:105:0::1;22112:417:1::0;15967:105:0::1;16123:4;16103:13;2293:12:::0;;;2205:108;16103:13:::1;:17;::::0;16119:1:::1;16103:17;:::i;:::-;:24;;;;:::i;:::-;16090:9;:37;;16082:102;;;::::0;-1:-1:-1;;;16082:102:0;;22736:2:1;16082:102:0::1;::::0;::::1;22718:21:1::0;22775:2;22755:18;;;22748:30;22814:34;22794:18;;;22787:62;-1:-1:-1;;;22865:18:1;;;22858:50;22925:19;;16082:102:0::1;22534:416:1::0;16082:102:0::1;16194:18;:30:::0;15885:346::o;15219:300::-;5878:6;;-1:-1:-1;;;;;5878:6:0;252:10;5878:22;5870:67;;;;-1:-1:-1;;;5870:67:0;;;;;;;:::i;:::-;15342:16:::1;2187:2:::0;15342::::1;:16;:::i;:::-;15333:4;15313:13;2293:12:::0;;;2205:108;15313:13:::1;:17;::::0;15329:1:::1;15313:17;:::i;:::-;:24;;;;:::i;:::-;15312:47;;;;:::i;:::-;15302:6;:57;;15294:112;;;::::0;-1:-1:-1;;;15294:112:0;;23157:2:1;15294:112:0::1;::::0;::::1;23139:21:1::0;23196:2;23176:18;;;23169:30;23235:34;23215:18;;;23208:62;-1:-1:-1;;;23286:18:1;;;23279:40;23336:19;;15294:112:0::1;22955:406:1::0;15294:112:0::1;15443:16;2187:2:::0;15443::::1;:16;:::i;:::-;15433:27;::::0;:6;:27:::1;:::i;:::-;15417:13;:43:::0;;;15476:35:::1;::::0;160:25:1;;;15476:35:0::1;::::0;148:2:1;133:18;15476:35:0::1;14:177:1::0;14802:98:0;5878:6;;-1:-1:-1;;;;;5878:6:0;252:10;5878:22;5870:67;;;;-1:-1:-1;;;5870:67:0;;;;;;;:::i;:::-;14864:20:::1;:28:::0;;-1:-1:-1;;14864:28:0::1;::::0;;14802:98::o;29326:2016::-;5878:6;;-1:-1:-1;;;;;5878:6:0;252:10;5878:22;5870:67;;;;-1:-1:-1;;;5870:67:0;;;;;;;:::i;:::-;29467:13:::1;::::0;::::1;::::0;::::1;;;29466:14;29458:70;;;::::0;-1:-1:-1;;;29458:70:0;;23568:2:1;29458:70:0::1;::::0;::::1;23550:21:1::0;23607:2;23587:18;;;23580:30;23646:34;23626:18;;;23619:62;-1:-1:-1;;;23697:18:1;;;23690:41;23748:19;;29458:70:0::1;23366:407:1::0;29458:70:0::1;29566:2;29547:16;:21;29539:73;;;;-1:-1:-1::0;;;29539:73:0::1;;;;;;;:::i;:::-;29651:15;:22;29633:7;:14;:40;29625:83;;;::::0;-1:-1:-1;;;29625:83:0;;23980:2:1;29625:83:0::1;::::0;::::1;23962:21:1::0;24019:2;23999:18;;;23992:30;24058:32;24038:18;;;24031:60;24108:18;;29625:83:0::1;23778:354:1::0;29625:83:0::1;29744:3;29727:7;:14;:20;29719:87;;;::::0;-1:-1:-1;;;29719:87:0;;24339:2:1;29719:87:0::1;::::0;::::1;24321:21:1::0;24378:2;24358:18;;;24351:30;24417:34;24397:18;;;24390:62;-1:-1:-1;;;24468:18:1;;;24461:52;24530:19;;29719:87:0::1;24137:418:1::0;29719:87:0::1;29919:9;29915:351;29938:7;:14;29934:1;:18;29915:351;;;29973:14;29990:7;29998:1;29990:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;30015:26:0;::::1;;::::0;;;:18:::1;:26:::0;;;;;;;:33;;-1:-1:-1;;30015:33:0::1;30044:4;30015:33;::::0;;29990:10;-1:-1:-1;30099:26:0::1;:15;30117:8;30099:26;:::i;:::-;-1:-1:-1::0;;;;;30063:33:0;::::1;;::::0;;;:25:::1;:33;::::0;;;;:62;;;;30179:16:::1;2187:2:::0;30179::::1;:16;:::i;:::-;30157:15;30173:1;30157:18;;;;;;;;:::i;:::-;;;;;;;:39;;;;:::i;:::-;30140:56;;30211:43;30227:10;30239:6;30247;30211:15;:43::i;:::-;29958:308;;29954:3;;;;;:::i;:::-;;;;29915:351;;;-1:-1:-1::0;30313:13:0::1;:20:::0;;-1:-1:-1;;30344:18:0;;;;;30394:12:::1;30373:18;:33:::0;;;30438:37:::1;::::0;30459:16;;30438:37:::1;:::i;:::-;30417:18;:58:::0;30491:16:::1;::::0;::::1;::::0;;;::::1;30565:9;;;;;;;;;-1:-1:-1::0;;;;;30565:9:0::1;-1:-1:-1::0;;;;;30565:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30553:43:0::1;;30605:4;30612:9;;;;;;;;;-1:-1:-1::0;;;;;30612:9:0::1;-1:-1:-1::0;;;;;30612:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30553:76;::::0;-1:-1:-1;;;;;;30553:76:0::1;::::0;;;;;;-1:-1:-1;;;;;24790:15:1;;;30553:76:0::1;::::0;::::1;24772:34:1::0;24842:15;;24822:18;;;24815:43;24707:18;;30553:76:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30544:6;:85:::0;;-1:-1:-1;;;;;;30544:85:0::1;-1:-1:-1::0;;;;;30544:85:0;;;::::1;::::0;;::::1;::::0;;30640:49:::1;::::0;-1:-1:-1;30640:26:0::1;:49::i;:::-;30737:6;::::0;30700:51:::1;::::0;-1:-1:-1;;;;;30737:6:0::1;::::0;30700:28:::1;:51::i;:::-;30831:1;30807:21;:25;30799:73;;;::::0;-1:-1:-1;;;30799:73:0;;25071:2:1;30799:73:0::1;::::0;::::1;25053:21:1::0;25110:2;25090:18;;;25083:30;25149:34;25129:18;;;25122:62;-1:-1:-1;;;25200:18:1;;;25193:33;25243:19;;30799:73:0::1;24869:399:1::0;30799:73:0::1;30920:1;30893:24;30911:4;30893:9;:24::i;:::-;:28;30885:79;;;::::0;-1:-1:-1;;;30885:79:0;;25475:2:1;30885:79:0::1;::::0;::::1;25457:21:1::0;25514:2;25494:18;;;25487:30;25553:34;25533:18;;;25526:62;-1:-1:-1;;;25604:18:1;;;25597:36;25650:19;;30885:79:0::1;25273:402:1::0;30885:79:0::1;31009:9;::::0;30977:69:::1;::::0;30994:4:::1;::::0;-1:-1:-1;;;;;31009:9:0::1;31021:24;30994:4:::0;31021:9:::1;:24::i;30977:69::-;31057:9;::::0;-1:-1:-1;;;;;31057:9:0::1;:25;31090:21;31135:4;31155:24;31135:4:::0;31155:9:::1;:24::i;:::-;31194:1;31237::::0;31288:4:::1;31308:15;31057:277;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29326:2016:::0;;;:::o;7965:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7965:28:0;;-1:-1:-1;7965:28:0;:::o;6123:244::-;5878:6;;-1:-1:-1;;;;;5878:6:0;252:10;5878:22;5870:67;;;;-1:-1:-1;;;5870:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6212:22:0;::::1;6204:73;;;::::0;-1:-1:-1;;;6204:73:0;;26805:2:1;6204:73:0::1;::::0;::::1;26787:21:1::0;26844:2;26824:18;;;26817:30;26883:34;26863:18;;;26856:62;-1:-1:-1;;;26934:18:1;;;26927:36;26980:19;;6204:73:0::1;26603:402:1::0;6204:73:0::1;6314:6;::::0;6293:38:::1;::::0;-1:-1:-1;;;;;6293:38:0;;::::1;::::0;6314:6:::1;::::0;6293:38:::1;::::0;6314:6:::1;::::0;6293:38:::1;6342:6;:17:::0;;-1:-1:-1;;;;;;6342:17:0::1;-1:-1:-1::0;;;;;6342:17:0;;;::::1;::::0;;;::::1;::::0;;6123:244::o;27833:160::-;5878:6;;-1:-1:-1;;;;;5878:6:0;252:10;5878:22;5870:67;;;;-1:-1:-1;;;5870:67:0;;;;;;;:::i;:::-;27927:58:::1;::::0;27891:12:::1;::::0;27935:10:::1;::::0;27959:21:::1;::::0;27891:12;27927:58;27891:12;27927:58;27959:21;27935:10;27927:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33069:1398:::0;5878:6;;-1:-1:-1;;;;;5878:6:0;252:10;5878:22;5870:67;;;;-1:-1:-1;;;5870:67:0;;;;;;;:::i;:::-;33173:4:::1;33163:7;:14;;33155:80;;;::::0;-1:-1:-1;;;33155:80:0;;27422:2:1;33155:80:0::1;::::0;::::1;27404:21:1::0;27461:2;27441:18;;;27434:30;27500:34;27480:18;;;27473:62;-1:-1:-1;;;27551:18:1;;;27544:51;27612:19;;33155:80:0::1;27220:417:1::0;33155:80:0::1;33296:19;::::0;33278:37:::1;::::0;:15:::1;:37;:::i;:::-;33254:20;;:61;;33246:87;;;::::0;-1:-1:-1;;;33246:87:0;;27977:2:1;33246:87:0::1;::::0;::::1;27959:21:1::0;28016:2;27996:18;;;27989:30;-1:-1:-1;;;28035:18:1;;;28028:43;28088:18;;33246:87:0::1;27775:337:1::0;33246:87:0::1;33367:15;33344:20;:38:::0;33420:6:::1;::::0;33413:39:::1;::::0;-1:-1:-1;;;33413:39:0;;33446:4:::1;33413:39;::::0;::::1;913:51:1::0;33393:17:0::1;::::0;-1:-1:-1;;;;;33420:6:0::1;::::0;33413:24:::1;::::0;886:18:1;;33413:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33393:59;;33463:20;33486:24;33504:4;33486:9;:24::i;:::-;33463:47:::0;-1:-1:-1;33521:16:0::1;33562:5;33540:19;33552:7:::0;33540:9;:19:::1;:::i;:::-;:27;;;;:::i;:::-;33714:6;::::0;33738:9:::1;::::0;33707:52:::1;::::0;-1:-1:-1;;;33707:52:0;;-1:-1:-1;;;;;33738:9:0;;::::1;33707:52;::::0;::::1;17760:51:1::0;17827:18;;;17820:34;;;33521:46:0;;-1:-1:-1;33606:21:0::1;::::0;33714:6;::::1;::::0;33707:22:::1;::::0;17733:18:1;;33707:52:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;33805:9:0::1;::::0;:234:::1;::::0;-1:-1:-1;;;33805:234:0;;-1:-1:-1;;;;;33805:9:0;;::::1;::::0;:28:::1;::::0;:234:::1;::::0;33856:4:::1;::::0;33876:8;;33805:9;;;;33856:4;;34013:15:::1;::::0;33805:234:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34052:25;34107:12;34080:24;34098:4;34080:9;:24::i;:::-;:39;;;;:::i;:::-;34052:67:::0;-1:-1:-1;34133:21:0;;34130:118:::1;;34170:66;34194:4;34209:6;34218:17;34170:15;:66::i;:::-;34260:23;34286:41;34310:17:::0;34286:21:::1;:41;:::i;:::-;34260:67:::0;-1:-1:-1;34343:19:0;;34340:80:::1;;34378:30;34392:15;34378:13;:30::i;:::-;34437:22;::::0;34450:8;;34437:22:::1;::::0;;;::::1;33144:1323;;;;;;33069:1398:::0;:::o;5040:380::-;-1:-1:-1;;;;;5176:19:0;;5168:68;;;;-1:-1:-1;;;5168:68:0;;29181:2:1;5168:68:0;;;29163:21:1;29220:2;29200:18;;;29193:30;29259:34;29239:18;;;29232:62;-1:-1:-1;;;29310:18:1;;;29303:34;29354:19;;5168:68:0;28979:400:1;5168:68:0;-1:-1:-1;;;;;5255:21:0;;5247:68;;;;-1:-1:-1;;;5247:68:0;;29586:2:1;5247:68:0;;;29568:21:1;29625:2;29605:18;;;29598:30;29664:34;29644:18;;;29637:62;-1:-1:-1;;;29715:18:1;;;29708:32;29757:19;;5247:68:0;29384:398:1;5247:68:0;-1:-1:-1;;;;;5328:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;5380:32;;160:25:1;;;5380:32:0;;133:18:1;5380:32:0;;;;;;;5040:380;;;:::o;18558:6250::-;-1:-1:-1;;;;;18658:18:0;;18650:68;;;;-1:-1:-1;;;18650:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18737:16:0;;18729:64;;;;-1:-1:-1;;;18729:64:0;;;;;;;:::i;:::-;18821:1;18812:6;:10;18804:52;;;;-1:-1:-1;;;18804:52:0;;30799:2:1;18804:52:0;;;30781:21:1;30838:2;30818:18;;;30811:30;30877:31;30857:18;;;30850:59;30926:18;;18804:52:0;30597:353:1;18804:52:0;18881:13;;;;;;;18877:132;;-1:-1:-1;;;;;18918:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;18947:23:0;;;;;;:19;:23;;;;;;;;18918:52;18910:87;;;;-1:-1:-1;;;18910:87:0;;31157:2:1;18910:87:0;;;31139:21:1;31196:2;31176:18;;;31169:30;-1:-1:-1;;;31215:18:1;;;31208:52;31277:18;;18910:87:0;30955:346:1;18910:87:0;24910:18;;24895:12;:33;19024:26;:43;;;;-1:-1:-1;19054:13:0;;;;;;;19024:43;19021:235;;;-1:-1:-1;;;;;19093:15:0;;;;;;:9;:15;;;;;;;;19092:16;:34;;;;-1:-1:-1;;;;;;19113:13:0;;;;;;:9;:13;;;;;;;;19112:14;19092:34;19091:53;;;-1:-1:-1;5816:6:0;;-1:-1:-1;;;;;19131:13:0;;;5816:6;;19131:13;19091:53;:78;;;-1:-1:-1;;;;;;19148:21:0;;19162:6;19148:21;19091:78;19083:161;;;;-1:-1:-1;;;19083:161:0;;31508:2:1;19083:161:0;;;31490:21:1;31547:2;31527:18;;;31520:30;31586:34;31566:18;;;31559:62;31657:34;31637:18;;;31630:62;-1:-1:-1;;;31708:19:1;;;31701:37;31755:19;;19083:161:0;31306:474:1;19083:161:0;-1:-1:-1;;;;;19271:24:0;;;;;;:18;:24;;;;;;;;19268:610;;;-1:-1:-1;;;;;19314:29:0;;;;;;:25;:29;;;;;;;;19311:556;;;-1:-1:-1;;;;;19421:31:0;;;;;;:25;:31;;;;;;19456:15;-1:-1:-1;19421:50:0;19413:78;;;;-1:-1:-1;;;19413:78:0;;31987:2:1;19413:78:0;;;31969:21:1;32026:2;32006:18;;;31999:30;-1:-1:-1;;;32045:18:1;;;32038:45;32100:18;;19413:78:0;31785:339:1;19413:78:0;19528:23;:21;:23::i;:::-;19518:6;:33;;19510:98;;;;-1:-1:-1;;;19510:98:0;;32331:2:1;19510:98:0;;;32313:21:1;32370:2;32350:18;;;32343:30;32409:34;32389:18;;;32382:62;-1:-1:-1;;;32460:18:1;;;32453:50;32520:19;;19510:98:0;32129:416:1;19510:98:0;19661:26;:15;19679:8;19661:26;:::i;:::-;-1:-1:-1;;;;;19627:31:0;;;;;;:25;:31;;;;;:60;19311:556;;;-1:-1:-1;;;;;19713:23:0;;;;;;:19;:23;;;;;;;;19709:158;;19756:95;;-1:-1:-1;;;19756:95:0;;32752:2:1;19756:95:0;;;32734:21:1;32791:2;32771:18;;;32764:30;32830:34;32810:18;;;32803:62;32901:34;32881:18;;;32874:62;-1:-1:-1;;;32952:19:1;;;32945:52;33014:19;;19756:95:0;32550:489:1;19709:158:0;19901:14;;;;19898:1662;;;5816:6;;-1:-1:-1;;;;;19935:15:0;;;5816:6;;19935:15;;;;:32;;-1:-1:-1;5816:6:0;;-1:-1:-1;;;;;19954:13:0;;;5816:6;;19954:13;;19935:32;:52;;;;-1:-1:-1;;;;;;19971:16:0;;;;19935:52;:77;;;;-1:-1:-1;;;;;;19991:21:0;;20005:6;19991:21;;19935:77;:107;;;;-1:-1:-1;;;;;;20017:25:0;;;;;;:19;:25;;;;;;;;20016:26;19935:107;:135;;;;-1:-1:-1;;;;;;20047:23:0;;;;;;:19;:23;;;;;;;;20046:24;19935:135;19931:1618;;;20246:20;;;;20242:506;;;20308:9;;-1:-1:-1;;;;;20294:24:0;;;20308:9;;20294:24;;;;:49;;-1:-1:-1;20336:6:0;;-1:-1:-1;;;;;20322:21:0;;;20336:6;;20322:21;;20294:49;20290:439;;;20421:16;20436:1;20421:12;:16;:::i;:::-;20408:9;20379:39;;;;:28;:39;;;;;;:58;:113;;;;-1:-1:-1;20476:16:0;20491:1;20476:12;:16;:::i;:::-;-1:-1:-1;;;;;20441:32:0;;;;;;:28;:32;;;;;;:51;20379:113;20371:179;;;;-1:-1:-1;;;20371:179:0;;33246:2:1;20371:179:0;;;33228:21:1;33285:2;33265:18;;;33258:30;33324:34;33304:18;;;33297:62;-1:-1:-1;;;33375:18:1;;;33368:51;33436:19;;20371:179:0;33044:417:1;20371:179:0;20606:9;20577:39;;;;:28;:39;;;;;;20619:12;20577:54;;;;-1:-1:-1;;;;;20658:32:0;;;;;;:47;20290:439;-1:-1:-1;;;;;20817:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;20853:35:0;;;;;;:31;:35;;;;;;;;20852:36;20817:71;20813:721;;;20931:12;;20921:6;:22;;20913:75;;;;-1:-1:-1;;;20913:75:0;;33668:2:1;20913:75:0;;;33650:21:1;33707:2;33687:18;;;33680:30;33746:34;33726:18;;;33719:62;-1:-1:-1;;;33797:18:1;;;33790:38;33845:19;;20913:75:0;33466:404:1;20913:75:0;21045:9;;21028:13;21038:2;21028:9;:13::i;:::-;21019:22;;:6;:22;:::i;:::-;:35;;21011:72;;;;-1:-1:-1;;;21011:72:0;;34077:2:1;21011:72:0;;;34059:21:1;34116:2;34096:18;;;34089:30;-1:-1:-1;;;34135:18:1;;;34128:54;34199:18;;21011:72:0;33875:348:1;21011:72:0;20813:721;;;-1:-1:-1;;;;;21160:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;21194:37:0;;;;;;:31;:37;;;;;;;;21193:38;21160:71;21156:378;;;21274:13;;21264:6;:23;;21256:78;;;;-1:-1:-1;;;21256:78:0;;34430:2:1;21256:78:0;;;34412:21:1;34469:2;34449:18;;;34442:30;34508:34;34488:18;;;34481:62;-1:-1:-1;;;34559:18:1;;;34552:40;34609:19;;21256:78:0;34228:406:1;21156:378:0;-1:-1:-1;;;;;21382:35:0;;;;;;:31;:35;;;;;;;;21377:157;;21476:9;;21459:13;21469:2;21459:9;:13::i;:::-;21450:22;;:6;:22;:::i;:::-;:35;;21442:72;;;;-1:-1:-1;;;21442:72:0;;34077:2:1;21442:72:0;;;34059:21:1;34116:2;34096:18;;;34089:30;-1:-1:-1;;;34135:18:1;;;34128:54;34199:18;;21442:72:0;33875:348:1;21442:72:0;21572:28;21603:24;21621:4;21603:9;:24::i;:::-;21687:18;;21572:55;;-1:-1:-1;21663:42:0;;;;;;;21721:22;;-1:-1:-1;21732:11:0;;;;;;;21721:22;:35;;;;-1:-1:-1;21748:8:0;;-1:-1:-1;;;21748:8:0;;;;21747:9;21721:35;:71;;;;-1:-1:-1;;;;;;21761:31:0;;;;;;:25;:31;;;;;;;;21760:32;21721:71;:101;;;;-1:-1:-1;;;;;;21797:25:0;;;;;;:19;:25;;;;;;;;21796:26;21721:101;:129;;;;-1:-1:-1;;;;;;21827:23:0;;;;;;:19;:23;;;;;;;;21826:24;21721:129;21718:232;;;21867:8;:15;;-1:-1:-1;;;;21867:15:0;-1:-1:-1;;;21867:15:0;;;21897:10;:8;:10::i;:::-;21922:8;:16;;-1:-1:-1;;;;21922:16:0;;;21718:232;21966:8;;-1:-1:-1;;;21966:8:0;;;;21965:9;:42;;;;-1:-1:-1;;;;;;21978:29:0;;;;;;:25;:29;;;;;;;;21965:42;:59;;;;-1:-1:-1;22011:13:0;;;;21965:59;:114;;;;;22064:15;;22047:14;;:32;;;;:::i;:::-;22028:15;:51;;21965:114;:144;;;;-1:-1:-1;;;;;;22084:25:0;;;;;;:19;:25;;;;;;;;22083:26;21965:144;21962:204;;;22125:29;:27;:29::i;:::-;-1:-1:-1;;;;;22296:25:0;;22178:12;22296:25;;;:19;:25;;;;;;22193:4;;22296:25;;;:52;;-1:-1:-1;;;;;;22325:23:0;;;;;;:19;:23;;;;;;;;22296:52;22293:99;;;-1:-1:-1;22375:5:0;22293:99;22412:12;22439:20;22553:7;22550:2205;;;24910:18;;24895:12;:33;22615:60;;;;-1:-1:-1;;;;;;22644:31:0;;;;;;:25;:31;;;;;;;;22615:60;:94;;;;-1:-1:-1;;;;;;22680:29:0;;;;;;:25;:29;;;;;;;;22679:30;22615:94;:122;;;;-1:-1:-1;;;;;;22714:23:0;;;;;;:19;:23;;;;;;;;22713:24;22615:122;:142;;;;;22756:1;22741:12;;:16;22615:142;22612:1832;;;24910:18;;24895:12;:33;22795:330;;23104:1;23088:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;22795:330:0;-1:-1:-1;;;;;23149:13:0;;;;;;:9;:13;;;;;;;;23145:210;;-1:-1:-1;;;;;23186:13:0;;;;;;:9;:13;;;;;:20;;-1:-1:-1;;23186:20:0;23202:4;23186:20;;;;;;23229:10;:15;;23202:4;;23229:10;;:15;;23202:4;;23229:15;:::i;:::-;;;;-1:-1:-1;;23267:11:0;:20;;;;;;;-1:-1:-1;23267:20:0;;;;;;;;-1:-1:-1;;;;;;23267:20:0;-1:-1:-1;;;;;23267:20:0;;;;;;;;23315;;913:51:1;;;23315:20:0;;901:2:1;886:18;23315:20:0;;;;;;;23145:210;8884:5;23391:12;;23382:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;23375:42;;23480:12;;23462:15;;23455:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;23433:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;23556:12:0;;23539:14;;23532:21;;:4;:21;:::i;:::-;:36;;;;:::i;:::-;23511:17;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;23622:12:0;;23609:10;;23602:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;23587:47;;22612:1832;;;-1:-1:-1;;;;;23699:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;23748:1;23732:13;;:17;23699:50;23695:749;;;8884:5;23785:13;;23776:6;:22;;;;:::i;:::-;:36;;;;:::i;:::-;23769:43;;23879:13;;23860:16;;23853:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;23831:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;23957:13:0;;23939:15;;23932:22;;:4;:22;:::i;:::-;:38;;;;:::i;:::-;23911:17;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;24025:12:0;;24011:11;;24004:18;;:4;:18;:::i;23695:749::-;-1:-1:-1;;;;;24100:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;24150:1;24135:12;;:16;24100:51;24097:347;;;8884:5;24185:12;;24176:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;24169:42;;24274:12;;24256:15;;24249:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;24227:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;24350:12:0;;24333:14;;24326:21;;:4;:21;:::i;:::-;:36;;;;:::i;:::-;24305:17;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;24416:12:0;;24403:10;;24396:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;24381:47;;24097:347;24475:8;;24472:235;;24507:42;24523:4;24537;24544;24507:15;:42::i;:::-;24571:16;;24568:124;;24611:61;24635:4;24650:6;24659:12;24611:15;:61::i;:::-;24729:14;24739:4;24729:14;;:::i;:::-;;;22550:2205;24767:33;24783:4;24789:2;24793:6;24767:15;:33::i;:::-;18637:6171;;;;;18558:6250;;;:::o;26044:1213::-;26085:23;26111:24;26129:4;26111:9;:24::i;:::-;26085:50;;26146:25;26195:17;;26174:18;;:38;;;;:::i;:::-;26146:66;-1:-1:-1;26236:20:0;;;:46;;-1:-1:-1;26260:22:0;;26236:46;26233:60;;;26285:7;;26044:1213::o;26233:60::-;26326:18;;:23;;26347:2;26326:23;:::i;:::-;26308:15;:41;26305:113;;;26383:18;;:23;;26404:2;26383:23;:::i;:::-;26365:41;;26305:113;26430:12;26512:23;26597:1;26577:17;26556:18;;26538:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;26512:86;-1:-1:-1;26619:51:0;26636:33;26512:86;26636:15;:33;:::i;:::-;26619:16;:51::i;:::-;26874:18;;26713:21;;;;26692:18;;26874:20;;26893:1;;26874:20;:::i;:::-;26853:42;;:17;:42;:::i;:::-;26832:17;;26819:30;;:10;:30;:::i;:::-;:77;;;;:::i;:::-;26794:102;-1:-1:-1;26909:33:0;26794:102;26909:33;;:::i;:::-;26988:1;26967:18;:22;;;27000:17;:21;26909:33;-1:-1:-1;27045:19:0;;;;;:42;;;27086:1;27068:15;:19;27045:42;27042:119;;;27103:46;27116:15;27133;27103:12;:46::i;:::-;27194:15;;27186:63;;-1:-1:-1;;;;;27194:15:0;;;;27223:21;;27186:63;;;;27223:21;27194:15;27186:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;26044:1213:0:o;17032:236::-;-1:-1:-1;;;;;17115:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;17115:39:0;;;;;;;17165;17115:31;:39;17165:26;:39::i;4119:614::-;-1:-1:-1;;;;;4259:20:0;;4251:70;;;;-1:-1:-1;;;4251:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4340:23:0;;4332:71;;;;-1:-1:-1;;;4332:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4440:17:0;;4416:21;4440:17;;;;;;;;;;;4476:23;;;;4468:74;;;;-1:-1:-1;;;4468:74:0;;34841:2:1;4468:74:0;;;34823:21:1;34880:2;34860:18;;;34853:30;34919:34;34899:18;;;34892:62;-1:-1:-1;;;34970:18:1;;;34963:36;35016:19;;4468:74:0;34639:402:1;4468:74:0;-1:-1:-1;;;;;4578:17:0;;;:9;:17;;;;;;;;;;;4598:22;;;4578:42;;4642:20;;;;;;;;:30;;4614:6;;4578:9;4642:30;;4614:6;;4642:30;:::i;:::-;;;;;;;;4707:9;-1:-1:-1;;;;;4690:35:0;4699:6;-1:-1:-1;;;;;4690:35:0;;4718:6;4690:35;;;;160:25:1;;148:2;133:18;;14:177;4690:35:0;;;;;;;;4240:493;4119:614;;;:::o;16243:207::-;-1:-1:-1;;;;;16331:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;16331:52:0;;;;;;;;;;16399:43;;35214:51:1;;;35281:18;;;35274:50;16399:43:0;;35187:18:1;16399:43:0;;;;;;;16243:207;;:::o;34475:382::-;34563:16;;;34577:1;34563:16;;;;;;;;34539:21;;34563:16;;;;;;;;-1:-1:-1;;34600:9:0;;:16;;;-1:-1:-1;;;34600:16:0;;;;34539:40;;-1:-1:-1;;;;;;34600:9:0;;;;:14;;-1:-1:-1;34600:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34590:4;34595:1;34590:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;34590:26:0;;;-1:-1:-1;;;;;34590:26:0;;;;;34645:4;34627;34632:1;34627:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34627:23:0;;;:7;;;;;;;;;:23;34663:9;;:186;;-1:-1:-1;;;34663:186:0;;:9;;;:60;;34731:11;;34663:186;;:9;;34774:4;;34801:6;;34823:15;;34663:186;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34528:329;34475:382;:::o;31809:1252::-;31895:15;31878:14;:32;;;31931:20;:38;32007:6;;32000:39;;-1:-1:-1;;;32000:39:0;;32033:4;32000:39;;;913:51:1;-1:-1:-1;;;;;;;32007:6:0;;32000:24;;886:18:1;;32000:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31980:59;;32050:20;32073:24;32091:4;32073:9;:24::i;:::-;32050:47;;32108:16;32158:5;32139:16;;32127:9;:28;;;;:::i;:::-;:36;;;;:::i;:::-;32310:6;;32334:9;;32303:52;;-1:-1:-1;;;32303:52:0;;-1:-1:-1;;;;;32334:9:0;;;32303:52;;;17760:51:1;17827:18;;;17820:34;;;32108:55:0;;-1:-1:-1;32202:21:0;;32310:6;;;32303:22;;17733:18:1;;32303:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;32401:9:0;;:234;;-1:-1:-1;;;32401:234:0;;-1:-1:-1;;;;;32401:9:0;;;;:28;;:234;;32452:4;;32472:8;;32401:9;;;;32452:4;;32609:15;;32401:234;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32648:25;32703:12;32676:24;32694:4;32676:9;:24::i;:::-;:39;;;;:::i;:::-;32648:67;-1:-1:-1;32729:21:0;;32726:118;;32766:66;32790:4;32805:6;32814:17;32766:15;:66::i;:::-;32856:23;32882:41;32906:17;32882:21;:41;:::i;:::-;32856:67;-1:-1:-1;32939:19:0;;32936:80;;32974:30;32988:15;32974:13;:30::i;:::-;33033:20;;33044:8;;33033:20;;;;;31857:1204;;;;;;31809:1252::o;24944:573::-;25096:16;;;25110:1;25096:16;;;;;;;;25072:21;;25096:16;;;;;;;;;;-1:-1:-1;25096:16:0;25072:40;;25141:4;25123;25128:1;25123:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25123:23:0;;;:7;;;;;;;;;;:23;;;;25167:9;;:16;;;-1:-1:-1;;;25167:16:0;;;;:9;;;;;:14;;:16;;;;;25123:7;;25167:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25157:4;25162:1;25157:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25157:26:0;;;:7;;;;;;;;;:26;25228:9;;25196:56;;25213:4;;25228:9;25240:11;25196:8;:56::i;:::-;25291:9;;:218;;-1:-1:-1;;;25291:218:0;;-1:-1:-1;;;;;25291:9:0;;;;:60;;:218;;25366:11;;25291:9;;25436:4;;25463;;25483:15;;25291:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25529:507;25709:9;;25677:56;;25694:4;;-1:-1:-1;;;;;25709:9:0;25721:11;25677:8;:56::i;:::-;25776:9;;:252;;-1:-1:-1;;;25776:252:0;;-1:-1:-1;;;;;25776:9:0;;;;:25;;25809:9;;25776:252;;25842:4;;25862:11;;25776:9;;;;25842:4;;26002:15;;25776:252;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25529:507;;:::o;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;975:131::-;-1:-1:-1;;;;;1050:31:1;;1040:42;;1030:70;;1096:1;1093;1086:12;1030:70;975:131;:::o;1111:315::-;1179:6;1187;1240:2;1228:9;1219:7;1215:23;1211:32;1208:52;;;1256:1;1253;1246:12;1208:52;1295:9;1282:23;1314:31;1339:5;1314:31;:::i;:::-;1364:5;1416:2;1401:18;;;;1388:32;;-1:-1:-1;;;1111:315:1:o;1623:247::-;1682:6;1735:2;1723:9;1714:7;1710:23;1706:32;1703:52;;;1751:1;1748;1741:12;1703:52;1790:9;1777:23;1809:31;1834:5;1809:31;:::i;:::-;1859:5;1623:247;-1:-1:-1;;;1623:247:1:o;1875:180::-;1934:6;1987:2;1975:9;1966:7;1962:23;1958:32;1955:52;;;2003:1;2000;1993:12;1955:52;-1:-1:-1;2026:23:1;;1875:180;-1:-1:-1;1875:180:1:o;2060:456::-;2137:6;2145;2153;2206:2;2194:9;2185:7;2181:23;2177:32;2174:52;;;2222:1;2219;2212:12;2174:52;2261:9;2248:23;2280:31;2305:5;2280:31;:::i;:::-;2330:5;-1:-1:-1;2387:2:1;2372:18;;2359:32;2400:33;2359:32;2400:33;:::i;:::-;2060:456;;2452:7;;-1:-1:-1;;;2506:2:1;2491:18;;;;2478:32;;2060:456::o;2918:118::-;3004:5;2997:13;2990:21;2983:5;2980:32;2970:60;;3026:1;3023;3016:12;3041:377;3115:6;3123;3131;3184:2;3172:9;3163:7;3159:23;3155:32;3152:52;;;3200:1;3197;3190:12;3152:52;3236:9;3223:23;3213:33;;3293:2;3282:9;3278:18;3265:32;3255:42;;3347:2;3336:9;3332:18;3319:32;3360:28;3382:5;3360:28;:::i;:::-;3407:5;3397:15;;;3041:377;;;;;:::o;3423:382::-;3488:6;3496;3549:2;3537:9;3528:7;3524:23;3520:32;3517:52;;;3565:1;3562;3555:12;3517:52;3604:9;3591:23;3623:31;3648:5;3623:31;:::i;:::-;3673:5;-1:-1:-1;3730:2:1;3715:18;;3702:32;3743:30;3702:32;3743:30;:::i;:::-;3792:7;3782:17;;;3423:382;;;;;:::o;3810:316::-;3887:6;3895;3903;3956:2;3944:9;3935:7;3931:23;3927:32;3924:52;;;3972:1;3969;3962:12;3924:52;-1:-1:-1;;3995:23:1;;;4065:2;4050:18;;4037:32;;-1:-1:-1;4116:2:1;4101:18;;;4088:32;;3810:316;-1:-1:-1;3810:316:1:o;4131:388::-;4199:6;4207;4260:2;4248:9;4239:7;4235:23;4231:32;4228:52;;;4276:1;4273;4266:12;4228:52;4315:9;4302:23;4334:31;4359:5;4334:31;:::i;:::-;4384:5;-1:-1:-1;4441:2:1;4426:18;;4413:32;4454:33;4413:32;4454:33;:::i;4524:750::-;4616:6;4624;4632;4685:2;4673:9;4664:7;4660:23;4656:32;4653:52;;;4701:1;4698;4691:12;4653:52;4741:9;4728:23;4770:18;4811:2;4803:6;4800:14;4797:34;;;4827:1;4824;4817:12;4797:34;4865:6;4854:9;4850:22;4840:32;;4910:7;4903:4;4899:2;4895:13;4891:27;4881:55;;4932:1;4929;4922:12;4881:55;4972:2;4959:16;4998:2;4990:6;4987:14;4984:34;;;5014:1;5011;5004:12;4984:34;5069:7;5062:4;5052:6;5049:1;5045:14;5041:2;5037:23;5033:34;5030:47;5027:67;;;5090:1;5087;5080:12;5027:67;5121:4;5113:13;;;;-1:-1:-1;5145:6:1;-1:-1:-1;;5186:20:1;;5173:34;5216:28;5173:34;5216:28;:::i;5279:461::-;5332:3;5370:5;5364:12;5397:6;5392:3;5385:19;5423:4;5452:2;5447:3;5443:12;5436:19;;5489:2;5482:5;5478:14;5510:1;5520:195;5534:6;5531:1;5528:13;5520:195;;;5599:13;;-1:-1:-1;;;;;5595:39:1;5583:52;;5655:12;;;;5690:15;;;;5631:1;5549:9;5520:195;;;-1:-1:-1;5731:3:1;;5279:461;-1:-1:-1;;;;;5279:461:1:o;5745:261::-;5924:2;5913:9;5906:21;5887:4;5944:56;5996:2;5985:9;5981:18;5973:6;5944:56;:::i;6011:127::-;6072:10;6067:3;6063:20;6060:1;6053:31;6103:4;6100:1;6093:15;6127:4;6124:1;6117:15;6143:275;6214:2;6208:9;6279:2;6260:13;;-1:-1:-1;;6256:27:1;6244:40;;6314:18;6299:34;;6335:22;;;6296:62;6293:88;;;6361:18;;:::i;:::-;6397:2;6390:22;6143:275;;-1:-1:-1;6143:275:1:o;6423:183::-;6483:4;6516:18;6508:6;6505:30;6502:56;;;6538:18;;:::i;:::-;-1:-1:-1;6583:1:1;6579:14;6595:4;6575:25;;6423:183::o;6611:662::-;6665:5;6718:3;6711:4;6703:6;6699:17;6695:27;6685:55;;6736:1;6733;6726:12;6685:55;6772:6;6759:20;6798:4;6822:60;6838:43;6878:2;6838:43;:::i;:::-;6822:60;:::i;:::-;6916:15;;;7002:1;6998:10;;;;6986:23;;6982:32;;;6947:12;;;;7026:15;;;7023:35;;;7054:1;7051;7044:12;7023:35;7090:2;7082:6;7078:15;7102:142;7118:6;7113:3;7110:15;7102:142;;;7184:17;;7172:30;;7222:12;;;;7135;;7102:142;;;-1:-1:-1;7262:5:1;6611:662;-1:-1:-1;;;;;;6611:662:1:o;7278:1283::-;7405:6;7413;7421;7474:2;7462:9;7453:7;7449:23;7445:32;7442:52;;;7490:1;7487;7480:12;7442:52;7530:9;7517:23;7559:18;7600:2;7592:6;7589:14;7586:34;;;7616:1;7613;7606:12;7586:34;7654:6;7643:9;7639:22;7629:32;;7699:7;7692:4;7688:2;7684:13;7680:27;7670:55;;7721:1;7718;7711:12;7670:55;7757:2;7744:16;7779:4;7803:60;7819:43;7859:2;7819:43;:::i;7803:60::-;7897:15;;;7979:1;7975:10;;;;7967:19;;7963:28;;;7928:12;;;;8003:19;;;8000:39;;;8035:1;8032;8025:12;8000:39;8059:11;;;;8079:217;8095:6;8090:3;8087:15;8079:217;;;8175:3;8162:17;8192:31;8217:5;8192:31;:::i;:::-;8236:18;;8112:12;;;;8274;;;;8079:217;;;8315:5;-1:-1:-1;;8358:18:1;;8345:32;;-1:-1:-1;;8389:16:1;;;8386:36;;;8418:1;8415;8408:12;8386:36;;8441:63;8496:7;8485:8;8474:9;8470:24;8441:63;:::i;:::-;8431:73;;;8551:2;8540:9;8536:18;8523:32;8513:42;;7278:1283;;;;;:::o;8566:380::-;8645:1;8641:12;;;;8688;;;8709:61;;8763:4;8755:6;8751:17;8741:27;;8709:61;8816:2;8808:6;8805:14;8785:18;8782:38;8779:161;;8862:10;8857:3;8853:20;8850:1;8843:31;8897:4;8894:1;8887:15;8925:4;8922:1;8915:15;8779:161;;8566:380;;;:::o;8951:356::-;9153:2;9135:21;;;9172:18;;;9165:30;9231:34;9226:2;9211:18;;9204:62;9298:2;9283:18;;8951:356::o;10083:127::-;10144:10;10139:3;10135:20;10132:1;10125:31;10175:4;10172:1;10165:15;10199:4;10196:1;10189:15;10215:168;10288:9;;;10319;;10336:15;;;10330:22;;10316:37;10306:71;;10357:18;;:::i;10388:422::-;10477:1;10520:5;10477:1;10534:270;10555:7;10545:8;10542:21;10534:270;;;10614:4;10610:1;10606:6;10602:17;10596:4;10593:27;10590:53;;;10623:18;;:::i;:::-;10673:7;10663:8;10659:22;10656:55;;;10693:16;;;;10656:55;10772:22;;;;10732:15;;;;10534:270;;;10538:3;10388:422;;;;;:::o;10815:806::-;10864:5;10894:8;10884:80;;-1:-1:-1;10935:1:1;10949:5;;10884:80;10983:4;10973:76;;-1:-1:-1;11020:1:1;11034:5;;10973:76;11065:4;11083:1;11078:59;;;;11151:1;11146:130;;;;11058:218;;11078:59;11108:1;11099:10;;11122:5;;;11146:130;11183:3;11173:8;11170:17;11167:43;;;11190:18;;:::i;:::-;-1:-1:-1;;11246:1:1;11232:16;;11261:5;;11058:218;;11360:2;11350:8;11347:16;11341:3;11335:4;11332:13;11328:36;11322:2;11312:8;11309:16;11304:2;11298:4;11295:12;11291:35;11288:77;11285:159;;;-1:-1:-1;11397:19:1;;;11429:5;;11285:159;11476:34;11501:8;11495:4;11476:34;:::i;:::-;11546:6;11542:1;11538:6;11534:19;11525:7;11522:32;11519:58;;;11557:18;;:::i;:::-;11595:20;;10815:806;-1:-1:-1;;;10815:806:1:o;11626:140::-;11684:5;11713:47;11754:4;11744:8;11740:19;11734:4;11713:47;:::i;11771:217::-;11811:1;11837;11827:132;;11881:10;11876:3;11872:20;11869:1;11862:31;11916:4;11913:1;11906:15;11944:4;11941:1;11934:15;11827:132;-1:-1:-1;11973:9:1;;11771:217::o;13222:125::-;13287:9;;;13308:10;;;13305:36;;;13321:18;;:::i;14190:251::-;14260:6;14313:2;14301:9;14292:7;14288:23;14284:32;14281:52;;;14329:1;14326;14319:12;14281:52;14361:9;14355:16;14380:31;14405:5;14380:31;:::i;14446:127::-;14507:10;14502:3;14498:20;14495:1;14488:31;14538:4;14535:1;14528:15;14562:4;14559:1;14552:15;14578:332;14785:6;14774:9;14767:25;14828:2;14823;14812:9;14808:18;14801:30;14748:4;14848:56;14900:2;14889:9;14885:18;14877:6;14848:56;:::i;:::-;14840:64;14578:332;-1:-1:-1;;;;14578:332:1:o;14915:881::-;15010:6;15041:2;15084;15072:9;15063:7;15059:23;15055:32;15052:52;;;15100:1;15097;15090:12;15052:52;15133:9;15127:16;15166:18;15158:6;15155:30;15152:50;;;15198:1;15195;15188:12;15152:50;15221:22;;15274:4;15266:13;;15262:27;-1:-1:-1;15252:55:1;;15303:1;15300;15293:12;15252:55;15332:2;15326:9;15355:60;15371:43;15411:2;15371:43;:::i;15355:60::-;15449:15;;;15531:1;15527:10;;;;15519:19;;15515:28;;;15480:12;;;;15555:19;;;15552:39;;;15587:1;15584;15577:12;15552:39;15611:11;;;;15631:135;15647:6;15642:3;15639:15;15631:135;;;15713:10;;15701:23;;15664:12;;;;15744;;;;15631:135;;;15785:5;14915:881;-1:-1:-1;;;;;;;14915:881:1:o;17397:184::-;17467:6;17520:2;17508:9;17499:7;17495:23;17491:32;17488:52;;;17536:1;17533;17526:12;17488:52;-1:-1:-1;17559:16:1;;17397:184;-1:-1:-1;17397:184:1:o;17865:245::-;17932:6;17985:2;17973:9;17964:7;17960:23;17956:32;17953:52;;;18001:1;17998;17991:12;17953:52;18033:9;18027:16;18052:28;18074:5;18052:28;:::i;18825:403::-;19027:2;19009:21;;;19066:2;19046:18;;;19039:30;19105:34;19100:2;19085:18;;19078:62;-1:-1:-1;;;19171:2:1;19156:18;;19149:37;19218:3;19203:19;;18825:403::o;20009:135::-;20048:3;20069:17;;;20066:43;;20089:18;;:::i;:::-;-1:-1:-1;20136:1:1;20125:13;;20009:135::o;25680:607::-;-1:-1:-1;;;;;26039:15:1;;;26021:34;;26086:2;26071:18;;26064:34;;;;26129:2;26114:18;;26107:34;;;;26172:2;26157:18;;26150:34;;;;26221:15;;;26215:3;26200:19;;26193:44;26001:3;26253:19;;26246:35;;;;25970:3;25955:19;;25680:607::o;26292:306::-;26380:6;26388;26396;26449:2;26437:9;26428:7;26424:23;26420:32;26417:52;;;26465:1;26462;26455:12;26417:52;26494:9;26488:16;26478:26;;26544:2;26533:9;26529:18;26523:25;26513:35;;26588:2;26577:9;26573:18;26567:25;26557:35;;26292:306;;;;;:::o;27642:128::-;27709:9;;;27730:11;;;27727:37;;;27744:18;;:::i;28729:245::-;28808:6;28816;28869:2;28857:9;28848:7;28844:23;28840:32;28837:52;;;28885:1;28882;28875:12;28837:52;-1:-1:-1;;28908:16:1;;28964:2;28949:18;;;28943:25;28908:16;;28943:25;;-1:-1:-1;28729:245:1:o;29787:401::-;29989:2;29971:21;;;30028:2;30008:18;;;30001:30;30067:34;30062:2;30047:18;;30040:62;-1:-1:-1;;;30133:2:1;30118:18;;30111:35;30178:3;30163:19;;29787:401::o;30193:399::-;30395:2;30377:21;;;30434:2;30414:18;;;30407:30;30473:34;30468:2;30453:18;;30446:62;-1:-1:-1;;;30539:2:1;30524:18;;30517:33;30582:3;30567:19;;30193:399::o;35335:510::-;35606:6;35595:9;35588:25;35649:3;35644:2;35633:9;35629:18;35622:31;35569:4;35670:57;35722:3;35711:9;35707:19;35699:6;35670:57;:::i;:::-;-1:-1:-1;;;;;35763:32:1;;;;35758:2;35743:18;;35736:60;-1:-1:-1;35827:2:1;35812:18;35805:34;35662:65;35335:510;-1:-1:-1;;35335:510:1:o;35850:582::-;36149:6;36138:9;36131:25;36192:6;36187:2;36176:9;36172:18;36165:34;36235:3;36230:2;36219:9;36215:18;36208:31;36112:4;36256:57;36308:3;36297:9;36293:19;36285:6;36256:57;:::i;:::-;-1:-1:-1;;;;;36349:32:1;;;;36344:2;36329:18;;36322:60;-1:-1:-1;36413:3:1;36398:19;36391:35;36248:65;35850:582;-1:-1:-1;;;35850:582:1:o

Swarm Source

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