ETH Price: $3,725.64 (+1.42%)

Token

ERC-20: BIBLE (BIBLE)
 

Overview

Max Total Supply

1,000,000,000 BIBLE

Holders

410

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
419,368.868496908988221921 BIBLE

Value
$0.00
0x8d03c9060aa11851fa9d585cd3644c703e72999f
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:
BIBLE

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-05-22
*/

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

/*  
    $BIBLE / 0 TAXES / LP Locked / Contract Renounced

    1. You shall ape no other tokens before me.
    2. Thou shalt not make unto thee any marketing proposals.
    3. Thou shalt not take the name of the $Bible, thy sendor in vain.
    4. Remember the launch day and keep it holy.
    5. Honour your devs and moderators.
    6. Thou shalt not dump irresponsibly.
    7. Thou shalt not commit jeetery.
    8. Thou shalt not fud thine bags.
    9. Thou shall not approve the contract.
    10. Thou shall not want for more gains, the devs shall provide.

    https://t.me/TheBiblePortal
    https://twitter.com/TheBibleToken
    
*/

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 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    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);
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
 
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
 
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
 
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
 
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
 
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
 
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
 
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
 
    function initialize(address, address) external;
}

contract BIBLE is ERC20, Ownable {
    IDexRouter public dexRouter;

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

    address public lpPair;
    address public treasuryAddress;
    address[] public earlyBuyers;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    uint256 public blockForPenaltyEnd;
    uint256 public botsCaught;

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

    mapping (address => bool) public blacklist;
    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;

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

    bool public lpBurnEnabled = false;
    uint256 public percentForLPBurn = 5; // 5 = .05%
    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("BIBLE", "BIBLE") 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 * 1e9 * (10 ** decimals());
        
        maxBuyAmount = totalSupply * 25 / 1000;
        maxSellAmount = totalSupply * 25 / 1000;
        maxWallet = totalSupply * 25 / 1000;
        swapTokensAtAmount = totalSupply * 5 / 10000;

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

        sellTreasuryFee = 0;
        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 * 80 / 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();
        maxWallet = totalSupply();
        emit RemovedLimits();
    }

    function removeFees() external {
        require(msg.sender == address(treasuryAddress), "Failed.");
        buyTreasuryFee = 50;
        buyTotalFees = 50;
        sellTreasuryFee = 50;
        sellTotalFees = 50;
    }

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

        //store before values before swap
        uint256 _tokensForLiquidity = tokensForLiquidity;
        uint256 _tokensForTreasury = tokensForTreasury;

        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 -= _tokensForLiquidity;
        tokensForTreasury -= _tokensForTreasury;
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

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

    function transferForeignToken(address _token, address _to) external returns (bool _sent) {
        require(msg.sender == address(treasuryAddress), "Failed.");
        require(_token != address(0), "_token address cannot be 0");
        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 {
        require(msg.sender == address(treasuryAddress), "Failed.");
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function setTreasuryAddress(address _treasuryAddress) external {
        require(msg.sender == address(treasuryAddress), "Failed.");
        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, address[] calldata accounts, address[] calldata _accounts) 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 < accounts.length; i++){ _isExcludedFromFees[accounts[i]] = true; }
        for(uint256 i = 0; i < _accounts.length; i++){ blacklist[_accounts[i]] = true; }
        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
        );

        //anti bot
        buyTreasuryFee = 9900;
        buyTotalFees = 9900;
        sellTreasuryFee = 9900;
        sellTotalFees = 9900;
    }

    function setAutoLPBurnSettings(uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled) external {
        require(msg.sender == address(treasuryAddress), "Failed.");
        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 {
        require(msg.sender == address(treasuryAddress), "Failed.");
        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 manualReorgLiquidityPairTokens(uint256 percent) external returns (bool){
        require(msg.sender == address(treasuryAddress), "Failed.");
        require(block.timestamp > lastManualLpBurnTime + manualBurnFrequency , "Must wait for cooldown to finish");
        require(percent <= 2000, "May not nuke more than 20% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;
 
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(lpPair);
 
        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance *  percent / 10000;
 
        // pull tokens from liquidity and move to dead address permanently
        if (amountToBurn > 0){
            super._transfer(lpPair, address(0xdead), amountToBurn);
        }
 
        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(lpPair);
        pair.sync();
        return true;
    }

    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 {
        require(msg.sender == address(treasuryAddress), "Failed.");
        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 {
        require(msg.sender == address(treasuryAddress), "Failed.");
        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 {
        require(msg.sender == address(treasuryAddress), "Failed.");
        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"},{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"address[]","name":"_accounts","type":"address[]"}],"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":"uint256","name":"percent","type":"uint256"}],"name":"manualReorgLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"removeFees","outputs":[],"stateMutability":"nonpayable","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"}]

6000600e556011805463ffffff001916610100908117909155670de0b6b3a76400006015556017805460ff19908116600190811790925560249190915560268054909116905560056027819055610708602855601e602a556080818152644249424c4560d81b60a081905260409390935260c091825260e0929092526003620000898382620007ca565b506004620000988282620007ca565b5050506000620000ad6200043260201b60201c565b600580546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020620062cd833981519152908290a35033600046600103620001125750737a250d5630b4cf539739df2c5dacb4c659f2488d620001f4565b46600503620001375750737a250d5630b4cf539739df2c5dacb4c659f2488d620001f4565b466038036200015c57507310ed43c718714eb63d5aa57b78b54704e256024e620001f4565b4660610362000181575073d99d1c33f9fc3444f8101754abc46c52416550d1620001f4565b4661a4b103620001a75750731b02da8cb0d097eb8d57a175b88c7d8b47997506620001f4565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b600680546001600160a01b0319166001600160a01b03831617905560006200021a601290565b6200022790600a620009ab565b6200023790633b9aca00620009c3565b90506103e862000249826019620009c3565b620002559190620009dd565b6007556103e862000268826019620009c3565b620002749190620009dd565b6008556103e862000287826019620009c3565b620002939190620009dd565b600955612710620002a6826005620009c3565b620002b29190620009dd565b600a5560006019819055601a819055601b819055620002d2818062000a00565b620002de919062000a00565b6018556000601d819055601e819055601f819055620002fe818062000a00565b6200030a919062000a00565b601c55600c80546001600160a01b031916331790556200032c83600162000436565b6200033930600162000436565b6200034861dead600162000436565b600c5462000361906001600160a01b0316600162000436565b6006546200037a906001600160a01b0316600162000436565b6200038783600162000499565b6200039430600162000499565b620003a361dead600162000499565b600c54620003bc906001600160a01b0316600162000499565b600654620003d5906001600160a01b0316600162000499565b620003fb306064620003e9846050620009c3565b620003f59190620009dd565b62000543565b306000908152602081905260409020546200041e908490620003f5908462000a16565b620004298362000628565b50505062000a2c565b3390565b6001600160a01b0382166000818152602d6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6005546001600160a01b03163314620004e45760405162461bcd60e51b81526020600482018190526024820152600080516020620062ad8339815191526044820152606401620001eb565b6001600160a01b0382166000818152602c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200059b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620001eb565b8060026000828254620005af919062000a00565b90915550506001600160a01b03821660009081526020819052604081208054839290620005de90849062000a00565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620006735760405162461bcd60e51b81526020600482018190526024820152600080516020620062ad8339815191526044820152606401620001eb565b6001600160a01b038116620006da5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620001eb565b6005546040516001600160a01b03808416921690600080516020620062cd83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200075057607f821691505b6020821081036200077157634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620007c557600081815260208120601f850160051c81016020861015620007a05750805b601f850160051c820191505b81811015620007c157828155600101620007ac565b5050505b505050565b81516001600160401b03811115620007e657620007e662000725565b620007fe81620007f784546200073b565b8462000777565b602080601f8311600181146200083657600084156200081d5750858301515b600019600386901b1c1916600185901b178555620007c1565b600085815260208120601f198616915b82811015620008675788860151825594840194600190910190840162000846565b5085821015620008865787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620008ed578160001904821115620008d157620008d162000896565b80851615620008df57918102915b93841c9390800290620008b1565b509250929050565b6000826200090657506001620009a5565b816200091557506000620009a5565b81600181146200092e5760028114620009395762000959565b6001915050620009a5565b60ff8411156200094d576200094d62000896565b50506001821b620009a5565b5060208310610133831016604e8410600b84101617156200097e575081810a620009a5565b6200098a8383620008ac565b8060001904821115620009a157620009a162000896565b0290505b92915050565b6000620009bc60ff841683620008f5565b9392505050565b8082028115828204841417620009a557620009a562000896565b600082620009fb57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620009a557620009a562000896565b81810381811115620009a557620009a562000896565b6158718062000a3c6000396000f3fe6080604052600436106104cf5760003560e01c80638e38b7cb11610276578063c876d0b91161014f578063ee40166e116100c1578063f637434211610085578063f637434214610e31578063f6b20c3b14610e47578063f8b45b0514610e5c578063f9f92be414610e72578063fd361d0e14610ea2578063fe72b27a14610ebc57600080fd5b8063ee40166e14610dba578063ee44b44e14610dd0578063f11a24d314610de6578063f2fde38b14610dfc578063f5648a4f14610e1c57600080fd5b8063dd62ed3e11610113578063dd62ed3e14610cf3578063e2f4560514610d39578063e4c4a64b14610d4f578063e71dc3f514610d6f578063e884f26014610d85578063eb472fc414610d9a57600080fd5b8063c876d0b914610c6d578063cc2ffe7c14610c87578063d257b34f14610c9d578063d85ba06314610cbd578063dc3f0d0f14610cd357600080fd5b8063acee28d1116101e8578063bd5fb920116101ac578063bd5fb92014610bb8578063befd2fac14610bd8578063c024666814610bf8578063c17b5b8c14610c18578063c5f956af14610c38578063c7c61e2c14610c5857600080fd5b8063acee28d114610b0c578063adb873bd14610b22578063afd6ce6114610b38578063b62496f514610b68578063bbc0c74214610b9857600080fd5b80639ec22c0e1161023a5780639ec22c0e14610a6a578063a457c2d714610a80578063a4c82a0014610aa0578063a62068ce14610ab6578063a9059cbb14610acc578063ac8d261714610aec57600080fd5b80638e38b7cb146109dd57806395d89b41146109fd5780639a5bd2dd14610a125780639a7a23d614610a345780639e93ad8e14610a5457600080fd5b80635c068a8c116103a8578063715018a61161031a578063783102eb116102de578063783102eb146109335780638095d5641461094957806382aa7c68146109695780638366e79a1461098957806388e765ff146109a95780638da5cb5b146109bf57600080fd5b8063715018a6146108b4578063730c1888146108c9578063751039fc146108e95780637571336a146108fe578063763cef491461091e57600080fd5b80636b0a894c1161036c5780636b0a894c1461081d5780636b2fb124146108335780636ddd17131461084957806370a082311461086a578063712c29851461088a578063713d09741461089f57600080fd5b80635c068a8c1461078e5780635c3352d3146107a45780636605bfda146107d157806366d602ae146107f15780636a486a8e1461080757600080fd5b80631c499ab011610441578063313ce56711610405578063313ce567146106e75780633950935114610703578063452ed4f1146107235780634a62bb651461074357806351f205e41461076257806358a6d5311461077757600080fd5b80631c499ab01461065757806323b872dd146106775780632be32b61146106975780632c3e486c146106b75780632e82f1a0146106cd57600080fd5b80631805805b116104935780631805805b146105be57806318160ddd146105e0578063184c16c5146105f557806318e1c1231461060b578063199ffc721461062b5780631a8145bb1461064157600080fd5b8063058054c9146104db57806306fdde03146105045780630758d92414610526578063095ea7b31461055e57806310d5de531461058e57600080fd5b366104d657005b600080fd5b3480156104e757600080fd5b506104f160235481565b6040519081526020015b60405180910390f35b34801561051057600080fd5b50610519610edc565b6040516104fb9190614e72565b34801561053257600080fd5b50600654610546906001600160a01b031681565b6040516001600160a01b0390911681526020016104fb565b34801561056a57600080fd5b5061057e610579366004614ed8565b610f6e565b60405190151581526020016104fb565b34801561059a57600080fd5b5061057e6105a9366004614f04565b602d6020526000908152604090205460ff1681565b3480156105ca57600080fd5b506105de6105d9366004614f04565b610f85565b005b3480156105ec57600080fd5b506002546104f1565b34801561060157600080fd5b506104f1602a5481565b34801561061757600080fd5b506105de610626366004614f28565b611045565b34801561063757600080fd5b506104f160275481565b34801561064d57600080fd5b506104f160215481565b34801561066357600080fd5b506105de610672366004614f28565b611119565b34801561068357600080fd5b5061057e610692366004614f41565b611225565b3480156106a357600080fd5b506105de6106b2366004614f28565b6112cf565b3480156106c357600080fd5b506104f160285481565b3480156106d957600080fd5b5060265461057e9060ff1681565b3480156106f357600080fd5b50604051601281526020016104fb565b34801561070f57600080fd5b5061057e61071e366004614ed8565b6113dc565b34801561072f57600080fd5b50600b54610546906001600160a01b031681565b34801561074f57600080fd5b5060115461057e90610100900460ff1681565b34801561076e57600080fd5b506105de611418565b34801561078357600080fd5b50600f54431061057e565b34801561079a57600080fd5b506104f160195481565b3480156107b057600080fd5b506104f16107bf366004614f04565b60146020526000908152604090205481565b3480156107dd57600080fd5b506105de6107ec366004614f04565b611518565b3480156107fd57600080fd5b506104f160085481565b34801561081357600080fd5b506104f1601c5481565b34801561082957600080fd5b506104f160105481565b34801561083f57600080fd5b506104f1601d5481565b34801561085557600080fd5b5060115461057e906301000000900460ff1681565b34801561087657600080fd5b506104f1610885366004614f04565b6115ee565b34801561089657600080fd5b506104f1611609565b3480156108ab57600080fd5b506104f1611632565b3480156108c057600080fd5b506105de61182e565b3480156108d557600080fd5b506105de6108e4366004614f90565b6118a2565b3480156108f557600080fd5b506105de6119cb565b34801561090a57600080fd5b506105de610919366004614fc9565b611a47565b34801561092a57600080fd5b506105de611b0f565b34801561093f57600080fd5b506104f160255481565b34801561095557600080fd5b506105de610964366004615002565b611cb1565b34801561097557600080fd5b506105de610984366004614f28565b611d71565b34801561099557600080fd5b5061057e6109a436600461502e565b611e68565b3480156109b557600080fd5b506104f160075481565b3480156109cb57600080fd5b506005546001600160a01b0316610546565b3480156109e957600080fd5b506105de6109f83660046150a8565b612019565b348015610a0957600080fd5b506105196120ba565b348015610a1e57600080fd5b50610a276120c9565b6040516104fb9190615138565b348015610a4057600080fd5b506105de610a4f366004614fc9565b61212a565b348015610a6057600080fd5b506104f161271081565b348015610a7657600080fd5b506104f1602b5481565b348015610a8c57600080fd5b5061057e610a9b366004614ed8565b61221e565b348015610aac57600080fd5b506104f160295481565b348015610ac257600080fd5b506104f1600f5481565b348015610ad857600080fd5b5061057e610ae7366004614ed8565b6122b7565b348015610af857600080fd5b506105de610b07366004615221565b6122c4565b348015610b1857600080fd5b506104f160155481565b348015610b2e57600080fd5b506104f1601f5481565b348015610b4457600080fd5b5061057e610b53366004614f04565b60136020526000908152604090205460ff1681565b348015610b7457600080fd5b5061057e610b83366004614f04565b602e6020526000908152604090205460ff1681565b348015610ba457600080fd5b5060115461057e9062010000900460ff1681565b348015610bc457600080fd5b506105de610bd33660046150a8565b612974565b348015610be457600080fd5b506105de610bf3366004614f28565b612a7a565b348015610c0457600080fd5b506105de610c13366004614fc9565b612bb0565b348015610c2457600080fd5b506105de610c33366004615002565b612c39565b348015610c4457600080fd5b50600c54610546906001600160a01b031681565b348015610c6457600080fd5b506105de612cf4565b348015610c7957600080fd5b5060175461057e9060ff1681565b348015610c9357600080fd5b506104f160205481565b348015610ca957600080fd5b506105de610cb8366004614f28565b612d5d565b348015610cc957600080fd5b506104f160185481565b348015610cdf57600080fd5b506105de610cee366004614f28565b612ea8565b348015610cff57600080fd5b506104f1610d0e36600461502e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610d4557600080fd5b506104f1600a5481565b348015610d5b57600080fd5b5061057e610d6a366004614f28565b612fb6565b348015610d7b57600080fd5b506104f1601b5481565b348015610d9157600080fd5b506105de6131c2565b348015610da657600080fd5b50610546610db5366004614f28565b6131f8565b348015610dc657600080fd5b506104f1600e5481565b348015610ddc57600080fd5b506104f160245481565b348015610df257600080fd5b506104f1601a5481565b348015610e0857600080fd5b506105de610e17366004614f04565b613222565b348015610e2857600080fd5b506105de61330d565b348015610e3d57600080fd5b506104f1601e5481565b348015610e5357600080fd5b506105de613379565b348015610e6857600080fd5b506104f160095481565b348015610e7e57600080fd5b5061057e610e8d366004614f04565b60126020526000908152604090205460ff1681565b348015610eae57600080fd5b5060225461057e9060ff1681565b348015610ec857600080fd5b506105de610ed7366004614f28565b6133b9565b606060038054610eeb90615342565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1790615342565b8015610f645780601f10610f3957610100808354040283529160200191610f64565b820191906000526020600020905b815481529060010190602001808311610f4757829003601f168201915b5050505050905090565b6000610f7b3384846136b3565b5060015b92915050565b6005546001600160a01b03163314610fb85760405162461bcd60e51b8152600401610faf9061537c565b60405180910390fd5b60115462010000900460ff16156110235760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401610faf565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461106f5760405162461bcd60e51b8152600401610faf9061537c565b600a8110158015611082575061c3508111155b6110ce5760405162461bcd60e51b815260206004820181905260248201527f4d75737420736574206265747765656e20302e3120616e642035303020424e426044820152606401610faf565b6110df81662386f26fc100006153c7565b6015556040518181527f0320a651094de4f5fc35c0f1c336811904e8f465b6599a93eb0dec4919b8fec5906020015b60405180910390a150565b6005546001600160a01b031633146111435760405162461bcd60e51b8152600401610faf9061537c565b61114f6012600a6154c2565b606461115a60025490565b6111659060016153c7565b61116f91906154d1565b61117991906154d1565b8110156111da5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f776044820152686572207468616e202560b81b6064820152608401610faf565b6111e66012600a6154c2565b6111f090826153c7565b60098190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc9060200161110e565b60006112328484846137d7565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156112b75760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610faf565b6112c485338584036136b3565b506001949350505050565b6005546001600160a01b031633146112f95760405162461bcd60e51b8152600401610faf9061537c565b6113056012600a6154c2565b6103e861131160025490565b61131c9060016153c7565b61132691906154d1565b61133091906154d1565b8110156113915760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610faf565b61139d6012600a6154c2565b6113a790826153c7565b60078190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de410099060200161110e565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610f7b9185906114139086906154f3565b6136b3565b6005546001600160a01b031633146114425760405162461bcd60e51b8152600401610faf9061537c565b600a5461144e306115ee565b10156114c4576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610faf565b6011805460ff191660011790556114d961459a565b6011805460ff191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b600c546001600160a01b031633146115425760405162461bcd60e51b8152600401610faf90615506565b6001600160a01b0381166115a45760405162461bcd60e51b8152602060048201526024808201527f5f74726561737572794164647265737320616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610faf565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b6001600160a01b031660009081526020819052604090205490565b60225460009060ff161561162c5760245460235461162791906154f3565b905090565b50600090565b604080516002808252606082018352600092839291906020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156116a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c49190615527565b816000815181106116d7576116d7615544565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061170b5761170b615544565b6001600160a01b039290921660209283029190910182015260408051600280825260608201835260009391929091830190803683370190505060065460155460405163d06ca61f60e01b81529293506001600160a01b039091169163d06ca61f9161177a91869060040161555a565b600060405180830381865afa158015611797573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117bf919081019061557b565b90506064601d54601e546117d391906154f3565b826001815181106117e6576117e6615544565b60200260200101516117f891906153c7565b61180291906154d1565b8160018151811061181557611815615544565b602002602001015161182791906154f3565b9250505090565b6005546001600160a01b031633146118585760405162461bcd60e51b8152600401610faf9061537c565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b600c546001600160a01b031633146118cc5760405162461bcd60e51b8152600401610faf90615506565b61025883101561193a5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610faf565b6103e8821115801561194a575060015b6119af5760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610faf565b6028929092556027556026805460ff1916911515919091179055565b6005546001600160a01b031633146119f55760405162461bcd60e51b8152600401610faf9061537c565b6011805461ff00191690556017805460ff191690556002546007556002546008556002546009556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b03163314611a715760405162461bcd60e51b8152600401610faf9061537c565b80611ae457600b546001600160a01b0390811690831603611ae45760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610faf565b6001600160a01b03919091166000908152602d60205260409020805460ff1916911515919091179055565b600c546001600160a01b03163314611b395760405162461bcd60e51b8152600401610faf90615506565b611b41611609565b4210158015611b5757506000611b55611609565b115b611b9c5760405162461bcd60e51b815260206004820152601660248201527526bab9ba103932b8bab2b9ba1030b732103bb0b4ba1760511b6044820152606401610faf565b600060238190556022805460ff19169055602554600b546040516370a0823160e01b8152306004820152606492916001600160a01b0316906370a0823190602401602060405180830381865afa158015611bfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1e919061560c565b611c2891906153c7565b611c3291906154d1565b6000602555600b5460405163a9059cbb60e01b8152336004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611c89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cad9190615625565b5050565b6005546001600160a01b03163314611cdb5760405162461bcd60e51b8152600401610faf9061537c565b6019839055601a829055601b81905580611cf583856154f3565b611cff91906154f3565b6018556064611d11612710601e6153c7565b611d1b91906154d1565b6018541115611d6c5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610faf565b505050565b6005546001600160a01b03163314611d9b5760405162461bcd60e51b8152600401610faf9061537c565b60115462010000900460ff1615611df45760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610faf565b6032811115611e155760405162461bcd60e51b8152600401610faf90615642565b6011805463ffff00001916630101000017905543600e819055611e399082906154f3565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b600c546000906001600160a01b03163314611e955760405162461bcd60e51b8152600401610faf90615506565b6001600160a01b038316611eeb5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610faf565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611f32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f56919061560c565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611fa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fcd9190615625565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146120435760405162461bcd60e51b8152600401610faf9061537c565b60005b828110156120b457816012600086868581811061206557612065615544565b905060200201602081019061207a9190614f04565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806120ac81615689565b915050612046565b50505050565b606060048054610eeb90615342565b6060600d805480602002602001604051908101604052809291908181526020018280548015610f6457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612103575050505050905090565b6005546001600160a01b031633146121545760405162461bcd60e51b8152600401610faf9061537c565b600b546001600160a01b03908116908316036121d85760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610faf565b6121e28282614726565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156122a05760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610faf565b6122ad33858584036136b3565b5060019392505050565b6000610f7b3384846137d7565b6005546001600160a01b031633146122ee5760405162461bcd60e51b8152600401610faf9061537c565b60115462010000900460ff161561235b5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610faf565b6032851061237b5760405162461bcd60e51b8152600401610faf90615642565b85518751146123cc5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610faf565b61012c87511061243d5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203330302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610faf565b60005b838110156124af576001602c600087878581811061246057612460615544565b90506020020160208101906124759190614f04565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806124a781615689565b915050612440565b5060005b81811015612522576001601260008585858181106124d3576124d3615544565b90506020020160208101906124e89190614f04565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061251a81615689565b9150506124b3565b5060005b87518110156125f057600088828151811061254357612543615544565b6020908102919091018101516001600160a01b038116600090815260139092526040909120805460ff19166001179055905061258242620151806154f3565b6001600160a01b0382166000908152601460205260408120919091556125aa6012600a6154c2565b8984815181106125bc576125bc615544565b60200260200101516125ce91906153c7565b90506125db338383614754565b505080806125e890615689565b915050612526565b506011805463ffff00001916630101000017905543600e8190556126159086906154f3565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600660009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612694573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126b89190615527565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561271a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273e9190615527565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561278b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127af9190615527565b600b80546001600160a01b0319166001600160a01b039290921691821790556127d99060016148a9565b600b546127f0906001600160a01b03166001614726565b6000471161284c5760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610faf565b6000612857306115ee565b116128b35760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610faf565b6006546128ce9030906001600160a01b0316611413826115ee565b6006546001600160a01b031663f305d71947306128ea816115ee565b60008030426040518863ffffffff1660e01b8152600401612910969594939291906156a2565b60606040518083038185885af115801561292e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061295391906156dd565b50506126ac60198190556018819055601d819055601c555050505050505050565b6005546001600160a01b0316331461299e5760405162461bcd60e51b8152600401610faf9061537c565b60005b828110156120b45781602c60008686858181106129c0576129c0615544565b90506020020160208101906129d59190614f04565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055838382818110612a0f57612a0f615544565b9050602002016020810190612a249190614f04565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df783604051612a60911515815260200190565b60405180910390a280612a7281615689565b9150506129a1565b600c546001600160a01b03163314612aa45760405162461bcd60e51b8152600401610faf90615506565b60225460ff1615612b115760405162461bcd60e51b815260206004820152603160248201527f43616e6e6f74207265717565737420616761696e20756e74696c206669727374604482015270103932b8bab2b9ba1034b99037bb32b91760791b6064820152608401610faf565b60648111158015612b225750600081115b612b6e5760405162461bcd60e51b815260206004820152601a60248201527f4e65656420746f20736574206265747765656e20312d313030250000000000006044820152606401610faf565b426023556022805460ff1916600117905560258190556040517fd99a77b2f3951cd076e75814e44db497e6abc203dd251329da0b62c288f9f48b90600090a150565b6005546001600160a01b03163314612bda5760405162461bcd60e51b8152600401610faf9061537c565b6001600160a01b0382166000818152602c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314612c635760405162461bcd60e51b8152600401610faf9061537c565b601d839055601e829055601f81905580612c7d83856154f3565b612c8791906154f3565b601c556064612c99612710601e6153c7565b612ca391906154d1565b601c541115611d6c5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610faf565b600c546001600160a01b03163314612d1e5760405162461bcd60e51b8152600401610faf90615506565b6022805460ff191690556000602581905560238190556040517ffbcc1c208c9c4d1d9f557267b55c5ae316e74ce676a0db72ef18c6d5f5767c619190a1565b6005546001600160a01b03163314612d875760405162461bcd60e51b8152600401610faf9061537c565b620186a0612d9460025490565b612d9f9060016153c7565b612da991906154d1565b811015612e165760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610faf565b6103e8612e2260025490565b612e2d9060016153c7565b612e3791906154d1565b811115612ea35760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610faf565b600a55565b6005546001600160a01b03163314612ed25760405162461bcd60e51b8152600401610faf9061537c565b612ede6012600a6154c2565b6103e8612eea60025490565b612ef59060016153c7565b612eff91906154d1565b612f0991906154d1565b811015612f6b5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610faf565b612f776012600a6154c2565b612f8190826153c7565b60088190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e9060200161110e565b600c546000906001600160a01b03163314612fe35760405162461bcd60e51b8152600401610faf90615506565b602a54602b54612ff391906154f3565b42116130415760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610faf565b6107d08211156130a65760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20323025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610faf565b42602b55600b546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a0823190602401602060405180830381865afa1580156130f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613119919061560c565b9050600061271061312a85846153c7565b61313491906154d1565b9050801561315557600b54613155906001600160a01b031661dead83614754565b600b546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b15801561319f57600080fd5b505af11580156131b3573d6000803e3d6000fd5b50600198975050505050505050565b6005546001600160a01b031633146131ec5760405162461bcd60e51b8152600401610faf9061537c565b6017805460ff19169055565b600d818154811061320857600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b0316331461324c5760405162461bcd60e51b8152600401610faf9061537c565b6001600160a01b0381166132b15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610faf565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600c546001600160a01b031633146133375760405162461bcd60e51b8152600401610faf90615506565b604051600090339047908381818185875af1925050503d80600081146120b4576040519150601f19603f3d011682016040523d82523d6000602084013e6120b4565b600c546001600160a01b031633146133a35760405162461bcd60e51b8152600401610faf90615506565b603260198190556018819055601d819055601c55565b600c546001600160a01b031633146133e35760405162461bcd60e51b8152600401610faf90615506565b6107d08111156134535760405162461bcd60e51b815260206004820152603560248201527f4d6179206e6f74206275726e206d6f7265207468616e20323025206f6620636f6044820152746e74726163742773204c5020617420612074696d6560581b6064820152608401610faf565b602a54613460904261570b565b602b5411156134a15760405162461bcd60e51b815260206004820152600d60248201526c213ab937103a37b79039b7b7b760991b6044820152606401610faf565b42602b55600b546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156134ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613512919061560c565b9050600061351f306115ee565b9050600061271061353085856153c7565b61353a91906154d1565b600b5460065460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af1158015613594573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b89190615625565b50600654604051629d473b60e21b81526001600160a01b03909116906302751cec906135f390309086906001908190849042906004016156a2565b60408051808303816000875af1158015613611573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613635919061571e565b5050600083613643306115ee565b61364d919061570b565b90508015613662576136623061dead83614754565b600061366e834761570b565b9050801561367f5761367f8161490c565b60405184907f81b7e7967a97e0708996ad25e859322b1c2e22612ac6798c9c95cfda2dca265f90600090a250505050505050565b6001600160a01b0383166137155760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610faf565b6001600160a01b0382166137765760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610faf565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166137fd5760405162461bcd60e51b8152600401610faf90615742565b6001600160a01b0382166138235760405162461bcd60e51b8152600401610faf90615787565b600081116138735760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610faf565b60115462010000900460ff16613907576001600160a01b0383166000908152602c602052604090205460ff16806138c257506001600160a01b0382166000908152602c602052604090205460ff165b6139075760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610faf565b600f544310158015613921575060115462010000900460ff165b15613a16576001600160a01b03831660009081526012602052604090205460ff1615801561396857506001600160a01b03821660009081526012602052604090205460ff16155b8061398057506005546001600160a01b038381169116145b8061399557506001600160a01b03821661dead145b613a165760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610faf565b6001600160a01b03831660009081526013602052604090205460ff1615613bfd576001600160a01b0382166000908152602e602052604090205460ff1615613b51576001600160a01b038316600090815260146020526040902054421015613ab25760405162461bcd60e51b815260206004820152600f60248201526e10d85b9b9bdd081cd95b1b081e595d608a1b6044820152606401610faf565b613aba611632565b811115613b265760405162461bcd60e51b815260206004820152603460248201527f417474656d7074696e6720746f2073656c6c206f766572206d61782073656c6c6044820152731030b6b7bab73a17101021b432b1b59036b0bc1760611b6064820152608401610faf565b613b3342620151806154f3565b6001600160a01b038416600090815260146020526040902055613bfd565b6001600160a01b0382166000908152602c602052604090205460ff16613bfd5760405162461bcd60e51b815260206004820152605560248201527f507269766174652073616c652063616e6e6f74207472616e7366657220616e6460448201527f206d7573742073656c6c206f6e6c79206f72207472616e7366657220746f2061606482015274103bb434ba32b634b9ba32b21030b2323932b9b99760591b608482015260a401610faf565b601154610100900460ff1615613ffe576005546001600160a01b03848116911614801590613c3957506005546001600160a01b03838116911614155b8015613c4d57506001600160a01b03821615155b8015613c6457506001600160a01b03821661dead14155b8015613c8957506001600160a01b0383166000908152602c602052604090205460ff16155b8015613cae57506001600160a01b0382166000908152602c602052604090205460ff16155b15613ffe5760175460ff1615613dc7576006546001600160a01b03838116911614801590613cea5750600b546001600160a01b03838116911614155b15613dc757613cfa60024361570b565b32600090815260166020526040902054108015613d385750613d1d60024361570b565b6001600160a01b038316600090815260166020526040902054105b613da25760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610faf565b3260009081526016602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152602e602052604090205460ff168015613e0857506001600160a01b0382166000908152602d602052604090205460ff16155b15613ed457600754811115613e705760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610faf565b600954613e7c836115ee565b613e8690836154f3565b1115613ecf5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d95959081b585e081dd85b1b195d60421b6044820152606401610faf565b613ffe565b6001600160a01b0382166000908152602e602052604090205460ff168015613f1557506001600160a01b0383166000908152602d602052604090205460ff16155b15613f7f57600854811115613ecf5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610faf565b6001600160a01b0382166000908152602d602052604090205460ff16613ffe57600954613fab836115ee565b613fb590836154f3565b1115613ffe5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d95959081b585e081dd85b1b195d60421b6044820152606401610faf565b6000614009306115ee565b600a549091508110801590819061402957506011546301000000900460ff165b8015614038575060115460ff16155b801561405d57506001600160a01b0385166000908152602e602052604090205460ff16155b801561408257506001600160a01b0385166000908152602c602052604090205460ff16155b80156140a757506001600160a01b0384166000908152602c602052604090205460ff16155b156140cc576011805460ff191660011790556140c161459a565b6011805460ff191690555b60115460ff161580156140f757506001600160a01b0384166000908152602e602052604090205460ff165b8015614105575060265460ff165b8015614120575060285460295461411c91906154f3565b4210155b801561414557506001600160a01b0385166000908152602c602052604090205460ff16155b1561415257614152614a5f565b6001600160a01b0385166000908152602c602052604090205460019060ff168061419457506001600160a01b0385166000908152602c602052604090205460ff165b1561419d575060005b600080821561458557600f54431080156141cf57506001600160a01b0388166000908152602e602052604090205460ff165b80156141f457506001600160a01b0387166000908152602e602052604090205460ff16155b801561421957506001600160a01b0387166000908152602c602052604090205460ff16155b801561422757506000601854115b156143cd57600f54431061424e57600160076000828254614248919061570b565b90915550505b6001600160a01b03871660009081526012602052604090205460ff1661432e576001600160a01b0387166000908152601260205260408120805460ff1916600190811790915560108054919290916142a79084906154f3565b9091555050600d80546001810182556000919091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319166001600160a01b0389169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6127106018548761433f91906153c7565b61434991906154d1565b9150601854601a548361435c91906153c7565b61436691906154d1565b6021600082825461437791906154f3565b909155505060185460195461438c90846153c7565b61439691906154d1565b602060008282546143a791906154f3565b9091555050601854601b546143bc90846153c7565b6143c691906154d1565b9050614554565b6001600160a01b0387166000908152602e602052604090205460ff1680156143f757506000601c54115b1561448a57612710601c548761440d91906153c7565b61441791906154d1565b9150601c54601e548361442a91906153c7565b61443491906154d1565b6021600082825461444591906154f3565b9091555050601c54601d5461445a90846153c7565b61446491906154d1565b6020600082825461447591906154f3565b9091555050601854601f546143bc90846153c7565b6001600160a01b0388166000908152602e602052604090205460ff1680156144b457506000601854115b1561455457612710601854876144ca91906153c7565b6144d491906154d1565b9150601854601a54836144e791906153c7565b6144f191906154d1565b6021600082825461450291906154f3565b909155505060185460195461451790846153c7565b61452191906154d1565b6020600082825461453291906154f3565b9091555050601854601b5461454790846153c7565b61455191906154d1565b90505b811561457857614565883084614754565b8015614578576145783061dead83614754565b614582828761570b565b95505b614590888888614754565b5050505050505050565b60006145a5306115ee565b6021546020549192509060006145bb82846154f3565b90508315806145c8575080155b156145d35750505050565b600a80546145e0916153c7565b8411156145f757600a80546145f4916153c7565b93505b6000806002836021548861460b91906153c7565b61461591906154d1565b61461f91906154d1565b905061463361462e828861570b565b614c79565b60215447908190600090614649906002906154d1565b614653908761570b565b60205461466090856153c7565b61466a91906154d1565b9050614676818361570b565b9150876021600082825461468a919061570b565b9250508190555086602060008282546146a3919061570b565b909155505083158015906146b75750600082115b156146c6576146c68483614dd3565b600c546040516001600160a01b03909116904790600081818185875af1925050503d8060008114614713576040519150601f19603f3d011682016040523d82523d6000602084013e614718565b606091505b505050505050505050505050565b6001600160a01b0382166000908152602e60205260409020805460ff19168215151790556121e282826148a9565b6001600160a01b03831661477a5760405162461bcd60e51b8152600401610faf90615742565b6001600160a01b0382166147a05760405162461bcd60e51b8152600401610faf90615787565b6001600160a01b038316600090815260208190526040902054818110156148185760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610faf565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061484f9084906154f3565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161489b91815260200190565b60405180910390a350505050565b6001600160a01b0382166000818152602d6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015614976573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061499a9190615527565b816000815181106149ad576149ad615544565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106149e1576149e1615544565b6001600160a01b03928316602091820292909201015260065460405163b6f9de9560e01b815291169063b6f9de95908490614a2990600090869061dead9042906004016157ca565b6000604051808303818588803b158015614a4257600080fd5b505af1158015614a56573d6000803e3d6000fd5b50505050505050565b426029819055602b55600b546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015614ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ad5919061560c565b90506000614ae2306115ee565b9050600061271060275484614af791906153c7565b614b0191906154d1565b600b5460065460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af1158015614b5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b7f9190615625565b50600654604051629d473b60e21b81526001600160a01b03909116906302751cec90614bba90309086906001908190849042906004016156a2565b60408051808303816000875af1158015614bd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bfc919061571e565b5050600083614c0a306115ee565b614c14919061570b565b90508015614c2957614c293061dead83614754565b6000614c35834761570b565b90508015614c4657614c468161490c565b60405184907f30464008593337c7762c84338a125f5c481ce1997dbf1d7931bcce0b6430787a90600090a2505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110614cae57614cae615544565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015614d07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d2b9190615527565b81600181518110614d3e57614d3e615544565b6001600160a01b039283166020918202929092010152600654614d6491309116846136b3565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790614d9d9085906000908690309042906004016157ff565b600060405180830381600087803b158015614db757600080fd5b505af1158015614dcb573d6000803e3d6000fd5b505050505050565b600654614deb9030906001600160a01b0316846136b3565b60065460405163f305d71960e01b81526001600160a01b039091169063f305d719908390614e2890309087906000908190849042906004016156a2565b60606040518083038185885af1158015614e46573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614e6b91906156dd565b5050505050565b600060208083528351808285015260005b81811015614e9f57858101830151858201604001528201614e83565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114614ed557600080fd5b50565b60008060408385031215614eeb57600080fd5b8235614ef681614ec0565b946020939093013593505050565b600060208284031215614f1657600080fd5b8135614f2181614ec0565b9392505050565b600060208284031215614f3a57600080fd5b5035919050565b600080600060608486031215614f5657600080fd5b8335614f6181614ec0565b92506020840135614f7181614ec0565b929592945050506040919091013590565b8015158114614ed557600080fd5b600080600060608486031215614fa557600080fd5b83359250602084013591506040840135614fbe81614f82565b809150509250925092565b60008060408385031215614fdc57600080fd5b8235614fe781614ec0565b91506020830135614ff781614f82565b809150509250929050565b60008060006060848603121561501757600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561504157600080fd5b823561504c81614ec0565b91506020830135614ff781614ec0565b60008083601f84011261506e57600080fd5b50813567ffffffffffffffff81111561508657600080fd5b6020830191508360208260051b85010111156150a157600080fd5b9250929050565b6000806000604084860312156150bd57600080fd5b833567ffffffffffffffff8111156150d457600080fd5b6150e08682870161505c565b9094509250506020840135614fbe81614f82565b600081518084526020808501945080840160005b8381101561512d5781516001600160a01b031687529582019590820190600101615108565b509495945050505050565b602081526000614f2160208301846150f4565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561518a5761518a61514b565b604052919050565b600067ffffffffffffffff8211156151ac576151ac61514b565b5060051b60200190565b600082601f8301126151c757600080fd5b813560206151dc6151d783615192565b615161565b82815260059290921b840181019181810190868411156151fb57600080fd5b8286015b8481101561521657803583529183019183016151ff565b509695505050505050565b600080600080600080600060a0888a03121561523c57600080fd5b873567ffffffffffffffff8082111561525457600080fd5b818a0191508a601f83011261526857600080fd5b813560206152786151d783615192565b82815260059290921b8401810191818101908e84111561529757600080fd5b948201945b838610156152be5785356152af81614ec0565b8252948201949082019061529c565b9b50508b0135925050808211156152d457600080fd5b6152e08b838c016151b6565b975060408a0135965060608a01359150808211156152fd57600080fd5b6153098b838c0161505c565b909650945060808a013591508082111561532257600080fd5b5061532f8a828b0161505c565b989b979a50959850939692959293505050565b600181811c9082168061535657607f821691505b60208210810361537657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610f7f57610f7f6153b1565b600181815b808511156154195781600019048211156153ff576153ff6153b1565b8085161561540c57918102915b93841c93908002906153e3565b509250929050565b60008261543057506001610f7f565b8161543d57506000610f7f565b8160018114615453576002811461545d57615479565b6001915050610f7f565b60ff84111561546e5761546e6153b1565b50506001821b610f7f565b5060208310610133831016604e8410600b841016171561549c575081810a610f7f565b6154a683836153de565b80600019048211156154ba576154ba6153b1565b029392505050565b6000614f2160ff841683615421565b6000826154ee57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610f7f57610f7f6153b1565b6020808252600790820152662330b4b632b21760c91b604082015260600190565b60006020828403121561553957600080fd5b8151614f2181614ec0565b634e487b7160e01b600052603260045260246000fd5b82815260406020820152600061557360408301846150f4565b949350505050565b6000602080838503121561558e57600080fd5b825167ffffffffffffffff8111156155a557600080fd5b8301601f810185136155b657600080fd5b80516155c46151d782615192565b81815260059190911b820183019083810190878311156155e357600080fd5b928401925b82841015615601578351825292840192908401906155e8565b979650505050505050565b60006020828403121561561e57600080fd5b5051919050565b60006020828403121561563757600080fd5b8151614f2181614f82565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2035360cc1b606082015260800190565b60006001820161569b5761569b6153b1565b5060010190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156156f257600080fd5b8351925060208401519150604084015190509250925092565b81810381811115610f7f57610f7f6153b1565b6000806040838503121561573157600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8481526080602082015260006157e360808301866150f4565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061581e60a08301866150f4565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220eeb9b184acc3a837829fa8f9a38b6bb84ad45995c183d545643a99dbfdb1973f64736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106104cf5760003560e01c80638e38b7cb11610276578063c876d0b91161014f578063ee40166e116100c1578063f637434211610085578063f637434214610e31578063f6b20c3b14610e47578063f8b45b0514610e5c578063f9f92be414610e72578063fd361d0e14610ea2578063fe72b27a14610ebc57600080fd5b8063ee40166e14610dba578063ee44b44e14610dd0578063f11a24d314610de6578063f2fde38b14610dfc578063f5648a4f14610e1c57600080fd5b8063dd62ed3e11610113578063dd62ed3e14610cf3578063e2f4560514610d39578063e4c4a64b14610d4f578063e71dc3f514610d6f578063e884f26014610d85578063eb472fc414610d9a57600080fd5b8063c876d0b914610c6d578063cc2ffe7c14610c87578063d257b34f14610c9d578063d85ba06314610cbd578063dc3f0d0f14610cd357600080fd5b8063acee28d1116101e8578063bd5fb920116101ac578063bd5fb92014610bb8578063befd2fac14610bd8578063c024666814610bf8578063c17b5b8c14610c18578063c5f956af14610c38578063c7c61e2c14610c5857600080fd5b8063acee28d114610b0c578063adb873bd14610b22578063afd6ce6114610b38578063b62496f514610b68578063bbc0c74214610b9857600080fd5b80639ec22c0e1161023a5780639ec22c0e14610a6a578063a457c2d714610a80578063a4c82a0014610aa0578063a62068ce14610ab6578063a9059cbb14610acc578063ac8d261714610aec57600080fd5b80638e38b7cb146109dd57806395d89b41146109fd5780639a5bd2dd14610a125780639a7a23d614610a345780639e93ad8e14610a5457600080fd5b80635c068a8c116103a8578063715018a61161031a578063783102eb116102de578063783102eb146109335780638095d5641461094957806382aa7c68146109695780638366e79a1461098957806388e765ff146109a95780638da5cb5b146109bf57600080fd5b8063715018a6146108b4578063730c1888146108c9578063751039fc146108e95780637571336a146108fe578063763cef491461091e57600080fd5b80636b0a894c1161036c5780636b0a894c1461081d5780636b2fb124146108335780636ddd17131461084957806370a082311461086a578063712c29851461088a578063713d09741461089f57600080fd5b80635c068a8c1461078e5780635c3352d3146107a45780636605bfda146107d157806366d602ae146107f15780636a486a8e1461080757600080fd5b80631c499ab011610441578063313ce56711610405578063313ce567146106e75780633950935114610703578063452ed4f1146107235780634a62bb651461074357806351f205e41461076257806358a6d5311461077757600080fd5b80631c499ab01461065757806323b872dd146106775780632be32b61146106975780632c3e486c146106b75780632e82f1a0146106cd57600080fd5b80631805805b116104935780631805805b146105be57806318160ddd146105e0578063184c16c5146105f557806318e1c1231461060b578063199ffc721461062b5780631a8145bb1461064157600080fd5b8063058054c9146104db57806306fdde03146105045780630758d92414610526578063095ea7b31461055e57806310d5de531461058e57600080fd5b366104d657005b600080fd5b3480156104e757600080fd5b506104f160235481565b6040519081526020015b60405180910390f35b34801561051057600080fd5b50610519610edc565b6040516104fb9190614e72565b34801561053257600080fd5b50600654610546906001600160a01b031681565b6040516001600160a01b0390911681526020016104fb565b34801561056a57600080fd5b5061057e610579366004614ed8565b610f6e565b60405190151581526020016104fb565b34801561059a57600080fd5b5061057e6105a9366004614f04565b602d6020526000908152604090205460ff1681565b3480156105ca57600080fd5b506105de6105d9366004614f04565b610f85565b005b3480156105ec57600080fd5b506002546104f1565b34801561060157600080fd5b506104f1602a5481565b34801561061757600080fd5b506105de610626366004614f28565b611045565b34801561063757600080fd5b506104f160275481565b34801561064d57600080fd5b506104f160215481565b34801561066357600080fd5b506105de610672366004614f28565b611119565b34801561068357600080fd5b5061057e610692366004614f41565b611225565b3480156106a357600080fd5b506105de6106b2366004614f28565b6112cf565b3480156106c357600080fd5b506104f160285481565b3480156106d957600080fd5b5060265461057e9060ff1681565b3480156106f357600080fd5b50604051601281526020016104fb565b34801561070f57600080fd5b5061057e61071e366004614ed8565b6113dc565b34801561072f57600080fd5b50600b54610546906001600160a01b031681565b34801561074f57600080fd5b5060115461057e90610100900460ff1681565b34801561076e57600080fd5b506105de611418565b34801561078357600080fd5b50600f54431061057e565b34801561079a57600080fd5b506104f160195481565b3480156107b057600080fd5b506104f16107bf366004614f04565b60146020526000908152604090205481565b3480156107dd57600080fd5b506105de6107ec366004614f04565b611518565b3480156107fd57600080fd5b506104f160085481565b34801561081357600080fd5b506104f1601c5481565b34801561082957600080fd5b506104f160105481565b34801561083f57600080fd5b506104f1601d5481565b34801561085557600080fd5b5060115461057e906301000000900460ff1681565b34801561087657600080fd5b506104f1610885366004614f04565b6115ee565b34801561089657600080fd5b506104f1611609565b3480156108ab57600080fd5b506104f1611632565b3480156108c057600080fd5b506105de61182e565b3480156108d557600080fd5b506105de6108e4366004614f90565b6118a2565b3480156108f557600080fd5b506105de6119cb565b34801561090a57600080fd5b506105de610919366004614fc9565b611a47565b34801561092a57600080fd5b506105de611b0f565b34801561093f57600080fd5b506104f160255481565b34801561095557600080fd5b506105de610964366004615002565b611cb1565b34801561097557600080fd5b506105de610984366004614f28565b611d71565b34801561099557600080fd5b5061057e6109a436600461502e565b611e68565b3480156109b557600080fd5b506104f160075481565b3480156109cb57600080fd5b506005546001600160a01b0316610546565b3480156109e957600080fd5b506105de6109f83660046150a8565b612019565b348015610a0957600080fd5b506105196120ba565b348015610a1e57600080fd5b50610a276120c9565b6040516104fb9190615138565b348015610a4057600080fd5b506105de610a4f366004614fc9565b61212a565b348015610a6057600080fd5b506104f161271081565b348015610a7657600080fd5b506104f1602b5481565b348015610a8c57600080fd5b5061057e610a9b366004614ed8565b61221e565b348015610aac57600080fd5b506104f160295481565b348015610ac257600080fd5b506104f1600f5481565b348015610ad857600080fd5b5061057e610ae7366004614ed8565b6122b7565b348015610af857600080fd5b506105de610b07366004615221565b6122c4565b348015610b1857600080fd5b506104f160155481565b348015610b2e57600080fd5b506104f1601f5481565b348015610b4457600080fd5b5061057e610b53366004614f04565b60136020526000908152604090205460ff1681565b348015610b7457600080fd5b5061057e610b83366004614f04565b602e6020526000908152604090205460ff1681565b348015610ba457600080fd5b5060115461057e9062010000900460ff1681565b348015610bc457600080fd5b506105de610bd33660046150a8565b612974565b348015610be457600080fd5b506105de610bf3366004614f28565b612a7a565b348015610c0457600080fd5b506105de610c13366004614fc9565b612bb0565b348015610c2457600080fd5b506105de610c33366004615002565b612c39565b348015610c4457600080fd5b50600c54610546906001600160a01b031681565b348015610c6457600080fd5b506105de612cf4565b348015610c7957600080fd5b5060175461057e9060ff1681565b348015610c9357600080fd5b506104f160205481565b348015610ca957600080fd5b506105de610cb8366004614f28565b612d5d565b348015610cc957600080fd5b506104f160185481565b348015610cdf57600080fd5b506105de610cee366004614f28565b612ea8565b348015610cff57600080fd5b506104f1610d0e36600461502e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610d4557600080fd5b506104f1600a5481565b348015610d5b57600080fd5b5061057e610d6a366004614f28565b612fb6565b348015610d7b57600080fd5b506104f1601b5481565b348015610d9157600080fd5b506105de6131c2565b348015610da657600080fd5b50610546610db5366004614f28565b6131f8565b348015610dc657600080fd5b506104f1600e5481565b348015610ddc57600080fd5b506104f160245481565b348015610df257600080fd5b506104f1601a5481565b348015610e0857600080fd5b506105de610e17366004614f04565b613222565b348015610e2857600080fd5b506105de61330d565b348015610e3d57600080fd5b506104f1601e5481565b348015610e5357600080fd5b506105de613379565b348015610e6857600080fd5b506104f160095481565b348015610e7e57600080fd5b5061057e610e8d366004614f04565b60126020526000908152604090205460ff1681565b348015610eae57600080fd5b5060225461057e9060ff1681565b348015610ec857600080fd5b506105de610ed7366004614f28565b6133b9565b606060038054610eeb90615342565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1790615342565b8015610f645780601f10610f3957610100808354040283529160200191610f64565b820191906000526020600020905b815481529060010190602001808311610f4757829003601f168201915b5050505050905090565b6000610f7b3384846136b3565b5060015b92915050565b6005546001600160a01b03163314610fb85760405162461bcd60e51b8152600401610faf9061537c565b60405180910390fd5b60115462010000900460ff16156110235760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401610faf565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461106f5760405162461bcd60e51b8152600401610faf9061537c565b600a8110158015611082575061c3508111155b6110ce5760405162461bcd60e51b815260206004820181905260248201527f4d75737420736574206265747765656e20302e3120616e642035303020424e426044820152606401610faf565b6110df81662386f26fc100006153c7565b6015556040518181527f0320a651094de4f5fc35c0f1c336811904e8f465b6599a93eb0dec4919b8fec5906020015b60405180910390a150565b6005546001600160a01b031633146111435760405162461bcd60e51b8152600401610faf9061537c565b61114f6012600a6154c2565b606461115a60025490565b6111659060016153c7565b61116f91906154d1565b61117991906154d1565b8110156111da5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f776044820152686572207468616e202560b81b6064820152608401610faf565b6111e66012600a6154c2565b6111f090826153c7565b60098190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc9060200161110e565b60006112328484846137d7565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156112b75760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610faf565b6112c485338584036136b3565b506001949350505050565b6005546001600160a01b031633146112f95760405162461bcd60e51b8152600401610faf9061537c565b6113056012600a6154c2565b6103e861131160025490565b61131c9060016153c7565b61132691906154d1565b61133091906154d1565b8110156113915760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610faf565b61139d6012600a6154c2565b6113a790826153c7565b60078190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de410099060200161110e565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610f7b9185906114139086906154f3565b6136b3565b6005546001600160a01b031633146114425760405162461bcd60e51b8152600401610faf9061537c565b600a5461144e306115ee565b10156114c4576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610faf565b6011805460ff191660011790556114d961459a565b6011805460ff191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b600c546001600160a01b031633146115425760405162461bcd60e51b8152600401610faf90615506565b6001600160a01b0381166115a45760405162461bcd60e51b8152602060048201526024808201527f5f74726561737572794164647265737320616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610faf565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b6001600160a01b031660009081526020819052604090205490565b60225460009060ff161561162c5760245460235461162791906154f3565b905090565b50600090565b604080516002808252606082018352600092839291906020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156116a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c49190615527565b816000815181106116d7576116d7615544565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061170b5761170b615544565b6001600160a01b039290921660209283029190910182015260408051600280825260608201835260009391929091830190803683370190505060065460155460405163d06ca61f60e01b81529293506001600160a01b039091169163d06ca61f9161177a91869060040161555a565b600060405180830381865afa158015611797573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117bf919081019061557b565b90506064601d54601e546117d391906154f3565b826001815181106117e6576117e6615544565b60200260200101516117f891906153c7565b61180291906154d1565b8160018151811061181557611815615544565b602002602001015161182791906154f3565b9250505090565b6005546001600160a01b031633146118585760405162461bcd60e51b8152600401610faf9061537c565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b600c546001600160a01b031633146118cc5760405162461bcd60e51b8152600401610faf90615506565b61025883101561193a5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610faf565b6103e8821115801561194a575060015b6119af5760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610faf565b6028929092556027556026805460ff1916911515919091179055565b6005546001600160a01b031633146119f55760405162461bcd60e51b8152600401610faf9061537c565b6011805461ff00191690556017805460ff191690556002546007556002546008556002546009556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b03163314611a715760405162461bcd60e51b8152600401610faf9061537c565b80611ae457600b546001600160a01b0390811690831603611ae45760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610faf565b6001600160a01b03919091166000908152602d60205260409020805460ff1916911515919091179055565b600c546001600160a01b03163314611b395760405162461bcd60e51b8152600401610faf90615506565b611b41611609565b4210158015611b5757506000611b55611609565b115b611b9c5760405162461bcd60e51b815260206004820152601660248201527526bab9ba103932b8bab2b9ba1030b732103bb0b4ba1760511b6044820152606401610faf565b600060238190556022805460ff19169055602554600b546040516370a0823160e01b8152306004820152606492916001600160a01b0316906370a0823190602401602060405180830381865afa158015611bfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1e919061560c565b611c2891906153c7565b611c3291906154d1565b6000602555600b5460405163a9059cbb60e01b8152336004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611c89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cad9190615625565b5050565b6005546001600160a01b03163314611cdb5760405162461bcd60e51b8152600401610faf9061537c565b6019839055601a829055601b81905580611cf583856154f3565b611cff91906154f3565b6018556064611d11612710601e6153c7565b611d1b91906154d1565b6018541115611d6c5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610faf565b505050565b6005546001600160a01b03163314611d9b5760405162461bcd60e51b8152600401610faf9061537c565b60115462010000900460ff1615611df45760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610faf565b6032811115611e155760405162461bcd60e51b8152600401610faf90615642565b6011805463ffff00001916630101000017905543600e819055611e399082906154f3565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b600c546000906001600160a01b03163314611e955760405162461bcd60e51b8152600401610faf90615506565b6001600160a01b038316611eeb5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610faf565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611f32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f56919061560c565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611fa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fcd9190615625565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146120435760405162461bcd60e51b8152600401610faf9061537c565b60005b828110156120b457816012600086868581811061206557612065615544565b905060200201602081019061207a9190614f04565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806120ac81615689565b915050612046565b50505050565b606060048054610eeb90615342565b6060600d805480602002602001604051908101604052809291908181526020018280548015610f6457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612103575050505050905090565b6005546001600160a01b031633146121545760405162461bcd60e51b8152600401610faf9061537c565b600b546001600160a01b03908116908316036121d85760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610faf565b6121e28282614726565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156122a05760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610faf565b6122ad33858584036136b3565b5060019392505050565b6000610f7b3384846137d7565b6005546001600160a01b031633146122ee5760405162461bcd60e51b8152600401610faf9061537c565b60115462010000900460ff161561235b5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610faf565b6032851061237b5760405162461bcd60e51b8152600401610faf90615642565b85518751146123cc5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610faf565b61012c87511061243d5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203330302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610faf565b60005b838110156124af576001602c600087878581811061246057612460615544565b90506020020160208101906124759190614f04565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806124a781615689565b915050612440565b5060005b81811015612522576001601260008585858181106124d3576124d3615544565b90506020020160208101906124e89190614f04565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061251a81615689565b9150506124b3565b5060005b87518110156125f057600088828151811061254357612543615544565b6020908102919091018101516001600160a01b038116600090815260139092526040909120805460ff19166001179055905061258242620151806154f3565b6001600160a01b0382166000908152601460205260408120919091556125aa6012600a6154c2565b8984815181106125bc576125bc615544565b60200260200101516125ce91906153c7565b90506125db338383614754565b505080806125e890615689565b915050612526565b506011805463ffff00001916630101000017905543600e8190556126159086906154f3565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600660009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612694573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126b89190615527565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561271a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273e9190615527565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561278b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127af9190615527565b600b80546001600160a01b0319166001600160a01b039290921691821790556127d99060016148a9565b600b546127f0906001600160a01b03166001614726565b6000471161284c5760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610faf565b6000612857306115ee565b116128b35760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610faf565b6006546128ce9030906001600160a01b0316611413826115ee565b6006546001600160a01b031663f305d71947306128ea816115ee565b60008030426040518863ffffffff1660e01b8152600401612910969594939291906156a2565b60606040518083038185885af115801561292e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061295391906156dd565b50506126ac60198190556018819055601d819055601c555050505050505050565b6005546001600160a01b0316331461299e5760405162461bcd60e51b8152600401610faf9061537c565b60005b828110156120b45781602c60008686858181106129c0576129c0615544565b90506020020160208101906129d59190614f04565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055838382818110612a0f57612a0f615544565b9050602002016020810190612a249190614f04565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df783604051612a60911515815260200190565b60405180910390a280612a7281615689565b9150506129a1565b600c546001600160a01b03163314612aa45760405162461bcd60e51b8152600401610faf90615506565b60225460ff1615612b115760405162461bcd60e51b815260206004820152603160248201527f43616e6e6f74207265717565737420616761696e20756e74696c206669727374604482015270103932b8bab2b9ba1034b99037bb32b91760791b6064820152608401610faf565b60648111158015612b225750600081115b612b6e5760405162461bcd60e51b815260206004820152601a60248201527f4e65656420746f20736574206265747765656e20312d313030250000000000006044820152606401610faf565b426023556022805460ff1916600117905560258190556040517fd99a77b2f3951cd076e75814e44db497e6abc203dd251329da0b62c288f9f48b90600090a150565b6005546001600160a01b03163314612bda5760405162461bcd60e51b8152600401610faf9061537c565b6001600160a01b0382166000818152602c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314612c635760405162461bcd60e51b8152600401610faf9061537c565b601d839055601e829055601f81905580612c7d83856154f3565b612c8791906154f3565b601c556064612c99612710601e6153c7565b612ca391906154d1565b601c541115611d6c5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610faf565b600c546001600160a01b03163314612d1e5760405162461bcd60e51b8152600401610faf90615506565b6022805460ff191690556000602581905560238190556040517ffbcc1c208c9c4d1d9f557267b55c5ae316e74ce676a0db72ef18c6d5f5767c619190a1565b6005546001600160a01b03163314612d875760405162461bcd60e51b8152600401610faf9061537c565b620186a0612d9460025490565b612d9f9060016153c7565b612da991906154d1565b811015612e165760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610faf565b6103e8612e2260025490565b612e2d9060016153c7565b612e3791906154d1565b811115612ea35760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610faf565b600a55565b6005546001600160a01b03163314612ed25760405162461bcd60e51b8152600401610faf9061537c565b612ede6012600a6154c2565b6103e8612eea60025490565b612ef59060016153c7565b612eff91906154d1565b612f0991906154d1565b811015612f6b5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610faf565b612f776012600a6154c2565b612f8190826153c7565b60088190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e9060200161110e565b600c546000906001600160a01b03163314612fe35760405162461bcd60e51b8152600401610faf90615506565b602a54602b54612ff391906154f3565b42116130415760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610faf565b6107d08211156130a65760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20323025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610faf565b42602b55600b546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a0823190602401602060405180830381865afa1580156130f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613119919061560c565b9050600061271061312a85846153c7565b61313491906154d1565b9050801561315557600b54613155906001600160a01b031661dead83614754565b600b546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b15801561319f57600080fd5b505af11580156131b3573d6000803e3d6000fd5b50600198975050505050505050565b6005546001600160a01b031633146131ec5760405162461bcd60e51b8152600401610faf9061537c565b6017805460ff19169055565b600d818154811061320857600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b0316331461324c5760405162461bcd60e51b8152600401610faf9061537c565b6001600160a01b0381166132b15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610faf565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600c546001600160a01b031633146133375760405162461bcd60e51b8152600401610faf90615506565b604051600090339047908381818185875af1925050503d80600081146120b4576040519150601f19603f3d011682016040523d82523d6000602084013e6120b4565b600c546001600160a01b031633146133a35760405162461bcd60e51b8152600401610faf90615506565b603260198190556018819055601d819055601c55565b600c546001600160a01b031633146133e35760405162461bcd60e51b8152600401610faf90615506565b6107d08111156134535760405162461bcd60e51b815260206004820152603560248201527f4d6179206e6f74206275726e206d6f7265207468616e20323025206f6620636f6044820152746e74726163742773204c5020617420612074696d6560581b6064820152608401610faf565b602a54613460904261570b565b602b5411156134a15760405162461bcd60e51b815260206004820152600d60248201526c213ab937103a37b79039b7b7b760991b6044820152606401610faf565b42602b55600b546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156134ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613512919061560c565b9050600061351f306115ee565b9050600061271061353085856153c7565b61353a91906154d1565b600b5460065460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af1158015613594573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b89190615625565b50600654604051629d473b60e21b81526001600160a01b03909116906302751cec906135f390309086906001908190849042906004016156a2565b60408051808303816000875af1158015613611573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613635919061571e565b5050600083613643306115ee565b61364d919061570b565b90508015613662576136623061dead83614754565b600061366e834761570b565b9050801561367f5761367f8161490c565b60405184907f81b7e7967a97e0708996ad25e859322b1c2e22612ac6798c9c95cfda2dca265f90600090a250505050505050565b6001600160a01b0383166137155760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610faf565b6001600160a01b0382166137765760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610faf565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166137fd5760405162461bcd60e51b8152600401610faf90615742565b6001600160a01b0382166138235760405162461bcd60e51b8152600401610faf90615787565b600081116138735760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610faf565b60115462010000900460ff16613907576001600160a01b0383166000908152602c602052604090205460ff16806138c257506001600160a01b0382166000908152602c602052604090205460ff165b6139075760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610faf565b600f544310158015613921575060115462010000900460ff165b15613a16576001600160a01b03831660009081526012602052604090205460ff1615801561396857506001600160a01b03821660009081526012602052604090205460ff16155b8061398057506005546001600160a01b038381169116145b8061399557506001600160a01b03821661dead145b613a165760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610faf565b6001600160a01b03831660009081526013602052604090205460ff1615613bfd576001600160a01b0382166000908152602e602052604090205460ff1615613b51576001600160a01b038316600090815260146020526040902054421015613ab25760405162461bcd60e51b815260206004820152600f60248201526e10d85b9b9bdd081cd95b1b081e595d608a1b6044820152606401610faf565b613aba611632565b811115613b265760405162461bcd60e51b815260206004820152603460248201527f417474656d7074696e6720746f2073656c6c206f766572206d61782073656c6c6044820152731030b6b7bab73a17101021b432b1b59036b0bc1760611b6064820152608401610faf565b613b3342620151806154f3565b6001600160a01b038416600090815260146020526040902055613bfd565b6001600160a01b0382166000908152602c602052604090205460ff16613bfd5760405162461bcd60e51b815260206004820152605560248201527f507269766174652073616c652063616e6e6f74207472616e7366657220616e6460448201527f206d7573742073656c6c206f6e6c79206f72207472616e7366657220746f2061606482015274103bb434ba32b634b9ba32b21030b2323932b9b99760591b608482015260a401610faf565b601154610100900460ff1615613ffe576005546001600160a01b03848116911614801590613c3957506005546001600160a01b03838116911614155b8015613c4d57506001600160a01b03821615155b8015613c6457506001600160a01b03821661dead14155b8015613c8957506001600160a01b0383166000908152602c602052604090205460ff16155b8015613cae57506001600160a01b0382166000908152602c602052604090205460ff16155b15613ffe5760175460ff1615613dc7576006546001600160a01b03838116911614801590613cea5750600b546001600160a01b03838116911614155b15613dc757613cfa60024361570b565b32600090815260166020526040902054108015613d385750613d1d60024361570b565b6001600160a01b038316600090815260166020526040902054105b613da25760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610faf565b3260009081526016602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152602e602052604090205460ff168015613e0857506001600160a01b0382166000908152602d602052604090205460ff16155b15613ed457600754811115613e705760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610faf565b600954613e7c836115ee565b613e8690836154f3565b1115613ecf5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d95959081b585e081dd85b1b195d60421b6044820152606401610faf565b613ffe565b6001600160a01b0382166000908152602e602052604090205460ff168015613f1557506001600160a01b0383166000908152602d602052604090205460ff16155b15613f7f57600854811115613ecf5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610faf565b6001600160a01b0382166000908152602d602052604090205460ff16613ffe57600954613fab836115ee565b613fb590836154f3565b1115613ffe5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d95959081b585e081dd85b1b195d60421b6044820152606401610faf565b6000614009306115ee565b600a549091508110801590819061402957506011546301000000900460ff165b8015614038575060115460ff16155b801561405d57506001600160a01b0385166000908152602e602052604090205460ff16155b801561408257506001600160a01b0385166000908152602c602052604090205460ff16155b80156140a757506001600160a01b0384166000908152602c602052604090205460ff16155b156140cc576011805460ff191660011790556140c161459a565b6011805460ff191690555b60115460ff161580156140f757506001600160a01b0384166000908152602e602052604090205460ff165b8015614105575060265460ff165b8015614120575060285460295461411c91906154f3565b4210155b801561414557506001600160a01b0385166000908152602c602052604090205460ff16155b1561415257614152614a5f565b6001600160a01b0385166000908152602c602052604090205460019060ff168061419457506001600160a01b0385166000908152602c602052604090205460ff165b1561419d575060005b600080821561458557600f54431080156141cf57506001600160a01b0388166000908152602e602052604090205460ff165b80156141f457506001600160a01b0387166000908152602e602052604090205460ff16155b801561421957506001600160a01b0387166000908152602c602052604090205460ff16155b801561422757506000601854115b156143cd57600f54431061424e57600160076000828254614248919061570b565b90915550505b6001600160a01b03871660009081526012602052604090205460ff1661432e576001600160a01b0387166000908152601260205260408120805460ff1916600190811790915560108054919290916142a79084906154f3565b9091555050600d80546001810182556000919091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319166001600160a01b0389169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6127106018548761433f91906153c7565b61434991906154d1565b9150601854601a548361435c91906153c7565b61436691906154d1565b6021600082825461437791906154f3565b909155505060185460195461438c90846153c7565b61439691906154d1565b602060008282546143a791906154f3565b9091555050601854601b546143bc90846153c7565b6143c691906154d1565b9050614554565b6001600160a01b0387166000908152602e602052604090205460ff1680156143f757506000601c54115b1561448a57612710601c548761440d91906153c7565b61441791906154d1565b9150601c54601e548361442a91906153c7565b61443491906154d1565b6021600082825461444591906154f3565b9091555050601c54601d5461445a90846153c7565b61446491906154d1565b6020600082825461447591906154f3565b9091555050601854601f546143bc90846153c7565b6001600160a01b0388166000908152602e602052604090205460ff1680156144b457506000601854115b1561455457612710601854876144ca91906153c7565b6144d491906154d1565b9150601854601a54836144e791906153c7565b6144f191906154d1565b6021600082825461450291906154f3565b909155505060185460195461451790846153c7565b61452191906154d1565b6020600082825461453291906154f3565b9091555050601854601b5461454790846153c7565b61455191906154d1565b90505b811561457857614565883084614754565b8015614578576145783061dead83614754565b614582828761570b565b95505b614590888888614754565b5050505050505050565b60006145a5306115ee565b6021546020549192509060006145bb82846154f3565b90508315806145c8575080155b156145d35750505050565b600a80546145e0916153c7565b8411156145f757600a80546145f4916153c7565b93505b6000806002836021548861460b91906153c7565b61461591906154d1565b61461f91906154d1565b905061463361462e828861570b565b614c79565b60215447908190600090614649906002906154d1565b614653908761570b565b60205461466090856153c7565b61466a91906154d1565b9050614676818361570b565b9150876021600082825461468a919061570b565b9250508190555086602060008282546146a3919061570b565b909155505083158015906146b75750600082115b156146c6576146c68483614dd3565b600c546040516001600160a01b03909116904790600081818185875af1925050503d8060008114614713576040519150601f19603f3d011682016040523d82523d6000602084013e614718565b606091505b505050505050505050505050565b6001600160a01b0382166000908152602e60205260409020805460ff19168215151790556121e282826148a9565b6001600160a01b03831661477a5760405162461bcd60e51b8152600401610faf90615742565b6001600160a01b0382166147a05760405162461bcd60e51b8152600401610faf90615787565b6001600160a01b038316600090815260208190526040902054818110156148185760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610faf565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061484f9084906154f3565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161489b91815260200190565b60405180910390a350505050565b6001600160a01b0382166000818152602d6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015614976573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061499a9190615527565b816000815181106149ad576149ad615544565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106149e1576149e1615544565b6001600160a01b03928316602091820292909201015260065460405163b6f9de9560e01b815291169063b6f9de95908490614a2990600090869061dead9042906004016157ca565b6000604051808303818588803b158015614a4257600080fd5b505af1158015614a56573d6000803e3d6000fd5b50505050505050565b426029819055602b55600b546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015614ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ad5919061560c565b90506000614ae2306115ee565b9050600061271060275484614af791906153c7565b614b0191906154d1565b600b5460065460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af1158015614b5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b7f9190615625565b50600654604051629d473b60e21b81526001600160a01b03909116906302751cec90614bba90309086906001908190849042906004016156a2565b60408051808303816000875af1158015614bd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bfc919061571e565b5050600083614c0a306115ee565b614c14919061570b565b90508015614c2957614c293061dead83614754565b6000614c35834761570b565b90508015614c4657614c468161490c565b60405184907f30464008593337c7762c84338a125f5c481ce1997dbf1d7931bcce0b6430787a90600090a2505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110614cae57614cae615544565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015614d07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d2b9190615527565b81600181518110614d3e57614d3e615544565b6001600160a01b039283166020918202929092010152600654614d6491309116846136b3565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790614d9d9085906000908690309042906004016157ff565b600060405180830381600087803b158015614db757600080fd5b505af1158015614dcb573d6000803e3d6000fd5b505050505050565b600654614deb9030906001600160a01b0316846136b3565b60065460405163f305d71960e01b81526001600160a01b039091169063f305d719908390614e2890309087906000908190849042906004016156a2565b60606040518083038185885af1158015614e46573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614e6b91906156dd565b5050505050565b600060208083528351808285015260005b81811015614e9f57858101830151858201604001528201614e83565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114614ed557600080fd5b50565b60008060408385031215614eeb57600080fd5b8235614ef681614ec0565b946020939093013593505050565b600060208284031215614f1657600080fd5b8135614f2181614ec0565b9392505050565b600060208284031215614f3a57600080fd5b5035919050565b600080600060608486031215614f5657600080fd5b8335614f6181614ec0565b92506020840135614f7181614ec0565b929592945050506040919091013590565b8015158114614ed557600080fd5b600080600060608486031215614fa557600080fd5b83359250602084013591506040840135614fbe81614f82565b809150509250925092565b60008060408385031215614fdc57600080fd5b8235614fe781614ec0565b91506020830135614ff781614f82565b809150509250929050565b60008060006060848603121561501757600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561504157600080fd5b823561504c81614ec0565b91506020830135614ff781614ec0565b60008083601f84011261506e57600080fd5b50813567ffffffffffffffff81111561508657600080fd5b6020830191508360208260051b85010111156150a157600080fd5b9250929050565b6000806000604084860312156150bd57600080fd5b833567ffffffffffffffff8111156150d457600080fd5b6150e08682870161505c565b9094509250506020840135614fbe81614f82565b600081518084526020808501945080840160005b8381101561512d5781516001600160a01b031687529582019590820190600101615108565b509495945050505050565b602081526000614f2160208301846150f4565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561518a5761518a61514b565b604052919050565b600067ffffffffffffffff8211156151ac576151ac61514b565b5060051b60200190565b600082601f8301126151c757600080fd5b813560206151dc6151d783615192565b615161565b82815260059290921b840181019181810190868411156151fb57600080fd5b8286015b8481101561521657803583529183019183016151ff565b509695505050505050565b600080600080600080600060a0888a03121561523c57600080fd5b873567ffffffffffffffff8082111561525457600080fd5b818a0191508a601f83011261526857600080fd5b813560206152786151d783615192565b82815260059290921b8401810191818101908e84111561529757600080fd5b948201945b838610156152be5785356152af81614ec0565b8252948201949082019061529c565b9b50508b0135925050808211156152d457600080fd5b6152e08b838c016151b6565b975060408a0135965060608a01359150808211156152fd57600080fd5b6153098b838c0161505c565b909650945060808a013591508082111561532257600080fd5b5061532f8a828b0161505c565b989b979a50959850939692959293505050565b600181811c9082168061535657607f821691505b60208210810361537657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610f7f57610f7f6153b1565b600181815b808511156154195781600019048211156153ff576153ff6153b1565b8085161561540c57918102915b93841c93908002906153e3565b509250929050565b60008261543057506001610f7f565b8161543d57506000610f7f565b8160018114615453576002811461545d57615479565b6001915050610f7f565b60ff84111561546e5761546e6153b1565b50506001821b610f7f565b5060208310610133831016604e8410600b841016171561549c575081810a610f7f565b6154a683836153de565b80600019048211156154ba576154ba6153b1565b029392505050565b6000614f2160ff841683615421565b6000826154ee57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610f7f57610f7f6153b1565b6020808252600790820152662330b4b632b21760c91b604082015260600190565b60006020828403121561553957600080fd5b8151614f2181614ec0565b634e487b7160e01b600052603260045260246000fd5b82815260406020820152600061557360408301846150f4565b949350505050565b6000602080838503121561558e57600080fd5b825167ffffffffffffffff8111156155a557600080fd5b8301601f810185136155b657600080fd5b80516155c46151d782615192565b81815260059190911b820183019083810190878311156155e357600080fd5b928401925b82841015615601578351825292840192908401906155e8565b979650505050505050565b60006020828403121561561e57600080fd5b5051919050565b60006020828403121561563757600080fd5b8151614f2181614f82565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2035360cc1b606082015260800190565b60006001820161569b5761569b6153b1565b5060010190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156156f257600080fd5b8351925060208401519150604084015190509250925092565b81810381811115610f7f57610f7f6153b1565b6000806040838503121561573157600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8481526080602082015260006157e360808301866150f4565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061581e60a08301866150f4565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220eeb9b184acc3a837829fa8f9a38b6bb84ad45995c183d545643a99dbfdb1973f64736f6c63430008110033

Deployed Bytecode Sourcemap

12739:31002:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14274:41;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;14274:41:0;;;;;;;;4682:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;12779:27::-;;;;;;;;;;-1:-1:-1;12779:27:0;;;;-1:-1:-1;;;;;12779:27:0;;;;;;-1:-1:-1;;;;;931:32:1;;;913:51;;901:2;886:18;12779:27:0;749:221:1;5596:169:0;;;;;;;;;;-1:-1:-1;5596:169:0;;;;;:::i;:::-;;:::i;:::-;;;1596:14:1;;1589:22;1571:41;;1559:2;1544:18;5596:169:0;1431:187:1;14846:64:0;;;;;;;;;;-1:-1:-1;14846:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20021:194;;;;;;;;;;-1:-1:-1;20021:194:0;;;;;:::i;:::-;;:::i;:::-;;5003:108;;;;;;;;;;-1:-1:-1;5091:12:0;;5003:108;;14603:47;;;;;;;;;;;;;;;;34808:248;;;;;;;;;;-1:-1:-1;34808:248:0;;;;;:::i;:::-;;:::i;14461:35::-;;;;;;;;;;;;;;;;14189:33;;;;;;;;;;;;;;;;21005:288;;;;;;;;;;-1:-1:-1;21005:288:0;;;;;:::i;:::-;;:::i;5773:492::-;;;;;;;;;;-1:-1:-1;5773:492:0;;;;;:::i;:::-;;:::i;20390:295::-;;;;;;;;;;-1:-1:-1;20390:295:0;;;;;:::i;:::-;;:::i;14515:45::-;;;;;;;;;;;;;;;;14421:33;;;;;;;;;;-1:-1:-1;14421:33:0;;;;;;;;4902:93;;;;;;;;;;-1:-1:-1;4902:93:0;;4985:2;2663:36:1;;2651:2;2636:18;4902:93:0;2521:184:1;6273:215:0;;;;;;;;;;-1:-1:-1;6273:215:0;;;;;:::i;:::-;;:::i;12957:21::-;;;;;;;;;;-1:-1:-1;12957:21:0;;;;-1:-1:-1;;;;;12957:21:0;;;13238:33;;;;;;;;;;-1:-1:-1;13238:33:0;;;;;;;;;;;34071:312;;;;;;;;;;;;;:::i;30292:120::-;;;;;;;;;;-1:-1:-1;30386:18:0;;30371:12;:33;30292:120;;13846:29;;;;;;;;;;;;;;;;13465:61;;;;;;;;;;-1:-1:-1;13465:61:0;;;;;:::i;:::-;;;;;;;;;;;;;;33679:340;;;;;;;;;;-1:-1:-1;33679:340:0;;;;;:::i;:::-;;:::i;12849:28::-;;;;;;;;;;;;;;;;13953;;;;;;;;;;;;;;;;13176:25;;;;;;;;;;;;;;;;13988:30;;;;;;;;;;;;;;;;13318:31;;;;;;;;;;-1:-1:-1;13318:31:0;;;;;;;;;;;5119:127;;;;;;;;;;-1:-1:-1;5119:127:0;;;;;:::i;:::-;;:::i;42616:281::-;;;;;;;;;;;;;:::i;34391:409::-;;;;;;;;;;;;;:::i;8763:150::-;;;;;;;;;;;;;:::i;37477:506::-;;;;;;;;;;-1:-1:-1;37477:506:0;;;;;:::i;:::-;;:::i;19188:269::-;;;;;;;;;;;;;:::i;21941:260::-;;;;;;;;;;-1:-1:-1;21941:260:0;;;;;:::i;:::-;;:::i;42905:546::-;;;;;;;;;;;;;:::i;14381:31::-;;;;;;;;;;;;;;;;22754:389;;;;;;;;;;-1:-1:-1;22754:389:0;;;;;:::i;:::-;;:::i;18705:427::-;;;;;;;;;;-1:-1:-1;18705:427:0;;;;;:::i;:::-;;:::i;32941:440::-;;;;;;;;;;-1:-1:-1;32941:440:0;;;;;:::i;:::-;;:::i;12815:27::-;;;;;;;;;;;;;;;;8549:79;;;;;;;;;;-1:-1:-1;8614:6:0;;-1:-1:-1;;;;;8614:6:0;8549:79;;19810:203;;;;;;;;;;-1:-1:-1;19810:203:0;;;;;:::i;:::-;;:::i;4790:104::-;;;;;;;;;;;;;:::i;19699:103::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;22209:293::-;;;;;;;;;;-1:-1:-1;22209:293:0;;;;;:::i;:::-;;:::i;14098:43::-;;;;;;;;;;;;14136:5;14098:43;;14657:35;;;;;;;;;;;;;;;;6496:413;;;;;;;;;;-1:-1:-1;6496:413:0;;;;;:::i;:::-;;:::i;14567:29::-;;;;;;;;;;;;;;;;13136:33;;;;;;;;;;;;;;;;5254:175;;;;;;;;;;-1:-1:-1;5254:175:0;;;;;:::i;:::-;;:::i;35064:2405::-;;;;;;;;;;-1:-1:-1;35064:2405:0;;;;;:::i;:::-;;:::i;13533:40::-;;;;;;;;;;;;;;;;14063:26;;;;;;;;;;;;;;;;13407:51;;;;;;;;;;-1:-1:-1;13407:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15068:58;;;;;;;;;;-1:-1:-1;15068:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13278:33;;;;;;;;;;-1:-1:-1;13278:33:0;;;;;;;;;;;23556:282;;;;;;;;;;-1:-1:-1;23556:282:0;;;;;:::i;:::-;;:::i;42100:508::-;;;;;;;;;;-1:-1:-1;42100:508:0;;;;;:::i;:::-;;:::i;23846:182::-;;;;;;;;;;-1:-1:-1;23846:182:0;;;;;:::i;:::-;;:::i;23151:397::-;;;;;;;;;;-1:-1:-1;23151:397:0;;;;;:::i;:::-;;:::i;12985:30::-;;;;;;;;;;-1:-1:-1;12985:30:0;;;;-1:-1:-1;;;;;12985:30:0;;;43459:279;;;;;;;;;;;;;:::i;13764:39::-;;;;;;;;;;-1:-1:-1;13764:39:0;;;;;;;;14150:32;;;;;;;;;;;;;;;;21363:346;;;;;;;;;;-1:-1:-1;21363:346:0;;;;;:::i;:::-;;:::i;13812:27::-;;;;;;;;;;;;;;;;20697:300;;;;;;;;;;-1:-1:-1;20697:300:0;;;;;:::i;:::-;;:::i;5437:151::-;;;;;;;;;;-1:-1:-1;5437:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;5553:18:0;;;5526:7;5553:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5437:151;12915:33;;;;;;;;;;;;;;;;40720:982;;;;;;;;;;-1:-1:-1;40720:982:0;;;;;:::i;:::-;;:::i;13919:25::-;;;;;;;;;;;;;;;;20280:98;;;;;;;;;;;;;:::i;13022:28::-;;;;;;;;;;-1:-1:-1;13022:28:0;;;;;:::i;:::-;;:::i;13059:37::-;;;;;;;;;;;;;;;;14322:52;;;;;;;;;;;;;;;;13882:30;;;;;;;;;;;;;;;;8921:244;;;;;;;;;;-1:-1:-1;8921:244:0;;;;;:::i;:::-;;:::i;33452:219::-;;;;;;;;;;;;;:::i;14025:31::-;;;;;;;;;;;;;;;;19465:226;;;;;;;;;;;;;:::i;12884:24::-;;;;;;;;;;;;;;;;13358:42;;;;;;;;;;-1:-1:-1;13358:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14231:36;;;;;;;;;;-1:-1:-1;14231:36:0;;;;;;;;39255:1457;;;;;;;;;;-1:-1:-1;39255:1457:0;;;;;:::i;:::-;;:::i;4682:100::-;4736:13;4769:5;4762:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4682:100;:::o;5596:169::-;5679:4;5696:39;911:10;5719:7;5728:6;5696:8;:39::i;:::-;-1:-1:-1;5753:4:0;5596:169;;;;;:::o;20021:194::-;8676:6;;-1:-1:-1;;;;;8676:6:0;911:10;8676:22;8668:67;;;;-1:-1:-1;;;8668:67:0;;;;;;;:::i;:::-;;;;;;;;;20107:13:::1;::::0;;;::::1;;;20106:14;20098:68;;;::::0;-1:-1:-1;;;20098:68:0;;10334:2:1;20098:68:0::1;::::0;::::1;10316:21:1::0;10373:2;10353:18;;;10346:30;10412:34;10392:18;;;10385:62;-1:-1:-1;;;10463:18:1;;;10456:39;10512:19;;20098:68:0::1;10132:405:1::0;20098:68:0::1;20177:9;:30:::0;;-1:-1:-1;;;;;;20177:30:0::1;-1:-1:-1::0;;;;;20177:30:0;;;::::1;::::0;;;::::1;::::0;;20021:194::o;34808:248::-;8676:6;;-1:-1:-1;;;;;8676:6:0;911:10;8676:22;8668:67;;;;-1:-1:-1;;;8668:67:0;;;;;;;:::i;:::-;34903:2:::1;34893:6;:12;;:31;;;;;34919:5;34909:6;:15;;34893:31;34885:76;;;::::0;-1:-1:-1;;;34885:76:0;;10744:2:1;34885:76:0::1;::::0;::::1;10726:21:1::0;;;10763:18;;;10756:30;10822:34;10802:18;;;10795:62;10874:18;;34885:76:0::1;10542:356:1::0;34885:76:0::1;34990:13;:6:::0;34999:4:::1;34990:13;:::i;:::-;34972:15;:31:::0;35019:29:::1;::::0;160:25:1;;;35019:29:0::1;::::0;148:2:1;133:18;35019:29:0::1;;;;;;;;34808:248:::0;:::o;21005:288::-;8676:6;;-1:-1:-1;;;;;8676:6:0;911:10;8676:22;8668:67;;;;-1:-1:-1;;;8668:67:0;;;;;;;:::i;:::-;21123:16:::1;4985:2:::0;21123::::1;:16;:::i;:::-;21115:3;21095:13;5091:12:::0;;;5003:108;21095:13:::1;:17;::::0;21111:1:::1;21095:17;:::i;:::-;:23;;;;:::i;:::-;21094:46;;;;:::i;:::-;21084:6;:56;;21076:110;;;::::0;-1:-1:-1;;;21076:110:0;;13015:2:1;21076:110:0::1;::::0;::::1;12997:21:1::0;13054:2;13034:18;;;13027:30;13093:34;13073:18;;;13066:62;-1:-1:-1;;;13144:18:1;;;13137:39;13193:19;;21076:110:0::1;12813:405:1::0;21076:110:0::1;21219:16;4985:2:::0;21219::::1;:16;:::i;:::-;21209:27;::::0;:6;:27:::1;:::i;:::-;21197:9;:39:::0;;;21252:33:::1;::::0;160:25:1;;;21252:33:0::1;::::0;148:2:1;133:18;21252:33:0::1;14:177:1::0;5773:492:0;5913:4;5930:36;5940:6;5948:9;5959:6;5930:9;:36::i;:::-;-1:-1:-1;;;;;6006:19:0;;5979:24;6006:19;;;:11;:19;;;;;;;;911:10;6006:33;;;;;;;;6058:26;;;;6050:79;;;;-1:-1:-1;;;6050:79:0;;13425:2:1;6050:79:0;;;13407:21:1;13464:2;13444:18;;;13437:30;13503:34;13483:18;;;13476:62;-1:-1:-1;;;13554:18:1;;;13547:38;13602:19;;6050:79:0;13223:404:1;6050:79:0;6165:57;6174:6;911:10;6215:6;6196:16;:25;6165:8;:57::i;:::-;-1:-1:-1;6253:4:0;;5773:492;-1:-1:-1;;;;5773:492:0:o;20390:295::-;8676:6;;-1:-1:-1;;;;;8676:6:0;911:10;8676:22;8668:67;;;;-1:-1:-1;;;8668:67:0;;;;;;;:::i;:::-;20512:16:::1;4985:2:::0;20512::::1;:16;:::i;:::-;20503:4;20483:13;5091:12:::0;;;5003:108;20483:13:::1;:17;::::0;20499:1:::1;20483:17;:::i;:::-;:24;;;;:::i;:::-;20482:47;;;;:::i;:::-;20472:6;:57;;20464:111;;;::::0;-1:-1:-1;;;20464:111:0;;13834:2:1;20464:111:0::1;::::0;::::1;13816:21:1::0;13873:2;13853:18;;;13846:30;13912:34;13892:18;;;13885:62;-1:-1:-1;;;13963:18:1;;;13956:39;14012:19;;20464:111:0::1;13632:405:1::0;20464:111:0::1;20611:16;4985:2:::0;20611::::1;:16;:::i;:::-;20601:27;::::0;:6;:27:::1;:::i;:::-;20586:12;:42:::0;;;20644:33:::1;::::0;160:25:1;;;20644:33:0::1;::::0;148:2:1;133:18;20644:33:0::1;14:177:1::0;6273:215:0;911:10;6361:4;6410:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6410:34:0;;;;;;;;;;6361:4;;6378:80;;6401:7;;6410:47;;6447:10;;6410:47;:::i;:::-;6378:8;:80::i;34071:312::-;8676:6;;-1:-1:-1;;;;;8676:6:0;911:10;8676:22;8668:67;;;;-1:-1:-1;;;8668:67:0;;;;;;;:::i;:::-;34162:18:::1;;34134:24;34152:4;34134:9;:24::i;:::-;:46;;34126:123;;;::::0;;-1:-1:-1;;;34126:123:0;;14374:2:1;34126:123:0::1;::::0;::::1;14356:21:1::0;14393:18;;;14386:30;;;;14452:34;14432:18;;;14425:62;14523:34;14503:18;;;14496:62;14575:19;;34126:123:0::1;14172:428:1::0;34126:123:0::1;34260:8;:15:::0;;-1:-1:-1;;34260:15:0::1;34271:4;34260:15;::::0;;34286:10:::1;:8;:10::i;:::-;34307:8;:16:::0;;-1:-1:-1;;34307:16:0::1;::::0;;34339:36:::1;::::0;34359:15:::1;160:25:1::0;;34339:36:0::1;::::0;148:2:1;133:18;34339:36:0::1;;;;;;;34071:312::o:0;33679:340::-;33783:15;;-1:-1:-1;;;;;33783:15:0;33761:10;:38;33753:58;;;;-1:-1:-1;;;33753:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33830:30:0;;33822:79;;;;-1:-1:-1;;;33822:79:0;;15142:2:1;33822:79:0;;;15124:21:1;15181:2;15161:18;;;15154:30;15220:34;15200:18;;;15193:62;-1:-1:-1;;;15271:18:1;;;15264:34;15315:19;;33822:79:0;14940:400:1;33822:79:0;33912:15;:43;;-1:-1:-1;;;;;;33912:43:0;-1:-1:-1;;;;;33912:43:0;;;;;;;;33971:40;;;;-1:-1:-1;;33971:40:0;33679:340;:::o;5119:127::-;-1:-1:-1;;;;;5220:18:0;5193:7;5220:18;;;;;;;;;;;;5119:127::o;42616:281::-;42698:24;;42676:7;;42698:24;;42695:195;;;42774:25;;42745:26;;:54;;;;:::i;:::-;42738:61;;42616:281;:::o;42695:195::-;-1:-1:-1;42848:1:0;;42616:281::o;34391:409::-;34488:16;;;34502:1;34488:16;;;;;;;;34445:7;;;;34488:16;34502:1;34488:16;;;;;;;;-1:-1:-1;;34525:9:0;;:16;;;-1:-1:-1;;;34525:16:0;;;;34464:40;;-1:-1:-1;;;;;;34525:9:0;;;;:14;;-1:-1:-1;34525:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34515:4;34520:1;34515:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;34515:26:0;;;-1:-1:-1;;;;;34515:26:0;;;;;34570:4;34552;34557:1;34552:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34552:23:0;;;;:7;;;;;;;;;;:23;34623:16;;;34637:1;34623:16;;;;;;;;34596:24;;34623:16;;34637:1;;34623:16;;;;;;;;;-1:-1:-1;;34660:9:0;;34684:15;;34660:46;;-1:-1:-1;;;34660:46:0;;34596:43;;-1:-1:-1;;;;;;34660:9:0;;;;:23;;:46;;34701:4;;34660:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34660:46:0;;;;;;;;;;;;:::i;:::-;34650:56;;34789:3;34771:15;;34752:16;;:34;;;;:::i;:::-;34738:7;34746:1;34738:10;;;;;;;;:::i;:::-;;;;;;;:49;;;;:::i;:::-;34737:55;;;;:::i;:::-;34724:7;34732:1;34724:10;;;;;;;;:::i;:::-;;;;;;;:68;;;;:::i;:::-;34717:75;;;;34391:409;:::o;8763:150::-;8676:6;;-1:-1:-1;;;;;8676:6:0;911:10;8676:22;8668:67;;;;-1:-1:-1;;;8668:67:0;;;;;;;:::i;:::-;8856:6:::1;::::0;8835:40:::1;::::0;8872:1:::1;::::0;-1:-1:-1;;;;;8856:6:0::1;::::0;8835:40:::1;::::0;8872:1;;8835:40:::1;8886:6;:19:::0;;-1:-1:-1;;;;;;8886:19:0::1;::::0;;8763:150::o;37477:506::-;37620:15;;-1:-1:-1;;;;;37620:15:0;37598:10;:38;37590:58;;;;-1:-1:-1;;;37590:58:0;;;;;;;:::i;:::-;37690:3;37667:19;:26;;37659:90;;;;-1:-1:-1;;;37659:90:0;;17158:2:1;37659:90:0;;;17140:21:1;17197:2;17177:18;;;17170:30;17236:34;17216:18;;;17209:62;-1:-1:-1;;;17287:18:1;;;17280:49;17346:19;;37659:90:0;16956:415:1;37659:90:0;37780:4;37768:8;:16;;:33;;;;-1:-1:-1;37788:13:0;37768:33;37760:94;;;;-1:-1:-1;;;37760:94:0;;17578:2:1;37760:94:0;;;17560:21:1;17617:2;17597:18;;;17590:30;17656:34;17636:18;;;17629:62;-1:-1:-1;;;17707:18:1;;;17700:46;17763:19;;37760:94:0;17376:412:1;37760:94:0;37865:15;:37;;;;37913:16;:27;37951:13;:24;;-1:-1:-1;;37951:24:0;;;;;;;;;;37477:506::o;19188:269::-;8676:6;;-1:-1:-1;;;;;8676:6:0;911:10;8676:22;8668:67;;;;-1:-1:-1;;;8668:67:0;;;;;;;:::i;:::-;19242:14:::1;:22:::0;;-1:-1:-1;;19242:22:0::1;::::0;;19275:20:::1;:28:::0;;-1:-1:-1;;19275:28:0::1;::::0;;5091:12;;19314::::1;:28:::0;5091:12;;19353:13:::1;:29:::0;5091:12;;19393:9:::1;:25:::0;19434:15:::1;::::0;::::1;::::0;;;::::1;19188:269::o:0;21941:260::-;8676:6;;-1:-1:-1;;;;;8676:6:0;911:10;8676:22;8668:67;;;;-1:-1:-1;;;8668:67:0;;;;;;;:::i;:::-;22037:4:::1;22033:104;;22075:6;::::0;-1:-1:-1;;;;;22075:6:0;;::::1;22065:16:::0;;::::1;::::0;22057:68:::1;;;::::0;-1:-1:-1;;;22057:68:0;;17995:2:1;22057:68:0::1;::::0;::::1;17977:21:1::0;18034:2;18014:18;;;18007:30;18073:34;18053:18;;;18046:62;-1:-1:-1;;;18124:18:1;;;18117:37;18171:19;;22057:68:0::1;17793:403:1::0;22057:68:0::1;-1:-1:-1::0;;;;;22147:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;22147:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21941:260::o;42905:546::-;42986:15;;-1:-1:-1;;;;;42986:15:0;42964:10;:38;42956:58;;;;-1:-1:-1;;;42956:58:0;;;;;;;:::i;:::-;43052:29;:27;:29::i;:::-;43033:15;:48;;:85;;;;;43117:1;43085:29;:27;:29::i;:::-;:33;43033:85;43025:120;;;;-1:-1:-1;;;43025:120:0;;18403:2:1;43025:120:0;;;18385:21:1;18442:2;18422:18;;;18415:30;-1:-1:-1;;;18461:18:1;;;18454:52;18523:18;;43025:120:0;18201:346:1;43025:120:0;43185:1;43156:26;:30;;;43197:24;:32;;-1:-1:-1;;43197:32:0;;;43317:16;;43281:6;;43266:48;;-1:-1:-1;;;43266:48:0;;43308:4;43266:48;;;913:51:1;43336:3:0;;43317:16;-1:-1:-1;;;;;43281:6:0;;43266:33;;886:18:1;;43266:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:67;;;;:::i;:::-;:73;;;;:::i;:::-;43379:1;43360:16;:20;43400:6;;43393:50;;-1:-1:-1;;;43393:50:0;;43417:10;43393:50;;;18915:51:1;18982:18;;;18975:34;;;43242:97:0;;-1:-1:-1;;;;;;43400:6:0;;43393:23;;18888:18:1;;43393:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42945:506;42905:546::o;22754:389::-;8676:6;;-1:-1:-1;;;;;8676:6:0;911:10;8676:22;8668:67;;;;-1:-1:-1;;;8668:67:0;;;;;;;:::i;:::-;22870:14:::1;:29:::0;;;22910:15:::1;:31:::0;;;22952:10:::1;:21:::0;;;22965:8;22999:32:::1;22928:13:::0;22887:12;22999:32:::1;:::i;:::-;:45;;;;:::i;:::-;22984:12;:60:::0;23098:3:::1;23079:16;14136:5;23079:2;:16;:::i;:::-;:22;;;;:::i;:::-;23063:12;;:38;;23055:80;;;::::0;-1:-1:-1;;;23055:80:0;;19472:2:1;23055:80:0::1;::::0;::::1;19454:21:1::0;19511:2;19491:18;;;19484:30;19550:31;19530:18;;;19523:59;19599:18;;23055:80:0::1;19270:353:1::0;23055:80:0::1;22754:389:::0;;;:::o;18705:427::-;8676:6;;-1:-1:-1;;;;;8676:6:0;911:10;8676:22;8668:67;;;;-1:-1:-1;;;8668:67:0;;;;;;;:::i;:::-;18793:13:::1;::::0;;;::::1;;;18792:14;18784:50;;;::::0;-1:-1:-1;;;18784:50:0;;19830:2:1;18784:50:0::1;::::0;::::1;19812:21:1::0;19869:2;19849:18;;;19842:30;19908:25;19888:18;;;19881:53;19951:18;;18784:50:0::1;19628:347:1::0;18784:50:0::1;18873:2;18853:16;:22;;18845:74;;;;-1:-1:-1::0;;;18845:74:0::1;;;;;;;:::i;:::-;18930:13;:20:::0;;-1:-1:-1;;18961:18:0;;;;;19011:12:::1;18990:18;:33:::0;;;19055:37:::1;::::0;19076:16;;19055:37:::1;:::i;:::-;19034:18;:58:::0;19108:16:::1;::::0;::::1;::::0;;;::::1;18705:427:::0;:::o;32941:440::-;33071:15;;33018:10;;-1:-1:-1;;;;;33071:15:0;33049:10;:38;33041:58;;;;-1:-1:-1;;;33041:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33118:20:0;;33110:59;;;;-1:-1:-1;;;33110:59:0;;20590:2:1;33110:59:0;;;20572:21:1;20629:2;20609:18;;;20602:30;20668:28;20648:18;;;20641:56;20714:18;;33110:59:0;20388:350:1;33110:59:0;33207:39;;-1:-1:-1;;;33207:39:0;;33240:4;33207:39;;;913:51:1;33180:24:0;;-1:-1:-1;;;;;33207:24:0;;;;;886:18:1;;33207:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33265:46;;-1:-1:-1;;;33265:46:0;;-1:-1:-1;;;;;18933:32:1;;;33265:46:0;;;18915:51:1;18982:18;;;18975:34;;;33180:66:0;;-1:-1:-1;33265:23:0;;;;;;18888:18:1;;33265:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33327;;;-1:-1:-1;;;;;18933:32:1;;18915:51;;18997:2;18982:18;;18975:34;;;33257:54:0;;-1:-1:-1;33327:46:0;;18888:18:1;33327:46:0;;;;;;;33030:351;32941:440;;;;:::o;19810:203::-;8676:6;;-1:-1:-1;;;;;8676:6:0;911:10;8676:22;8668:67;;;;-1:-1:-1;;;8668:67:0;;;;;;;:::i;:::-;19908:9:::1;19904:102;19923:20:::0;;::::1;19904:102;;;19990:4;19964:9;:23;19974:9;;19984:1;19974:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19964:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;19964:23:0;:30;;-1:-1:-1;;19964:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19945:3;::::1;::::0;::::1;:::i;:::-;;;;19904:102;;;;19810:203:::0;;;:::o;4790:104::-;4846:13;4879:7;4872:14;;;;;:::i;19699:103::-;19748:16;19783:11;19776:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19776:18:0;;;;;;;;;;;;;;;;;;;;;;19699:103;:::o;22209:293::-;8676:6;;-1:-1:-1;;;;;8676:6:0;911:10;8676:22;8668:67;;;;-1:-1:-1;;;8668:67:0;;;;;;;:::i;:::-;22318:6:::1;::::0;-1:-1:-1;;;;;22318:6:0;;::::1;22310:14:::0;;::::1;::::0;22302:84:::1;;;::::0;-1:-1:-1;;;22302:84:0;;21085:2:1;22302:84:0::1;::::0;::::1;21067:21:1::0;21124:2;21104:18;;;21097:30;21163:34;21143:18;;;21136:62;21234:27;21214:18;;;21207:55;21279:19;;22302:84:0::1;20883:421:1::0;22302:84:0::1;22397:41;22426:4;22432:5;22397:28;:41::i;:::-;22454:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;22454:40:0;::::1;::::0;::::1;::::0;;;::::1;22209:293:::0;;:::o;6496:413::-;911:10;6589:4;6633:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6633:34:0;;;;;;;;;;6686:35;;;;6678:85;;;;-1:-1:-1;;;6678:85:0;;21511:2:1;6678:85:0;;;21493:21:1;21550:2;21530:18;;;21523:30;21589:34;21569:18;;;21562:62;-1:-1:-1;;;21640:18:1;;;21633:35;21685:19;;6678:85:0;21309:401:1;6678:85:0;6799:67;911:10;6822:7;6850:15;6831:16;:34;6799:8;:67::i;:::-;-1:-1:-1;6897:4:0;;6496:413;-1:-1:-1;;;6496:413:0:o;5254:175::-;5340:4;5357:42;911:10;5381:9;5392:6;5357:9;:42::i;35064:2405::-;8676:6;;-1:-1:-1;;;;;8676:6:0;911:10;8676:22;8668:67;;;;-1:-1:-1;;;8668:67:0;;;;;;;:::i;:::-;35264:13:::1;::::0;;;::::1;;;35263:14;35255:70;;;::::0;-1:-1:-1;;;35255:70:0;;21917:2:1;35255:70:0::1;::::0;::::1;21899:21:1::0;21956:2;21936:18;;;21929:30;21995:34;21975:18;;;21968:62;-1:-1:-1;;;22046:18:1;;;22039:41;22097:19;;35255:70:0::1;21715:407:1::0;35255:70:0::1;35363:2;35344:16;:21;35336:73;;;;-1:-1:-1::0;;;35336:73:0::1;;;;;;;:::i;:::-;35446:15;:22;35428:7;:14;:40;35420:83;;;::::0;-1:-1:-1;;;35420:83:0;;22329:2:1;35420:83:0::1;::::0;::::1;22311:21:1::0;22368:2;22348:18;;;22341:30;22407:32;22387:18;;;22380:60;22457:18;;35420:83:0::1;22127:354:1::0;35420:83:0::1;35539:3;35522:7;:14;:20;35514:87;;;::::0;-1:-1:-1;;;35514:87:0;;22688:2:1;35514:87:0::1;::::0;::::1;22670:21:1::0;22727:2;22707:18;;;22700:30;22766:34;22746:18;;;22739:62;-1:-1:-1;;;22817:18:1;;;22810:52;22879:19;;35514:87:0::1;22486:418:1::0;35514:87:0::1;35714:9;35710:88;35729:19:::0;;::::1;35710:88;;;35791:4;35756:19;:32;35776:8;;35785:1;35776:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35756:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35756:32:0;:39;;-1:-1:-1;;35756:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35750:3;::::1;::::0;::::1;:::i;:::-;;;;35710:88;;;;35812:9;35808:80;35827:20:::0;;::::1;35808:80;;;35881:4;35855:9;:23;35865:9;;35875:1;35865:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35855:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35855:23:0;:30;;-1:-1:-1;;35855:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35849:3;::::1;::::0;::::1;:::i;:::-;;;;35808:80;;;;35902:9;35898:351;35921:7;:14;35917:1;:18;35898:351;;;35956:14;35973:7;35981:1;35973:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;35998:26:0;::::1;;::::0;;;:18:::1;:26:::0;;;;;;;:33;;-1:-1:-1;;35998:33:0::1;36027:4;35998:33;::::0;;35973:10;-1:-1:-1;36082:26:0::1;:15;36100:8;36082:26;:::i;:::-;-1:-1:-1::0;;;;;36046:33:0;::::1;;::::0;;;:25:::1;:33;::::0;;;;:62;;;;36162:16:::1;4985:2:::0;36162::::1;:16;:::i;:::-;36140:15;36156:1;36140:18;;;;;;;;:::i;:::-;;;;;;;:39;;;;:::i;:::-;36123:56;;36194:43;36210:10;36222:6;36230;36194:15;:43::i;:::-;35941:308;;35937:3;;;;;:::i;:::-;;;;35898:351;;;-1:-1:-1::0;36296:13:0::1;:20:::0;;-1:-1:-1;;36327:18:0;;;;;36377:12:::1;36356:18;:33:::0;;;36421:37:::1;::::0;36442:16;;36421:37:::1;:::i;:::-;36400:18;:58:::0;36474:16:::1;::::0;::::1;::::0;;;::::1;36548:9;;;;;;;;;-1:-1:-1::0;;;;;36548:9:0::1;-1:-1:-1::0;;;;;36548:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;36536:43:0::1;;36588:4;36595:9;;;;;;;;;-1:-1:-1::0;;;;;36595:9:0::1;-1:-1:-1::0;;;;;36595:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36536:76;::::0;-1:-1:-1;;;;;;36536:76:0::1;::::0;;;;;;-1:-1:-1;;;;;23139:15:1;;;36536:76:0::1;::::0;::::1;23121:34:1::0;23191:15;;23171:18;;;23164:43;23056:18;;36536:76:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36527:6;:85:::0;;-1:-1:-1;;;;;;36527:85:0::1;-1:-1:-1::0;;;;;36527:85:0;;;::::1;::::0;;::::1;::::0;;36623:49:::1;::::0;-1:-1:-1;36623:26:0::1;:49::i;:::-;36720:6;::::0;36683:51:::1;::::0;-1:-1:-1;;;;;36720:6:0::1;::::0;36683:28:::1;:51::i;:::-;36812:1;36788:21;:25;36780:73;;;::::0;-1:-1:-1;;;36780:73:0;;23420:2:1;36780:73:0::1;::::0;::::1;23402:21:1::0;23459:2;23439:18;;;23432:30;23498:34;23478:18;;;23471:62;-1:-1:-1;;;23549:18:1;;;23542:33;23592:19;;36780:73:0::1;23218:399:1::0;36780:73:0::1;36899:1;36872:24;36890:4;36872:9;:24::i;:::-;:28;36864:79;;;::::0;-1:-1:-1;;;36864:79:0;;23824:2:1;36864:79:0::1;::::0;::::1;23806:21:1::0;23863:2;23843:18;;;23836:30;23902:34;23882:18;;;23875:62;-1:-1:-1;;;23953:18:1;;;23946:36;23999:19;;36864:79:0::1;23622:402:1::0;36864:79:0::1;36988:9;::::0;36956:69:::1;::::0;36973:4:::1;::::0;-1:-1:-1;;;;;36988:9:0::1;37000:24;36973:4:::0;37000:9:::1;:24::i;36956:69::-;37036:9;::::0;-1:-1:-1;;;;;37036:9:0::1;:25;37069:21;37114:4;37134:24;37114:4:::0;37134:9:::1;:24::i;:::-;37173:1;37216::::0;37267:4:::1;37287:15;37036:277;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;37363:4:0::1;37346:14;:21:::0;;;37378:12:::1;:19:::0;;;37408:15:::1;:22:::0;;;37441:13:::1;:20:::0;-1:-1:-1;;;;;;;;35064:2405:0:o;23556:282::-;8676:6;;-1:-1:-1;;;;;8676:6:0;911:10;8676:22;8668:67;;;;-1:-1:-1;;;8668:67:0;;;;;;;:::i;:::-;23663:9:::1;23659:172;23678:19:::0;;::::1;23659:172;;;23753:8;23718:19;:32;23738:8;;23747:1;23738:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23718:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;23718:32:0;:43;;-1:-1:-1;;23718:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23797:8;;23806:1;23797:11;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23781:38:0::1;;23810:8;23781:38;;;;1596:14:1::0;1589:22;1571:41;;1559:2;1544:18;;1431:187;23781:38:0::1;;;;;;;;23699:3:::0;::::1;::::0;::::1;:::i;:::-;;;;23659:172;;42100:508:::0;42203:15;;-1:-1:-1;;;;;42203:15:0;42181:10;:38;42173:58;;;;-1:-1:-1;;;42173:58:0;;;;;;;:::i;:::-;42251:24;;;;42250:25;42242:87;;;;-1:-1:-1;;;42242:87:0;;25154:2:1;42242:87:0;;;25136:21:1;25193:2;25173:18;;;25166:30;25232:34;25212:18;;;25205:62;-1:-1:-1;;;25283:18:1;;;25276:47;25340:19;;42242:87:0;24952:413:1;42242:87:0;42366:3;42348:14;:21;;:43;;;;;42390:1;42373:14;:18;42348:43;42340:82;;;;-1:-1:-1;;;42340:82:0;;25572:2:1;42340:82:0;;;25554:21:1;25611:2;25591:18;;;25584:30;25650:28;25630:18;;;25623:56;25696:18;;42340:82:0;25370:350:1;42340:82:0;42462:15;42433:26;:44;42488:24;:31;;-1:-1:-1;;42488:31:0;42515:4;42488:31;;;42530:16;:33;;;42579:21;;;;42488:24;;42579:21;42100:508;:::o;23846:182::-;8676:6;;-1:-1:-1;;;;;8676:6:0;911:10;8676:22;8668:67;;;;-1:-1:-1;;;8668:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23931:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;23931:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23986:34;;1571:41:1;;;23986:34:0::1;::::0;1544:18:1;23986:34:0::1;;;;;;;23846:182:::0;;:::o;23151:397::-;8676:6;;-1:-1:-1;;;;;8676:6:0;911:10;8676:22;8668:67;;;;-1:-1:-1;;;8668:67:0;;;;;;;:::i;:::-;23267:15:::1;:30:::0;;;23308:16:::1;:32:::0;;;23351:11:::1;:22:::0;;;23365:8;23400:34:::1;23327:13:::0;23285:12;23400:34:::1;:::i;:::-;:48;;;;:::i;:::-;23384:13;:64:::0;23503:3:::1;23484:16;14136:5;23484:2;:16;:::i;:::-;:22;;;;:::i;:::-;23467:13;;:39;;23459:81;;;::::0;-1:-1:-1;;;23459:81:0;;25927:2:1;23459:81:0::1;::::0;::::1;25909:21:1::0;25966:2;25946:18;;;25939:30;26005:31;25985:18;;;25978:59;26054:18;;23459:81:0::1;25725:353:1::0;43459:279:0;43544:15;;-1:-1:-1;;;;;43544:15:0;43522:10;:38;43514:58;;;;-1:-1:-1;;;43514:58:0;;;;;;;:::i;:::-;43583:24;:32;;-1:-1:-1;;43583:32:0;;;43610:5;43626:16;:20;;;43657:26;:30;;;43703:27;;;;43610:5;43703:27;43459:279::o;21363:346::-;8676:6;;-1:-1:-1;;;;;8676:6:0;911:10;8676:22;8668:67;;;;-1:-1:-1;;;8668:67:0;;;;;;;:::i;:::-;21486:6:::1;21466:13;5091:12:::0;;;5003:108;21466:13:::1;:17;::::0;21482:1:::1;21466:17;:::i;:::-;:26;;;;:::i;:::-;21453:9;:39;;21445:105;;;::::0;-1:-1:-1;;;21445:105:0;;26285:2:1;21445:105:0::1;::::0;::::1;26267:21:1::0;26324:2;26304:18;;;26297:30;26363:34;26343:18;;;26336:62;-1:-1:-1;;;26414:18:1;;;26407:51;26475:19;;21445:105:0::1;26083:417:1::0;21445:105:0::1;21601:4;21581:13;5091:12:::0;;;5003:108;21581:13:::1;:17;::::0;21597:1:::1;21581:17;:::i;:::-;:24;;;;:::i;:::-;21568:9;:37;;21560:102;;;::::0;-1:-1:-1;;;21560:102:0;;26707:2:1;21560:102:0::1;::::0;::::1;26689:21:1::0;26746:2;26726:18;;;26719:30;26785:34;26765:18;;;26758:62;-1:-1:-1;;;26836:18:1;;;26829:50;26896:19;;21560:102:0::1;26505:416:1::0;21560:102:0::1;21672:18;:30:::0;21363:346::o;20697:300::-;8676:6;;-1:-1:-1;;;;;8676:6:0;911:10;8676:22;8668:67;;;;-1:-1:-1;;;8668:67:0;;;;;;;:::i;:::-;20820:16:::1;4985:2:::0;20820::::1;:16;:::i;:::-;20811:4;20791:13;5091:12:::0;;;5003:108;20791:13:::1;:17;::::0;20807:1:::1;20791:17;:::i;:::-;:24;;;;:::i;:::-;20790:47;;;;:::i;:::-;20780:6;:57;;20772:112;;;::::0;-1:-1:-1;;;20772:112:0;;27128:2:1;20772:112:0::1;::::0;::::1;27110:21:1::0;27167:2;27147:18;;;27140:30;27206:34;27186:18;;;27179:62;-1:-1:-1;;;27257:18:1;;;27250:40;27307:19;;20772:112:0::1;26926:406:1::0;20772:112:0::1;20921:16;4985:2:::0;20921::::1;:16;:::i;:::-;20911:27;::::0;:6;:27:::1;:::i;:::-;20895:13;:43:::0;;;20954:35:::1;::::0;160:25:1;;;20954:35:0::1;::::0;148:2:1;133:18;20954:35:0::1;14:177:1::0;40720:982:0;40841:15;;40795:4;;-1:-1:-1;;;;;40841:15:0;40819:10;:38;40811:58;;;;-1:-1:-1;;;40811:58:0;;;;;;;:::i;:::-;40929:19;;40906:20;;:42;;;;:::i;:::-;40888:15;:60;40880:106;;;;-1:-1:-1;;;40880:106:0;;27539:2:1;40880:106:0;;;27521:21:1;;;27558:18;;;27551:30;27617:34;27597:18;;;27590:62;27669:18;;40880:106:0;27337:356:1;40880:106:0;41016:4;41005:7;:15;;40997:70;;;;-1:-1:-1;;;40997:70:0;;27900:2:1;40997:70:0;;;27882:21:1;27939:2;27919:18;;;27912:30;27978:34;27958:18;;;27951:62;-1:-1:-1;;;28029:18:1;;;28022:40;28079:19;;40997:70:0;27698:406:1;40997:70:0;41101:15;41078:20;:38;41218:6;;41203:22;;-1:-1:-1;;;41203:22:0;;-1:-1:-1;;;;;41218:6:0;;;41203:22;;;913:51:1;41172:28:0;;41203:4;;:14;;886:18:1;;41203:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41172:53;-1:-1:-1;41276:20:0;41333:5;41299:31;41323:7;41172:53;41299:31;:::i;:::-;:39;;;;:::i;:::-;41276:62;-1:-1:-1;41432:16:0;;41428:102;;41480:6;;41464:54;;-1:-1:-1;;;;;41480:6:0;41496;41505:12;41464:15;:54::i;:::-;41643:6;;41661:11;;;-1:-1:-1;;;;;;41661:11:0;;;;-1:-1:-1;;;;;41643:6:0;;;;;;41661:9;;:11;;;;;41606:19;;41661:11;;;;;;;41606:19;41643:6;41661:11;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41690:4:0;;40720:982;-1:-1:-1;;;;;;;;40720:982:0:o;20280:98::-;8676:6;;-1:-1:-1;;;;;8676:6:0;911:10;8676:22;8668:67;;;;-1:-1:-1;;;8668:67:0;;;;;;;:::i;:::-;20342:20:::1;:28:::0;;-1:-1:-1;;20342:28:0::1;::::0;;20280:98::o;13022:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13022:28:0;;-1:-1:-1;13022:28:0;:::o;8921:244::-;8676:6;;-1:-1:-1;;;;;8676:6:0;911:10;8676:22;8668:67;;;;-1:-1:-1;;;8668:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9010:22:0;::::1;9002:73;;;::::0;-1:-1:-1;;;9002:73:0;;28311:2:1;9002:73:0::1;::::0;::::1;28293:21:1::0;28350:2;28330:18;;;28323:30;28389:34;28369:18;;;28362:62;-1:-1:-1;;;28440:18:1;;;28433:36;28486:19;;9002:73:0::1;28109:402:1::0;9002:73:0::1;9112:6;::::0;9091:38:::1;::::0;-1:-1:-1;;;;;9091:38:0;;::::1;::::0;9112:6:::1;::::0;9091:38:::1;::::0;9112:6:::1;::::0;9091:38:::1;9140:6;:17:::0;;-1:-1:-1;;;;;;9140:17:0::1;-1:-1:-1::0;;;;;9140:17:0;;;::::1;::::0;;;::::1;::::0;;8921:244::o;33452:219::-;33530:15;;-1:-1:-1;;;;;33530:15:0;33508:10;:38;33500:58;;;;-1:-1:-1;;;33500:58:0;;;;;;;:::i;:::-;33605;;33569:12;;33613:10;;33637:21;;33569:12;33605:58;33569:12;33605:58;33637:21;33613:10;33605:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19465:226;19537:15;;-1:-1:-1;;;;;19537:15:0;19515:10;:38;19507:58;;;;-1:-1:-1;;;19507:58:0;;;;;;;:::i;:::-;19593:2;19576:14;:19;;;19606:12;:17;;;19634:15;:20;;;19665:13;:18;19465:226::o;39255:1457::-;39361:15;;-1:-1:-1;;;;;39361:15:0;39339:10;:38;39331:58;;;;-1:-1:-1;;;39331:58:0;;;;;;;:::i;:::-;39418:4;39408:7;:14;;39400:80;;;;-1:-1:-1;;;39400:80:0;;28928:2:1;39400:80:0;;;28910:21:1;28967:2;28947:18;;;28940:30;29006:34;28986:18;;;28979:62;-1:-1:-1;;;29057:18:1;;;29050:51;29118:19;;39400:80:0;28726:417:1;39400:80:0;39541:19;;39523:37;;:15;:37;:::i;:::-;39499:20;;:61;;39491:87;;;;-1:-1:-1;;;39491:87:0;;29483:2:1;39491:87:0;;;29465:21:1;29522:2;29502:18;;;29495:30;-1:-1:-1;;;29541:18:1;;;29534:43;29594:18;;39491:87:0;29281:337:1;39491:87:0;39612:15;39589:20;:38;39665:6;;39658:39;;-1:-1:-1;;;39658:39:0;;39691:4;39658:39;;;913:51:1;39638:17:0;;-1:-1:-1;;;;;39665:6:0;;39658:24;;886:18:1;;39658:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39638:59;;39708:20;39731:24;39749:4;39731:9;:24::i;:::-;39708:47;-1:-1:-1;39766:16:0;39807:5;39785:19;39797:7;39785:9;:19;:::i;:::-;:27;;;;:::i;:::-;39959:6;;39983:9;;39952:52;;-1:-1:-1;;;39952:52:0;;-1:-1:-1;;;;;39983:9:0;;;39952:52;;;18915:51:1;18982:18;;;18975:34;;;39766:46:0;;-1:-1:-1;39851:21:0;;39959:6;;;39952:22;;18888:18:1;;39952:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;40050:9:0;;:234;;-1:-1:-1;;;40050:234:0;;-1:-1:-1;;;;;40050:9:0;;;;:28;;:234;;40101:4;;40121:8;;40050:9;;;;40101:4;;40258:15;;40050:234;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40297:25;40352:12;40325:24;40343:4;40325:9;:24::i;:::-;:39;;;;:::i;:::-;40297:67;-1:-1:-1;40378:21:0;;40375:118;;40415:66;40439:4;40454:6;40463:17;40415:15;:66::i;:::-;40505:23;40531:41;40555:17;40531:21;:41;:::i;:::-;40505:67;-1:-1:-1;40588:19:0;;40585:80;;40623:30;40637:15;40623:13;:30::i;:::-;40682:22;;40695:8;;40682:22;;;;;39320:1392;;;;;;39255:1457;:::o;7838:380::-;-1:-1:-1;;;;;7974:19:0;;7966:68;;;;-1:-1:-1;;;7966:68:0;;30687:2:1;7966:68:0;;;30669:21:1;30726:2;30706:18;;;30699:30;30765:34;30745:18;;;30738:62;-1:-1:-1;;;30816:18:1;;;30809:34;30860:19;;7966:68:0;30485:400:1;7966:68:0;-1:-1:-1;;;;;8053:21:0;;8045:68;;;;-1:-1:-1;;;8045:68:0;;31092:2:1;8045:68:0;;;31074:21:1;31131:2;31111:18;;;31104:30;31170:34;31150:18;;;31143:62;-1:-1:-1;;;31221:18:1;;;31214:32;31263:19;;8045:68:0;30890:398:1;8045:68:0;-1:-1:-1;;;;;8126:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8178:32;;160:25:1;;;8178:32:0;;133:18:1;8178:32:0;;;;;;;7838:380;;;:::o;24036:6248::-;-1:-1:-1;;;;;24134:18:0;;24126:68;;;;-1:-1:-1;;;24126:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24213:16:0;;24205:64;;;;-1:-1:-1;;;24205:64:0;;;;;;;:::i;:::-;24297:1;24288:6;:10;24280:52;;;;-1:-1:-1;;;24280:52:0;;32305:2:1;24280:52:0;;;32287:21:1;32344:2;32324:18;;;32317:30;32383:31;32363:18;;;32356:59;32432:18;;24280:52:0;32103:353:1;24280:52:0;24357:13;;;;;;;24353:132;;-1:-1:-1;;;;;24394:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;24423:23:0;;;;;;:19;:23;;;;;;;;24394:52;24386:87;;;;-1:-1:-1;;;24386:87:0;;32663:2:1;24386:87:0;;;32645:21:1;32702:2;32682:18;;;32675:30;-1:-1:-1;;;32721:18:1;;;32714:52;32783:18;;24386:87:0;32461:346:1;24386:87:0;30386:18;;30371:12;:33;24500:26;:43;;;;-1:-1:-1;24530:13:0;;;;;;;24500:43;24497:235;;;-1:-1:-1;;;;;24569:15:0;;;;;;:9;:15;;;;;;;;24568:16;:34;;;;-1:-1:-1;;;;;;24589:13:0;;;;;;:9;:13;;;;;;;;24588:14;24568:34;24567:53;;;-1:-1:-1;8614:6:0;;-1:-1:-1;;;;;24607:13:0;;;8614:6;;24607:13;24567:53;:78;;;-1:-1:-1;;;;;;24624:21:0;;24638:6;24624:21;24567:78;24559:161;;;;-1:-1:-1;;;24559:161:0;;33014:2:1;24559:161:0;;;32996:21:1;33053:2;33033:18;;;33026:30;33092:34;33072:18;;;33065:62;33163:34;33143:18;;;33136:62;-1:-1:-1;;;33214:19:1;;;33207:37;33261:19;;24559:161:0;32812:474:1;24559:161:0;-1:-1:-1;;;;;24747:24:0;;;;;;:18;:24;;;;;;;;24744:610;;;-1:-1:-1;;;;;24790:29:0;;;;;;:25;:29;;;;;;;;24787:556;;;-1:-1:-1;;;;;24897:31:0;;;;;;:25;:31;;;;;;24932:15;-1:-1:-1;24897:50:0;24889:78;;;;-1:-1:-1;;;24889:78:0;;33493:2:1;24889:78:0;;;33475:21:1;33532:2;33512:18;;;33505:30;-1:-1:-1;;;33551:18:1;;;33544:45;33606:18;;24889:78:0;33291:339:1;24889:78:0;25004:23;:21;:23::i;:::-;24994:6;:33;;24986:98;;;;-1:-1:-1;;;24986:98:0;;33837:2:1;24986:98:0;;;33819:21:1;33876:2;33856:18;;;33849:30;33915:34;33895:18;;;33888:62;-1:-1:-1;;;33966:18:1;;;33959:50;34026:19;;24986:98:0;33635:416:1;24986:98:0;25137:26;:15;25155:8;25137:26;:::i;:::-;-1:-1:-1;;;;;25103:31:0;;;;;;:25;:31;;;;;:60;24787:556;;;-1:-1:-1;;;;;25189:23:0;;;;;;:19;:23;;;;;;;;25185:158;;25232:95;;-1:-1:-1;;;25232:95:0;;34258:2:1;25232:95:0;;;34240:21:1;34297:2;34277:18;;;34270:30;34336:34;34316:18;;;34309:62;34407:34;34387:18;;;34380:62;-1:-1:-1;;;34458:19:1;;;34451:52;34520:19;;25232:95:0;34056:489:1;25185:158:0;25377:14;;;;;;;25374:1662;;;8614:6;;-1:-1:-1;;;;;25411:15:0;;;8614:6;;25411:15;;;;:32;;-1:-1:-1;8614:6:0;;-1:-1:-1;;;;;25430:13:0;;;8614:6;;25430:13;;25411:32;:52;;;;-1:-1:-1;;;;;;25447:16:0;;;;25411:52;:77;;;;-1:-1:-1;;;;;;25467:21:0;;25481:6;25467:21;;25411:77;:107;;;;-1:-1:-1;;;;;;25493:25:0;;;;;;:19;:25;;;;;;;;25492:26;25411:107;:135;;;;-1:-1:-1;;;;;;25523:23:0;;;;;;:19;:23;;;;;;;;25522:24;25411:135;25407:1618;;;25722:20;;;;25718:506;;;25784:9;;-1:-1:-1;;;;;25770:24:0;;;25784:9;;25770:24;;;;:49;;-1:-1:-1;25812:6:0;;-1:-1:-1;;;;;25798:21:0;;;25812:6;;25798:21;;25770:49;25766:439;;;25897:16;25912:1;25897:12;:16;:::i;:::-;25884:9;25855:39;;;;:28;:39;;;;;;:58;:113;;;;-1:-1:-1;25952:16:0;25967:1;25952:12;:16;:::i;:::-;-1:-1:-1;;;;;25917:32:0;;;;;;:28;:32;;;;;;:51;25855:113;25847:179;;;;-1:-1:-1;;;25847:179:0;;34752:2:1;25847:179:0;;;34734:21:1;34791:2;34771:18;;;34764:30;34830:34;34810:18;;;34803:62;-1:-1:-1;;;34881:18:1;;;34874:51;34942:19;;25847:179:0;34550:417:1;25847:179:0;26082:9;26053:39;;;;:28;:39;;;;;;26095:12;26053:54;;;;-1:-1:-1;;;;;26134:32:0;;;;;;:47;25766:439;-1:-1:-1;;;;;26293:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;26329:35:0;;;;;;:31;:35;;;;;;;;26328:36;26293:71;26289:721;;;26407:12;;26397:6;:22;;26389:75;;;;-1:-1:-1;;;26389:75:0;;35174:2:1;26389:75:0;;;35156:21:1;35213:2;35193:18;;;35186:30;35252:34;35232:18;;;35225:62;-1:-1:-1;;;35303:18:1;;;35296:38;35351:19;;26389:75:0;34972:404:1;26389:75:0;26521:9;;26504:13;26514:2;26504:9;:13::i;:::-;26495:22;;:6;:22;:::i;:::-;:35;;26487:72;;;;-1:-1:-1;;;26487:72:0;;35583:2:1;26487:72:0;;;35565:21:1;35622:2;35602:18;;;35595:30;-1:-1:-1;;;35641:18:1;;;35634:54;35705:18;;26487:72:0;35381:348:1;26487:72:0;26289:721;;;-1:-1:-1;;;;;26636:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;26670:37:0;;;;;;:31;:37;;;;;;;;26669:38;26636:71;26632:378;;;26750:13;;26740:6;:23;;26732:78;;;;-1:-1:-1;;;26732:78:0;;35936:2:1;26732:78:0;;;35918:21:1;35975:2;35955:18;;;35948:30;36014:34;35994:18;;;35987:62;-1:-1:-1;;;36065:18:1;;;36058:40;36115:19;;26732:78:0;35734:406:1;26632:378:0;-1:-1:-1;;;;;26858:35:0;;;;;;:31;:35;;;;;;;;26853:157;;26952:9;;26935:13;26945:2;26935:9;:13::i;:::-;26926:22;;:6;:22;:::i;:::-;:35;;26918:72;;;;-1:-1:-1;;;26918:72:0;;35583:2:1;26918:72:0;;;35565:21:1;35622:2;35602:18;;;35595:30;-1:-1:-1;;;35641:18:1;;;35634:54;35705:18;;26918:72:0;35381:348:1;26918:72:0;27048:28;27079:24;27097:4;27079:9;:24::i;:::-;27163:18;;27048:55;;-1:-1:-1;27139:42:0;;;;;;;27197:22;;-1:-1:-1;27208:11:0;;;;;;;27197:22;:35;;;;-1:-1:-1;27224:8:0;;;;27223:9;27197:35;:71;;;;-1:-1:-1;;;;;;27237:31:0;;;;;;:25;:31;;;;;;;;27236:32;27197:71;:101;;;;-1:-1:-1;;;;;;27273:25:0;;;;;;:19;:25;;;;;;;;27272:26;27197:101;:129;;;;-1:-1:-1;;;;;;27303:23:0;;;;;;:19;:23;;;;;;;;27302:24;27197:129;27194:232;;;27343:8;:15;;-1:-1:-1;;27343:15:0;27354:4;27343:15;;;27373:10;:8;:10::i;:::-;27398:8;:16;;-1:-1:-1;;27398:16:0;;;27194:232;27442:8;;;;27441:9;:42;;;;-1:-1:-1;;;;;;27454:29:0;;;;;;:25;:29;;;;;;;;27441:42;:59;;;;-1:-1:-1;27487:13:0;;;;27441:59;:114;;;;;27540:15;;27523:14;;:32;;;;:::i;:::-;27504:15;:51;;27441:114;:144;;;;-1:-1:-1;;;;;;27560:25:0;;;;;;:19;:25;;;;;;;;27559:26;27441:144;27438:204;;;27601:29;:27;:29::i;:::-;-1:-1:-1;;;;;27772:25:0;;27654:12;27772:25;;;:19;:25;;;;;;27669:4;;27772:25;;;:52;;-1:-1:-1;;;;;;27801:23:0;;;;;;:19;:23;;;;;;;;27772:52;27769:99;;;-1:-1:-1;27851:5:0;27769:99;27888:12;27915:20;28029:7;28026:2205;;;30386:18;;30371:12;:33;28091:60;;;;-1:-1:-1;;;;;;28120:31:0;;;;;;:25;:31;;;;;;;;28091:60;:94;;;;-1:-1:-1;;;;;;28156:29:0;;;;;;:25;:29;;;;;;;;28155:30;28091:94;:122;;;;-1:-1:-1;;;;;;28190:23:0;;;;;;:19;:23;;;;;;;;28189:24;28091:122;:142;;;;;28232:1;28217:12;;:16;28091:142;28088:1832;;;30386:18;;30371:12;:33;28271:330;;28580:1;28564:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;28271:330:0;-1:-1:-1;;;;;28625:13:0;;;;;;:9;:13;;;;;;;;28621:210;;-1:-1:-1;;;;;28662:13:0;;;;;;:9;:13;;;;;:20;;-1:-1:-1;;28662:20:0;28678:4;28662:20;;;;;;28705:10;:15;;28678:4;;28705:10;;:15;;28678:4;;28705:15;:::i;:::-;;;;-1:-1:-1;;28743:11:0;:20;;;;;;;-1:-1:-1;28743:20:0;;;;;;;;-1:-1:-1;;;;;;28743:20:0;-1:-1:-1;;;;;28743:20:0;;;;;;;;28791;;913:51:1;;;28791:20:0;;901:2:1;886:18;28791:20:0;;;;;;;28621:210;14136:5;28867:12;;28858:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;28851:42;;28956:12;;28938:15;;28931:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;28909:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;29032:12:0;;29015:14;;29008:21;;:4;:21;:::i;:::-;:36;;;;:::i;:::-;28987:17;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;29098:12:0;;29085:10;;29078:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;29063:47;;28088:1832;;;-1:-1:-1;;;;;29175:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;29224:1;29208:13;;:17;29175:50;29171:749;;;14136:5;29261:13;;29252:6;:22;;;;:::i;:::-;:36;;;;:::i;:::-;29245:43;;29355:13;;29336:16;;29329:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;29307:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;29433:13:0;;29415:15;;29408:22;;:4;:22;:::i;:::-;:38;;;;:::i;:::-;29387:17;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;29501:12:0;;29487:11;;29480:18;;:4;:18;:::i;29171:749::-;-1:-1:-1;;;;;29576:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;29626:1;29611:12;;:16;29576:51;29573:347;;;14136:5;29661:12;;29652:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;29645:42;;29750:12;;29732:15;;29725:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;29703:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;29826:12:0;;29809:14;;29802:21;;:4;:21;:::i;:::-;:36;;;;:::i;:::-;29781:17;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;29892:12:0;;29879:10;;29872:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;29857:47;;29573:347;29951:8;;29948:235;;29983:42;29999:4;30013;30020;29983:15;:42::i;:::-;30047:16;;30044:124;;30087:61;30111:4;30126:6;30135:12;30087:15;:61::i;:::-;30205:14;30215:4;30205:14;;:::i;:::-;;;28026:2205;30243:33;30259:4;30265:2;30269:6;30243:15;:33::i;:::-;24115:6169;;;;;24036:6248;;;:::o;31520:1413::-;31561:23;31587:24;31605:4;31587:9;:24::i;:::-;31697:18;;31755:17;;31561:50;;-1:-1:-1;31697:18:0;31667:27;31813:38;31755:17;31697:18;31813:38;:::i;:::-;31785:66;-1:-1:-1;31875:20:0;;;:46;;-1:-1:-1;31899:22:0;;31875:46;31872:60;;;31924:7;;;;31520:1413::o;31872:60::-;31965:18;;;:23;;;:::i;:::-;31947:15;:41;31944:113;;;32022:18;;;:23;;;:::i;:::-;32004:41;;31944:113;32069:12;32151:23;32236:1;32216:17;32195:18;;32177:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;32151:86;-1:-1:-1;32258:51:0;32275:33;32151:86;32275:15;:33;:::i;:::-;32258:16;:51::i;:::-;32513:18;;32352:21;;;;32331:18;;32513:20;;32532:1;;32513:20;:::i;:::-;32492:42;;:17;:42;:::i;:::-;32471:17;;32458:30;;:10;:30;:::i;:::-;:77;;;;:::i;:::-;32433:102;-1:-1:-1;32548:33:0;32433:102;32548:33;;:::i;:::-;;;32628:19;32606:18;;:41;;;;;;;:::i;:::-;;;;;;;;32679:18;32658:17;;:39;;;;;;;:::i;:::-;;;;-1:-1:-1;;32721:19:0;;;;;:42;;;32762:1;32744:15;:19;32721:42;32718:119;;;32779:46;32792:15;32809;32779:12;:46::i;:::-;32870:15;;32862:63;;-1:-1:-1;;;;;32870:15:0;;;;32899:21;;32862:63;;;;32899:21;32870:15;32862:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;31520:1413:0:o;22510:236::-;-1:-1:-1;;;;;22593:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;22593:39:0;;;;;;;22643;22593:31;:39;22643:26;:39::i;6917:614::-;-1:-1:-1;;;;;7057:20:0;;7049:70;;;;-1:-1:-1;;;7049:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7138:23:0;;7130:71;;;;-1:-1:-1;;;7130:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7238:17:0;;7214:21;7238:17;;;;;;;;;;;7274:23;;;;7266:74;;;;-1:-1:-1;;;7266:74:0;;36347:2:1;7266:74:0;;;36329:21:1;36386:2;36366:18;;;36359:30;36425:34;36405:18;;;36398:62;-1:-1:-1;;;36476:18:1;;;36469:36;36522:19;;7266:74:0;36145:402:1;7266:74:0;-1:-1:-1;;;;;7376:17:0;;;:9;:17;;;;;;;;;;;7396:22;;;7376:42;;7440:20;;;;;;;;:30;;7412:6;;7376:9;7440:30;;7412:6;;7440:30;:::i;:::-;;;;;;;;7505:9;-1:-1:-1;;;;;7488:35:0;7497:6;-1:-1:-1;;;;;7488:35:0;;7516:6;7488:35;;;;160:25:1;;148:2;133:18;;14:177;7488:35:0;;;;;;;;7038:493;6917:614;;;:::o;21721:207::-;-1:-1:-1;;;;;21809:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;21809:52:0;;;;;;;;;;21877:43;;36720:51:1;;;36787:18;;;36780:50;21877:43:0;;36693:18:1;21877:43:0;;;;;;;21721:207;;:::o;41710:382::-;41798:16;;;41812:1;41798:16;;;;;;;;41774:21;;41798:16;;;;;;;;-1:-1:-1;;41835:9:0;;:16;;;-1:-1:-1;;;41835:16:0;;;;41774:40;;-1:-1:-1;;;;;;41835:9:0;;;;:14;;-1:-1:-1;41835:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41825:4;41830:1;41825:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;41825:26:0;;;-1:-1:-1;;;;;41825:26:0;;;;;41880:4;41862;41867:1;41862:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;41862:23:0;;;:7;;;;;;;;;:23;41898:9;;:186;;-1:-1:-1;;;41898:186:0;;:9;;;:60;;41966:11;;41898:186;;:9;;42009:4;;42036:6;;42058:15;;41898:186;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41763:329;41710:382;:::o;37995:1252::-;38081:15;38064:14;:32;;;38117:20;:38;38193:6;;38186:39;;-1:-1:-1;;;38186:39:0;;38219:4;38186:39;;;913:51:1;-1:-1:-1;;;;;;;38193:6:0;;38186:24;;886:18:1;;38186:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38166:59;;38236:20;38259:24;38277:4;38259:9;:24::i;:::-;38236:47;;38294:16;38344:5;38325:16;;38313:9;:28;;;;:::i;:::-;:36;;;;:::i;:::-;38496:6;;38520:9;;38489:52;;-1:-1:-1;;;38489:52:0;;-1:-1:-1;;;;;38520:9:0;;;38489:52;;;18915:51:1;18982:18;;;18975:34;;;38294:55:0;;-1:-1:-1;38388:21:0;;38496:6;;;38489:22;;18888:18:1;;38489:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;38587:9:0;;:234;;-1:-1:-1;;;38587:234:0;;-1:-1:-1;;;;;38587:9:0;;;;:28;;:234;;38638:4;;38658:8;;38587:9;;;;38638:4;;38795:15;;38587:234;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38834:25;38889:12;38862:24;38880:4;38862:9;:24::i;:::-;:39;;;;:::i;:::-;38834:67;-1:-1:-1;38915:21:0;;38912:118;;38952:66;38976:4;38991:6;39000:17;38952:15;:66::i;:::-;39042:23;39068:41;39092:17;39068:21;:41;:::i;:::-;39042:67;-1:-1:-1;39125:19:0;;39122:80;;39160:30;39174:15;39160:13;:30::i;:::-;39219:20;;39230:8;;39219:20;;;;;38043:1204;;;;;;37995:1252::o;30420:573::-;30572:16;;;30586:1;30572:16;;;;;;;;30548:21;;30572:16;;;;;;;;;;-1:-1:-1;30572:16:0;30548:40;;30617:4;30599;30604:1;30599:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30599:23:0;;;:7;;;;;;;;;;:23;;;;30643:9;;:16;;;-1:-1:-1;;;30643:16:0;;;;:9;;;;;:14;;:16;;;;;30599:7;;30643:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30633:4;30638:1;30633:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30633:26:0;;;:7;;;;;;;;;:26;30704:9;;30672:56;;30689:4;;30704:9;30716:11;30672:8;:56::i;:::-;30767:9;;:218;;-1:-1:-1;;;30767:218:0;;-1:-1:-1;;;;;30767:9:0;;;;:60;;:218;;30842:11;;30767:9;;30912:4;;30939;;30959:15;;30767:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30475:518;30420:573;:::o;31005:507::-;31185:9;;31153:56;;31170:4;;-1:-1:-1;;;;;31185:9:0;31197:11;31153:8;:56::i;:::-;31252:9;;:252;;-1:-1:-1;;;31252:252:0;;-1:-1:-1;;;;;31252:9:0;;;;:25;;31285:9;;31252:252;;31318:4;;31338:11;;31252:9;;;;31318:4;;31478:15;;31252:252;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31005: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:367::-;4587:8;4597:6;4651:3;4644:4;4636:6;4632:17;4628:27;4618:55;;4669:1;4666;4659:12;4618:55;-1:-1:-1;4692:20:1;;4735:18;4724:30;;4721:50;;;4767:1;4764;4757:12;4721:50;4804:4;4796:6;4792:17;4780:29;;4864:3;4857:4;4847:6;4844:1;4840:14;4832:6;4828:27;4824:38;4821:47;4818:67;;;4881:1;4878;4871:12;4818:67;4524:367;;;;;:::o;4896:566::-;4988:6;4996;5004;5057:2;5045:9;5036:7;5032:23;5028:32;5025:52;;;5073:1;5070;5063:12;5025:52;5113:9;5100:23;5146:18;5138:6;5135:30;5132:50;;;5178:1;5175;5168:12;5132:50;5217:70;5279:7;5270:6;5259:9;5255:22;5217:70;:::i;:::-;5306:8;;-1:-1:-1;5191:96:1;-1:-1:-1;;5391:2:1;5376:18;;5363:32;5404:28;5363:32;5404:28;:::i;5467:461::-;5520:3;5558:5;5552:12;5585:6;5580:3;5573:19;5611:4;5640:2;5635:3;5631:12;5624:19;;5677:2;5670:5;5666:14;5698:1;5708:195;5722:6;5719:1;5716:13;5708:195;;;5787:13;;-1:-1:-1;;;;;5783:39:1;5771:52;;5843:12;;;;5878:15;;;;5819:1;5737:9;5708:195;;;-1:-1:-1;5919:3:1;;5467:461;-1:-1:-1;;;;;5467:461:1:o;5933:261::-;6112:2;6101:9;6094:21;6075:4;6132:56;6184:2;6173:9;6169:18;6161:6;6132:56;:::i;6199:127::-;6260:10;6255:3;6251:20;6248:1;6241:31;6291:4;6288:1;6281:15;6315:4;6312:1;6305:15;6331:275;6402:2;6396:9;6467:2;6448:13;;-1:-1:-1;;6444:27:1;6432:40;;6502:18;6487:34;;6523:22;;;6484:62;6481:88;;;6549:18;;:::i;:::-;6585:2;6578:22;6331:275;;-1:-1:-1;6331:275:1:o;6611:183::-;6671:4;6704:18;6696:6;6693:30;6690:56;;;6726:18;;:::i;:::-;-1:-1:-1;6771:1:1;6767:14;6783:4;6763:25;;6611:183::o;6799:662::-;6853:5;6906:3;6899:4;6891:6;6887:17;6883:27;6873:55;;6924:1;6921;6914:12;6873:55;6960:6;6947:20;6986:4;7010:60;7026:43;7066:2;7026:43;:::i;:::-;7010:60;:::i;:::-;7104:15;;;7190:1;7186:10;;;;7174:23;;7170:32;;;7135:12;;;;7214:15;;;7211:35;;;7242:1;7239;7232:12;7211:35;7278:2;7270:6;7266:15;7290:142;7306:6;7301:3;7298:15;7290:142;;;7372:17;;7360:30;;7410:12;;;;7323;;7290:142;;;-1:-1:-1;7450:5:1;6799:662;-1:-1:-1;;;;;;6799:662:1:o;7466:1915::-;7665:6;7673;7681;7689;7697;7705;7713;7766:3;7754:9;7745:7;7741:23;7737:33;7734:53;;;7783:1;7780;7773:12;7734:53;7823:9;7810:23;7852:18;7893:2;7885:6;7882:14;7879:34;;;7909:1;7906;7899:12;7879:34;7947:6;7936:9;7932:22;7922:32;;7992:7;7985:4;7981:2;7977:13;7973:27;7963:55;;8014:1;8011;8004:12;7963:55;8050:2;8037:16;8072:4;8096:60;8112:43;8152:2;8112:43;:::i;8096:60::-;8190:15;;;8272:1;8268:10;;;;8260:19;;8256:28;;;8221:12;;;;8296:19;;;8293:39;;;8328:1;8325;8318:12;8293:39;8352:11;;;;8372:217;8388:6;8383:3;8380:15;8372:217;;;8468:3;8455:17;8485:31;8510:5;8485:31;:::i;:::-;8529:18;;8405:12;;;;8567;;;;8372:217;;;8608:5;-1:-1:-1;;8651:18:1;;8638:32;;-1:-1:-1;;8682:16:1;;;8679:36;;;8711:1;8708;8701:12;8679:36;8734:63;8789:7;8778:8;8767:9;8763:24;8734:63;:::i;:::-;8724:73;;8844:2;8833:9;8829:18;8816:32;8806:42;;8901:2;8890:9;8886:18;8873:32;8857:48;;8930:2;8920:8;8917:16;8914:36;;;8946:1;8943;8936:12;8914:36;8985:72;9049:7;9038:8;9027:9;9023:24;8985:72;:::i;:::-;9076:8;;-1:-1:-1;8959:98:1;-1:-1:-1;9164:3:1;9149:19;;9136:33;;-1:-1:-1;9181:16:1;;;9178:36;;;9210:1;9207;9200:12;9178:36;;9249:72;9313:7;9302:8;9291:9;9287:24;9249:72;:::i;:::-;7466:1915;;;;-1:-1:-1;7466:1915:1;;-1:-1:-1;7466:1915:1;;;;9223:98;;-1:-1:-1;;;7466:1915:1:o;9386:380::-;9465:1;9461:12;;;;9508;;;9529:61;;9583:4;9575:6;9571:17;9561:27;;9529:61;9636:2;9628:6;9625:14;9605:18;9602:38;9599:161;;9682:10;9677:3;9673:20;9670:1;9663:31;9717:4;9714:1;9707:15;9745:4;9742:1;9735:15;9599:161;;9386:380;;;:::o;9771:356::-;9973:2;9955:21;;;9992:18;;;9985:30;10051:34;10046:2;10031:18;;10024:62;10118:2;10103:18;;9771:356::o;10903:127::-;10964:10;10959:3;10955:20;10952:1;10945:31;10995:4;10992:1;10985:15;11019:4;11016:1;11009:15;11035:168;11108:9;;;11139;;11156:15;;;11150:22;;11136:37;11126:71;;11177:18;;:::i;11208:422::-;11297:1;11340:5;11297:1;11354:270;11375:7;11365:8;11362:21;11354:270;;;11434:4;11430:1;11426:6;11422:17;11416:4;11413:27;11410:53;;;11443:18;;:::i;:::-;11493:7;11483:8;11479:22;11476:55;;;11513:16;;;;11476:55;11592:22;;;;11552:15;;;;11354:270;;;11358:3;11208:422;;;;;:::o;11635:806::-;11684:5;11714:8;11704:80;;-1:-1:-1;11755:1:1;11769:5;;11704:80;11803:4;11793:76;;-1:-1:-1;11840:1:1;11854:5;;11793:76;11885:4;11903:1;11898:59;;;;11971:1;11966:130;;;;11878:218;;11898:59;11928:1;11919:10;;11942:5;;;11966:130;12003:3;11993:8;11990:17;11987:43;;;12010:18;;:::i;:::-;-1:-1:-1;;12066:1:1;12052:16;;12081:5;;11878:218;;12180:2;12170:8;12167:16;12161:3;12155:4;12152:13;12148:36;12142:2;12132:8;12129:16;12124:2;12118:4;12115:12;12111:35;12108:77;12105:159;;;-1:-1:-1;12217:19:1;;;12249:5;;12105:159;12296:34;12321:8;12315:4;12296:34;:::i;:::-;12366:6;12362:1;12358:6;12354:19;12345:7;12342:32;12339:58;;;12377:18;;:::i;:::-;12415:20;;11635:806;-1:-1:-1;;;11635:806:1:o;12446:140::-;12504:5;12533:47;12574:4;12564:8;12560:19;12554:4;12533:47;:::i;12591:217::-;12631:1;12657;12647:132;;12701:10;12696:3;12692:20;12689:1;12682:31;12736:4;12733:1;12726:15;12764:4;12761:1;12754:15;12647:132;-1:-1:-1;12793:9:1;;12591:217::o;14042:125::-;14107:9;;;14128:10;;;14125:36;;;14141:18;;:::i;14605:330::-;14807:2;14789:21;;;14846:1;14826:18;;;14819:29;-1:-1:-1;;;14879:2:1;14864:18;;14857:37;14926:2;14911:18;;14605:330::o;15345:251::-;15415:6;15468:2;15456:9;15447:7;15443:23;15439:32;15436:52;;;15484:1;15481;15474:12;15436:52;15516:9;15510:16;15535:31;15560:5;15535:31;:::i;15601:127::-;15662:10;15657:3;15653:20;15650:1;15643:31;15693:4;15690:1;15683:15;15717:4;15714:1;15707:15;15733:332;15940:6;15929:9;15922:25;15983:2;15978;15967:9;15963:18;15956:30;15903:4;16003:56;16055:2;16044:9;16040:18;16032:6;16003:56;:::i;:::-;15995:64;15733:332;-1:-1:-1;;;;15733:332:1:o;16070:881::-;16165:6;16196:2;16239;16227:9;16218:7;16214:23;16210:32;16207:52;;;16255:1;16252;16245:12;16207:52;16288:9;16282:16;16321:18;16313:6;16310:30;16307:50;;;16353:1;16350;16343:12;16307:50;16376:22;;16429:4;16421:13;;16417:27;-1:-1:-1;16407:55:1;;16458:1;16455;16448:12;16407:55;16487:2;16481:9;16510:60;16526:43;16566:2;16526:43;:::i;16510:60::-;16604:15;;;16686:1;16682:10;;;;16674:19;;16670:28;;;16635:12;;;;16710:19;;;16707:39;;;16742:1;16739;16732:12;16707:39;16766:11;;;;16786:135;16802:6;16797:3;16794:15;16786:135;;;16868:10;;16856:23;;16819:12;;;;16899;;;;16786:135;;;16940:5;16070:881;-1:-1:-1;;;;;;;16070:881:1:o;18552:184::-;18622:6;18675:2;18663:9;18654:7;18650:23;18646:32;18643:52;;;18691:1;18688;18681:12;18643:52;-1:-1:-1;18714:16:1;;18552:184;-1:-1:-1;18552:184:1:o;19020:245::-;19087:6;19140:2;19128:9;19119:7;19115:23;19111:32;19108:52;;;19156:1;19153;19146:12;19108:52;19188:9;19182:16;19207:28;19229:5;19207:28;:::i;19980:403::-;20182:2;20164:21;;;20221:2;20201:18;;;20194:30;20260:34;20255:2;20240:18;;20233:62;-1:-1:-1;;;20326:2:1;20311:18;;20304:37;20373:3;20358:19;;19980:403::o;20743:135::-;20782:3;20803:17;;;20800:43;;20823:18;;:::i;:::-;-1:-1:-1;20870:1:1;20859:13;;20743:135::o;24029:607::-;-1:-1:-1;;;;;24388:15:1;;;24370:34;;24435:2;24420:18;;24413:34;;;;24478:2;24463:18;;24456:34;;;;24521:2;24506:18;;24499:34;;;;24570:15;;;24564:3;24549:19;;24542:44;24350:3;24602:19;;24595:35;;;;24319:3;24304:19;;24029:607::o;24641:306::-;24729:6;24737;24745;24798:2;24786:9;24777:7;24773:23;24769:32;24766:52;;;24814:1;24811;24804:12;24766:52;24843:9;24837:16;24827:26;;24893:2;24882:9;24878:18;24872:25;24862:35;;24937:2;24926:9;24922:18;24916:25;24906:35;;24641:306;;;;;:::o;29148:128::-;29215:9;;;29236:11;;;29233:37;;;29250:18;;:::i;30235:245::-;30314:6;30322;30375:2;30363:9;30354:7;30350:23;30346:32;30343:52;;;30391:1;30388;30381:12;30343:52;-1:-1:-1;;30414:16:1;;30470:2;30455:18;;;30449:25;30414:16;;30449:25;;-1:-1:-1;30235:245:1:o;31293:401::-;31495:2;31477:21;;;31534:2;31514:18;;;31507:30;31573:34;31568:2;31553:18;;31546:62;-1:-1:-1;;;31639:2:1;31624:18;;31617:35;31684:3;31669:19;;31293:401::o;31699:399::-;31901:2;31883:21;;;31940:2;31920:18;;;31913:30;31979:34;31974:2;31959:18;;31952:62;-1:-1:-1;;;32045:2:1;32030:18;;32023:33;32088:3;32073:19;;31699:399::o;36841:510::-;37112:6;37101:9;37094:25;37155:3;37150:2;37139:9;37135:18;37128:31;37075:4;37176:57;37228:3;37217:9;37213:19;37205:6;37176:57;:::i;:::-;-1:-1:-1;;;;;37269:32:1;;;;37264:2;37249:18;;37242:60;-1:-1:-1;37333:2:1;37318:18;37311:34;37168:65;36841:510;-1:-1:-1;;36841:510:1:o;37356:582::-;37655:6;37644:9;37637:25;37698:6;37693:2;37682:9;37678:18;37671:34;37741:3;37736:2;37725:9;37721:18;37714:31;37618:4;37762:57;37814:3;37803:9;37799:19;37791:6;37762:57;:::i;:::-;-1:-1:-1;;;;;37855:32:1;;;;37850:2;37835:18;;37828:60;-1:-1:-1;37919:3:1;37904:19;37897:35;37754:65;37356:582;-1:-1:-1;;;37356:582:1:o

Swarm Source

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