ETH Price: $3,429.05 (+4.44%)

Token

Deepw3b (DW3B)
 

Overview

Max Total Supply

100,000,000 DW3B

Holders

380

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 DW3B

Value
$0.00
0xb99202d459d8414fa06a8f54eda8638b71404d6e
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:
DEEPW3B

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-06-20
*/

/**

8888888b.  8888888888 8888888888 8888888b.  888       888  .d8888b.  888888b.   
888  "Y88b 888        888        888   Y88b 888   o   888 d88P  Y88b 888  "88b  
888    888 888        888        888    888 888  d8b  888      .d88P 888  .88P  
888    888 8888888    8888888    888   d88P 888 d888b 888     8888"  8888888K.  
888    888 888        888        8888888P"  888d88888b888      "Y8b. 888  "Y88b 
888    888 888        888        888        88888P Y88888 888    888 888    888 
888  .d88P 888        888        888        8888P   Y8888 Y88b  d88P 888   d88P 
8888888P"  8888888888 8888888888 888        888P     Y888  "Y8888P"  8888888P"  
                                                                                
--------------------------------------------------------
 CONTRACT AUDITED: https://deepw3b.com/api/static/deepw3b_contract_audit.pdf
--------------------------------------------------------

 WEB: deepw3b.com
 TELEGRAM: https://t.me/Deepw3b_com  
 TWITTER: https://twitter.com/deepw3b_
 YOUTUBE: https://www.youtube.com/@deepw3b_/
 IG: https://www.instagram.com/deepw3b_com/
 TIKTOK: https://www.tiktok.com/@deepw3b_com
*/

// SPDX-License-Identifier: Unlicensed
pragma solidity >=0.6.0 <0.9.0;

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

    function decimals() external view returns (uint8);

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

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

    function getOwner() external view returns (address);

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

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

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

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

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

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

interface IFactoryV2 {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address lpPair,
        uint256
    );

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address lpPair);

    function createPair(address tokenA, address tokenB)
        external
        returns (address lpPair);
}

interface IV2Pair {
    function factory() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function sync() external;
}

interface IRouter01 {
    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 addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IRouter02 is IRouter01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

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

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

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);
}

