ETH Price: $3,039.82 (+4.27%)

Token

Chi Chi (Chi)
 

Overview

Max Total Supply

100,000,000 Chi

Holders

174

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
29,490.127416857 Chi

Value
$0.00
0x0514de938186f52396374f047d520a2e20b5fb82
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:
ChiChi

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: UNLICENSE
pragma solidity ^0.8.7;

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

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

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

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

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

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

    event Transfer(address indexed from, address indexed to, uint256 value);

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

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _setOwner(_msgSender());
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

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

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

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

    function WETH() external pure returns (address);

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

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

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

        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}

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

    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcluded;
    mapping(address => bool) public allowedTransfer;
    mapping(address => bool) private _isBlacklisted;

    address[] private _excluded;

    bool public tradingEnabled;
    bool public swapEnabled;
    bool private swapping;

    //Anti Dump
    mapping(address => uint256) private _lastSell;
    bool public coolDownEnabled = true;
    uint256 public coolDownTime = 60 seconds;

    IRouter public router;
    address public pair;

    uint8 private constant _decimals = 9;
    uint256 private constant MAX = ~uint256(0);

    uint256 private _tTotal = 1e8 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));

    uint256 public swapTokensAtAmount = 200_000 * 10**9;
    uint256 public maxBuyLimit = 1_000_000 * 10**9;
    uint256 public maxSellLimit = 1_000_000 * 10**9;
    uint256 public maxWalletLimit = 1_000_000 * 10**9;

    uint256 public genesis_block;
    uint256 private deadline = 0;

    address public deadWallet = 0x000000000000000000000000000000000000dEaD;
    address public marketingWallet = 0x3d27C514d3938D6072bCFE89721F29D16f0a45B7;
    address public operationWallet = 0x583A41E909e0739439bBf7CB93196be06DC481dA;
    address private devWallet = 0xD2B88AB1210157ace772F99d6DD4CdaE5626B63F;

    string private constant _name = "Chi Chi";
    string private constant _symbol = "Chi";

    struct Taxes {
        uint256 rfi;
        uint256 marketing;
        uint256 liquidity;
        uint256 operation;
        uint256 dev;
    }

    Taxes private launchtax = Taxes(0, 99, 0, 0, 0);
    Taxes public taxes = Taxes(1, 5, 2, 1, 1);
    Taxes public sellTaxes = Taxes(1, 5, 2, 1, 1);

    struct TotFeesPaidStruct {
        uint256 rfi;
        uint256 marketing;
        uint256 liquidity;
        uint256 operation;
        uint256 dev;
    }

    TotFeesPaidStruct public totFeesPaid;

    struct valuesFromGetValues {
        uint256 rAmount;
        uint256 rTransferAmount;
        uint256 rRfi;
        uint256 rMarketing;
        uint256 rLiquidity;
        uint256 rOperation;
        uint256 rDev;
        uint256 tTransferAmount;
        uint256 tRfi;
        uint256 tMarketing;
        uint256 tLiquidity;
        uint256 tOperation;
        uint256 tDev;
    }

    event FeesChanged();
    event UpdatedRouter(address oldRouter, address newRouter);

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

    constructor(address routerAddress) {
        IRouter _router = IRouter(routerAddress);
        address _pair = IFactory(_router.factory()).createPair(address(this), _router.WETH());

        router = _router;
        pair = _pair;

        excludeFromReward(pair);
        excludeFromReward(deadWallet);

        _rOwned[owner()] = _rTotal;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[marketingWallet] = true;
        _isExcludedFromFee[operationWallet] = true;
        _isExcludedFromFee[devWallet] = true;
        _isExcludedFromFee[deadWallet] = true;
        _isExcludedFromFee[0xD152f549545093347A162Dce210e7293f1452150] = true;
        _isExcludedFromFee[0xDba68f07d1b7Ca219f78ae8582C213d975c25cAf] = true;
        _isExcludedFromFee[0x33d4cC8716Beb13F814F538Ad3b2de3b036f5e2A] = true;

        allowedTransfer[address(this)] = true;
        allowedTransfer[owner()] = true;
        allowedTransfer[pair] = true;
        allowedTransfer[marketingWallet] = true;
        allowedTransfer[operationWallet] = true;
        allowedTransfer[devWallet] = true;
        allowedTransfer[0xD152f549545093347A162Dce210e7293f1452150] = true;
        allowedTransfer[0xDba68f07d1b7Ca219f78ae8582C213d975c25cAf] = true;
        allowedTransfer[0x33d4cC8716Beb13F814F538Ad3b2de3b036f5e2A] = true;

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

    //std ERC20:
    function name() public pure returns (string memory) {
        return _name;
    }

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

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

    function reflectionFromToken(uint256 tAmount, bool deductTransferRfi)
        public
        view
        returns (uint256)
    {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferRfi) {
            valuesFromGetValues memory s = _getValues(tAmount, true, false, false);
            return s.rAmount;
        } else {
            valuesFromGetValues memory s = _getValues(tAmount, true, false, false);
            return s.rTransferAmount;
        }
    }

    function setTradingStatus() external onlyOwner {
        require(!tradingEnabled, "Cannot re-enable trading");
        tradingEnabled = true;
        swapEnabled = true;
        genesis_block = block.number;
    }

    function updatedeadline(uint256 _deadline) external onlyOwner {
        require(!tradingEnabled, "Can't change when trading has started");
        deadline = _deadline;
    }

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

    //@dev kept original RFI naming -> "reward" as in reflection
    function excludeFromReward(address account) public onlyOwner {
        require(!_isExcluded[account], "Account is already excluded");
        if (_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner {
        require(_isExcluded[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }

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

    function setTaxes(
        uint256 _rfi,
        uint256 _marketing,
        uint256 _liquidity,
        uint256 _operation,
        uint256 _dev
    ) public onlyOwner {
        taxes = Taxes(_rfi, _marketing, _liquidity,  _operation, _dev);
        require((_rfi + _marketing + _liquidity + _operation + _dev) <= 25, "Must keep fees at 25% or less");
        emit FeesChanged();
    }

    function setSellTaxes(
        uint256 _rfi,
        uint256 _marketing,
        uint256 _liquidity,
        uint256 _operation,
        uint256 _dev
    ) public onlyOwner {
        sellTaxes = Taxes(_rfi, _marketing, _liquidity, _operation, _dev);
        require((_rfi + _marketing + _liquidity + _operation + _dev) <= 25, "Must keep fees at 25% or less");
        emit FeesChanged();
    }

    function _reflectRfi(uint256 rRfi, uint256 tRfi) private {
        _rTotal -= rRfi;
        totFeesPaid.rfi += tRfi;
    }

    function _takeLiquidity(uint256 rLiquidity, uint256 tLiquidity) private {
        totFeesPaid.liquidity += tLiquidity;

        if (_isExcluded[address(this)]) {
            _tOwned[address(this)] += tLiquidity;
        }
        _rOwned[address(this)] += rLiquidity;
    }

    function _takeMarketing(uint256 rMarketing, uint256 tMarketing) private {
        totFeesPaid.marketing += tMarketing;

        if (_isExcluded[address(this)]) {
            _tOwned[address(this)] += tMarketing;
        }
        _rOwned[address(this)] += rMarketing;
    }

    function _takeOperation(uint256 rOperation, uint256 tOperation) private {
        totFeesPaid.operation += tOperation;

        if (_isExcluded[address(this)]) {
            _tOwned[address(this)] += tOperation;
        }
        _rOwned[address(this)] += rOperation;
    }

    function _takeDev(uint256 rDev, uint256 tDev) private {
        totFeesPaid.dev += tDev;

        if (_isExcluded[address(this)]) {
            _tOwned[address(this)] += tDev;
        }
        _rOwned[address(this)] += rDev;
    }

    function _getValues(
        uint256 tAmount,
        bool takeFee,
        bool isSell,
        bool useLaunchTax
    ) private view returns (valuesFromGetValues memory to_return) {
        to_return = _getTValues(tAmount, takeFee, isSell, useLaunchTax);
        (
            to_return.rAmount,
            to_return.rTransferAmount,
            to_return.rRfi,
            to_return.rMarketing,
            to_return.rLiquidity
        ) = _getRValues1(to_return, tAmount, takeFee, _getRate());
        (to_return.rOperation, to_return.rDev) = _getRValues2(
            to_return,
            takeFee,
            _getRate()
        );

        return to_return;
    }

    function _getTValues(
        uint256 tAmount,
        bool takeFee,
        bool isSell,
        bool useLaunchTax
    ) private view returns (valuesFromGetValues memory s) {
        if (!takeFee) {
            s.tTransferAmount = tAmount;
            return s;
        }
        Taxes memory temp;
        if (isSell && !useLaunchTax) temp = sellTaxes;
        else if (!useLaunchTax) temp = taxes;
        else temp = launchtax;

        s.tRfi = (tAmount * temp.rfi) / 100;
        s.tMarketing = (tAmount * temp.marketing) / 100;
        s.tLiquidity = (tAmount * temp.liquidity) / 100;
        s.tOperation = (tAmount * temp.operation) / 100;
        s.tDev = (tAmount * temp.dev) / 100;
        s.tTransferAmount =
            tAmount -
            s.tRfi -
            s.tMarketing -
            s.tLiquidity -
            s.tOperation -
            s.tDev;
        return s;
    }

    function _getRValues1(
        valuesFromGetValues memory s,
        uint256 tAmount,
        bool takeFee,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rRfi,
            uint256 rMarketing,
            uint256 rLiquidity
        )
    {
        rAmount = tAmount * currentRate;

        if (!takeFee) {
            return (rAmount, rAmount, 0, 0, 0);
        }

        rRfi = s.tRfi * currentRate;
        rMarketing = s.tMarketing * currentRate;
        rLiquidity = s.tLiquidity * currentRate;
        uint256 rOperation = s.tOperation * currentRate;
        uint256 rDev = s.tDev * currentRate;
        rTransferAmount =
            rAmount -
            rRfi -
            rMarketing -
            rLiquidity -
            rOperation -
            rDev;
        return (rAmount, rTransferAmount, rRfi, rMarketing, rLiquidity);
    }

    function _getRValues2(
        valuesFromGetValues memory s,
        bool takeFee,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256 rOperation,
            uint256 rDev
        )
    {
        if (!takeFee) {
            return (0, 0);
        }

        rOperation = s.tOperation * currentRate;
        rDev = s.tDev * currentRate;
        return (rOperation, rDev);
    }

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

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

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(
            amount <= balanceOf(from),
            "You are trying to transfer more than your balance"
        );
        require(!_isBlacklisted[from] && !_isBlacklisted[to], "You are a bot");

        if (!_isExcludedFromFee[from] && !_isExcludedFromFee[to]) {
            require(tradingEnabled, "Trading not active");
        }

        if (from == pair && !_isExcludedFromFee[to] && !swapping) {
            require(amount <= maxBuyLimit, "You are exceeding maxBuyLimit");
            require(
                balanceOf(to) + amount <= maxWalletLimit,
                "You are exceeding maxWalletLimit"
            );
        }

        if (
            from != pair && !_isExcludedFromFee[to] && !_isExcludedFromFee[from] && !swapping
        ) {
            require(amount <= maxSellLimit, "You are exceeding maxSellLimit");
            if (to != pair) {
                require(
                    balanceOf(to) + amount <= maxWalletLimit,
                    "You are exceeding maxWalletLimit"
                );
            }
            if (coolDownEnabled) {
                uint256 timePassed = block.timestamp - _lastSell[from];
                require(timePassed >= coolDownTime, "Cooldown enabled");
                _lastSell[from] = block.timestamp;
            }
        }

        bool canSwap = balanceOf(address(this)) >= swapTokensAtAmount;
        if (
            !swapping &&
            swapEnabled &&
            canSwap &&
            from != pair &&
            !_isExcludedFromFee[from] &&
            !_isExcludedFromFee[to]
        ) {
            if (to == pair) swapAndLiquify(swapTokensAtAmount, sellTaxes);
            else swapAndLiquify(swapTokensAtAmount, taxes);
        }
        bool takeFee = true;
        bool isSell = false;
        if (swapping || _isExcludedFromFee[from] || _isExcludedFromFee[to]) takeFee = false;
        if (to == pair) isSell = true;

        _tokenTransfer(from, to, amount, takeFee, isSell);
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 tAmount,
        bool takeFee,
        bool isSell
    ) private {
        bool useLaunchTax = !_isExcludedFromFee[sender] &&
            !_isExcludedFromFee[recipient] &&
            block.number < genesis_block + deadline;

        valuesFromGetValues memory s = _getValues(tAmount, takeFee, isSell, useLaunchTax);

        if (_isExcluded[sender]) {
            //from excluded
            _tOwned[sender] = _tOwned[sender] - tAmount;
        }
        if (_isExcluded[recipient]) {
            //to excluded
            _tOwned[recipient] = _tOwned[recipient] + s.tTransferAmount;
        }

        _rOwned[sender] = _rOwned[sender] - s.rAmount;
        _rOwned[recipient] = _rOwned[recipient] + s.rTransferAmount;

        if (s.rRfi > 0 || s.tRfi > 0) _reflectRfi(s.rRfi, s.tRfi);
        if (s.rLiquidity > 0 || s.tLiquidity > 0) {
            _takeLiquidity(s.rLiquidity, s.tLiquidity);
            emit Transfer(
                sender,
                address(this),
                s.tLiquidity + s.tMarketing + s.tOperation + s.tDev
            );
        }
        if (s.rMarketing > 0 || s.tMarketing > 0) _takeMarketing(s.rMarketing, s.tMarketing);
        if (s.rOperation > 0 || s.tOperation > 0) _takeOperation(s.rOperation, s.tOperation);
        if (s.rDev > 0 || s.tDev > 0) _takeDev(s.rDev, s.tDev);
        emit Transfer(sender, recipient, s.tTransferAmount);
    }

    function swapAndLiquify(uint256 contractBalance, Taxes memory temp) private lockTheSwap {
        uint256 denominator = (temp.liquidity +
            temp.marketing +
            temp.operation +
            temp.dev) * 2;
        uint256 tokensToAddLiquidityWith = (contractBalance * temp.liquidity) / denominator;
        uint256 toSwap = contractBalance - tokensToAddLiquidityWith;

        uint256 initialBalance = address(this).balance;

        swapTokensForETH(toSwap);

        uint256 deltaBalance = address(this).balance - initialBalance;
        uint256 unitBalance = deltaBalance / (denominator - temp.liquidity);
        uint256 ethToAddLiquidityWith = unitBalance * temp.liquidity;

        if (ethToAddLiquidityWith > 0) {
            // Add liquidity to uniswap
            addLiquidity(tokensToAddLiquidityWith, ethToAddLiquidityWith);
        }

        uint256 marketingAmt = unitBalance * 2 * temp.marketing;
        if (marketingAmt > 0) {
            payable(marketingWallet).sendValue(marketingAmt);
        }
        
        uint256 operationAmt = unitBalance * 2 * temp.operation;
        if (operationAmt > 0) {
            payable(operationWallet).sendValue(operationAmt);
        }

        uint256 devAmt = unitBalance * 2 * temp.dev;
        if (devAmt > 0) {
            payable(devWallet).sendValue(devAmt);
        }
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(router), tokenAmount);

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

    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] = router.WETH();

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

        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function bulkExcludeFee(address[] memory accounts, bool state) external onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFee[accounts[i]] = state;
        }
    }

    function updateMarketingWallet(address newWallet) external onlyOwner {
        marketingWallet = newWallet;
    }

    function updateOperationWallet(address newWallet) external onlyOwner {
        operationWallet = newWallet;
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        devWallet = newWallet;
    }

    function updateCooldown(bool state, uint256 time) external onlyOwner {
        coolDownTime = time * 1 seconds;
        coolDownEnabled = state;
    }

    function updateSwapTokensAtAmount(uint256 amount) external onlyOwner {
        swapTokensAtAmount = amount * 10**_decimals;
    }

    function updateSwapEnabled(bool _enabled) external onlyOwner {
        swapEnabled = _enabled;
    }

    function updateIsBlacklisted(address account, bool state) external onlyOwner {
        _isBlacklisted[account] = state;
    }

    function bulkIsBlacklisted(address[] memory accounts, bool state) external onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            _isBlacklisted[accounts[i]] = state;
        }
    }

    function updateAllowedTransfer(address account, bool state) external onlyOwner {
        allowedTransfer[account] = state;
    }

    function bulkupdateAllowedTransfer(address[] memory accounts, bool state) external onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            allowedTransfer[accounts[i]] = state;
        }
    }

    function updateMaxBuyTxLimit(uint256 maxBuy) external onlyOwner {
        maxBuyLimit = maxBuy * 10**decimals();
        require(maxBuy >= 100000, "Cannot set max buy amount lower than 0.1%");
    }

    function updateMaxSellTxLimit(uint256 maxSell) external onlyOwner {
        maxSellLimit = maxSell * 10**decimals();
        require(maxSell >= 100000, "Cannot set max sell amount lower than 0.1%");

    }

    function updateMaxWalletlimit(uint256 amount) external onlyOwner {
        maxWalletLimit = amount * 10**decimals();
        require(amount >= 100000, "Cannot set max wallet amount lower than 0.1%");
    }

    function updateRouterAndPair(address newRouter, address newPair) external onlyOwner {
        router = IRouter(newRouter);
        pair = newPair;
    }

    //Use this in case ETH are sent to the contract by mistake
    function rescueETH(uint256 weiAmount) external onlyOwner {
        require(address(this).balance >= weiAmount, "insufficient ETH balance");
        payable(msg.sender).transfer(weiAmount);
    }

    function rescueAnyBEP20Tokens(
        address _tokenAddr,
        address _to,
        uint256 _amount
    ) public onlyOwner {
        IERC20(_tokenAddr).transfer(_to, _amount);
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"routerAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"FeesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"oldRouter","type":"address"},{"indexed":false,"internalType":"address","name":"newRouter","type":"address"}],"name":"UpdatedRouter","type":"event"},{"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":"","type":"address"}],"name":"allowedTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"bulkExcludeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"bulkIsBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"bulkupdateAllowedTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"coolDownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coolDownTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"genesis_block","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"operationWallet","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":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferRfi","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueAnyBEP20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxes","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"operation","type":"uint256"},{"internalType":"uint256","name":"dev","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rfi","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_operation","type":"uint256"},{"internalType":"uint256","name":"_dev","type":"uint256"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rfi","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_operation","type":"uint256"},{"internalType":"uint256","name":"_dev","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setTradingStatus","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":"pure","type":"function"},{"inputs":[],"name":"taxes","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"operation","type":"uint256"},{"internalType":"uint256","name":"dev","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totFeesPaid","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"operation","type":"uint256"},{"internalType":"uint256","name":"dev","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"updateAllowedTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"},{"internalType":"uint256","name":"time","type":"uint256"}],"name":"updateCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"updateIsBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuy","type":"uint256"}],"name":"updateMaxBuyTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSell","type":"uint256"}],"name":"updateMaxSellTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateMaxWalletlimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateOperationWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"},{"internalType":"address","name":"newPair","type":"address"}],"name":"updateRouterAndPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"updatedeadline","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600b805460ff19166001179055603c600c55620000246009600a62000b84565b62000034906305f5e10062000c45565b600f819055620000479060001962000c9f565b620000559060001962000c67565b60105565b5e620f4800060115566038d7ea4c680006012819055601381905560145560006016819055601780546001600160a01b031990811661dead17909155601880548216733d27c514d3938d6072bcfe89721f29d16f0a45b717905560198054821673583a41e909e0739439bbf7cb93196be06dc481da179055601a805490911673d2b88ab1210157ace772f99d6dd4cdae5626b63f1790556040805160a080820183528382526063602080840182905283850186905260608085018790526080948501879052601b879055601c92909255601d869055601e869055601f9590955583518083018552600180825260058288018190526002838801819052838501839052928601829052818855602181905560228390556023829055602482905586519485018752818552968401879052948301819052908201849052910182905260258290556026929092556027919091556028819055602955348015620001bf57600080fd5b50604051620048d1380380620048d1833981016040819052620001e29162000af9565b620001ed33620006cf565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200022e57600080fd5b505afa15801562000243573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000269919062000af9565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002b257600080fd5b505afa158015620002c7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ed919062000af9565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200033657600080fd5b505af11580156200034b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000371919062000af9565b600d80546001600160a01b038086166001600160a01b031992831617909255600e80549284169290911682179055909150620003ad906200071f565b601754620003c4906001600160a01b03166200071f565b60105460016000620003de6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120939093553083526004918290528220805460ff19166001908117909155916200042d6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556018548216815260048452828120805486166001908117909155601954831682528382208054871682179055601a54831682528382208054871682179055601754909216815282812080548616831790557f2fc42e7588b4edb66ce07fb3609ffa59834fccc36ebe8aae6c36eab91742a4d080548616831790557f0f9a3868f1631ef1e24492db718b4e768795a0dc96cdfcac3486af5b876fb31e80548616831790557f893a60c82ffc039a4e70dd9928e5abaadc75b5334d4a4681f86e581ad9a42748805486168317905530815260069384905291822080549094168117909355620005506000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600e54821681526006909352818320805485166001908117909155601854821684528284208054861682179055601954821684528284208054861682179055601a54909116835290822080548416821790557f674b74cc59dfd2d5f1c14ef2fec6dc3b72472a1377ab553121fb7519d31d16b780548416821790557fab9d0a02af394b8961be3a9588d91fbbf70984385fd8d3031385f593b62a4bf980548416821790557333d4cc8716beb13f814f538ad3b2de3b036f5e2a9091527f62cfe9f2c815ce30bfa072f04603dc8f52731cf884f81ec2b9f6b21d86279fa58054909216179055620006766000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600f54604051620006be91815260200190565b60405180910390a350505062000cf8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b031633146200077f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff1615620007ea5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640162000776565b6001600160a01b0381166000908152600160205260409020541562000847576001600160a01b0381166000908152600160205260409020546200082d90620008ad565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000601054821115620009165760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840162000776565b60006200092262000937565b905062000930818462000b24565b9392505050565b60008080620009456200095d565b909250905062000956818362000b24565b9250505090565b601054600f546000918291825b60085481101562000ac55782600160006008848154811062000990576200099062000ce2565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180620009ff5750816002600060088481548110620009d857620009d862000ce2565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1562000a1657601054600f54945094505050509091565b600160006008838154811062000a305762000a3062000ce2565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000a61908462000c67565b9250600260006008838154811062000a7d5762000a7d62000ce2565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000aae908362000c67565b91508062000abc8162000c81565b9150506200096a565b50600f5460105462000ad8919062000b24565b82101562000af057601054600f549350935050509091565b90939092509050565b60006020828403121562000b0c57600080fd5b81516001600160a01b03811681146200093057600080fd5b60008262000b365762000b3662000ccc565b500490565b600181815b8085111562000b7c57816000190482111562000b605762000b6062000cb6565b8085161562000b6e57918102915b93841c939080029062000b40565b509250929050565b60006200093060ff84168360008262000ba05750600162000c3f565b8162000baf5750600062000c3f565b816001811462000bc8576002811462000bd35762000bf3565b600191505062000c3f565b60ff84111562000be75762000be762000cb6565b50506001821b62000c3f565b5060208310610133831016604e8410600b841016171562000c18575081810a62000c3f565b62000c24838362000b3b565b806000190482111562000c3b5762000c3b62000cb6565b0290505b92915050565b600081600019048311821515161562000c625762000c6262000cb6565b500290565b60008282101562000c7c5762000c7c62000cb6565b500390565b600060001982141562000c985762000c9862000cb6565b5060010190565b60008262000cb15762000cb162000ccc565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b613bc98062000d086000396000f3fe6080604052600436106103a65760003560e01c806385141a77116101e7578063cc309d841161010d578063e8bce48f116100a0578063f2fde38b1161006f578063f2fde38b14610b62578063f66895a314610b82578063f6bc962414610ba9578063f887ea4014610bc957600080fd5b8063e8bce48f14610af3578063ea2f0b3714610b08578063edaa116814610b28578063ee36e35914610b4857600080fd5b8063dd62ed3e116100dc578063dd62ed3e14610a57578063e042ad5814610a9d578063e2f4560514610abd578063e517f2b914610ad357600080fd5b8063cc309d84146109e1578063d257b34f14610a01578063d2ce0db214610a21578063d8672e5114610a3757600080fd5b80639e252f0011610185578063aacebbe311610154578063aacebbe314610961578063b5c5714514610981578063c0a9da66146109a1578063c791fc54146109c157600080fd5b80639e252f00146108e1578063a457c2d714610901578063a8aa1b3114610921578063a9059cbb1461094157600080fd5b80638e2839ff116101c15780638e2839ff1461084e578063924de9b71461086e57806395d89b411461088e5780639ba5e4d5146108ba57600080fd5b806385141a77146107d757806388f82020146107f75780638da5cb5b1461083057600080fd5b80634ada218b116102cc578063652e2f041161026a57806370a082311161023957806370a082311461071b578063715018a61461073b578063728f8eea1461075057806375f0a8741461079f57600080fd5b8063652e2f04146106ba57806366a88d96146106d05780636aa5b37f146106e65780636ddd1713146106fc57600080fd5b80635342acb4116102a65780635342acb4146106115780635b24ea5e1461064a5780635fcefa421461066a57806362695eae1461068a57600080fd5b80634ada218b146105b75780634fdaf486146105d157806352390c02146105f157600080fd5b80632d8381191161034457806340b28c2f1161031357806340b28c2f14610537578063437823ec146105575780634549b0391461057757806347c230921461059757600080fd5b80632d838119146104bb578063313ce567146104db5780633685d419146104f7578063395093511461051757600080fd5b806318160ddd1161038057806318160ddd146104465780631816467f1461046557806323b872dd14610485578063274a533c146104a557600080fd5b806306fdde03146103b2578063095ea7b3146103f457806313f97a8e1461042457600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506040805180820190915260078152664368692043686960c81b60208201525b6040516103eb91906138a4565b60405180910390f35b34801561040057600080fd5b5061041461040f36600461369b565b610be9565b60405190151581526020016103eb565b34801561043057600080fd5b5061044461043f3660046136c7565b610c00565b005b34801561045257600080fd5b50600f545b6040519081526020016103eb565b34801561047157600080fd5b506104446104803660046135b9565b610c9f565b34801561049157600080fd5b506104146104a036600461362c565b610ceb565b3480156104b157600080fd5b5061045760155481565b3480156104c757600080fd5b506104576104d63660046137fd565b610d9c565b3480156104e757600080fd5b50604051600981526020016103eb565b34801561050357600080fd5b506104446105123660046135b9565b610e20565b34801561052357600080fd5b5061041461053236600461369b565b610fd7565b34801561054357600080fd5b506104446105523660046135f3565b61100e565b34801561056357600080fd5b506104446105723660046135b9565b611066565b34801561058357600080fd5b50610457610592366004613816565b6110b4565b3480156105a357600080fd5b506104446105b236600461362c565b611144565b3480156105c357600080fd5b506009546104149060ff1681565b3480156105dd57600080fd5b506104446105ec3660046136c7565b6111f6565b3480156105fd57600080fd5b5061044461060c3660046135b9565b611287565b34801561061d57600080fd5b5061041461062c3660046135b9565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561065657600080fd5b5061044461066536600461366d565b6113da565b34801561067657600080fd5b50610444610685366004613869565b61142f565b34801561069657600080fd5b506104146106a53660046135b9565b60066020526000908152604090205460ff1681565b3480156106c657600080fd5b5061045760135481565b3480156106dc57600080fd5b5061045760145481565b3480156106f257600080fd5b5061045760125481565b34801561070857600080fd5b5060095461041490610100900460ff1681565b34801561072757600080fd5b506104576107363660046135b9565b611543565b34801561074757600080fd5b506104446115a2565b34801561075c57600080fd5b50602054602154602254602354602454610777949392919085565b604080519586526020860194909452928401919091526060830152608082015260a0016103eb565b3480156107ab57600080fd5b506018546107bf906001600160a01b031681565b6040516001600160a01b0390911681526020016103eb565b3480156107e357600080fd5b506017546107bf906001600160a01b031681565b34801561080357600080fd5b506104146108123660046135b9565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561083c57600080fd5b506000546001600160a01b03166107bf565b34801561085a57600080fd5b506104446108693660046136c7565b6115d8565b34801561087a57600080fd5b506104446108893660046137a5565b611669565b34801561089a57600080fd5b5060408051808201909152600381526243686960e81b60208201526103de565b3480156108c657600080fd5b50602a54602b54602c54602d54602e54610777949392919085565b3480156108ed57600080fd5b506104446108fc3660046137fd565b6116ad565b34801561090d57600080fd5b5061041461091c36600461369b565b611754565b34801561092d57600080fd5b50600e546107bf906001600160a01b031681565b34801561094d57600080fd5b5061041461095c36600461369b565b6117ef565b34801561096d57600080fd5b5061044461097c3660046135b9565b6117fc565b34801561098d57600080fd5b5061044461099c36600461366d565b611848565b3480156109ad57600080fd5b506104446109bc3660046137fd565b61189d565b3480156109cd57600080fd5b506104446109dc366004613869565b611948565b3480156109ed57600080fd5b506104446109fc3660046137fd565b6119c1565b348015610a0d57600080fd5b50610444610a1c3660046137fd565b611a6a565b348015610a2d57600080fd5b50610457600c5481565b348015610a4357600080fd5b50610444610a523660046137fd565b611ab0565b348015610a6357600080fd5b50610457610a723660046135f3565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610aa957600080fd5b506019546107bf906001600160a01b031681565b348015610ac957600080fd5b5061045760115481565b348015610adf57600080fd5b50610444610aee3660046137df565b611b5b565b348015610aff57600080fd5b50610444611ba7565b348015610b1457600080fd5b50610444610b233660046135b9565b611c39565b348015610b3457600080fd5b50610444610b433660046137fd565b611c84565b348015610b5457600080fd5b50600b546104149060ff1681565b348015610b6e57600080fd5b50610444610b7d3660046135b9565b611d14565b348015610b8e57600080fd5b50602554602654602754602854602954610777949392919085565b348015610bb557600080fd5b50610444610bc43660046135b9565b611dac565b348015610bd557600080fd5b50600d546107bf906001600160a01b031681565b6000610bf6338484611df8565b5060015b92915050565b6000546001600160a01b03163314610c335760405162461bcd60e51b8152600401610c2a906138f9565b60405180910390fd5b60005b8251811015610c9a578160076000858481518110610c5657610c56613b44565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610c9281613afd565b915050610c36565b505050565b6000546001600160a01b03163314610cc95760405162461bcd60e51b8152600401610c2a906138f9565b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610cf8848484611f1c565b6001600160a01b038416600090815260036020908152604080832033845290915290205482811015610d7d5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c2a565b610d918533610d8c8685613ae6565b611df8565b506001949350505050565b6000601054821115610e035760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c2a565b6000610e0d61266a565b9050610e1981846139b7565b9392505050565b6000546001600160a01b03163314610e4a5760405162461bcd60e51b8152600401610c2a906138f9565b6001600160a01b03811660009081526005602052604090205460ff16610eb25760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610c2a565b60005b600854811015610fd357816001600160a01b031660088281548110610edc57610edc613b44565b6000918252602090912001546001600160a01b03161415610fc15760088054610f0790600190613ae6565b81548110610f1757610f17613b44565b600091825260209091200154600880546001600160a01b039092169183908110610f4357610f43613b44565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556008805480610f9b57610f9b613b2e565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610fcb81613afd565b915050610eb5565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610bf6918590610d8c90869061399f565b6000546001600160a01b031633146110385760405162461bcd60e51b8152600401610c2a906138f9565b600d80546001600160a01b039384166001600160a01b031991821617909155600e8054929093169116179055565b6000546001600160a01b031633146110905760405162461bcd60e51b8152600401610c2a906138f9565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600f548311156111085760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c2a565b8161112757600061111d84600160008061268d565b519150610bfa9050565b600061113784600160008061268d565b602001519150610bfa9050565b6000546001600160a01b0316331461116e5760405162461bcd60e51b8152600401610c2a906138f9565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401602060405180830381600087803b1580156111b857600080fd5b505af11580156111cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f091906137c2565b50505050565b6000546001600160a01b031633146112205760405162461bcd60e51b8152600401610c2a906138f9565b60005b8251811015610c9a57816006600085848151811061124357611243613b44565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061127f81613afd565b915050611223565b6000546001600160a01b031633146112b15760405162461bcd60e51b8152600401610c2a906138f9565b6001600160a01b03811660009081526005602052604090205460ff161561131a5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c2a565b6001600160a01b03811660009081526001602052604090205415611374576001600160a01b03811660009081526001602052604090205461135a90610d9c565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146114045760405162461bcd60e51b8152600401610c2a906138f9565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146114595760405162461bcd60e51b8152600401610c2a906138f9565b6040805160a081018252868152602080820187905291810185905260608101849052608001829052859055602184905560228390556023829055602481905560198183856114a7888a61399f565b6114b1919061399f565b6114bb919061399f565b6114c5919061399f565b11156115135760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c6573730000006044820152606401610c2a565b6040517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a15050505050565b6001600160a01b03811660009081526005602052604081205460ff161561158057506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610bfa90610d9c565b6000546001600160a01b031633146115cc5760405162461bcd60e51b8152600401610c2a906138f9565b6115d660006126f1565b565b6000546001600160a01b031633146116025760405162461bcd60e51b8152600401610c2a906138f9565b60005b8251811015610c9a57816004600085848151811061162557611625613b44565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061166181613afd565b915050611605565b6000546001600160a01b031633146116935760405162461bcd60e51b8152600401610c2a906138f9565b600980549115156101000261ff0019909216919091179055565b6000546001600160a01b031633146116d75760405162461bcd60e51b8152600401610c2a906138f9565b804710156117275760405162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e74204554482062616c616e636500000000000000006044820152606401610c2a565b604051339082156108fc029083906000818181858888f19350505050158015610fd3573d6000803e3d6000fd5b3360009081526003602090815260408083206001600160a01b0386168452909152812054828110156117d65760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c2a565b6117e53385610d8c8685613ae6565b5060019392505050565b6000610bf6338484611f1c565b6000546001600160a01b031633146118265760405162461bcd60e51b8152600401610c2a906138f9565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118725760405162461bcd60e51b8152600401610c2a906138f9565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146118c75760405162461bcd60e51b8152600401610c2a906138f9565b6118d36009600a613a1c565b6118dd9082613ac7565b601255620186a08110156119455760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610c2a565b50565b6000546001600160a01b031633146119725760405162461bcd60e51b8152600401610c2a906138f9565b6040805160a08101825286815260208101869052908101849052606081018390526080018190526025859055602684905560278390556028829055602981905560198183856114a7888a61399f565b6000546001600160a01b031633146119eb5760405162461bcd60e51b8152600401610c2a906138f9565b6119f76009600a613a1c565b611a019082613ac7565b601355620186a08110156119455760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610c2a565b6000546001600160a01b03163314611a945760405162461bcd60e51b8152600401610c2a906138f9565b611aa06009600a613a1c565b611aaa9082613ac7565b60115550565b6000546001600160a01b03163314611ada5760405162461bcd60e51b8152600401610c2a906138f9565b611ae66009600a613a1c565b611af09082613ac7565b601455620186a08110156119455760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e312560a01b6064820152608401610c2a565b6000546001600160a01b03163314611b855760405162461bcd60e51b8152600401610c2a906138f9565b611b90816001613ac7565b600c5550600b805460ff1916911515919091179055565b6000546001600160a01b03163314611bd15760405162461bcd60e51b8152600401610c2a906138f9565b60095460ff1615611c245760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f742072652d656e61626c652074726164696e6700000000000000006044820152606401610c2a565b6009805461ffff191661010117905543601555565b6000546001600160a01b03163314611c635760405162461bcd60e51b8152600401610c2a906138f9565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611cae5760405162461bcd60e51b8152600401610c2a906138f9565b60095460ff1615611d0f5760405162461bcd60e51b815260206004820152602560248201527f43616e2774206368616e6765207768656e2074726164696e6720686173207374604482015264185c9d195960da1b6064820152608401610c2a565b601655565b6000546001600160a01b03163314611d3e5760405162461bcd60e51b8152600401610c2a906138f9565b6001600160a01b038116611da35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c2a565b611945816126f1565b6000546001600160a01b03163314611dd65760405162461bcd60e51b8152600401610c2a906138f9565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611e5a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c2a565b6001600160a01b038216611ebb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c2a565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611f805760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c2a565b6001600160a01b038216611fe25760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c2a565b600081116120445760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c2a565b61204d83611543565b8111156120b65760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610c2a565b6001600160a01b03831660009081526007602052604090205460ff161580156120f857506001600160a01b03821660009081526007602052604090205460ff16155b6121345760405162461bcd60e51b815260206004820152600d60248201526c165bdd48185c99481848189bdd609a1b6044820152606401610c2a565b6001600160a01b03831660009081526004602052604090205460ff1615801561217657506001600160a01b03821660009081526004602052604090205460ff16155b156121c25760095460ff166121c25760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b6044820152606401610c2a565b600e546001600160a01b0384811691161480156121f857506001600160a01b03821660009081526004602052604090205460ff16155b801561220d575060095462010000900460ff16155b156122c9576012548111156122645760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61784275794c696d69740000006044820152606401610c2a565b6014548161227184611543565b61227b919061399f565b11156122c95760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610c2a565b600e546001600160a01b0384811691161480159061230057506001600160a01b03821660009081526004602052604090205460ff16155b801561232557506001600160a01b03831660009081526004602052604090205460ff16155b801561233a575060095462010000900460ff16155b1561249d576013548111156123915760405162461bcd60e51b815260206004820152601e60248201527f596f752061726520657863656564696e67206d617853656c6c4c696d697400006044820152606401610c2a565b600e546001600160a01b0383811691161461240b57601454816123b384611543565b6123bd919061399f565b111561240b5760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610c2a565b600b5460ff161561249d576001600160a01b0383166000908152600a60205260408120546124399042613ae6565b9050600c548110156124805760405162461bcd60e51b815260206004820152601060248201526f10dbdbdb191bdddb88195b98589b195960821b6044820152606401610c2a565b506001600160a01b0383166000908152600a602052604090204290555b60006011546124ab30611543565b600954911115915062010000900460ff161580156124d05750600954610100900460ff165b80156124d95750805b80156124f35750600e546001600160a01b03858116911614155b801561251857506001600160a01b03841660009081526004602052604090205460ff16155b801561253d57506001600160a01b03831660009081526004602052604090205460ff16155b156125d957600e546001600160a01b038481169116141561259b576011546040805160a0810182526025548152602654602082015260275491810191909152602854606082015260295460808201526125969190612741565b6125d9565b6011546040805160a0810182526020805482526021549082015260225491810191909152602354606082015260245460808201526125d99190612741565b60095460019060009062010000900460ff168061260e57506001600160a01b03861660009081526004602052604090205460ff165b8061263157506001600160a01b03851660009081526004602052604090205460ff165b1561263b57600091505b600e546001600160a01b0386811691161415612655575060015b61266286868685856128e7565b505050505050565b6000806000612677612c56565b909250905061268681836139b7565b9250505090565b612695613536565b6126a185858585612dd9565b90506126b68186866126b161266a565b612fdb565b608086015260608501526040840152602083015281526126de81856126d961266a565b6130ac565b60c083015260a08201525b949350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6009805462ff0000191662010000179055608081015160608201516020830151604084015160009392916127749161399f565b61277e919061399f565b612788919061399f565b612793906002613ac7565b90506000818360400151856127a89190613ac7565b6127b291906139b7565b905060006127c08286613ae6565b9050476127cc826130ee565b60006127d88247613ae6565b905060008660400151866127ec9190613ae6565b6127f690836139b7565b9050600087604001518261280a9190613ac7565b9050801561281c5761281c868261324f565b602088015160009061282f846002613ac7565b6128399190613ac7565b9050801561285757601854612857906001600160a01b031682613333565b606089015160009061286a856002613ac7565b6128749190613ac7565b9050801561289257601954612892906001600160a01b031682613333565b60808a01516000906128a5866002613ac7565b6128af9190613ac7565b905080156128cd57601a546128cd906001600160a01b031682613333565b50506009805462ff00001916905550505050505050505050565b6001600160a01b03851660009081526004602052604081205460ff1615801561292957506001600160a01b03851660009081526004602052604090205460ff16155b80156129435750601654601554612940919061399f565b43105b905060006129538585858561268d565b6001600160a01b03881660009081526005602052604090205490915060ff16156129b5576001600160a01b03871660009081526002602052604090205461299b908690613ae6565b6001600160a01b0388166000908152600260205260409020555b6001600160a01b03861660009081526005602052604090205460ff1615612a185760e08101516001600160a01b0387166000908152600260205260409020546129fe919061399f565b6001600160a01b0387166000908152600260205260409020555b80516001600160a01b038816600090815260016020526040902054612a3d9190613ae6565b6001600160a01b0380891660009081526001602090815260408083209490945584015191891681529190912054612a74919061399f565b6001600160a01b0387166000908152600160205260409081902091909155810151151580612aa757506000816101000151115b15612abf57612abf816040015182610100015161344c565b600081608001511180612ad757506000816101400151115b15612b6c57612aef8160800151826101400151613481565b306001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836101800151846101600151856101200151866101400151612b46919061399f565b612b50919061399f565b612b5a919061399f565b60405190815260200160405180910390a35b600081606001511180612b8457506000816101200151115b15612b9c57612b9c81606001518261012001516134f7565b60008160a001511180612bb457506000816101600151115b15612bcc57612bcc8160a0015182610160015161350c565b60008160c001511180612be457506000816101800151115b15612bfc57612bfc8160c00151826101800151613521565b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360e00151604051612c4591815260200190565b60405180910390a350505050505050565b601054600f546000918291825b600854811015612da857826001600060088481548110612c8557612c85613b44565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612cf05750816002600060088481548110612cc957612cc9613b44565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612d0657601054600f54945094505050509091565b6001600060088381548110612d1d57612d1d613b44565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612d4c9084613ae6565b92506002600060088381548110612d6557612d65613b44565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612d949083613ae6565b915080612da081613afd565b915050612c63565b50600f54601054612db991906139b7565b821015612dd057601054600f549350935050509091565b90939092509050565b612de1613536565b83612df25760e081018590526126e9565b612e246040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b838015612e2f575082155b15612e6b57506040805160a081018252602554815260265460208201526027549181019190915260285460608201526029546080820152612eda565b82612ea757506040805160a081018252602080548252602154908201526022549181019190915260235460608201526024546080820152612eda565b506040805160a081018252601b548152601c546020820152601d5491810191909152601e546060820152601f5460808201525b8051606490612ee99088613ac7565b612ef391906139b7565b6101008301526020810151606490612f0b9088613ac7565b612f1591906139b7565b6101208301526040810151606490612f2d9088613ac7565b612f3791906139b7565b6101408301526060810151606490612f4f9088613ac7565b612f5991906139b7565b6101608301526080810151606490612f719088613ac7565b612f7b91906139b7565b6101808301819052610160830151610140840151610120850151610100860151612fa5908b613ae6565b612faf9190613ae6565b612fb99190613ae6565b612fc39190613ae6565b612fcd9190613ae6565b60e083015250949350505050565b600080808080612feb8689613ac7565b945086613003575083925060009150819050806130a1565b858961010001516130149190613ac7565b9250858961012001516130279190613ac7565b91508589610140015161303a9190613ac7565b90506000868a610160015161304f9190613ac7565b90506000878b61018001516130649190613ac7565b905080828486613074898c613ae6565b61307e9190613ae6565b6130889190613ae6565b6130929190613ae6565b61309c9190613ae6565b955050505b945094509450945094565b600080836130bf575060009050806130e6565b828561016001516130d09190613ac7565b9150828561018001516130e39190613ac7565b90505b935093915050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061312357613123613b44565b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561317757600080fd5b505afa15801561318b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131af91906135d6565b816001815181106131c2576131c2613b44565b6001600160a01b039283166020918202929092010152600d546131e89130911684611df8565b600d5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061322190859060009086903090429060040161392e565b600060405180830381600087803b15801561323b57600080fd5b505af1158015612662573d6000803e3d6000fd5b600d546132679030906001600160a01b031684611df8565b600d546001600160a01b031663f305d7198230856000806132906000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b1580156132f357600080fd5b505af1158015613307573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061332c919061383b565b5050505050565b804710156133835760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610c2a565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146133d0576040519150601f19603f3d011682016040523d82523d6000602084013e6133d5565b606091505b5050905080610c9a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610c2a565b816010600082825461345e9190613ae6565b9091555050602a805482919060009061347890849061399f565b90915550505050565b80602a6002016000828254613496919061399f565b90915550503060009081526005602052604090205460ff16156134d85730600090815260026020526040812080548392906134d290849061399f565b90915550505b306000908152600160205260408120805484929061347890849061399f565b80602a6001016000828254613496919061399f565b80602a6003016000828254613496919061399f565b80602a6004016000828254613496919061399f565b604051806101a00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b80356135a981613b70565b919050565b80356135a981613b85565b6000602082840312156135cb57600080fd5b8135610e1981613b70565b6000602082840312156135e857600080fd5b8151610e1981613b70565b6000806040838503121561360657600080fd5b823561361181613b70565b9150602083013561362181613b70565b809150509250929050565b60008060006060848603121561364157600080fd5b833561364c81613b70565b9250602084013561365c81613b70565b929592945050506040919091013590565b6000806040838503121561368057600080fd5b823561368b81613b70565b9150602083013561362181613b85565b600080604083850312156136ae57600080fd5b82356136b981613b70565b946020939093013593505050565b600080604083850312156136da57600080fd5b823567ffffffffffffffff808211156136f257600080fd5b818501915085601f83011261370657600080fd5b813560208282111561371a5761371a613b5a565b8160051b604051601f19603f8301168101818110868211171561373f5761373f613b5a565b604052838152828101945085830182870184018b101561375e57600080fd5b600096505b84871015613788576137748161359e565b865260019690960195948301948301613763565b50965061379890508782016135ae565b9450505050509250929050565b6000602082840312156137b757600080fd5b8135610e1981613b85565b6000602082840312156137d457600080fd5b8151610e1981613b85565b600080604083850312156137f257600080fd5b82356136b981613b85565b60006020828403121561380f57600080fd5b5035919050565b6000806040838503121561382957600080fd5b82359150602083013561362181613b85565b60008060006060848603121561385057600080fd5b8351925060208401519150604084015190509250925092565b600080600080600060a0868803121561388157600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208083528351808285015260005b818110156138d1578581018301518582016040015282016138b5565b818111156138e3576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561397e5784516001600160a01b031683529383019391830191600101613959565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156139b2576139b2613b18565b500190565b6000826139d457634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115613a145781600019048211156139fa576139fa613b18565b80851615613a0757918102915b93841c93908002906139de565b509250929050565b6000610e1960ff841683600082613a3557506001610bfa565b81613a4257506000610bfa565b8160018114613a585760028114613a6257613a7e565b6001915050610bfa565b60ff841115613a7357613a73613b18565b50506001821b610bfa565b5060208310610133831016604e8410600b8410161715613aa1575081810a610bfa565b613aab83836139d9565b8060001904821115613abf57613abf613b18565b029392505050565b6000816000190483118215151615613ae157613ae1613b18565b500290565b600082821015613af857613af8613b18565b500390565b6000600019821415613b1157613b11613b18565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461194557600080fd5b801515811461194557600080fdfea26469706673582212200a42b9963eadb83c0997700603b446ec00f224469c503a44de6e532e13d7ac2c64736f6c634300080700330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

