ETH Price: $3,188.87 (+2.77%)

Token

OOF (OOF)
 

Overview

Max Total Supply

100,000,000 OOF

Holders

134

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.520611096471154176 OOF

Value
$0.00
0x6fe249a4e7595c2bf00ccc472691979a9fec503a
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:
Oof

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-09
*/

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

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 IPriceFeed {
    function latestAnswer() external returns (int256);
}

contract Oof is ERC20, Ownable {

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

    IDexRouter public dexRouter;
    address public lpPair;

    IPriceFeed internal immutable priceFeed;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address public operationsAddress;
    address public devAddress;
    address public futureOwner;

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

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    
     // 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 buyOperationsFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellOperationsFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;

    uint256 public constant FEE_DIVISOR = 10000;

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

    uint256 public percentForLPBurn = 25; // 25 = .25%
    bool public lpBurnEnabled = false;
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;
    
    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;

    // floating liquidity settings
    bool public customLiquidityActive = true;
    uint256 public latestEthPrice = 0;
    uint256 public minimumBuyLiqPerc = 50;
    uint256 public minimumSellLiqPerc = 33;
    uint256 public maximumBuyLiqPerc = 80;
    uint256 public maximumSellLiqPerc = 50;
    uint256 public mcapComparisonValue = 10 * 1e6;

    
    /******************/

    // 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 UpdatedOperationsAddress(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);

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

        if(block.chainid == 1){
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2
            _priceFeed = 0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419;
        } else if(block.chainid == 4){
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // Rinkeby ETH: Uniswap V2
            _priceFeed = 0x8A753747A1Fa494EC906cE90E9f37563A8AF630e;
        } else if(block.chainid == 56){
            _dexRouter = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BNB Chain: PCS V2
            _priceFeed = 0x0567F2323251f0Aab15c8dFb1967E4e8A7D42aeE;
        } else if(block.chainid == 97){
            _dexRouter = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // BNB Chain Testnet: PCS V2
            _priceFeed = 0x2514895c72f50D8bd4B4F9b1110F0D6bD2c97526;
        } else if(block.chainid == 42161){
            _dexRouter = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506; // Arbitrum: SushiSwap
            _priceFeed = 0x639Fe6ab55C921f74e7fac1ee960C0B6293ba612;
        } else {
            revert("Chain not configured");
        }

        priceFeed = IPriceFeed(_priceFeed);
        require(priceFeed.latestAnswer() > 0, "wrong price feed");

        // initialize router
        dexRouter = IDexRouter(_dexRouter);

        uint256 totalSupply = 100 * 1e6 * (10 ** decimals());
        
        maxBuyAmount = totalSupply * 5 / 10000;
        maxSellAmount = totalSupply * 5 / 10000;
        maxWallet = totalSupply * 1 / 1000;
        swapTokensAtAmount = totalSupply * 25 / 100000;

        buyOperationsFee = 0;
        buyLiquidityFee = 100;
        buyDevFee = 200;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyDevFee;

        sellOperationsFee = 3333;
        sellLiquidityFee = 3333;
        sellDevFee = 3333;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellDevFee;

        if(block.chainid == 1){
            operationsAddress = address(0x1DE548Cf3b40c8D29d141ce63be49982E733B41A);
            devAddress = address(0x1DE548Cf3b40c8D29d141ce63be49982E733B41A);
            futureOwner = address(0x1DE548Cf3b40c8D29d141ce63be49982E733B41A);
        } else {
            operationsAddress = address(msg.sender);
            devAddress = address(msg.sender);
            futureOwner = address(msg.sender);
        }

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

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

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

    receive() external payable {}

    function setCustomLiquidityActive(bool active) external onlyOwner {
        customLiquidityActive = active;
    }
    
    function enableTrading(uint256 blocksForPenalty, address _lpPair) external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        require(blocksForPenalty <= 10, "Cannot make penalty blocks more than 10");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty;
        
        // set pair
        lpPair = _lpPair;
        _excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);

        emit EnabledTrading();
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner {

        limitsInEffect = false;
        transferDelayEnabled = false;
        maxBuyAmount = totalSupply();
        maxSellAmount = totalSupply();

        emit RemovedLimits();
    }

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

    function massManageRestrictedWallets(address[] calldata accounts, bool restricted) external onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++){
            boughtEarly[accounts[i]] = restricted;
        }
    }

    // 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 updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 100) / (10 ** decimals()), "Cannot set max sell amount lower than 1%");
        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 airdropToWallets(address[] memory wallets, uint256[] memory amountsInTokens) external onlyOwner {
        require(wallets.length == amountsInTokens.length, "arrays must be the same length");
        require(wallets.length < 300, "Can only airdrop 300 wallets per txn due to gas limits"); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
        for(uint256 i = 0; i < wallets.length; i++){
            address wallet = wallets[i];
            uint256 amount = amountsInTokens[i];
            super._transfer(msg.sender, wallet, amount);
        }
    }
    
    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 _operationsFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyOperationsFee = _operationsFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 15 * FEE_DIVISOR / 100, "Must keep fees at 15% or less");
    }

    function updateSellFees(uint256 _operationsFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        sellOperationsFee = _operationsFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 20 * 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(tradingActive){
            require((!boughtEarly[from] && !boughtEarly[to]) || to == owner() || to == address(0xdead), "Bots cannot transfer tokens in or out except to owner or dead address.");
        }
        
        if(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !_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, "Max Wallet Exceeded");
                } 
                //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, "Max Wallet Exceeded");
                }
            }
        }

        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;

        if(customLiquidityActive && tradingActive && !swapping){
            latestEthPrice = uint256(priceFeed.latestAnswer());
            setCustomFees();
        }

        // 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(!boughtEarly[to]){
                    boughtEarly[to] = true;
                    botsCaught += 1;
                    earlyBuyers.push(to);
                    emit CaughtEarlyBuyer(to);
                }

                fees = amount * buyTotalFees / FEE_DIVISOR;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
            }

            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees / FEE_DIVISOR;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForOperations += fees * sellOperationsFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
            }

            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount * buyTotalFees / FEE_DIVISOR;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

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

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

    function swapTokensForEth(uint256 tokenAmount) private {

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

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

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

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

    function swapBack() private {

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

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

        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 ethForOperations = ethBalance * tokensForOperations / (totalTokensToSwap - (tokensForLiquidity/2));
        uint256 ethForDev = ethBalance * tokensForDev / (totalTokensToSwap - (tokensForLiquidity/2));

        ethForLiquidity -= ethForOperations + ethForDev;
            
        tokensForLiquidity = 0;
        tokensForOperations = 0;
        tokensForDev = 0;
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

        (success,) = address(devAddress).call{value: ethForDev}("");

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

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

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

    function setOperationsAddress(address _operationsAddress) external onlyOwner {
        require(_operationsAddress != address(0), "_operationsAddress address cannot be 0");
        operationsAddress = payable(_operationsAddress);
        emit UpdatedOperationsAddress(_operationsAddress);
    }
    
    function setDevAddress(address _devAddress) external onlyOwner {
        require(_devAddress != address(0), "_operationsAddress address cannot be 0");
        devAddress = payable(_devAddress);
        emit UpdatedDevAddress(_devAddress);
    }

    // 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 launch(uint256 blocksForPenalty) external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot relaunch.");

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

        latestEthPrice = uint256(priceFeed.latestAnswer());

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

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

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

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

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

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

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

        emit AutoBurnLP(lpAmount);
    }

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

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

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

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

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

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

        emit ManualBurnLP(lpAmount);
    }

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

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

    function getMcap() public view returns (uint256){
        return (IERC20(dexRouter.WETH()).balanceOf(address(lpPair)) * 1e18 * latestEthPrice / balanceOf(address(lpPair)) * (totalSupply()-balanceOf(address(0xdead))) / 1e18 / 1e8); 
    }

    function customLiquiditySettings(bool _customLiquidityActive, uint256 _minimumBuyLiqPerc, uint256 _maximumBuyLiqPerc, uint256 _minimumSellLiqPerc, uint256 _maximumSellLiqPerc, uint256 _mcapComparisonValue) external onlyOwner {
        require(_minimumBuyLiqPerc <= 100 && _maximumBuyLiqPerc <= 100 && _minimumBuyLiqPerc <= _maximumBuyLiqPerc, "Buy settings incorrect");
        require(_minimumSellLiqPerc <= 100 && _maximumSellLiqPerc <= 100 && _minimumSellLiqPerc <= _maximumSellLiqPerc, "Sell settings incorrect");
        customLiquidityActive = _customLiquidityActive;
        minimumBuyLiqPerc = _minimumBuyLiqPerc;
        maximumBuyLiqPerc = _maximumBuyLiqPerc;
        minimumSellLiqPerc = _minimumSellLiqPerc;
        maximumSellLiqPerc = _maximumSellLiqPerc;
        mcapComparisonValue = _mcapComparisonValue;
    }

    function setCustomFees() internal {
        uint256 mcap = getMcap();
        uint256 newLiquidityPercBuy = (mcap / mcapComparisonValue) * maximumBuyLiqPerc / 1e18 + minimumBuyLiqPerc;
        uint256 newLiquidityPercSell = (mcap / mcapComparisonValue) * maximumSellLiqPerc / 1e18 + minimumSellLiqPerc;
        if(newLiquidityPercBuy > maximumBuyLiqPerc){
            newLiquidityPercBuy = maximumBuyLiqPerc;
        }
        if(newLiquidityPercSell > maximumSellLiqPerc){
            newLiquidityPercSell = maximumSellLiqPerc;
        }
        buyLiquidityFee = buyTotalFees * newLiquidityPercBuy / 100;
        buyOperationsFee = (buyTotalFees - buyLiquidityFee) * 33 / 100;
        buyDevFee = buyTotalFees - buyOperationsFee - buyLiquidityFee;
            
        sellLiquidityFee = sellTotalFees * newLiquidityPercSell / 100;
        sellOperationsFee = (sellTotalFees - sellLiquidityFee) * 50 / 100;
        sellDevFee = sellTotalFees - sellOperationsFee - sellLiquidityFee;
    }
}

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":[{"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":[{"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":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","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":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","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":"buyOperationsFee","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":"customLiquidityActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_customLiquidityActive","type":"bool"},{"internalType":"uint256","name":"_minimumBuyLiqPerc","type":"uint256"},{"internalType":"uint256","name":"_maximumBuyLiqPerc","type":"uint256"},{"internalType":"uint256","name":"_minimumSellLiqPerc","type":"uint256"},{"internalType":"uint256","name":"_maximumSellLiqPerc","type":"uint256"},{"internalType":"uint256","name":"_mcapComparisonValue","type":"uint256"}],"name":"customLiquiditySettings","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":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"earlyBuyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"},{"internalType":"address","name":"_lpPair","type":"address"}],"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":"futureOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEarlyBuyers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMcap","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":[],"name":"latestEthPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"massExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"restricted","type":"bool"}],"name":"massManageRestrictedWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","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":"maximumBuyLiqPerc","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maximumSellLiqPerc","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mcapComparisonValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumBuyLiqPerc","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumSellLiqPerc","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":"operationsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","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":"bool","name":"active","type":"bool"}],"name":"setCustomLiquidityActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","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":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","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":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","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":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","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":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000600f8190556014805462ffffff191660019081179091556016805460ff19908116831790915560196022556023805482169055610e106024556107086026556028805490911690911790556029556032602a8190556021602b556050602c55602d5562989680602e55600360a08181526227a7a360e91b60c081905261012060405260e08381526101009190915290916200009d8382620009b8565b506004620000ac8282620009b8565b5050506000620000c16200062060201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062005f17833981519152908290a35033600080466001036200013e5750737a250d5630b4cf539739df2c5dacb4c659f2488d9050735f4ec3df9cbd43714fe2740f5e3616155c5b84196200027c565b466004036200017a5750737a250d5630b4cf539739df2c5dacb4c659f2488d9050738a753747a1fa494ec906ce90e9f37563a8af630e6200027c565b46603803620001b657507310ed43c718714eb63d5aa57b78b54704e256024e9050730567f2323251f0aab15c8dfb1967e4e8a7d42aee6200027c565b46606103620001f2575073d99d1c33f9fc3444f8101754abc46c52416550d19050732514895c72f50d8bd4b4f9b1110f0d6bd2c975266200027c565b4661a4b1036200022f5750731b02da8cb0d097eb8d57a175b88c7d8b47997506905073639fe6ab55c921f74e7fac1ee960c0b6293ba6126200027c565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b0381166080819052604080516350d25bcd60e01b81529051600092916350d25bcd916004808301926020929190829003018187875af1158015620002cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f1919062000a84565b13620003335760405162461bcd60e51b815260206004820152601060248201526f1ddc9bdb99c81c1c9a58d9481999595960821b604482015260640162000273565b600980546001600160a01b0319166001600160a01b038416179055600062000359601290565b6200036690600a62000bb3565b62000376906305f5e10062000bcb565b90506127106200038882600562000bcb565b62000394919062000bed565b600655612710620003a782600562000bcb565b620003b3919062000bed565b6007556103e8620003c682600162000bcb565b620003d2919062000bed565b600855620186a0620003e682601962000bcb565b620003f2919062000bed565b600b55600060188190556064601981905560c8601a8190559162000417919062000c10565b62000423919062000c10565b601755610d05601c819055601d819055601e81905562000444818062000c10565b62000450919062000c10565b601b5546600103620004a257600c8054731de548cf3b40c8d29d141ce63be49982e733b41a6001600160a01b03199182168117909255600d8054821683179055600e80549091169091179055620004cf565b600c8054336001600160a01b03199182168117909255600d8054821683179055600e805490911690911790555b620004dc84600162000624565b620004e930600162000624565b620004f861dead600162000624565b600c5462000511906001600160a01b0316600162000624565b6009546200052a906001600160a01b0316600162000624565b600e5462000543906001600160a01b0316600162000624565b6200055084600162000687565b6200055d30600162000687565b6200056c61dead600162000687565b600c5462000585906001600160a01b0316600162000687565b6009546200059e906001600160a01b0316600162000687565b600e54620005b7906001600160a01b0316600162000687565b620005dd306064620005cb84604262000bcb565b620005d7919062000bed565b62000731565b600e54306000908152602081905260409020546200060b916001600160a01b031690620005d7908462000c2b565b620006168462000816565b5050505062000c45565b3390565b6001600160a01b038216600081815260306020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6005546001600160a01b03163314620006d25760405162461bcd60e51b8152602060048201819052602482015260008051602062005ef7833981519152604482015260640162000273565b6001600160a01b0382166000818152602f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620007895760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000273565b80600260008282546200079d919062000c10565b90915550506001600160a01b03821660009081526020819052604081208054839290620007cc90849062000c10565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620008615760405162461bcd60e51b8152602060048201819052602482015260008051602062005ef7833981519152604482015260640162000273565b6001600160a01b038116620008c85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000273565b6005546040516001600160a01b0380841692169060008051602062005f1783398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200093e57607f821691505b6020821081036200095f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620009b357600081815260208120601f850160051c810160208610156200098e5750805b601f850160051c820191505b81811015620009af578281556001016200099a565b5050505b505050565b81516001600160401b03811115620009d457620009d462000913565b620009ec81620009e5845462000929565b8462000965565b602080601f83116001811462000a24576000841562000a0b5750858301515b600019600386901b1c1916600185901b178555620009af565b600085815260208120601f198616915b8281101562000a555788860151825594840194600190910190840162000a34565b508582101562000a745787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a9757600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000af557816000190482111562000ad95762000ad962000a9e565b8085161562000ae757918102915b93841c939080029062000ab9565b509250929050565b60008262000b0e5750600162000bad565b8162000b1d5750600062000bad565b816001811462000b36576002811462000b415762000b61565b600191505062000bad565b60ff84111562000b555762000b5562000a9e565b50506001821b62000bad565b5060208310610133831016604e8410600b841016171562000b86575081810a62000bad565b62000b92838362000ab4565b806000190482111562000ba95762000ba962000a9e565b0290505b92915050565b600062000bc460ff84168362000afd565b9392505050565b600081600019048311821515161562000be85762000be862000a9e565b500290565b60008262000c0b57634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111562000c265762000c2662000a9e565b500190565b60008282101562000c405762000c4062000a9e565b500390565b60805161528f62000c686000396000818161203f0152613b2d015261528f6000f3fe6080604052600436106104c45760003560e01c806388e765ff11610276578063c18bc1951161014f578063ea4cfe12116100c1578063f5648a4f11610085578063f5648a4f14610e0e578063f5f4a97d14610e23578063f637434214610e39578063f8b45b0514610e4f578063fb002c9714610e65578063fe72b27a14610e7b57600080fd5b8063ea4cfe1214610d82578063eb472fc414610da2578063ee40166e14610dc2578063f11a24d314610dd8578063f2fde38b14610dee57600080fd5b8063d85ba06311610113578063d85ba06314610cc5578063dc3f0d0f14610cdb578063dd62ed3e14610cfb578063e1ade1fe14610d41578063e2f4560514610d57578063e884f26014610d6d57600080fd5b8063c18bc19514610c35578063c876d0b914610c55578063d0d41fe114610c6f578063d0e7d33f14610c8f578063d257b34f14610ca557600080fd5b8063a4c82a00116101e8578063b9e9d1aa116101ac578063b9e9d1aa14610b81578063bbc0c74214610ba1578063bd5fb92014610bc0578063c024666814610be0578063c077ab4b14610c00578063c17b5b8c14610c1557600080fd5b8063a4c82a0014610ae5578063a62068ce14610afb578063a9059cbb14610b11578063b3e4c17914610b31578063b62496f514610b5157600080fd5b80639c3b4fdc1161023a5780639c3b4fdc14610a575780639e93ad8e14610a6d5780639ec22c0e14610a835780639fccce3214610a99578063a0d82dc514610aaf578063a457c2d714610ac557600080fd5b806388e765ff146109cc5780638da5cb5b146109e257806395d89b4114610a005780639a5bd2dd14610a155780639a7a23d614610a3757600080fd5b806342088f1e116103a85780636b0a894c1161031a578063751039fc116102de578063751039fc146109075780637571336a1461091c5780638095d5641461093c5780638366e79a1461095c57806385b12c7c1461097c57806385ecfd281461099c57600080fd5b80636b0a894c1461087c5780636ddd17131461089257806370a08231146108b2578063715018a6146108d2578063730c1888146108e757600080fd5b806351f205e41161036c57806351f205e4146107ee578063552fd1481461080357806358a6d531146108235780635a139dd41461083a57806366d602ae146108505780636a486a8e1461086657600080fd5b806342088f1e14610768578063452ed4f11461077e578063499b83941461079e5780634a62bb65146107be5780634f77f6c0146107d857600080fd5b8063199ffc72116104415780632c3e486c116104055780632c3e486c146106bc5780632e82f1a0146106d25780632f1ffebf146106ec578063313ce5671461070c57806339509351146107285780633ad10ef61461074857600080fd5b8063199ffc72146106305780631a8145bb146106465780632307b4411461065c57806323b872dd1461067c5780632be32b611461069c57600080fd5b80630d3cbb22116104885780630d3cbb221461059957806310d5de53146105bb5780631708da75146105eb57806318160ddd14610605578063184c16c51461061a57600080fd5b8063046f9c3f146104d057806306fdde03146104f95780630758d9241461051b578063095ea7b3146105535780630d3141e01461058357600080fd5b366104cb57005b600080fd5b3480156104dc57600080fd5b506104e6602a5481565b6040519081526020015b60405180910390f35b34801561050557600080fd5b5061050e610e9b565b6040516104f0919061493a565b34801561052757600080fd5b5060095461053b906001600160a01b031681565b6040516001600160a01b0390911681526020016104f0565b34801561055f57600080fd5b5061057361056e3660046149a7565b610f2d565b60405190151581526020016104f0565b34801561058f57600080fd5b506104e6602e5481565b3480156105a557600080fd5b506105b96105b43660046149e1565b610f44565b005b3480156105c757600080fd5b506105736105d6366004614a05565b60306020526000908152604090205460ff1681565b3480156105f757600080fd5b506028546105739060ff1681565b34801561061157600080fd5b506002546104e6565b34801561062657600080fd5b506104e660265481565b34801561063c57600080fd5b506104e660225481565b34801561065257600080fd5b506104e660205481565b34801561066857600080fd5b506105b9610677366004614af8565b610f8a565b34801561068857600080fd5b50610573610697366004614bba565b6110e3565b3480156106a857600080fd5b506105b96106b7366004614bfb565b61118d565b3480156106c857600080fd5b506104e660245481565b3480156106de57600080fd5b506023546105739060ff1681565b3480156106f857600080fd5b506105b9610707366004614c14565b6112a1565b34801561071857600080fd5b50604051601281526020016104f0565b34801561073457600080fd5b506105736107433660046149a7565b611416565b34801561075457600080fd5b50600d5461053b906001600160a01b031681565b34801561077457600080fd5b506104e660295481565b34801561078a57600080fd5b50600a5461053b906001600160a01b031681565b3480156107aa57600080fd5b506105b96107b9366004614a05565b611452565b3480156107ca57600080fd5b506014546105739060ff1681565b3480156107e457600080fd5b506104e6601c5481565b3480156107fa57600080fd5b506105b96114ec565b34801561080f57600080fd5b506105b961081e366004614c44565b6115f5565b34801561082f57600080fd5b506010544310610573565b34801561084657600080fd5b506104e660185481565b34801561085c57600080fd5b506104e660075481565b34801561087257600080fd5b506104e6601b5481565b34801561088857600080fd5b506104e660135481565b34801561089e57600080fd5b506014546105739062010000900460ff1681565b3480156108be57600080fd5b506104e66108cd366004614a05565b611696565b3480156108de57600080fd5b506105b96116b1565b3480156108f357600080fd5b506105b9610902366004614cca565b611725565b34801561091357600080fd5b506105b961184e565b34801561092857600080fd5b506105b9610937366004614cf8565b6118c5565b34801561094857600080fd5b506105b9610957366004614d26565b61198d565b34801561096857600080fd5b50610573610977366004614d52565b611a48565b34801561098857600080fd5b506105b9610997366004614bfb565b611c82565b3480156109a857600080fd5b506105736109b7366004614a05565b60116020526000908152604090205460ff1681565b3480156109d857600080fd5b506104e660065481565b3480156109ee57600080fd5b506005546001600160a01b031661053b565b348015610a0c57600080fd5b5061050e612115565b348015610a2157600080fd5b50610a2a612124565b6040516104f09190614dc4565b348015610a4357600080fd5b506105b9610a52366004614cf8565b612185565b348015610a6357600080fd5b506104e6601a5481565b348015610a7957600080fd5b506104e661271081565b348015610a8f57600080fd5b506104e660275481565b348015610aa557600080fd5b506104e660215481565b348015610abb57600080fd5b506104e6601e5481565b348015610ad157600080fd5b50610573610ae03660046149a7565b612279565b348015610af157600080fd5b506104e660255481565b348015610b0757600080fd5b506104e660105481565b348015610b1d57600080fd5b50610573610b2c3660046149a7565b612312565b348015610b3d57600080fd5b506105b9610b4c366004614dd7565b61231f565b348015610b5d57600080fd5b50610573610b6c366004614a05565b60316020526000908152604090205460ff1681565b348015610b8d57600080fd5b50600e5461053b906001600160a01b031681565b348015610bad57600080fd5b5060145461057390610100900460ff1681565b348015610bcc57600080fd5b506105b9610bdb366004614c44565b61243f565b348015610bec57600080fd5b506105b9610bfb366004614cf8565b612545565b348015610c0c57600080fd5b506104e66125ce565b348015610c2157600080fd5b506105b9610c30366004614d26565b61273b565b348015610c4157600080fd5b506105b9610c50366004614bfb565b6127f6565b348015610c6157600080fd5b506016546105739060ff1681565b348015610c7b57600080fd5b506105b9610c8a366004614a05565b612901565b348015610c9b57600080fd5b506104e6602d5481565b348015610cb157600080fd5b506105b9610cc0366004614bfb565b61299b565b348015610cd157600080fd5b506104e660175481565b348015610ce757600080fd5b506105b9610cf6366004614bfb565b612ae6565b348015610d0757600080fd5b506104e6610d16366004614d52565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610d4d57600080fd5b506104e6602b5481565b348015610d6357600080fd5b506104e6600b5481565b348015610d7957600080fd5b506105b9612bf4565b348015610d8e57600080fd5b50600c5461053b906001600160a01b031681565b348015610dae57600080fd5b5061053b610dbd366004614bfb565b612c2a565b348015610dce57600080fd5b506104e6600f5481565b348015610de457600080fd5b506104e660195481565b348015610dfa57600080fd5b506105b9610e09366004614a05565b612c54565b348015610e1a57600080fd5b506105b9612d3f565b348015610e2f57600080fd5b506104e6602c5481565b348015610e4557600080fd5b506104e6601d5481565b348015610e5b57600080fd5b506104e660085481565b348015610e7157600080fd5b506104e6601f5481565b348015610e8757600080fd5b506105b9610e96366004614bfb565b612dab565b606060038054610eaa90614e23565b80601f0160208091040260200160405190810160405280929190818152602001828054610ed690614e23565b8015610f235780601f10610ef857610100808354040283529160200191610f23565b820191906000526020600020905b815481529060010190602001808311610f0657829003601f168201915b5050505050905090565b6000610f3a3384846130a5565b5060015b92915050565b6005546001600160a01b03163314610f775760405162461bcd60e51b8152600401610f6e90614e5d565b60405180910390fd5b6028805460ff1916911515919091179055565b6005546001600160a01b03163314610fb45760405162461bcd60e51b8152600401610f6e90614e5d565b80518251146110055760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610f6e565b61012c8251106110765760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203330302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610f6e565b60005b82518110156110de57600083828151811061109657611096614e92565b6020026020010151905060008383815181106110b4576110b4614e92565b602002602001015190506110c93383836131c9565b505080806110d690614ebe565b915050611079565b505050565b60006110f084848461331e565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156111755760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610f6e565b61118285338584036130a5565b506001949350505050565b6005546001600160a01b031633146111b75760405162461bcd60e51b8152600401610f6e90614e5d565b6111c36012600a614fbb565b6103e86111cf60025490565b6111da906001614fca565b6111e49190614fe9565b6111ee9190614fe9565b81101561124f5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610f6e565b61125b6012600a614fbb565b6112659082614fca565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b031633146112cb5760405162461bcd60e51b8152600401610f6e90614e5d565b601454610100900460ff16156113235760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610f6e565b600a8211156113845760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610f6e565b6014805462ffff0019166201010017905543600f8190556113a690839061500b565b601055600a80546001600160a01b0319166001600160a01b0383169081179091556113d2906001613fc9565b600a546113e9906001600160a01b0316600161402c565b6040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a15050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610f3a91859061144d90869061500b565b6130a5565b6005546001600160a01b0316331461147c5760405162461bcd60e51b8152600401610f6e90614e5d565b6001600160a01b0381166114a25760405162461bcd60e51b8152600401610f6e90615023565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b031633146115165760405162461bcd60e51b8152600401610f6e90614e5d565b600b5461152230611696565b1015611598576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610f6e565b600a805460ff60a01b1916600160a01b1790556115b361405a565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b0316331461161f5760405162461bcd60e51b8152600401610f6e90614e5d565b60005b8281101561169057816011600086868581811061164157611641614e92565b90506020020160208101906116569190614a05565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061168881614ebe565b915050611622565b50505050565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146116db5760405162461bcd60e51b8152600401610f6e90614e5d565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461174f5760405162461bcd60e51b8152600401610f6e90614e5d565b6102588310156117bd5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610f6e565b6103e882111580156117cd575060015b6118325760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610f6e565b6024929092556022556023805460ff1916911515919091179055565b6005546001600160a01b031633146118785760405162461bcd60e51b8152600401610f6e90614e5d565b6014805460ff199081169091556016805490911690556002546006556002546007556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146118ef5760405162461bcd60e51b8152600401610f6e90614e5d565b8061196257600a546001600160a01b03908116908316036119625760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610f6e565b6001600160a01b03919091166000908152603060205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146119b75760405162461bcd60e51b8152600401610f6e90614e5d565b60188390556019829055601a819055806119d1838561500b565b6119db919061500b565b60175560646119ed612710600f614fca565b6119f79190614fe9565b60175411156110de5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610f6e565b6005546000906001600160a01b03163314611a755760405162461bcd60e51b8152600401610f6e90614e5d565b6001600160a01b038316611acb5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610f6e565b6001600160a01b03831630141580611aeb5750601454610100900460ff16155b611b545760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610f6e565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611b9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bbf9190615069565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611c12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c369190615082565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b03163314611cac5760405162461bcd60e51b8152600401610f6e90614e5d565b601454610100900460ff1615611d185760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610f6e565b600960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8f919061509f565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611df1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e15919061509f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611e62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e86919061509f565b600a80546001600160a01b0319166001600160a01b03929092169182179055611eb0906001613fc9565b600a54611ec7906001600160a01b0316600161402c565b60004711611f235760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610f6e565b6000611f2e30611696565b11611f8a5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610f6e565b600954611fa59030906001600160a01b031661144d82611696565b6009546001600160a01b031663f305d7194730611fc181611696565b600e546040516001600160e01b031960e087901b168152611ff793929160009182916001600160a01b03169042906004016150bc565b60606040518083038185885af1158015612015573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061203a91906150f7565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166350d25bcd6040518163ffffffff1660e01b81526004016020604051808303816000875af115801561209d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c19190615069565b6029556014805462ffff0019166201010017905543600f8190556120e690829061500b565b6010556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b606060048054610eaa90614e23565b60606012805480602002602001604051908101604052809291908181526020018280548015610f2357602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161215e575050505050905090565b6005546001600160a01b031633146121af5760405162461bcd60e51b8152600401610f6e90614e5d565b600a546001600160a01b03908116908316036122335760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610f6e565b61223d828261402c565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156122fb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610f6e565b61230833858584036130a5565b5060019392505050565b6000610f3a33848461331e565b6005546001600160a01b031633146123495760405162461bcd60e51b8152600401610f6e90614e5d565b6064851115801561235b575060648411155b80156123675750838511155b6123ac5760405162461bcd60e51b8152602060048201526016602482015275109d5e481cd95d1d1a5b99dcc81a5b98dbdc9c9958dd60521b6044820152606401610f6e565b606483111580156123be575060648211155b80156123ca5750818311155b6124165760405162461bcd60e51b815260206004820152601760248201527f53656c6c2073657474696e677320696e636f72726563740000000000000000006044820152606401610f6e565b6028805460ff191696151596909617909555602a93909355602c91909155602b55602d55602e55565b6005546001600160a01b031633146124695760405162461bcd60e51b8152600401610f6e90614e5d565b60005b828110156116905781602f600086868581811061248b5761248b614e92565b90506020020160208101906124a09190614a05565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558383828181106124da576124da614e92565b90506020020160208101906124ef9190614a05565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78360405161252b911515815260200190565b60405180910390a28061253d81614ebe565b91505061246c565b6005546001600160a01b0316331461256f5760405162461bcd60e51b8152600401610f6e90614e5d565b6001600160a01b0382166000818152602f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b60006305f5e100670de0b6b3a76400006125e961dead611696565b6002546125f69190615125565b600a5461260b906001600160a01b0316611696565b602954600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612661573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612685919061509f565b600a546040516370a0823160e01b81526001600160a01b0391821660048201529116906370a0823190602401602060405180830381865afa1580156126ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126f29190615069565b61270490670de0b6b3a7640000614fca565b61270e9190614fca565b6127189190614fe9565b6127229190614fca565b61272c9190614fe9565b6127369190614fe9565b905090565b6005546001600160a01b031633146127655760405162461bcd60e51b8152600401610f6e90614e5d565b601c839055601d829055601e8190558061277f838561500b565b612789919061500b565b601b55606461279b6127106014614fca565b6127a59190614fe9565b601b5411156110de5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610f6e565b6005546001600160a01b031633146128205760405162461bcd60e51b8152600401610f6e90614e5d565b61282c6012600a614fbb565b606461283760025490565b612842906001614fca565b61284c9190614fe9565b6128569190614fe9565b8110156128b65760405162461bcd60e51b815260206004820152602860248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015267207468616e20312560c01b6064820152608401610f6e565b6128c26012600a614fbb565b6128cc9082614fca565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001611296565b6005546001600160a01b0316331461292b5760405162461bcd60e51b8152600401610f6e90614e5d565b6001600160a01b0381166129515760405162461bcd60e51b8152600401610f6e90615023565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f804ec39c1aea0b9f2615a34c3fa437b6ddda2c72e6848abf0f23955589a7ad5490600090a250565b6005546001600160a01b031633146129c55760405162461bcd60e51b8152600401610f6e90614e5d565b620186a06129d260025490565b6129dd906001614fca565b6129e79190614fe9565b811015612a545760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610f6e565b6103e8612a6060025490565b612a6b906001614fca565b612a759190614fe9565b811115612ae15760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610f6e565b600b55565b6005546001600160a01b03163314612b105760405162461bcd60e51b8152600401610f6e90614e5d565b612b1c6012600a614fbb565b6103e8612b2860025490565b612b33906001614fca565b612b3d9190614fe9565b612b479190614fe9565b811015612ba95760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610f6e565b612bb56012600a614fbb565b612bbf9082614fca565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001611296565b6005546001600160a01b03163314612c1e5760405162461bcd60e51b8152600401610f6e90614e5d565b6016805460ff19169055565b60128181548110612c3a57600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b03163314612c7e5760405162461bcd60e51b8152600401610f6e90614e5d565b6001600160a01b038116612ce35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f6e565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314612d695760405162461bcd60e51b8152600401610f6e90614e5d565b604051600090339047908381818185875af1925050503d8060008114611690576040519150601f19603f3d011682016040523d82523d6000602084013e611690565b6005546001600160a01b03163314612dd55760405162461bcd60e51b8152600401610f6e90614e5d565b611388811115612e455760405162461bcd60e51b815260206004820152603560248201527f4d6179206e6f74206275726e206d6f7265207468616e20353025206f6620636f6044820152746e74726163742773204c5020617420612074696d6560581b6064820152608401610f6e565b602654612e529042615125565b6027541115612e935760405162461bcd60e51b815260206004820152600d60248201526c213ab937103a37b79039b7b7b760991b6044820152606401610f6e565b42602755600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015612ee0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f049190615069565b90506000612f1130611696565b90506000612710612f228585614fca565b612f2c9190614fe9565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af1158015612f86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612faa9190615082565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec90612fe590309086906001908190849042906004016150bc565b60408051808303816000875af1158015613003573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613027919061513c565b505060008361303530611696565b61303f9190615125565b90508015613054576130543061dead836131c9565b60006130608347615125565b905080156130715761307181614262565b60405184907f81b7e7967a97e0708996ad25e859322b1c2e22612ac6798c9c95cfda2dca265f90600090a250505050505050565b6001600160a01b0383166131075760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f6e565b6001600160a01b0382166131685760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f6e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166131ef5760405162461bcd60e51b8152600401610f6e90615160565b6001600160a01b0382166132155760405162461bcd60e51b8152600401610f6e906151a5565b6001600160a01b0383166000908152602081905260409020548181101561328d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610f6e565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906132c490849061500b565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161331091815260200190565b60405180910390a350505050565b6001600160a01b0383166133445760405162461bcd60e51b8152600401610f6e90615160565b6001600160a01b03821661336a5760405162461bcd60e51b8152600401610f6e906151a5565b600081116133ba5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610f6e565b601454610100900460ff1661344d576001600160a01b0383166000908152602f602052604090205460ff168061340857506001600160a01b0382166000908152602f602052604090205460ff165b61344d5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610f6e565b601454610100900460ff161561354d576001600160a01b03831660009081526011602052604090205460ff1615801561349f57506001600160a01b03821660009081526011602052604090205460ff16155b806134b757506005546001600160a01b038381169116145b806134cc57506001600160a01b03821661dead145b61354d5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610f6e565b60145460ff161561393f576005546001600160a01b0384811691161480159061358457506005546001600160a01b03838116911614155b801561359857506001600160a01b03821615155b80156135af57506001600160a01b03821661dead14155b80156135d457506001600160a01b0383166000908152602f602052604090205460ff16155b80156135f957506001600160a01b0382166000908152602f602052604090205460ff16155b1561393f5760165460ff1615613712576009546001600160a01b038381169116148015906136355750600a546001600160a01b03838116911614155b1561371257613645600243615125565b326000908152601560205260409020541080156136835750613668600243615125565b6001600160a01b038316600090815260156020526040902054105b6136ed5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610f6e565b3260009081526015602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526031602052604090205460ff16801561375357506001600160a01b03821660009081526030602052604090205460ff16155b1561381a576006548111156137bb5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610f6e565b6008546137c783611696565b6137d1908361500b565b11156138155760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610f6e565b61393f565b6001600160a01b03821660009081526031602052604090205460ff16801561385b57506001600160a01b03831660009081526030602052604090205460ff16155b156138c5576007548111156138155760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610f6e565b6001600160a01b03821660009081526030602052604090205460ff1661393f576008546138f183611696565b6138fb908361500b565b111561393f5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610f6e565b600061394a30611696565b600b5490915081108015908190613969575060145462010000900460ff165b801561397f5750600a54600160a01b900460ff16155b80156139a457506001600160a01b03851660009081526031602052604090205460ff16155b80156139c957506001600160a01b0385166000908152602f602052604090205460ff16155b80156139ee57506001600160a01b0384166000908152602f602052604090205460ff16155b15613a1c57600a805460ff60a01b1916600160a01b179055613a0e61405a565b600a805460ff60a01b191690555b600a54600160a01b900460ff16158015613a4e57506001600160a01b03841660009081526031602052604090205460ff165b8015613a5c575060235460ff165b8015613a775750602454602554613a73919061500b565b4210155b8015613a9c57506001600160a01b0385166000908152602f602052604090205460ff16155b15613aa957613aa96143ac565b6001600160a01b0385166000908152602f602052604090205460019060ff1680613aeb57506001600160a01b0385166000908152602f602052604090205460ff165b15613af4575060005b60285460009060ff168015613b105750601454610100900460ff165b8015613b265750600a54600160a01b900460ff16155b15613bba577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166350d25bcd6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015613b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613baf9190615069565b602955613bba6145c6565b8115613fb55760105443108015613be957506001600160a01b03871660009081526031602052604090205460ff165b8015613c0e57506001600160a01b03861660009081526031602052604090205460ff16155b8015613c3357506001600160a01b0386166000908152602f602052604090205460ff16155b8015613c4157506000601754115b15613dfc576010544310613c6857600160066000828254613c629190615125565b90915550505b6001600160a01b03861660009081526011602052604090205460ff16613d48576001600160a01b0386166000908152601160205260408120805460ff191660019081179091556013805491929091613cc190849061500b565b9091555050601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b61271060175486613d599190614fca565b613d639190614fe9565b905060175460195482613d769190614fca565b613d809190614fe9565b60206000828254613d91919061500b565b9091555050601754601854613da69083614fca565b613db09190614fe9565b601f6000828254613dc1919061500b565b9091555050601754601a54613dd69083614fca565b613de09190614fe9565b60216000828254613df1919061500b565b90915550613f979050565b6001600160a01b03861660009081526031602052604090205460ff168015613e2657506000601b54115b15613eb957612710601b5486613e3c9190614fca565b613e469190614fe9565b9050601b54601d5482613e599190614fca565b613e639190614fe9565b60206000828254613e74919061500b565b9091555050601b54601c54613e899083614fca565b613e939190614fe9565b601f6000828254613ea4919061500b565b9091555050601b54601e54613dd69083614fca565b6001600160a01b03871660009081526031602052604090205460ff168015613ee357506000601754115b15613f975761271060175486613ef99190614fca565b613f039190614fe9565b905060175460195482613f169190614fca565b613f209190614fe9565b60206000828254613f31919061500b565b9091555050601754601854613f469083614fca565b613f509190614fe9565b601f6000828254613f61919061500b565b9091555050601754601a54613f769083614fca565b613f809190614fe9565b60216000828254613f91919061500b565b90915550505b8015613fa857613fa88730836131c9565b613fb28186615125565b94505b613fc08787876131c9565b50505050505050565b6001600160a01b038216600081815260306020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152603160205260409020805460ff191682151517905561223d8282613fc9565b600061406530611696565b90506000602154601f5460205461407c919061500b565b614086919061500b565b9050811580614093575080155b1561409c575050565b600b546140aa906014614fca565b8211156140c257600b546140bf906014614fca565b91505b600080600283602054866140d69190614fca565b6140e09190614fe9565b6140ea9190614fe9565b90506140fe6140f98286615125565b614741565b6020544790819060009061411490600290614fe9565b61411e9087615125565b601f5461412b9085614fca565b6141359190614fe9565b9050600060026020546141489190614fe9565b6141529088615125565b60215461415f9086614fca565b6141699190614fe9565b9050614175818361500b565b61417f9084615125565b60006020819055601f8190556021559250841580159061419f5750600083115b156141ae576141ae858461489b565b600d546040516001600160a01b03909116908290600081818185875af1925050503d80600081146141fb576040519150601f19603f3d011682016040523d82523d6000602084013e614200565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d8060008114614250576040519150601f19603f3d011682016040523d82523d6000602084013e614255565b606091505b5050505050505050505050565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156142cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f0919061509f565b8160008151811061430357614303614e92565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061433757614337614e92565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de9590849061437f90600090869061dead9042906004016151e8565b6000604051808303818588803b15801561439857600080fd5b505af1158015613fc0573d6000803e3d6000fd5b426025819055602755600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156143fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144229190615069565b9050600061442f30611696565b90506000612710602254846144449190614fca565b61444e9190614fe9565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af11580156144a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144cc9190615082565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec9061450790309086906001908190849042906004016150bc565b60408051808303816000875af1158015614525573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614549919061513c565b505060008361455730611696565b6145619190615125565b90508015614576576145763061dead836131c9565b60006145828347615125565b905080156145935761459381614262565b60405184907f30464008593337c7762c84338a125f5c481ce1997dbf1d7931bcce0b6430787a90600090a2505050505050565b60006145d06125ce565b90506000602a54670de0b6b3a7640000602c54602e54856145f19190614fe9565b6145fb9190614fca565b6146059190614fe9565b61460f919061500b565b90506000602b54670de0b6b3a7640000602d54602e54866146309190614fe9565b61463a9190614fca565b6146449190614fe9565b61464e919061500b565b9050602c5482111561466057602c5491505b602d5481111561466f5750602d545b60648260175461467f9190614fca565b6146899190614fe9565b601981905560175460649161469d91615125565b6146a8906021614fca565b6146b29190614fe9565b601881905560195460175490916146c891615125565b6146d29190615125565b601a55601b546064906146e6908390614fca565b6146f09190614fe9565b601d819055601b5460649161470491615125565b61470f906032614fca565b6147199190614fe9565b601c819055601d54601b54909161472f91615125565b6147399190615125565b601e55505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061477657614776614e92565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156147cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147f3919061509f565b8160018151811061480657614806614e92565b6001600160a01b03928316602091820292909201015260095461482c91309116846130a5565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac9479061486590859060009086903090429060040161521d565b600060405180830381600087803b15801561487f57600080fd5b505af1158015614893573d6000803e3d6000fd5b505050505050565b6009546148b39030906001600160a01b0316846130a5565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906148f090309087906000908190849042906004016150bc565b60606040518083038185885af115801561490e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061493391906150f7565b5050505050565b600060208083528351808285015260005b818110156149675785810183015185820160400152820161494b565b81811115614979576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146149a457600080fd5b50565b600080604083850312156149ba57600080fd5b82356149c58161498f565b946020939093013593505050565b80151581146149a457600080fd5b6000602082840312156149f357600080fd5b81356149fe816149d3565b9392505050565b600060208284031215614a1757600080fd5b81356149fe8161498f565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614a6157614a61614a22565b604052919050565b600067ffffffffffffffff821115614a8357614a83614a22565b5060051b60200190565b600082601f830112614a9e57600080fd5b81356020614ab3614aae83614a69565b614a38565b82815260059290921b84018101918181019086841115614ad257600080fd5b8286015b84811015614aed5780358352918301918301614ad6565b509695505050505050565b60008060408385031215614b0b57600080fd5b823567ffffffffffffffff80821115614b2357600080fd5b818501915085601f830112614b3757600080fd5b81356020614b47614aae83614a69565b82815260059290921b84018101918181019089841115614b6657600080fd5b948201945b83861015614b8d578535614b7e8161498f565b82529482019490820190614b6b565b96505086013592505080821115614ba357600080fd5b50614bb085828601614a8d565b9150509250929050565b600080600060608486031215614bcf57600080fd5b8335614bda8161498f565b92506020840135614bea8161498f565b929592945050506040919091013590565b600060208284031215614c0d57600080fd5b5035919050565b60008060408385031215614c2757600080fd5b823591506020830135614c398161498f565b809150509250929050565b600080600060408486031215614c5957600080fd5b833567ffffffffffffffff80821115614c7157600080fd5b818601915086601f830112614c8557600080fd5b813581811115614c9457600080fd5b8760208260051b8501011115614ca957600080fd5b60209283019550935050840135614cbf816149d3565b809150509250925092565b600080600060608486031215614cdf57600080fd5b83359250602084013591506040840135614cbf816149d3565b60008060408385031215614d0b57600080fd5b8235614d168161498f565b91506020830135614c39816149d3565b600080600060608486031215614d3b57600080fd5b505081359360208301359350604090920135919050565b60008060408385031215614d6557600080fd5b8235614d708161498f565b91506020830135614c398161498f565b600081518084526020808501945080840160005b83811015614db95781516001600160a01b031687529582019590820190600101614d94565b509495945050505050565b6020815260006149fe6020830184614d80565b60008060008060008060c08789031215614df057600080fd5b8635614dfb816149d3565b9860208801359850604088013597606081013597506080810135965060a00135945092505050565b600181811c90821680614e3757607f821691505b602082108103614e5757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201614ed057614ed0614ea8565b5060010190565b600181815b80851115614f12578160001904821115614ef857614ef8614ea8565b80851615614f0557918102915b93841c9390800290614edc565b509250929050565b600082614f2957506001610f3e565b81614f3657506000610f3e565b8160018114614f4c5760028114614f5657614f72565b6001915050610f3e565b60ff841115614f6757614f67614ea8565b50506001821b610f3e565b5060208310610133831016604e8410600b8410161715614f95575081810a610f3e565b614f9f8383614ed7565b8060001904821115614fb357614fb3614ea8565b029392505050565b60006149fe60ff841683614f1a565b6000816000190483118215151615614fe457614fe4614ea8565b500290565b60008261500657634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561501e5761501e614ea8565b500190565b60208082526026908201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60408201526507420626520360d41b606082015260800190565b60006020828403121561507b57600080fd5b5051919050565b60006020828403121561509457600080fd5b81516149fe816149d3565b6000602082840312156150b157600080fd5b81516149fe8161498f565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561510c57600080fd5b8351925060208401519150604084015190509250925092565b60008282101561513757615137614ea8565b500390565b6000806040838503121561514f57600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8481526080602082015260006152016080830186614d80565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061523c60a0830186614d80565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220999d467cd22df3b2ef370db96c607a343631eddedd735e7ff57c5528d499520b64736f6c634300080f00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106104c45760003560e01c806388e765ff11610276578063c18bc1951161014f578063ea4cfe12116100c1578063f5648a4f11610085578063f5648a4f14610e0e578063f5f4a97d14610e23578063f637434214610e39578063f8b45b0514610e4f578063fb002c9714610e65578063fe72b27a14610e7b57600080fd5b8063ea4cfe1214610d82578063eb472fc414610da2578063ee40166e14610dc2578063f11a24d314610dd8578063f2fde38b14610dee57600080fd5b8063d85ba06311610113578063d85ba06314610cc5578063dc3f0d0f14610cdb578063dd62ed3e14610cfb578063e1ade1fe14610d41578063e2f4560514610d57578063e884f26014610d6d57600080fd5b8063c18bc19514610c35578063c876d0b914610c55578063d0d41fe114610c6f578063d0e7d33f14610c8f578063d257b34f14610ca557600080fd5b8063a4c82a00116101e8578063b9e9d1aa116101ac578063b9e9d1aa14610b81578063bbc0c74214610ba1578063bd5fb92014610bc0578063c024666814610be0578063c077ab4b14610c00578063c17b5b8c14610c1557600080fd5b8063a4c82a0014610ae5578063a62068ce14610afb578063a9059cbb14610b11578063b3e4c17914610b31578063b62496f514610b5157600080fd5b80639c3b4fdc1161023a5780639c3b4fdc14610a575780639e93ad8e14610a6d5780639ec22c0e14610a835780639fccce3214610a99578063a0d82dc514610aaf578063a457c2d714610ac557600080fd5b806388e765ff146109cc5780638da5cb5b146109e257806395d89b4114610a005780639a5bd2dd14610a155780639a7a23d614610a3757600080fd5b806342088f1e116103a85780636b0a894c1161031a578063751039fc116102de578063751039fc146109075780637571336a1461091c5780638095d5641461093c5780638366e79a1461095c57806385b12c7c1461097c57806385ecfd281461099c57600080fd5b80636b0a894c1461087c5780636ddd17131461089257806370a08231146108b2578063715018a6146108d2578063730c1888146108e757600080fd5b806351f205e41161036c57806351f205e4146107ee578063552fd1481461080357806358a6d531146108235780635a139dd41461083a57806366d602ae146108505780636a486a8e1461086657600080fd5b806342088f1e14610768578063452ed4f11461077e578063499b83941461079e5780634a62bb65146107be5780634f77f6c0146107d857600080fd5b8063199ffc72116104415780632c3e486c116104055780632c3e486c146106bc5780632e82f1a0146106d25780632f1ffebf146106ec578063313ce5671461070c57806339509351146107285780633ad10ef61461074857600080fd5b8063199ffc72146106305780631a8145bb146106465780632307b4411461065c57806323b872dd1461067c5780632be32b611461069c57600080fd5b80630d3cbb22116104885780630d3cbb221461059957806310d5de53146105bb5780631708da75146105eb57806318160ddd14610605578063184c16c51461061a57600080fd5b8063046f9c3f146104d057806306fdde03146104f95780630758d9241461051b578063095ea7b3146105535780630d3141e01461058357600080fd5b366104cb57005b600080fd5b3480156104dc57600080fd5b506104e6602a5481565b6040519081526020015b60405180910390f35b34801561050557600080fd5b5061050e610e9b565b6040516104f0919061493a565b34801561052757600080fd5b5060095461053b906001600160a01b031681565b6040516001600160a01b0390911681526020016104f0565b34801561055f57600080fd5b5061057361056e3660046149a7565b610f2d565b60405190151581526020016104f0565b34801561058f57600080fd5b506104e6602e5481565b3480156105a557600080fd5b506105b96105b43660046149e1565b610f44565b005b3480156105c757600080fd5b506105736105d6366004614a05565b60306020526000908152604090205460ff1681565b3480156105f757600080fd5b506028546105739060ff1681565b34801561061157600080fd5b506002546104e6565b34801561062657600080fd5b506104e660265481565b34801561063c57600080fd5b506104e660225481565b34801561065257600080fd5b506104e660205481565b34801561066857600080fd5b506105b9610677366004614af8565b610f8a565b34801561068857600080fd5b50610573610697366004614bba565b6110e3565b3480156106a857600080fd5b506105b96106b7366004614bfb565b61118d565b3480156106c857600080fd5b506104e660245481565b3480156106de57600080fd5b506023546105739060ff1681565b3480156106f857600080fd5b506105b9610707366004614c14565b6112a1565b34801561071857600080fd5b50604051601281526020016104f0565b34801561073457600080fd5b506105736107433660046149a7565b611416565b34801561075457600080fd5b50600d5461053b906001600160a01b031681565b34801561077457600080fd5b506104e660295481565b34801561078a57600080fd5b50600a5461053b906001600160a01b031681565b3480156107aa57600080fd5b506105b96107b9366004614a05565b611452565b3480156107ca57600080fd5b506014546105739060ff1681565b3480156107e457600080fd5b506104e6601c5481565b3480156107fa57600080fd5b506105b96114ec565b34801561080f57600080fd5b506105b961081e366004614c44565b6115f5565b34801561082f57600080fd5b506010544310610573565b34801561084657600080fd5b506104e660185481565b34801561085c57600080fd5b506104e660075481565b34801561087257600080fd5b506104e6601b5481565b34801561088857600080fd5b506104e660135481565b34801561089e57600080fd5b506014546105739062010000900460ff1681565b3480156108be57600080fd5b506104e66108cd366004614a05565b611696565b3480156108de57600080fd5b506105b96116b1565b3480156108f357600080fd5b506105b9610902366004614cca565b611725565b34801561091357600080fd5b506105b961184e565b34801561092857600080fd5b506105b9610937366004614cf8565b6118c5565b34801561094857600080fd5b506105b9610957366004614d26565b61198d565b34801561096857600080fd5b50610573610977366004614d52565b611a48565b34801561098857600080fd5b506105b9610997366004614bfb565b611c82565b3480156109a857600080fd5b506105736109b7366004614a05565b60116020526000908152604090205460ff1681565b3480156109d857600080fd5b506104e660065481565b3480156109ee57600080fd5b506005546001600160a01b031661053b565b348015610a0c57600080fd5b5061050e612115565b348015610a2157600080fd5b50610a2a612124565b6040516104f09190614dc4565b348015610a4357600080fd5b506105b9610a52366004614cf8565b612185565b348015610a6357600080fd5b506104e6601a5481565b348015610a7957600080fd5b506104e661271081565b348015610a8f57600080fd5b506104e660275481565b348015610aa557600080fd5b506104e660215481565b348015610abb57600080fd5b506104e6601e5481565b348015610ad157600080fd5b50610573610ae03660046149a7565b612279565b348015610af157600080fd5b506104e660255481565b348015610b0757600080fd5b506104e660105481565b348015610b1d57600080fd5b50610573610b2c3660046149a7565b612312565b348015610b3d57600080fd5b506105b9610b4c366004614dd7565b61231f565b348015610b5d57600080fd5b50610573610b6c366004614a05565b60316020526000908152604090205460ff1681565b348015610b8d57600080fd5b50600e5461053b906001600160a01b031681565b348015610bad57600080fd5b5060145461057390610100900460ff1681565b348015610bcc57600080fd5b506105b9610bdb366004614c44565b61243f565b348015610bec57600080fd5b506105b9610bfb366004614cf8565b612545565b348015610c0c57600080fd5b506104e66125ce565b348015610c2157600080fd5b506105b9610c30366004614d26565b61273b565b348015610c4157600080fd5b506105b9610c50366004614bfb565b6127f6565b348015610c6157600080fd5b506016546105739060ff1681565b348015610c7b57600080fd5b506105b9610c8a366004614a05565b612901565b348015610c9b57600080fd5b506104e6602d5481565b348015610cb157600080fd5b506105b9610cc0366004614bfb565b61299b565b348015610cd157600080fd5b506104e660175481565b348015610ce757600080fd5b506105b9610cf6366004614bfb565b612ae6565b348015610d0757600080fd5b506104e6610d16366004614d52565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610d4d57600080fd5b506104e6602b5481565b348015610d6357600080fd5b506104e6600b5481565b348015610d7957600080fd5b506105b9612bf4565b348015610d8e57600080fd5b50600c5461053b906001600160a01b031681565b348015610dae57600080fd5b5061053b610dbd366004614bfb565b612c2a565b348015610dce57600080fd5b506104e6600f5481565b348015610de457600080fd5b506104e660195481565b348015610dfa57600080fd5b506105b9610e09366004614a05565b612c54565b348015610e1a57600080fd5b506105b9612d3f565b348015610e2f57600080fd5b506104e6602c5481565b348015610e4557600080fd5b506104e6601d5481565b348015610e5b57600080fd5b506104e660085481565b348015610e7157600080fd5b506104e6601f5481565b348015610e8757600080fd5b506105b9610e96366004614bfb565b612dab565b606060038054610eaa90614e23565b80601f0160208091040260200160405190810160405280929190818152602001828054610ed690614e23565b8015610f235780601f10610ef857610100808354040283529160200191610f23565b820191906000526020600020905b815481529060010190602001808311610f0657829003601f168201915b5050505050905090565b6000610f3a3384846130a5565b5060015b92915050565b6005546001600160a01b03163314610f775760405162461bcd60e51b8152600401610f6e90614e5d565b60405180910390fd5b6028805460ff1916911515919091179055565b6005546001600160a01b03163314610fb45760405162461bcd60e51b8152600401610f6e90614e5d565b80518251146110055760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610f6e565b61012c8251106110765760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203330302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610f6e565b60005b82518110156110de57600083828151811061109657611096614e92565b6020026020010151905060008383815181106110b4576110b4614e92565b602002602001015190506110c93383836131c9565b505080806110d690614ebe565b915050611079565b505050565b60006110f084848461331e565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156111755760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610f6e565b61118285338584036130a5565b506001949350505050565b6005546001600160a01b031633146111b75760405162461bcd60e51b8152600401610f6e90614e5d565b6111c36012600a614fbb565b6103e86111cf60025490565b6111da906001614fca565b6111e49190614fe9565b6111ee9190614fe9565b81101561124f5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610f6e565b61125b6012600a614fbb565b6112659082614fca565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b031633146112cb5760405162461bcd60e51b8152600401610f6e90614e5d565b601454610100900460ff16156113235760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610f6e565b600a8211156113845760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610f6e565b6014805462ffff0019166201010017905543600f8190556113a690839061500b565b601055600a80546001600160a01b0319166001600160a01b0383169081179091556113d2906001613fc9565b600a546113e9906001600160a01b0316600161402c565b6040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a15050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610f3a91859061144d90869061500b565b6130a5565b6005546001600160a01b0316331461147c5760405162461bcd60e51b8152600401610f6e90614e5d565b6001600160a01b0381166114a25760405162461bcd60e51b8152600401610f6e90615023565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b031633146115165760405162461bcd60e51b8152600401610f6e90614e5d565b600b5461152230611696565b1015611598576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610f6e565b600a805460ff60a01b1916600160a01b1790556115b361405a565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b0316331461161f5760405162461bcd60e51b8152600401610f6e90614e5d565b60005b8281101561169057816011600086868581811061164157611641614e92565b90506020020160208101906116569190614a05565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061168881614ebe565b915050611622565b50505050565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146116db5760405162461bcd60e51b8152600401610f6e90614e5d565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461174f5760405162461bcd60e51b8152600401610f6e90614e5d565b6102588310156117bd5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610f6e565b6103e882111580156117cd575060015b6118325760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610f6e565b6024929092556022556023805460ff1916911515919091179055565b6005546001600160a01b031633146118785760405162461bcd60e51b8152600401610f6e90614e5d565b6014805460ff199081169091556016805490911690556002546006556002546007556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146118ef5760405162461bcd60e51b8152600401610f6e90614e5d565b8061196257600a546001600160a01b03908116908316036119625760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610f6e565b6001600160a01b03919091166000908152603060205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146119b75760405162461bcd60e51b8152600401610f6e90614e5d565b60188390556019829055601a819055806119d1838561500b565b6119db919061500b565b60175560646119ed612710600f614fca565b6119f79190614fe9565b60175411156110de5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610f6e565b6005546000906001600160a01b03163314611a755760405162461bcd60e51b8152600401610f6e90614e5d565b6001600160a01b038316611acb5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610f6e565b6001600160a01b03831630141580611aeb5750601454610100900460ff16155b611b545760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610f6e565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611b9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bbf9190615069565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611c12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c369190615082565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b03163314611cac5760405162461bcd60e51b8152600401610f6e90614e5d565b601454610100900460ff1615611d185760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610f6e565b600960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8f919061509f565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611df1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e15919061509f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611e62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e86919061509f565b600a80546001600160a01b0319166001600160a01b03929092169182179055611eb0906001613fc9565b600a54611ec7906001600160a01b0316600161402c565b60004711611f235760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610f6e565b6000611f2e30611696565b11611f8a5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610f6e565b600954611fa59030906001600160a01b031661144d82611696565b6009546001600160a01b031663f305d7194730611fc181611696565b600e546040516001600160e01b031960e087901b168152611ff793929160009182916001600160a01b03169042906004016150bc565b60606040518083038185885af1158015612015573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061203a91906150f7565b5050507f0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b84196001600160a01b03166350d25bcd6040518163ffffffff1660e01b81526004016020604051808303816000875af115801561209d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c19190615069565b6029556014805462ffff0019166201010017905543600f8190556120e690829061500b565b6010556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b606060048054610eaa90614e23565b60606012805480602002602001604051908101604052809291908181526020018280548015610f2357602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161215e575050505050905090565b6005546001600160a01b031633146121af5760405162461bcd60e51b8152600401610f6e90614e5d565b600a546001600160a01b03908116908316036122335760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610f6e565b61223d828261402c565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156122fb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610f6e565b61230833858584036130a5565b5060019392505050565b6000610f3a33848461331e565b6005546001600160a01b031633146123495760405162461bcd60e51b8152600401610f6e90614e5d565b6064851115801561235b575060648411155b80156123675750838511155b6123ac5760405162461bcd60e51b8152602060048201526016602482015275109d5e481cd95d1d1a5b99dcc81a5b98dbdc9c9958dd60521b6044820152606401610f6e565b606483111580156123be575060648211155b80156123ca5750818311155b6124165760405162461bcd60e51b815260206004820152601760248201527f53656c6c2073657474696e677320696e636f72726563740000000000000000006044820152606401610f6e565b6028805460ff191696151596909617909555602a93909355602c91909155602b55602d55602e55565b6005546001600160a01b031633146124695760405162461bcd60e51b8152600401610f6e90614e5d565b60005b828110156116905781602f600086868581811061248b5761248b614e92565b90506020020160208101906124a09190614a05565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558383828181106124da576124da614e92565b90506020020160208101906124ef9190614a05565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78360405161252b911515815260200190565b60405180910390a28061253d81614ebe565b91505061246c565b6005546001600160a01b0316331461256f5760405162461bcd60e51b8152600401610f6e90614e5d565b6001600160a01b0382166000818152602f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b60006305f5e100670de0b6b3a76400006125e961dead611696565b6002546125f69190615125565b600a5461260b906001600160a01b0316611696565b602954600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612661573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612685919061509f565b600a546040516370a0823160e01b81526001600160a01b0391821660048201529116906370a0823190602401602060405180830381865afa1580156126ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126f29190615069565b61270490670de0b6b3a7640000614fca565b61270e9190614fca565b6127189190614fe9565b6127229190614fca565b61272c9190614fe9565b6127369190614fe9565b905090565b6005546001600160a01b031633146127655760405162461bcd60e51b8152600401610f6e90614e5d565b601c839055601d829055601e8190558061277f838561500b565b612789919061500b565b601b55606461279b6127106014614fca565b6127a59190614fe9565b601b5411156110de5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610f6e565b6005546001600160a01b031633146128205760405162461bcd60e51b8152600401610f6e90614e5d565b61282c6012600a614fbb565b606461283760025490565b612842906001614fca565b61284c9190614fe9565b6128569190614fe9565b8110156128b65760405162461bcd60e51b815260206004820152602860248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015267207468616e20312560c01b6064820152608401610f6e565b6128c26012600a614fbb565b6128cc9082614fca565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001611296565b6005546001600160a01b0316331461292b5760405162461bcd60e51b8152600401610f6e90614e5d565b6001600160a01b0381166129515760405162461bcd60e51b8152600401610f6e90615023565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f804ec39c1aea0b9f2615a34c3fa437b6ddda2c72e6848abf0f23955589a7ad5490600090a250565b6005546001600160a01b031633146129c55760405162461bcd60e51b8152600401610f6e90614e5d565b620186a06129d260025490565b6129dd906001614fca565b6129e79190614fe9565b811015612a545760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610f6e565b6103e8612a6060025490565b612a6b906001614fca565b612a759190614fe9565b811115612ae15760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610f6e565b600b55565b6005546001600160a01b03163314612b105760405162461bcd60e51b8152600401610f6e90614e5d565b612b1c6012600a614fbb565b6103e8612b2860025490565b612b33906001614fca565b612b3d9190614fe9565b612b479190614fe9565b811015612ba95760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610f6e565b612bb56012600a614fbb565b612bbf9082614fca565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001611296565b6005546001600160a01b03163314612c1e5760405162461bcd60e51b8152600401610f6e90614e5d565b6016805460ff19169055565b60128181548110612c3a57600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b03163314612c7e5760405162461bcd60e51b8152600401610f6e90614e5d565b6001600160a01b038116612ce35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f6e565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314612d695760405162461bcd60e51b8152600401610f6e90614e5d565b604051600090339047908381818185875af1925050503d8060008114611690576040519150601f19603f3d011682016040523d82523d6000602084013e611690565b6005546001600160a01b03163314612dd55760405162461bcd60e51b8152600401610f6e90614e5d565b611388811115612e455760405162461bcd60e51b815260206004820152603560248201527f4d6179206e6f74206275726e206d6f7265207468616e20353025206f6620636f6044820152746e74726163742773204c5020617420612074696d6560581b6064820152608401610f6e565b602654612e529042615125565b6027541115612e935760405162461bcd60e51b815260206004820152600d60248201526c213ab937103a37b79039b7b7b760991b6044820152606401610f6e565b42602755600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015612ee0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f049190615069565b90506000612f1130611696565b90506000612710612f228585614fca565b612f2c9190614fe9565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af1158015612f86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612faa9190615082565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec90612fe590309086906001908190849042906004016150bc565b60408051808303816000875af1158015613003573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613027919061513c565b505060008361303530611696565b61303f9190615125565b90508015613054576130543061dead836131c9565b60006130608347615125565b905080156130715761307181614262565b60405184907f81b7e7967a97e0708996ad25e859322b1c2e22612ac6798c9c95cfda2dca265f90600090a250505050505050565b6001600160a01b0383166131075760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f6e565b6001600160a01b0382166131685760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f6e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166131ef5760405162461bcd60e51b8152600401610f6e90615160565b6001600160a01b0382166132155760405162461bcd60e51b8152600401610f6e906151a5565b6001600160a01b0383166000908152602081905260409020548181101561328d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610f6e565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906132c490849061500b565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161331091815260200190565b60405180910390a350505050565b6001600160a01b0383166133445760405162461bcd60e51b8152600401610f6e90615160565b6001600160a01b03821661336a5760405162461bcd60e51b8152600401610f6e906151a5565b600081116133ba5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610f6e565b601454610100900460ff1661344d576001600160a01b0383166000908152602f602052604090205460ff168061340857506001600160a01b0382166000908152602f602052604090205460ff165b61344d5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610f6e565b601454610100900460ff161561354d576001600160a01b03831660009081526011602052604090205460ff1615801561349f57506001600160a01b03821660009081526011602052604090205460ff16155b806134b757506005546001600160a01b038381169116145b806134cc57506001600160a01b03821661dead145b61354d5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610f6e565b60145460ff161561393f576005546001600160a01b0384811691161480159061358457506005546001600160a01b03838116911614155b801561359857506001600160a01b03821615155b80156135af57506001600160a01b03821661dead14155b80156135d457506001600160a01b0383166000908152602f602052604090205460ff16155b80156135f957506001600160a01b0382166000908152602f602052604090205460ff16155b1561393f5760165460ff1615613712576009546001600160a01b038381169116148015906136355750600a546001600160a01b03838116911614155b1561371257613645600243615125565b326000908152601560205260409020541080156136835750613668600243615125565b6001600160a01b038316600090815260156020526040902054105b6136ed5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610f6e565b3260009081526015602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526031602052604090205460ff16801561375357506001600160a01b03821660009081526030602052604090205460ff16155b1561381a576006548111156137bb5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610f6e565b6008546137c783611696565b6137d1908361500b565b11156138155760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610f6e565b61393f565b6001600160a01b03821660009081526031602052604090205460ff16801561385b57506001600160a01b03831660009081526030602052604090205460ff16155b156138c5576007548111156138155760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610f6e565b6001600160a01b03821660009081526030602052604090205460ff1661393f576008546138f183611696565b6138fb908361500b565b111561393f5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610f6e565b600061394a30611696565b600b5490915081108015908190613969575060145462010000900460ff165b801561397f5750600a54600160a01b900460ff16155b80156139a457506001600160a01b03851660009081526031602052604090205460ff16155b80156139c957506001600160a01b0385166000908152602f602052604090205460ff16155b80156139ee57506001600160a01b0384166000908152602f602052604090205460ff16155b15613a1c57600a805460ff60a01b1916600160a01b179055613a0e61405a565b600a805460ff60a01b191690555b600a54600160a01b900460ff16158015613a4e57506001600160a01b03841660009081526031602052604090205460ff165b8015613a5c575060235460ff165b8015613a775750602454602554613a73919061500b565b4210155b8015613a9c57506001600160a01b0385166000908152602f602052604090205460ff16155b15613aa957613aa96143ac565b6001600160a01b0385166000908152602f602052604090205460019060ff1680613aeb57506001600160a01b0385166000908152602f602052604090205460ff165b15613af4575060005b60285460009060ff168015613b105750601454610100900460ff165b8015613b265750600a54600160a01b900460ff16155b15613bba577f0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b84196001600160a01b03166350d25bcd6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015613b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613baf9190615069565b602955613bba6145c6565b8115613fb55760105443108015613be957506001600160a01b03871660009081526031602052604090205460ff165b8015613c0e57506001600160a01b03861660009081526031602052604090205460ff16155b8015613c3357506001600160a01b0386166000908152602f602052604090205460ff16155b8015613c4157506000601754115b15613dfc576010544310613c6857600160066000828254613c629190615125565b90915550505b6001600160a01b03861660009081526011602052604090205460ff16613d48576001600160a01b0386166000908152601160205260408120805460ff191660019081179091556013805491929091613cc190849061500b565b9091555050601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b61271060175486613d599190614fca565b613d639190614fe9565b905060175460195482613d769190614fca565b613d809190614fe9565b60206000828254613d91919061500b565b9091555050601754601854613da69083614fca565b613db09190614fe9565b601f6000828254613dc1919061500b565b9091555050601754601a54613dd69083614fca565b613de09190614fe9565b60216000828254613df1919061500b565b90915550613f979050565b6001600160a01b03861660009081526031602052604090205460ff168015613e2657506000601b54115b15613eb957612710601b5486613e3c9190614fca565b613e469190614fe9565b9050601b54601d5482613e599190614fca565b613e639190614fe9565b60206000828254613e74919061500b565b9091555050601b54601c54613e899083614fca565b613e939190614fe9565b601f6000828254613ea4919061500b565b9091555050601b54601e54613dd69083614fca565b6001600160a01b03871660009081526031602052604090205460ff168015613ee357506000601754115b15613f975761271060175486613ef99190614fca565b613f039190614fe9565b905060175460195482613f169190614fca565b613f209190614fe9565b60206000828254613f31919061500b565b9091555050601754601854613f469083614fca565b613f509190614fe9565b601f6000828254613f61919061500b565b9091555050601754601a54613f769083614fca565b613f809190614fe9565b60216000828254613f91919061500b565b90915550505b8015613fa857613fa88730836131c9565b613fb28186615125565b94505b613fc08787876131c9565b50505050505050565b6001600160a01b038216600081815260306020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152603160205260409020805460ff191682151517905561223d8282613fc9565b600061406530611696565b90506000602154601f5460205461407c919061500b565b614086919061500b565b9050811580614093575080155b1561409c575050565b600b546140aa906014614fca565b8211156140c257600b546140bf906014614fca565b91505b600080600283602054866140d69190614fca565b6140e09190614fe9565b6140ea9190614fe9565b90506140fe6140f98286615125565b614741565b6020544790819060009061411490600290614fe9565b61411e9087615125565b601f5461412b9085614fca565b6141359190614fe9565b9050600060026020546141489190614fe9565b6141529088615125565b60215461415f9086614fca565b6141699190614fe9565b9050614175818361500b565b61417f9084615125565b60006020819055601f8190556021559250841580159061419f5750600083115b156141ae576141ae858461489b565b600d546040516001600160a01b03909116908290600081818185875af1925050503d80600081146141fb576040519150601f19603f3d011682016040523d82523d6000602084013e614200565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d8060008114614250576040519150601f19603f3d011682016040523d82523d6000602084013e614255565b606091505b5050505050505050505050565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156142cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f0919061509f565b8160008151811061430357614303614e92565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061433757614337614e92565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de9590849061437f90600090869061dead9042906004016151e8565b6000604051808303818588803b15801561439857600080fd5b505af1158015613fc0573d6000803e3d6000fd5b426025819055602755600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156143fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144229190615069565b9050600061442f30611696565b90506000612710602254846144449190614fca565b61444e9190614fe9565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af11580156144a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144cc9190615082565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec9061450790309086906001908190849042906004016150bc565b60408051808303816000875af1158015614525573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614549919061513c565b505060008361455730611696565b6145619190615125565b90508015614576576145763061dead836131c9565b60006145828347615125565b905080156145935761459381614262565b60405184907f30464008593337c7762c84338a125f5c481ce1997dbf1d7931bcce0b6430787a90600090a2505050505050565b60006145d06125ce565b90506000602a54670de0b6b3a7640000602c54602e54856145f19190614fe9565b6145fb9190614fca565b6146059190614fe9565b61460f919061500b565b90506000602b54670de0b6b3a7640000602d54602e54866146309190614fe9565b61463a9190614fca565b6146449190614fe9565b61464e919061500b565b9050602c5482111561466057602c5491505b602d5481111561466f5750602d545b60648260175461467f9190614fca565b6146899190614fe9565b601981905560175460649161469d91615125565b6146a8906021614fca565b6146b29190614fe9565b601881905560195460175490916146c891615125565b6146d29190615125565b601a55601b546064906146e6908390614fca565b6146f09190614fe9565b601d819055601b5460649161470491615125565b61470f906032614fca565b6147199190614fe9565b601c819055601d54601b54909161472f91615125565b6147399190615125565b601e55505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061477657614776614e92565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156147cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147f3919061509f565b8160018151811061480657614806614e92565b6001600160a01b03928316602091820292909201015260095461482c91309116846130a5565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac9479061486590859060009086903090429060040161521d565b600060405180830381600087803b15801561487f57600080fd5b505af1158015614893573d6000803e3d6000fd5b505050505050565b6009546148b39030906001600160a01b0316846130a5565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906148f090309087906000908190849042906004016150bc565b60606040518083038185885af115801561490e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061493391906150f7565b5050505050565b600060208083528351808285015260005b818110156149675785810183015185820160400152820161494b565b81811115614979576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146149a457600080fd5b50565b600080604083850312156149ba57600080fd5b82356149c58161498f565b946020939093013593505050565b80151581146149a457600080fd5b6000602082840312156149f357600080fd5b81356149fe816149d3565b9392505050565b600060208284031215614a1757600080fd5b81356149fe8161498f565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614a6157614a61614a22565b604052919050565b600067ffffffffffffffff821115614a8357614a83614a22565b5060051b60200190565b600082601f830112614a9e57600080fd5b81356020614ab3614aae83614a69565b614a38565b82815260059290921b84018101918181019086841115614ad257600080fd5b8286015b84811015614aed5780358352918301918301614ad6565b509695505050505050565b60008060408385031215614b0b57600080fd5b823567ffffffffffffffff80821115614b2357600080fd5b818501915085601f830112614b3757600080fd5b81356020614b47614aae83614a69565b82815260059290921b84018101918181019089841115614b6657600080fd5b948201945b83861015614b8d578535614b7e8161498f565b82529482019490820190614b6b565b96505086013592505080821115614ba357600080fd5b50614bb085828601614a8d565b9150509250929050565b600080600060608486031215614bcf57600080fd5b8335614bda8161498f565b92506020840135614bea8161498f565b929592945050506040919091013590565b600060208284031215614c0d57600080fd5b5035919050565b60008060408385031215614c2757600080fd5b823591506020830135614c398161498f565b809150509250929050565b600080600060408486031215614c5957600080fd5b833567ffffffffffffffff80821115614c7157600080fd5b818601915086601f830112614c8557600080fd5b813581811115614c9457600080fd5b8760208260051b8501011115614ca957600080fd5b60209283019550935050840135614cbf816149d3565b809150509250925092565b600080600060608486031215614cdf57600080fd5b83359250602084013591506040840135614cbf816149d3565b60008060408385031215614d0b57600080fd5b8235614d168161498f565b91506020830135614c39816149d3565b600080600060608486031215614d3b57600080fd5b505081359360208301359350604090920135919050565b60008060408385031215614d6557600080fd5b8235614d708161498f565b91506020830135614c398161498f565b600081518084526020808501945080840160005b83811015614db95781516001600160a01b031687529582019590820190600101614d94565b509495945050505050565b6020815260006149fe6020830184614d80565b60008060008060008060c08789031215614df057600080fd5b8635614dfb816149d3565b9860208801359850604088013597606081013597506080810135965060a00135945092505050565b600181811c90821680614e3757607f821691505b602082108103614e5757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201614ed057614ed0614ea8565b5060010190565b600181815b80851115614f12578160001904821115614ef857614ef8614ea8565b80851615614f0557918102915b93841c9390800290614edc565b509250929050565b600082614f2957506001610f3e565b81614f3657506000610f3e565b8160018114614f4c5760028114614f5657614f72565b6001915050610f3e565b60ff841115614f6757614f67614ea8565b50506001821b610f3e565b5060208310610133831016604e8410600b8410161715614f95575081810a610f3e565b614f9f8383614ed7565b8060001904821115614fb357614fb3614ea8565b029392505050565b60006149fe60ff841683614f1a565b6000816000190483118215151615614fe457614fe4614ea8565b500290565b60008261500657634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561501e5761501e614ea8565b500190565b60208082526026908201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60408201526507420626520360d41b606082015260800190565b60006020828403121561507b57600080fd5b5051919050565b60006020828403121561509457600080fd5b81516149fe816149d3565b6000602082840312156150b157600080fd5b81516149fe8161498f565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561510c57600080fd5b8351925060208401519150604084015190509250925092565b60008282101561513757615137614ea8565b500390565b6000806040838503121561514f57600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8481526080602082015260006152016080830186614d80565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061523c60a0830186614d80565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220999d467cd22df3b2ef370db96c607a343631eddedd735e7ff57c5528d499520b64736f6c634300080f0033