contract DEEPW3B is IERC20 {
    mapping(address => uint256) private _tOwned;
    mapping(address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _liquidityHolders;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedFromLimits;

    uint256 private constant startingSupply = 100_000_000;
    string private constant _name = "Deepw3b";
    string private constant _symbol = "DW3B";
    uint8 private constant _decimals = 18;
    uint256 private _tTotal = startingSupply * 10**_decimals;

    struct Fees {
        uint16 buyFee;
        uint16 sellFee;
        uint16 transferFee;
    }

    struct Ratios {
        uint16 liquidity;
        uint16 operations;
        uint16 burn;
        uint16 totalSwap;
    }

    Fees public _taxRates = Fees({buyFee: 600, sellFee: 600, transferFee: 600});

    Ratios public _ratios =
        Ratios({liquidity: 100, operations: 500, burn: 0, totalSwap: 600});

    uint256 public constant maxTransferTaxes = 600;
    uint256 public constant maxBuyTaxes = 600;
    uint256 public constant maxSellTaxes = 600;
    uint256 constant masterTaxDivisor = 10000;

    bool public taxesAreLocked;
    bool public maxDisabled;    
    IRouter02 public dexRouter;
    address public lpPair;
    address public liquidityAddress;
    address public constant DEAD = 0x000000000000000000000000000000000000dEaD;

    struct TaxWallets {
        address payable operations;
    }

    TaxWallets public _taxWallets =
        TaxWallets({
            operations: payable(0x50800A8799aE012f18a609eb2bB485981F82D9c0)
        });
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    bool public piContractSwapsEnabled;
    uint256 public piSwapPercent = 10;

    uint256 private _maxTxAmount = (_tTotal * 205) / 10000;
    uint256 private _maxWalletSize = (_tTotal * 205) / 10000;

    bool public tradingEnabled = false;
    bool public _hasLiqBeenAdded = false;

    event ContractSwapEnabledUpdated(bool enabled);
    event AutoLiquify(uint256 amountCurrency, uint256 amountTokens);

    modifier inSwapFlag() {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor() payable {
        _owner = msg.sender;
        originalDeployer = msg.sender;
        _tOwned[_owner] = _tTotal;
        emit Transfer(address(0), _owner, _tTotal);
        dexRouter = IRouter02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        lpPair = IFactoryV2(dexRouter.factory()).createPair(
            dexRouter.WETH(),
            address(this)
        );
        lpPairs[lpPair] = true;
        _approve(_owner, address(dexRouter), type(uint256).max);
        _approve(address(this), address(dexRouter), type(uint256).max);
        _isExcludedFromFees[_owner] = true;
        _isExcludedFromFees[0x50800A8799aE012f18a609eb2bB485981F82D9c0] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[DEAD] = true;
        _liquidityHolders[_owner] = true;
        liquidityAddress = _owner;
    }

    receive() external payable {}

    address private _owner;
    modifier onlyOwner() {
        require(_owner == msg.sender, "Caller =/= owner.");
        _;
    }
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    function transferOwner(address newOwner) external onlyOwner {
        require(
            newOwner != address(0),
            "Call renounceOwnership to transfer owner to the zero address."
        );
        require(
            newOwner != DEAD,
            "Call renounceOwnership to transfer owner to the zero address."
        );
        setExcludedFromFees(_owner, false);
        setExcludedFromFees(newOwner, true);

        if (balanceOf(_owner) > 0) {
            finalizeTransfer(
                _owner,
                newOwner,
                balanceOf(_owner),
                false,
                false,
                true
            );
        }

        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }

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

    address public originalDeployer;
    address public operator;

    function setOperator(address newOperator) public {
        require(
            msg.sender == originalDeployer,
            "Can only be called by original deployer."
        );
        address oldOperator = operator;
        if (oldOperator != address(0)) {
            _liquidityHolders[oldOperator] = false;
            setExcludedFromFees(oldOperator, false);
        }
        operator = newOperator;
        _liquidityHolders[newOperator] = true;
        setExcludedFromFees(newOperator, true);
    }

    function renounceOriginalDeployer() external {
        require(
            msg.sender == originalDeployer,
            "Can only be called by original deployer."
        );
        setOperator(address(0));
        originalDeployer = address(0);
    }

    function totalSupply() external view override returns (uint256) {
        if (_tTotal == 0) {
            revert();
        }
        return _tTotal;
    }

    function decimals() external view override returns (uint8) {
        if (_tTotal == 0) {
            revert();
        }
        return _decimals;
    }

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

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

    function getOwner() external view override returns (address) {
        return _owner;
    }

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

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

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

    function approve(address spender, uint256 amount)
        external
        override
        returns (bool)
    {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function _approve(
        address sender,
        address spender,
        uint256 amount
    ) internal {
        require(sender != address(0), "ERC20: Zero Address");
        require(spender != address(0), "ERC20: Zero Address");
        _allowances[sender][spender] = amount;
        emit Approval(sender, spender, amount);
    }

    function approveContractContingency() external onlyOwner returns (bool) {
        _approve(address(this), address(dexRouter), type(uint256).max);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external override returns (bool) {
        if (_allowances[sender][msg.sender] != type(uint256).max) {
            _allowances[sender][msg.sender] -= amount;
        }
        return _transfer(sender, recipient, amount);
    }

    function setNewRouter(address newRouter) external onlyOwner {
        require(!_hasLiqBeenAdded, "Cannot change after liquidity.");
        IRouter02 _newRouter = IRouter02(newRouter);
        address get_pair = IFactoryV2(_newRouter.factory()).getPair(
            address(this),
            _newRouter.WETH()
        );
        lpPairs[lpPair] = false;
        if (get_pair == address(0)) {
            lpPair = IFactoryV2(_newRouter.factory()).createPair(
                address(this),
                _newRouter.WETH()
            );
        } else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        lpPairs[lpPair] = true;
        _approve(address(this), address(dexRouter), type(uint256).max);
    }

    function setLpPair(address pair, bool enabled) external onlyOwner {
        if (!enabled) {
            lpPairs[pair] = false;
        } else {
            if (timeSinceLastPair != 0) {
                require(
                    block.timestamp - timeSinceLastPair > 3 days,
                    "3 Day cooldown."
                );
            }
            require(!lpPairs[pair], "Pair already added to list.");
            lpPairs[pair] = true;
            timeSinceLastPair = block.timestamp;
        }
    }

    function isExcludedFromLimits(address account)
        external
        view
        returns (bool)
    {
        return _isExcludedFromLimits[account];
    }

    function setExcludedFromLimits(address account, bool enabled)
        external
        onlyOwner
    {
        _isExcludedFromLimits[account] = enabled;
    }

    function isExcludedFromFees(address account) external view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function setExcludedFromFees(address account, bool enabled)
        public
        onlyOwner
    {
        _isExcludedFromFees[account] = enabled;
    }

    function lockTaxes() external onlyOwner {
        taxesAreLocked = true;
    }   

    function disableMax() external onlyOwner {
        maxDisabled = true;
    }

    function setTaxes(
        uint16 buyFee,
        uint16 sellFee,
        uint16 transferFee
    ) external onlyOwner {
        require(!taxesAreLocked, "Taxes are locked.");
        require(
            buyFee <= maxBuyTaxes &&
                sellFee <= maxSellTaxes &&
                transferFee <= maxTransferTaxes,
            "Cannot exceed maximums."
        );
        _taxRates.buyFee = buyFee;
        _taxRates.sellFee = sellFee;
        _taxRates.transferFee = transferFee;
    }

    function setRatios(
        uint16 liquidity,
        uint16 operations,
        uint16 burn
    ) external onlyOwner {
        _ratios.liquidity = liquidity;
        _ratios.operations = operations;
        _ratios.burn = burn;
        _ratios.totalSwap = liquidity + operations;
        uint256 total = _taxRates.buyFee + _taxRates.sellFee;
        require(
            _ratios.totalSwap + _ratios.burn <= total,
            "Cannot exceed sum of buy and sell fees."
        );
    }

    function setWallets(address payable operations) external onlyOwner {
        require(operations != address(0), "Cannot be zero address.");
        _taxWallets.operations = payable(operations);
    }

    function setLiquidityAddress(address _liquidityAddress) external onlyOwner {
        require(_liquidityAddress != address(0), "Cannot be zero address.");
        liquidityAddress = _liquidityAddress;
    }

    function setMaxTxAmount(uint256 percent, uint256 divisor)
        external
        onlyOwner
    {        
        require(!maxDisabled, "Max amount is disabled.");
        require(
            (_tTotal * percent) / divisor >= ((_tTotal * 5) / 1000),
            "Max Transaction amt must be above 0.5% of total supply."
        );
        _maxTxAmount = (_tTotal * percent) / divisor;
    }

    function setMaxWalletSize(uint256 percent, uint256 divisor)
        external
        onlyOwner
    {
        require(!maxDisabled, "Max wallet is disabled.");
        require(
            (_tTotal * percent) / divisor >= (_tTotal / 100),
            "Max Wallet amt must be above 1% of total supply."
        );
        _maxWalletSize = (_tTotal * percent) / divisor;
    }

    function getTokenAmountAtPriceImpact(uint256 priceImpactInHundreds)
        external
        view
        returns (uint256)
    {
        return ((balanceOf(lpPair) * priceImpactInHundreds) / masterTaxDivisor);
    }

    function setSwapSettings(
        uint256 thresholdPercent,
        uint256 thresholdDivisor,
        uint256 amountPercent,
        uint256 amountDivisor
    ) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
        require(
            swapThreshold <= swapAmount,
            "Threshold cannot be above amount."
        );
        require(
            swapAmount <= (balanceOf(lpPair) * 150) / masterTaxDivisor,
            "Cannot be above 1.5% of current PI."
        );
        require(
            swapAmount >= _tTotal / 1_000_000,
            "Cannot be lower than 0.00001% of total supply."
        );
        require(
            swapThreshold >= _tTotal / 1_000_000,
            "Cannot be lower than 0.00001% of total supply."
        );
    }

    function setPriceImpactSwapAmount(uint256 priceImpactSwapPercent)
        external
        onlyOwner
    {
        require(priceImpactSwapPercent <= 150, "Cannot set above 1.5%.");
        piSwapPercent = priceImpactSwapPercent;
    }

    function setContractSwapEnabled(
        bool swapEnabled,
        bool priceImpactSwapEnabled
    ) external onlyOwner {
        contractSwapEnabled = swapEnabled;
        piContractSwapsEnabled = priceImpactSwapEnabled;
        emit ContractSwapEnabledUpdated(swapEnabled);
    }

    function _hasLimits(address from, address to) internal view returns (bool) {
        return
            from != _owner &&
            to != _owner &&
            tx.origin != _owner &&
            !_liquidityHolders[to] &&
            !_liquidityHolders[from] &&
            to != DEAD &&
            to != address(0) &&
            from != address(this);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal returns (bool) {
        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");
        bool buy = false;
        bool sell = false;
        bool other = false;
        if (lpPairs[from]) {
            buy = true;
        } else if (lpPairs[to]) {
            sell = true;
        } else {
            other = true;
        }
        if (_hasLimits(from, to)) {
            if (!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
            if (buy || sell) {
                if (
                    !_isExcludedFromLimits[from] && !_isExcludedFromLimits[to] && !maxDisabled
                ) {
                    require(
                        amount <= _maxTxAmount,
                        "Transfer amount exceeds the maxTxAmount."
                    );
                }
            }
            if (to != address(dexRouter) && !sell) {
                if (!_isExcludedFromLimits[to] && !maxDisabled) {
                    require(
                        balanceOf(to) + amount <= _maxWalletSize,
                        "Transfer amount exceeds the maxWalletSize."
                    );
                }
            }
        }
        
        if (sell) {
            if (!inSwap) {
                if (contractSwapEnabled) {
                    uint256 contractTokenBalance = balanceOf(address(this));
                    if (contractTokenBalance >= swapThreshold) {
                        uint256 swapAmt = swapAmount;
                        if (piContractSwapsEnabled) {
                            swapAmt =
                                (balanceOf(lpPair) * piSwapPercent) /
                                masterTaxDivisor;
                        }
                        if (contractTokenBalance >= swapAmt) {
                            contractTokenBalance = swapAmt;
                        }
                        contractSwap(contractTokenBalance);
                    }
                }
            }
        }

        return finalizeTransfer(from, to, amount, buy, sell, other);
    }

    function contractSwap(uint256 contractTokenBalance) internal inSwapFlag {
        Ratios memory ratios = _ratios;
        if (ratios.totalSwap == 0) {
            return;
        }

        if (
            _allowances[address(this)][address(dexRouter)] != type(uint256).max
        ) {
            _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        }

        uint256 toLiquify = ((contractTokenBalance * ratios.liquidity) /
            ratios.totalSwap) / 2;
        uint256 swapAmt = contractTokenBalance - toLiquify;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        try
            dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
                swapAmt,
                0,
                path,
                address(this),
                block.timestamp
            )
        {} catch {
            return;
        }

        uint256 amtBalance = address(this).balance;
        uint256 liquidityBalance = (amtBalance * toLiquify) / swapAmt;

        if (toLiquify > 0) {
            try
                dexRouter.addLiquidityETH{value: liquidityBalance}(
                    address(this),
                    toLiquify,
                    0,
                    0,
                    liquidityAddress,
                    block.timestamp
                )
            {
                emit AutoLiquify(liquidityBalance, toLiquify);
            } catch {
                return;
            }
        }

        amtBalance -= liquidityBalance;
        ratios.totalSwap -= ratios.liquidity;
        bool success;
        uint256 operationsBalance = (amtBalance * ratios.operations) /
            ratios.totalSwap;
        if (ratios.operations > 0) {
            (success, ) = _taxWallets.operations.call{
                value: operationsBalance,
                gas: 55000
            }("");
        }
    }

    function _checkLiquidityAdd(address from, address to) internal {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            _liquidityHolders[from] = true;
            _isExcludedFromFees[from] = true;
            _hasLiqBeenAdded = true;
            contractSwapEnabled = true;
            emit ContractSwapEnabledUpdated(true);
        }
    }

    function enableTrading() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        require(_hasLiqBeenAdded, "Liquidity must be added.");
        tradingEnabled = true;
        swapThreshold = (balanceOf(lpPair) * 10) / 10000;
        swapAmount = (balanceOf(lpPair) * 30) / 10000;
    }

    function sweepContingency() external onlyOwner {
        payable(_owner).transfer(address(this).balance);
    }

    function sweepExternalTokens(address token) external onlyOwner {
        IERC20 TOKEN = IERC20(token);
        TOKEN.transfer(_owner, TOKEN.balanceOf(address(this)));
    }

    function multiSendTokens(
        address[] memory accounts,
        uint256[] memory amounts
    ) external onlyOwner {
        require(accounts.length == amounts.length, "Lengths do not match.");
        for (uint16 i = 0; i < accounts.length; i++) {
            require(
                balanceOf(msg.sender) >= amounts[i] * 10**_decimals,
                "Not enough tokens."
            );
            finalizeTransfer(
                msg.sender,
                accounts[i],
                amounts[i] * 10**_decimals,
                false,
                false,
                true
            );
        }
    }

    function finalizeTransfer(
        address from,
        address to,
        uint256 amount,
        bool buy,
        bool sell,
        bool other
    ) internal returns (bool) {
        bool takeFee = true;
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        _tOwned[from] -= amount;
        uint256 amountReceived = (takeFee)
            ? takeTaxes(from, buy, sell, amount)
            : amount;
        _tOwned[to] += amountReceived;
        emit Transfer(from, to, amountReceived);
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to) && !other) {
                revert("Pre-liquidity transfer protection.");
            }
        }
        return true;
    }

    function takeTaxes(
        address from,
        bool buy,
        bool sell,
        uint256 amount
    ) internal returns (uint256) {
        Ratios memory ratios = _ratios;
        uint256 total = ratios.burn + ratios.totalSwap;
        uint256 currentFee;
        if (buy) {
            currentFee = _taxRates.buyFee;
        } else if (sell) {
            currentFee = _taxRates.sellFee;
        } else {
            currentFee = _taxRates.transferFee;
        }
        if (currentFee == 0 || total == 0) {
            return amount;
        }
        uint256 feeAmount = (amount * currentFee) / masterTaxDivisor;
        uint256 burnAmt = (feeAmount * ratios.burn) / total;
        uint256 swapAmt = feeAmount - burnAmt;
        if (swapAmt > 0) {
            _tOwned[address(this)] += swapAmt;
            emit Transfer(from, address(this), swapAmt);
        }
        if (burnAmt > 0) {
            _tTotal -= burnAmt;
            emit Transfer(from, address(0), burnAmt);
        }

        return amount - feeAmount;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountCurrency","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","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"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"operations","type":"uint16"},{"internalType":"uint16","name":"burn","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxRates","outputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxWallets","outputs":[{"internalType":"address payable","name":"operations","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approveContractContingency","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":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceImpactInHundreds","type":"uint256"}],"name":"getTokenAmountAtPriceImpact","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"originalDeployer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"piContractSwapsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"piSwapPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOriginalDeployer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"swapEnabled","type":"bool"},{"internalType":"bool","name":"priceImpactSwapEnabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityAddress","type":"address"}],"name":"setLiquidityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOperator","type":"address"}],"name":"setOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceImpactSwapPercent","type":"uint256"}],"name":"setPriceImpactSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"operations","type":"uint16"},{"internalType":"uint16","name":"burn","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"operations","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"sweepExternalTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"taxesAreLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600255620000176012600a620006b2565b62000027906305f5e100620006ca565b6007819055604080516060808201835261025880835260208084018290529284018190526008805465ffffffffffff1916650258025802581790558351608081018552606481526101f48185015260008186015290910152600980546001600160401b031916670258000001f4006417905581519081019091527350800a8799ae012f18a609eb2bb485981f82d9c090819052600d80546001600160a01b0319169091179055600e805461ff0019169055600a60125561271090620000ee9060cd620006ca565b620000fa9190620006e4565b60135561271060075460cd620001119190620006ca565b6200011d9190620006e4565b601455601580546001600160b01b031916336201000081810292909217808455601680546001600160a01b0319169092179091556007546001600160a01b03918390048216600090815260208181526040808320849055955495519283529390940490911692917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3600a8054757a250d5630b4cf539739df2c5dacb4c659f2488d000062010000600160b01b031990911617908190556040805163c45a015560e01b81529051620100009092046001600160a01b03169163c45a0155916004808201926020929091908290030181865afa1580156200022a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000250919062000707565b6001600160a01b031663c9c65396600a60029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002b2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d8919062000707565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af115801562000325573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034b919062000707565b600b80546001600160a01b0319166001600160a01b039283169081179091556000908152600160208190526040909120805460ff19169091179055601554600a54620003a9926201000092839004811692909104166000196200049c565b600a54620003cb9030906201000090046001600160a01b03166000196200049c565b601580546001600160a01b03620100009182900481166000908152600560209081526040808320805460ff1990811660019081179092557fa8532e9cbd470d249d86c785c9fb484ee9c26650a7c35f7217b499fb7c524127805482168317905530855282852080548216831790557f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba805482168317905587548790048616855260049093529220805490911690911790559154600c80546001600160a01b0319169290910490921617905562000732565b6001600160a01b038316620004ee5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b0382166200053c5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401620004e5565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620005f4578160001904821115620005d857620005d86200059d565b80851615620005e657918102915b93841c9390800290620005b8565b509250929050565b6000826200060d57506001620006ac565b816200061c57506000620006ac565b8160018114620006355760028114620006405762000660565b6001915050620006ac565b60ff8411156200065457620006546200059d565b50506001821b620006ac565b5060208310610133831016604e8410600b841016171562000685575081810a620006ac565b620006918383620005b3565b8060001904821115620006a857620006a86200059d565b0290505b92915050565b6000620006c360ff841683620005fc565b9392505050565b8082028115828204841417620006ac57620006ac6200059d565b6000826200070257634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200071a57600080fd5b81516001600160a01b0381168114620006c357600080fd5b613a6080620007426000396000f3fe6080604052600436106103855760003560e01c8063590ffdce116101d1578063aa22b17211610102578063cf847706116100a0578063ee5d9c2d1161006f578063ee5d9c2d14610ac6578063f94aa1b414610adb578063fb78680d14610afb578063fdb78c0e14610b1b57600080fd5b8063cf847706146109d9578063dd62ed3e14610a40578063eafb5a3c14610a86578063eb50e70e14610aa657600080fd5b8063b3ab15fb116100dc578063b3ab15fb1461097f578063b3d514fb14610588578063b7df8b361461099f578063bfc2fc35146109b957600080fd5b8063aa22b1721461093f578063ab558e4d1461095f578063b1b08f711461058857600080fd5b806380c581d11161016f5780638a63bd9b116101495780638a63bd9b146108c85780638a8c523c146108dd57806395d89b41146108f2578063a9059cbb1461091f57600080fd5b806380c581d11461086457806381cf58a914610884578063893d20e8146108a457600080fd5b806370a08231116101ab57806370a08231146107fb578063715018a61461081b578063719e31221461083057806378648edf1461084f57600080fd5b8063590ffdce146107825780635cce86cd146107a257806365acb9a9146107db57600080fd5b80632e8fa821116102b65780634ada218b116102545780634fbee193116102235780634fbee193146106ea57806350a8e01614610723578063525fa81f14610742578063570ca7351461076257600080fd5b80634ada218b146106705780634bbb93eb1461068a5780634e718e48146106aa5780634fb2e45d146106ca57600080fd5b806332cde6641161029057806332cde664146105fb57806336fddb041461061b57806339a059021461063b578063452ed4f11461065057600080fd5b80632e8fa8211461059e578063313ce567146105b45780633221c93f146105db57600080fd5b8063135ae1e71161032357806326003957116102fd57806326003957146105325780632610eaca1461055257806328577751146105725780632b28fc7a1461058857600080fd5b8063135ae1e7146104e657806318160ddd146104fd57806323b872dd1461051257600080fd5b806306fdde031161035f57806306fdde031461043d5780630758d9241461047657806307dd79e01461049c578063095ea7b3146104c657600080fd5b806303fd2a45146103915780630445b667146103c4578063069d955f146103e857600080fd5b3661038c57005b600080fd5b34801561039d57600080fd5b506103a761dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103d057600080fd5b506103da600f5481565b6040519081526020016103bb565b3480156103f457600080fd5b506008546104189061ffff80821691620100008104821691600160201b9091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103bb565b34801561044957600080fd5b506040805180820190915260078152662232b2b83b99b160c91b60208201525b6040516103bb919061325f565b34801561048257600080fd5b50600a546103a7906201000090046001600160a01b031681565b3480156104a857600080fd5b50600a546104b69060ff1681565b60405190151581526020016103bb565b3480156104d257600080fd5b506104b66104e13660046132c2565b610b3a565b3480156104f257600080fd5b506104fb610b51565b005b34801561050957600080fd5b506103da610b9b565b34801561051e57600080fd5b506104b661052d3660046132ee565b610bb3565b34801561053e57600080fd5b506104fb61054d36600461332f565b610c2b565b34801561055e57600080fd5b506104fb61056d366004613427565b610d62565b34801561057e57600080fd5b506103da60125481565b34801561059457600080fd5b506103da61025881565b3480156105aa57600080fd5b506103da60105481565b3480156105c057600080fd5b506105c9610ee5565b60405160ff90911681526020016103bb565b3480156105e757600080fd5b50600c546103a7906001600160a01b031681565b34801561060757600080fd5b506104fb610616366004613500565b610efc565b34801561062757600080fd5b506104fb610636366004613551565b61102b565b34801561064757600080fd5b506104fb611086565b34801561065c57600080fd5b50600b546103a7906001600160a01b031681565b34801561067c57600080fd5b506015546104b69060ff1681565b34801561069657600080fd5b506103da6106a536600461358a565b6110cc565b3480156106b657600080fd5b506104fb6106c536600461358a565b6110fe565b3480156106d657600080fd5b506104fb6106e53660046135a3565b61117d565b3480156106f657600080fd5b506104b66107053660046135a3565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561072f57600080fd5b506015546104b690610100900460ff1681565b34801561074e57600080fd5b506104fb61075d3660046135a3565b6112c8565b34801561076e57600080fd5b506017546103a7906001600160a01b031681565b34801561078e57600080fd5b506104fb61079d366004613551565b61136a565b3480156107ae57600080fd5b506104b66107bd3660046135a3565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156107e757600080fd5b506104fb6107f636600461332f565b6113c5565b34801561080757600080fd5b506103da6108163660046135a3565b611516565b34801561082757600080fd5b506104fb611531565b34801561083c57600080fd5b50600a546104b690610100900460ff1681565b34801561085b57600080fd5b506104fb6115d3565b34801561087057600080fd5b506104fb61087f366004613551565b611612565b34801561089057600080fd5b506016546103a7906001600160a01b031681565b3480156108b057600080fd5b506015546201000090046001600160a01b03166103a7565b3480156108d457600080fd5b506104b661175a565b3480156108e957600080fd5b506104fb6117b3565b3480156108fe57600080fd5b50604080518082019091526004815263222b99a160e11b6020820152610469565b34801561092b57600080fd5b506104b661093a3660046132c2565b6118fe565b34801561094b57600080fd5b506104fb61095a366004613500565b611915565b34801561096b57600080fd5b506104fb61097a3660046135a3565b611a4f565b34801561098b57600080fd5b506104fb61099a3660046135a3565b611b6e565b3480156109ab57600080fd5b506011546104b69060ff1681565b3480156109c557600080fd5b506104fb6109d43660046135c0565b611c1a565b3480156109e557600080fd5b50600954610a129061ffff80821691620100008104821691600160201b8204811691600160301b90041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103bb565b348015610a4c57600080fd5b506103da610a5b3660046135de565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610a9257600080fd5b506104fb610aa13660046135a3565b611ca9565b348015610ab257600080fd5b506104fb610ac13660046135a3565b612087565b348015610ad257600080fd5b506104fb612129565b348015610ae757600080fd5b50600d546103a7906001600160a01b031681565b348015610b0757600080fd5b506104fb610b1636600461360c565b61219d565b348015610b2757600080fd5b50600e546104b690610100900460ff1681565b6000610b47338484612352565b5060015b92915050565b6015546201000090046001600160a01b03163314610b8a5760405162461bcd60e51b8152600401610b819061363e565b60405180910390fd5b600a805461ff001916610100179055565b6000600754600003610bac57600080fd5b5060075490565b6001600160a01b038316600090815260036020908152604080832033845290915281205460001914610c18576001600160a01b038416600090815260036020908152604080832033845290915281208054849290610c1290849061367f565b90915550505b610c2384848461244b565b949350505050565b6015546201000090046001600160a01b03163314610c5b5760405162461bcd60e51b8152600401610b819061363e565b600a54610100900460ff1615610cb35760405162461bcd60e51b815260206004820152601760248201527f4d61782077616c6c65742069732064697361626c65642e0000000000000000006044820152606401610b81565b6064600754610cc29190613692565b8183600754610cd191906136b4565b610cdb9190613692565b1015610d425760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201526f37b3103a37ba30b61039bab838363c9760811b6064820152608401610b81565b8082600754610d5191906136b4565b610d5b9190613692565b6014555050565b6015546201000090046001600160a01b03163314610d925760405162461bcd60e51b8152600401610b819061363e565b8051825114610ddb5760405162461bcd60e51b81526020600482015260156024820152742632b733ba3439903237903737ba1036b0ba31b41760591b6044820152606401610b81565b60005b82518161ffff161015610ee057610df76012600a6137af565b828261ffff1681518110610e0d57610e0d6137be565b6020026020010151610e1f91906136b4565b610e2833611516565b1015610e6b5760405162461bcd60e51b81526020600482015260126024820152712737ba1032b737bab3b4103a37b5b2b7399760711b6044820152606401610b81565b610ecd33848361ffff1681518110610e8557610e856137be565b60200260200101516012600a610e9b91906137af565b858561ffff1681518110610eb157610eb16137be565b6020026020010151610ec391906136b4565b600080600161287c565b5080610ed8816137d4565b915050610dde565b505050565b6000600754600003610ef657600080fd5b50601290565b6015546201000090046001600160a01b03163314610f2c5760405162461bcd60e51b8152600401610b819061363e565b600a5460ff1615610f735760405162461bcd60e51b81526020600482015260116024820152702a30bc32b99030b932903637b1b5b2b21760791b6044820152606401610b81565b6102588361ffff1611158015610f8f57506102588261ffff1611155b8015610fa157506102588161ffff1611155b610fed5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610b81565b6008805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff000000001916600160201b9190931602919091179055565b6015546201000090046001600160a01b0316331461105b5760405162461bcd60e51b8152600401610b819061363e565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6016546001600160a01b031633146110b05760405162461bcd60e51b8152600401610b81906137f5565b6110ba6000611b6e565b601680546001600160a01b0319169055565b600b546000906127109083906110ea906001600160a01b0316611516565b6110f491906136b4565b610b4b9190613692565b6015546201000090046001600160a01b0316331461112e5760405162461bcd60e51b8152600401610b819061363e565b60968111156111785760405162461bcd60e51b815260206004820152601660248201527521b0b73737ba1039b2ba1030b137bb329018971a929760511b6044820152606401610b81565b601255565b6015546201000090046001600160a01b031633146111ad5760405162461bcd60e51b8152600401610b819061363e565b6001600160a01b0381166111d35760405162461bcd60e51b8152600401610b819061383d565b61deac196001600160a01b038216016111fe5760405162461bcd60e51b8152600401610b819061383d565b60155461121b906201000090046001600160a01b0316600061136a565b61122681600161136a565b601554600090611244906201000090046001600160a01b0316611516565b111561126c5760155461126a906201000090046001600160a01b031682610ec382611516565b505b601580546001600160a01b038381166201000081810262010000600160b01b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6015546201000090046001600160a01b031633146112f85760405162461bcd60e51b8152600401610b819061363e565b6001600160a01b0381166113485760405162461bcd60e51b815260206004820152601760248201527621b0b73737ba103132903d32b9379030b2323932b9b99760491b6044820152606401610b81565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6015546201000090046001600160a01b0316331461139a5760405162461bcd60e51b8152600401610b819061363e565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6015546201000090046001600160a01b031633146113f55760405162461bcd60e51b8152600401610b819061363e565b600a54610100900460ff161561144d5760405162461bcd60e51b815260206004820152601760248201527f4d617820616d6f756e742069732064697361626c65642e0000000000000000006044820152606401610b81565b6103e8600754600561145f91906136b4565b6114699190613692565b818360075461147891906136b4565b6114829190613692565b10156114f65760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3525206f6620746f74616c20737570706c792e0000000000000000006064820152608401610b81565b808260075461150591906136b4565b61150f9190613692565b6013555050565b6001600160a01b031660009081526020819052604090205490565b6015546201000090046001600160a01b031633146115615760405162461bcd60e51b8152600401610b819061363e565b60155461157e906201000090046001600160a01b0316600061136a565b6015805462010000600160b01b03198116909155604051620100009091046001600160a01b03169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6015546201000090046001600160a01b031633146116035760405162461bcd60e51b8152600401610b819061363e565b600a805460ff19166001179055565b6015546201000090046001600160a01b031633146116425760405162461bcd60e51b8152600401610b819061363e565b8061166957506001600160a01b03166000908152600160205260409020805460ff19169055565b600254156116c2576203f48060025442611683919061367f565b116116c25760405162461bcd60e51b815260206004820152600f60248201526e19902230bc9031b7b7b63237bbb71760891b6044820152606401610b81565b6001600160a01b03821660009081526001602052604090205460ff161561172b5760405162461bcd60e51b815260206004820152601b60248201527f5061697220616c726561647920616464656420746f206c6973742e00000000006044820152606401610b81565b6001600160a01b0382166000908152600160208190526040909120805460ff19169091179055426002555b5050565b6015546000906201000090046001600160a01b0316331461178d5760405162461bcd60e51b8152600401610b819061363e565b600a546117ad9030906201000090046001600160a01b0316600019612352565b50600190565b6015546201000090046001600160a01b031633146117e35760405162461bcd60e51b8152600401610b819061363e565b60155460ff16156118365760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610b81565b601554610100900460ff1661188d5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610b81565b6015805460ff19166001179055600b54612710906118b3906001600160a01b0316611516565b6118be90600a6136b4565b6118c89190613692565b600f55600b54612710906118e4906001600160a01b0316611516565b6118ef90601e6136b4565b6118f99190613692565b601055565b600061190b33848461244b565b5060019392505050565b6015546201000090046001600160a01b031633146119455760405162461bcd60e51b8152600401610b819061363e565b6009805461ffff838116600160201b0265ffff0000000019868316620100000263ffffffff19909416928816929092179290921716179055611987828461389a565b6009805467ffff0000000000001916600160301b61ffff938416021790556008546000916119be916201000081048216911661389a565b60095461ffff918216925082916119e791600160201b8104821691600160301b9091041661389a565b61ffff161115611a495760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201526636103332b2b99760c91b6064820152608401610b81565b50505050565b6015546201000090046001600160a01b03163314611a7f5760405162461bcd60e51b8152600401610b819061363e565b6015546040516370a0823160e01b815230600482015282916001600160a01b038084169263a9059cbb926201000090049091169083906370a0823190602401602060405180830381865afa158015611adb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aff91906138bc565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611b4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee091906138d5565b6016546001600160a01b03163314611b985760405162461bcd60e51b8152600401610b81906137f5565b6017546001600160a01b03168015611bd5576001600160a01b0381166000908152600460205260408120805460ff19169055611bd590829061136a565b601780546001600160a01b0319166001600160a01b0384169081179091556000908152600460205260409020805460ff1916600190811790915561175690839061136a565b6015546201000090046001600160a01b03163314611c4a5760405162461bcd60e51b8152600401610b819061363e565b600e805461ff001916610100841515908102919091179091556011805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b6015546201000090046001600160a01b03163314611cd95760405162461bcd60e51b8152600401610b819061363e565b601554610100900460ff1615611d315760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610b81565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d9a91906138f2565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611de7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0b91906138f2565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611e56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7a91906138f2565b600b546001600160a01b039081166000908152600160205260409020805460ff19169055909150811661201057816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ee5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0991906138f2565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7a91906138f2565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611feb91906138f2565b600b80546001600160a01b0319166001600160a01b039290921691909117905561202c565b600b80546001600160a01b0319166001600160a01b0383161790555b600a805462010000600160b01b031916620100006001600160a01b038581168202929092178355600b5482166000908152600160208190526040909120805460ff191690911790559154610ee0923092910416600019612352565b6015546201000090046001600160a01b031633146120b75760405162461bcd60e51b8152600401610b819061363e565b6001600160a01b0381166121075760405162461bcd60e51b815260206004820152601760248201527621b0b73737ba103132903d32b9379030b2323932b9b99760491b6044820152606401610b81565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6015546201000090046001600160a01b031633146121595760405162461bcd60e51b8152600401610b819061363e565b6015546040516001600160a01b036201000090920491909116904780156108fc02916000818181858888f1935050505015801561219a573d6000803e3d6000fd5b50565b6015546201000090046001600160a01b031633146121cd5760405162461bcd60e51b8152600401610b819061363e565b82846007546121dc91906136b4565b6121e69190613692565b600f5560075481906121f99084906136b4565b6122039190613692565b6010819055600f5411156122635760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610b81565b600b546127109061227c906001600160a01b0316611516565b6122879060966136b4565b6122919190613692565b60105411156122ee5760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201526228249760e91b6064820152608401610b81565b620f42406007546122ff9190613692565b60105410156123205760405162461bcd60e51b8152600401610b819061390f565b620f42406007546123319190613692565b600f541015611a495760405162461bcd60e51b8152600401610b819061390f565b6001600160a01b03831661239e5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610b81565b6001600160a01b0382166123ea5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610b81565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166124b15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b81565b6001600160a01b0383166125135760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b81565b600082116125755760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b81565b6001600160a01b0384166000908152600160205260408120548190819060ff16156125a357600192506125d1565b6001600160a01b03861660009081526001602052604090205460ff16156125cd57600191506125d1565b5060015b6125db8787612a3f565b156127d35760155460ff166126325760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610b81565b828061263b5750815b156126fe576001600160a01b03871660009081526006602052604090205460ff1615801561268257506001600160a01b03861660009081526006602052604090205460ff16155b80156126965750600a54610100900460ff16155b156126fe576013548511156126fe5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610b81565b600a546001600160a01b03878116620100009092041614801590612720575081155b156127d3576001600160a01b03861660009081526006602052604090205460ff161580156127565750600a54610100900460ff16155b156127d3576014548561276888611516565b612772919061395d565b11156127d35760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610b81565b811561286357600e5460ff1661286357600e54610100900460ff16156128635760006127fe30611516565b9050600f5481106128615760105460115460ff161561284b57601254600b546127109190612834906001600160a01b0316611516565b61283e91906136b4565b6128489190613692565b90505b808210612856578091505b61285f82612b28565b505b505b61287187878786868661287c565b979650505050505050565b6001600160a01b03861660009081526005602052604081205460019060ff16806128be57506001600160a01b03871660009081526005602052604090205460ff165b156128c7575060005b6001600160a01b038816600090815260208190526040812080548892906128ef90849061367f565b909155506000905081612902578661290e565b61290e8987878a612f6e565b9050806000808a6001600160a01b03166001600160a01b031681526020019081526020016000206000828254612944919061395d565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161299091815260200190565b60405180910390a3601554610100900460ff16612a30576129b1898961314b565b601554610100900460ff161580156129ce57506129ce8989612a3f565b80156129d8575083155b15612a305760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401610b81565b50600198975050505050505050565b6015546000906001600160a01b03848116620100009092041614801590612a7a57506015546001600160a01b03838116620100009092041614155b8015612a9757506015546201000090046001600160a01b03163214155b8015612abc57506001600160a01b03821660009081526004602052604090205460ff16155b8015612ae157506001600160a01b03831660009081526004602052604090205460ff16155b8015612af857506001600160a01b03821661dead14155b8015612b0c57506001600160a01b03821615155b8015612b2157506001600160a01b0383163014155b9392505050565b600e805460ff191660011790556040805160808101825260095461ffff808216835262010000820481166020840152600160201b8204811693830193909352600160301b900490911660608201819052600003612b855750612f61565b306000908152600360209081526040808320600a546201000090046001600160a01b0316845290915290205460001914612bea57306000908152600360209081526040808320600a546201000090046001600160a01b03168452909152902060001990555b60006002826060015161ffff16836000015161ffff1685612c0b91906136b4565b612c159190613692565b612c1f9190613692565b90506000612c2d828561367f565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110612c6757612c676137be565b60200260200101906001600160a01b031690816001600160a01b031681525050600a60029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe91906138f2565b81600181518110612d1157612d116137be565b6001600160a01b039283166020918202929092010152600a5460405163791ac94760e01b8152620100009091049091169063791ac94790612d5f908590600090869030904290600401613970565b600060405180830381600087803b158015612d7957600080fd5b505af1925050508015612d8a575060015b612d975750505050612f61565b47600083612da586846136b4565b612daf9190613692565b90508415612e9657600a54600c5460405163f305d71960e01b81523060048201526024810188905260006044820181905260648201526001600160a01b0391821660848201524260a482015262010000909204169063f305d71990839060c40160606040518083038185885af193505050508015612e4a575060408051601f3d908101601f19168201909252612e47918101906139e1565b60015b612e5957505050505050612f61565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b612ea0818361367f565b9150856000015186606001818151612eb89190613a0f565b61ffff9081169091526060880151602089015160009350839291821691612ee09116866136b4565b612eea9190613692565b602089015190915061ffff1615612f5857600d546040516001600160a01b039091169061d6d89083906000818181858888f193505050503d8060008114612f4d576040519150601f19603f3d011682016040523d82523d6000602084013e612f52565b606091505b50909250505b50505050505050505b50600e805460ff19169055565b6040805160808101825260095461ffff808216835262010000820481166020840152600160201b82048116938301849052600160301b90910416606082018190526000928391612fbd9161389a565b61ffff16905060008615612fd8575060085461ffff16613001565b8515612ff1575060085462010000900461ffff16613001565b50600854600160201b900461ffff165b80158061300c575081155b1561301c57849350505050610c23565b600061271061302b83886136b4565b6130359190613692565b9050600083856040015161ffff168361304e91906136b4565b6130589190613692565b90506000613066828461367f565b905080156130d357306000908152602081905260408120805483929061308d90849061395d565b909155505060405181815230906001600160a01b038d16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b81156131325781600760008282546130eb919061367f565b90915550506040518281526000906001600160a01b038d16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b61313c838961367f565b9b9a5050505050505050505050565b601554610100900460ff16156131af5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610b81565b6131b98282612a3f565b1580156131d35750600b546001600160a01b038281169116145b15611756576001600160a01b03821660009081526004602090815260408083208054600160ff1991821681179092556005845293829020805490941681179093556015805461010061ff00199182168117909255600e80549091169091179055519182527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579101611c9d565b600060208083528351808285015260005b8181101561328c57858101830151858201604001528201613270565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461219a57600080fd5b600080604083850312156132d557600080fd5b82356132e0816132ad565b946020939093013593505050565b60008060006060848603121561330357600080fd5b833561330e816132ad565b9250602084013561331e816132ad565b929592945050506040919091013590565b6000806040838503121561334257600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561339057613390613351565b604052919050565b600067ffffffffffffffff8211156133b2576133b2613351565b5060051b60200190565b600082601f8301126133cd57600080fd5b813560206133e26133dd83613398565b613367565b82815260059290921b8401810191818101908684111561340157600080fd5b8286015b8481101561341c5780358352918301918301613405565b509695505050505050565b6000806040838503121561343a57600080fd5b823567ffffffffffffffff8082111561345257600080fd5b818501915085601f83011261346657600080fd5b813560206134766133dd83613398565b82815260059290921b8401810191818101908984111561349557600080fd5b948201945b838610156134bc5785356134ad816132ad565b8252948201949082019061349a565b965050860135925050808211156134d257600080fd5b506134df858286016133bc565b9150509250929050565b803561ffff811681146134fb57600080fd5b919050565b60008060006060848603121561351557600080fd5b61351e846134e9565b925061352c602085016134e9565b915061353a604085016134e9565b90509250925092565b801515811461219a57600080fd5b6000806040838503121561356457600080fd5b823561356f816132ad565b9150602083013561357f81613543565b809150509250929050565b60006020828403121561359c57600080fd5b5035919050565b6000602082840312156135b557600080fd5b8135612b21816132ad565b600080604083850312156135d357600080fd5b823561356f81613543565b600080604083850312156135f157600080fd5b82356135fc816132ad565b9150602083013561357f816132ad565b6000806000806080858703121561362257600080fd5b5050823594602084013594506040840135936060013592509050565b60208082526011908201527021b0b63632b9101e979e9037bbb732b91760791b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610b4b57610b4b613669565b6000826136af57634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610b4b57610b4b613669565b600181815b808511156137065781600019048211156136ec576136ec613669565b808516156136f957918102915b93841c93908002906136d0565b509250929050565b60008261371d57506001610b4b565b8161372a57506000610b4b565b8160018114613740576002811461374a57613766565b6001915050610b4b565b60ff84111561375b5761375b613669565b50506001821b610b4b565b5060208310610133831016604e8410600b8410161715613789575081810a610b4b565b61379383836136cb565b80600019048211156137a7576137a7613669565b029392505050565b6000612b2160ff84168361370e565b634e487b7160e01b600052603260045260246000fd5b600061ffff8083168181036137eb576137eb613669565b6001019392505050565b60208082526028908201527f43616e206f6e6c792062652063616c6c6564206279206f726967696e616c206460408201526732b83637bcb2b91760c11b606082015260800190565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b61ffff8181168382160190808211156138b5576138b5613669565b5092915050565b6000602082840312156138ce57600080fd5b5051919050565b6000602082840312156138e757600080fd5b8151612b2181613543565b60006020828403121561390457600080fd5b8151612b21816132ad565b6020808252602e908201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660408201526d103a37ba30b61039bab838363c9760911b606082015260800190565b80820180821115610b4b57610b4b613669565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156139c05784516001600160a01b03168352938301939183019160010161399b565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156139f657600080fd5b8351925060208401519150604084015190509250925092565b61ffff8281168282160390808211156138b5576138b561366956fea264697066735822122098db8f1f1023ed7a1ad14f6b6e47f863508cccbd03d094231cea18cb37c7cf4864736f6c63430008130033