Deployed Bytecode

0x6080604052600436106103a65760003560e01c806385141a77116101e7578063cc309d841161010d578063e8bce48f116100a0578063f2fde38b1161006f578063f2fde38b14610b62578063f66895a314610b82578063f6bc962414610ba9578063f887ea4014610bc957600080fd5b8063e8bce48f14610af3578063ea2f0b3714610b08578063edaa116814610b28578063ee36e35914610b4857600080fd5b8063dd62ed3e116100dc578063dd62ed3e14610a57578063e042ad5814610a9d578063e2f4560514610abd578063e517f2b914610ad357600080fd5b8063cc309d84146109e1578063d257b34f14610a01578063d2ce0db214610a21578063d8672e5114610a3757600080fd5b80639e252f0011610185578063aacebbe311610154578063aacebbe314610961578063b5c5714514610981578063c0a9da66146109a1578063c791fc54146109c157600080fd5b80639e252f00146108e1578063a457c2d714610901578063a8aa1b3114610921578063a9059cbb1461094157600080fd5b80638e2839ff116101c15780638e2839ff1461084e578063924de9b71461086e57806395d89b411461088e5780639ba5e4d5146108ba57600080fd5b806385141a77146107d757806388f82020146107f75780638da5cb5b1461083057600080fd5b80634ada218b116102cc578063652e2f041161026a57806370a082311161023957806370a082311461071b578063715018a61461073b578063728f8eea1461075057806375f0a8741461079f57600080fd5b8063652e2f04146106ba57806366a88d96146106d05780636aa5b37f146106e65780636ddd1713146106fc57600080fd5b80635342acb4116102a65780635342acb4146106115780635b24ea5e1461064a5780635fcefa421461066a57806362695eae1461068a57600080fd5b80634ada218b146105b75780634fdaf486146105d157806352390c02146105f157600080fd5b80632d8381191161034457806340b28c2f1161031357806340b28c2f14610537578063437823ec146105575780634549b0391461057757806347c230921461059757600080fd5b80632d838119146104bb578063313ce567146104db5780633685d419146104f7578063395093511461051757600080fd5b806318160ddd1161038057806318160ddd146104465780631816467f1461046557806323b872dd14610485578063274a533c146104a557600080fd5b806306fdde03146103b2578063095ea7b3146103f457806313f97a8e1461042457600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506040805180820190915260078152664368692043686960c81b60208201525b6040516103eb91906138a4565b60405180910390f35b34801561040057600080fd5b5061041461040f36600461369b565b610be9565b60405190151581526020016103eb565b34801561043057600080fd5b5061044461043f3660046136c7565b610c00565b005b34801561045257600080fd5b50600f545b6040519081526020016103eb565b34801561047157600080fd5b506104446104803660046135b9565b610c9f565b34801561049157600080fd5b506104146104a036600461362c565b610ceb565b3480156104b157600080fd5b5061045760155481565b3480156104c757600080fd5b506104576104d63660046137fd565b610d9c565b3480156104e757600080fd5b50604051600981526020016103eb565b34801561050357600080fd5b506104446105123660046135b9565b610e20565b34801561052357600080fd5b5061041461053236600461369b565b610fd7565b34801561054357600080fd5b506104446105523660046135f3565b61100e565b34801561056357600080fd5b506104446105723660046135b9565b611066565b34801561058357600080fd5b50610457610592366004613816565b6110b4565b3480156105a357600080fd5b506104446105b236600461362c565b611144565b3480156105c357600080fd5b506009546104149060ff1681565b3480156105dd57600080fd5b506104446105ec3660046136c7565b6111f6565b3480156105fd57600080fd5b5061044461060c3660046135b9565b611287565b34801561061d57600080fd5b5061041461062c3660046135b9565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561065657600080fd5b5061044461066536600461366d565b6113da565b34801561067657600080fd5b50610444610685366004613869565b61142f565b34801561069657600080fd5b506104146106a53660046135b9565b60066020526000908152604090205460ff1681565b3480156106c657600080fd5b5061045760135481565b3480156106dc57600080fd5b5061045760145481565b3480156106f257600080fd5b5061045760125481565b34801561070857600080fd5b5060095461041490610100900460ff1681565b34801561072757600080fd5b506104576107363660046135b9565b611543565b34801561074757600080fd5b506104446115a2565b34801561075c57600080fd5b50602054602154602254602354602454610777949392919085565b604080519586526020860194909452928401919091526060830152608082015260a0016103eb565b3480156107ab57600080fd5b506018546107bf906001600160a01b031681565b6040516001600160a01b0390911681526020016103eb565b3480156107e357600080fd5b506017546107bf906001600160a01b031681565b34801561080357600080fd5b506104146108123660046135b9565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561083c57600080fd5b506000546001600160a01b03166107bf565b34801561085a57600080fd5b506104446108693660046136c7565b6115d8565b34801561087a57600080fd5b506104446108893660046137a5565b611669565b34801561089a57600080fd5b5060408051808201909152600381526243686960e81b60208201526103de565b3480156108c657600080fd5b50602a54602b54602c54602d54602e54610777949392919085565b3480156108ed57600080fd5b506104446108fc3660046137fd565b6116ad565b34801561090d57600080fd5b5061041461091c36600461369b565b611754565b34801561092d57600080fd5b50600e546107bf906001600160a01b031681565b34801561094d57600080fd5b5061041461095c36600461369b565b6117ef565b34801561096d57600080fd5b5061044461097c3660046135b9565b6117fc565b34801561098d57600080fd5b5061044461099c36600461366d565b611848565b3480156109ad57600080fd5b506104446109bc3660046137fd565b61189d565b3480156109cd57600080fd5b506104446109dc366004613869565b611948565b3480156109ed57600080fd5b506104446109fc3660046137fd565b6119c1565b348015610a0d57600080fd5b50610444610a1c3660046137fd565b611a6a565b348015610a2d57600080fd5b50610457600c5481565b348015610a4357600080fd5b50610444610a523660046137fd565b611ab0565b348015610a6357600080fd5b50610457610a723660046135f3565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610aa957600080fd5b506019546107bf906001600160a01b031681565b348015610ac957600080fd5b5061045760115481565b348015610adf57600080fd5b50610444610aee3660046137df565b611b5b565b348015610aff57600080fd5b50610444611ba7565b348015610b1457600080fd5b50610444610b233660046135b9565b611c39565b348015610b3457600080fd5b50610444610b433660046137fd565b611c84565b348015610b5457600080fd5b50600b546104149060ff1681565b348015610b6e57600080fd5b50610444610b7d3660046135b9565b611d14565b348015610b8e57600080fd5b50602554602654602754602854602954610777949392919085565b348015610bb557600080fd5b50610444610bc43660046135b9565b611dac565b348015610bd557600080fd5b50600d546107bf906001600160a01b031681565b6000610bf6338484611df8565b5060015b92915050565b6000546001600160a01b03163314610c335760405162461bcd60e51b8152600401610c2a906138f9565b60405180910390fd5b60005b8251811015610c9a578160076000858481518110610c5657610c56613b44565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610c9281613afd565b915050610c36565b505050565b6000546001600160a01b03163314610cc95760405162461bcd60e51b8152600401610c2a906138f9565b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610cf8848484611f1c565b6001600160a01b038416600090815260036020908152604080832033845290915290205482811015610d7d5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c2a565b610d918533610d8c8685613ae6565b611df8565b506001949350505050565b6000601054821115610e035760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c2a565b6000610e0d61266a565b9050610e1981846139b7565b9392505050565b6000546001600160a01b03163314610e4a5760405162461bcd60e51b8152600401610c2a906138f9565b6001600160a01b03811660009081526005602052604090205460ff16610eb25760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610c2a565b60005b600854811015610fd357816001600160a01b031660088281548110610edc57610edc613b44565b6000918252602090912001546001600160a01b03161415610fc15760088054610f0790600190613ae6565b81548110610f1757610f17613b44565b600091825260209091200154600880546001600160a01b039092169183908110610f4357610f43613b44565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556008805480610f9b57610f9b613b2e565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610fcb81613afd565b915050610eb5565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610bf6918590610d8c90869061399f565b6000546001600160a01b031633146110385760405162461bcd60e51b8152600401610c2a906138f9565b600d80546001600160a01b039384166001600160a01b031991821617909155600e8054929093169116179055565b6000546001600160a01b031633146110905760405162461bcd60e51b8152600401610c2a906138f9565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600f548311156111085760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c2a565b8161112757600061111d84600160008061268d565b519150610bfa9050565b600061113784600160008061268d565b602001519150610bfa9050565b6000546001600160a01b0316331461116e5760405162461bcd60e51b8152600401610c2a906138f9565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401602060405180830381600087803b1580156111b857600080fd5b505af11580156111cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f091906137c2565b50505050565b6000546001600160a01b031633146112205760405162461bcd60e51b8152600401610c2a906138f9565b60005b8251811015610c9a57816006600085848151811061124357611243613b44565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061127f81613afd565b915050611223565b6000546001600160a01b031633146112b15760405162461bcd60e51b8152600401610c2a906138f9565b6001600160a01b03811660009081526005602052604090205460ff161561131a5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c2a565b6001600160a01b03811660009081526001602052604090205415611374576001600160a01b03811660009081526001602052604090205461135a90610d9c565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146114045760405162461bcd60e51b8152600401610c2a906138f9565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146114595760405162461bcd60e51b8152600401610c2a906138f9565b6040805160a081018252868152602080820187905291810185905260608101849052608001829052859055602184905560228390556023829055602481905560198183856114a7888a61399f565b6114b1919061399f565b6114bb919061399f565b6114c5919061399f565b11156115135760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c6573730000006044820152606401610c2a565b6040517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a15050505050565b6001600160a01b03811660009081526005602052604081205460ff161561158057506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610bfa90610d9c565b6000546001600160a01b031633146115cc5760405162461bcd60e51b8152600401610c2a906138f9565b6115d660006126f1565b565b6000546001600160a01b031633146116025760405162461bcd60e51b8152600401610c2a906138f9565b60005b8251811015610c9a57816004600085848151811061162557611625613b44565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061166181613afd565b915050611605565b6000546001600160a01b031633146116935760405162461bcd60e51b8152600401610c2a906138f9565b600980549115156101000261ff0019909216919091179055565b6000546001600160a01b031633146116d75760405162461bcd60e51b8152600401610c2a906138f9565b804710156117275760405162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e74204554482062616c616e636500000000000000006044820152606401610c2a565b604051339082156108fc029083906000818181858888f19350505050158015610fd3573d6000803e3d6000fd5b3360009081526003602090815260408083206001600160a01b0386168452909152812054828110156117d65760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c2a565b6117e53385610d8c8685613ae6565b5060019392505050565b6000610bf6338484611f1c565b6000546001600160a01b031633146118265760405162461bcd60e51b8152600401610c2a906138f9565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118725760405162461bcd60e51b8152600401610c2a906138f9565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146118c75760405162461bcd60e51b8152600401610c2a906138f9565b6118d36009600a613a1c565b6118dd9082613ac7565b601255620186a08110156119455760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610c2a565b50565b6000546001600160a01b031633146119725760405162461bcd60e51b8152600401610c2a906138f9565b6040805160a08101825286815260208101869052908101849052606081018390526080018190526025859055602684905560278390556028829055602981905560198183856114a7888a61399f565b6000546001600160a01b031633146119eb5760405162461bcd60e51b8152600401610c2a906138f9565b6119f76009600a613a1c565b611a019082613ac7565b601355620186a08110156119455760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610c2a565b6000546001600160a01b03163314611a945760405162461bcd60e51b8152600401610c2a906138f9565b611aa06009600a613a1c565b611aaa9082613ac7565b60115550565b6000546001600160a01b03163314611ada5760405162461bcd60e51b8152600401610c2a906138f9565b611ae66009600a613a1c565b611af09082613ac7565b601455620186a08110156119455760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e312560a01b6064820152608401610c2a565b6000546001600160a01b03163314611b855760405162461bcd60e51b8152600401610c2a906138f9565b611b90816001613ac7565b600c5550600b805460ff1916911515919091179055565b6000546001600160a01b03163314611bd15760405162461bcd60e51b8152600401610c2a906138f9565b60095460ff1615611c245760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f742072652d656e61626c652074726164696e6700000000000000006044820152606401610c2a565b6009805461ffff191661010117905543601555565b6000546001600160a01b03163314611c635760405162461bcd60e51b8152600401610c2a906138f9565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611cae5760405162461bcd60e51b8152600401610c2a906138f9565b60095460ff1615611d0f5760405162461bcd60e51b815260206004820152602560248201527f43616e2774206368616e6765207768656e2074726164696e6720686173207374604482015264185c9d195960da1b6064820152608401610c2a565b601655565b6000546001600160a01b03163314611d3e5760405162461bcd60e51b8152600401610c2a906138f9565b6001600160a01b038116611da35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c2a565b611945816126f1565b6000546001600160a01b03163314611dd65760405162461bcd60e51b8152600401610c2a906138f9565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611e5a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c2a565b6001600160a01b038216611ebb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c2a565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611f805760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c2a565b6001600160a01b038216611fe25760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c2a565b600081116120445760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c2a565b61204d83611543565b8111156120b65760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610c2a565b6001600160a01b03831660009081526007602052604090205460ff161580156120f857506001600160a01b03821660009081526007602052604090205460ff16155b6121345760405162461bcd60e51b815260206004820152600d60248201526c165bdd48185c99481848189bdd609a1b6044820152606401610c2a565b6001600160a01b03831660009081526004602052604090205460ff1615801561217657506001600160a01b03821660009081526004602052604090205460ff16155b156121c25760095460ff166121c25760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b6044820152606401610c2a565b600e546001600160a01b0384811691161480156121f857506001600160a01b03821660009081526004602052604090205460ff16155b801561220d575060095462010000900460ff16155b156122c9576012548111156122645760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61784275794c696d69740000006044820152606401610c2a565b6014548161227184611543565b61227b919061399f565b11156122c95760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610c2a565b600e546001600160a01b0384811691161480159061230057506001600160a01b03821660009081526004602052604090205460ff16155b801561232557506001600160a01b03831660009081526004602052604090205460ff16155b801561233a575060095462010000900460ff16155b1561249d576013548111156123915760405162461bcd60e51b815260206004820152601e60248201527f596f752061726520657863656564696e67206d617853656c6c4c696d697400006044820152606401610c2a565b600e546001600160a01b0383811691161461240b57601454816123b384611543565b6123bd919061399f565b111561240b5760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610c2a565b600b5460ff161561249d576001600160a01b0383166000908152600a60205260408120546124399042613ae6565b9050600c548110156124805760405162461bcd60e51b815260206004820152601060248201526f10dbdbdb191bdddb88195b98589b195960821b6044820152606401610c2a565b506001600160a01b0383166000908152600a602052604090204290555b60006011546124ab30611543565b600954911115915062010000900460ff161580156124d05750600954610100900460ff165b80156124d95750805b80156124f35750600e546001600160a01b03858116911614155b801561251857506001600160a01b03841660009081526004602052604090205460ff16155b801561253d57506001600160a01b03831660009081526004602052604090205460ff16155b156125d957600e546001600160a01b038481169116141561259b576011546040805160a0810182526025548152602654602082015260275491810191909152602854606082015260295460808201526125969190612741565b6125d9565b6011546040805160a0810182526020805482526021549082015260225491810191909152602354606082015260245460808201526125d99190612741565b60095460019060009062010000900460ff168061260e57506001600160a01b03861660009081526004602052604090205460ff165b8061263157506001600160a01b03851660009081526004602052604090205460ff165b1561263b57600091505b600e546001600160a01b0386811691161415612655575060015b61266286868685856128e7565b505050505050565b6000806000612677612c56565b909250905061268681836139b7565b9250505090565b612695613536565b6126a185858585612dd9565b90506126b68186866126b161266a565b612fdb565b608086015260608501526040840152602083015281526126de81856126d961266a565b6130ac565b60c083015260a08201525b949350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6009805462ff0000191662010000179055608081015160608201516020830151604084015160009392916127749161399f565b61277e919061399f565b612788919061399f565b612793906002613ac7565b90506000818360400151856127a89190613ac7565b6127b291906139b7565b905060006127c08286613ae6565b9050476127cc826130ee565b60006127d88247613ae6565b905060008660400151866127ec9190613ae6565b6127f690836139b7565b9050600087604001518261280a9190613ac7565b9050801561281c5761281c868261324f565b602088015160009061282f846002613ac7565b6128399190613ac7565b9050801561285757601854612857906001600160a01b031682613333565b606089015160009061286a856002613ac7565b6128749190613ac7565b9050801561289257601954612892906001600160a01b031682613333565b60808a01516000906128a5866002613ac7565b6128af9190613ac7565b905080156128cd57601a546128cd906001600160a01b031682613333565b50506009805462ff00001916905550505050505050505050565b6001600160a01b03851660009081526004602052604081205460ff1615801561292957506001600160a01b03851660009081526004602052604090205460ff16155b80156129435750601654601554612940919061399f565b43105b905060006129538585858561268d565b6001600160a01b03881660009081526005602052604090205490915060ff16156129b5576001600160a01b03871660009081526002602052604090205461299b908690613ae6565b6001600160a01b0388166000908152600260205260409020555b6001600160a01b03861660009081526005602052604090205460ff1615612a185760e08101516001600160a01b0387166000908152600260205260409020546129fe919061399f565b6001600160a01b0387166000908152600260205260409020555b80516001600160a01b038816600090815260016020526040902054612a3d9190613ae6565b6001600160a01b0380891660009081526001602090815260408083209490945584015191891681529190912054612a74919061399f565b6001600160a01b0387166000908152600160205260409081902091909155810151151580612aa757506000816101000151115b15612abf57612abf816040015182610100015161344c565b600081608001511180612ad757506000816101400151115b15612b6c57612aef8160800151826101400151613481565b306001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836101800151846101600151856101200151866101400151612b46919061399f565b612b50919061399f565b612b5a919061399f565b60405190815260200160405180910390a35b600081606001511180612b8457506000816101200151115b15612b9c57612b9c81606001518261012001516134f7565b60008160a001511180612bb457506000816101600151115b15612bcc57612bcc8160a0015182610160015161350c565b60008160c001511180612be457506000816101800151115b15612bfc57612bfc8160c00151826101800151613521565b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360e00151604051612c4591815260200190565b60405180910390a350505050505050565b601054600f546000918291825b600854811015612da857826001600060088481548110612c8557612c85613b44565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612cf05750816002600060088481548110612cc957612cc9613b44565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612d0657601054600f54945094505050509091565b6001600060088381548110612d1d57612d1d613b44565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612d4c9084613ae6565b92506002600060088381548110612d6557612d65613b44565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612d949083613ae6565b915080612da081613afd565b915050612c63565b50600f54601054612db991906139b7565b821015612dd057601054600f549350935050509091565b90939092509050565b612de1613536565b83612df25760e081018590526126e9565b612e246040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b838015612e2f575082155b15612e6b57506040805160a081018252602554815260265460208201526027549181019190915260285460608201526029546080820152612eda565b82612ea757506040805160a081018252602080548252602154908201526022549181019190915260235460608201526024546080820152612eda565b506040805160a081018252601b548152601c546020820152601d5491810191909152601e546060820152601f5460808201525b8051606490612ee99088613ac7565b612ef391906139b7565b6101008301526020810151606490612f0b9088613ac7565b612f1591906139b7565b6101208301526040810151606490612f2d9088613ac7565b612f3791906139b7565b6101408301526060810151606490612f4f9088613ac7565b612f5991906139b7565b6101608301526080810151606490612f719088613ac7565b612f7b91906139b7565b6101808301819052610160830151610140840151610120850151610100860151612fa5908b613ae6565b612faf9190613ae6565b612fb99190613ae6565b612fc39190613ae6565b612fcd9190613ae6565b60e083015250949350505050565b600080808080612feb8689613ac7565b945086613003575083925060009150819050806130a1565b858961010001516130149190613ac7565b9250858961012001516130279190613ac7565b91508589610140015161303a9190613ac7565b90506000868a610160015161304f9190613ac7565b90506000878b61018001516130649190613ac7565b905080828486613074898c613ae6565b61307e9190613ae6565b6130889190613ae6565b6130929190613ae6565b61309c9190613ae6565b955050505b945094509450945094565b600080836130bf575060009050806130e6565b828561016001516130d09190613ac7565b9150828561018001516130e39190613ac7565b90505b935093915050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061312357613123613b44565b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561317757600080fd5b505afa15801561318b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131af91906135d6565b816001815181106131c2576131c2613b44565b6001600160a01b039283166020918202929092010152600d546131e89130911684611df8565b600d5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061322190859060009086903090429060040161392e565b600060405180830381600087803b15801561323b57600080fd5b505af1158015612662573d6000803e3d6000fd5b600d546132679030906001600160a01b031684611df8565b600d546001600160a01b031663f305d7198230856000806132906000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b1580156132f357600080fd5b505af1158015613307573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061332c919061383b565b5050505050565b804710156133835760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610c2a565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146133d0576040519150601f19603f3d011682016040523d82523d6000602084013e6133d5565b606091505b5050905080610c9a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610c2a565b816010600082825461345e9190613ae6565b9091555050602a805482919060009061347890849061399f565b90915550505050565b80602a6002016000828254613496919061399f565b90915550503060009081526005602052604090205460ff16156134d85730600090815260026020526040812080548392906134d290849061399f565b90915550505b306000908152600160205260408120805484929061347890849061399f565b80602a6001016000828254613496919061399f565b80602a6003016000828254613496919061399f565b80602a6004016000828254613496919061399f565b604051806101a00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b80356135a981613b70565b919050565b80356135a981613b85565b6000602082840312156135cb57600080fd5b8135610e1981613b70565b6000602082840312156135e857600080fd5b8151610e1981613b70565b6000806040838503121561360657600080fd5b823561361181613b70565b9150602083013561362181613b70565b809150509250929050565b60008060006060848603121561364157600080fd5b833561364c81613b70565b9250602084013561365c81613b70565b929592945050506040919091013590565b6000806040838503121561368057600080fd5b823561368b81613b70565b9150602083013561362181613b85565b600080604083850312156136ae57600080fd5b82356136b981613b70565b946020939093013593505050565b600080604083850312156136da57600080fd5b823567ffffffffffffffff808211156136f257600080fd5b818501915085601f83011261370657600080fd5b813560208282111561371a5761371a613b5a565b8160051b604051601f19603f8301168101818110868211171561373f5761373f613b5a565b604052838152828101945085830182870184018b101561375e57600080fd5b600096505b84871015613788576137748161359e565b865260019690960195948301948301613763565b50965061379890508782016135ae565b9450505050509250929050565b6000602082840312156137b757600080fd5b8135610e1981613b85565b6000602082840312156137d457600080fd5b8151610e1981613b85565b600080604083850312156137f257600080fd5b82356136b981613b85565b60006020828403121561380f57600080fd5b5035919050565b6000806040838503121561382957600080fd5b82359150602083013561362181613b85565b60008060006060848603121561385057600080fd5b8351925060208401519150604084015190509250925092565b600080600080600060a0868803121561388157600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208083528351808285015260005b818110156138d1578581018301518582016040015282016138b5565b818111156138e3576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561397e5784516001600160a01b031683529383019391830191600101613959565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156139b2576139b2613b18565b500190565b6000826139d457634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115613a145781600019048211156139fa576139fa613b18565b80851615613a0757918102915b93841c93908002906139de565b509250929050565b6000610e1960ff841683600082613a3557506001610bfa565b81613a4257506000610bfa565b8160018114613a585760028114613a6257613a7e565b6001915050610bfa565b60ff841115613a7357613a73613b18565b50506001821b610bfa565b5060208310610133831016604e8410600b8410161715613aa1575081810a610bfa565b613aab83836139d9565b8060001904821115613abf57613abf613b18565b029392505050565b6000816000190483118215151615613ae157613ae1613b18565b500290565b600082821015613af857613af8613b18565b500390565b6000600019821415613b1157613b11613b18565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461194557600080fd5b801515811461194557600080fdfea26469706673582212200a42b9963eadb83c0997700603b446ec00f224469c503a44de6e532e13d7ac2c64736f6c63430008070033

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

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