Deployed Bytecode Sourcemap

9761:29766:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11647:37;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;11647:37:0;;;;;;;;4077:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9903:27::-;;;;;;;;;;-1:-1:-1;9903:27:0;;;;-1:-1:-1;;;;;9903:27:0;;;;;;-1:-1:-1;;;;;980:32:1;;;962:51;;950:2;935:18;9903:27:0;798:221:1;4991:169:0;;;;;;;;;;-1:-1:-1;4991:169:0;;;;;:::i;:::-;;:::i;:::-;;;1645:14:1;;1638:22;1620:41;;1608:2;1593:18;4991:169:0;1480:187:1;11825:45:0;;;;;;;;;;;;;;;;16814:115;;;;;;;;;;-1:-1:-1;16814:115:0;;;;;:::i;:::-;;:::i;:::-;;12026:64;;;;;;;;;;-1:-1:-1;12026:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11560:40;;;;;;;;;;-1:-1:-1;11560:40:0;;;;;;;;4398:108;;;;;;;;;;-1:-1:-1;4486:12:0;;4398:108;;11426:47;;;;;;;;;;;;;;;;11236:36;;;;;;;;;;;;;;;;11160:33;;;;;;;;;;;;;;;;19929:618;;;;;;;;;;-1:-1:-1;19929:618:0;;;;;:::i;:::-;;:::i;5168:492::-;;;;;;;;;;-1:-1:-1;5168:492:0;;;;;:::i;:::-;;:::i;18378:295::-;;;;;;;;;;-1:-1:-1;18378:295:0;;;;;:::i;:::-;;:::i;11332:45::-;;;;;;;;;;;;;;;;11292:33;;;;;;;;;;-1:-1:-1;11292:33:0;;;;;;;;16941:626;;;;;;;;;;-1:-1:-1;16941:626:0;;;;;:::i;:::-;;:::i;4297:93::-;;;;;;;;;;-1:-1:-1;4297:93:0;;4380:2;5888:36:1;;5876:2;5861:18;4297:93:0;5746:184:1;5668:215:0;;;;;;;;;;-1:-1:-1;5668:215:0;;;;;:::i;:::-;;:::i;10124:25::-;;;;;;;;;;-1:-1:-1;10124:25:0;;;;-1:-1:-1;;;;;10124:25:0;;;11607:33;;;;;;;;;;;;;;;;9937:21;;;;;;;;;;-1:-1:-1;9937:21:0;;;;-1:-1:-1;;;;;9937:21:0;;;31685:297;;;;;;;;;;-1:-1:-1;31685:297:0;;;;;:::i;:::-;;:::i;10428:33::-;;;;;;;;;;-1:-1:-1;10428:33:0;;;;;;;;10956:32;;;;;;;;;;;;;;;;32294:312;;;;;;;;;;;;;:::i;17979:228::-;;;;;;;;;;-1:-1:-1;17979:228:0;;;;;:::i;:::-;;:::i;28259:120::-;;;;;;;;;;-1:-1:-1;28353:18:0;;28338:12;:33;28259:120;;10813:31;;;;;;;;;;;;;;;;9835:28;;;;;;;;;;;;;;;;10921;;;;;;;;;;;;;;;;10394:25;;;;;;;;;;;;;;;;10508:31;;;;;;;;;;-1:-1:-1;10508:31:0;;;;;;;;;;;4514:127;;;;;;;;;;-1:-1:-1;4514:127:0;;;;;:::i;:::-;;:::i;8158:150::-;;;;;;;;;;;;;:::i;33911:447::-;;;;;;;;;;-1:-1:-1;33911:447:0;;;;;:::i;:::-;;:::i;17623:237::-;;;;;;;;;;;;;:::i;20559:260::-;;;;;;;;;;-1:-1:-1;20559:260:0;;;;;:::i;:::-;;:::i;21372:393::-;;;;;;;;;;-1:-1:-1;21372:393:0;;;;;:::i;:::-;;:::i;30949:498::-;;;;;;;;;;-1:-1:-1;30949:498:0;;;;;:::i;:::-;;:::i;32614:1289::-;;;;;;;;;;-1:-1:-1;32614:1289:0;;;;;:::i;:::-;;:::i;10308:44::-;;;;;;;;;;-1:-1:-1;10308:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9801:27;;;;;;;;;;;;;;;;7944:79;;;;;;;;;;-1:-1:-1;8009:6:0;;-1:-1:-1;;;;;8009:6:0;7944:79;;4185:104;;;;;;;;;;;;;:::i;17868:103::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;20827:293::-;;;;;;;;;;-1:-1:-1;20827:293:0;;;;;:::i;:::-;;:::i;10888:24::-;;;;;;;;;;;;;;;;11067:43;;;;;;;;;;;;11105:5;11067:43;;11480:35;;;;;;;;;;;;;;;;11200:27;;;;;;;;;;;;;;;;11033:25;;;;;;;;;;;;;;;;5891:413;;;;;;;;;;-1:-1:-1;5891:413:0;;;;;:::i;:::-;;:::i;11384:29::-;;;;;;;;;;;;;;;;10268:33;;;;;;;;;;;;;;;;4649:175;;;;;;;;;;-1:-1:-1;4649:175:0;;;;;:::i;:::-;;:::i;37674:836::-;;;;;;;;;;-1:-1:-1;37674:836:0;;;;;:::i;:::-;;:::i;12248:58::-;;;;;;;;;;-1:-1:-1;12248:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10156:26;;;;;;;;;;-1:-1:-1;10156:26:0;;;;-1:-1:-1;;;;;10156:26:0;;;10468:33;;;;;;;;;;-1:-1:-1;10468:33:0;;;;;;;;;;;22183:282;;;;;;;;;;-1:-1:-1;22183:282:0;;;;;:::i;:::-;;:::i;22473:182::-;;;;;;;;;;-1:-1:-1;22473:182:0;;;;;:::i;:::-;;:::i;37427:239::-;;;;;;;;;;;;;:::i;21773:402::-;;;;;;;;;;-1:-1:-1;21773:402:0;;;;;:::i;:::-;;:::i;18993:293::-;;;;;;;;;;-1:-1:-1;18993:293:0;;;;;:::i;:::-;;:::i;10731:39::-;;;;;;;;;;-1:-1:-1;10731:39:0;;;;;;;;31994:248;;;;;;;;;;-1:-1:-1;31994:248:0;;;;;:::i;:::-;;:::i;11780:38::-;;;;;;;;;;;;;;;;19356:346;;;;;;;;;;-1:-1:-1;19356:346:0;;;;;:::i;:::-;;:::i;10779:27::-;;;;;;;;;;;;;;;;18685:300;;;;;;;;;;-1:-1:-1;18685:300:0;;;;;:::i;:::-;;:::i;4832:151::-;;;;;;;;;;-1:-1:-1;4832:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;4948:18:0;;;4921:7;4948:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4832:151;11691:38;;;;;;;;;;;;;;;;10043:33;;;;;;;;;;;;;;;;18268:98;;;;;;;;;;;;;:::i;10085:32::-;;;;;;;;;;-1:-1:-1;10085:32:0;;;;-1:-1:-1;;;;;10085:32:0;;;10359:28;;;;;;;;;;-1:-1:-1;10359:28:0;;;;;:::i;:::-;;:::i;10191:37::-;;;;;;;;;;;;;;;;10851:30;;;;;;;;;;;;;;;;8316:244;;;;;;;;;;-1:-1:-1;8316:244:0;;;;;:::i;:::-;;:::i;31517:160::-;;;;;;;;;;;;;:::i;11736:37::-;;;;;;;;;;;;;;;;10995:31;;;;;;;;;;;;;;;;9870:24;;;;;;;;;;;;;;;;11119:34;;;;;;;;;;;;;;;;35630:1399;;;;;;;;;;-1:-1:-1;35630:1399:0;;;;;:::i;:::-;;:::i;4077:100::-;4131:13;4164:5;4157:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4077:100;:::o;4991:169::-;5074:4;5091:39;306:10;5114:7;5123:6;5091:8;:39::i;:::-;-1:-1:-1;5148:4:0;4991:169;;;;;:::o;16814:115::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;;;;;;;;;16891:21:::1;:30:::0;;-1:-1:-1;;16891:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16814:115::o;19929:618::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;20071:15:::1;:22;20053:7;:14;:40;20045:83;;;::::0;-1:-1:-1;;;20045:83:0;;10650:2:1;20045:83:0::1;::::0;::::1;10632:21:1::0;10689:2;10669:18;;;10662:30;10728:32;10708:18;;;10701:60;10778:18;;20045:83:0::1;10448:354:1::0;20045:83:0::1;20164:3;20147:7;:14;:20;20139:87;;;::::0;-1:-1:-1;;;20139:87:0;;11009:2:1;20139:87:0::1;::::0;::::1;10991:21:1::0;11048:2;11028:18;;;11021:30;11087:34;11067:18;;;11060:62;-1:-1:-1;;;11138:18:1;;;11131:52;11200:19;;20139:87:0::1;10807:418:1::0;20139:87:0::1;20339:9;20335:205;20358:7;:14;20354:1;:18;20335:205;;;20393:14;20410:7;20418:1;20410:10;;;;;;;;:::i;:::-;;;;;;;20393:27;;20435:14;20452:15;20468:1;20452:18;;;;;;;;:::i;:::-;;;;;;;20435:35;;20485:43;20501:10;20513:6;20521;20485:15;:43::i;:::-;20378:162;;20374:3;;;;;:::i;:::-;;;;20335:205;;;;19929:618:::0;;:::o;5168:492::-;5308:4;5325:36;5335:6;5343:9;5354:6;5325:9;:36::i;:::-;-1:-1:-1;;;;;5401:19:0;;5374:24;5401:19;;;:11;:19;;;;;;;;306:10;5401:33;;;;;;;;5453:26;;;;5445:79;;;;-1:-1:-1;;;5445:79:0;;11836:2:1;5445:79:0;;;11818:21:1;11875:2;11855:18;;;11848:30;11914:34;11894:18;;;11887:62;-1:-1:-1;;;11965:18:1;;;11958:38;12013:19;;5445:79:0;11634:404:1;5445:79:0;5560:57;5569:6;306:10;5610:6;5591:16;:25;5560:8;:57::i;:::-;-1:-1:-1;5648:4:0;;5168:492;-1:-1:-1;;;;5168:492:0:o;18378:295::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;18500:16:::1;4380:2:::0;18500::::1;:16;:::i;:::-;18491:4;18471:13;4486:12:::0;;;4398:108;18471:13:::1;:17;::::0;18487:1:::1;18471:17;:::i;:::-;:24;;;;:::i;:::-;18470:47;;;;:::i;:::-;18460:6;:57;;18452:111;;;::::0;-1:-1:-1;;;18452:111:0;;14023:2:1;18452:111:0::1;::::0;::::1;14005:21:1::0;14062:2;14042:18;;;14035:30;14101:34;14081:18;;;14074:62;-1:-1:-1;;;14152:18:1;;;14145:39;14201:19;;18452:111:0::1;13821:405:1::0;18452:111:0::1;18599:16;4380:2:::0;18599::::1;:16;:::i;:::-;18589:27;::::0;:6;:27:::1;:::i;:::-;18574:12;:42:::0;;;18632:33:::1;::::0;160:25:1;;;18632:33:0::1;::::0;148:2:1;133:18;18632:33:0::1;;;;;;;;18378:295:::0;:::o;16941:626::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;17046:13:::1;::::0;::::1;::::0;::::1;;;17045:14;17037:50;;;::::0;-1:-1:-1;;;17037:50:0;;14433:2:1;17037:50:0::1;::::0;::::1;14415:21:1::0;14472:2;14452:18;;;14445:30;14511:25;14491:18;;;14484:53;14554:18;;17037:50:0::1;14231:347:1::0;17037:50:0::1;17126:2;17106:16;:22;;17098:74;;;::::0;-1:-1:-1;;;17098:74:0;;14785:2:1;17098:74:0::1;::::0;::::1;14767:21:1::0;14824:2;14804:18;;;14797:30;14863:34;14843:18;;;14836:62;-1:-1:-1;;;14914:18:1;;;14907:37;14961:19;;17098:74:0::1;14583:403:1::0;17098:74:0::1;17183:13;:20:::0;;-1:-1:-1;;17214:18:0;;;;;17264:12:::1;17243:18;:33:::0;;;17308:37:::1;::::0;17329:16;;17308:37:::1;:::i;:::-;17287:18;:58:::0;17387:6:::1;:16:::0;;-1:-1:-1;;;;;;17387:16:0::1;-1:-1:-1::0;;;;;17387:16:0;::::1;::::0;;::::1;::::0;;;17414:49:::1;::::0;-1:-1:-1;17414:26:0::1;:49::i;:::-;17511:6;::::0;17474:51:::1;::::0;-1:-1:-1;;;;;17511:6:0::1;::::0;17474:28:::1;:51::i;:::-;17543:16;::::0;::::1;::::0;;;::::1;16941:626:::0;;:::o;5668:215::-;306:10;5756:4;5805:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5805:34:0;;;;;;;;;;5756:4;;5773:80;;5796:7;;5805:47;;5842:10;;5805:47;:::i;:::-;5773:8;:80::i;31685:297::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31781:32:0;::::1;31773:83;;;;-1:-1:-1::0;;;31773:83:0::1;;;;;;;:::i;:::-;31867:17;:47:::0;;-1:-1:-1;;;;;;31867:47:0::1;-1:-1:-1::0;;;;;31867:47:0;::::1;::::0;;::::1;::::0;;;31930:44:::1;::::0;::::1;::::0;-1:-1:-1;;31930:44:0::1;31685:297:::0;:::o;32294:312::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;32385:18:::1;;32357:24;32375:4;32357:9;:24::i;:::-;:46;;32349:123;;;::::0;;-1:-1:-1;;;32349:123:0;;15733:2:1;32349:123:0::1;::::0;::::1;15715:21:1::0;15752:18;;;15745:30;;;;15811:34;15791:18;;;15784:62;15882:34;15862:18;;;15855:62;15934:19;;32349:123:0::1;15531:428:1::0;32349:123:0::1;32483:8;:15:::0;;-1:-1:-1;;;;32483:15:0::1;-1:-1:-1::0;;;32483:15:0::1;::::0;;32509:10:::1;:8;:10::i;:::-;32530:8;:16:::0;;-1:-1:-1;;;;32530:16:0::1;::::0;;32562:36:::1;::::0;32582:15:::1;160:25:1::0;;32562:36:0::1;::::0;148:2:1;133:18;32562:36:0::1;;;;;;;32294:312::o:0;17979:228::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;18096:9:::1;18092:108;18111:19:::0;;::::1;18092:108;;;18178:10;18151:11;:24;18163:8;;18172:1;18163:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18151:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;18151:24:0;:37;;-1:-1:-1;;18151:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18132:3;::::1;::::0;::::1;:::i;:::-;;;;18092:108;;;;17979:228:::0;;;:::o;4514:127::-;-1:-1:-1;;;;;4615:18:0;4588:7;4615:18;;;;;;;;;;;;4514:127::o;8158:150::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;8251:6:::1;::::0;8230:40:::1;::::0;8267:1:::1;::::0;-1:-1:-1;;;;;8251:6:0::1;::::0;8230:40:::1;::::0;8267:1;;8230:40:::1;8281:6;:19:::0;;-1:-1:-1;;;;;;8281:19:0::1;::::0;;8158:150::o;33911:447::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;34065:3:::1;34042:19;:26;;34034:90;;;::::0;-1:-1:-1;;;34034:90:0;;16166:2:1;34034:90:0::1;::::0;::::1;16148:21:1::0;16205:2;16185:18;;;16178:30;16244:34;16224:18;;;16217:62;-1:-1:-1;;;16295:18:1;;;16288:49;16354:19;;34034:90:0::1;15964:415:1::0;34034:90:0::1;34155:4;34143:8;:16;;:33;;;;-1:-1:-1::0;34163:13:0;34143:33:::1;34135:94;;;::::0;-1:-1:-1;;;34135:94:0;;16586:2:1;34135:94:0::1;::::0;::::1;16568:21:1::0;16625:2;16605:18;;;16598:30;16664:34;16644:18;;;16637:62;-1:-1:-1;;;16715:18:1;;;16708:46;16771:19;;34135:94:0::1;16384:412:1::0;34135:94:0::1;34240:15;:37:::0;;;;34288:16:::1;:27:::0;34326:13:::1;:24:::0;;-1:-1:-1;;34326:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33911:447::o;17623:237::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;17679:14:::1;:22:::0;;-1:-1:-1;;17679:22:0;;::::1;::::0;;;17712:20:::1;:28:::0;;;;::::1;::::0;;4486:12;;17751::::1;:28:::0;4486:12;;17790:13:::1;:29:::0;17837:15:::1;::::0;::::1;::::0;;;::::1;17623:237::o:0;20559:260::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;20655:4:::1;20651:104;;20693:6;::::0;-1:-1:-1;;;;;20693:6:0;;::::1;20683:16:::0;;::::1;::::0;20675:68:::1;;;::::0;-1:-1:-1;;;20675:68:0;;17003:2:1;20675:68:0::1;::::0;::::1;16985:21:1::0;17042:2;17022:18;;;17015:30;17081:34;17061:18;;;17054:62;-1:-1:-1;;;17132:18:1;;;17125:37;17179:19;;20675:68:0::1;16801:403:1::0;20675:68:0::1;-1:-1:-1::0;;;;;20765:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;20765:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20559:260::o;21372:393::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;21489:16:::1;:33:::0;;;21533:15:::1;:31:::0;;;21575:9:::1;:19:::0;;;21587:7;21620:34:::1;21551:13:::0;21508:14;21620:34:::1;:::i;:::-;:46;;;;:::i;:::-;21605:12;:61:::0;21720:3:::1;21701:16;11105:5;21701:2;:16;:::i;:::-;:22;;;;:::i;:::-;21685:12;;:38;;21677:80;;;::::0;-1:-1:-1;;;21677:80:0;;17411:2:1;21677:80:0::1;::::0;::::1;17393:21:1::0;17450:2;17430:18;;;17423:30;17489:31;17469:18;;;17462:59;17538:18;;21677:80:0::1;17209:353:1::0;30949:498:0;8071:6;;31036:10;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31067:20:0;::::1;31059:59;;;::::0;-1:-1:-1;;;31059:59:0;;17769:2:1;31059:59:0::1;::::0;::::1;17751:21:1::0;17808:2;17788:18;;;17781:30;17847:28;17827:18;;;17820:56;17893:18;;31059:59:0::1;17567:350:1::0;31059:59:0::1;-1:-1:-1::0;;;;;31137:23:0;::::1;31155:4;31137:23;;::::0;:41:::1;;-1:-1:-1::0;31165:13:0::1;::::0;::::1;::::0;::::1;;;31164:14;31137:41;31129:106;;;::::0;-1:-1:-1;;;31129:106:0;;18124:2:1;31129:106:0::1;::::0;::::1;18106:21:1::0;18163:2;18143:18;;;18136:30;18202:34;18182:18;;;18175:62;-1:-1:-1;;;18253:18:1;;;18246:50;18313:19;;31129:106:0::1;17922:416:1::0;31129:106:0::1;31273:39;::::0;-1:-1:-1;;;31273:39:0;;31306:4:::1;31273:39;::::0;::::1;962:51:1::0;31246:24:0::1;::::0;-1:-1:-1;;;;;31273:24:0;::::1;::::0;::::1;::::0;935:18:1;;31273:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31331:46;::::0;-1:-1:-1;;;31331:46:0;;-1:-1:-1;;;;;18724:32:1;;;31331:46:0::1;::::0;::::1;18706:51:1::0;18773:18;;;18766:34;;;31246:66:0;;-1:-1:-1;31331:23:0;;::::1;::::0;::::1;::::0;18679:18:1;;31331:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31393;::::0;;-1:-1:-1;;;;;18724:32:1;;18706:51;;18788:2;18773:18;;18766:34;;;31323:54:0;;-1:-1:-1;31393:46:0::1;::::0;18679:18:1;31393:46:0::1;;;;;;;31048:399;30949:498:::0;;;;:::o;32614:1289::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;32695:13:::1;::::0;::::1;::::0;::::1;;;32694:14;32686:70;;;::::0;-1:-1:-1;;;32686:70:0;;19263:2:1;32686:70:0::1;::::0;::::1;19245:21:1::0;19302:2;19282:18;;;19275:30;19341:34;19321:18;;;19314:62;-1:-1:-1;;;19392:18:1;;;19385:41;19443:19;;32686:70:0::1;19061:407:1::0;32686:70:0::1;32814:9;;;;;;;;;-1:-1:-1::0;;;;;32814:9:0::1;-1:-1:-1::0;;;;;32814:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32802:43:0::1;;32854:4;32861:9;;;;;;;;;-1:-1:-1::0;;;;;32861:9:0::1;-1:-1:-1::0;;;;;32861:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32802:76;::::0;-1:-1:-1;;;;;;32802:76:0::1;::::0;;;;;;-1:-1:-1;;;;;19959:15:1;;;32802:76:0::1;::::0;::::1;19941:34:1::0;20011:15;;19991:18;;;19984:43;19876:18;;32802:76:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32793:6;:85:::0;;-1:-1:-1;;;;;;32793:85:0::1;-1:-1:-1::0;;;;;32793:85:0;;;::::1;::::0;;::::1;::::0;;32889:49:::1;::::0;-1:-1:-1;32889:26:0::1;:49::i;:::-;32986:6;::::0;32949:51:::1;::::0;-1:-1:-1;;;;;32986:6:0::1;::::0;32949:28:::1;:51::i;:::-;33080:1;33056:21;:25;33048:73;;;::::0;-1:-1:-1;;;33048:73:0;;20240:2:1;33048:73:0::1;::::0;::::1;20222:21:1::0;20279:2;20259:18;;;20252:30;20318:34;20298:18;;;20291:62;-1:-1:-1;;;20369:18:1;;;20362:33;20412:19;;33048:73:0::1;20038:399:1::0;33048:73:0::1;33169:1;33142:24;33160:4;33142:9;:24::i;:::-;:28;33134:79;;;::::0;-1:-1:-1;;;33134:79:0;;20644:2:1;33134:79:0::1;::::0;::::1;20626:21:1::0;20683:2;20663:18;;;20656:30;20722:34;20702:18;;;20695:62;-1:-1:-1;;;20773:18:1;;;20766:36;20819:19;;33134:79:0::1;20442:402:1::0;33134:79:0::1;33258:9;::::0;33226:69:::1;::::0;33243:4:::1;::::0;-1:-1:-1;;;;;33258:9:0::1;33270:24;33243:4:::0;33270:9:::1;:24::i;33226:69::-;33306:9;::::0;-1:-1:-1;;;;;33306:9:0::1;:25;33339:21;33384:4;33404:24;33384:4:::0;33404:9:::1;:24::i;:::-;33537:11;::::0;33306:284:::1;::::0;-1:-1:-1;;;;;;33306:284:0::1;::::0;;;;;;::::1;::::0;;;33443:1:::1;::::0;;;-1:-1:-1;;;;;33537:11:0::1;::::0;33564:15:::1;::::0;33306:284:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;33628:9;-1:-1:-1::0;;;;;33628:22:0::1;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33603:14;:50:::0;33701:13:::1;:20:::0;;-1:-1:-1;;33732:18:0;;;;;33782:12:::1;33761:18;:33:::0;;;33826:37:::1;::::0;33847:16;;33826:37:::1;:::i;:::-;33805:18;:58:::0;33879:16:::1;::::0;::::1;::::0;;;::::1;32614:1289:::0;:::o;4185:104::-;4241:13;4274:7;4267:14;;;;;:::i;17868:103::-;17917:16;17952:11;17945:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17945:18:0;;;;;;;;;;;;;;;;;;;;;;17868:103;:::o;20827:293::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;20936:6:::1;::::0;-1:-1:-1;;;;;20936:6:0;;::::1;20928:14:::0;;::::1;::::0;20920:84:::1;;;::::0;-1:-1:-1;;;20920:84:0;;22162:2:1;20920:84:0::1;::::0;::::1;22144:21:1::0;22201:2;22181:18;;;22174:30;22240:34;22220:18;;;22213:62;22311:27;22291:18;;;22284:55;22356:19;;20920:84:0::1;21960:421:1::0;20920:84:0::1;21015:41;21044:4;21050:5;21015:28;:41::i;:::-;21072:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;21072:40:0;::::1;::::0;::::1;::::0;;;::::1;20827:293:::0;;:::o;5891:413::-;306:10;5984:4;6028:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6028:34:0;;;;;;;;;;6081:35;;;;6073:85;;;;-1:-1:-1;;;6073:85:0;;22588:2:1;6073:85:0;;;22570:21:1;22627:2;22607:18;;;22600:30;22666:34;22646:18;;;22639:62;-1:-1:-1;;;22717:18:1;;;22710:35;22762:19;;6073:85:0;22386:401:1;6073:85:0;6194:67;306:10;6217:7;6245:15;6226:16;:34;6194:8;:67::i;:::-;-1:-1:-1;6292:4:0;;5891:413;-1:-1:-1;;;5891:413:0:o;4649:175::-;4735:4;4752:42;306:10;4776:9;4787:6;4752:9;:42::i;37674:836::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;37940:3:::1;37918:18;:25;;:54;;;;;37969:3;37947:18;:25;;37918:54;:98;;;;;37998:18;37976;:40;;37918:98;37910:133;;;::::0;-1:-1:-1;;;37910:133:0;;22994:2:1;37910:133:0::1;::::0;::::1;22976:21:1::0;23033:2;23013:18;;;23006:30;-1:-1:-1;;;23052:18:1;;;23045:52;23114:18;;37910:133:0::1;22792:346:1::0;37910:133:0::1;38085:3;38062:19;:26;;:56;;;;;38115:3;38092:19;:26;;38062:56;:102;;;;;38145:19;38122;:42;;38062:102;38054:138;;;::::0;-1:-1:-1;;;38054:138:0;;23345:2:1;38054:138:0::1;::::0;::::1;23327:21:1::0;23384:2;23364:18;;;23357:30;23423:25;23403:18;;;23396:53;23466:18;;38054:138:0::1;23143:347:1::0;38054:138:0::1;38203:21;:46:::0;;-1:-1:-1;;38203:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;38260:17:::1;:38:::0;;;;38309:17:::1;:38:::0;;;;38358:18:::1;:40:::0;38409:18:::1;:40:::0;38460:19:::1;:42:::0;37674:836::o;22183:282::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;22290:9:::1;22286:172;22305:19:::0;;::::1;22286:172;;;22380:8;22345:19;:32;22365:8;;22374:1;22365:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22345:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;22345:32:0;:43;;-1:-1:-1;;22345:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22424:8;;22433:1;22424:11;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22408:38:0::1;;22437:8;22408:38;;;;1645:14:1::0;1638:22;1620:41;;1608:2;1593:18;;1480:187;22408:38:0::1;;;;;;;;22326:3:::0;::::1;::::0;::::1;:::i;:::-;;;;22286:172;;22473:182:::0;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22558:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;22558:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;22613:34;;1620:41:1;;;22613:34:0::1;::::0;1593:18:1;22613:34:0::1;;;;;;;22473:182:::0;;:::o;37427:239::-;37467:7;37653:3;37646:4;37616:26;37634:6;37616:9;:26::i;:::-;4486:12;;37602:40;;;;:::i;:::-;37590:6;;37572:26;;-1:-1:-1;;;;;37590:6:0;37572:9;:26::i;:::-;37555:14;;37501:9;;;;;;;;;-1:-1:-1;;;;;37501:9:0;-1:-1:-1;;;;;37501:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37537:6;;37494:51;;-1:-1:-1;;;37494:51:0;;-1:-1:-1;;;;;37537:6:0;;;37494:51;;;962::1;37494:34:0;;;;;935:18:1;;37494:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;37548:4;37494:58;:::i;:::-;:75;;;;:::i;:::-;:104;;;;:::i;:::-;:149;;;;:::i;:::-;:156;;;;:::i;:::-;:162;;;;:::i;:::-;37486:171;;37427:239;:::o;21773:402::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;21891:17:::1;:34:::0;;;21936:16:::1;:32:::0;;;21979:10:::1;:20:::0;;;21992:7;22026:36:::1;21955:13:::0;21911:14;22026:36:::1;:::i;:::-;:49;;;;:::i;:::-;22010:13;:65:::0;22130:3:::1;22111:16;11105:5;22111:2;:16;:::i;:::-;:22;;;;:::i;:::-;22094:13;;:39;;22086:81;;;::::0;-1:-1:-1;;;22086:81:0;;23827:2:1;22086:81:0::1;::::0;::::1;23809:21:1::0;23866:2;23846:18;;;23839:30;23905:31;23885:18;;;23878:59;23954:18;;22086:81:0::1;23625:353:1::0;18993:293:0;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;19117:16:::1;4380:2:::0;19117::::1;:16;:::i;:::-;19109:3;19089:13;4486:12:::0;;;4398:108;19089:13:::1;:17;::::0;19105:1:::1;19089:17;:::i;:::-;:23;;;;:::i;:::-;19088:46;;;;:::i;:::-;19078:6;:56;;19070:109;;;::::0;-1:-1:-1;;;19070:109:0;;24185:2:1;19070:109:0::1;::::0;::::1;24167:21:1::0;24224:2;24204:18;;;24197:30;24263:34;24243:18;;;24236:62;-1:-1:-1;;;24314:18:1;;;24307:38;24362:19;;19070:109:0::1;23983:404:1::0;19070:109:0::1;19212:16;4380:2:::0;19212::::1;:16;:::i;:::-;19202:27;::::0;:6;:27:::1;:::i;:::-;19190:9;:39:::0;;;19245:33:::1;::::0;160:25:1;;;19245:33:0::1;::::0;148:2:1;133:18;19245:33:0::1;14:177:1::0;31994:248:0;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32076:25:0;::::1;32068:76;;;;-1:-1:-1::0;;;32068:76:0::1;;;;;;;:::i;:::-;32155:10;:33:::0;;-1:-1:-1;;;;;;32155:33:0::1;-1:-1:-1::0;;;;;32155:33:0;::::1;::::0;;::::1;::::0;;;32204:30:::1;::::0;::::1;::::0;-1:-1:-1;;32204:30:0::1;31994:248:::0;:::o;19356:346::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;19479:6:::1;19459:13;4486:12:::0;;;4398:108;19459:13:::1;:17;::::0;19475:1:::1;19459:17;:::i;:::-;:26;;;;:::i;:::-;19446:9;:39;;19438:105;;;::::0;-1:-1:-1;;;19438:105:0;;24594:2:1;19438:105:0::1;::::0;::::1;24576:21:1::0;24633:2;24613:18;;;24606:30;24672:34;24652:18;;;24645:62;-1:-1:-1;;;24723:18:1;;;24716:51;24784:19;;19438:105:0::1;24392:417:1::0;19438:105:0::1;19594:4;19574:13;4486:12:::0;;;4398:108;19574:13:::1;:17;::::0;19590:1:::1;19574:17;:::i;:::-;:24;;;;:::i;:::-;19561:9;:37;;19553:102;;;::::0;-1:-1:-1;;;19553:102:0;;25016:2:1;19553:102:0::1;::::0;::::1;24998:21:1::0;25055:2;25035:18;;;25028:30;25094:34;25074:18;;;25067:62;-1:-1:-1;;;25145:18:1;;;25138:50;25205:19;;19553:102:0::1;24814:416:1::0;19553:102:0::1;19665:18;:30:::0;19356:346::o;18685:300::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;18808:16:::1;4380:2:::0;18808::::1;:16;:::i;:::-;18799:4;18779:13;4486:12:::0;;;4398:108;18779:13:::1;:17;::::0;18795:1:::1;18779:17;:::i;:::-;:24;;;;:::i;:::-;18778:47;;;;:::i;:::-;18768:6;:57;;18760:112;;;::::0;-1:-1:-1;;;18760:112:0;;25437:2:1;18760:112:0::1;::::0;::::1;25419:21:1::0;25476:2;25456:18;;;25449:30;25515:34;25495:18;;;25488:62;-1:-1:-1;;;25566:18:1;;;25559:40;25616:19;;18760:112:0::1;25235:406:1::0;18760:112:0::1;18909:16;4380:2:::0;18909::::1;:16;:::i;:::-;18899:27;::::0;:6;:27:::1;:::i;:::-;18883:13;:43:::0;;;18942:35:::1;::::0;160:25:1;;;18942:35:0::1;::::0;148:2:1;133:18;18942:35:0::1;14:177:1::0;18268:98:0;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;18330:20:::1;:28:::0;;-1:-1:-1;;18330:28:0::1;::::0;;18268:98::o;10359:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10359:28:0;;-1:-1:-1;10359:28:0;:::o;8316:244::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8405:22:0;::::1;8397:73;;;::::0;-1:-1:-1;;;8397:73:0;;25848:2:1;8397:73:0::1;::::0;::::1;25830:21:1::0;25887:2;25867:18;;;25860:30;25926:34;25906:18;;;25899:62;-1:-1:-1;;;25977:18:1;;;25970:36;26023:19;;8397:73:0::1;25646:402:1::0;8397:73:0::1;8507:6;::::0;8486:38:::1;::::0;-1:-1:-1;;;;;8486:38:0;;::::1;::::0;8507:6:::1;::::0;8486:38:::1;::::0;8507:6:::1;::::0;8486:38:::1;8535:6;:17:::0;;-1:-1:-1;;;;;;8535:17:0::1;-1:-1:-1::0;;;;;8535:17:0;;;::::1;::::0;;;::::1;::::0;;8316:244::o;31517:160::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;31611:58:::1;::::0;31575:12:::1;::::0;31619:10:::1;::::0;31643:21:::1;::::0;31575:12;31611:58;31575:12;31611:58;31643:21;31619:10;31611:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35630:1399:::0;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;35735:4:::1;35724:7;:15;;35716:81;;;::::0;-1:-1:-1;;;35716:81:0;;26465:2:1;35716:81:0::1;::::0;::::1;26447:21:1::0;26504:2;26484:18;;;26477:30;26543:34;26523:18;;;26516:62;-1:-1:-1;;;26594:18:1;;;26587:51;26655:19;;35716:81:0::1;26263:417:1::0;35716:81:0::1;35858:19;::::0;35840:37:::1;::::0;:15:::1;:37;:::i;:::-;35816:20;;:61;;35808:87;;;::::0;-1:-1:-1;;;35808:87:0;;26887:2:1;35808:87:0::1;::::0;::::1;26869:21:1::0;26926:2;26906:18;;;26899:30;-1:-1:-1;;;26945:18:1;;;26938:43;26998:18;;35808:87:0::1;26685:337:1::0;35808:87:0::1;35929:15;35906:20;:38:::0;35982:6:::1;::::0;35975:39:::1;::::0;-1:-1:-1;;;35975:39:0;;36008:4:::1;35975:39;::::0;::::1;962:51:1::0;35955:17:0::1;::::0;-1:-1:-1;;;;;35982:6:0::1;::::0;35975:24:::1;::::0;935:18:1;;35975:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35955:59;;36025:20;36048:24;36066:4;36048:9;:24::i;:::-;36025:47:::0;-1:-1:-1;36083:16:0::1;36124:5;36102:19;36114:7:::0;36102:9;:19:::1;:::i;:::-;:27;;;;:::i;:::-;36276:6;::::0;36300:9:::1;::::0;36269:52:::1;::::0;-1:-1:-1;;;36269:52:0;;-1:-1:-1;;;;;36300:9:0;;::::1;36269:52;::::0;::::1;18706:51:1::0;18773:18;;;18766:34;;;36083:46:0;;-1:-1:-1;36168:21:0::1;::::0;36276:6;::::1;::::0;36269:22:::1;::::0;18679:18:1;;36269:52:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;36367:9:0::1;::::0;:234:::1;::::0;-1:-1:-1;;;36367:234:0;;-1:-1:-1;;;;;36367:9:0;;::::1;::::0;:28:::1;::::0;:234:::1;::::0;36418:4:::1;::::0;36438:8;;36367:9;;;;36418:4;;36575:15:::1;::::0;36367:234:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36614:25;36669:12;36642:24;36660:4;36642:9;:24::i;:::-;:39;;;;:::i;:::-;36614:67:::0;-1:-1:-1;36695:21:0;;36692:118:::1;;36732:66;36756:4;36771:6;36780:17;36732:15;:66::i;:::-;36822:23;36848:41;36872:17:::0;36848:21:::1;:41;:::i;:::-;36822:67:::0;-1:-1:-1;36905:19:0;;36902:80:::1;;36940:30;36954:15;36940:13;:30::i;:::-;36999:22;::::0;37012:8;;36999:22:::1;::::0;;;::::1;35705:1324;;;;;;35630:1399:::0;:::o;7233:380::-;-1:-1:-1;;;;;7369:19:0;;7361:68;;;;-1:-1:-1;;;7361:68:0;;28091:2:1;7361:68:0;;;28073:21:1;28130:2;28110:18;;;28103:30;28169:34;28149:18;;;28142:62;-1:-1:-1;;;28220:18:1;;;28213:34;28264:19;;7361:68:0;27889:400:1;7361:68:0;-1:-1:-1;;;;;7448:21:0;;7440:68;;;;-1:-1:-1;;;7440:68:0;;28496:2:1;7440:68:0;;;28478:21:1;28535:2;28515:18;;;28508:30;28574:34;28554:18;;;28547:62;-1:-1:-1;;;28625:18:1;;;28618:32;28667:19;;7440:68:0;28294:398:1;7440:68:0;-1:-1:-1;;;;;7521:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7573:32;;160:25:1;;;7573:32:0;;133:18:1;7573:32:0;;;;;;;7233:380;;;:::o;6312:614::-;-1:-1:-1;;;;;6452:20:0;;6444:70;;;;-1:-1:-1;;;6444:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6533:23:0;;6525:71;;;;-1:-1:-1;;;6525:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6633:17:0;;6609:21;6633:17;;;;;;;;;;;6669:23;;;;6661:74;;;;-1:-1:-1;;;6661:74:0;;29709:2:1;6661:74:0;;;29691:21:1;29748:2;29728:18;;;29721:30;29787:34;29767:18;;;29760:62;-1:-1:-1;;;29838:18:1;;;29831:36;29884:19;;6661:74:0;29507:402:1;6661:74:0;-1:-1:-1;;;;;6771:17:0;;;:9;:17;;;;;;;;;;;6791:22;;;6771:42;;6835:20;;;;;;;;:30;;6807:6;;6771:9;6835:30;;6807:6;;6835:30;:::i;:::-;;;;;;;;6900:9;-1:-1:-1;;;;;6883:35:0;6892:6;-1:-1:-1;;;;;6883:35:0;;6911:6;6883:35;;;;160:25:1;;148:2;133:18;;14:177;6883:35:0;;;;;;;;6433:493;6312:614;;;:::o;22663:5588::-;-1:-1:-1;;;;;22763:18:0;;22755:68;;;;-1:-1:-1;;;22755:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22842:16:0;;22834:64;;;;-1:-1:-1;;;22834:64:0;;;;;;;:::i;:::-;22926:1;22917:6;:10;22909:52;;;;-1:-1:-1;;;22909:52:0;;30116:2:1;22909:52:0;;;30098:21:1;30155:2;30135:18;;;30128:30;30194:31;30174:18;;;30167:59;30243:18;;22909:52:0;29914:353:1;22909:52:0;22986:13;;;;;;;22982:132;;-1:-1:-1;;;;;23023:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;23052:23:0;;;;;;:19;:23;;;;;;;;23023:52;23015:87;;;;-1:-1:-1;;;23015:87:0;;30474:2:1;23015:87:0;;;30456:21:1;30513:2;30493:18;;;30486:30;-1:-1:-1;;;30532:18:1;;;30525:52;30594:18;;23015:87:0;30272:346:1;23015:87:0;23129:13;;;;;;;23126:209;;;-1:-1:-1;;;;;23168:17:0;;;;;;:11;:17;;;;;;;;23167:18;:38;;;;-1:-1:-1;;;;;;23190:15:0;;;;;;:11;:15;;;;;;;;23189:16;23167:38;23166:57;;;-1:-1:-1;8009:6:0;;-1:-1:-1;;;;;23210:13:0;;;8009:6;;23210:13;23166:57;:82;;;-1:-1:-1;;;;;;23227:21:0;;23241:6;23227:21;23166:82;23158:165;;;;-1:-1:-1;;;23158:165:0;;30825:2:1;23158:165:0;;;30807:21:1;30864:2;30844:18;;;30837:30;30903:34;30883:18;;;30876:62;30974:34;30954:18;;;30947:62;-1:-1:-1;;;31025:19:1;;;31018:37;31072:19;;23158:165:0;30623:474:1;23158:165:0;23358:14;;;;23355:1634;;;8009:6;;-1:-1:-1;;;;;23392:15:0;;;8009:6;;23392:15;;;;:32;;-1:-1:-1;8009:6:0;;-1:-1:-1;;;;;23411:13:0;;;8009:6;;23411:13;;23392:32;:52;;;;-1:-1:-1;;;;;;23428:16:0;;;;23392:52;:77;;;;-1:-1:-1;;;;;;23448:21:0;;23462:6;23448:21;;23392:77;:107;;;;-1:-1:-1;;;;;;23474:25:0;;;;;;:19;:25;;;;;;;;23473:26;23392:107;:135;;;;-1:-1:-1;;;;;;23504:23:0;;;;;;:19;:23;;;;;;;;23503:24;23392:135;23388:1590;;;23703:20;;;;23699:506;;;23765:9;;-1:-1:-1;;;;;23751:24:0;;;23765:9;;23751:24;;;;:49;;-1:-1:-1;23793:6:0;;-1:-1:-1;;;;;23779:21:0;;;23793:6;;23779:21;;23751:49;23747:439;;;23878:16;23893:1;23878:12;:16;:::i;:::-;23865:9;23836:39;;;;:28;:39;;;;;;:58;:113;;;;-1:-1:-1;23933:16:0;23948:1;23933:12;:16;:::i;:::-;-1:-1:-1;;;;;23898:32:0;;;;;;:28;:32;;;;;;:51;23836:113;23828:179;;;;-1:-1:-1;;;23828:179:0;;31304:2:1;23828:179:0;;;31286:21:1;31343:2;31323:18;;;31316:30;31382:34;31362:18;;;31355:62;-1:-1:-1;;;31433:18:1;;;31426:51;31494:19;;23828:179:0;31102:417:1;23828:179:0;24063:9;24034:39;;;;:28;:39;;;;;;24076:12;24034:54;;;;-1:-1:-1;;;;;24115:32:0;;;;;;:47;23747:439;-1:-1:-1;;;;;24274:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;24310:35:0;;;;;;:31;:35;;;;;;;;24309:36;24274:71;24270:693;;;24388:12;;24378:6;:22;;24370:75;;;;-1:-1:-1;;;24370:75:0;;31726:2:1;24370:75:0;;;31708:21:1;31765:2;31745:18;;;31738:30;31804:34;31784:18;;;31777:62;-1:-1:-1;;;31855:18:1;;;31848:38;31903:19;;24370:75:0;31524:404:1;24370:75:0;24502:9;;24485:13;24495:2;24485:9;:13::i;:::-;24476:22;;:6;:22;:::i;:::-;:35;;24468:67;;;;-1:-1:-1;;;24468:67:0;;32135:2:1;24468:67:0;;;32117:21:1;32174:2;32154:18;;;32147:30;-1:-1:-1;;;32193:18:1;;;32186:49;32252:18;;24468:67:0;31933:343:1;24468:67:0;24270:693;;;-1:-1:-1;;;;;24612:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;24646:37:0;;;;;;:31;:37;;;;;;;;24645:38;24612:71;24608:355;;;24726:13;;24716:6;:23;;24708:78;;;;-1:-1:-1;;;24708:78:0;;32483:2:1;24708:78:0;;;32465:21:1;32522:2;32502:18;;;32495:30;32561:34;32541:18;;;32534:62;-1:-1:-1;;;32612:18:1;;;32605:40;32662:19;;24708:78:0;32281:406:1;24608:355:0;-1:-1:-1;;;;;24817:35:0;;;;;;:31;:35;;;;;;;;24812:151;;24910:9;;24893:13;24903:2;24893:9;:13::i;:::-;24884:22;;:6;:22;:::i;:::-;:35;;24876:67;;;;-1:-1:-1;;;24876:67:0;;32135:2:1;24876:67:0;;;32117:21:1;32174:2;32154:18;;;32147:30;-1:-1:-1;;;32193:18:1;;;32186:49;32252:18;;24876:67:0;31933:343:1;24876:67:0;25001:28;25032:24;25050:4;25032:9;:24::i;:::-;25116:18;;25001:55;;-1:-1:-1;25092:42:0;;;;;;;25150:22;;-1:-1:-1;25161:11:0;;;;;;;25150:22;:35;;;;-1:-1:-1;25177:8:0;;-1:-1:-1;;;25177:8:0;;;;25176:9;25150:35;:71;;;;-1:-1:-1;;;;;;25190:31:0;;;;;;:25;:31;;;;;;;;25189:32;25150:71;:101;;;;-1:-1:-1;;;;;;25226:25:0;;;;;;:19;:25;;;;;;;;25225:26;25150:101;:129;;;;-1:-1:-1;;;;;;25256:23:0;;;;;;:19;:23;;;;;;;;25255:24;25150:129;25147:232;;;25296:8;:15;;-1:-1:-1;;;;25296:15:0;-1:-1:-1;;;25296:15:0;;;25326:10;:8;:10::i;:::-;25351:8;:16;;-1:-1:-1;;;;25351:16:0;;;25147:232;25395:8;;-1:-1:-1;;;25395:8:0;;;;25394:9;:42;;;;-1:-1:-1;;;;;;25407:29:0;;;;;;:25;:29;;;;;;;;25394:42;:59;;;;-1:-1:-1;25440:13:0;;;;25394:59;:114;;;;;25493:15;;25476:14;;:32;;;;:::i;:::-;25457:15;:51;;25394:114;:144;;;;-1:-1:-1;;;;;;25513:25:0;;;;;;:19;:25;;;;;;;;25512:26;25394:144;25391:204;;;25554:29;:27;:29::i;:::-;-1:-1:-1;;;;;25725:25:0;;25607:12;25725:25;;;:19;:25;;;;;;25622:4;;25725:25;;;:52;;-1:-1:-1;;;;;;25754:23:0;;;;;;:19;:23;;;;;;;;25725:52;25722:99;;;-1:-1:-1;25804:5:0;25722:99;25873:21;;25841:12;;25873:21;;:38;;;;-1:-1:-1;25898:13:0;;;;;;;25873:38;:51;;;;-1:-1:-1;25916:8:0;;-1:-1:-1;;;25916:8:0;;;;25915:9;25873:51;25870:162;;;25965:9;-1:-1:-1;;;;;25965:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25940:14;:50;26005:15;:13;:15::i;:::-;26121:7;26118:2080;;;28353:18;;28338:12;:33;26183:60;;;;-1:-1:-1;;;;;;26212:31:0;;;;;;:25;:31;;;;;;;;26183:60;:94;;;;-1:-1:-1;;;;;;26248:29:0;;;;;;:25;:29;;;;;;;;26247:30;26183:94;:122;;;;-1:-1:-1;;;;;;26282:23:0;;;;;;:19;:23;;;;;;;;26281:24;26183:122;:142;;;;;26324:1;26309:12;;:16;26183:142;26180:1849;;;28353:18;;28338:12;:33;26363:330;;26672:1;26656:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;26363:330:0;-1:-1:-1;;;;;26717:15:0;;;;;;:11;:15;;;;;;;;26713:214;;-1:-1:-1;;;;;26756:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;26756:22:0;26774:4;26756:22;;;;;;26801:10;:15;;26774:4;;26801:10;;:15;;26774:4;;26801:15;:::i;:::-;;;;-1:-1:-1;;26839:11:0;:20;;;;;;;-1:-1:-1;26839:20:0;;;;;;;;-1:-1:-1;;;;;;26839:20:0;-1:-1:-1;;;;;26839:20:0;;;;;;;;26887;;962:51:1;;;26887:20:0;;950:2:1;935:18;26887:20:0;;;;;;;26713:214;11105:5;26963:12;;26954:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;26947:42;;27052:12;;27034:15;;27027:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;27005:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;27132:12:0;;27113:16;;27106:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;27083:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;27198:12:0;;27186:9;;27179:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;27163:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;26180:1849:0;;-1:-1:-1;26180:1849:0;;-1:-1:-1;;;;;27275:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;27324:1;27308:13;;:17;27275:50;27271:758;;;11105:5;27361:13;;27352:6;:22;;;;:::i;:::-;:36;;;;:::i;:::-;27345:43;;27455:13;;27436:16;;27429:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;27407:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;27537:13:0;;27517:17;;27510:24;;:4;:24;:::i;:::-;:40;;;;:::i;:::-;27487:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;27605:13:0;;27592:10;;27585:17;;:4;:17;:::i;27271:758::-;-1:-1:-1;;;;;27681:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;27731:1;27716:12;;:16;27681:51;27678:351;;;11105:5;27766:12;;27757:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;27750:42;;27855:12;;27837:15;;27830:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;27808:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;27935:12:0;;27916:16;;27909:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;27886:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;28001:12:0;;27989:9;;27982:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;27966:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;27678:351:0;28060:8;;28057:93;;28092:42;28108:4;28122;28129;28092:15;:42::i;:::-;28172:14;28182:4;28172:14;;:::i;:::-;;;26118:2080;28210:33;28226:4;28232:2;28236:6;28210:15;:33::i;:::-;22742:5509;;;;22663:5588;;;:::o;19714:207::-;-1:-1:-1;;;;;19802:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;19802:52:0;;;;;;;;;;19870:43;;32860:51:1;;;32927:18;;;32920:50;19870:43:0;;32833:18:1;19870:43:0;;;;;;;19714:207;;:::o;21128:236::-;-1:-1:-1;;;;;21211:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;21211:39:0;;;;;;;21261;21211:31;:39;21261:26;:39::i;29487:1454::-;29528:23;29554:24;29572:4;29554:9;:24::i;:::-;29528:50;;29589:25;29660:12;;29638:19;;29617:18;;:40;;;;:::i;:::-;:55;;;;:::i;:::-;29589:83;-1:-1:-1;29696:20:0;;;:46;;-1:-1:-1;29720:22:0;;29696:46;29693:60;;;29745:7;;29487:1454::o;29693:60::-;29786:18;;:23;;29807:2;29786:23;:::i;:::-;29768:15;:41;29765:113;;;29843:18;;:23;;29864:2;29843:23;:::i;:::-;29825:41;;29765:113;29890:12;29972:23;30057:1;30037:17;30016:18;;29998:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;29972:86;-1:-1:-1;30079:51:0;30096:33;29972:86;30096:15;:33;:::i;:::-;30079:16;:51::i;:::-;30338:18;;30173:21;;;;30152:18;;30338:20;;30357:1;;30338:20;:::i;:::-;30317:42;;:17;:42;:::i;:::-;30294:19;;30281:32;;:10;:32;:::i;:::-;:79;;;;:::i;:::-;30254:106;;30371:17;30460:1;30441:18;;:20;;;;:::i;:::-;30420:42;;:17;:42;:::i;:::-;30404:12;;30391:25;;:10;:25;:::i;:::-;:72;;;;:::i;:::-;30371:92;-1:-1:-1;30495:28:0;30371:92;30495:16;:28;:::i;:::-;30476:47;;;;:::i;:::-;30569:1;30548:18;:22;;;30581:19;:23;;;30615:12;:16;30476:47;-1:-1:-1;30655:19:0;;;;;:42;;;30696:1;30678:15;:19;30655:42;30652:119;;;30713:46;30726:15;30743;30713:12;:46::i;:::-;30804:10;;30796:46;;-1:-1:-1;;;;;30804:10:0;;;;30828:9;;30796:46;;;;30828:9;30804:10;30796:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30876:17:0;;30868:65;;30783:59;;-1:-1:-1;;;;;;30876:17:0;;30907:21;;30868:65;;;;30907:21;30876:17;30868:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;29487:1454:0:o;37037:382::-;37125:16;;;37139:1;37125:16;;;;;;;;37101:21;;37125:16;;;;;;;;-1:-1:-1;;37162:9:0;;:16;;;-1:-1:-1;;;37162:16:0;;;;37101:40;;-1:-1:-1;;;;;;37162:9:0;;;;:14;;-1:-1:-1;37162:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37152:4;37157:1;37152:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;37152:26:0;;;-1:-1:-1;;;;;37152:26:0;;;;;37207:4;37189;37194:1;37189:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37189:23:0;;;:7;;;;;;;;;:23;37225:9;;:186;;-1:-1:-1;;;37225:186:0;;:9;;;:60;;37293:11;;37225:186;;:9;;37336:4;;37363:6;;37385:15;;37225:186;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34370:1252;34456:15;34439:14;:32;;;34492:20;:38;34568:6;;34561:39;;-1:-1:-1;;;34561:39:0;;34594:4;34561:39;;;962:51:1;-1:-1:-1;;;;;;;34568:6:0;;34561:24;;935:18:1;;34561:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34541:59;;34611:20;34634:24;34652:4;34634:9;:24::i;:::-;34611:47;;34669:16;34719:5;34700:16;;34688:9;:28;;;;:::i;:::-;:36;;;;:::i;:::-;34871:6;;34895:9;;34864:52;;-1:-1:-1;;;34864:52:0;;-1:-1:-1;;;;;34895:9:0;;;34864:52;;;18706:51:1;18773:18;;;18766:34;;;34669:55:0;;-1:-1:-1;34763:21:0;;34871:6;;;34864:22;;18679:18:1;;34864:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;34962:9:0;;:234;;-1:-1:-1;;;34962:234:0;;-1:-1:-1;;;;;34962:9:0;;;;:28;;:234;;35013:4;;35033:8;;34962:9;;;;35013:4;;35170:15;;34962:234;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35209:25;35264:12;35237:24;35255:4;35237:9;:24::i;:::-;:39;;;;:::i;:::-;35209:67;-1:-1:-1;35290:21:0;;35287:118;;35327:66;35351:4;35366:6;35375:17;35327:15;:66::i;:::-;35417:23;35443:41;35467:17;35443:21;:41;:::i;:::-;35417:67;-1:-1:-1;35500:19:0;;35497:80;;35535:30;35549:15;35535:13;:30::i;:::-;35594:20;;35605:8;;35594:20;;;;;34418:1204;;;;;;34370:1252::o;38518:1006::-;38563:12;38578:9;:7;:9::i;:::-;38563:24;;38598:27;38686:17;;38679:4;38659:17;;38636:19;;38629:4;:26;;;;:::i;:::-;38628:48;;;;:::i;:::-;:55;;;;:::i;:::-;:75;;;;:::i;:::-;38598:105;;38714:28;38804:18;;38797:4;38776:18;;38753:19;;38746:4;:26;;;;:::i;:::-;38745:49;;;;:::i;:::-;:56;;;;:::i;:::-;:77;;;;:::i;:::-;38714:108;;38858:17;;38836:19;:39;38833:109;;;38913:17;;38891:39;;38833:109;38978:18;;38955:20;:41;38952:113;;;-1:-1:-1;39035:18:0;;38952:113;39130:3;39108:19;39093:12;;:34;;;;:::i;:::-;:40;;;;:::i;:::-;39075:15;:58;;;39164:12;;39203:3;;39164:30;;;:::i;:::-;39163:37;;39198:2;39163:37;:::i;:::-;:43;;;;:::i;:::-;39144:16;:62;;;39263:15;;39229:12;;39263:15;;39229:31;;;:::i;:::-;:49;;;;:::i;:::-;39217:9;:61;39322:13;;39361:3;;39322:36;;39338:20;;39322:36;:::i;:::-;:42;;;;:::i;:::-;39303:16;:61;;;39396:13;;39437:3;;39396:32;;;:::i;:::-;39395:39;;39432:2;39395:39;:::i;:::-;:45;;;;:::i;:::-;39375:17;:65;;;39500:16;;39464:13;;39500:16;;39464:33;;;:::i;:::-;:52;;;;:::i;:::-;39451:10;:65;-1:-1:-1;;;38518:1006:0:o;28387:573::-;28539:16;;;28553:1;28539:16;;;;;;;;28515:21;;28539:16;;;;;;;;;;-1:-1:-1;28539:16:0;28515:40;;28584:4;28566;28571:1;28566:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28566:23:0;;;:7;;;;;;;;;;:23;;;;28610:9;;:16;;;-1:-1:-1;;;28610:16:0;;;;:9;;;;;:14;;:16;;;;;28566:7;;28610:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28600:4;28605:1;28600:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28600:26:0;;;:7;;;;;;;;;:26;28671:9;;28639:56;;28656:4;;28671:9;28683:11;28639:8;:56::i;:::-;28734:9;;:218;;-1:-1:-1;;;28734:218:0;;-1:-1:-1;;;;;28734:9:0;;;;:60;;:218;;28809:11;;28734:9;;28879:4;;28906;;28926:15;;28734:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28442:518;28387:573;:::o;28972:507::-;29152:9;;29120:56;;29137:4;;-1:-1:-1;;;;;29152:9:0;29164:11;29120:8;:56::i;:::-;29219:9;;:252;;-1:-1:-1;;;29219:252:0;;-1:-1:-1;;;;;29219:9:0;;;;:25;;29252:9;;29219:252;;29285:4;;29305:11;;29219:9;;;;29285:4;;29445:15;;29219:252;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28972:507;;:::o;196:597: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;;;634:6;631:1;628:13;625:91;;;704:1;699:2;690:6;679:9;675:22;671:31;664:42;625:91;-1:-1:-1;777:2:1;756:15;-1:-1:-1;;752:29:1;737:45;;;;784:2;733:54;;196:597;-1:-1:-1;;;196:597:1:o;1024:131::-;-1:-1:-1;;;;;1099:31:1;;1089:42;;1079:70;;1145:1;1142;1135:12;1079:70;1024:131;:::o;1160:315::-;1228:6;1236;1289:2;1277:9;1268:7;1264:23;1260:32;1257:52;;;1305:1;1302;1295:12;1257:52;1344:9;1331:23;1363:31;1388:5;1363:31;:::i;:::-;1413:5;1465:2;1450:18;;;;1437:32;;-1:-1:-1;;;1160:315:1:o;1672:118::-;1758:5;1751:13;1744:21;1737:5;1734:32;1724:60;;1780:1;1777;1770:12;1795:241;1851:6;1904:2;1892:9;1883:7;1879:23;1875:32;1872:52;;;1920:1;1917;1910:12;1872:52;1959:9;1946:23;1978:28;2000:5;1978:28;:::i;:::-;2025:5;1795:241;-1:-1:-1;;;1795:241:1:o;2041:247::-;2100:6;2153:2;2141:9;2132:7;2128:23;2124:32;2121:52;;;2169:1;2166;2159:12;2121:52;2208:9;2195:23;2227:31;2252:5;2227:31;:::i;2293:127::-;2354:10;2349:3;2345:20;2342:1;2335:31;2385:4;2382:1;2375:15;2409:4;2406:1;2399:15;2425:275;2496:2;2490:9;2561:2;2542:13;;-1:-1:-1;;2538:27:1;2526:40;;2596:18;2581:34;;2617:22;;;2578:62;2575:88;;;2643:18;;:::i;:::-;2679:2;2672:22;2425:275;;-1:-1:-1;2425:275:1:o;2705:183::-;2765:4;2798:18;2790:6;2787:30;2784:56;;;2820:18;;:::i;:::-;-1:-1:-1;2865:1:1;2861:14;2877:4;2857:25;;2705:183::o;2893:662::-;2947:5;3000:3;2993:4;2985:6;2981:17;2977:27;2967:55;;3018:1;3015;3008:12;2967:55;3054:6;3041:20;3080:4;3104:60;3120:43;3160:2;3120:43;:::i;:::-;3104:60;:::i;:::-;3198:15;;;3284:1;3280:10;;;;3268:23;;3264:32;;;3229:12;;;;3308:15;;;3305:35;;;3336:1;3333;3326:12;3305:35;3372:2;3364:6;3360:15;3384:142;3400:6;3395:3;3392:15;3384:142;;;3466:17;;3454:30;;3504:12;;;;3417;;3384:142;;;-1:-1:-1;3544:5:1;2893:662;-1:-1:-1;;;;;;2893:662:1:o;3560:1215::-;3678:6;3686;3739:2;3727:9;3718:7;3714:23;3710:32;3707:52;;;3755:1;3752;3745:12;3707:52;3795:9;3782:23;3824:18;3865:2;3857:6;3854:14;3851:34;;;3881:1;3878;3871:12;3851:34;3919:6;3908:9;3904:22;3894:32;;3964:7;3957:4;3953:2;3949:13;3945:27;3935:55;;3986:1;3983;3976:12;3935:55;4022:2;4009:16;4044:4;4068:60;4084:43;4124:2;4084:43;:::i;4068:60::-;4162:15;;;4244:1;4240:10;;;;4232:19;;4228:28;;;4193:12;;;;4268:19;;;4265:39;;;4300:1;4297;4290:12;4265:39;4324:11;;;;4344:217;4360:6;4355:3;4352:15;4344:217;;;4440:3;4427:17;4457:31;4482:5;4457:31;:::i;:::-;4501:18;;4377:12;;;;4539;;;;4344:217;;;4580:5;-1:-1:-1;;4623:18:1;;4610:32;;-1:-1:-1;;4654:16:1;;;4651:36;;;4683:1;4680;4673:12;4651:36;;4706:63;4761:7;4750:8;4739:9;4735:24;4706:63;:::i;:::-;4696:73;;;3560:1215;;;;;:::o;4780:456::-;4857:6;4865;4873;4926:2;4914:9;4905:7;4901:23;4897:32;4894:52;;;4942:1;4939;4932:12;4894:52;4981:9;4968:23;5000:31;5025:5;5000:31;:::i;:::-;5050:5;-1:-1:-1;5107:2:1;5092:18;;5079:32;5120:33;5079:32;5120:33;:::i;:::-;4780:456;;5172:7;;-1:-1:-1;;;5226:2:1;5211:18;;;;5198:32;;4780:456::o;5241:180::-;5300:6;5353:2;5341:9;5332:7;5328:23;5324:32;5321:52;;;5369:1;5366;5359:12;5321:52;-1:-1:-1;5392:23:1;;5241:180;-1:-1:-1;5241:180:1:o;5426:315::-;5494:6;5502;5555:2;5543:9;5534:7;5530:23;5526:32;5523:52;;;5571:1;5568;5561:12;5523:52;5607:9;5594:23;5584:33;;5667:2;5656:9;5652:18;5639:32;5680:31;5705:5;5680:31;:::i;:::-;5730:5;5720:15;;;5426:315;;;;;:::o;6143:750::-;6235:6;6243;6251;6304:2;6292:9;6283:7;6279:23;6275:32;6272:52;;;6320:1;6317;6310:12;6272:52;6360:9;6347:23;6389:18;6430:2;6422:6;6419:14;6416:34;;;6446:1;6443;6436:12;6416:34;6484:6;6473:9;6469:22;6459:32;;6529:7;6522:4;6518:2;6514:13;6510:27;6500:55;;6551:1;6548;6541:12;6500:55;6591:2;6578:16;6617:2;6609:6;6606:14;6603:34;;;6633:1;6630;6623:12;6603:34;6688:7;6681:4;6671:6;6668:1;6664:14;6660:2;6656:23;6652:34;6649:47;6646:67;;;6709:1;6706;6699:12;6646:67;6740:4;6732:13;;;;-1:-1:-1;6764:6:1;-1:-1:-1;;6805:20:1;;6792:34;6835:28;6792:34;6835:28;:::i;:::-;6882:5;6872:15;;;6143:750;;;;;:::o;6898:377::-;6972:6;6980;6988;7041:2;7029:9;7020:7;7016:23;7012:32;7009:52;;;7057:1;7054;7047:12;7009:52;7093:9;7080:23;7070:33;;7150:2;7139:9;7135:18;7122:32;7112:42;;7204:2;7193:9;7189:18;7176:32;7217:28;7239:5;7217:28;:::i;7280:382::-;7345:6;7353;7406:2;7394:9;7385:7;7381:23;7377:32;7374:52;;;7422:1;7419;7412:12;7374:52;7461:9;7448:23;7480:31;7505:5;7480:31;:::i;:::-;7530:5;-1:-1:-1;7587:2:1;7572:18;;7559:32;7600:30;7559:32;7600:30;:::i;7667:316::-;7744:6;7752;7760;7813:2;7801:9;7792:7;7788:23;7784:32;7781:52;;;7829:1;7826;7819:12;7781:52;-1:-1:-1;;7852:23:1;;;7922:2;7907:18;;7894:32;;-1:-1:-1;7973:2:1;7958:18;;;7945:32;;7667:316;-1:-1:-1;7667:316:1:o;7988:388::-;8056:6;8064;8117:2;8105:9;8096:7;8092:23;8088:32;8085:52;;;8133:1;8130;8123:12;8085:52;8172:9;8159:23;8191:31;8216:5;8191:31;:::i;:::-;8241:5;-1:-1:-1;8298:2:1;8283:18;;8270:32;8311:33;8270:32;8311:33;:::i;8381:461::-;8434:3;8472:5;8466:12;8499:6;8494:3;8487:19;8525:4;8554:2;8549:3;8545:12;8538:19;;8591:2;8584:5;8580:14;8612:1;8622:195;8636:6;8633:1;8630:13;8622:195;;;8701:13;;-1:-1:-1;;;;;8697:39:1;8685:52;;8757:12;;;;8792:15;;;;8733:1;8651:9;8622:195;;;-1:-1:-1;8833:3:1;;8381:461;-1:-1:-1;;;;;8381:461:1:o;8847:261::-;9026:2;9015:9;9008:21;8989:4;9046:56;9098:2;9087:9;9083:18;9075:6;9046:56;:::i;9113:584::-;9214:6;9222;9230;9238;9246;9254;9307:3;9295:9;9286:7;9282:23;9278:33;9275:53;;;9324:1;9321;9314:12;9275:53;9363:9;9350:23;9382:28;9404:5;9382:28;:::i;:::-;9429:5;9481:2;9466:18;;9453:32;;-1:-1:-1;9532:2:1;9517:18;;9504:32;;9583:2;9568:18;;9555:32;;-1:-1:-1;9634:3:1;9619:19;;9606:33;;-1:-1:-1;9686:3:1;9671:19;9658:33;;-1:-1:-1;9113:584:1;-1:-1:-1;;;9113:584:1:o;9702:380::-;9781:1;9777:12;;;;9824;;;9845:61;;9899:4;9891:6;9887:17;9877:27;;9845:61;9952:2;9944:6;9941:14;9921:18;9918:38;9915:161;;9998:10;9993:3;9989:20;9986:1;9979:31;10033:4;10030:1;10023:15;10061:4;10058:1;10051:15;9915:161;;9702:380;;;:::o;10087:356::-;10289:2;10271:21;;;10308:18;;;10301:30;10367:34;10362:2;10347:18;;10340:62;10434:2;10419:18;;10087:356::o;11230:127::-;11291:10;11286:3;11282:20;11279:1;11272:31;11322:4;11319:1;11312:15;11346:4;11343:1;11336:15;11362:127;11423:10;11418:3;11414:20;11411:1;11404:31;11454:4;11451:1;11444:15;11478:4;11475:1;11468:15;11494:135;11533:3;11554:17;;;11551:43;;11574:18;;:::i;:::-;-1:-1:-1;11621:1:1;11610:13;;11494:135::o;12043:422::-;12132:1;12175:5;12132:1;12189:270;12210:7;12200:8;12197:21;12189:270;;;12269:4;12265:1;12261:6;12257:17;12251:4;12248:27;12245:53;;;12278:18;;:::i;:::-;12328:7;12318:8;12314:22;12311:55;;;12348:16;;;;12311:55;12427:22;;;;12387:15;;;;12189:270;;;12193:3;12043:422;;;;;:::o;12470:806::-;12519:5;12549:8;12539:80;;-1:-1:-1;12590:1:1;12604:5;;12539:80;12638:4;12628:76;;-1:-1:-1;12675:1:1;12689:5;;12628:76;12720:4;12738:1;12733:59;;;;12806:1;12801:130;;;;12713:218;;12733:59;12763:1;12754:10;;12777:5;;;12801:130;12838:3;12828:8;12825:17;12822:43;;;12845:18;;:::i;:::-;-1:-1:-1;;12901:1:1;12887:16;;12916:5;;12713:218;;13015:2;13005:8;13002:16;12996:3;12990:4;12987:13;12983:36;12977:2;12967:8;12964:16;12959:2;12953:4;12950:12;12946:35;12943:77;12940:159;;;-1:-1:-1;13052:19:1;;;13084:5;;12940:159;13131:34;13156:8;13150:4;13131:34;:::i;:::-;13201:6;13197:1;13193:6;13189:19;13180:7;13177:32;13174:58;;;13212:18;;:::i;:::-;13250:20;;12470:806;-1:-1:-1;;;12470:806:1:o;13281:140::-;13339:5;13368:47;13409:4;13399:8;13395:19;13389:4;13368:47;:::i;13426:168::-;13466:7;13532:1;13528;13524:6;13520:14;13517:1;13514:21;13509:1;13502:9;13495:17;13491:45;13488:71;;;13539:18;;:::i;:::-;-1:-1:-1;13579:9:1;;13426:168::o;13599:217::-;13639:1;13665;13655:132;;13709:10;13704:3;13700:20;13697:1;13690:31;13744:4;13741:1;13734:15;13772:4;13769:1;13762:15;13655:132;-1:-1:-1;13801:9:1;;13599:217::o;14991:128::-;15031:3;15062:1;15058:6;15055:1;15052:13;15049:39;;;15068:18;;:::i;:::-;-1:-1:-1;15104:9:1;;14991:128::o;15124:402::-;15326:2;15308:21;;;15365:2;15345:18;;;15338:30;15404:34;15399:2;15384:18;;15377:62;-1:-1:-1;;;15470:2:1;15455:18;;15448:36;15516:3;15501:19;;15124:402::o;18343:184::-;18413:6;18466:2;18454:9;18445:7;18441:23;18437:32;18434:52;;;18482:1;18479;18472:12;18434:52;-1:-1:-1;18505:16:1;;18343:184;-1:-1:-1;18343:184:1:o;18811:245::-;18878:6;18931:2;18919:9;18910:7;18906:23;18902:32;18899:52;;;18947:1;18944;18937:12;18899:52;18979:9;18973:16;18998:28;19020:5;18998:28;:::i;19473:251::-;19543:6;19596:2;19584:9;19575:7;19571:23;19567:32;19564:52;;;19612:1;19609;19602:12;19564:52;19644:9;19638:16;19663:31;19688:5;19663:31;:::i;20849:607::-;-1:-1:-1;;;;;21208:15:1;;;21190:34;;21255:2;21240:18;;21233:34;;;;21298:2;21283:18;;21276:34;;;;21341:2;21326:18;;21319:34;;;;21390:15;;;21384:3;21369:19;;21362:44;21170:3;21422:19;;21415:35;;;;21139:3;21124:19;;20849:607::o;21461:306::-;21549:6;21557;21565;21618:2;21606:9;21597:7;21593:23;21589:32;21586:52;;;21634:1;21631;21624:12;21586:52;21663:9;21657:16;21647:26;;21713:2;21702:9;21698:18;21692:25;21682:35;;21757:2;21746:9;21742:18;21736:25;21726:35;;21461:306;;;;;:::o;23495:125::-;23535:4;23563:1;23560;23557:8;23554:34;;;23568:18;;:::i;:::-;-1:-1:-1;23605:9:1;;23495:125::o;27639:245::-;27718:6;27726;27779:2;27767:9;27758:7;27754:23;27750:32;27747:52;;;27795:1;27792;27785:12;27747:52;-1:-1:-1;;27818:16:1;;27874:2;27859:18;;;27853:25;27818:16;;27853:25;;-1:-1:-1;27639:245:1:o;28697:401::-;28899:2;28881:21;;;28938:2;28918:18;;;28911:30;28977:34;28972:2;28957:18;;28950:62;-1:-1:-1;;;29043:2:1;29028:18;;29021:35;29088:3;29073:19;;28697:401::o;29103:399::-;29305:2;29287:21;;;29344:2;29324:18;;;29317:30;29383:34;29378:2;29363:18;;29356:62;-1:-1:-1;;;29449:2:1;29434:18;;29427:33;29492:3;29477:19;;29103:399::o;32981:510::-;33252:6;33241:9;33234:25;33295:3;33290:2;33279:9;33275:18;33268:31;33215:4;33316:57;33368:3;33357:9;33353:19;33345:6;33316:57;:::i;:::-;-1:-1:-1;;;;;33409:32:1;;;;33404:2;33389:18;;33382:60;-1:-1:-1;33473:2:1;33458:18;33451:34;33308:65;32981:510;-1:-1:-1;;32981:510:1:o;33496:582::-;33795:6;33784:9;33777:25;33838:6;33833:2;33822:9;33818:18;33811:34;33881:3;33876:2;33865:9;33861:18;33854:31;33758:4;33902:57;33954:3;33943:9;33939:19;33931:6;33902:57;:::i;:::-;-1:-1:-1;;;;;33995:32:1;;;;33990:2;33975:18;;33968:60;-1:-1:-1;34059:3:1;34044:19;34037:35;33894:65;33496:582;-1:-1:-1;;;33496:582:1:o

Swarm Source

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