Deployed Bytecode

0x6080604052600436106103855760003560e01c8063590ffdce116101d1578063aa22b17211610102578063cf847706116100a0578063ee5d9c2d1161006f578063ee5d9c2d14610ac6578063f94aa1b414610adb578063fb78680d14610afb578063fdb78c0e14610b1b57600080fd5b8063cf847706146109d9578063dd62ed3e14610a40578063eafb5a3c14610a86578063eb50e70e14610aa657600080fd5b8063b3ab15fb116100dc578063b3ab15fb1461097f578063b3d514fb14610588578063b7df8b361461099f578063bfc2fc35146109b957600080fd5b8063aa22b1721461093f578063ab558e4d1461095f578063b1b08f711461058857600080fd5b806380c581d11161016f5780638a63bd9b116101495780638a63bd9b146108c85780638a8c523c146108dd57806395d89b41146108f2578063a9059cbb1461091f57600080fd5b806380c581d11461086457806381cf58a914610884578063893d20e8146108a457600080fd5b806370a08231116101ab57806370a08231146107fb578063715018a61461081b578063719e31221461083057806378648edf1461084f57600080fd5b8063590ffdce146107825780635cce86cd146107a257806365acb9a9146107db57600080fd5b80632e8fa821116102b65780634ada218b116102545780634fbee193116102235780634fbee193146106ea57806350a8e01614610723578063525fa81f14610742578063570ca7351461076257600080fd5b80634ada218b146106705780634bbb93eb1461068a5780634e718e48146106aa5780634fb2e45d146106ca57600080fd5b806332cde6641161029057806332cde664146105fb57806336fddb041461061b57806339a059021461063b578063452ed4f11461065057600080fd5b80632e8fa8211461059e578063313ce567146105b45780633221c93f146105db57600080fd5b8063135ae1e71161032357806326003957116102fd57806326003957146105325780632610eaca1461055257806328577751146105725780632b28fc7a1461058857600080fd5b8063135ae1e7146104e657806318160ddd146104fd57806323b872dd1461051257600080fd5b806306fdde031161035f57806306fdde031461043d5780630758d9241461047657806307dd79e01461049c578063095ea7b3146104c657600080fd5b806303fd2a45146103915780630445b667146103c4578063069d955f146103e857600080fd5b3661038c57005b600080fd5b34801561039d57600080fd5b506103a761dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103d057600080fd5b506103da600f5481565b6040519081526020016103bb565b3480156103f457600080fd5b506008546104189061ffff80821691620100008104821691600160201b9091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103bb565b34801561044957600080fd5b506040805180820190915260078152662232b2b83b99b160c91b60208201525b6040516103bb919061325f565b34801561048257600080fd5b50600a546103a7906201000090046001600160a01b031681565b3480156104a857600080fd5b50600a546104b69060ff1681565b60405190151581526020016103bb565b3480156104d257600080fd5b506104b66104e13660046132c2565b610b3a565b3480156104f257600080fd5b506104fb610b51565b005b34801561050957600080fd5b506103da610b9b565b34801561051e57600080fd5b506104b661052d3660046132ee565b610bb3565b34801561053e57600080fd5b506104fb61054d36600461332f565b610c2b565b34801561055e57600080fd5b506104fb61056d366004613427565b610d62565b34801561057e57600080fd5b506103da60125481565b34801561059457600080fd5b506103da61025881565b3480156105aa57600080fd5b506103da60105481565b3480156105c057600080fd5b506105c9610ee5565b60405160ff90911681526020016103bb565b3480156105e757600080fd5b50600c546103a7906001600160a01b031681565b34801561060757600080fd5b506104fb610616366004613500565b610efc565b34801561062757600080fd5b506104fb610636366004613551565b61102b565b34801561064757600080fd5b506104fb611086565b34801561065c57600080fd5b50600b546103a7906001600160a01b031681565b34801561067c57600080fd5b506015546104b69060ff1681565b34801561069657600080fd5b506103da6106a536600461358a565b6110cc565b3480156106b657600080fd5b506104fb6106c536600461358a565b6110fe565b3480156106d657600080fd5b506104fb6106e53660046135a3565b61117d565b3480156106f657600080fd5b506104b66107053660046135a3565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561072f57600080fd5b506015546104b690610100900460ff1681565b34801561074e57600080fd5b506104fb61075d3660046135a3565b6112c8565b34801561076e57600080fd5b506017546103a7906001600160a01b031681565b34801561078e57600080fd5b506104fb61079d366004613551565b61136a565b3480156107ae57600080fd5b506104b66107bd3660046135a3565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156107e757600080fd5b506104fb6107f636600461332f565b6113c5565b34801561080757600080fd5b506103da6108163660046135a3565b611516565b34801561082757600080fd5b506104fb611531565b34801561083c57600080fd5b50600a546104b690610100900460ff1681565b34801561085b57600080fd5b506104fb6115d3565b34801561087057600080fd5b506104fb61087f366004613551565b611612565b34801561089057600080fd5b506016546103a7906001600160a01b031681565b3480156108b057600080fd5b506015546201000090046001600160a01b03166103a7565b3480156108d457600080fd5b506104b661175a565b3480156108e957600080fd5b506104fb6117b3565b3480156108fe57600080fd5b50604080518082019091526004815263222b99a160e11b6020820152610469565b34801561092b57600080fd5b506104b661093a3660046132c2565b6118fe565b34801561094b57600080fd5b506104fb61095a366004613500565b611915565b34801561096b57600080fd5b506104fb61097a3660046135a3565b611a4f565b34801561098b57600080fd5b506104fb61099a3660046135a3565b611b6e565b3480156109ab57600080fd5b506011546104b69060ff1681565b3480156109c557600080fd5b506104fb6109d43660046135c0565b611c1a565b3480156109e557600080fd5b50600954610a129061ffff80821691620100008104821691600160201b8204811691600160301b90041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103bb565b348015610a4c57600080fd5b506103da610a5b3660046135de565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610a9257600080fd5b506104fb610aa13660046135a3565b611ca9565b348015610ab257600080fd5b506104fb610ac13660046135a3565b612087565b348015610ad257600080fd5b506104fb612129565b348015610ae757600080fd5b50600d546103a7906001600160a01b031681565b348015610b0757600080fd5b506104fb610b1636600461360c565b61219d565b348015610b2757600080fd5b50600e546104b690610100900460ff1681565b6000610b47338484612352565b5060015b92915050565b6015546201000090046001600160a01b03163314610b8a5760405162461bcd60e51b8152600401610b819061363e565b60405180910390fd5b600a805461ff001916610100179055565b6000600754600003610bac57600080fd5b5060075490565b6001600160a01b038316600090815260036020908152604080832033845290915281205460001914610c18576001600160a01b038416600090815260036020908152604080832033845290915281208054849290610c1290849061367f565b90915550505b610c2384848461244b565b949350505050565b6015546201000090046001600160a01b03163314610c5b5760405162461bcd60e51b8152600401610b819061363e565b600a54610100900460ff1615610cb35760405162461bcd60e51b815260206004820152601760248201527f4d61782077616c6c65742069732064697361626c65642e0000000000000000006044820152606401610b81565b6064600754610cc29190613692565b8183600754610cd191906136b4565b610cdb9190613692565b1015610d425760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201526f37b3103a37ba30b61039bab838363c9760811b6064820152608401610b81565b8082600754610d5191906136b4565b610d5b9190613692565b6014555050565b6015546201000090046001600160a01b03163314610d925760405162461bcd60e51b8152600401610b819061363e565b8051825114610ddb5760405162461bcd60e51b81526020600482015260156024820152742632b733ba3439903237903737ba1036b0ba31b41760591b6044820152606401610b81565b60005b82518161ffff161015610ee057610df76012600a6137af565b828261ffff1681518110610e0d57610e0d6137be565b6020026020010151610e1f91906136b4565b610e2833611516565b1015610e6b5760405162461bcd60e51b81526020600482015260126024820152712737ba1032b737bab3b4103a37b5b2b7399760711b6044820152606401610b81565b610ecd33848361ffff1681518110610e8557610e856137be565b60200260200101516012600a610e9b91906137af565b858561ffff1681518110610eb157610eb16137be565b6020026020010151610ec391906136b4565b600080600161287c565b5080610ed8816137d4565b915050610dde565b505050565b6000600754600003610ef657600080fd5b50601290565b6015546201000090046001600160a01b03163314610f2c5760405162461bcd60e51b8152600401610b819061363e565b600a5460ff1615610f735760405162461bcd60e51b81526020600482015260116024820152702a30bc32b99030b932903637b1b5b2b21760791b6044820152606401610b81565b6102588361ffff1611158015610f8f57506102588261ffff1611155b8015610fa157506102588161ffff1611155b610fed5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610b81565b6008805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff000000001916600160201b9190931602919091179055565b6015546201000090046001600160a01b0316331461105b5760405162461bcd60e51b8152600401610b819061363e565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6016546001600160a01b031633146110b05760405162461bcd60e51b8152600401610b81906137f5565b6110ba6000611b6e565b601680546001600160a01b0319169055565b600b546000906127109083906110ea906001600160a01b0316611516565b6110f491906136b4565b610b4b9190613692565b6015546201000090046001600160a01b0316331461112e5760405162461bcd60e51b8152600401610b819061363e565b60968111156111785760405162461bcd60e51b815260206004820152601660248201527521b0b73737ba1039b2ba1030b137bb329018971a929760511b6044820152606401610b81565b601255565b6015546201000090046001600160a01b031633146111ad5760405162461bcd60e51b8152600401610b819061363e565b6001600160a01b0381166111d35760405162461bcd60e51b8152600401610b819061383d565b61deac196001600160a01b038216016111fe5760405162461bcd60e51b8152600401610b819061383d565b60155461121b906201000090046001600160a01b0316600061136a565b61122681600161136a565b601554600090611244906201000090046001600160a01b0316611516565b111561126c5760155461126a906201000090046001600160a01b031682610ec382611516565b505b601580546001600160a01b038381166201000081810262010000600160b01b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6015546201000090046001600160a01b031633146112f85760405162461bcd60e51b8152600401610b819061363e565b6001600160a01b0381166113485760405162461bcd60e51b815260206004820152601760248201527621b0b73737ba103132903d32b9379030b2323932b9b99760491b6044820152606401610b81565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6015546201000090046001600160a01b0316331461139a5760405162461bcd60e51b8152600401610b819061363e565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6015546201000090046001600160a01b031633146113f55760405162461bcd60e51b8152600401610b819061363e565b600a54610100900460ff161561144d5760405162461bcd60e51b815260206004820152601760248201527f4d617820616d6f756e742069732064697361626c65642e0000000000000000006044820152606401610b81565b6103e8600754600561145f91906136b4565b6114699190613692565b818360075461147891906136b4565b6114829190613692565b10156114f65760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3525206f6620746f74616c20737570706c792e0000000000000000006064820152608401610b81565b808260075461150591906136b4565b61150f9190613692565b6013555050565b6001600160a01b031660009081526020819052604090205490565b6015546201000090046001600160a01b031633146115615760405162461bcd60e51b8152600401610b819061363e565b60155461157e906201000090046001600160a01b0316600061136a565b6015805462010000600160b01b03198116909155604051620100009091046001600160a01b03169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6015546201000090046001600160a01b031633146116035760405162461bcd60e51b8152600401610b819061363e565b600a805460ff19166001179055565b6015546201000090046001600160a01b031633146116425760405162461bcd60e51b8152600401610b819061363e565b8061166957506001600160a01b03166000908152600160205260409020805460ff19169055565b600254156116c2576203f48060025442611683919061367f565b116116c25760405162461bcd60e51b815260206004820152600f60248201526e19902230bc9031b7b7b63237bbb71760891b6044820152606401610b81565b6001600160a01b03821660009081526001602052604090205460ff161561172b5760405162461bcd60e51b815260206004820152601b60248201527f5061697220616c726561647920616464656420746f206c6973742e00000000006044820152606401610b81565b6001600160a01b0382166000908152600160208190526040909120805460ff19169091179055426002555b5050565b6015546000906201000090046001600160a01b0316331461178d5760405162461bcd60e51b8152600401610b819061363e565b600a546117ad9030906201000090046001600160a01b0316600019612352565b50600190565b6015546201000090046001600160a01b031633146117e35760405162461bcd60e51b8152600401610b819061363e565b60155460ff16156118365760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610b81565b601554610100900460ff1661188d5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610b81565b6015805460ff19166001179055600b54612710906118b3906001600160a01b0316611516565b6118be90600a6136b4565b6118c89190613692565b600f55600b54612710906118e4906001600160a01b0316611516565b6118ef90601e6136b4565b6118f99190613692565b601055565b600061190b33848461244b565b5060019392505050565b6015546201000090046001600160a01b031633146119455760405162461bcd60e51b8152600401610b819061363e565b6009805461ffff838116600160201b0265ffff0000000019868316620100000263ffffffff19909416928816929092179290921716179055611987828461389a565b6009805467ffff0000000000001916600160301b61ffff938416021790556008546000916119be916201000081048216911661389a565b60095461ffff918216925082916119e791600160201b8104821691600160301b9091041661389a565b61ffff161115611a495760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201526636103332b2b99760c91b6064820152608401610b81565b50505050565b6015546201000090046001600160a01b03163314611a7f5760405162461bcd60e51b8152600401610b819061363e565b6015546040516370a0823160e01b815230600482015282916001600160a01b038084169263a9059cbb926201000090049091169083906370a0823190602401602060405180830381865afa158015611adb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aff91906138bc565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611b4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee091906138d5565b6016546001600160a01b03163314611b985760405162461bcd60e51b8152600401610b81906137f5565b6017546001600160a01b03168015611bd5576001600160a01b0381166000908152600460205260408120805460ff19169055611bd590829061136a565b601780546001600160a01b0319166001600160a01b0384169081179091556000908152600460205260409020805460ff1916600190811790915561175690839061136a565b6015546201000090046001600160a01b03163314611c4a5760405162461bcd60e51b8152600401610b819061363e565b600e805461ff001916610100841515908102919091179091556011805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b6015546201000090046001600160a01b03163314611cd95760405162461bcd60e51b8152600401610b819061363e565b601554610100900460ff1615611d315760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610b81565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d9a91906138f2565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611de7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0b91906138f2565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611e56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7a91906138f2565b600b546001600160a01b039081166000908152600160205260409020805460ff19169055909150811661201057816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ee5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0991906138f2565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7a91906138f2565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611feb91906138f2565b600b80546001600160a01b0319166001600160a01b039290921691909117905561202c565b600b80546001600160a01b0319166001600160a01b0383161790555b600a805462010000600160b01b031916620100006001600160a01b038581168202929092178355600b5482166000908152600160208190526040909120805460ff191690911790559154610ee0923092910416600019612352565b6015546201000090046001600160a01b031633146120b75760405162461bcd60e51b8152600401610b819061363e565b6001600160a01b0381166121075760405162461bcd60e51b815260206004820152601760248201527621b0b73737ba103132903d32b9379030b2323932b9b99760491b6044820152606401610b81565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6015546201000090046001600160a01b031633146121595760405162461bcd60e51b8152600401610b819061363e565b6015546040516001600160a01b036201000090920491909116904780156108fc02916000818181858888f1935050505015801561219a573d6000803e3d6000fd5b50565b6015546201000090046001600160a01b031633146121cd5760405162461bcd60e51b8152600401610b819061363e565b82846007546121dc91906136b4565b6121e69190613692565b600f5560075481906121f99084906136b4565b6122039190613692565b6010819055600f5411156122635760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610b81565b600b546127109061227c906001600160a01b0316611516565b6122879060966136b4565b6122919190613692565b60105411156122ee5760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201526228249760e91b6064820152608401610b81565b620f42406007546122ff9190613692565b60105410156123205760405162461bcd60e51b8152600401610b819061390f565b620f42406007546123319190613692565b600f541015611a495760405162461bcd60e51b8152600401610b819061390f565b6001600160a01b03831661239e5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610b81565b6001600160a01b0382166123ea5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610b81565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166124b15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b81565b6001600160a01b0383166125135760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b81565b600082116125755760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b81565b6001600160a01b0384166000908152600160205260408120548190819060ff16156125a357600192506125d1565b6001600160a01b03861660009081526001602052604090205460ff16156125cd57600191506125d1565b5060015b6125db8787612a3f565b156127d35760155460ff166126325760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610b81565b828061263b5750815b156126fe576001600160a01b03871660009081526006602052604090205460ff1615801561268257506001600160a01b03861660009081526006602052604090205460ff16155b80156126965750600a54610100900460ff16155b156126fe576013548511156126fe5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610b81565b600a546001600160a01b03878116620100009092041614801590612720575081155b156127d3576001600160a01b03861660009081526006602052604090205460ff161580156127565750600a54610100900460ff16155b156127d3576014548561276888611516565b612772919061395d565b11156127d35760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610b81565b811561286357600e5460ff1661286357600e54610100900460ff16156128635760006127fe30611516565b9050600f5481106128615760105460115460ff161561284b57601254600b546127109190612834906001600160a01b0316611516565b61283e91906136b4565b6128489190613692565b90505b808210612856578091505b61285f82612b28565b505b505b61287187878786868661287c565b979650505050505050565b6001600160a01b03861660009081526005602052604081205460019060ff16806128be57506001600160a01b03871660009081526005602052604090205460ff165b156128c7575060005b6001600160a01b038816600090815260208190526040812080548892906128ef90849061367f565b909155506000905081612902578661290e565b61290e8987878a612f6e565b9050806000808a6001600160a01b03166001600160a01b031681526020019081526020016000206000828254612944919061395d565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161299091815260200190565b60405180910390a3601554610100900460ff16612a30576129b1898961314b565b601554610100900460ff161580156129ce57506129ce8989612a3f565b80156129d8575083155b15612a305760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401610b81565b50600198975050505050505050565b6015546000906001600160a01b03848116620100009092041614801590612a7a57506015546001600160a01b03838116620100009092041614155b8015612a9757506015546201000090046001600160a01b03163214155b8015612abc57506001600160a01b03821660009081526004602052604090205460ff16155b8015612ae157506001600160a01b03831660009081526004602052604090205460ff16155b8015612af857506001600160a01b03821661dead14155b8015612b0c57506001600160a01b03821615155b8015612b2157506001600160a01b0383163014155b9392505050565b600e805460ff191660011790556040805160808101825260095461ffff808216835262010000820481166020840152600160201b8204811693830193909352600160301b900490911660608201819052600003612b855750612f61565b306000908152600360209081526040808320600a546201000090046001600160a01b0316845290915290205460001914612bea57306000908152600360209081526040808320600a546201000090046001600160a01b03168452909152902060001990555b60006002826060015161ffff16836000015161ffff1685612c0b91906136b4565b612c159190613692565b612c1f9190613692565b90506000612c2d828561367f565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110612c6757612c676137be565b60200260200101906001600160a01b031690816001600160a01b031681525050600a60029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe91906138f2565b81600181518110612d1157612d116137be565b6001600160a01b039283166020918202929092010152600a5460405163791ac94760e01b8152620100009091049091169063791ac94790612d5f908590600090869030904290600401613970565b600060405180830381600087803b158015612d7957600080fd5b505af1925050508015612d8a575060015b612d975750505050612f61565b47600083612da586846136b4565b612daf9190613692565b90508415612e9657600a54600c5460405163f305d71960e01b81523060048201526024810188905260006044820181905260648201526001600160a01b0391821660848201524260a482015262010000909204169063f305d71990839060c40160606040518083038185885af193505050508015612e4a575060408051601f3d908101601f19168201909252612e47918101906139e1565b60015b612e5957505050505050612f61565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b612ea0818361367f565b9150856000015186606001818151612eb89190613a0f565b61ffff9081169091526060880151602089015160009350839291821691612ee09116866136b4565b612eea9190613692565b602089015190915061ffff1615612f5857600d546040516001600160a01b039091169061d6d89083906000818181858888f193505050503d8060008114612f4d576040519150601f19603f3d011682016040523d82523d6000602084013e612f52565b606091505b50909250505b50505050505050505b50600e805460ff19169055565b6040805160808101825260095461ffff808216835262010000820481166020840152600160201b82048116938301849052600160301b90910416606082018190526000928391612fbd9161389a565b61ffff16905060008615612fd8575060085461ffff16613001565b8515612ff1575060085462010000900461ffff16613001565b50600854600160201b900461ffff165b80158061300c575081155b1561301c57849350505050610c23565b600061271061302b83886136b4565b6130359190613692565b9050600083856040015161ffff168361304e91906136b4565b6130589190613692565b90506000613066828461367f565b905080156130d357306000908152602081905260408120805483929061308d90849061395d565b909155505060405181815230906001600160a01b038d16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b81156131325781600760008282546130eb919061367f565b90915550506040518281526000906001600160a01b038d16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b61313c838961367f565b9b9a5050505050505050505050565b601554610100900460ff16156131af5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610b81565b6131b98282612a3f565b1580156131d35750600b546001600160a01b038281169116145b15611756576001600160a01b03821660009081526004602090815260408083208054600160ff1991821681179092556005845293829020805490941681179093556015805461010061ff00199182168117909255600e80549091169091179055519182527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579101611c9d565b600060208083528351808285015260005b8181101561328c57858101830151858201604001528201613270565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461219a57600080fd5b600080604083850312156132d557600080fd5b82356132e0816132ad565b946020939093013593505050565b60008060006060848603121561330357600080fd5b833561330e816132ad565b9250602084013561331e816132ad565b929592945050506040919091013590565b6000806040838503121561334257600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561339057613390613351565b604052919050565b600067ffffffffffffffff8211156133b2576133b2613351565b5060051b60200190565b600082601f8301126133cd57600080fd5b813560206133e26133dd83613398565b613367565b82815260059290921b8401810191818101908684111561340157600080fd5b8286015b8481101561341c5780358352918301918301613405565b509695505050505050565b6000806040838503121561343a57600080fd5b823567ffffffffffffffff8082111561345257600080fd5b818501915085601f83011261346657600080fd5b813560206134766133dd83613398565b82815260059290921b8401810191818101908984111561349557600080fd5b948201945b838610156134bc5785356134ad816132ad565b8252948201949082019061349a565b965050860135925050808211156134d257600080fd5b506134df858286016133bc565b9150509250929050565b803561ffff811681146134fb57600080fd5b919050565b60008060006060848603121561351557600080fd5b61351e846134e9565b925061352c602085016134e9565b915061353a604085016134e9565b90509250925092565b801515811461219a57600080fd5b6000806040838503121561356457600080fd5b823561356f816132ad565b9150602083013561357f81613543565b809150509250929050565b60006020828403121561359c57600080fd5b5035919050565b6000602082840312156135b557600080fd5b8135612b21816132ad565b600080604083850312156135d357600080fd5b823561356f81613543565b600080604083850312156135f157600080fd5b82356135fc816132ad565b9150602083013561357f816132ad565b6000806000806080858703121561362257600080fd5b5050823594602084013594506040840135936060013592509050565b60208082526011908201527021b0b63632b9101e979e9037bbb732b91760791b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610b4b57610b4b613669565b6000826136af57634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610b4b57610b4b613669565b600181815b808511156137065781600019048211156136ec576136ec613669565b808516156136f957918102915b93841c93908002906136d0565b509250929050565b60008261371d57506001610b4b565b8161372a57506000610b4b565b8160018114613740576002811461374a57613766565b6001915050610b4b565b60ff84111561375b5761375b613669565b50506001821b610b4b565b5060208310610133831016604e8410600b8410161715613789575081810a610b4b565b61379383836136cb565b80600019048211156137a7576137a7613669565b029392505050565b6000612b2160ff84168361370e565b634e487b7160e01b600052603260045260246000fd5b600061ffff8083168181036137eb576137eb613669565b6001019392505050565b60208082526028908201527f43616e206f6e6c792062652063616c6c6564206279206f726967696e616c206460408201526732b83637bcb2b91760c11b606082015260800190565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b61ffff8181168382160190808211156138b5576138b5613669565b5092915050565b6000602082840312156138ce57600080fd5b5051919050565b6000602082840312156138e757600080fd5b8151612b2181613543565b60006020828403121561390457600080fd5b8151612b21816132ad565b6020808252602e908201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660408201526d103a37ba30b61039bab838363c9760911b606082015260800190565b80820180821115610b4b57610b4b613669565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156139c05784516001600160a01b03168352938301939183019160010161399b565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156139f657600080fd5b8351925060208401519150604084015190509250925092565b61ffff8281168282160390808211156138b5576138b561366956fea264697066735822122098db8f1f1023ed7a1ad14f6b6e47f863508cccbd03d094231cea18cb37c7cf4864736f6c63430008130033