-----Decoded View---------------
Arg [0] : routerAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

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


Deployed Bytecode Sourcemap

3312:24828:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7665:83;;;;;;;;;;-1:-1:-1;7735:5:0;;;;;;;;;;;;-1:-1:-1;;;7735:5:0;;;;7665:83;;;;;;;:::i;:::-;;;;;;;;8425:161;;;;;;;;;;-1:-1:-1;8425:161:0;;;;;:::i;:::-;;:::i;:::-;;;7115:14:1;;7108:22;7090:41;;7078:2;7063:18;8425:161:0;6950:187:1;26250:211:0;;;;;;;;;;-1:-1:-1;26250:211:0;;;;;:::i;:::-;;:::i;:::-;;7965:95;;;;;;;;;;-1:-1:-1;8045:7:0;;7965:95;;;19222:25:1;;;19210:2;19195:18;7965:95:0;19076:177:1;25594:103:0;;;;;;;;;;-1:-1:-1;25594:103:0;;;;;:::i;:::-;;:::i;8594:448::-;;;;;;;;;;-1:-1:-1;8594:448:0;;;;;:::i;:::-;;:::i;4569:28::-;;;;;;;;;;;;;;;;10902:250;;;;;;;;;;-1:-1:-1;10902:250:0;;;;;:::i;:::-;;:::i;7851:83::-;;;;;;;;;;-1:-1:-1;7851:83:0;;4177:1;20853:36:1;;20841:2;20826:18;7851:83:0;20711:184:1;11566:473:0;;;;;;;;;;-1:-1:-1;11566:473:0;;;;;:::i;:::-;;:::i;9050:207::-;;;;;;;;;;-1:-1:-1;9050:207:0;;;;;:::i;:::-;;:::i;27477:155::-;;;;;;;;;;-1:-1:-1;27477:155:0;;;;;:::i;:::-;;:::i;12047:111::-;;;;;;;;;;-1:-1:-1;12047:111:0;;;;;:::i;:::-;;:::i;9966:517::-;;;;;;;;;;-1:-1:-1;9966:517:0;;;;;:::i;:::-;;:::i;27909:191::-;;;;;;;;;;-1:-1:-1;27909:191:0;;;;;:::i;:::-;;:::i;3834:26::-;;;;;;;;;;-1:-1:-1;3834:26:0;;;;;;;;26607:220;;;;;;;;;;-1:-1:-1;26607:220:0;;;;;:::i;:::-;;:::i;11226:332::-;;;;;;;;;;-1:-1:-1;11226:332:0;;;;;:::i;:::-;;:::i;12284:124::-;;;;;;;;;;-1:-1:-1;12284:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;12373:27:0;12349:4;12373:27;;;:18;:27;;;;;;;;;12284:124;26115:127;;;;;;;;;;-1:-1:-1;26115:127:0;;;;;:::i;:::-;;:::i;12416:396::-;;;;;;;;;;-1:-1:-1;12416:396:0;;;;;:::i;:::-;;:::i;3688:47::-;;;;;;;;;;-1:-1:-1;3688:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4457;;;;;;;;;;;;;;;;4511:49;;;;;;;;;;;;;;;;4404:46;;;;;;;;;;;;;;;;3867:23;;;;;;;;;;-1:-1:-1;3867:23:0;;;;;;;;;;;8068:198;;;;;;;;;;-1:-1:-1;8068:198:0;;;;;:::i;:::-;;:::i;1626:94::-;;;;;;;;;;;;;:::i;5268:41::-;;;;;;;;;;-1:-1:-1;5268:41:0;;;;;;;;;;;;;;;;;;;;;;20502:25:1;;;20558:2;20543:18;;20536:34;;;;20586:18;;;20579:34;;;;20644:2;20629:18;;20622:34;20687:3;20672:19;;20665:35;20489:3;20474:19;5268:41:0;20243:463:1;4718:75:0;;;;;;;;;;-1:-1:-1;4718:75:0;;;;-1:-1:-1;;;;;4718:75:0;;;;;;-1:-1:-1;;;;;6015:32:1;;;5997:51;;5985:2;5970:18;4718:75:0;5851:203:1;4641:70:0;;;;;;;;;;-1:-1:-1;4641:70:0;;;;-1:-1:-1;;;;;4641:70:0;;;9838:120;;;;;;;;;;-1:-1:-1;9838:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;9930:20:0;9906:4;9930:20;;;:11;:20;;;;;;;;;9838:120;1403:87;;;;;;;;;;-1:-1:-1;1449:7:0;1476:6;-1:-1:-1;;;;;1476:6:0;1403:87;;25128:212;;;;;;;;;;-1:-1:-1;25128:212:0;;;;;:::i;:::-;;:::i;26005:102::-;;;;;;;;;;-1:-1:-1;26005:102:0;;;;;:::i;:::-;;:::i;7756:87::-;;;;;;;;;;-1:-1:-1;7828:7:0;;;;;;;;;;;;-1:-1:-1;;;7828:7:0;;;;7756:87;;5539:36;;;;;;;;;;-1:-1:-1;5539:36:0;;;;;;;;;;;;;;;;;;27704:197;;;;;;;;;;-1:-1:-1;27704:197:0;;;;;:::i;:::-;;:::i;9265:392::-;;;;;;;;;;-1:-1:-1;9265:392:0;;;;;:::i;:::-;;:::i;4114:19::-;;;;;;;;;;-1:-1:-1;4114:19:0;;;;-1:-1:-1;;;;;4114:19:0;;;9665:165;;;;;;;;;;-1:-1:-1;9665:165:0;;;;;:::i;:::-;;:::i;25348:115::-;;;;;;;;;;-1:-1:-1;25348:115:0;;;;;:::i;:::-;;:::i;26469:130::-;;;;;;;;;;-1:-1:-1;26469:130:0;;;;;:::i;:::-;;:::i;26835:201::-;;;;;;;;;;-1:-1:-1;26835:201:0;;;;;:::i;:::-;;:::i;12820:403::-;;;;;;;;;;-1:-1:-1;12820:403:0;;;;;:::i;:::-;;:::i;27044:209::-;;;;;;;;;;-1:-1:-1;27044:209:0;;;;;:::i;:::-;;:::i;25866:131::-;;;;;;;;;;-1:-1:-1;25866:131:0;;;;;:::i;:::-;;:::i;4037:40::-;;;;;;;;;;;;;;;;27261:208;;;;;;;;;;-1:-1:-1;27261:208:0;;;;;:::i;:::-;;:::i;8274:143::-;;;;;;;;;;-1:-1:-1;8274:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;8382:18:0;;;8355:7;8382:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8274:143;4800:75;;;;;;;;;;-1:-1:-1;4800:75:0;;;;-1:-1:-1;;;;;4800:75:0;;;4346:51;;;;;;;;;;;;;;;;25705:153;;;;;;;;;;-1:-1:-1;25705:153:0;;;;;:::i;:::-;;:::i;10491:218::-;;;;;;;;;;;;;:::i;12166:110::-;;;;;;;;;;-1:-1:-1;12166:110:0;;;;;:::i;:::-;;:::i;10717:177::-;;;;;;;;;;-1:-1:-1;10717:177:0;;;;;:::i;:::-;;:::i;3996:34::-;;;;;;;;;;-1:-1:-1;3996:34:0;;;;;;;;1728:192;;;;;;;;;;-1:-1:-1;1728:192:0;;;;;:::i;:::-;;:::i;5316:45::-;;;;;;;;;;-1:-1:-1;5316:45:0;;;;;;;;;;;;;;;;;;25471:115;;;;;;;;;;-1:-1:-1;25471:115:0;;;;;:::i;:::-;;:::i;4086:21::-;;;;;;;;;;-1:-1:-1;4086:21:0;;;;-1:-1:-1;;;;;4086:21:0;;;8425:161;8500:4;8517:39;904:10;8540:7;8549:6;8517:8;:39::i;:::-;-1:-1:-1;8574:4:0;8425:161;;;;;:::o;26250:211::-;1449:7;1476:6;-1:-1:-1;;;;;1476:6:0;904:10;1538:23;1530:68;;;;-1:-1:-1;;;1530:68:0;;;;;;;:::i;:::-;;;;;;;;;26351:9:::1;26346:108;26370:8;:15;26366:1;:19;26346:108;;;26437:5;26407:14;:27;26422:8;26431:1;26422:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;26407:27:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;26407:27:0;:35;;-1:-1:-1;;26407:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26387:3;::::1;::::0;::::1;:::i;:::-;;;;26346:108;;;;26250:211:::0;;:::o;25594:103::-;1449:7;1476:6;-1:-1:-1;;;;;1476:6:0;904:10;1538:23;1530:68;;;;-1:-1:-1;;;1530:68:0;;;;;;;:::i;:::-;25668:9:::1;:21:::0;;-1:-1:-1;;;;;;25668:21:0::1;-1:-1:-1::0;;;;;25668:21:0;;;::::1;::::0;;;::::1;::::0;;25594:103::o;8594:448::-;8726:4;8743:36;8753:6;8761:9;8772:6;8743:9;:36::i;:::-;-1:-1:-1;;;;;8819:19:0;;8792:24;8819:19;;;:11;:19;;;;;;;;904:10;8819:33;;;;;;;;8871:26;;;;8863:79;;;;-1:-1:-1;;;8863:79:0;;15124:2:1;8863:79:0;;;15106:21:1;15163:2;15143:18;;;15136:30;15202:34;15182:18;;;15175:62;-1:-1:-1;;;15253:18:1;;;15246:38;15301:19;;8863:79:0;14922:404:1;8863:79:0;8953:57;8962:6;904:10;8984:25;9003:6;8984:16;:25;:::i;:::-;8953:8;:57::i;:::-;-1:-1:-1;9030:4:0;;8594:448;-1:-1:-1;;;;8594:448:0:o;10902:250::-;10969:7;11008;;10997;:18;;10989:73;;;;-1:-1:-1;;;10989:73:0;;9696:2:1;10989:73:0;;;9678:21:1;9735:2;9715:18;;;9708:30;9774:34;9754:18;;;9747:62;-1:-1:-1;;;9825:18:1;;;9818:40;9875:19;;10989:73:0;9494:406:1;10989:73:0;11073:19;11095:10;:8;:10::i;:::-;11073:32;-1:-1:-1;11123:21:0;11073:32;11123:7;:21;:::i;:::-;11116:28;10902:250;-1:-1:-1;;;10902:250:0:o;11566:473::-;1449:7;1476:6;-1:-1:-1;;;;;1476:6:0;904:10;1538:23;1530:68;;;;-1:-1:-1;;;1530:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11646:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;11638:56;;;::::0;-1:-1:-1;;;11638:56:0;;12885:2:1;11638:56:0::1;::::0;::::1;12867:21:1::0;12924:2;12904:18;;;12897:30;12963:25;12943:18;;;12936:53;13006:18;;11638:56:0::1;12683:347:1::0;11638:56:0::1;11710:9;11705:327;11729:9;:16:::0;11725:20;::::1;11705:327;;;11787:7;-1:-1:-1::0;;;;;11771:23:0::1;:9;11781:1;11771:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;11771:12:0::1;:23;11767:254;;;11830:9;11840:16:::0;;:20:::1;::::0;11859:1:::1;::::0;11840:20:::1;:::i;:::-;11830:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;11815:9:::1;:12:::0;;-1:-1:-1;;;;;11830:31:0;;::::1;::::0;11825:1;;11815:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;11815:46:0::1;-1:-1:-1::0;;;;;11815:46:0;;::::1;;::::0;;11880:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;11919:11:::1;:20:::0;;;;:28;;-1:-1:-1;;11919:28:0::1;::::0;;11966:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;11966:15:0;;;;;-1:-1:-1;;;;;;11966:15:0::1;::::0;;;;;11705:327:::1;11566:473:::0;:::o;11767:254::-:1;11747:3:::0;::::1;::::0;::::1;:::i;:::-;;;;11705:327;;;;11566:473:::0;:::o;9050:207::-;904:10;9130:4;9179:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;9179:34:0;;;;;;;;;;9130:4;;9147:80;;9170:7;;9179:47;;9216:10;;9179:47;:::i;27477:155::-;1449:7;1476:6;-1:-1:-1;;;;;1476:6:0;904:10;1538:23;1530:68;;;;-1:-1:-1;;;1530:68:0;;;;;;;:::i;:::-;27572:6:::1;:27:::0;;-1:-1:-1;;;;;27572:27:0;;::::1;-1:-1:-1::0;;;;;;27572:27:0;;::::1;;::::0;;;27610:4:::1;:14:::0;;;;;::::1;::::0;::::1;;::::0;;27477:155::o;12047:111::-;1449:7;1476:6;-1:-1:-1;;;;;1476:6:0;904:10;1538:23;1530:68;;;;-1:-1:-1;;;1530:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12116:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;12116:34:0::1;12146:4;12116:34;::::0;;12047:111::o;9966:517::-;10084:7;10128;;10117;:18;;10109:62;;;;-1:-1:-1;;;10109:62:0;;14005:2:1;10109:62:0;;;13987:21:1;14044:2;14024:18;;;14017:30;14083:33;14063:18;;;14056:61;14134:18;;10109:62:0;13803:355:1;10109:62:0;10187:17;10182:294;;10221:28;10252:39;10263:7;10272:4;10278:5;10285;10252:10;:39::i;:::-;10313:9;;-1:-1:-1;10306:16:0;;-1:-1:-1;10306:16:0;10182:294;10355:28;10386:39;10397:7;10406:4;10412:5;10419;10386:10;:39::i;:::-;10447:17;;;;-1:-1:-1;10440:24:0;;-1:-1:-1;10440:24:0;27909:191;1449:7;1476:6;-1:-1:-1;;;;;1476:6:0;904:10;1538:23;1530:68;;;;-1:-1:-1;;;1530:68:0;;;;;;;:::i;:::-;28051:41:::1;::::0;-1:-1:-1;;;28051:41:0;;-1:-1:-1;;;;;6251:32:1;;;28051:41:0::1;::::0;::::1;6233:51:1::0;6300:18;;;6293:34;;;28051:27:0;::::1;::::0;::::1;::::0;6206:18:1;;28051:41:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27909:191:::0;;;:::o;26607:220::-;1449:7;1476:6;-1:-1:-1;;;;;1476:6:0;904:10;1538:23;1530:68;;;;-1:-1:-1;;;1530:68:0;;;;;;;:::i;:::-;26716:9:::1;26711:109;26735:8;:15;26731:1;:19;26711:109;;;26803:5;26772:15;:28;26788:8;26797:1;26788:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;26772:28:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;26772:28:0;:36;;-1:-1:-1;;26772:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26752:3;::::1;::::0;::::1;:::i;:::-;;;;26711:109;;11226:332:::0;1449:7;1476:6;-1:-1:-1;;;;;1476:6:0;904:10;1538:23;1530:68;;;;-1:-1:-1;;;1530:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11307:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;11306:21;11298:61;;;::::0;-1:-1:-1;;;11298:61:0;;11328:2:1;11298:61:0::1;::::0;::::1;11310:21:1::0;11367:2;11347:18;;;11340:30;11406:29;11386:18;;;11379:57;11453:18;;11298:61:0::1;11126:351:1::0;11298:61:0::1;-1:-1:-1::0;;;;;11374:16:0;::::1;11393:1;11374:16:::0;;;:7:::1;:16;::::0;;;;;:20;11370:109:::1;;-1:-1:-1::0;;;;;11450:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;11430:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;11411:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;11370:109:::1;-1:-1:-1::0;;;;;11489:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;11489:27:0::1;11512:4;11489:27:::0;;::::1;::::0;;;11527:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;11527:23:0::1;::::0;;::::1;::::0;;11226:332::o;26115:127::-;1449:7;1476:6;-1:-1:-1;;;;;1476:6:0;904:10;1538:23;1530:68;;;;-1:-1:-1;;;1530:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26203:23:0;;;::::1;;::::0;;;:14:::1;:23;::::0;;;;:31;;-1:-1:-1;;26203:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26115:127::o;12416:396::-;1449:7;1476:6;-1:-1:-1;;;;;1476:6:0;904:10;1538:23;1530:68;;;;-1:-1:-1;;;1530:68:0;;;;;;;:::i;:::-;12610:54:::1;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;;;;;;;;12602:62;;;;;;;;;;;;;;;;;;;12739:2:::1;12659:4:::0;12647:10;12634;12684:17:::1;12622:10:::0;12616:4;12684:17:::1;:::i;:::-;:30;;;;:::i;:::-;:43;;;;:::i;:::-;:50;;;;:::i;:::-;12683:58;;12675:100;;;::::0;-1:-1:-1;;;12675:100:0;;18155:2:1;12675:100:0::1;::::0;::::1;18137:21:1::0;18194:2;18174:18;;;18167:30;18233:31;18213:18;;;18206:59;18282:18;;12675:100:0::1;17953:353:1::0;12675:100:0::1;12791:13;::::0;::::1;::::0;;;::::1;12416:396:::0;;;;;:::o;8068:198::-;-1:-1:-1;;;;;8158:20:0;;8134:7;8158:20;;;:11;:20;;;;;;;;8154:49;;;-1:-1:-1;;;;;;8187:16:0;;;;;:7;:16;;;;;;;8068:198::o;8154:49::-;-1:-1:-1;;;;;8241:16:0;;;;;;:7;:16;;;;;;8221:37;;:19;:37::i;1626:94::-;1449:7;1476:6;-1:-1:-1;;;;;1476:6:0;904:10;1538:23;1530:68;;;;-1:-1:-1;;;1530:68:0;;;;;;;:::i;:::-;1691:21:::1;1709:1;1691:9;:21::i;:::-;1626:94::o:0;25128:212::-;1449:7;1476:6;-1:-1:-1;;;;;1476:6:0;904:10;1538:23;1530:68;;;;-1:-1:-1;;;1530:68:0;;;;;;;:::i;:::-;25226:9:::1;25221:112;25245:8;:15;25241:1;:19;25221:112;;;25316:5;25282:18;:31;25301:8;25310:1;25301:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;25282:31:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;25282:31:0;:39;;-1:-1:-1;;25282:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25262:3;::::1;::::0;::::1;:::i;:::-;;;;25221:112;;26005:102:::0;1449:7;1476:6;-1:-1:-1;;;;;1476:6:0;904:10;1538:23;1530:68;;;;-1:-1:-1;;;1530:68:0;;;;;;;:::i;:::-;26077:11:::1;:22:::0;;;::::1;;;;-1:-1:-1::0;;26077:22:0;;::::1;::::0;;;::::1;::::0;;26005:102::o;27704:197::-;1449:7;1476:6;-1:-1:-1;;;;;1476:6:0;904:10;1538:23;1530:68;;;;-1:-1:-1;;;1530:68:0;;;;;;;:::i;:::-;27805:9:::1;27780:21;:34;;27772:71;;;::::0;-1:-1:-1;;;27772:71:0;;15894:2:1;27772:71:0::1;::::0;::::1;15876:21:1::0;15933:2;15913:18;;;15906:30;15972:26;15952:18;;;15945:54;16016:18;;27772:71:0::1;15692:348:1::0;27772:71:0::1;27854:39;::::0;27862:10:::1;::::0;27854:39;::::1;;;::::0;27883:9;;27854:39:::1;::::0;;;27883:9;27862:10;27854:39;::::1;;;;;;;;;;;;;::::0;::::1;;;;9265:392:::0;904:10;9368:4;9417:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;9417:34:0;;;;;;;;;;9470:35;;;;9462:85;;;;-1:-1:-1;;;9462:85:0;;18872:2:1;9462:85:0;;;18854:21:1;18911:2;18891:18;;;18884:30;18950:34;18930:18;;;18923:62;-1:-1:-1;;;19001:18:1;;;18994:35;19046:19;;9462:85:0;18670:401:1;9462:85:0;9558:67;904:10;9581:7;9590:34;9609:15;9590:16;:34;:::i;9558:67::-;-1:-1:-1;9645:4:0;;9265:392;-1:-1:-1;;;9265:392:0:o;9665:165::-;9743:4;9760:40;9770:10;9782:9;9793:6;9760:9;:40::i;25348:115::-;1449:7;1476:6;-1:-1:-1;;;;;1476:6:0;904:10;1538:23;1530:68;;;;-1:-1:-1;;;1530:68:0;;;;;;;:::i;:::-;25428:15:::1;:27:::0;;-1:-1:-1;;;;;;25428:27:0::1;-1:-1:-1::0;;;;;25428:27:0;;;::::1;::::0;;;::::1;::::0;;25348:115::o;26469:130::-;1449:7;1476:6;-1:-1:-1;;;;;1476:6:0;904:10;1538:23;1530:68;;;;-1:-1:-1;;;1530:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26559:24:0;;;::::1;;::::0;;;:15:::1;:24;::::0;;;;:32;;-1:-1:-1;;26559:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26469:130::o;26835:201::-;1449:7;1476:6;-1:-1:-1;;;;;1476:6:0;904:10;1538:23;1530:68;;;;-1:-1:-1;;;1530:68:0;;;;;;;:::i;:::-;26933:14:::1;4177:1:::0;26933:2:::1;:14;:::i;:::-;26924:23;::::0;:6;:23:::1;:::i;:::-;26910:11;:37:::0;26976:6:::1;26966:16:::0;::::1;;26958:70;;;::::0;-1:-1:-1;;;26958:70:0;;13595:2:1;26958:70:0::1;::::0;::::1;13577:21:1::0;13634:2;13614:18;;;13607:30;13673:34;13653:18;;;13646:62;-1:-1:-1;;;13724:18:1;;;13717:39;13773:19;;26958:70:0::1;13393:405:1::0;26958:70:0::1;26835:201:::0;:::o;12820:403::-;1449:7;1476:6;-1:-1:-1;;;;;1476:6:0;904:10;1538:23;1530:68;;;;-1:-1:-1;;;1530:68:0;;;;;;;:::i;:::-;13022:53:::1;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;13010:9:::1;:65:::0;;;;;;;;;;;;;;;;;;;13150:2:::1;13070:4:::0;13058:10;13046;13095:17:::1;13034:10:::0;13028:4;13095:17:::1;:::i;27044:209::-:0;1449:7;1476:6;-1:-1:-1;;;;;1476:6:0;904:10;1538:23;1530:68;;;;-1:-1:-1;;;1530:68:0;;;;;;;:::i;:::-;27146:14:::1;4177:1:::0;27146:2:::1;:14;:::i;:::-;27136:24;::::0;:7;:24:::1;:::i;:::-;27121:12;:39:::0;27190:6:::1;27179:17:::0;::::1;;27171:72;;;::::0;-1:-1:-1;;;27171:72:0;;10917:2:1;27171:72:0::1;::::0;::::1;10899:21:1::0;10956:2;10936:18;;;10929:30;10995:34;10975:18;;;10968:62;-1:-1:-1;;;11046:18:1;;;11039:40;11096:19;;27171:72:0::1;10715:406:1::0;25866:131:0;1449:7;1476:6;-1:-1:-1;;;;;1476:6:0;904:10;1538:23;1530:68;;;;-1:-1:-1;;;1530:68:0;;;;;;;:::i;:::-;25976:13:::1;4177:1;25976:2;:13;:::i;:::-;25967:22;::::0;:6;:22:::1;:::i;:::-;25946:18;:43:::0;-1:-1:-1;25866:131:0:o;27261:208::-;1449:7;1476:6;-1:-1:-1;;;;;1476:6:0;904:10;1538:23;1530:68;;;;-1:-1:-1;;;1530:68:0;;;;;;;:::i;:::-;27363:14:::1;4177:1:::0;27363:2:::1;:14;:::i;:::-;27354:23;::::0;:6;:23:::1;:::i;:::-;27337:14;:40:::0;27406:6:::1;27396:16:::0;::::1;;27388:73;;;::::0;-1:-1:-1;;;27388:73:0;;12045:2:1;27388:73:0::1;::::0;::::1;12027:21:1::0;12084:2;12064:18;;;12057:30;12123:34;12103:18;;;12096:62;-1:-1:-1;;;12174:18:1;;;12167:42;12226:19;;27388:73:0::1;11843:408:1::0;25705:153:0;1449:7;1476:6;-1:-1:-1;;;;;1476:6:0;904:10;1538:23;1530:68;;;;-1:-1:-1;;;1530:68:0;;;;;;;:::i;:::-;25800:16:::1;:4:::0;25807:9:::1;25800:16;:::i;:::-;25785:12;:31:::0;-1:-1:-1;25827:15:0::1;:23:::0;;-1:-1:-1;;25827:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25705:153::o;10491:218::-;1449:7;1476:6;-1:-1:-1;;;;;1476:6:0;904:10;1538:23;1530:68;;;;-1:-1:-1;;;1530:68:0;;;;;;;:::i;:::-;10558:14:::1;::::0;::::1;;10557:15;10549:52;;;::::0;-1:-1:-1;;;10549:52:0;;14365:2:1;10549:52:0::1;::::0;::::1;14347:21:1::0;14404:2;14384:18;;;14377:30;14443:26;14423:18;;;14416:54;14487:18;;10549:52:0::1;14163:348:1::0;10549:52:0::1;10612:14;:21:::0;;-1:-1:-1;;10644:18:0;;;;;10689:12:::1;10673:13;:28:::0;10491:218::o;12166:110::-;1449:7;1476:6;-1:-1:-1;;;;;1476:6:0;904:10;1538:23;1530:68;;;;-1:-1:-1;;;1530:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12233:27:0::1;12263:5;12233:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;12233:35:0::1;::::0;;12166:110::o;10717:177::-;1449:7;1476:6;-1:-1:-1;;;;;1476:6:0;904:10;1538:23;1530:68;;;;-1:-1:-1;;;1530:68:0;;;;;;;:::i;:::-;10799:14:::1;::::0;::::1;;10798:15;10790:65;;;::::0;-1:-1:-1;;;10790:65:0;;14718:2:1;10790:65:0::1;::::0;::::1;14700:21:1::0;14757:2;14737:18;;;14730:30;14796:34;14776:18;;;14769:62;-1:-1:-1;;;14847:18:1;;;14840:35;14892:19;;10790:65:0::1;14516:401:1::0;10790:65:0::1;10866:8;:20:::0;10717:177::o;1728:192::-;1449:7;1476:6;-1:-1:-1;;;;;1476:6:0;904:10;1538:23;1530:68;;;;-1:-1:-1;;;1530:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1817:22:0;::::1;1809:73;;;::::0;-1:-1:-1;;;1809:73:0;;10107:2:1;1809:73:0::1;::::0;::::1;10089:21:1::0;10146:2;10126:18;;;10119:30;10185:34;10165:18;;;10158:62;-1:-1:-1;;;10236:18:1;;;10229:36;10282:19;;1809:73:0::1;9905:402:1::0;1809:73:0::1;1893:19;1903:8;1893:9;:19::i;25471:115::-:0;1449:7;1476:6;-1:-1:-1;;;;;1476:6:0;904:10;1538:23;1530:68;;;;-1:-1:-1;;;1530:68:0;;;;;;;:::i;:::-;25551:15:::1;:27:::0;;-1:-1:-1;;;;;;25551:27:0::1;-1:-1:-1::0;;;;;25551:27:0;;;::::1;::::0;;;::::1;::::0;;25471:115::o;18295:369::-;-1:-1:-1;;;;;18422:19:0;;18414:68;;;;-1:-1:-1;;;18414:68:0;;17408:2:1;18414:68:0;;;17390:21:1;17447:2;17427:18;;;17420:30;17486:34;17466:18;;;17459:62;-1:-1:-1;;;17537:18:1;;;17530:34;17581:19;;18414:68:0;17206:400:1;18414:68:0;-1:-1:-1;;;;;18501:21:0;;18493:68;;;;-1:-1:-1;;;18493:68:0;;10514:2:1;18493:68:0;;;10496:21:1;10553:2;10533:18;;;10526:30;10592:34;10572:18;;;10565:62;-1:-1:-1;;;10643:18:1;;;10636:32;10685:19;;18493:68:0;10312:398:1;18493:68:0;-1:-1:-1;;;;;18572:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;18624:32;;19222:25:1;;;18624:32:0;;19195:18:1;18624:32:0;;;;;;;18295:369;;;:::o;18672:2374::-;-1:-1:-1;;;;;18794:18:0;;18786:68;;;;-1:-1:-1;;;18786:68:0;;17002:2:1;18786:68:0;;;16984:21:1;17041:2;17021:18;;;17014:30;17080:34;17060:18;;;17053:62;-1:-1:-1;;;17131:18:1;;;17124:35;17176:19;;18786:68:0;16800:401:1;18786:68:0;-1:-1:-1;;;;;18873:16:0;;18865:64;;;;-1:-1:-1;;;18865:64:0;;8169:2:1;18865:64:0;;;8151:21:1;8208:2;8188:18;;;8181:30;8247:34;8227:18;;;8220:62;-1:-1:-1;;;8298:18:1;;;8291:33;8341:19;;18865:64:0;7967:399:1;18865:64:0;18957:1;18948:6;:10;18940:64;;;;-1:-1:-1;;;18940:64:0;;16247:2:1;18940:64:0;;;16229:21:1;16286:2;16266:18;;;16259:30;16325:34;16305:18;;;16298:62;-1:-1:-1;;;16376:18:1;;;16369:39;16425:19;;18940:64:0;16045:405:1;18940:64:0;19047:15;19057:4;19047:9;:15::i;:::-;19037:6;:25;;19015:124;;;;-1:-1:-1;;;19015:124:0;;9278:2:1;19015:124:0;;;9260:21:1;9317:2;9297:18;;;9290:30;9356:34;9336:18;;;9329:62;-1:-1:-1;;;9407:18:1;;;9400:47;9464:19;;19015:124:0;9076:413:1;19015:124:0;-1:-1:-1;;;;;19159:20:0;;;;;;:14;:20;;;;;;;;19158:21;:44;;;;-1:-1:-1;;;;;;19184:18:0;;;;;;:14;:18;;;;;;;;19183:19;19158:44;19150:70;;;;-1:-1:-1;;;19150:70:0;;17813:2:1;19150:70:0;;;17795:21:1;17852:2;17832:18;;;17825:30;-1:-1:-1;;;17871:18:1;;;17864:43;17924:18;;19150:70:0;17611:337:1;19150:70:0;-1:-1:-1;;;;;19238:24:0;;;;;;:18;:24;;;;;;;;19237:25;:52;;;;-1:-1:-1;;;;;;19267:22:0;;;;;;:18;:22;;;;;;;;19266:23;19237:52;19233:130;;;19314:14;;;;19306:45;;;;-1:-1:-1;;;19306:45:0;;8931:2:1;19306:45:0;;;8913:21:1;8970:2;8950:18;;;8943:30;-1:-1:-1;;;8989:18:1;;;8982:48;9047:18;;19306:45:0;8729:342:1;19306:45:0;19387:4;;-1:-1:-1;;;;;19379:12:0;;;19387:4;;19379:12;:39;;;;-1:-1:-1;;;;;;19396:22:0;;;;;;:18;:22;;;;;;;;19395:23;19379:39;:52;;;;-1:-1:-1;19423:8:0;;;;;;;19422:9;19379:52;19375:297;;;19466:11;;19456:6;:21;;19448:63;;;;-1:-1:-1;;;19448:63:0;;8573:2:1;19448:63:0;;;8555:21:1;8612:2;8592:18;;;8585:30;8651:31;8631:18;;;8624:59;8700:18;;19448:63:0;8371:353:1;19448:63:0;19578:14;;19568:6;19552:13;19562:2;19552:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;19526:134;;;;-1:-1:-1;;;19526:134:0;;11684:2:1;19526:134:0;;;11666:21:1;;;11703:18;;;11696:30;11762:34;11742:18;;;11735:62;11814:18;;19526:134:0;11482:356:1;19526:134:0;19710:4;;-1:-1:-1;;;;;19702:12:0;;;19710:4;;19702:12;;;;:39;;-1:-1:-1;;;;;;19719:22:0;;;;;;:18;:22;;;;;;;;19718:23;19702:39;:68;;;;-1:-1:-1;;;;;;19746:24:0;;;;;;:18;:24;;;;;;;;19745:25;19702:68;:81;;;;-1:-1:-1;19775:8:0;;;;;;;19774:9;19702:81;19684:664;;;19828:12;;19818:6;:22;;19810:65;;;;-1:-1:-1;;;19810:65:0;;18513:2:1;19810:65:0;;;18495:21:1;18552:2;18532:18;;;18525:30;18591:32;18571:18;;;18564:60;18641:18;;19810:65:0;18311:354:1;19810:65:0;19900:4;;-1:-1:-1;;;;;19894:10:0;;;19900:4;;19894:10;19890:197;;19981:14;;19971:6;19955:13;19965:2;19955:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;19925:146;;;;-1:-1:-1;;;19925:146:0;;11684:2:1;19925:146:0;;;11666:21:1;;;11703:18;;;11696:30;11762:34;11742:18;;;11735:62;11814:18;;19925:146:0;11482:356:1;19925:146:0;20105:15;;;;20101:236;;;-1:-1:-1;;;;;20180:15:0;;20141:18;20180:15;;;:9;:15;;;;;;20162:33;;:15;:33;:::i;:::-;20141:54;;20236:12;;20222:10;:26;;20214:55;;;;-1:-1:-1;;;20214:55:0;;16657:2:1;20214:55:0;;;16639:21:1;16696:2;16676:18;;;16669:30;-1:-1:-1;;;16715:18:1;;;16708:46;16771:18;;20214:55:0;16455:340:1;20214:55:0;-1:-1:-1;;;;;;20288:15:0;;;;;;:9;:15;;;;;20306;20288:33;;20101:236;20360:12;20403:18;;20375:24;20393:4;20375:9;:24::i;:::-;20451:8;;-1:-1:-1;;20375:46:0;;-1:-1:-1;20451:8:0;;;;;20450:9;:37;;;;-1:-1:-1;20476:11:0;;;;;;;20450:37;:61;;;;;20504:7;20450:61;:90;;;;-1:-1:-1;20536:4:0;;-1:-1:-1;;;;;20528:12:0;;;20536:4;;20528:12;;20450:90;:132;;;;-1:-1:-1;;;;;;20558:24:0;;;;;;:18;:24;;;;;;;;20557:25;20450:132;:172;;;;-1:-1:-1;;;;;;20600:22:0;;;;;;:18;:22;;;;;;;;20599:23;20450:172;20432:351;;;20659:4;;-1:-1:-1;;;;;20653:10:0;;;20659:4;;20653:10;20649:122;;;20680:18;;20665:45;;;;;;;;20700:9;20665:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20680:18;20665:14;:45::i;:::-;20649:122;;;20745:18;;20730:41;;;;;;;;20765:5;20730:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20745:18;20730:14;:41::i;:::-;20857:8;;20808:4;;20793:12;;20857:8;;;;;;:36;;-1:-1:-1;;;;;;20869:24:0;;;;;;:18;:24;;;;;;;;20857:36;:62;;;-1:-1:-1;;;;;;20897:22:0;;;;;;:18;:22;;;;;;;;20857:62;20853:83;;;20931:5;20921:15;;20853:83;20957:4;;-1:-1:-1;;;;;20951:10:0;;;20957:4;;20951:10;20947:29;;;-1:-1:-1;20972:4:0;20947:29;20989:49;21004:4;21010:2;21014:6;21022:7;21031:6;20989:14;:49::i;:::-;18775:2271;;;18672:2374;;;:::o;17554:161::-;17596:7;17617:15;17634;17653:19;:17;:19::i;:::-;17616:56;;-1:-1:-1;17616:56:0;-1:-1:-1;17690:17:0;17616:56;;17690:17;:::i;:::-;17683:24;;;;17554:161;:::o;14474:692::-;14622:36;;:::i;:::-;14683:51;14695:7;14704;14713:6;14721:12;14683:11;:51::i;:::-;14671:63;;14930:53;14943:9;14954:7;14963;14972:10;:8;:10::i;:::-;14930:12;:53::i;:::-;14896:20;;;14745:238;14861:20;;;14745:238;14832:14;;;14745:238;14792:25;;;14745:238;;;15035:94;14760:9;15086:7;15108:10;:8;:10::i;:::-;15035:12;:94::i;:::-;15017:14;;;14994:135;14995:20;;;14994:135;14474:692;;;;;;;:::o;1928:173::-;1984:16;2003:6;;-1:-1:-1;;;;;2020:17:0;;;-1:-1:-1;;;;;;2020:17:0;;;;;;2053:40;;2003:6;;;;;;;2053:40;;1984:16;2053:40;1973:128;1928:173;:::o;22654:1391::-;6113:8;:15;;-1:-1:-1;;6113:15:0;;;;;22866:8:::1;::::0;::::1;::::0;22836:14:::1;::::0;::::1;::::0;22806::::1;::::0;::::1;::::0;22776::::1;::::0;::::1;::::0;6113:15;;22866:8;22836:14;22776:44:::1;::::0;::::1;:::i;:::-;:74;;;;:::i;:::-;:98;;;;:::i;:::-;22775:104;::::0;22878:1:::1;22775:104;:::i;:::-;22753:126;;22890:32;22962:11;22944:4;:14;;;22926:15;:32;;;;:::i;:::-;22925:48;;;;:::i;:::-;22890:83:::0;-1:-1:-1;22984:14:0::1;23001:42;22890:83:::0;23001:15;:42:::1;:::i;:::-;22984:59:::0;-1:-1:-1;23081:21:0::1;23115:24;22984:59:::0;23115:16:::1;:24::i;:::-;23152:20;23175:38;23199:14:::0;23175:21:::1;:38;:::i;:::-;23152:61;;23224:19;23276:4;:14;;;23262:11;:28;;;;:::i;:::-;23246:45;::::0;:12;:45:::1;:::i;:::-;23224:67;;23302:29;23348:4;:14;;;23334:11;:28;;;;:::i;:::-;23302:60:::0;-1:-1:-1;23379:25:0;;23375:160:::1;;23462:61;23475:24;23501:21;23462:12;:61::i;:::-;23588:14;::::0;::::1;::::0;23547:20:::1;::::0;23570:15:::1;:11:::0;23584:1:::1;23570:15;:::i;:::-;:32;;;;:::i;:::-;23547:55:::0;-1:-1:-1;23617:16:0;;23613:97:::1;;23658:15;::::0;23650:48:::1;::::0;-1:-1:-1;;;;;23658:15:0::1;23685:12:::0;23650:34:::1;:48::i;:::-;23771:14;::::0;::::1;::::0;23730:20:::1;::::0;23753:15:::1;:11:::0;23767:1:::1;23753:15;:::i;:::-;:32;;;;:::i;:::-;23730:55:::0;-1:-1:-1;23800:16:0;;23796:97:::1;;23841:15;::::0;23833:48:::1;::::0;-1:-1:-1;;;;;23841:15:0::1;23868:12:::0;23833:34:::1;:48::i;:::-;23940:8;::::0;::::1;::::0;23905:14:::1;::::0;23922:15:::1;:11:::0;23936:1:::1;23922:15;:::i;:::-;:26;;;;:::i;:::-;23905:43:::0;-1:-1:-1;23963:10:0;;23959:79:::1;;23998:9;::::0;23990:36:::1;::::0;-1:-1:-1;;;;;23998:9:0::1;24019:6:::0;23990:28:::1;:36::i;:::-;-1:-1:-1::0;;6151:8:0;:16;;-1:-1:-1;;6151:16:0;;;-1:-1:-1;;;;;;;;;;22654:1391:0:o;21127:1519::-;-1:-1:-1;;;;;21322:26:0;;21301:17;21322:26;;;:18;:26;;;;;;;;21321:27;:74;;;;-1:-1:-1;;;;;;21366:29:0;;;;;;:18;:29;;;;;;;;21365:30;21321:74;:130;;;;;21443:8;;21427:13;;:24;;;;:::i;:::-;21412:12;:39;21321:130;21301:150;;21464:28;21495:50;21506:7;21515;21524:6;21532:12;21495:10;:50::i;:::-;-1:-1:-1;;;;;21562:19:0;;;;;;:11;:19;;;;;;21464:81;;-1:-1:-1;21562:19:0;;21558:124;;;-1:-1:-1;;;;;21645:15:0;;;;;;:7;:15;;;;;;:25;;21663:7;;21645:25;:::i;:::-;-1:-1:-1;;;;;21627:15:0;;;;;;:7;:15;;;;;:43;21558:124;-1:-1:-1;;;;;21696:22:0;;;;;;:11;:22;;;;;;;;21692:141;;;21804:17;;;;-1:-1:-1;;;;;21783:18:0;;;;;;:7;:18;;;;;;:38;;21804:17;21783:38;:::i;:::-;-1:-1:-1;;;;;21762:18:0;;;;;;:7;:18;;;;;:59;21692:141;21881:9;;-1:-1:-1;;;;;21863:15:0;;21881:9;21863:15;;;:7;:15;;;;;;:27;;21881:9;21863:27;:::i;:::-;-1:-1:-1;;;;;21845:15:0;;;;;;;:7;:15;;;;;;;;:45;;;;21943:17;;;21922:18;;;;;;;;;;:38;;21943:17;21922:38;:::i;:::-;-1:-1:-1;;;;;21901:18:0;;;;;;:7;:18;;;;;;;:59;;;;21977:6;;;:10;;;:24;;;22000:1;21991;:6;;;:10;21977:24;21973:57;;;22003:27;22015:1;:6;;;22023:1;:6;;;22003:11;:27::i;:::-;22060:1;22045;:12;;;:16;:36;;;;22080:1;22065;:12;;;:16;22045:36;22041:281;;;22098:42;22113:1;:12;;;22127:1;:12;;;22098:14;:42::i;:::-;22220:4;-1:-1:-1;;;;;22160:150:0;22187:6;-1:-1:-1;;;;;22160:150:0;;22289:1;:6;;;22274:1;:12;;;22259:1;:12;;;22244:1;:12;;;:27;;;;:::i;:::-;:42;;;;:::i;:::-;:51;;;;:::i;:::-;22160:150;;19222:25:1;;;19210:2;19195:18;22160:150:0;;;;;;;22041:281;22351:1;22336;:12;;;:16;:36;;;;22371:1;22356;:12;;;:16;22336:36;22332:84;;;22374:42;22389:1;:12;;;22403:1;:12;;;22374:14;:42::i;:::-;22446:1;22431;:12;;;:16;:36;;;;22466:1;22451;:12;;;:16;22431:36;22427:84;;;22469:42;22484:1;:12;;;22498:1;:12;;;22469:14;:42::i;:::-;22535:1;22526;:6;;;:10;:24;;;;22549:1;22540;:6;;;:10;22526:24;22522:54;;;22552:24;22561:1;:6;;;22569:1;:6;;;22552:8;:24::i;:::-;22609:9;-1:-1:-1;;;;;22592:46:0;22601:6;-1:-1:-1;;;;;22592:46:0;;22620:1;:17;;;22592:46;;;;19222:25:1;;19210:2;19195:18;;19076:177;22592:46:0;;;;;;;;21290:1356;;21127:1519;;;;;:::o;17723:564::-;17821:7;;17857;;17774;;;;;17875:300;17899:9;:16;17895:20;;17875:300;;;17965:7;17941;:21;17949:9;17959:1;17949:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;17949:12:0;17941:21;;;;;;;;;;;;;:31;;:66;;;18000:7;17976;:21;17984:9;17994:1;17984:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;17984:12:0;17976:21;;;;;;;;;;;;;:31;17941:66;17937:114;;;18034:7;;18043;;18026:25;;;;;;;17723:564;;:::o;17937:114::-;18086:7;:21;18094:9;18104:1;18094:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;18094:12:0;18086:21;;;;;;;;;;;;;18076:31;;:7;:31;:::i;:::-;18066:41;;18142:7;:21;18150:9;18160:1;18150:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;18150:12:0;18142:21;;;;;;;;;;;;;18132:31;;:7;:31;:::i;:::-;18122:41;-1:-1:-1;17917:3:0;;;;:::i;:::-;;;;17875:300;;;;18209:7;;18199;;:17;;;;:::i;:::-;18189:7;:27;18185:58;;;18226:7;;18235;;18218:25;;;;;;17723:564;;:::o;18185:58::-;18262:7;;18271;;-1:-1:-1;17723:564:0;-1:-1:-1;17723:564:0:o;15174:917::-;15323:28;;:::i;:::-;15369:7;15364:91;;15393:17;;;:27;;;15435:8;;15364:91;15465:17;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15465:17:0;15497:6;:23;;;;;15508:12;15507:13;15497:23;15493:124;;;-1:-1:-1;15522:16:0;;;;;;;;15529:9;15522:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15493:124;;;15559:12;15554:63;;-1:-1:-1;15573:12:0;;;;;;;;15580:5;15573:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15554:63;;;-1:-1:-1;15601:16:0;;;;;;;;15608:9;15601:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15554:63;15650:8;;15662:3;;15640:18;;:7;:18;:::i;:::-;15639:26;;;;:::i;:::-;15630:6;;;:35;15702:14;;;;15720:3;;15692:24;;:7;:24;:::i;:::-;15691:32;;;;:::i;:::-;15676:12;;;:47;15760:14;;;;15778:3;;15750:24;;:7;:24;:::i;:::-;15749:32;;;;:::i;:::-;15734:12;;;:47;15818:14;;;;15836:3;;15808:24;;:7;:24;:::i;:::-;15807:32;;;;:::i;:::-;15792:12;;;:47;15870:8;;;;15882:3;;15860:18;;:7;:18;:::i;:::-;15859:26;;;;:::i;:::-;15850:6;;;:35;;;16030:12;;;;16002;;;;15974;;;;15952:6;;;;15929:29;;:7;:29;:::i;:::-;:57;;;;:::i;:::-;:85;;;;:::i;:::-;:113;;;;:::i;:::-;:135;;;;:::i;:::-;15896:17;;;:168;-1:-1:-1;15174:917:0;;;;;;:::o;16099:995::-;16309:15;;;;;16493:21;16503:11;16493:7;:21;:::i;:::-;16483:31;;16532:7;16527:75;;-1:-1:-1;16564:7:0;;-1:-1:-1;16582:1:0;;-1:-1:-1;16582:1:0;;-1:-1:-1;16582:1:0;16556:34;;16527:75;16630:11;16621:1;:6;;;:20;;;;:::i;:::-;16614:27;;16680:11;16665:1;:12;;;:26;;;;:::i;:::-;16652:39;;16730:11;16715:1;:12;;;:26;;;;:::i;:::-;16702:39;;16752:18;16788:11;16773:1;:12;;;:26;;;;:::i;:::-;16752:47;;16810:12;16834:11;16825:1;:6;;;:20;;;;:::i;:::-;16810:35;-1:-1:-1;16810:35:0;16982:10;16956;16930;16887:27;16910:4;16887:7;:27;:::i;:::-;:53;;;;:::i;:::-;:79;;;;:::i;:::-;:105;;;;:::i;:::-;:125;;;;:::i;:::-;16856:156;;17023:63;;16099:995;;;;;;;;;;:::o;17102:444::-;17286:18;17319:12;17364:7;17359:54;;-1:-1:-1;17396:1:0;;-1:-1:-1;17396:1:0;17388:13;;17359:54;17453:11;17438:1;:12;;;:26;;;;:::i;:::-;17425:39;;17491:11;17482:1;:6;;;:20;;;;:::i;:::-;17475:27;;17102:444;;;;;;;:::o;24558:562::-;24708:16;;;24722:1;24708:16;;;;;;;;24684:21;;24708:16;;;;;;;;;;-1:-1:-1;24708:16:0;24684:40;;24753:4;24735;24740:1;24735:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24735:23:0;;;:7;;;;;;;;;;:23;;;;24779:6;;:13;;;-1:-1:-1;;;24779:13:0;;;;:6;;;;;:11;;:13;;;;;24735:7;;24779:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24769:4;24774:1;24769:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24769:23:0;;;:7;;;;;;;;;:23;24837:6;;24805:53;;24822:4;;24837:6;24846:11;24805:8;:53::i;:::-;24897:6;;:215;;-1:-1:-1;;;24897:215:0;;-1:-1:-1;;;;;24897:6:0;;;;:57;;:215;;24969:11;;24897:6;;25039:4;;25066;;25086:15;;24897:215;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24053:497;24233:6;;24201:53;;24218:4;;-1:-1:-1;;;;;24233:6:0;24242:11;24201:8;:53::i;:::-;24297:6;;-1:-1:-1;;;;;24297:6:0;:22;24328:9;24362:4;24382:11;24297:6;;24494:7;1449;1476:6;-1:-1:-1;;;;;1476:6:0;;1403:87;24494:7;24297:245;;;;;;-1:-1:-1;;;;;;24297:245:0;;;-1:-1:-1;;;;;6697:15:1;;;24297:245:0;;;6679:34:1;6729:18;;;6722:34;;;;6772:18;;;6765:34;;;;6815:18;;;6808:34;6879:15;;;6858:19;;;6851:44;24516:15:0;6911:19:1;;;6904:35;6613:19;;24297:245:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24053:497;;:::o;2986:319::-;3101:6;3076:21;:31;;3068:73;;;;-1:-1:-1;;;3068:73:0;;13237:2:1;3068:73:0;;;13219:21:1;13276:2;13256:18;;;13249:30;13315:31;13295:18;;;13288:59;13364:18;;3068:73:0;13035:353:1;3068:73:0;3155:12;3173:9;-1:-1:-1;;;;;3173:14:0;3196:6;3173:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3154:54;;;3227:7;3219:78;;;;-1:-1:-1;;;3219:78:0;;12458:2:1;3219:78:0;;;12440:21:1;12497:2;12477:18;;;12470:30;12536:34;12516:18;;;12509:62;12607:28;12587:18;;;12580:56;12653:19;;3219:78:0;12256:422:1;13231:125:0;13310:4;13299:7;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;13325:11:0;:23;;13344:4;;13325:11;:15;;:23;;13344:4;;13325:23;:::i;:::-;;;;-1:-1:-1;;;;13231:125:0:o;13364:280::-;13472:10;13447:11;:21;;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;;13519:4:0;13499:26;;;;:11;:26;;;;;;;;13495:95;;;13558:4;13542:22;;;;:7;:22;;;;;:36;;13568:10;;13542:22;:36;;13568:10;;13542:36;:::i;:::-;;;;-1:-1:-1;;13495:95:0;13616:4;13600:22;;;;:7;:22;;;;;:36;;13626:10;;13600:22;:36;;13626:10;;13600:36;:::i;13652:280::-;13760:10;13735:11;:21;;;:35;;;;;;;:::i;13940:280::-;14048:10;14023:11;:21;;;:35;;;;;;;:::i;14228:238::-;14312:4;14293:11;:15;;;:23;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:134:1:-;82:20;;111:31;82:20;111:31;:::i;:::-;14:134;;;:::o;153:128::-;218:20;;247:28;218:20;247:28;:::i;286:247::-;345:6;398:2;386:9;377:7;373:23;369:32;366:52;;;414:1;411;404:12;366:52;453:9;440:23;472:31;497:5;472:31;:::i;538:251::-;608:6;661:2;649:9;640:7;636:23;632:32;629:52;;;677:1;674;667:12;629:52;709:9;703:16;728:31;753:5;728:31;:::i;794:388::-;862:6;870;923:2;911:9;902:7;898:23;894:32;891:52;;;939:1;936;929:12;891:52;978:9;965:23;997:31;1022:5;997:31;:::i;:::-;1047:5;-1:-1:-1;1104:2:1;1089:18;;1076:32;1117:33;1076:32;1117:33;:::i;:::-;1169:7;1159:17;;;794:388;;;;;:::o;1187:456::-;1264:6;1272;1280;1333:2;1321:9;1312:7;1308:23;1304:32;1301:52;;;1349:1;1346;1339:12;1301:52;1388:9;1375:23;1407:31;1432:5;1407:31;:::i;:::-;1457:5;-1:-1:-1;1514:2:1;1499:18;;1486:32;1527:33;1486:32;1527:33;:::i;:::-;1187:456;;1579:7;;-1:-1:-1;;;1633:2:1;1618:18;;;;1605:32;;1187:456::o;1648:382::-;1713:6;1721;1774:2;1762:9;1753:7;1749:23;1745:32;1742:52;;;1790:1;1787;1780:12;1742:52;1829:9;1816:23;1848:31;1873:5;1848:31;:::i;:::-;1898:5;-1:-1:-1;1955:2:1;1940:18;;1927:32;1968:30;1927:32;1968:30;:::i;2035:315::-;2103:6;2111;2164:2;2152:9;2143:7;2139:23;2135:32;2132:52;;;2180:1;2177;2170:12;2132:52;2219:9;2206:23;2238:31;2263:5;2238:31;:::i;:::-;2288:5;2340:2;2325:18;;;;2312:32;;-1:-1:-1;;;2035:315:1:o;2355:1202::-;2445:6;2453;2506:2;2494:9;2485:7;2481:23;2477:32;2474:52;;;2522:1;2519;2512:12;2474:52;2562:9;2549:23;2591:18;2632:2;2624:6;2621:14;2618:34;;;2648:1;2645;2638:12;2618:34;2686:6;2675:9;2671:22;2661:32;;2731:7;2724:4;2720:2;2716:13;2712:27;2702:55;;2753:1;2750;2743:12;2702:55;2789:2;2776:16;2811:4;2834:2;2830;2827:10;2824:36;;;2840:18;;:::i;:::-;2886:2;2883:1;2879:10;2918:2;2912:9;2981:2;2977:7;2972:2;2968;2964:11;2960:25;2952:6;2948:38;3036:6;3024:10;3021:22;3016:2;3004:10;3001:18;2998:46;2995:72;;;3047:18;;:::i;:::-;3083:2;3076:22;3133:18;;;3167:15;;;;-1:-1:-1;3202:11:1;;;3232;;;3228:20;;3225:33;-1:-1:-1;3222:53:1;;;3271:1;3268;3261:12;3222:53;3293:1;3284:10;;3303:169;3317:2;3314:1;3311:9;3303:169;;;3374:23;3393:3;3374:23;:::i;:::-;3362:36;;3335:1;3328:9;;;;;3418:12;;;;3450;;3303:169;;;-1:-1:-1;3491:6:1;-1:-1:-1;3516:35:1;;-1:-1:-1;3532:18:1;;;3516:35;:::i;:::-;3506:45;;;;;;2355:1202;;;;;:::o;3562:241::-;3618:6;3671:2;3659:9;3650:7;3646:23;3642:32;3639:52;;;3687:1;3684;3677:12;3639:52;3726:9;3713:23;3745:28;3767:5;3745:28;:::i;3808:245::-;3875:6;3928:2;3916:9;3907:7;3903:23;3899:32;3896:52;;;3944:1;3941;3934:12;3896:52;3976:9;3970:16;3995:28;4017:5;3995:28;:::i;4058:309::-;4123:6;4131;4184:2;4172:9;4163:7;4159:23;4155:32;4152:52;;;4200:1;4197;4190:12;4152:52;4239:9;4226:23;4258:28;4280:5;4258:28;:::i;4372:180::-;4431:6;4484:2;4472:9;4463:7;4459:23;4455:32;4452:52;;;4500:1;4497;4490:12;4452:52;-1:-1:-1;4523:23:1;;4372:180;-1:-1:-1;4372:180:1:o;4557:309::-;4622:6;4630;4683:2;4671:9;4662:7;4658:23;4654:32;4651:52;;;4699:1;4696;4689:12;4651:52;4735:9;4722:23;4712:33;;4795:2;4784:9;4780:18;4767:32;4808:28;4830:5;4808:28;:::i;4871:306::-;4959:6;4967;4975;5028:2;5016:9;5007:7;5003:23;4999:32;4996:52;;;5044:1;5041;5034:12;4996:52;5073:9;5067:16;5057:26;;5123:2;5112:9;5108:18;5102:25;5092:35;;5167:2;5156:9;5152:18;5146:25;5136:35;;4871:306;;;;;:::o;5182:454::-;5277:6;5285;5293;5301;5309;5362:3;5350:9;5341:7;5337:23;5333:33;5330:53;;;5379:1;5376;5369:12;5330:53;-1:-1:-1;;5402:23:1;;;5472:2;5457:18;;5444:32;;-1:-1:-1;5523:2:1;5508:18;;5495:32;;5574:2;5559:18;;5546:32;;-1:-1:-1;5625:3:1;5610:19;5597:33;;-1:-1:-1;5182:454:1;-1:-1:-1;5182:454:1:o;7365:597::-;7477:4;7506:2;7535;7524:9;7517:21;7567:6;7561:13;7610:6;7605:2;7594:9;7590:18;7583:34;7635:1;7645:140;7659:6;7656:1;7653:13;7645:140;;;7754:14;;;7750:23;;7744:30;7720:17;;;7739:2;7716:26;7709:66;7674:10;;7645:140;;;7803:6;7800:1;7797:13;7794:91;;;7873:1;7868:2;7859:6;7848:9;7844:22;7840:31;7833:42;7794:91;-1:-1:-1;7946:2:1;7925:15;-1:-1:-1;;7921:29:1;7906:45;;;;7953:2;7902:54;;7365:597;-1:-1:-1;;;7365:597:1:o;15331:356::-;15533:2;15515:21;;;15552:18;;;15545:30;15611:34;15606:2;15591:18;;15584:62;15678:2;15663:18;;15331:356::o;19258:980::-;19520:4;19568:3;19557:9;19553:19;19599:6;19588:9;19581:25;19625:2;19663:6;19658:2;19647:9;19643:18;19636:34;19706:3;19701:2;19690:9;19686:18;19679:31;19730:6;19765;19759:13;19796:6;19788;19781:22;19834:3;19823:9;19819:19;19812:26;;19873:2;19865:6;19861:15;19847:29;;19894:1;19904:195;19918:6;19915:1;19912:13;19904:195;;;19983:13;;-1:-1:-1;;;;;19979:39:1;19967:52;;20074:15;;;;20039:12;;;;20015:1;19933:9;19904:195;;;-1:-1:-1;;;;;;;20155:32:1;;;;20150:2;20135:18;;20128:60;-1:-1:-1;;;20219:3:1;20204:19;20197:35;20116:3;19258:980;-1:-1:-1;;;19258:980:1:o;20900:128::-;20940:3;20971:1;20967:6;20964:1;20961:13;20958:39;;;20977:18;;:::i;:::-;-1:-1:-1;21013:9:1;;20900:128::o;21033:217::-;21073:1;21099;21089:132;;21143:10;21138:3;21134:20;21131:1;21124:31;21178:4;21175:1;21168:15;21206:4;21203:1;21196:15;21089:132;-1:-1:-1;21235:9:1;;21033:217::o;21255:422::-;21344:1;21387:5;21344:1;21401:270;21422:7;21412:8;21409:21;21401:270;;;21481:4;21477:1;21473:6;21469:17;21463:4;21460:27;21457:53;;;21490:18;;:::i;:::-;21540:7;21530:8;21526:22;21523:55;;;21560:16;;;;21523:55;21639:22;;;;21599:15;;;;21401:270;;;21405:3;21255:422;;;;;:::o;21682:140::-;21740:5;21769:47;21810:4;21800:8;21796:19;21790:4;21876:5;21906:8;21896:80;;-1:-1:-1;21947:1:1;21961:5;;21896:80;21995:4;21985:76;;-1:-1:-1;22032:1:1;22046:5;;21985:76;22077:4;22095:1;22090:59;;;;22163:1;22158:130;;;;22070:218;;22090:59;22120:1;22111:10;;22134:5;;;22158:130;22195:3;22185:8;22182:17;22179:43;;;22202:18;;:::i;:::-;-1:-1:-1;;22258:1:1;22244:16;;22273:5;;22070:218;;22372:2;22362:8;22359:16;22353:3;22347:4;22344:13;22340:36;22334:2;22324:8;22321:16;22316:2;22310:4;22307:12;22303:35;22300:77;22297:159;;;-1:-1:-1;22409:19:1;;;22441:5;;22297:159;22488:34;22513:8;22507:4;22488:34;:::i;:::-;22558:6;22554:1;22550:6;22546:19;22537:7;22534:32;22531:58;;;22569:18;;:::i;:::-;22607:20;;21827:806;-1:-1:-1;;;21827:806:1:o;22638:168::-;22678:7;22744:1;22740;22736:6;22732:14;22729:1;22726:21;22721:1;22714:9;22707:17;22703:45;22700:71;;;22751:18;;:::i;:::-;-1:-1:-1;22791:9:1;;22638:168::o;22811:125::-;22851:4;22879:1;22876;22873:8;22870:34;;;22884:18;;:::i;:::-;-1:-1:-1;22921:9:1;;22811:125::o;22941:135::-;22980:3;-1:-1:-1;;23001:17:1;;22998:43;;;23021:18;;:::i;:::-;-1:-1:-1;23068:1:1;23057:13;;22941:135::o;23081:127::-;23142:10;23137:3;23133:20;23130:1;23123:31;23173:4;23170:1;23163:15;23197:4;23194:1;23187:15;23213:127;23274:10;23269:3;23265:20;23262:1;23255:31;23305:4;23302:1;23295:15;23329:4;23326:1;23319:15;23345:127;23406:10;23401:3;23397:20;23394:1;23387:31;23437:4;23434:1;23427:15;23461:4;23458:1;23451:15;23477:127;23538:10;23533:3;23529:20;23526:1;23519:31;23569:4;23566:1;23559:15;23593:4;23590:1;23583:15;23609:131;-1:-1:-1;;;;;23684:31:1;;23674:42;;23664:70;;23730:1;23727;23720:12;23745:118;23831:5;23824:13;23817:21;23810:5;23807:32;23797:60;;23853:1;23850;23843:12

Swarm Source

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