Deployed Bytecode Sourcemap

5371:22236:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6853:73;;;;;;;;;;;;6884:42;6853:73;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;6853:73:0;;;;;;;;7219:28;;;;;;;;;;;;;;;;;;;368:25:1;;;356:2;341:18;7219:28:0;222:177:1;6295:75:0;;;;;;;;;;-1:-1:-1;6295:75:0;;;;;;;;;;;;;;;-1:-1:-1;;;6295:75:0;;;;;;;;;;610:6:1;643:15;;;625:34;;695:15;;;690:2;675:18;;668:43;747:15;;727:18;;;720:43;;;;588:2;573:18;6295:75:0;404:365:1;11335:94:0;;;;;;;;;;-1:-1:-1;11416:5:0;;;;;;;;;;;;-1:-1:-1;;;11416:5:0;;;;11335:94;;;;;;;:::i;6754:26::-;;;;;;;;;;-1:-1:-1;6754:26:0;;;;;;;-1:-1:-1;;;;;6754:26:0;;;6687;;;;;;;;;;-1:-1:-1;6687:26:0;;;;;;;;;;;1717:14:1;;1710:22;1692:41;;1680:2;1665:18;6687:26:0;1552:187:1;12064:193:0;;;;;;;;;;-1:-1:-1;12064:193:0;;;;;:::i;:::-;;:::i;15180:78::-;;;;;;;;;;;;;:::i;:::-;;10896:160;;;;;;;;;;;;;:::i;12798:338::-;;;;;;;;;;-1:-1:-1;12798:338:0;;;;;:::i;:::-;;:::i;17122:383::-;;;;;;;;;;-1:-1:-1;17122:383:0;;;;;:::i;:::-;;:::i;25045:642::-;;;;;;;;;;-1:-1:-1;25045:642:0;;;;;:::i;:::-;;:::i;7327:33::-;;;;;;;;;;;;;;;;6540:41;;;;;;;;;;;;6578:3;6540:41;;7254:25;;;;;;;;;;;;;;;;11064:157;;;;;;;;;;;;;:::i;:::-;;;5573:4:1;5561:17;;;5543:36;;5531:2;5516:18;11064:157:0;5401:184:1;6815:31:0;;;;;;;;;;-1:-1:-1;6815:31:0;;;;-1:-1:-1;;;;;6815:31:0;;;15266:507;;;;;;;;;;-1:-1:-1;15266:507:0;;;;;:::i;:::-;;:::i;14617:163::-;;;;;;;;;;-1:-1:-1;14617:163:0;;;;;:::i;:::-;;:::i;10630:258::-;;;;;;;;;;;;;:::i;6787:21::-;;;;;;;;;;-1:-1:-1;6787:21:0;;;;-1:-1:-1;;;;;6787:21:0;;;7495:34;;;;;;;;;;-1:-1:-1;7495:34:0;;;;;;;;17513:222;;;;;;;;;;-1:-1:-1;17513:222:0;;;;;:::i;:::-;;:::i;18641:240::-;;;;;;;;;;-1:-1:-1;18641:240:0;;;;;:::i;:::-;;:::i;8973:819::-;;;;;;;;;;-1:-1:-1;8973:819:0;;;;;:::i;:::-;;:::i;14788:128::-;;;;;;;;;;-1:-1:-1;14788:128:0;;;;;:::i;:::-;-1:-1:-1;;;;;14880:28:0;14856:4;14880:28;;;:19;:28;;;;;;;;;14788:128;7536:36;;;;;;;;;;-1:-1:-1;7536:36:0;;;;;;;;;;;16497:208;;;;;;;;;;-1:-1:-1;16497:208:0;;;;;:::i;:::-;;:::i;10071:23::-;;;;;;;;;;-1:-1:-1;10071:23:0;;;;-1:-1:-1;;;;;10071:23:0;;;14924:157;;;;;;;;;;-1:-1:-1;14924:157:0;;;;;:::i;:::-;;:::i;14445:164::-;;;;;;;;;;-1:-1:-1;14445:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;14571:30:0;14542:4;14571:30;;;:21;:30;;;;;;;;;14445:164;16713:401;;;;;;;;;;-1:-1:-1;16713:401:0;;;;;:::i;:::-;;:::i;11734:117::-;;;;;;;;;;-1:-1:-1;11734:117:0;;;;;:::i;:::-;;:::i;9800:225::-;;;;;;;;;;;;;:::i;6720:23::-;;;;;;;;;;-1:-1:-1;6720:23:0;;;;;;;;;;;15089:80;;;;;;;;;;;;;:::i;13909:528::-;;;;;;;;;;-1:-1:-1;13909:528:0;;;;;:::i;:::-;;:::i;10033:31::-;;;;;;;;;;-1:-1:-1;10033:31:0;;;;-1:-1:-1;;;;;10033:31:0;;;11437:93;;;;;;;;;;-1:-1:-1;11516:6:0;;;;;-1:-1:-1;;;;;11516:6:0;11437:93;;12615:175;;;;;;;;;;;;;:::i;24409:324::-;;;;;;;;;;;;;:::i;11229:98::-;;;;;;;;;;-1:-1:-1;11312:7:0;;;;;;;;;;;;-1:-1:-1;;;11312:7:0;;;;11229:98;;11859:197;;;;;;;;;;-1:-1:-1;11859:197:0;;;;;:::i;:::-;;:::i;15781:499::-;;;;;;;;;;-1:-1:-1;15781:499:0;;;;;:::i;:::-;;:::i;24862:175::-;;;;;;;;;;-1:-1:-1;24862:175:0;;;;;:::i;:::-;;:::i;10103:519::-;;;;;;;;;;-1:-1:-1;10103:519:0;;;;;:::i;:::-;;:::i;7286:34::-;;;;;;;;;;-1:-1:-1;7286:34:0;;;;;;;;18889:288;;;;;;;;;;-1:-1:-1;18889:288:0;;;;;:::i;:::-;;:::i;6379:99::-;;;;;;;;;;-1:-1:-1;6379:99:0;;;;;;;;;;;;;;;-1:-1:-1;;;6379:99:0;;;;;-1:-1:-1;;;6379:99:0;;;;;;;;;7648:6:1;7681:15;;;7663:34;;7733:15;;;7728:2;7713:18;;7706:43;7785:15;;;7765:18;;;7758:43;;;;7837:15;;;7832:2;7817:18;;7810:43;7625:3;7610:19;6379:99:0;7415:444:1;11538:188:0;;;;;;;;;;-1:-1:-1;11538:188:0;;;;;:::i;:::-;-1:-1:-1;;;;;11690:19:0;;;11658:7;11690:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;11538:188;13144:757;;;;;;;;;;-1:-1:-1;13144:757:0;;;;;:::i;:::-;;:::i;16288:201::-;;;;;;;;;;-1:-1:-1;16288:201:0;;;;;:::i;:::-;;:::i;24741:113::-;;;;;;;;;;;;;:::i;7006:142::-;;;;;;;;;;-1:-1:-1;7006:142:0;;;;-1:-1:-1;;;;;7006:142:0;;;17743:890;;;;;;;;;;-1:-1:-1;17743:890:0;;;;;:::i;:::-;;:::i;7173:39::-;;;;;;;;;;-1:-1:-1;7173:39:0;;;;;;;;;;;12064:193;12168:4;12190:37;12199:10;12211:7;12220:6;12190:8;:37::i;:::-;-1:-1:-1;12245:4:0;12064:193;;;;;:::o;15180:78::-;8788:6;;;;;-1:-1:-1;;;;;8788:6:0;8798:10;8788:20;8780:50;;;;-1:-1:-1;;;8780:50:0;;;;;;;:::i;:::-;;;;;;;;;15232:11:::1;:18:::0;;-1:-1:-1;;15232:18:0::1;;;::::0;;15180:78::o;10896:160::-;10951:7;10975;;10986:1;10975:12;10971:53;;11004:8;;;10971:53;-1:-1:-1;11041:7:0;;;10896:160::o;12798:338::-;-1:-1:-1;;;;;12953:19:0;;12932:4;12953:19;;;:11;:19;;;;;;;;12973:10;12953:31;;;;;;;;-1:-1:-1;;12953:52:0;12949:126;;-1:-1:-1;;;;;13022:19:0;;;;;;:11;:19;;;;;;;;13042:10;13022:31;;;;;;;:41;;13057:6;;13022:19;:41;;13057:6;;13022:41;:::i;:::-;;;;-1:-1:-1;;12949:126:0;13092:36;13102:6;13110:9;13121:6;13092:9;:36::i;:::-;13085:43;12798:338;-1:-1:-1;;;;12798:338:0:o;17122:383::-;8788:6;;;;;-1:-1:-1;;;;;8788:6:0;8798:10;8788:20;8780:50;;;;-1:-1:-1;;;8780:50:0;;;;;;;:::i;:::-;17244:11:::1;::::0;::::1;::::0;::::1;;;17243:12;17235:48;;;::::0;-1:-1:-1;;;17235:48:0;;9944:2:1;17235:48:0::1;::::0;::::1;9926:21:1::0;9983:2;9963:18;;;9956:30;10022:25;10002:18;;;9995:53;10065:18;;17235:48:0::1;9742:347:1::0;17235:48:0::1;17360:3;17350:7;;:13;;;;:::i;:::-;17338:7;17327;17317;;:17;;;;:::i;:::-;17316:29;;;;:::i;:::-;:48;;17294:146;;;::::0;-1:-1:-1;;;17294:146:0;;10691:2:1;17294:146:0::1;::::0;::::1;10673:21:1::0;10730:2;10710:18;;;10703:30;10769:34;10749:18;;;10742:62;-1:-1:-1;;;10820:18:1;;;10813:46;10876:19;;17294:146:0::1;10489:412:1::0;17294:146:0::1;17490:7;17479;17469;;:17;;;;:::i;:::-;17468:29;;;;:::i;:::-;17451:14;:46:::0;-1:-1:-1;;17122:383:0:o;25045:642::-;8788:6;;;;;-1:-1:-1;;;;;8788:6:0;8798:10;8788:20;8780:50;;;;-1:-1:-1;;;8780:50:0;;;;;;;:::i;:::-;25205:7:::1;:14;25186:8;:15;:33;25178:67;;;::::0;-1:-1:-1;;;25178:67:0;;11108:2:1;25178:67:0::1;::::0;::::1;11090:21:1::0;11147:2;11127:18;;;11120:30;-1:-1:-1;;;11166:18:1;;;11159:51;11227:18;;25178:67:0::1;10906:345:1::0;25178:67:0::1;25261:8;25256:424;25279:8;:15;25275:1;:19;;;25256:424;;;25380:13;5981:2;25380;:13;:::i;:::-;25367:7;25375:1;25367:10;;;;;;;;;;:::i;:::-;;;;;;;:26;;;;:::i;:::-;25342:21;25352:10;25342:9;:21::i;:::-;:51;;25316:131;;;::::0;-1:-1:-1;;;25316:131:0;;12973:2:1;25316:131:0::1;::::0;::::1;12955:21:1::0;13012:2;12992:18;;;12985:30;-1:-1:-1;;;13031:18:1;;;13024:48;13089:18;;25316:131:0::1;12771:342:1::0;25316:131:0::1;25462:206;25497:10;25526:8;25535:1;25526:11;;;;;;;;;;:::i;:::-;;;;;;;5981:2;25569;:13;;;;:::i;:::-;25556:7;25564:1;25556:10;;;;;;;;;;:::i;:::-;;;;;;;:26;;;;:::i;:::-;25601:5;25625::::0;25649:4:::1;25462:16;:206::i;:::-;-1:-1:-1::0;25296:3:0;::::1;::::0;::::1;:::i;:::-;;;;25256:424;;;;25045:642:::0;;:::o;11064:157::-;11116:5;11138:7;;11149:1;11138:12;11134:53;;11167:8;;;11134:53;-1:-1:-1;5981:2:0;;11064:157::o;15266:507::-;8788:6;;;;;-1:-1:-1;;;;;8788:6:0;8798:10;8788:20;8780:50;;;;-1:-1:-1;;;8780:50:0;;;;;;;:::i;:::-;15408:14:::1;::::0;::::1;;15407:15;15399:45;;;::::0;-1:-1:-1;;;15399:45:0;;13522:2:1;15399:45:0::1;::::0;::::1;13504:21:1::0;13561:2;13541:18;;;13534:30;-1:-1:-1;;;13580:18:1;;;13573:47;13637:18;;15399:45:0::1;13320:341:1::0;15399:45:0::1;6578:3;15477:6;:21;;;;:65;;;;;6627:3;15519:7;:23;;;;15477:65;:117;;;;;6530:3;15563:11;:31;;;;15477:117;15455:190;;;::::0;-1:-1:-1;;;15455:190:0;;13868:2:1;15455:190:0::1;::::0;::::1;13850:21:1::0;13907:2;13887:18;;;13880:30;13946:25;13926:18;;;13919:53;13989:18;;15455:190:0::1;13666:347:1::0;15455:190:0::1;15656:9;:25:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;15692:27:0;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;15730:35:0::1;-1:-1:-1::0;;;15730:35:0;;;::::1;;::::0;;;::::1;::::0;;15266:507::o;14617:163::-;8788:6;;;;;-1:-1:-1;;;;;8788:6:0;8798:10;8788:20;8780:50;;;;-1:-1:-1;;;8780:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14732:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;14732:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14617:163::o;10630:258::-;10722:16;;-1:-1:-1;;;;;10722:16:0;10708:10;:30;10686:120;;;;-1:-1:-1;;;10686:120:0;;;;;;;:::i;:::-;10817:23;10837:1;10817:11;:23::i;:::-;10851:16;:29;;-1:-1:-1;;;;;;10851:29:0;;;10630:258::o;17513:222::-;17675:6;;17631:7;;6673:5;;17685:21;;17665:17;;-1:-1:-1;;;;;17675:6:0;17665:9;:17::i;:::-;:41;;;;:::i;:::-;17664:62;;;;:::i;18641:240::-;8788:6;;;;;-1:-1:-1;;;;;8788:6:0;8798:10;8788:20;8780:50;;;;-1:-1:-1;;;8780:50:0;;;;;;;:::i;:::-;18794:3:::1;18768:22;:29;;18760:64;;;::::0;-1:-1:-1;;;18760:64:0;;14629:2:1;18760:64:0::1;::::0;::::1;14611:21:1::0;14668:2;14648:18;;;14641:30;-1:-1:-1;;;14687:18:1;;;14680:52;14749:18;;18760:64:0::1;14427:346:1::0;18760:64:0::1;18835:13;:38:::0;18641:240::o;8973:819::-;8788:6;;;;;-1:-1:-1;;;;;8788:6:0;8798:10;8788:20;8780:50;;;;-1:-1:-1;;;8780:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9066:22:0;::::1;9044:133;;;;-1:-1:-1::0;;;9044:133:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;;9210:16:0;::::1;::::0;9188:127:::1;;;;-1:-1:-1::0;;;9188:127:0::1;;;;;;;:::i;:::-;9346:6;::::0;9326:34:::1;::::0;9346:6;;::::1;-1:-1:-1::0;;;;;9346:6:0::1;9354:5;9326:19;:34::i;:::-;9371:35;9391:8;9401:4;9371:19;:35::i;:::-;9433:6;::::0;9443:1:::1;::::0;9423:17:::1;::::0;9433:6;;::::1;-1:-1:-1::0;;;;;9433:6:0::1;9423:9;:17::i;:::-;:21;9419:244;;;9496:6;::::0;9461:190:::1;::::0;9496:6;;::::1;-1:-1:-1::0;;;;;9496:6:0::1;9521:8:::0;9548:17:::1;9496:6:::0;9548:9:::1;:17::i;9461:190::-;;9419:244;9694:6;::::0;;-1:-1:-1;;;;;9711:17:0;;::::1;9694:6:::0;9711:17;;::::1;-1:-1:-1::0;;;;;;9711:17:0;::::1;;::::0;;;9744:40:::1;::::0;9694:6;;;::::1;;::::0;;;9744:40:::1;::::0;9675:16:::1;::::0;9744:40:::1;9033:759;8973:819:::0;:::o;16497:208::-;8788:6;;;;;-1:-1:-1;;;;;8788:6:0;8798:10;8788:20;8780:50;;;;-1:-1:-1;;;8780:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16591:31:0;::::1;16583:67;;;::::0;-1:-1:-1;;;16583:67:0;;15410:2:1;16583:67:0::1;::::0;::::1;15392:21:1::0;15449:2;15429:18;;;15422:30;-1:-1:-1;;;15468:18:1;;;15461:53;15531:18;;16583:67:0::1;15208:347:1::0;16583:67:0::1;16661:16;:36:::0;;-1:-1:-1;;;;;;16661:36:0::1;-1:-1:-1::0;;;;;16661:36:0;;;::::1;::::0;;;::::1;::::0;;16497:208::o;14924:157::-;8788:6;;;;;-1:-1:-1;;;;;8788:6:0;8798:10;8788:20;8780:50;;;;-1:-1:-1;;;8780:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15035:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;15035:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14924:157::o;16713:401::-;8788:6;;;;;-1:-1:-1;;;;;8788:6:0;8798:10;8788:20;8780:50;;;;-1:-1:-1;;;8780:50:0;;;;;;;:::i;:::-;16841:11:::1;::::0;::::1;::::0;::::1;;;16840:12;16832:48;;;::::0;-1:-1:-1;;;16832:48:0;;15762:2:1;16832:48:0::1;::::0;::::1;15744:21:1::0;15801:2;15781:18;;;15774:30;15840:25;15820:18;;;15813:53;15883:18;;16832:48:0::1;15560:347:1::0;16832:48:0::1;16963:4;16948:7;;16958:1;16948:11;;;;:::i;:::-;16947:20;;;;:::i;:::-;16935:7;16924;16914;;:17;;;;:::i;:::-;16913:29;;;;:::i;:::-;:55;;16891:160;;;::::0;-1:-1:-1;;;16891:160:0;;16114:2:1;16891:160:0::1;::::0;::::1;16096:21:1::0;16153:2;16133:18;;;16126:30;16192:34;16172:18;;;16165:62;16263:25;16243:18;;;16236:53;16306:19;;16891:160:0::1;15912:419:1::0;16891:160:0::1;17099:7;17088;17078;;:17;;;;:::i;:::-;17077:29;;;;:::i;:::-;17062:12;:44:::0;-1:-1:-1;;16713:401:0:o;11734:117::-;-1:-1:-1;;;;;11827:16:0;11800:7;11827:16;;;;;;;;;;;;11734:117::o;9800:225::-;8788:6;;;;;-1:-1:-1;;;;;8788:6:0;8798:10;8788:20;8780:50;;;;-1:-1:-1;;;8780:50:0;;;;;;;:::i;:::-;9879:6:::1;::::0;9859:34:::1;::::0;9879:6;;::::1;-1:-1:-1::0;;;;;9879:6:0::1;9887:5;9859:19;:34::i;:::-;9923:6;::::0;;-1:-1:-1;;;;;;9940:19:0;::::1;::::0;;;9975:42:::1;::::0;9923:6;;;::::1;-1:-1:-1::0;;;;;9923:6:0::1;::::0;-1:-1:-1;;9923:6:0;;9975:42:::1;::::0;-1:-1:-1;;9975:42:0::1;9848:177;9800:225::o:0;15089:80::-;8788:6;;;;;-1:-1:-1;;;;;8788:6:0;8798:10;8788:20;8780:50;;;;-1:-1:-1;;;8780:50:0;;;;;;;:::i;:::-;15140:14:::1;:21:::0;;-1:-1:-1;;15140:21:0::1;15157:4;15140:21;::::0;;15089:80::o;13909:528::-;8788:6;;;;;-1:-1:-1;;;;;8788:6:0;8798:10;8788:20;8780:50;;;;-1:-1:-1;;;8780:50:0;;;;;;;:::i;:::-;13991:7:::1;13986:444;;-1:-1:-1::0;;;;;;14015:13:0::1;14031:5;14015:13:::0;;;:7:::1;:13;::::0;;;;:21;;-1:-1:-1;;14015:21:0::1;::::0;;13909:528::o;13986:444::-:1;14073:17;::::0;:22;14069:196:::1;;14184:6;14164:17;;14146:15;:35;;;;:::i;:::-;:44;14116:133;;;::::0;-1:-1:-1;;;14116:133:0;;16538:2:1;14116:133:0::1;::::0;::::1;16520:21:1::0;16577:2;16557:18;;;16550:30;-1:-1:-1;;;16596:18:1;;;16589:45;16651:18;;14116:133:0::1;16336:339:1::0;14116:133:0::1;-1:-1:-1::0;;;;;14288:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;;::::1;;14287:14;14279:54;;;::::0;-1:-1:-1;;;14279:54:0;;16882:2:1;14279:54:0::1;::::0;::::1;16864:21:1::0;16921:2;16901:18;;;16894:30;16960:29;16940:18;;;16933:57;17007:18;;14279:54:0::1;16680:351:1::0;14279:54:0::1;-1:-1:-1::0;;;;;14348:13:0;::::1;;::::0;;;14364:4:::1;14348:13;::::0;;;;;;;:20;;-1:-1:-1;;14348:20:0::1;::::0;;::::1;::::0;;14403:15:::1;14383:17;:35:::0;13986:444:::1;13909:528:::0;;:::o;12615:175::-;8788:6;;12681:4;;8788:6;;;-1:-1:-1;;;;;8788:6:0;8798:10;8788:20;8780:50;;;;-1:-1:-1;;;8780:50:0;;;;;;;:::i;:::-;12730:9:::1;::::0;12698:62:::1;::::0;12715:4:::1;::::0;12730:9;;::::1;-1:-1:-1::0;;;;;12730:9:0::1;-1:-1:-1::0;;12698:8:0::1;:62::i;:::-;-1:-1:-1::0;12778:4:0::1;12615:175:::0;:::o;24409:324::-;8788:6;;;;;-1:-1:-1;;;;;8788:6:0;8798:10;8788:20;8780:50;;;;-1:-1:-1;;;8780:50:0;;;;;;;:::i;:::-;24471:14:::1;::::0;::::1;;24470:15;24462:52;;;::::0;-1:-1:-1;;;24462:52:0;;17238:2:1;24462:52:0::1;::::0;::::1;17220:21:1::0;17277:2;17257:18;;;17250:30;17316:26;17296:18;;;17289:54;17360:18;;24462:52:0::1;17036:348:1::0;24462:52:0::1;24533:16;::::0;::::1;::::0;::::1;;;24525:53;;;::::0;-1:-1:-1;;;24525:53:0;;17591:2:1;24525:53:0::1;::::0;::::1;17573:21:1::0;17630:2;17610:18;;;17603:30;17669:26;17649:18;;;17642:54;17713:18;;24525:53:0::1;17389:348:1::0;24525:53:0::1;24589:14;:21:::0;;-1:-1:-1;;24589:21:0::1;24606:4;24589:21;::::0;;24648:6:::1;::::0;24664:5:::1;::::0;24638:17:::1;::::0;-1:-1:-1;;;;;24648:6:0::1;24638:9;:17::i;:::-;:22;::::0;24658:2:::1;24638:22;:::i;:::-;24637:32;;;;:::i;:::-;24621:13;:48:::0;24704:6:::1;::::0;24720:5:::1;::::0;24694:17:::1;::::0;-1:-1:-1;;;;;24704:6:0::1;24694:9;:17::i;:::-;:22;::::0;24714:2:::1;24694:22;:::i;:::-;24693:32;;;;:::i;:::-;24680:10;:45:::0;24409:324::o;11859:197::-;11964:4;11986:40;11996:10;12008:9;12019:6;11986:9;:40::i;:::-;-1:-1:-1;12044:4:0;;11859:197;-1:-1:-1;;;11859:197:0:o;15781:499::-;8788:6;;;;;-1:-1:-1;;;;;8788:6:0;8798:10;8788:20;8780:50;;;;-1:-1:-1;;;8780:50:0;;;;;;;:::i;:::-;15914:7:::1;:29:::0;;::::1;15996:19:::0;;::::1;-1:-1:-1::0;;;15996:19:0::1;-1:-1:-1::0;;15954:31:0;;::::1;::::0;::::1;-1:-1:-1::0;;15954:31:0;;;15914:29;;::::1;15954:31:::0;;;;;;;::::1;15996:19;;::::0;;16046:22:::1;15975:10:::0;15934:9;16046:22:::1;:::i;:::-;16026:7;:42:::0;;-1:-1:-1;;16026:42:0::1;-1:-1:-1::0;;;16026:42:0::1;::::0;;::::1;;;::::0;;16114:9:::1;:17:::0;-1:-1:-1;;16095:36:0::1;::::0;16114:17;;::::1;::::0;::::1;::::0;16095:16:::1;:36;:::i;:::-;16184:7;:12:::0;16079:52:::1;::::0;;::::1;::::0;-1:-1:-1;16079:52:0;;16164:32:::1;::::0;-1:-1:-1;;;16184:12:0;::::1;::::0;::::1;::::0;-1:-1:-1;;;16164:17:0;;::::1;;:32;:::i;:::-;:41;;;;16142:130;;;::::0;-1:-1:-1;;;16142:130:0;;18117:2:1;16142:130:0::1;::::0;::::1;18099:21:1::0;18156:2;18136:18;;;18129:30;18195:34;18175:18;;;18168:62;-1:-1:-1;;;18246:18:1;;;18239:37;18293:19;;16142:130:0::1;17915:403:1::0;16142:130:0::1;15903:377;15781:499:::0;;;:::o;24862:175::-;8788:6;;;;;-1:-1:-1;;;;;8788:6:0;8798:10;8788:20;8780:50;;;;-1:-1:-1;;;8780:50:0;;;;;;;:::i;:::-;24990:6:::1;::::0;24998:30:::1;::::0;-1:-1:-1;;;24998:30:0;;25022:4:::1;24998:30;::::0;::::1;160:51:1::0;24958:5:0;;-1:-1:-1;;;;;24975:14:0;;::::1;::::0;::::1;::::0;24990:6;;::::1;::::0;;::::1;::::0;24975:14;;24998:15:::1;::::0;133:18:1;;24998:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24975:54;::::0;-1:-1:-1;;;;;;24975:54:0::1;::::0;;;;;;-1:-1:-1;;;;;18704:32:1;;;24975:54:0::1;::::0;::::1;18686:51:1::0;18753:18;;;18746:34;18659:18;;24975:54:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;10103:519::-:0;10199:16;;-1:-1:-1;;;;;10199:16:0;10185:10;:30;10163:120;;;;-1:-1:-1;;;10163:120:0;;;;;;;:::i;:::-;10316:8;;-1:-1:-1;;;;;10316:8:0;10339:25;;10335:150;;-1:-1:-1;;;;;10381:30:0;;10414:5;10381:30;;;:17;:30;;;;;:38;;-1:-1:-1;;10381:38:0;;;10434:39;;10399:11;;10434:19;:39::i;:::-;10495:8;:22;;-1:-1:-1;;;;;;10495:22:0;-1:-1:-1;;;;;10495:22:0;;;;;;;;-1:-1:-1;10528:30:0;;;:17;:30;;;;;:37;;-1:-1:-1;;10528:37:0;-1:-1:-1;10528:37:0;;;;;;10576:38;;10495:22;;10576:19;:38::i;18889:288::-;8788:6;;;;;-1:-1:-1;;;;;8788:6:0;8798:10;8788:20;8780:50;;;;-1:-1:-1;;;8780:50:0;;;;;;;:::i;:::-;19023:19:::1;:33:::0;;-1:-1:-1;;19023:33:0::1;;::::0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;19067:22:::1;:47:::0;;-1:-1:-1;;19067:47:0::1;::::0;::::1;;;::::0;;19130:39:::1;::::0;1692:41:1;;;19130:39:0::1;::::0;1680:2:1;1665:18;19130:39:0::1;;;;;;;;18889:288:::0;;:::o;13144:757::-;8788:6;;;;;-1:-1:-1;;;;;8788:6:0;8798:10;8788:20;8780:50;;;;-1:-1:-1;;;8780:50:0;;;;;;;:::i;:::-;13224:16:::1;::::0;::::1;::::0;::::1;;;13223:17;13215:60;;;::::0;-1:-1:-1;;;13215:60:0;;19243:2:1;13215:60:0::1;::::0;::::1;19225:21:1::0;19282:2;19262:18;;;19255:30;19321:32;19301:18;;;19294:60;19371:18;;13215:60:0::1;19041:354:1::0;13215:60:0::1;13286:20;13319:9;13286:43;;13340:16;13370:10;-1:-1:-1::0;;;;;13370:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13359:40:0::1;;13422:4;13442:10;-1:-1:-1::0;;;;;13442:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13359:111;::::0;-1:-1:-1;;;;;;13359:111:0::1;::::0;;;;;;-1:-1:-1;;;;;19886:15:1;;;13359:111:0::1;::::0;::::1;19868:34:1::0;19938:15;;19918:18;;;19911:43;19803:18;;13359:111:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13489:6;::::0;-1:-1:-1;;;;;13489:6:0;;::::1;13499:5;13481:15:::0;;;:7:::1;:15;::::0;;;;:23;;-1:-1:-1;;13481:23:0::1;::::0;;13340:130;;-1:-1:-1;13519:22:0;::::1;13515:240;;13578:10;-1:-1:-1::0;;;;;13578:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13567:43:0::1;;13637:4;13661:10;-1:-1:-1::0;;;;;13661:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13567:126;::::0;-1:-1:-1;;;;;;13567:126:0::1;::::0;;;;;;-1:-1:-1;;;;;19886:15:1;;;13567:126:0::1;::::0;::::1;19868:34:1::0;19938:15;;19918:18;;;19911:43;19803:18;;13567:126:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13558:6;:135:::0;;-1:-1:-1;;;;;;13558:135:0::1;-1:-1:-1::0;;;;;13558:135:0;;;::::1;::::0;;;::::1;::::0;;13515:240:::1;;;13726:6;:17:::0;;-1:-1:-1;;;;;;13726:17:0::1;-1:-1:-1::0;;;;;13726:17:0;::::1;;::::0;;13515:240:::1;13765:9;:22:::0;;-1:-1:-1;;;;;;13765:22:0::1;::::0;-1:-1:-1;;;;;13765:22:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;13806:6:::1;::::0;;::::1;-1:-1:-1::0;13798:15:0;;;-1:-1:-1;13798:15:0::1;::::0;;;;;;;:22;;-1:-1:-1;;13798:22:0::1;::::0;;::::1;::::0;;13863:9;;13831:62:::1;::::0;13848:4:::1;::::0;13863:9;::::1;;-1:-1:-1::0;;13831:8:0::1;:62::i;16288:201::-:0;8788:6;;;;;-1:-1:-1;;;;;8788:6:0;8798:10;8788:20;8780:50;;;;-1:-1:-1;;;8780:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16374:24:0;::::1;16366:60;;;::::0;-1:-1:-1;;;16366:60:0;;15410:2:1;16366:60:0::1;::::0;::::1;15392:21:1::0;15449:2;15429:18;;;15422:30;-1:-1:-1;;;15468:18:1;;;15461:53;15531:18;;16366:60:0::1;15208:347:1::0;16366:60:0::1;16437:11;:44:::0;;-1:-1:-1;;;;;;16437:44:0::1;-1:-1:-1::0;;;;;16437:44:0;;;::::1;::::0;;;::::1;::::0;;16288:201::o;24741:113::-;8788:6;;;;;-1:-1:-1;;;;;8788:6:0;8798:10;8788:20;8780:50;;;;-1:-1:-1;;;8780:50:0;;;;;;;:::i;:::-;24807:6:::1;::::0;24799:47:::1;::::0;-1:-1:-1;;;;;24807:6:0;;;::::1;::::0;;;::::1;::::0;24824:21:::1;24799:47:::0;::::1;;;::::0;::::1;::::0;;;24824:21;24807:6;24799:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;24741:113::o:0;17743:890::-;8788:6;;;;;-1:-1:-1;;;;;8788:6:0;8798:10;8788:20;8780:50;;;;-1:-1:-1;;;8780:50:0;;;;;;;:::i;:::-;17986:16:::1;17966;17956:7;;:26;;;;:::i;:::-;17955:47;;;;:::i;:::-;17939:13;:63:::0;18027:7:::1;::::0;18054:13;;18027:23:::1;::::0;18037:13;;18027:23:::1;:::i;:::-;18026:41;;;;:::i;:::-;18013:10;:54:::0;;;18100:13:::1;::::0;:27:::1;;18078:110;;;::::0;-1:-1:-1;;;18078:110:0;;20167:2:1;18078:110:0::1;::::0;::::1;20149:21:1::0;20206:2;20186:18;;;20179:30;20245:34;20225:18;;;20218:62;-1:-1:-1;;;20296:18:1;;;20289:31;20337:19;;18078:110:0::1;19965:397:1::0;18078:110:0::1;18246:6;::::0;6673:5:::1;::::0;18236:17:::1;::::0;-1:-1:-1;;;;;18246:6:0::1;18236:9;:17::i;:::-;:23;::::0;18256:3:::1;18236:23;:::i;:::-;18235:44;;;;:::i;:::-;18221:10;;:58;;18199:143;;;::::0;-1:-1:-1;;;18199:143:0;;20569:2:1;18199:143:0::1;::::0;::::1;20551:21:1::0;20608:2;20588:18;;;20581:30;20647:34;20627:18;;;20620:62;-1:-1:-1;;;20698:18:1;;;20691:33;20741:19;;18199:143:0::1;20367:399:1::0;18199:143:0::1;18399:9;18389:7;;:19;;;;:::i;:::-;18375:10;;:33;;18353:129;;;;-1:-1:-1::0;;;18353:129:0::1;;;;;;;:::i;:::-;18542:9;18532:7;;:19;;;;:::i;:::-;18515:13;;:36;;18493:132;;;;-1:-1:-1::0;;;18493:132:0::1;;;;;;;:::i;12265:342::-:0;-1:-1:-1;;;;;12394:20:0;;12386:52;;;;-1:-1:-1;;;12386:52:0;;21388:2:1;12386:52:0;;;21370:21:1;21427:2;21407:18;;;21400:30;-1:-1:-1;;;21446:18:1;;;21439:49;21505:18;;12386:52:0;21186:343:1;12386:52:0;-1:-1:-1;;;;;12457:21:0;;12449:53;;;;-1:-1:-1;;;12449:53:0;;21388:2:1;12449:53:0;;;21370:21:1;21427:2;21407:18;;;21400:30;-1:-1:-1;;;21446:18:1;;;21439:49;21505:18;;12449:53:0;21186:343:1;12449:53:0;-1:-1:-1;;;;;12513:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;12566:33;;368:25:1;;;12566:33:0;;341:18:1;12566:33:0;;;;;;;12265:342;;;:::o;19564:2384::-;19677:4;-1:-1:-1;;;;;19702:18:0;;19694:68;;;;-1:-1:-1;;;19694:68:0;;21736:2:1;19694:68:0;;;21718:21:1;21775:2;21755:18;;;21748:30;21814:34;21794:18;;;21787:62;-1:-1:-1;;;21865:18:1;;;21858:35;21910:19;;19694:68:0;21534:401:1;19694:68:0;-1:-1:-1;;;;;19781:16:0;;19773:64;;;;-1:-1:-1;;;19773:64:0;;22142:2:1;19773:64:0;;;22124:21:1;22181:2;22161:18;;;22154:30;22220:34;22200:18;;;22193:62;-1:-1:-1;;;22271:18:1;;;22264:33;22314:19;;19773:64:0;21940:399:1;19773:64:0;19865:1;19856:6;:10;19848:64;;;;-1:-1:-1;;;19848:64:0;;22546:2:1;19848:64:0;;;22528:21:1;22585:2;22565:18;;;22558:30;22624:34;22604:18;;;22597:62;-1:-1:-1;;;22675:18:1;;;22668:39;22724:19;;19848:64:0;22344:405:1;19848:64:0;-1:-1:-1;;;;;20011:13:0;;19923:8;20011:13;;;:7;:13;;;;;;19923:8;;;;20011:13;;20007:162;;;20047:4;20041:10;;20007:162;;;-1:-1:-1;;;;;20073:11:0;;;;;;:7;:11;;;;;;;;20069:100;;;20108:4;20101:11;;20069:100;;;-1:-1:-1;20153:4:0;20069:100;20183:20;20194:4;20200:2;20183:10;:20::i;:::-;20179:864;;;20225:14;;;;20220:90;;20260:34;;-1:-1:-1;;;20260:34:0;;22956:2:1;20260:34:0;;;22938:21:1;22995:2;22975:18;;;22968:30;23034:26;23014:18;;;23007:54;23078:18;;20260:34:0;22754:348:1;20220:90:0;20328:3;:11;;;;20335:4;20328:11;20324:362;;;-1:-1:-1;;;;;20387:27:0;;;;;;:21;:27;;;;;;;;20386:28;:58;;;;-1:-1:-1;;;;;;20419:25:0;;;;;;:21;:25;;;;;;;;20418:26;20386:58;:74;;;;-1:-1:-1;20449:11:0;;;;;;;20448:12;20386:74;20360:311;;;20547:12;;20537:6;:22;;20503:148;;;;-1:-1:-1;;;20503:148:0;;23309:2:1;20503:148:0;;;23291:21:1;23348:2;23328:18;;;23321:30;23387:34;23367:18;;;23360:62;-1:-1:-1;;;23438:18:1;;;23431:38;23486:19;;20503:148:0;23107:404:1;20503:148:0;20718:9;;-1:-1:-1;;;;;20704:24:0;;;20718:9;;;;;20704:24;;;;:33;;;20733:4;20732:5;20704:33;20700:332;;;-1:-1:-1;;;;;20763:25:0;;;;;;:21;:25;;;;;;;;20762:26;:42;;;;-1:-1:-1;20793:11:0;;;;;;;20792:12;20762:42;20758:259;;;20889:14;;20879:6;20863:13;20873:2;20863:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;20829:168;;;;-1:-1:-1;;;20829:168:0;;23848:2:1;20829:168:0;;;23830:21:1;23887:2;23867:18;;;23860:30;23926:34;23906:18;;;23899:62;-1:-1:-1;;;23977:18:1;;;23970:40;24027:19;;20829:168:0;23646:406:1;20829:168:0;21067:4;21063:806;;;21093:6;;;;21088:770;;21124:19;;;;;;;21120:723;;;21168:28;21199:24;21217:4;21199:9;:24::i;:::-;21168:55;;21274:13;;21250:20;:37;21246:578;;21334:10;;21375:22;;;;21371:217;;;21494:13;;21484:6;;6673:5;;21494:13;21474:17;;-1:-1:-1;;;;;21484:6:0;21474:9;:17::i;:::-;:33;;;;:::i;:::-;21473:87;;;;:::i;:::-;21430:130;;21371:217;21642:7;21618:20;:31;21614:126;;21705:7;21682:30;;21614:126;21766:34;21779:20;21766:12;:34::i;:::-;21289:535;21246:578;21145:698;21120:723;21888:52;21905:4;21911:2;21915:6;21923:3;21928:4;21934:5;21888:16;:52::i;:::-;21881:59;19564:2384;-1:-1:-1;;;;;;;19564:2384:0:o;25695:835::-;-1:-1:-1;;;;;25926:25:0;;25875:4;25926:25;;;:19;:25;;;;;;25907:4;;25926:25;;;:52;;-1:-1:-1;;;;;;25955:23:0;;;;;;:19;:23;;;;;;;;25926:52;25922:100;;;-1:-1:-1;26005:5:0;25922:100;-1:-1:-1;;;;;26032:13:0;;:7;:13;;;;;;;;;;:23;;26049:6;;26032:7;:23;;26049:6;;26032:23;:::i;:::-;;;;-1:-1:-1;26066:22:0;;-1:-1:-1;26092:7:0;26091:81;;26166:6;26091:81;;;26116:34;26126:4;26132:3;26137:4;26143:6;26116:9;:34::i;:::-;26066:106;;26198:14;26183:7;:11;26191:2;-1:-1:-1;;;;;26183:11:0;-1:-1:-1;;;;;26183:11:0;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;26243:2;-1:-1:-1;;;;;26228:34:0;26237:4;-1:-1:-1;;;;;26228:34:0;;26247:14;26228:34;;;;368:25:1;;356:2;341:18;;222:177;26228:34:0;;;;;;;;26278:16;;;;;;;26273:228;;26311:28;26330:4;26336:2;26311:18;:28::i;:::-;26359:16;;;;;;;26358:17;:41;;;;;26379:20;26390:4;26396:2;26379:10;:20::i;:::-;26358:51;;;;;26404:5;26403:6;26358:51;26354:136;;;26430:44;;-1:-1:-1;;;26430:44:0;;24259:2:1;26430:44:0;;;24241:21:1;24298:2;24278:18;;;24271:30;24337:34;24317:18;;;24310:62;-1:-1:-1;;;24388:18:1;;;24381:32;24430:19;;26430:44:0;24057:398:1;26354:136:0;-1:-1:-1;26518:4:0;;25695:835;-1:-1:-1;;;;;;;;25695:835:0:o;19185:371::-;19299:6;;19254:4;;-1:-1:-1;;;;;19291:14:0;;;19299:6;;;;;19291:14;;;;:43;;-1:-1:-1;19328:6:0;;-1:-1:-1;;;;;19322:12:0;;;19328:6;;;;;19322:12;;19291:43;:79;;;;-1:-1:-1;19364:6:0;;;;;-1:-1:-1;;;;;19364:6:0;19351:9;:19;;19291:79;:118;;;;-1:-1:-1;;;;;;19388:21:0;;;;;;:17;:21;;;;;;;;19387:22;19291:118;:159;;;;-1:-1:-1;;;;;;19427:23:0;;;;;;:17;:23;;;;;;;;19426:24;19291:159;:186;;;;-1:-1:-1;;;;;;19467:10:0;;6884:42;19467:10;;19291:186;:219;;;;-1:-1:-1;;;;;;19494:16:0;;;;19291:219;:257;;;;-1:-1:-1;;;;;;19527:21:0;;19543:4;19527:21;;19291:257;19271:277;19185:371;-1:-1:-1;;;19185:371:0:o;21956:2002::-;7739:6;:13;;-1:-1:-1;;7739:13:0;7748:4;7739:13;;;22039:30:::1;::::0;;::::1;::::0;::::1;::::0;;22062:7:::1;22039:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;-1:-1:-1;;;22039:30:0;::::1;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;22039:30:0;::::1;::::0;;::::1;::::0;;;;;;7739:6;22084:21;22080:60:::1;;22122:7;;;22080:60;22190:4;22170:26;::::0;;;:11:::1;:26;::::0;;;;;;;22205:9:::1;::::0;;;::::1;-1:-1:-1::0;;;;;22205:9:0::1;22170:46:::0;;;;;;;;-1:-1:-1;;22170:67:0::1;22152:190;;22284:4;22264:26;::::0;;;:11:::1;:26;::::0;;;;;;;22299:9:::1;::::0;;;::::1;-1:-1:-1::0;;;;;22299:9:0::1;22264:46:::0;;;;;;;-1:-1:-1;;22264:66:0;;22152:190:::1;22354:17;22452:1;22432:6;:16;;;22375:73;;22399:6;:16;;;22376:39;;:20;:39;;;;:::i;:::-;22375:73;;;;:::i;:::-;22374:79;;;;:::i;:::-;22354:99:::0;-1:-1:-1;22464:15:0::1;22482:32;22354:99:::0;22482:20;:32:::1;:::i;:::-;22551:16;::::0;;22565:1:::1;22551:16:::0;;;;;::::1;::::0;;22464:50;;-1:-1:-1;22527:21:0::1;::::0;22551:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;22551:16:0::1;22527:40;;22596:4;22578;22583:1;22578:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;22578:23:0::1;;;-1:-1:-1::0;;;;;22578:23:0::1;;;::::0;::::1;22622:9;;;;;;;;;-1:-1:-1::0;;;;;22622:9:0::1;-1:-1:-1::0;;;;;22622:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22612:4;22617:1;22612:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22612:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;22668:9:::1;::::0;:210:::1;::::0;-1:-1:-1;;;22668:210:0;;:9;;;::::1;::::0;;::::1;::::0;:60:::1;::::0;:210:::1;::::0;22747:7;;22773:1:::1;::::0;22793:4;;22824::::1;::::0;22848:15:::1;::::0;22668:210:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;22651:279;;22912:7;;;;;;22651:279;22963:21;22942:18;23049:7:::0;23023:22:::1;23036:9:::0;22963:21;23023:22:::1;:::i;:::-;23022:34;;;;:::i;:::-;22995:61:::0;-1:-1:-1;23073:13:0;;23069:470:::1;;23124:9;::::0;23313:16:::1;::::0;23124:262:::1;::::0;-1:-1:-1;;;23124:262:0;;23205:4:::1;23124:262;::::0;::::1;25786:34:1::0;25836:18;;;25829:34;;;23265:1:0::1;25879:18:1::0;;;25872:34;;;25922:18;;;25915:34;-1:-1:-1;;;;;23313:16:0;;::::1;25965:19:1::0;;;25958:44;23352:15:0::1;26018:19:1::0;;;26011:35;23124:9:0;;;::::1;;::::0;:25:::1;::::0;23157:16;;25720:19:1;;23124:262:0::1;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;23124:262:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;23124:262:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;23103:425;;23506:7;;;;;;;;23103:425;-1:-1:-1::0;;23424:40:0::1;::::0;;26542:25:1;;;26598:2;26583:18;;26576:34;;;23424:40:0::1;::::0;-1:-1:-1;26515:18:1;23424:40:0::1;;;;;;;23103:425;23551:30;23565:16:::0;23551:30;::::1;:::i;:::-;;;23612:6;:16;;;23592:6;:16;;:36;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;23738:16:::1;::::0;::::1;::::0;23704:17:::1;::::0;::::1;::::0;23639:12:::1;::::0;-1:-1:-1;23639:12:0;;23690:64;;::::1;::::0;23691:30:::1;::::0;::::1;:10:::0;:30:::1;:::i;:::-;23690:64;;;;:::i;:::-;23769:17;::::0;::::1;::::0;23662:92;;-1:-1:-1;23769:21:0::1;;::::0;23765:186:::1;;23821:11;:22:::0;:118:::1;::::0;-1:-1:-1;;;;;23821:22:0;;::::1;::::0;23915:5:::1;::::0;23874:17;;23821:118:::1;::::0;;;23874:17;23821:22;23915:5;23821:118:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;23807:132:0;;-1:-1:-1;;23765:186:0::1;22028:1930;;;;;;;;7763:1;-1:-1:-1::0;7775:6:0;:14;;-1:-1:-1;;7775:14:0;;;21956:2002::o;26538:1066::-;26689:30;;;;;;;;26712:7;26689:30;;;;;;;;;;;;;;;;-1:-1:-1;;;26689:30:0;;;;;;;;;;-1:-1:-1;;;26689:30:0;;;;;;;;;;26669:7;;;;26746:30;;;:::i;:::-;26730:46;;;;26787:18;26820:3;26816:205;;;-1:-1:-1;26853:9:0;:16;;;26816:205;;;26891:4;26887:134;;;-1:-1:-1;26925:9:0;:17;;;;;;26887:134;;;-1:-1:-1;26988:9:0;:21;-1:-1:-1;;;26988:21:0;;;;26887:134;27035:15;;;:29;;-1:-1:-1;27054:10:0;;27035:29;27031:75;;;27088:6;27081:13;;;;;;;27031:75;27116:17;6673:5;27137:19;27146:10;27137:6;:19;:::i;:::-;27136:40;;;;:::i;:::-;27116:60;;27187:15;27233:5;27218:6;:11;;;27206:23;;:9;:23;;;;:::i;:::-;27205:33;;;;:::i;:::-;27187:51;-1:-1:-1;27249:15:0;27267:19;27187:51;27267:9;:19;:::i;:::-;27249:37;-1:-1:-1;27301:11:0;;27297:135;;27345:4;27329:7;:22;;;;;;;;;;:33;;27355:7;;27329;:33;;27355:7;;27329:33;:::i;:::-;;;;-1:-1:-1;;27382:38:0;;368:25:1;;;27405:4:0;;-1:-1:-1;;;;;27382:38:0;;;;;356:2:1;341:18;27382:38:0;;;;;;;27297:135;27446:11;;27442:117;;27485:7;27474;;:18;;;;;;;:::i;:::-;;;;-1:-1:-1;;27512:35:0;;368:25:1;;;27535:1:0;;-1:-1:-1;;;;;27512:35:0;;;;;356:2:1;341:18;27512:35:0;;;;;;;27442:117;27578:18;27587:9;27578:6;:18;:::i;:::-;27571:25;26538:1066;-1:-1:-1;;;;;;;;;;;26538:1066:0:o;23966:435::-;24049:16;;;;;;;24048:17;24040:65;;;;-1:-1:-1;;;24040:65:0;;27209:2:1;24040:65:0;;;27191:21:1;27248:2;27228:18;;;27221:30;27287:34;27267:18;;;27260:62;-1:-1:-1;;;27338:18:1;;;27331:33;27381:19;;24040:65:0;27007:399:1;24040:65:0;24121:20;24132:4;24138:2;24121:10;:20::i;:::-;24120:21;:37;;;;-1:-1:-1;24151:6:0;;-1:-1:-1;;;;;24145:12:0;;;24151:6;;24145:12;24120:37;24116:278;;;-1:-1:-1;;;;;24174:23:0;;;;;;:17;:23;;;;;;;;:30;;24200:4;-1:-1:-1;;24174:30:0;;;;;;;;24219:19;:25;;;;;;:32;;;;;;;;;;24266:16;:23;;24174:30;-1:-1:-1;;24266:23:0;;;;;;;;24304:19;:26;;;;;;;;;;24350:32;1692:41:1;;;24350:32:0;;1665:18:1;24350:32:0;1552:187:1;774:548;886:4;915:2;944;933:9;926:21;976:6;970:13;1019:6;1014:2;1003:9;999:18;992:34;1044:1;1054:140;1068:6;1065:1;1062:13;1054:140;;;1163:14;;;1159:23;;1153:30;1129:17;;;1148:2;1125:26;1118:66;1083:10;;1054:140;;;1058:3;1243:1;1238:2;1229:6;1218:9;1214:22;1210:31;1203:42;1313:2;1306;1302:7;1297:2;1289:6;1285:15;1281:29;1270:9;1266:45;1262:54;1254:62;;;;774:548;;;;:::o;1744:131::-;-1:-1:-1;;;;;1819:31:1;;1809:42;;1799:70;;1865:1;1862;1855:12;1880:315;1948:6;1956;2009:2;1997:9;1988:7;1984:23;1980:32;1977:52;;;2025:1;2022;2015:12;1977:52;2064:9;2051:23;2083:31;2108:5;2083:31;:::i;:::-;2133:5;2185:2;2170:18;;;;2157:32;;-1:-1:-1;;;1880:315:1:o;2200:456::-;2277:6;2285;2293;2346:2;2334:9;2325:7;2321:23;2317:32;2314:52;;;2362:1;2359;2352:12;2314:52;2401:9;2388:23;2420:31;2445:5;2420:31;:::i;:::-;2470:5;-1:-1:-1;2527:2:1;2512:18;;2499:32;2540:33;2499:32;2540:33;:::i;:::-;2200:456;;2592:7;;-1:-1:-1;;;2646:2:1;2631:18;;;;2618:32;;2200:456::o;2661:248::-;2729:6;2737;2790:2;2778:9;2769:7;2765:23;2761:32;2758:52;;;2806:1;2803;2796:12;2758:52;-1:-1:-1;;2829:23:1;;;2899:2;2884:18;;;2871:32;;-1:-1:-1;2661:248:1:o;2914:127::-;2975:10;2970:3;2966:20;2963:1;2956:31;3006:4;3003:1;2996:15;3030:4;3027:1;3020:15;3046:275;3117:2;3111:9;3182:2;3163:13;;-1:-1:-1;;3159:27:1;3147:40;;3217:18;3202:34;;3238:22;;;3199:62;3196:88;;;3264:18;;:::i;:::-;3300:2;3293:22;3046:275;;-1:-1:-1;3046:275:1:o;3326:183::-;3386:4;3419:18;3411:6;3408:30;3405:56;;;3441:18;;:::i;:::-;-1:-1:-1;3486:1:1;3482:14;3498:4;3478:25;;3326:183::o;3514:662::-;3568:5;3621:3;3614:4;3606:6;3602:17;3598:27;3588:55;;3639:1;3636;3629:12;3588:55;3675:6;3662:20;3701:4;3725:60;3741:43;3781:2;3741:43;:::i;:::-;3725:60;:::i;:::-;3819:15;;;3905:1;3901:10;;;;3889:23;;3885:32;;;3850:12;;;;3929:15;;;3926:35;;;3957:1;3954;3947:12;3926:35;3993:2;3985:6;3981:15;4005:142;4021:6;4016:3;4013:15;4005:142;;;4087:17;;4075:30;;4125:12;;;;4038;;4005:142;;;-1:-1:-1;4165:5:1;3514:662;-1:-1:-1;;;;;;3514:662:1:o;4181:1215::-;4299:6;4307;4360:2;4348:9;4339:7;4335:23;4331:32;4328:52;;;4376:1;4373;4366:12;4328:52;4416:9;4403:23;4445:18;4486:2;4478:6;4475:14;4472:34;;;4502:1;4499;4492:12;4472:34;4540:6;4529:9;4525:22;4515:32;;4585:7;4578:4;4574:2;4570:13;4566:27;4556:55;;4607:1;4604;4597:12;4556:55;4643:2;4630:16;4665:4;4689:60;4705:43;4745:2;4705:43;:::i;4689:60::-;4783:15;;;4865:1;4861:10;;;;4853:19;;4849:28;;;4814:12;;;;4889:19;;;4886:39;;;4921:1;4918;4911:12;4886:39;4945:11;;;;4965:217;4981:6;4976:3;4973:15;4965:217;;;5061:3;5048:17;5078:31;5103:5;5078:31;:::i;:::-;5122:18;;4998:12;;;;5160;;;;4965:217;;;5201:5;-1:-1:-1;;5244:18:1;;5231:32;;-1:-1:-1;;5275:16:1;;;5272:36;;;5304:1;5301;5294:12;5272:36;;5327:63;5382:7;5371:8;5360:9;5356:24;5327:63;:::i;:::-;5317:73;;;4181:1215;;;;;:::o;5590:159::-;5657:20;;5717:6;5706:18;;5696:29;;5686:57;;5739:1;5736;5729:12;5686:57;5590:159;;;:::o;5754:328::-;5828:6;5836;5844;5897:2;5885:9;5876:7;5872:23;5868:32;5865:52;;;5913:1;5910;5903:12;5865:52;5936:28;5954:9;5936:28;:::i;:::-;5926:38;;5983:37;6016:2;6005:9;6001:18;5983:37;:::i;:::-;5973:47;;6039:37;6072:2;6061:9;6057:18;6039:37;:::i;:::-;6029:47;;5754:328;;;;;:::o;6087:118::-;6173:5;6166:13;6159:21;6152:5;6149:32;6139:60;;6195:1;6192;6185:12;6210:382;6275:6;6283;6336:2;6324:9;6315:7;6311:23;6307:32;6304:52;;;6352:1;6349;6342:12;6304:52;6391:9;6378:23;6410:31;6435:5;6410:31;:::i;:::-;6460:5;-1:-1:-1;6517:2:1;6502:18;;6489:32;6530:30;6489:32;6530:30;:::i;:::-;6579:7;6569:17;;;6210:382;;;;;:::o;6597:180::-;6656:6;6709:2;6697:9;6688:7;6684:23;6680:32;6677:52;;;6725:1;6722;6715:12;6677:52;-1:-1:-1;6748:23:1;;6597:180;-1:-1:-1;6597:180:1:o;6782:247::-;6841:6;6894:2;6882:9;6873:7;6869:23;6865:32;6862:52;;;6910:1;6907;6900:12;6862:52;6949:9;6936:23;6968:31;6993:5;6968:31;:::i;7034:376::-;7096:6;7104;7157:2;7145:9;7136:7;7132:23;7128:32;7125:52;;;7173:1;7170;7163:12;7125:52;7212:9;7199:23;7231:28;7253:5;7231:28;:::i;7864:388::-;7932:6;7940;7993:2;7981:9;7972:7;7968:23;7964:32;7961:52;;;8009:1;8006;7999:12;7961:52;8048:9;8035:23;8067:31;8092:5;8067:31;:::i;:::-;8117:5;-1:-1:-1;8174:2:1;8159:18;;8146:32;8187:33;8146:32;8187:33;:::i;8741:385::-;8827:6;8835;8843;8851;8904:3;8892:9;8883:7;8879:23;8875:33;8872:53;;;8921:1;8918;8911:12;8872:53;-1:-1:-1;;8944:23:1;;;9014:2;8999:18;;8986:32;;-1:-1:-1;9065:2:1;9050:18;;9037:32;;9116:2;9101:18;9088:32;;-1:-1:-1;8741:385:1;-1:-1:-1;8741:385:1:o;9131:341::-;9333:2;9315:21;;;9372:2;9352:18;;;9345:30;-1:-1:-1;;;9406:2:1;9391:18;;9384:47;9463:2;9448:18;;9131:341::o;9477:127::-;9538:10;9533:3;9529:20;9526:1;9519:31;9569:4;9566:1;9559:15;9593:4;9590:1;9583:15;9609:128;9676:9;;;9697:11;;;9694:37;;;9711:18;;:::i;10094:217::-;10134:1;10160;10150:132;;10204:10;10199:3;10195:20;10192:1;10185:31;10239:4;10236:1;10229:15;10267:4;10264:1;10257:15;10150:132;-1:-1:-1;10296:9:1;;10094:217::o;10316:168::-;10389:9;;;10420;;10437:15;;;10431:22;;10417:37;10407:71;;10458:18;;:::i;11256:422::-;11345:1;11388:5;11345:1;11402:270;11423:7;11413:8;11410:21;11402:270;;;11482:4;11478:1;11474:6;11470:17;11464:4;11461:27;11458:53;;;11491:18;;:::i;:::-;11541:7;11531:8;11527:22;11524:55;;;11561:16;;;;11524:55;11640:22;;;;11600:15;;;;11402:270;;;11406:3;11256:422;;;;;:::o;11683:806::-;11732:5;11762:8;11752:80;;-1:-1:-1;11803:1:1;11817:5;;11752:80;11851:4;11841:76;;-1:-1:-1;11888:1:1;11902:5;;11841:76;11933:4;11951:1;11946:59;;;;12019:1;12014:130;;;;11926:218;;11946:59;11976:1;11967:10;;11990:5;;;12014:130;12051:3;12041:8;12038:17;12035:43;;;12058:18;;:::i;:::-;-1:-1:-1;;12114:1:1;12100:16;;12129:5;;11926:218;;12228:2;12218:8;12215:16;12209:3;12203:4;12200:13;12196:36;12190:2;12180:8;12177:16;12172:2;12166:4;12163:12;12159:35;12156:77;12153:159;;;-1:-1:-1;12265:19:1;;;12297:5;;12153:159;12344:34;12369:8;12363:4;12344:34;:::i;:::-;12414:6;12410:1;12406:6;12402:19;12393:7;12390:32;12387:58;;;12425:18;;:::i;:::-;12463:20;;11683:806;-1:-1:-1;;;11683:806:1:o;12494:140::-;12552:5;12581:47;12622:4;12612:8;12608:19;12602:4;12581:47;:::i;12639:127::-;12700:10;12695:3;12691:20;12688:1;12681:31;12731:4;12728:1;12721:15;12755:4;12752:1;12745:15;13118:197;13156:3;13184:6;13225:2;13218:5;13214:14;13252:2;13243:7;13240:15;13237:41;;13258:18;;:::i;:::-;13307:1;13294:15;;13118:197;-1:-1:-1;;;13118:197:1:o;14018:404::-;14220:2;14202:21;;;14259:2;14239:18;;;14232:30;14298:34;14293:2;14278:18;;14271:62;-1:-1:-1;;;14364:2:1;14349:18;;14342:38;14412:3;14397:19;;14018:404::o;14778:425::-;14980:2;14962:21;;;15019:2;14999:18;;;14992:30;15058:34;15053:2;15038:18;;15031:62;15129:31;15124:2;15109:18;;15102:59;15193:3;15178:19;;14778:425::o;17742:168::-;17809:6;17835:10;;;17847;;;17831:27;;17870:11;;;17867:37;;;17884:18;;:::i;:::-;17867:37;17742:168;;;;:::o;18323:184::-;18393:6;18446:2;18434:9;18425:7;18421:23;18417:32;18414:52;;;18462:1;18459;18452:12;18414:52;-1:-1:-1;18485:16:1;;18323:184;-1:-1:-1;18323:184:1:o;18791:245::-;18858:6;18911:2;18899:9;18890:7;18886:23;18882:32;18879:52;;;18927:1;18924;18917:12;18879:52;18959:9;18953:16;18978:28;19000:5;18978:28;:::i;19400:251::-;19470:6;19523:2;19511:9;19502:7;19498:23;19494:32;19491:52;;;19539:1;19536;19529:12;19491:52;19571:9;19565:16;19590:31;19615:5;19590:31;:::i;20771:410::-;20973:2;20955:21;;;21012:2;20992:18;;;20985:30;21051:34;21046:2;21031:18;;21024:62;-1:-1:-1;;;21117:2:1;21102:18;;21095:44;21171:3;21156:19;;20771:410::o;23516:125::-;23581:9;;;23602:10;;;23599:36;;;23615:18;;:::i;24460:980::-;24722:4;24770:3;24759:9;24755:19;24801:6;24790:9;24783:25;24827:2;24865:6;24860:2;24849:9;24845:18;24838:34;24908:3;24903:2;24892:9;24888:18;24881:31;24932:6;24967;24961:13;24998:6;24990;24983:22;25036:3;25025:9;25021:19;25014:26;;25075:2;25067:6;25063:15;25049:29;;25096:1;25106:195;25120:6;25117:1;25114:13;25106:195;;;25185:13;;-1:-1:-1;;;;;25181:39:1;25169:52;;25276:15;;;;25241:12;;;;25217:1;25135:9;25106:195;;;-1:-1:-1;;;;;;;25357:32:1;;;;25352:2;25337:18;;25330:60;-1:-1:-1;;;25421:3:1;25406:19;25399:35;25318:3;24460:980;-1:-1:-1;;;24460:980:1:o;26057:306::-;26145:6;26153;26161;26214:2;26202:9;26193:7;26189:23;26185:32;26182:52;;;26230:1;26227;26220:12;26182:52;26259:9;26253:16;26243:26;;26309:2;26298:9;26294:18;26288:25;26278:35;;26353:2;26342:9;26338:18;26332:25;26322:35;;26057:306;;;;;:::o;26621:171::-;26689:6;26728:10;;;26716;;;26712:27;;26751:12;;;26748:38;;;26766:18;;:::i

Swarm Source

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