ETH Price: $3,253.59 (+2.46%)
Gas: 3 Gwei

Token

Burno Bucks (BUCKS)
 

Overview

Max Total Supply

1,000,000,000 BUCKS

Holders

67

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
2,541,372.958526412 BUCKS

Value
$0.00
0x6792d25b50e1c729adfcc8cebae6b366380cc866
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:
BurnoBucks

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/* kishiburno.com
https://t.me/KISHIBURNOPORTAL
Burno Bucks is the in-game, swappable, cross-platform currency of the Kishiburno Ecosystem. 
Kishiburno is an upcoming P2E video game digital distribution and crypto trading analytics platform.

*/
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.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, uint);
    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,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function swapExactETHForTokens(
        uint amountOutMin, 
        address[] calldata path, 
        address to, uint deadline
    ) external payable returns (uint[] memory amounts);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IRouter02 is IRouter01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
}

contract BurnoBucks is IERC20 {
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping(address => uint256) private cooldown;
    mapping (address => uint256) private _lastTX;

    mapping (address => bool) private _liquidityHolders;
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedFromLimits;
    mapping (address => bool) private bots;

    uint256 constant private startingSupply = 1_000_000_000;
    string constant private _name = "Burno Bucks";
    string constant private _symbol = "BUCKS";
    uint8 constant private _decimals = 9;

    uint256 private _tTotal = startingSupply * 10**_decimals;

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

    struct Ratios {
        uint16 liquidity;
        uint16 marketing;
        uint16 development;
        uint16 dao;
        uint16 burno;
        uint16 buyback;
        uint16 totalSwap;
    }

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

    Ratios public _ratios = Ratios({
        liquidity: 100,
        marketing: 1100,
        development: 1100,
        dao: 100,
        burno: 200,
        buyback: 200,
        totalSwap: 2800
    });

    uint256 constant public maxBuyTaxes = 2000;
    uint256 constant public maxSellTaxes = 2000;
    uint256 constant public maxTransferTaxes = 2000;
    uint256 constant public maxRoundtripTax = 3000;
    uint256 constant masterTaxDivisor = 10000;

    IRouter02 public dexRouter;
    address public lpPair;
    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;

    struct TaxWallets {
        address payable marketing;
        address payable development;
        address payable dao;
        address payable liquidity;
        address payable burno;
        address payable buyback;
    }

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0x3999cC6d3d5cE3abc2164a51f49B940FB92d36b3), 
        development: payable(0xa43aadc6622553C7AE63608045eE023377e6ff17),
        dao: payable(0x3F1EB88B1C8761723f703Ed96b9D2C2AFE8AcF92),
        liquidity: payable(0x3F1EB88B1C8761723f703Ed96b9D2C2AFE8AcF92),
        burno: payable(0x36355F08DdB54741d3EC4B2D82b61145865bcA54),
        buyback: payable(0x3F1EB88B1C8761723f703Ed96b9D2C2AFE8AcF92)
    });
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    bool public piContractSwapsEnabled;
    uint256 public piSwapPercent = 10;
    uint256 private _firstBlock;

    bool public botProtection = false;
    bool public cooldownEnabled = false;
    
    uint256 private _maxTxAmount = (_tTotal * 1) / 100;
    uint256 private _maxWalletSize = (_tTotal * 2) / 100;

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

    address public burno;
    address public buyBack = address(this);

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event ContractSwapEnabledUpdated(bool enabled);
    event AutoLiquify(uint256 amountCurrency, uint256 amountTokens);
    
    modifier inSwapFlag {
        inSwap = true;
        _;
        inSwap = false;
    }

    modifier onlyOwner() {
        require(_owner == msg.sender, "Caller =/= owner.");
        _;
    }

    constructor () payable {
        // Set the owner.
        _owner = _taxWallets.liquidity;

        if (block.chainid == 56) {
            dexRouter = IRouter02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        } else if (block.chainid == 97) {
            dexRouter = IRouter02(0xD99D1c33F9fC3444f8101754aBC46c52416550D1);
            _owner = msg.sender;
        } else if (block.chainid == 1 || block.chainid == 4 || block.chainid == 3) {
            dexRouter = IRouter02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
            //Ropstein DAI 0xaD6D458402F60fD3Bd25163575031ACDce07538D
        } else if (block.chainid == 43114) {
            dexRouter = IRouter02(0x60aE616a2155Ee3d9A68541Ba4544862310933d4);
        } else if (block.chainid == 250) {
            dexRouter = IRouter02(0xF491e7B69E4244ad4002BC14e878a34207E38c29);
        } else {
            revert();
        }

        _tOwned[_owner] = _tTotal;
        emit Transfer(address(0), _owner, _tTotal);

        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[address(this)] = true;

        _isExcludedFromFees[DEAD] = true;
        _liquidityHolders[_owner] = true;
    }

    receive() external payable {}

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and renouncements.
    // This allows for removal of ownership privileges from the owner once renounced or transferred.
    address private _owner;

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

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================

    function totalSupply() external view override returns (uint256) { return _tTotal; }
    function decimals() external pure override returns (uint8) { 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 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 isExcludedFromLimits(address account) external view returns (bool) {
        return _isExcludedFromLimits[account];
    }

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

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

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

    function setCooldownEnabled(bool onoff) external onlyOwner() {
        cooldownEnabled = onoff;
    }

    function toggleBotProtection(bool onoff) external onlyOwner() {
        botProtection = onoff;
    }

    function setTaxes(uint16 buyFee, uint16 sellFee, uint16 transferFee) external onlyOwner {
        require(buyFee <= maxBuyTaxes
                && sellFee <= maxSellTaxes
                && transferFee <= maxTransferTaxes,
                "Cannot exceed maximums.");
        require(buyFee + sellFee <= maxRoundtripTax, "Cannot exceed roundtrip maximum.");
        _taxRates.buyFee = buyFee;
        _taxRates.sellFee = sellFee;
        _taxRates.transferFee = transferFee;
    }

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

    function setWallets(address payable marketing, address payable development, address payable dao, address payable liquidity) external onlyOwner {
        _taxWallets.marketing = payable(marketing);
        _taxWallets.development = payable(development);
        _taxWallets.dao = payable(dao);
        _taxWallets.liquidity = payable(liquidity);
    }

    function setPurchaseDestinations(address payable Burno, address payable buyback) external onlyOwner {
        _taxWallets.burno = payable(Burno);
        _taxWallets.buyback = payable(buyback);
    }

    function setMaxTxPercent(uint256 percent, uint256 divisor) external onlyOwner {
        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((_tTotal * percent) / divisor >= (_tTotal / 100), "Max Wallet amt must be above 1% of total supply.");
        _maxWalletSize = (_tTotal * percent) / divisor;
    }

    function getMaxTX() external view returns (uint256) {
        return _maxTxAmount / (10**_decimals);
    }

    function getMaxWallet() external view returns (uint256) {
        return _maxWalletSize / (10**_decimals);
    }

    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 setBurno(address _burno) external onlyOwner {
        burno = _burno;
    }

    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");
         if (botProtection) {
            require(!bots[to] && !bots[from]);
        }
        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]) {
                    require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
                }
            }
            if (to != address(dexRouter) && !sell) {
                if (!_isExcludedFromLimits[to]) {
                    require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize.");
                }
            }
        }

        if (from == lpPair && to != address(dexRouter)) {
            if (block.number <= (_firstBlock + 2)) {
                bots[to] = true;
            } 
        }
        if (from != _owner && to != _owner) {
            if (cooldownEnabled) {
                if (from != address(this) && to != address(this) && from != address(dexRouter) && to != address(dexRouter)) {
                    require(msg.sender == address(dexRouter) || msg.sender == lpPair, "ERR: Uniswap only");
                }
            
                if( to != _owner && to != address(this) && to != address(dexRouter) && to != lpPair) {
                    require(_lastTX[tx.origin] <= (block.timestamp + 5 minutes), "Cooldown in effect");
                    _lastTX[tx.origin] = block.timestamp;
                }
            }
                    
        }

        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,
                _taxWallets.liquidity,
                block.timestamp
            ) {
                emit AutoLiquify(liquidityBalance, toLiquify);
            } catch {
                return;
            }
        }

        amtBalance -= liquidityBalance;
        ratios.totalSwap -= ratios.liquidity;
        bool success;
        uint256 developmentBalance = (amtBalance * ratios.development) / ratios.totalSwap;
        uint256 daoBalance = (amtBalance * ratios.dao) / ratios.totalSwap;
        uint256 burnoBalance = (burno != address(0)) ? (amtBalance * ratios.burno) / ratios.totalSwap : 0;
        uint256 buybackBalance = (buyBack != address(0)) ? (amtBalance * ratios.buyback) / ratios.totalSwap : 0;
        uint256 marketingBalance = amtBalance - (developmentBalance + daoBalance + burnoBalance + buybackBalance);
        if (marketingBalance > 0) {
            (success,) = _taxWallets.marketing.call{value: marketingBalance, gas: 35000}("");
        }
        if (developmentBalance > 0) {
            (success,) = _taxWallets.development.call{value: developmentBalance, gas: 35000}("");
        }
        if (daoBalance > 0) {
            (success,) = _taxWallets.dao.call{value: daoBalance, gas: 35000}("");
        }
        if (burnoBalance > 0) {
            path[0] = dexRouter.WETH();
            path[1] = burno;
            buyTokens(path, burnoBalance, _taxWallets.burno);
        }
        if (buybackBalance > 0) {
            path[0] = dexRouter.WETH();
            path[1] = buyBack;
            buyTokens(path, buybackBalance, _taxWallets.buyback);
        }
    }

    function buyTokens(address[] memory path, uint256 amount, address payable destination) internal {
        try dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}
        (
            0,
            path,
            destination,
            block.timestamp
        ) {} catch {
            return;
        }
    }

    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.");
         _firstBlock = block.number;
        cooldownEnabled = true;
        tradingEnabled = true;
        swapThreshold = (balanceOf(lpPair) * 10) / 10000;
        swapAmount = (balanceOf(lpPair) * 30) / 10000;
    }

    function sweepContingency() external onlyOwner {
        require(!_hasLiqBeenAdded, "Cannot call after liquidity.");
        payable(_owner).transfer(address(this).balance);
    }

    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);
            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) {
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to) && !other) {
                revert("Pre-liquidity transfer protection.");
            }
        }

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

    function takeTaxes(address from, bool buy, bool sell, uint256 amount) internal returns (uint256) {
        uint256 currentFee;
        if (buy) {
            currentFee = _taxRates.buyFee;
        } else if (sell) {
            currentFee = _taxRates.sellFee;
        } else {
            currentFee = _taxRates.transferFee;
        }
        uint256 feeAmount = amount * currentFee / masterTaxDivisor;
        if (feeAmount > 0) {
            _tOwned[address(this)] += feeAmount;
            emit Transfer(from, address(this), feeAmount);
        }

        return amount - feeAmount;
    }

    function blacklist (address _address) external onlyOwner {
        bots[_address] = true;
    }
    
    function removeFromBlacklist (address _address) external onlyOwner {
        bots[_address] = false;
    }
    
    function getIsBlacklistedStatus (address _address) external view returns (bool) {
        return bots[_address];
    }
}

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":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"},{"internalType":"uint16","name":"dao","type":"uint16"},{"internalType":"uint16","name":"burno","type":"uint16"},{"internalType":"uint16","name":"buyback","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":"marketing","type":"address"},{"internalType":"address payable","name":"development","type":"address"},{"internalType":"address payable","name":"dao","type":"address"},{"internalType":"address payable","name":"liquidity","type":"address"},{"internalType":"address payable","name":"burno","type":"address"},{"internalType":"address payable","name":"buyback","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":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"botProtection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burno","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBack","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getIsBlacklistedStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxTX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"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":"maxRoundtripTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"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":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_burno","type":"address"}],"name":"setBurno","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":"bool","name":"onoff","type":"bool"}],"name":"setCooldownEnabled","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":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","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":"uint256","name":"priceImpactSwapPercent","type":"uint256"}],"name":"setPriceImpactSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"Burno","type":"address"},{"internalType":"address payable","name":"buyback","type":"address"}],"name":"setPurchaseDestinations","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"},{"internalType":"uint16","name":"dao","type":"uint16"},{"internalType":"uint16","name":"Burno","type":"uint16"},{"internalType":"uint16","name":"buyback","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":"marketing","type":"address"},{"internalType":"address payable","name":"development","type":"address"},{"internalType":"address payable","name":"dao","type":"address"},{"internalType":"address payable","name":"liquidity","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":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"toggleBotProtection","outputs":[],"stateMutability":"nonpayable","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"}]

6080604052620000126009600a62000ab3565b6200002290633b9aca0062000b9e565b600a55604051806060016040528061032061ffff1681526020016107d061ffff1681526020016107d061ffff16815250600b60008201518160000160006101000a81548161ffff021916908361ffff16021790555060208201518160000160026101000a81548161ffff021916908361ffff16021790555060408201518160000160046101000a81548161ffff021916908361ffff16021790555050506040518060e00160405280606461ffff16815260200161044c61ffff16815260200161044c61ffff168152602001606461ffff16815260200160c861ffff16815260200160c861ffff168152602001610af061ffff16815250600c60008201518160000160006101000a81548161ffff021916908361ffff16021790555060208201518160000160026101000a81548161ffff021916908361ffff16021790555060408201518160000160046101000a81548161ffff021916908361ffff16021790555060608201518160000160066101000a81548161ffff021916908361ffff16021790555060808201518160000160086101000a81548161ffff021916908361ffff16021790555060a082015181600001600a6101000a81548161ffff021916908361ffff16021790555060c082015181600001600c6101000a81548161ffff021916908361ffff16021790555050506040518060c00160405280733999cc6d3d5ce3abc2164a51f49b940fb92d36b36001600160a01b0316815260200173a43aadc6622553c7ae63608045ee023377e6ff176001600160a01b03168152602001733f1eb88b1c8761723f703ed96b9d2c2afe8acf926001600160a01b03168152602001733f1eb88b1c8761723f703ed96b9d2c2afe8acf926001600160a01b031681526020017336355f08ddb54741d3ec4b2d82b61145865bca546001600160a01b03168152602001733f1eb88b1c8761723f703ed96b9d2c2afe8acf926001600160a01b0316815250600f60008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160030160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060808201518160040160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060a08201518160050160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555050506000601560016101000a81548160ff021916908315150217905550600a6019556000601b60006101000a81548160ff0219169083151502179055506000601b60016101000a81548160ff0219169083151502179055506064600a54600162000467919062000b9e565b62000473919062000a45565b601c556064600a54600262000489919062000b9e565b62000495919062000a45565b601d55601e805461ffff19169055601f80546001600160a01b03199081163017909155601254602080549092166001600160a01b039190911617905560384614156200050757600d80546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e1790556200060b565b46606114156200054b57600d80546001600160a01b031990811673d99d1c33f9fc3444f8101754abc46c52416550d11790915560208054909116331790556200060b565b46600114806200055b5750466004145b80620005675750466003145b156200059957600d80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790556200060b565b4661a86a1415620005d057600d80546001600160a01b0319167360ae616a2155ee3d9a68541ba4544862310933d41790556200060b565b4660fa14156200060657600d80546001600160a01b03191673f491e7b69e4244ad4002bc14e878a34207e38c291790556200060b565b600080fd5b600a54602080546001600160a01b03908116600090815260018352604080822085905592549251929091169290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620006669162000a3c565b60405180910390a3600d60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620006bd57600080fd5b505afa158015620006d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006f89190620009bb565b6001600160a01b031663c9c65396600d60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200075557600080fd5b505afa1580156200076a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007909190620009bb565b306040518363ffffffff1660e01b8152600401620007b0929190620009eb565b602060405180830381600087803b158015620007cb57600080fd5b505af1158015620007e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008069190620009bb565b600e80546001600160a01b0319166001600160a01b03928316179081905581166000908152600260209081526040909120805460ff1916600117905554600d5462000859929182169116600019620008f6565b600d54620008759030906001600160a01b0316600019620008f6565b602080546001600160a01b0390811660009081526007835260408082208054600160ff19918216811790925530845282842080548216831790557fb0c2646e02af70b79e3fe9277b98373379f54150e4e26b2b5650139f7a75a65d805482168317905585549094168352600690945290208054909116909117905562000bd6565b6001600160a01b038316620009285760405162461bcd60e51b81526004016200091f9062000a05565b60405180910390fd5b6001600160a01b038216620009515760405162461bcd60e51b81526004016200091f9062000a05565b6001600160a01b0380841660008181526003602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590620009ae90859062000a3c565b60405180910390a3505050565b600060208284031215620009cd578081fd5b81516001600160a01b0381168114620009e4578182fd5b9392505050565b6001600160a01b0392831681529116602082015260400190565b60208082526013908201527f45524332303a205a65726f204164647265737300000000000000000000000000604082015260600190565b90815260200190565b60008262000a6157634e487b7160e01b81526012600452602481fd5b500490565b80825b600180861162000a7a575062000aaa565b81870482111562000a8f5762000a8f62000bc0565b8086161562000a9d57918102915b9490941c93800262000a69565b94509492505050565b6000620009e460001960ff85168460008262000ad257506001620009e4565b8162000ae157506000620009e4565b816001811462000afa576002811462000b055762000b39565b6001915050620009e4565b60ff84111562000b195762000b1962000bc0565b6001841b91508482111562000b325762000b3262000bc0565b50620009e4565b5060208310610133831016604e8410600b841016171562000b71575081810a8381111562000b6b5762000b6b62000bc0565b620009e4565b62000b80848484600162000a66565b80860482111562000b955762000b9562000bc0565b02949350505050565b600081600019048311821515161562000bbb5762000bbb62000bc0565b500290565b634e487b7160e01b600052601160045260246000fd5b613c478062000be66000396000f3fe6080604052600436106103855760003560e01c8063590ffdce116101d1578063b1b08f7111610102578063cf847706116100a0578063f94aa1b41161006f578063f94aa1b414610956578063f9f92be41461097d578063fb78680d1461099d578063fdb78c0e146109bd5761038c565b8063cf847706146108d9578063d69153c914610901578063dd62ed3e14610921578063ee5d9c2d146109415761038c565b8063ba17feab116100dc578063ba17feab14610864578063bb58a97314610884578063bdf4f83114610899578063bfc2fc35146108b95761038c565b8063b1b08f7114610527578063b3d514fb14610527578063b7df8b361461084f5761038c565b8063893d20e81161016f57806395d89b411161014957806395d89b41146107f0578063a9059cbb14610805578063a985ceef14610825578063acdf4f181461083a5761038c565b8063893d20e8146107a65780638a8c523c146107bb57806391ac5ea6146107d05761038c565b80636ebd0078116101ab5780636ebd00781461073c57806370a0823114610751578063715018a61461077157806383672f3e146107865761038c565b8063590ffdce146106dc5780635932ead1146106fc5780635cce86cd1461071c5761038c565b80632e8fa821116102b657806346ea7ac8116102545780634fb2e45d116102235780634fb2e45d146106675780634fbee1931461068757806350a8e016146106a7578063537df3b6146106bc5761038c565b806346ea7ac8146105fd5780634ada218b146106125780634bbb93eb146106275780634e718e48146106475761038c565b806336fddb041161029057806336fddb04146105935780633742d59b146105b35780633f3cf56c146105c8578063452ed4f1146105e85761038c565b80632e8fa8211461053c578063313ce5671461055157806332cde664146105735761038c565b80630fa604e41161032357806326003957116102fd57806326003957146104d05780632610eaca146104f257806328577751146105125780632b28fc7a146105275761038c565b80630fa604e41461048657806318160ddd1461049b57806323b872dd146104b05761038c565b806306fdde031161035f57806306fdde03146104025780630758d92414610424578063084e4f8a14610439578063095ea7b3146104665761038c565b806303fd2a45146103915780630445b667146103bc578063069d955f146103de5761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a66109d2565b6040516103b3919061315a565b60405180910390f35b3480156103c857600080fd5b506103d16109d8565b6040516103b39190613931565b3480156103ea57600080fd5b506103f36109de565b6040516103b3939291906138d7565b34801561040e57600080fd5b506104176109fe565b6040516103b39190613223565b34801561043057600080fd5b506103a6610a23565b34801561044557600080fd5b50610459610454366004612d57565b610a32565b6040516103b391906131e3565b34801561047257600080fd5b50610459610481366004612ea8565b610a54565b34801561049257600080fd5b506103d1610a6a565b3480156104a757600080fd5b506103d1610a8a565b3480156104bc57600080fd5b506104596104cb366004612e34565b610a90565b3480156104dc57600080fd5b506104f06104eb366004613095565b610b0a565b005b3480156104fe57600080fd5b506104f061050d366004612ed3565b610ba3565b34801561051e57600080fd5b506103d1610cea565b34801561053357600080fd5b506103d1610cf0565b34801561054857600080fd5b506103d1610cf6565b34801561055d57600080fd5b50610566610cfc565b6040516103b39190613984565b34801561057f57600080fd5b506104f061058e366004612fc8565b610d01565b34801561059f57600080fd5b506104f06105ae366004612e74565b610de6565b3480156105bf57600080fd5b506103a6610e3b565b3480156105d457600080fd5b506104f06105e3366004613095565b610e50565b3480156105f457600080fd5b506103a6610eed565b34801561060957600080fd5b506103d1610efc565b34801561061e57600080fd5b50610459610f02565b34801561063357600080fd5b506103d161064236600461307d565b610f0b565b34801561065357600080fd5b506104f061066236600461307d565b610f43565b34801561067357600080fd5b506104f0610682366004612d57565b610f93565b34801561069357600080fd5b506104596106a2366004612d57565b6110bc565b3480156106b357600080fd5b506104596110da565b3480156106c857600080fd5b506104f06106d7366004612d57565b6110e8565b3480156106e857600080fd5b506104f06106f7366004612e74565b611133565b34801561070857600080fd5b506104f0610717366004612f93565b611188565b34801561072857600080fd5b50610459610737366004612d57565b6111cc565b34801561074857600080fd5b506103d16111ea565b34801561075d57600080fd5b506103d161076c366004612d57565b611205565b34801561077d57600080fd5b506104f0611220565b34801561079257600080fd5b506104f06107a1366004612dc7565b6112af565b3480156107b257600080fd5b506103a6611329565b3480156107c757600080fd5b506104f0611338565b3480156107dc57600080fd5b506104f06107eb366004612d8f565b611430565b3480156107fc57600080fd5b50610417611488565b34801561081157600080fd5b50610459610820366004612ea8565b6114a7565b34801561083157600080fd5b506104596114be565b34801561084657600080fd5b506103a66114cc565b34801561085b57600080fd5b506104596114db565b34801561087057600080fd5b506104f061087f366004612d57565b6114e4565b34801561089057600080fd5b50610459611538565b3480156108a557600080fd5b506104f06108b4366004612f93565b611541565b3480156108c557600080fd5b506104f06108d4366004612fad565b61157e565b3480156108e557600080fd5b506108ee611605565b6040516103b397969594939291906138f5565b34801561090d57600080fd5b506104f061091c36600461300a565b611650565b34801561092d57600080fd5b506103d161093c366004612e22565b6117e1565b34801561094d57600080fd5b506104f061180c565b34801561096257600080fd5b5061096b61189a565b6040516103b39695949392919061316e565b34801561098957600080fd5b506104f0610998366004612d57565b6118cc565b3480156109a957600080fd5b506104f06109b83660046130e3565b61191a565b3480156109c957600080fd5b50610459611a59565b61dead81565b60165481565b600b5461ffff808216916201000081048216916401000000009091041683565b60408051808201909152600b81526a4275726e6f204275636b7360a81b602082015290565b600d546001600160a01b031681565b6001600160a01b03811660009081526009602052604090205460ff165b919050565b6000610a61338484611a67565b50600192915050565b6000610a786009600a613a84565b601d54610a859190613a1e565b905090565b600a5490565b6001600160a01b038316600090815260036020908152604080832033845290915281205460001914610af5576001600160a01b038416600090815260036020908152604080832033845290915281208054849290610aef908490613b97565b90915550505b610b00848484611b1b565b90505b9392505050565b6020546001600160a01b03163314610b3d5760405162461bcd60e51b8152600401610b3490613340565b60405180910390fd5b6064600a54610b4c9190613a1e565b8183600a54610b5b9190613b55565b610b659190613a1e565b1015610b835760405162461bcd60e51b8152600401610b34906132f0565b8082600a54610b929190613b55565b610b9c9190613a1e565b601d555050565b6020546001600160a01b03163314610bcd5760405162461bcd60e51b8152600401610b3490613340565b8051825114610bee5760405162461bcd60e51b8152600401610b3490613726565b60005b82518161ffff161015610ce557610c0a6009600a613a84565b828261ffff1681518110610c2e57634e487b7160e01b600052603260045260246000fd5b6020026020010151610c409190613b55565b610c4933611205565b1015610c5457600080fd5b610cd233848361ffff1681518110610c7c57634e487b7160e01b600052603260045260246000fd5b60200260200101516009600a610c929190613a84565b858561ffff1681518110610cb657634e487b7160e01b600052603260045260246000fd5b6020026020010151610cc89190613b55565b6000806001611ff2565b5080610cdd81613bae565b915050610bf1565b505050565b60195481565b6107d081565b60175481565b600990565b6020546001600160a01b03163314610d2b5760405162461bcd60e51b8152600401610b3490613340565b6107d08361ffff1611158015610d4757506107d08261ffff1611155b8015610d5957506107d08161ffff1611155b610d755760405162461bcd60e51b8152600401610b34906133f0565b610bb8610d8283856139e0565b61ffff161115610da45760405162461bcd60e51b8152600401610b34906134d7565b600b805461ffff191661ffff9485161763ffff0000191662010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b6020546001600160a01b03163314610e105760405162461bcd60e51b8152600401610b3490613340565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b601e546201000090046001600160a01b031681565b6020546001600160a01b03163314610e7a5760405162461bcd60e51b8152600401610b3490613340565b6103e8600a546005610e8c9190613b55565b610e969190613a1e565b8183600a54610ea59190613b55565b610eaf9190613a1e565b1015610ecd5760405162461bcd60e51b8152600401610b34906136c9565b8082600a54610edc9190613b55565b610ee69190613a1e565b601c555050565b600e546001600160a01b031681565b610bb881565b601e5460ff1681565b600e54600090612710908390610f29906001600160a01b0316611205565b610f339190613b55565b610f3d9190613a1e565b92915050565b6020546001600160a01b03163314610f6d5760405162461bcd60e51b8152600401610b3490613340565b6096811115610f8e5760405162461bcd60e51b8152600401610b34906138a7565b601955565b6020546001600160a01b03163314610fbd5760405162461bcd60e51b8152600401610b3490613340565b6001600160a01b038116610fe35760405162461bcd60e51b8152600401610b349061381f565b6001600160a01b03811661dead141561100e5760405162461bcd60e51b8152600401610b349061381f565b602054611025906001600160a01b03166000611133565b611030816001611133565b602054600090611048906001600160a01b0316611205565b111561106a57602054611068906001600160a01b031682610cc882611205565b505b602080546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b031660009081526007602052604090205460ff1690565b601e54610100900460ff1681565b6020546001600160a01b031633146111125760405162461bcd60e51b8152600401610b3490613340565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6020546001600160a01b0316331461115d5760405162461bcd60e51b8152600401610b3490613340565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6020546001600160a01b031633146111b25760405162461bcd60e51b8152600401610b3490613340565b601b80549115156101000261ff0019909216919091179055565b6001600160a01b031660009081526008602052604090205460ff1690565b60006111f86009600a613a84565b601c54610a859190613a1e565b6001600160a01b031660009081526001602052604090205490565b6020546001600160a01b0316331461124a5760405162461bcd60e51b8152600401610b3490613340565b602054611261906001600160a01b03166000611133565b602080546001600160a01b031981169091556040516001600160a01b039091169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6020546001600160a01b031633146112d95760405162461bcd60e51b8152600401610b3490613340565b600f80546001600160a01b039586166001600160a01b0319918216179091556010805494861694821694909417909355601180549285169284169290921790915560128054919093169116179055565b6020546001600160a01b031690565b6020546001600160a01b031633146113625760405162461bcd60e51b8152600401610b3490613340565b601e5460ff16156113855760405162461bcd60e51b8152600401610b34906137e8565b601e54610100900460ff166113ac5760405162461bcd60e51b8152600401610b3490613554565b43601a55601b805461ff001916610100179055601e805460ff19166001179055600e54612710906113e5906001600160a01b0316611205565b6113f090600a613b55565b6113fa9190613a1e565b601655600e5461271090611416906001600160a01b0316611205565b61142190601e613b55565b61142b9190613a1e565b601755565b6020546001600160a01b0316331461145a5760405162461bcd60e51b8152600401610b3490613340565b601380546001600160a01b039384166001600160a01b03199182161790915560148054929093169116179055565b6040805180820190915260058152644255434b5360d81b602082015290565b60006114b4338484611b1b565b5060019392505050565b601b54610100900460ff1681565b601f546001600160a01b031681565b60185460ff1681565b6020546001600160a01b0316331461150e5760405162461bcd60e51b8152600401610b3490613340565b601e80546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b601b5460ff1681565b6020546001600160a01b0316331461156b5760405162461bcd60e51b8152600401610b3490613340565b601b805460ff1916911515919091179055565b6020546001600160a01b031633146115a85760405162461bcd60e51b8152600401610b3490613340565b6015805461ff001916610100841515021790556018805460ff19168215151790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906115f99084906131e3565b60405180910390a15050565b600c5461ffff80821691620100008104821691640100000000820481169166010000000000008104821691600160401b8204811691600160501b8104821691600160601b9091041687565b6020546001600160a01b0316331461167a5760405162461bcd60e51b8152600401610b3490613340565b85600c60000160006101000a81548161ffff021916908361ffff16021790555084600c60000160026101000a81548161ffff021916908361ffff16021790555083600c60000160046101000a81548161ffff021916908361ffff16021790555082600c60000160066101000a81548161ffff021916908361ffff16021790555081600c60000160086101000a81548161ffff021916908361ffff16021790555080600c600001600a6101000a81548161ffff021916908361ffff16021790555080828486888a61174a91906139e0565b61175491906139e0565b61175e91906139e0565b61176891906139e0565b61177291906139e0565b600c805461ffff60601b1916600160601b61ffff93841602179055600b546000916117a691620100008104821691166139e0565b600c5461ffff9182169250600160601b9004168110156117d85760405162461bcd60e51b8152600401610b3490613639565b50505050505050565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6020546001600160a01b031633146118365760405162461bcd60e51b8152600401610b3490613340565b601e54610100900460ff161561185e5760405162461bcd60e51b8152600401610b34906135d5565b6020546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611897573d6000803e3d6000fd5b50565b600f546010546011546012546013546014546001600160a01b0395861695948516949384169392831692918216911686565b6020546001600160a01b031633146118f65760405162461bcd60e51b8152600401610b3490613340565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6020546001600160a01b031633146119445760405162461bcd60e51b8152600401610b3490613340565b8284600a546119539190613b55565b61195d9190613a1e565b601655600a548190611970908490613b55565b61197a9190613a1e565b601781905560165411156119a05760405162461bcd60e51b8152600401610b349061346a565b600e54612710906119b9906001600160a01b0316611205565b6119c4906096613b55565b6119ce9190613a1e565b60175411156119ef5760405162461bcd60e51b8152600401610b3490613427565b620f4240600a54611a009190613a1e565b6017541015611a215760405162461bcd60e51b8152600401610b3490613755565b620f4240600a54611a329190613a1e565b6016541015611a535760405162461bcd60e51b8152600401610b3490613755565b50505050565b601554610100900460ff1681565b6001600160a01b038316611a8d5760405162461bcd60e51b8152600401610b349061360c565b6001600160a01b038216611ab35760405162461bcd60e51b8152600401610b349061360c565b6001600160a01b0380841660008181526003602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611b0e908590613931565b60405180910390a3505050565b60006001600160a01b038416611b435760405162461bcd60e51b8152600401610b34906137a3565b6001600160a01b038316611b695760405162461bcd60e51b8152600401610b3490613276565b60008211611b895760405162461bcd60e51b8152600401610b3490613680565b601b5460ff1615611bdf576001600160a01b03831660009081526009602052604090205460ff16158015611bd657506001600160a01b03841660009081526009602052604090205460ff16155b611bdf57600080fd5b6001600160a01b0384166000908152600260205260408120548190819060ff1615611c0d5760019250611c3b565b6001600160a01b03861660009081526002602052604090205460ff1615611c375760019150611c3b565b5060015b611c458787612172565b15611d5957601e5460ff16611c6c5760405162461bcd60e51b8152600401610b34906132b9565b8280611c755750815b15611ce3576001600160a01b03871660009081526008602052604090205460ff16158015611cbc57506001600160a01b03861660009081526008602052604090205460ff16155b15611ce357601c54851115611ce35760405162461bcd60e51b8152600401610b349061350c565b600d546001600160a01b03878116911614801590611cff575081155b15611d59576001600160a01b03861660009081526008602052604090205460ff16611d5957601d5485611d3188611205565b611d3b9190613a06565b1115611d595760405162461bcd60e51b8152600401610b349061358b565b600e546001600160a01b038881169116148015611d845750600d546001600160a01b03878116911614155b15611dc157601a54611d97906002613a06565b4311611dc1576001600160a01b0386166000908152600960205260409020805460ff191660011790555b6020546001600160a01b03888116911614801590611ded57506020546001600160a01b03878116911614155b15611f4957601b54610100900460ff1615611f49576001600160a01b0387163014801590611e2457506001600160a01b0386163014155b8015611e3e5750600d546001600160a01b03888116911614155b8015611e585750600d546001600160a01b03878116911614155b15611e9c57600d546001600160a01b0316331480611e805750600e546001600160a01b031633145b611e9c5760405162461bcd60e51b8152600401610b349061387c565b6020546001600160a01b03878116911614801590611ec357506001600160a01b0386163014155b8015611edd5750600d546001600160a01b03878116911614155b8015611ef75750600e546001600160a01b03878116911614155b15611f4957611f084261012c613a06565b326000908152600560205260409020541115611f365760405162461bcd60e51b8152600401610b34906134ab565b3260009081526005602052604090204290555b8115611fd95760155460ff16611fd957601554610100900460ff1615611fd9576000611f7430611205565b90506016548110611fd75760175460185460ff1615611fc157601954600e546127109190611faa906001600160a01b0316611205565b611fb49190613b55565b611fbe9190613a1e565b90505b808210611fcc578091505b611fd582612248565b505b505b611fe7878787868686611ff2565b979650505050505050565b601e54600090610100900460ff166120525761200e8787612aaa565b601e54610100900460ff1615801561202b575061202b8787612172565b8015612035575081155b156120525760405162461bcd60e51b8152600401610b34906133ae565b6001600160a01b03871660009081526007602052604090205460019060ff168061209457506001600160a01b03871660009081526007602052604090205460ff165b1561209d575060005b6001600160a01b038816600090815260016020526040812080548892906120c5908490613b97565b9091555060009050816120d857866120e4565b6120e48987878a612b87565b6001600160a01b038916600090815260016020526040812080549293508392909190612111908490613a06565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161215b9190613931565b60405180910390a350600198975050505050505050565b6020546000906001600160a01b038481169116148015906121a157506020546001600160a01b03838116911614155b80156121b857506020546001600160a01b03163214155b80156121dd57506001600160a01b03821660009081526006602052604090205460ff16155b801561220257506001600160a01b03831660009081526006602052604090205460ff16155b801561221957506001600160a01b03821661dead14155b801561222d57506001600160a01b03821615155b8015610b0357506001600160a01b0383163014159392505050565b6015805460ff191660011790556040805160e081018252600c5461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000810483166060830152600160401b810483166080830152600160501b8104831660a0830152600160601b900490911660c082018190526122d05750612a9d565b306000908152600360209081526040808320600d546001600160a01b031684529091529020546000191461232957306000908152600360209081526040808320600d546001600160a01b03168452909152902060001990555b600060028260c0015161ffff16836000015161ffff168561234a9190613b55565b6123549190613a1e565b61235e9190613a1e565b9050600061236c8285613b97565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106123b457634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561240857600080fd5b505afa15801561241c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124409190612d73565b8160018151811061246157634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600d5460405163791ac94760e01b815291169063791ac947906124a790859060009086903090429060040161393a565b600060405180830381600087803b1580156124c157600080fd5b505af19250505080156124d2575060015b6124df5750505050612a9d565b476000836124ed8684613b55565b6124f79190613a1e565b905084156125d557600d5460125460405163f305d71960e01b81526001600160a01b039283169263f305d71992859261253f9230928c926000928392169042906004016131a8565b6060604051808303818588803b15801561255857600080fd5b505af193505050508015612589575060408051601f3d908101601f19168201909252612586918101906130b6565b60015b61259857505050505050612a9d565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450681866040516125cc929190613976565b60405180910390a15b6125df8183613b97565b915085600001518660c0018181516125f79190613b74565b61ffff90811690915260c088015160408901516000935083929182169161261f911686613b55565b6126299190613a1e565b905060008860c0015161ffff16896060015161ffff168661264a9190613b55565b6126549190613a1e565b601e549091506000906201000090046001600160a01b031661267757600061269e565b8960c0015161ffff168a6080015161ffff16876126949190613b55565b61269e9190613a1e565b601f549091506000906001600160a01b03166126bb5760006126e2565b8a60c0015161ffff168b60a0015161ffff16886126d89190613b55565b6126e29190613a1e565b9050600081836126f28688613a06565b6126fc9190613a06565b6127069190613a06565b6127109089613b97565b9050801561278257600f546040516001600160a01b03909116906188b890839061273990613157565b600060405180830381858888f193505050503d8060008114612777576040519150601f19603f3d011682016040523d82523d6000602084013e61277c565b606091505b50909650505b84156127f2576010546040516001600160a01b03909116906188b89087906127a990613157565b600060405180830381858888f193505050503d80600081146127e7576040519150601f19603f3d011682016040523d82523d6000602084013e6127ec565b606091505b50909650505b8315612862576011546040516001600160a01b03909116906188b890869061281990613157565b600060405180830381858888f193505050503d8060008114612857576040519150601f19603f3d011682016040523d82523d6000602084013e61285c565b606091505b50909650505b821561297d57600d60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156128b657600080fd5b505afa1580156128ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ee9190612d73565b8960008151811061290f57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601e548a5162010000909104909116908a90600190811061295657634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260135461297d918b91869116612c5c565b8115612a9057600d60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156129d157600080fd5b505afa1580156129e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a099190612d73565b89600081518110612a2a57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601f548a519116908a906001908110612a6957634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601454612a90918b91859116612c5c565b5050505050505050505050505b506015805460ff19169055565b601e54610100900460ff1615612ad25760405162461bcd60e51b8152600401610b349061336b565b612adc8282612172565b158015612af65750600e546001600160a01b038281169116145b15612b83576001600160a01b03821660009081526006602090815260408083208054600160ff19918216811790925560079093529281902080549092168317909155601e805461010061ff00199182168117909255601580549091169091179055517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257916115f9916131e3565b5050565b6000808415612b9d5750600b5461ffff16612bc7565b8315612bb65750600b5462010000900461ffff16612bc7565b50600b54640100000000900461ffff165b6000612710612bd68386613b55565b612be09190613a1e565b90508015612c52573060009081526001602052604081208054839290612c07908490613a06565b909155505060405130906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612c49908590613931565b60405180910390a35b611fe78185613b97565b600d5460405163b6f9de9560e01b81526001600160a01b039091169063b6f9de95908490612c95906000908890879042906004016131ee565b6000604051808303818588803b158015612cae57600080fd5b505af193505050508015612cc0575060015b610ce557610ce5565b600082601f830112612cd9578081fd5b81356020612cee612ce9836139bc565b613992565b8281528181019085830183850287018401881015612d0a578586fd5b855b85811015612d2857813584529284019290840190600101612d0c565b5090979650505050505050565b80358015158114610a4f57600080fd5b803561ffff81168114610a4f57600080fd5b600060208284031215612d68578081fd5b8135610b0381613bfc565b600060208284031215612d84578081fd5b8151610b0381613bfc565b60008060408385031215612da1578081fd5b8235612dac81613bfc565b91506020830135612dbc81613bfc565b809150509250929050565b60008060008060808587031215612ddc578182fd5b8435612de781613bfc565b93506020850135612df781613bfc565b92506040850135612e0781613bfc565b91506060850135612e1781613bfc565b939692955090935050565b60008060408385031215612da1578182fd5b600080600060608486031215612e48578283fd5b8335612e5381613bfc565b92506020840135612e6381613bfc565b929592945050506040919091013590565b60008060408385031215612e86578182fd5b8235612e9181613bfc565b9150612e9f60208401612d35565b90509250929050565b60008060408385031215612eba578182fd5b8235612ec581613bfc565b946020939093013593505050565b60008060408385031215612ee5578182fd5b823567ffffffffffffffff80821115612efc578384fd5b818501915085601f830112612f0f578384fd5b81356020612f1f612ce9836139bc565b82815281810190858301838502870184018b1015612f3b578889fd5b8896505b84871015612f66578035612f5281613bfc565b835260019690960195918301918301612f3f565b5096505086013592505080821115612f7c578283fd5b50612f8985828601612cc9565b9150509250929050565b600060208284031215612fa4578081fd5b610b0382612d35565b60008060408385031215612fbf578182fd5b612e9183612d35565b600080600060608486031215612fdc578081fd5b612fe584612d45565b9250612ff360208501612d45565b915061300160408501612d45565b90509250925092565b60008060008060008060c08789031215613022578384fd5b61302b87612d45565b955061303960208801612d45565b945061304760408801612d45565b935061305560608801612d45565b925061306360808801612d45565b915061307160a08801612d45565b90509295509295509295565b60006020828403121561308e578081fd5b5035919050565b600080604083850312156130a7578182fd5b50508035926020909101359150565b6000806000606084860312156130ca578081fd5b8351925060208401519150604084015190509250925092565b600080600080608085870312156130f8578182fd5b5050823594602084013594506040840135936060013592509050565b6000815180845260208085019450808401835b8381101561314c5781516001600160a01b031687529582019590820190600101613127565b509495945050505050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0396871681529486166020860152928516604085015290841660608401528316608083015290911660a082015260c00190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000858252608060208301526132076080830186613114565b6001600160a01b03949094166040830152506060015292915050565b6000602080835283518082850152825b8181101561324f57858101830151858201604001528201613233565b818111156132605783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526018908201527f54726164696e67206e6f742079657420656e61626c6564210000000000000000604082015260600190565b60208082526030908201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060408201526f37b3103a37ba30b61039bab838363c9760811b606082015260800190565b60208082526011908201527021b0b63632b9101e979e9037bbb732b91760791b604082015260600190565b60208082526023908201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60408201526232b21760e91b606082015260800190565b60208082526022908201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604082015261371760f11b606082015260800190565b60208082526017908201527f43616e6e6f7420657863656564206d6178696d756d732e000000000000000000604082015260600190565b60208082526023908201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060408201526228249760e91b606082015260800190565b60208082526021908201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746040820152601760f91b606082015260800190565b60208082526012908201527110dbdbdb191bdddb881a5b881959999958dd60721b604082015260600190565b6020808252818101527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e604082015260600190565b60208082526028908201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546040820152673c20b6b7bab73a1760c11b606082015260800190565b60208082526018908201527f4c6971756964697479206d7573742062652061646465642e0000000000000000604082015260600190565b6020808252602a908201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760408201526930b63632ba29b4bd329760b11b606082015260800190565b6020808252601c908201527f43616e6e6f742063616c6c206166746572206c69717569646974792e00000000604082015260600190565b60208082526013908201527245524332303a205a65726f204164647265737360681b604082015260600190565b60208082526027908201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60408201526636103332b2b99760c91b606082015260800190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b60208082526037908201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660408201527f6520302e3525206f6620746f74616c20737570706c792e000000000000000000606082015260800190565b6020808252601590820152742632b733ba3439903237903737ba1036b0ba31b41760591b604082015260600190565b6020808252602e908201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660408201526d103a37ba30b61039bab838363c9760911b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526018908201527f54726164696e6720616c726561647920656e61626c6564210000000000000000604082015260600190565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b6020808252601190820152704552523a20556e6973776170206f6e6c7960781b604082015260600190565b60208082526016908201527521b0b73737ba1039b2ba1030b137bb329018971a929760511b604082015260600190565b61ffff93841681529183166020830152909116604082015260600190565b61ffff978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b90815260200190565b600086825285602083015260a0604083015261395960a0830186613114565b6001600160a01b0394909416606083015250608001529392505050565b918252602082015260400190565b60ff91909116815260200190565b60405181810167ffffffffffffffff811182821017156139b4576139b4613be6565b604052919050565b600067ffffffffffffffff8211156139d6576139d6613be6565b5060209081020190565b600061ffff8083168185168083038211156139fd576139fd613bd0565b01949350505050565b60008219821115613a1957613a19613bd0565b500190565b600082613a3957634e487b7160e01b81526012600452602481fd5b500490565b80825b6001808611613a505750613a7b565b818704821115613a6257613a62613bd0565b80861615613a6f57918102915b9490941c938002613a41565b94509492505050565b6000610b0360001960ff851684600082613aa057506001610b03565b81613aad57506000610b03565b8160018114613ac35760028114613acd57613afa565b6001915050610b03565b60ff841115613ade57613ade613bd0565b6001841b915084821115613af457613af4613bd0565b50610b03565b5060208310610133831016604e8410600b8410161715613b2d575081810a83811115613b2857613b28613bd0565b610b03565b613b3a8484846001613a3e565b808604821115613b4c57613b4c613bd0565b02949350505050565b6000816000190483118215151615613b6f57613b6f613bd0565b500290565b600061ffff83811690831681811015613b8f57613b8f613bd0565b039392505050565b600082821015613ba957613ba9613bd0565b500390565b600061ffff80831681811415613bc657613bc6613bd0565b6001019392505050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461189757600080fdfea2646970667358221220a340cdfe345e2ce4f322c6a5eb2b084e512ae67939febd297d3788e7d3ecbe4664736f6c63430008000033

Deployed Bytecode

0x6080604052600436106103855760003560e01c8063590ffdce116101d1578063b1b08f7111610102578063cf847706116100a0578063f94aa1b41161006f578063f94aa1b414610956578063f9f92be41461097d578063fb78680d1461099d578063fdb78c0e146109bd5761038c565b8063cf847706146108d9578063d69153c914610901578063dd62ed3e14610921578063ee5d9c2d146109415761038c565b8063ba17feab116100dc578063ba17feab14610864578063bb58a97314610884578063bdf4f83114610899578063bfc2fc35146108b95761038c565b8063b1b08f7114610527578063b3d514fb14610527578063b7df8b361461084f5761038c565b8063893d20e81161016f57806395d89b411161014957806395d89b41146107f0578063a9059cbb14610805578063a985ceef14610825578063acdf4f181461083a5761038c565b8063893d20e8146107a65780638a8c523c146107bb57806391ac5ea6146107d05761038c565b80636ebd0078116101ab5780636ebd00781461073c57806370a0823114610751578063715018a61461077157806383672f3e146107865761038c565b8063590ffdce146106dc5780635932ead1146106fc5780635cce86cd1461071c5761038c565b80632e8fa821116102b657806346ea7ac8116102545780634fb2e45d116102235780634fb2e45d146106675780634fbee1931461068757806350a8e016146106a7578063537df3b6146106bc5761038c565b806346ea7ac8146105fd5780634ada218b146106125780634bbb93eb146106275780634e718e48146106475761038c565b806336fddb041161029057806336fddb04146105935780633742d59b146105b35780633f3cf56c146105c8578063452ed4f1146105e85761038c565b80632e8fa8211461053c578063313ce5671461055157806332cde664146105735761038c565b80630fa604e41161032357806326003957116102fd57806326003957146104d05780632610eaca146104f257806328577751146105125780632b28fc7a146105275761038c565b80630fa604e41461048657806318160ddd1461049b57806323b872dd146104b05761038c565b806306fdde031161035f57806306fdde03146104025780630758d92414610424578063084e4f8a14610439578063095ea7b3146104665761038c565b806303fd2a45146103915780630445b667146103bc578063069d955f146103de5761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a66109d2565b6040516103b3919061315a565b60405180910390f35b3480156103c857600080fd5b506103d16109d8565b6040516103b39190613931565b3480156103ea57600080fd5b506103f36109de565b6040516103b3939291906138d7565b34801561040e57600080fd5b506104176109fe565b6040516103b39190613223565b34801561043057600080fd5b506103a6610a23565b34801561044557600080fd5b50610459610454366004612d57565b610a32565b6040516103b391906131e3565b34801561047257600080fd5b50610459610481366004612ea8565b610a54565b34801561049257600080fd5b506103d1610a6a565b3480156104a757600080fd5b506103d1610a8a565b3480156104bc57600080fd5b506104596104cb366004612e34565b610a90565b3480156104dc57600080fd5b506104f06104eb366004613095565b610b0a565b005b3480156104fe57600080fd5b506104f061050d366004612ed3565b610ba3565b34801561051e57600080fd5b506103d1610cea565b34801561053357600080fd5b506103d1610cf0565b34801561054857600080fd5b506103d1610cf6565b34801561055d57600080fd5b50610566610cfc565b6040516103b39190613984565b34801561057f57600080fd5b506104f061058e366004612fc8565b610d01565b34801561059f57600080fd5b506104f06105ae366004612e74565b610de6565b3480156105bf57600080fd5b506103a6610e3b565b3480156105d457600080fd5b506104f06105e3366004613095565b610e50565b3480156105f457600080fd5b506103a6610eed565b34801561060957600080fd5b506103d1610efc565b34801561061e57600080fd5b50610459610f02565b34801561063357600080fd5b506103d161064236600461307d565b610f0b565b34801561065357600080fd5b506104f061066236600461307d565b610f43565b34801561067357600080fd5b506104f0610682366004612d57565b610f93565b34801561069357600080fd5b506104596106a2366004612d57565b6110bc565b3480156106b357600080fd5b506104596110da565b3480156106c857600080fd5b506104f06106d7366004612d57565b6110e8565b3480156106e857600080fd5b506104f06106f7366004612e74565b611133565b34801561070857600080fd5b506104f0610717366004612f93565b611188565b34801561072857600080fd5b50610459610737366004612d57565b6111cc565b34801561074857600080fd5b506103d16111ea565b34801561075d57600080fd5b506103d161076c366004612d57565b611205565b34801561077d57600080fd5b506104f0611220565b34801561079257600080fd5b506104f06107a1366004612dc7565b6112af565b3480156107b257600080fd5b506103a6611329565b3480156107c757600080fd5b506104f0611338565b3480156107dc57600080fd5b506104f06107eb366004612d8f565b611430565b3480156107fc57600080fd5b50610417611488565b34801561081157600080fd5b50610459610820366004612ea8565b6114a7565b34801561083157600080fd5b506104596114be565b34801561084657600080fd5b506103a66114cc565b34801561085b57600080fd5b506104596114db565b34801561087057600080fd5b506104f061087f366004612d57565b6114e4565b34801561089057600080fd5b50610459611538565b3480156108a557600080fd5b506104f06108b4366004612f93565b611541565b3480156108c557600080fd5b506104f06108d4366004612fad565b61157e565b3480156108e557600080fd5b506108ee611605565b6040516103b397969594939291906138f5565b34801561090d57600080fd5b506104f061091c36600461300a565b611650565b34801561092d57600080fd5b506103d161093c366004612e22565b6117e1565b34801561094d57600080fd5b506104f061180c565b34801561096257600080fd5b5061096b61189a565b6040516103b39695949392919061316e565b34801561098957600080fd5b506104f0610998366004612d57565b6118cc565b3480156109a957600080fd5b506104f06109b83660046130e3565b61191a565b3480156109c957600080fd5b50610459611a59565b61dead81565b60165481565b600b5461ffff808216916201000081048216916401000000009091041683565b60408051808201909152600b81526a4275726e6f204275636b7360a81b602082015290565b600d546001600160a01b031681565b6001600160a01b03811660009081526009602052604090205460ff165b919050565b6000610a61338484611a67565b50600192915050565b6000610a786009600a613a84565b601d54610a859190613a1e565b905090565b600a5490565b6001600160a01b038316600090815260036020908152604080832033845290915281205460001914610af5576001600160a01b038416600090815260036020908152604080832033845290915281208054849290610aef908490613b97565b90915550505b610b00848484611b1b565b90505b9392505050565b6020546001600160a01b03163314610b3d5760405162461bcd60e51b8152600401610b3490613340565b60405180910390fd5b6064600a54610b4c9190613a1e565b8183600a54610b5b9190613b55565b610b659190613a1e565b1015610b835760405162461bcd60e51b8152600401610b34906132f0565b8082600a54610b929190613b55565b610b9c9190613a1e565b601d555050565b6020546001600160a01b03163314610bcd5760405162461bcd60e51b8152600401610b3490613340565b8051825114610bee5760405162461bcd60e51b8152600401610b3490613726565b60005b82518161ffff161015610ce557610c0a6009600a613a84565b828261ffff1681518110610c2e57634e487b7160e01b600052603260045260246000fd5b6020026020010151610c409190613b55565b610c4933611205565b1015610c5457600080fd5b610cd233848361ffff1681518110610c7c57634e487b7160e01b600052603260045260246000fd5b60200260200101516009600a610c929190613a84565b858561ffff1681518110610cb657634e487b7160e01b600052603260045260246000fd5b6020026020010151610cc89190613b55565b6000806001611ff2565b5080610cdd81613bae565b915050610bf1565b505050565b60195481565b6107d081565b60175481565b600990565b6020546001600160a01b03163314610d2b5760405162461bcd60e51b8152600401610b3490613340565b6107d08361ffff1611158015610d4757506107d08261ffff1611155b8015610d5957506107d08161ffff1611155b610d755760405162461bcd60e51b8152600401610b34906133f0565b610bb8610d8283856139e0565b61ffff161115610da45760405162461bcd60e51b8152600401610b34906134d7565b600b805461ffff191661ffff9485161763ffff0000191662010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b6020546001600160a01b03163314610e105760405162461bcd60e51b8152600401610b3490613340565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b601e546201000090046001600160a01b031681565b6020546001600160a01b03163314610e7a5760405162461bcd60e51b8152600401610b3490613340565b6103e8600a546005610e8c9190613b55565b610e969190613a1e565b8183600a54610ea59190613b55565b610eaf9190613a1e565b1015610ecd5760405162461bcd60e51b8152600401610b34906136c9565b8082600a54610edc9190613b55565b610ee69190613a1e565b601c555050565b600e546001600160a01b031681565b610bb881565b601e5460ff1681565b600e54600090612710908390610f29906001600160a01b0316611205565b610f339190613b55565b610f3d9190613a1e565b92915050565b6020546001600160a01b03163314610f6d5760405162461bcd60e51b8152600401610b3490613340565b6096811115610f8e5760405162461bcd60e51b8152600401610b34906138a7565b601955565b6020546001600160a01b03163314610fbd5760405162461bcd60e51b8152600401610b3490613340565b6001600160a01b038116610fe35760405162461bcd60e51b8152600401610b349061381f565b6001600160a01b03811661dead141561100e5760405162461bcd60e51b8152600401610b349061381f565b602054611025906001600160a01b03166000611133565b611030816001611133565b602054600090611048906001600160a01b0316611205565b111561106a57602054611068906001600160a01b031682610cc882611205565b505b602080546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b031660009081526007602052604090205460ff1690565b601e54610100900460ff1681565b6020546001600160a01b031633146111125760405162461bcd60e51b8152600401610b3490613340565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6020546001600160a01b0316331461115d5760405162461bcd60e51b8152600401610b3490613340565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6020546001600160a01b031633146111b25760405162461bcd60e51b8152600401610b3490613340565b601b80549115156101000261ff0019909216919091179055565b6001600160a01b031660009081526008602052604090205460ff1690565b60006111f86009600a613a84565b601c54610a859190613a1e565b6001600160a01b031660009081526001602052604090205490565b6020546001600160a01b0316331461124a5760405162461bcd60e51b8152600401610b3490613340565b602054611261906001600160a01b03166000611133565b602080546001600160a01b031981169091556040516001600160a01b039091169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6020546001600160a01b031633146112d95760405162461bcd60e51b8152600401610b3490613340565b600f80546001600160a01b039586166001600160a01b0319918216179091556010805494861694821694909417909355601180549285169284169290921790915560128054919093169116179055565b6020546001600160a01b031690565b6020546001600160a01b031633146113625760405162461bcd60e51b8152600401610b3490613340565b601e5460ff16156113855760405162461bcd60e51b8152600401610b34906137e8565b601e54610100900460ff166113ac5760405162461bcd60e51b8152600401610b3490613554565b43601a55601b805461ff001916610100179055601e805460ff19166001179055600e54612710906113e5906001600160a01b0316611205565b6113f090600a613b55565b6113fa9190613a1e565b601655600e5461271090611416906001600160a01b0316611205565b61142190601e613b55565b61142b9190613a1e565b601755565b6020546001600160a01b0316331461145a5760405162461bcd60e51b8152600401610b3490613340565b601380546001600160a01b039384166001600160a01b03199182161790915560148054929093169116179055565b6040805180820190915260058152644255434b5360d81b602082015290565b60006114b4338484611b1b565b5060019392505050565b601b54610100900460ff1681565b601f546001600160a01b031681565b60185460ff1681565b6020546001600160a01b0316331461150e5760405162461bcd60e51b8152600401610b3490613340565b601e80546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b601b5460ff1681565b6020546001600160a01b0316331461156b5760405162461bcd60e51b8152600401610b3490613340565b601b805460ff1916911515919091179055565b6020546001600160a01b031633146115a85760405162461bcd60e51b8152600401610b3490613340565b6015805461ff001916610100841515021790556018805460ff19168215151790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906115f99084906131e3565b60405180910390a15050565b600c5461ffff80821691620100008104821691640100000000820481169166010000000000008104821691600160401b8204811691600160501b8104821691600160601b9091041687565b6020546001600160a01b0316331461167a5760405162461bcd60e51b8152600401610b3490613340565b85600c60000160006101000a81548161ffff021916908361ffff16021790555084600c60000160026101000a81548161ffff021916908361ffff16021790555083600c60000160046101000a81548161ffff021916908361ffff16021790555082600c60000160066101000a81548161ffff021916908361ffff16021790555081600c60000160086101000a81548161ffff021916908361ffff16021790555080600c600001600a6101000a81548161ffff021916908361ffff16021790555080828486888a61174a91906139e0565b61175491906139e0565b61175e91906139e0565b61176891906139e0565b61177291906139e0565b600c805461ffff60601b1916600160601b61ffff93841602179055600b546000916117a691620100008104821691166139e0565b600c5461ffff9182169250600160601b9004168110156117d85760405162461bcd60e51b8152600401610b3490613639565b50505050505050565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6020546001600160a01b031633146118365760405162461bcd60e51b8152600401610b3490613340565b601e54610100900460ff161561185e5760405162461bcd60e51b8152600401610b34906135d5565b6020546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611897573d6000803e3d6000fd5b50565b600f546010546011546012546013546014546001600160a01b0395861695948516949384169392831692918216911686565b6020546001600160a01b031633146118f65760405162461bcd60e51b8152600401610b3490613340565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6020546001600160a01b031633146119445760405162461bcd60e51b8152600401610b3490613340565b8284600a546119539190613b55565b61195d9190613a1e565b601655600a548190611970908490613b55565b61197a9190613a1e565b601781905560165411156119a05760405162461bcd60e51b8152600401610b349061346a565b600e54612710906119b9906001600160a01b0316611205565b6119c4906096613b55565b6119ce9190613a1e565b60175411156119ef5760405162461bcd60e51b8152600401610b3490613427565b620f4240600a54611a009190613a1e565b6017541015611a215760405162461bcd60e51b8152600401610b3490613755565b620f4240600a54611a329190613a1e565b6016541015611a535760405162461bcd60e51b8152600401610b3490613755565b50505050565b601554610100900460ff1681565b6001600160a01b038316611a8d5760405162461bcd60e51b8152600401610b349061360c565b6001600160a01b038216611ab35760405162461bcd60e51b8152600401610b349061360c565b6001600160a01b0380841660008181526003602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611b0e908590613931565b60405180910390a3505050565b60006001600160a01b038416611b435760405162461bcd60e51b8152600401610b34906137a3565b6001600160a01b038316611b695760405162461bcd60e51b8152600401610b3490613276565b60008211611b895760405162461bcd60e51b8152600401610b3490613680565b601b5460ff1615611bdf576001600160a01b03831660009081526009602052604090205460ff16158015611bd657506001600160a01b03841660009081526009602052604090205460ff16155b611bdf57600080fd5b6001600160a01b0384166000908152600260205260408120548190819060ff1615611c0d5760019250611c3b565b6001600160a01b03861660009081526002602052604090205460ff1615611c375760019150611c3b565b5060015b611c458787612172565b15611d5957601e5460ff16611c6c5760405162461bcd60e51b8152600401610b34906132b9565b8280611c755750815b15611ce3576001600160a01b03871660009081526008602052604090205460ff16158015611cbc57506001600160a01b03861660009081526008602052604090205460ff16155b15611ce357601c54851115611ce35760405162461bcd60e51b8152600401610b349061350c565b600d546001600160a01b03878116911614801590611cff575081155b15611d59576001600160a01b03861660009081526008602052604090205460ff16611d5957601d5485611d3188611205565b611d3b9190613a06565b1115611d595760405162461bcd60e51b8152600401610b349061358b565b600e546001600160a01b038881169116148015611d845750600d546001600160a01b03878116911614155b15611dc157601a54611d97906002613a06565b4311611dc1576001600160a01b0386166000908152600960205260409020805460ff191660011790555b6020546001600160a01b03888116911614801590611ded57506020546001600160a01b03878116911614155b15611f4957601b54610100900460ff1615611f49576001600160a01b0387163014801590611e2457506001600160a01b0386163014155b8015611e3e5750600d546001600160a01b03888116911614155b8015611e585750600d546001600160a01b03878116911614155b15611e9c57600d546001600160a01b0316331480611e805750600e546001600160a01b031633145b611e9c5760405162461bcd60e51b8152600401610b349061387c565b6020546001600160a01b03878116911614801590611ec357506001600160a01b0386163014155b8015611edd5750600d546001600160a01b03878116911614155b8015611ef75750600e546001600160a01b03878116911614155b15611f4957611f084261012c613a06565b326000908152600560205260409020541115611f365760405162461bcd60e51b8152600401610b34906134ab565b3260009081526005602052604090204290555b8115611fd95760155460ff16611fd957601554610100900460ff1615611fd9576000611f7430611205565b90506016548110611fd75760175460185460ff1615611fc157601954600e546127109190611faa906001600160a01b0316611205565b611fb49190613b55565b611fbe9190613a1e565b90505b808210611fcc578091505b611fd582612248565b505b505b611fe7878787868686611ff2565b979650505050505050565b601e54600090610100900460ff166120525761200e8787612aaa565b601e54610100900460ff1615801561202b575061202b8787612172565b8015612035575081155b156120525760405162461bcd60e51b8152600401610b34906133ae565b6001600160a01b03871660009081526007602052604090205460019060ff168061209457506001600160a01b03871660009081526007602052604090205460ff165b1561209d575060005b6001600160a01b038816600090815260016020526040812080548892906120c5908490613b97565b9091555060009050816120d857866120e4565b6120e48987878a612b87565b6001600160a01b038916600090815260016020526040812080549293508392909190612111908490613a06565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161215b9190613931565b60405180910390a350600198975050505050505050565b6020546000906001600160a01b038481169116148015906121a157506020546001600160a01b03838116911614155b80156121b857506020546001600160a01b03163214155b80156121dd57506001600160a01b03821660009081526006602052604090205460ff16155b801561220257506001600160a01b03831660009081526006602052604090205460ff16155b801561221957506001600160a01b03821661dead14155b801561222d57506001600160a01b03821615155b8015610b0357506001600160a01b0383163014159392505050565b6015805460ff191660011790556040805160e081018252600c5461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000810483166060830152600160401b810483166080830152600160501b8104831660a0830152600160601b900490911660c082018190526122d05750612a9d565b306000908152600360209081526040808320600d546001600160a01b031684529091529020546000191461232957306000908152600360209081526040808320600d546001600160a01b03168452909152902060001990555b600060028260c0015161ffff16836000015161ffff168561234a9190613b55565b6123549190613a1e565b61235e9190613a1e565b9050600061236c8285613b97565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106123b457634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561240857600080fd5b505afa15801561241c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124409190612d73565b8160018151811061246157634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600d5460405163791ac94760e01b815291169063791ac947906124a790859060009086903090429060040161393a565b600060405180830381600087803b1580156124c157600080fd5b505af19250505080156124d2575060015b6124df5750505050612a9d565b476000836124ed8684613b55565b6124f79190613a1e565b905084156125d557600d5460125460405163f305d71960e01b81526001600160a01b039283169263f305d71992859261253f9230928c926000928392169042906004016131a8565b6060604051808303818588803b15801561255857600080fd5b505af193505050508015612589575060408051601f3d908101601f19168201909252612586918101906130b6565b60015b61259857505050505050612a9d565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450681866040516125cc929190613976565b60405180910390a15b6125df8183613b97565b915085600001518660c0018181516125f79190613b74565b61ffff90811690915260c088015160408901516000935083929182169161261f911686613b55565b6126299190613a1e565b905060008860c0015161ffff16896060015161ffff168661264a9190613b55565b6126549190613a1e565b601e549091506000906201000090046001600160a01b031661267757600061269e565b8960c0015161ffff168a6080015161ffff16876126949190613b55565b61269e9190613a1e565b601f549091506000906001600160a01b03166126bb5760006126e2565b8a60c0015161ffff168b60a0015161ffff16886126d89190613b55565b6126e29190613a1e565b9050600081836126f28688613a06565b6126fc9190613a06565b6127069190613a06565b6127109089613b97565b9050801561278257600f546040516001600160a01b03909116906188b890839061273990613157565b600060405180830381858888f193505050503d8060008114612777576040519150601f19603f3d011682016040523d82523d6000602084013e61277c565b606091505b50909650505b84156127f2576010546040516001600160a01b03909116906188b89087906127a990613157565b600060405180830381858888f193505050503d80600081146127e7576040519150601f19603f3d011682016040523d82523d6000602084013e6127ec565b606091505b50909650505b8315612862576011546040516001600160a01b03909116906188b890869061281990613157565b600060405180830381858888f193505050503d8060008114612857576040519150601f19603f3d011682016040523d82523d6000602084013e61285c565b606091505b50909650505b821561297d57600d60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156128b657600080fd5b505afa1580156128ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ee9190612d73565b8960008151811061290f57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601e548a5162010000909104909116908a90600190811061295657634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260135461297d918b91869116612c5c565b8115612a9057600d60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156129d157600080fd5b505afa1580156129e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a099190612d73565b89600081518110612a2a57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601f548a519116908a906001908110612a6957634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601454612a90918b91859116612c5c565b5050505050505050505050505b506015805460ff19169055565b601e54610100900460ff1615612ad25760405162461bcd60e51b8152600401610b349061336b565b612adc8282612172565b158015612af65750600e546001600160a01b038281169116145b15612b83576001600160a01b03821660009081526006602090815260408083208054600160ff19918216811790925560079093529281902080549092168317909155601e805461010061ff00199182168117909255601580549091169091179055517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257916115f9916131e3565b5050565b6000808415612b9d5750600b5461ffff16612bc7565b8315612bb65750600b5462010000900461ffff16612bc7565b50600b54640100000000900461ffff165b6000612710612bd68386613b55565b612be09190613a1e565b90508015612c52573060009081526001602052604081208054839290612c07908490613a06565b909155505060405130906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612c49908590613931565b60405180910390a35b611fe78185613b97565b600d5460405163b6f9de9560e01b81526001600160a01b039091169063b6f9de95908490612c95906000908890879042906004016131ee565b6000604051808303818588803b158015612cae57600080fd5b505af193505050508015612cc0575060015b610ce557610ce5565b600082601f830112612cd9578081fd5b81356020612cee612ce9836139bc565b613992565b8281528181019085830183850287018401881015612d0a578586fd5b855b85811015612d2857813584529284019290840190600101612d0c565b5090979650505050505050565b80358015158114610a4f57600080fd5b803561ffff81168114610a4f57600080fd5b600060208284031215612d68578081fd5b8135610b0381613bfc565b600060208284031215612d84578081fd5b8151610b0381613bfc565b60008060408385031215612da1578081fd5b8235612dac81613bfc565b91506020830135612dbc81613bfc565b809150509250929050565b60008060008060808587031215612ddc578182fd5b8435612de781613bfc565b93506020850135612df781613bfc565b92506040850135612e0781613bfc565b91506060850135612e1781613bfc565b939692955090935050565b60008060408385031215612da1578182fd5b600080600060608486031215612e48578283fd5b8335612e5381613bfc565b92506020840135612e6381613bfc565b929592945050506040919091013590565b60008060408385031215612e86578182fd5b8235612e9181613bfc565b9150612e9f60208401612d35565b90509250929050565b60008060408385031215612eba578182fd5b8235612ec581613bfc565b946020939093013593505050565b60008060408385031215612ee5578182fd5b823567ffffffffffffffff80821115612efc578384fd5b818501915085601f830112612f0f578384fd5b81356020612f1f612ce9836139bc565b82815281810190858301838502870184018b1015612f3b578889fd5b8896505b84871015612f66578035612f5281613bfc565b835260019690960195918301918301612f3f565b5096505086013592505080821115612f7c578283fd5b50612f8985828601612cc9565b9150509250929050565b600060208284031215612fa4578081fd5b610b0382612d35565b60008060408385031215612fbf578182fd5b612e9183612d35565b600080600060608486031215612fdc578081fd5b612fe584612d45565b9250612ff360208501612d45565b915061300160408501612d45565b90509250925092565b60008060008060008060c08789031215613022578384fd5b61302b87612d45565b955061303960208801612d45565b945061304760408801612d45565b935061305560608801612d45565b925061306360808801612d45565b915061307160a08801612d45565b90509295509295509295565b60006020828403121561308e578081fd5b5035919050565b600080604083850312156130a7578182fd5b50508035926020909101359150565b6000806000606084860312156130ca578081fd5b8351925060208401519150604084015190509250925092565b600080600080608085870312156130f8578182fd5b5050823594602084013594506040840135936060013592509050565b6000815180845260208085019450808401835b8381101561314c5781516001600160a01b031687529582019590820190600101613127565b509495945050505050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0396871681529486166020860152928516604085015290841660608401528316608083015290911660a082015260c00190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000858252608060208301526132076080830186613114565b6001600160a01b03949094166040830152506060015292915050565b6000602080835283518082850152825b8181101561324f57858101830151858201604001528201613233565b818111156132605783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526018908201527f54726164696e67206e6f742079657420656e61626c6564210000000000000000604082015260600190565b60208082526030908201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060408201526f37b3103a37ba30b61039bab838363c9760811b606082015260800190565b60208082526011908201527021b0b63632b9101e979e9037bbb732b91760791b604082015260600190565b60208082526023908201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60408201526232b21760e91b606082015260800190565b60208082526022908201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604082015261371760f11b606082015260800190565b60208082526017908201527f43616e6e6f7420657863656564206d6178696d756d732e000000000000000000604082015260600190565b60208082526023908201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060408201526228249760e91b606082015260800190565b60208082526021908201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746040820152601760f91b606082015260800190565b60208082526012908201527110dbdbdb191bdddb881a5b881959999958dd60721b604082015260600190565b6020808252818101527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e604082015260600190565b60208082526028908201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546040820152673c20b6b7bab73a1760c11b606082015260800190565b60208082526018908201527f4c6971756964697479206d7573742062652061646465642e0000000000000000604082015260600190565b6020808252602a908201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760408201526930b63632ba29b4bd329760b11b606082015260800190565b6020808252601c908201527f43616e6e6f742063616c6c206166746572206c69717569646974792e00000000604082015260600190565b60208082526013908201527245524332303a205a65726f204164647265737360681b604082015260600190565b60208082526027908201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60408201526636103332b2b99760c91b606082015260800190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b60208082526037908201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660408201527f6520302e3525206f6620746f74616c20737570706c792e000000000000000000606082015260800190565b6020808252601590820152742632b733ba3439903237903737ba1036b0ba31b41760591b604082015260600190565b6020808252602e908201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660408201526d103a37ba30b61039bab838363c9760911b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526018908201527f54726164696e6720616c726561647920656e61626c6564210000000000000000604082015260600190565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b6020808252601190820152704552523a20556e6973776170206f6e6c7960781b604082015260600190565b60208082526016908201527521b0b73737ba1039b2ba1030b137bb329018971a929760511b604082015260600190565b61ffff93841681529183166020830152909116604082015260600190565b61ffff978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b90815260200190565b600086825285602083015260a0604083015261395960a0830186613114565b6001600160a01b0394909416606083015250608001529392505050565b918252602082015260400190565b60ff91909116815260200190565b60405181810167ffffffffffffffff811182821017156139b4576139b4613be6565b604052919050565b600067ffffffffffffffff8211156139d6576139d6613be6565b5060209081020190565b600061ffff8083168185168083038211156139fd576139fd613bd0565b01949350505050565b60008219821115613a1957613a19613bd0565b500190565b600082613a3957634e487b7160e01b81526012600452602481fd5b500490565b80825b6001808611613a505750613a7b565b818704821115613a6257613a62613bd0565b80861615613a6f57918102915b9490941c938002613a41565b94509492505050565b6000610b0360001960ff851684600082613aa057506001610b03565b81613aad57506000610b03565b8160018114613ac35760028114613acd57613afa565b6001915050610b03565b60ff841115613ade57613ade613bd0565b6001841b915084821115613af457613af4613bd0565b50610b03565b5060208310610133831016604e8410600b8410161715613b2d575081810a83811115613b2857613b28613bd0565b610b03565b613b3a8484846001613a3e565b808604821115613b4c57613b4c613bd0565b02949350505050565b6000816000190483118215151615613b6f57613b6f613bd0565b500290565b600061ffff83811690831681811015613b8f57613b8f613bd0565b039392505050565b600082821015613ba957613ba9613bd0565b500390565b600061ffff80831681811415613bc657613bc6613bd0565b6001019392505050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461189757600080fdfea2646970667358221220a340cdfe345e2ce4f322c6a5eb2b084e512ae67939febd297d3788e7d3ecbe4664736f6c63430008000033

Deployed Bytecode Sourcemap

3799:23129:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5625:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6504:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;4972:111::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;11069:80::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;5564:26::-;;;;;;;;;;;;;:::i;26805:120::-;;;;;;;;;;-1:-1:-1;26805:120:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11677:161::-;;;;;;;;;;-1:-1:-1;11677:161:0;;;;;:::i;:::-;;:::i;15616:114::-;;;;;;;;;;;;;:::i;10804:83::-;;;;;;;;;;;;;:::i;12164:306::-;;;;;;;;;;-1:-1:-1;12164:306:0;;;;;:::i;:::-;;:::i;15228:264::-;;;;;;;;;;-1:-1:-1;15228:264:0;;;;;:::i;:::-;;:::i;:::-;;24767:425;;;;;;;;;;-1:-1:-1;24767:425:0;;;;;:::i;:::-;;:::i;6612:33::-;;;;;;;;;;;;;:::i;5308:42::-;;;;;;;;;;;;;:::i;6539:25::-;;;;;;;;;;;;;:::i;10893:80::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;13264:488::-;;;;;;;;;;-1:-1:-1;13264:488:0;;;;;:::i;:::-;;:::i;12753:140::-;;;;;;;;;;-1:-1:-1;12753:140:0;;;;;:::i;:::-;;:::i;6980:20::-;;;;;;;;;;;;;:::i;14947:273::-;;;;;;;;;;-1:-1:-1;14947:273:0;;;;;:::i;:::-;;:::i;5597:21::-;;;;;;;;;;;;;:::i;5461:46::-;;;;;;;;;;;;;:::i;6894:34::-;;;;;;;;;;;;;:::i;15738:189::-;;;;;;;;;;-1:-1:-1;15738:189:0;;;;;:::i;:::-;;:::i;16642:217::-;;;;;;;;;;-1:-1:-1;16642:217:0;;;;;:::i;:::-;;:::i;9562:654::-;;;;;;;;;;-1:-1:-1;9562:654:0;;;;;:::i;:::-;;:::i;12618:127::-;;;;;;;;;;-1:-1:-1;12618:127:0;;;;;:::i;:::-;;:::i;6935:36::-;;;;;;;;;;;;;:::i;26685:108::-;;;;;;;;;;-1:-1:-1;26685:108:0;;;;;:::i;:::-;;:::i;12901:134::-;;;;;;;;;;-1:-1:-1;12901:134:0;;;;;:::i;:::-;;:::i;13043:103::-;;;;;;;;;;-1:-1:-1;13043:103:0;;;;;:::i;:::-;;:::i;12478:132::-;;;;;;;;;;-1:-1:-1;12478:132:0;;;;;:::i;:::-;;:::i;15500:108::-;;;;;;;;;;;;;:::i;11379:117::-;;;;;;;;;;-1:-1:-1;11379:117:0;;;;;:::i;:::-;;:::i;10224:225::-;;;;;;;;;;;;;:::i;14374:355::-;;;;;;;;;;-1:-1:-1;14374:355:0;;;;;:::i;:::-;;:::i;11155:79::-;;;;;;;;;;;;;:::i;24174:395::-;;;;;;;;;;;;;:::i;14737:202::-;;;;;;;;;;-1:-1:-1;14737:202:0;;;;;:::i;:::-;;:::i;10979:84::-;;;;;;;;;;;;;:::i;11504:165::-;;;;;;;;;;-1:-1:-1;11504:165:0;;;;;:::i;:::-;;:::i;6728:35::-;;;;;;;;;;;;;:::i;7007:38::-;;;;;;;;;;;;;:::i;6571:34::-;;;;;;;;;;;;;:::i;17138:86::-;;;;;;;;;;-1:-1:-1;17138:86:0;;;;;:::i;:::-;;:::i;6688:33::-;;;;;;;;;;;;;:::i;13154:102::-;;;;;;;;;;-1:-1:-1;13154:102:0;;;;;:::i;:::-;;:::i;16867:263::-;;;;;;;;;;-1:-1:-1;16867:263:0;;;;;:::i;:::-;;:::i;5092:207::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;13760:606::-;;;;;;;;;;-1:-1:-1;13760:606:0;;;;;:::i;:::-;;:::i;11240:133::-;;;;;;;;;;-1:-1:-1;11240:133:0;;;;;:::i;:::-;;:::i;24577:182::-;;;;;;;;;;;;;:::i;5947:480::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;26576:97::-;;;;;;;;;;-1:-1:-1;26576:97:0;;;;;:::i;:::-;;:::i;15935:699::-;;;;;;;;;;-1:-1:-1;15935:699:0;;;;;:::i;:::-;;:::i;6458:39::-;;;;;;;;;;;;;:::i;5625:73::-;5656:42;5625:73;:::o;6504:28::-;;;;:::o;4972:111::-;;;;;;;;;;;;;;;;;;;;:::o;11069:80::-;11141:5;;;;;;;;;;;;-1:-1:-1;;;11141:5:0;;;;11069:80;:::o;5564:26::-;;;-1:-1:-1;;;;;5564:26:0;;:::o;26805:120::-;-1:-1:-1;;;;;26903:14:0;;26879:4;26903:14;;;:4;:14;;;;;;;;26805:120;;;;:::o;11677:161::-;11754:4;11771:37;11780:10;11792:7;11801:6;11771:8;:37::i;:::-;-1:-1:-1;11826:4:0;11677:161;;;;:::o;15616:114::-;15663:7;15708:13;4582:1;15708:2;:13;:::i;:::-;15690:14;;:32;;;;:::i;:::-;15683:39;;15616:114;:::o;10804:83::-;10877:7;;10804:83;:::o;12164:306::-;-1:-1:-1;;;;;12285:19:0;;12264:4;12285:19;;;:11;:19;;;;;;;;12305:10;12285:31;;;;;;;;-1:-1:-1;;12285:52:0;12281:126;;-1:-1:-1;;;;;12354:19:0;;;;;;:11;:19;;;;;;;;12374:10;12354:31;;;;;;;:41;;12389:6;;12354:19;:41;;12389:6;;12354:41;:::i;:::-;;;;-1:-1:-1;;12281:126:0;12426:36;12436:6;12444:9;12455:6;12426:9;:36::i;:::-;12419:43;;12164:306;;;;;;:::o;15228:264::-;7410:6;;-1:-1:-1;;;;;7410:6:0;7420:10;7410:20;7402:50;;;;-1:-1:-1;;;7402:50:0;;;;;;;:::i;:::-;;;;;;;;;15370:3:::1;15360:7;;:13;;;;:::i;:::-;15348:7;15337;15327;;:17;;;;:::i;:::-;15326:29;;;;:::i;:::-;:48;;15318:109;;;;-1:-1:-1::0;;;15318:109:0::1;;;;;;;:::i;:::-;15477:7;15466;15456;;:17;;;;:::i;:::-;15455:29;;;;:::i;:::-;15438:14;:46:::0;-1:-1:-1;;15228:264:0:o;24767:425::-;7410:6;;-1:-1:-1;;;;;7410:6:0;7420:10;7410:20;7402:50;;;;-1:-1:-1;;;7402:50:0;;;;;;;:::i;:::-;24902:7:::1;:14;24883:8;:15;:33;24875:67;;;;-1:-1:-1::0;;;24875:67:0::1;;;;;;;:::i;:::-;24958:8;24953:232;24976:8;:15;24972:1;:19;;;24953:232;;;25057:13;4582:1;25057:2;:13;:::i;:::-;25046:7;25054:1;25046:10;;;;;;;;-1:-1:-1::0;;;25046:10:0::1;;;;;;;;;;;;;;;:24;;;;:::i;:::-;25021:21;25031:10;25021:9;:21::i;:::-;:49;;25013:58;;;::::0;::::1;;25086:87;25103:10;25115:8;25124:1;25115:11;;;;;;;;-1:-1:-1::0;;;25115:11:0::1;;;;;;;;;;;;;;;4582:1;25139:2;:13;;;;:::i;:::-;25128:7;25136:1;25128:10;;;;;;;;-1:-1:-1::0;;;25128:10:0::1;;;;;;;;;;;;;;;:24;;;;:::i;:::-;25154:5;25161::::0;25168:4:::1;25086:16;:87::i;:::-;-1:-1:-1::0;24993:3:0;::::1;::::0;::::1;:::i;:::-;;;;24953:232;;;;24767:425:::0;;:::o;6612:33::-;;;;:::o;5308:42::-;5346:4;5308:42;:::o;6539:25::-;;;;:::o;10893:80::-;4582:1;10893:80;:::o;13264:488::-;7410:6;;-1:-1:-1;;;;;7410:6:0;7420:10;7410:20;7402:50;;;;-1:-1:-1;;;7402:50:0;;;;;;;:::i;:::-;5346:4:::1;13371:6;:21;;;;:65;;;;;5396:4;13413:7;:23;;;;13371:65;:117;;;;;5450:4;13457:11;:31;;;;13371:117;13363:170;;;;-1:-1:-1::0;;;13363:170:0::1;;;;;;;:::i;:::-;5503:4;13552:16;13561:7:::0;13552:6;:16:::1;:::i;:::-;:35;;;;13544:80;;;;-1:-1:-1::0;;;13544:80:0::1;;;;;;;:::i;:::-;13635:9;:25:::0;;-1:-1:-1;;13635:25:0::1;;::::0;;::::1;;-1:-1:-1::0;;13671:27:0::1;::::0;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;13709:35:0::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;13264:488::o;12753:140::-;7410:6;;-1:-1:-1;;;;;7410:6:0;7420:10;7410:20;7402:50;;;;-1:-1:-1;;;7402:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12845:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;12845:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;12753:140::o;6980:20::-;;;;;;-1:-1:-1;;;;;6980:20:0;;:::o;14947:273::-;7410:6;;-1:-1:-1;;;;;7410:6:0;7420:10;7410:20;7402:50;;;;-1:-1:-1;;;7402:50:0;;;;;;;:::i;:::-;15092:4:::1;15078:7;;15088:1;15078:11;;;;:::i;:::-;:18;;;;:::i;:::-;15066:7;15055;15045;;:17;;;;:::i;:::-;15044:29;;;;:::i;:::-;:53;;15036:121;;;;-1:-1:-1::0;;;15036:121:0::1;;;;;;;:::i;:::-;15205:7;15194;15184;;:17;;;;:::i;:::-;15183:29;;;;:::i;:::-;15168:12;:44:::0;-1:-1:-1;;14947:273:0:o;5597:21::-;;;-1:-1:-1;;;;;5597:21:0;;:::o;5461:46::-;5503:4;5461:46;:::o;6894:34::-;;;;;;:::o;15738:189::-;15867:6;;15829:7;;5550:5;;15877:21;;15857:17;;-1:-1:-1;;;;;15867:6:0;15857:9;:17::i;:::-;:41;;;;:::i;:::-;15856:62;;;;:::i;:::-;15849:70;15738:189;-1:-1:-1;;15738:189:0:o;16642:217::-;7410:6;;-1:-1:-1;;;;;7410:6:0;7420:10;7410:20;7402:50;;;;-1:-1:-1;;;7402:50:0;;;;;;;:::i;:::-;16772:3:::1;16746:22;:29;;16738:64;;;;-1:-1:-1::0;;;16738:64:0::1;;;;;;;:::i;:::-;16813:13;:38:::0;16642:217::o;9562:654::-;7410:6;;-1:-1:-1;;;;;7410:6:0;7420:10;7410:20;7402:50;;;;-1:-1:-1;;;7402:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9641:22:0;::::1;9633:96;;;;-1:-1:-1::0;;;9633:96:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;9748:16:0;::::1;5656:42;9748:16;;9740:90;;;;-1:-1:-1::0;;;9740:90:0::1;;;;;;;:::i;:::-;9861:6;::::0;9841:34:::1;::::0;-1:-1:-1;;;;;9861:6:0::1;;9841:19;:34::i;:::-;9886:35;9906:8;9916:4;9886:19;:35::i;:::-;9956:6;::::0;9966:1:::1;::::0;9946:17:::1;::::0;-1:-1:-1;;;;;9956:6:0::1;9946:9;:17::i;:::-;:21;9942:127;;;10001:6;::::0;9984:73:::1;::::0;-1:-1:-1;;;;;10001:6:0::1;10009:8:::0;10019:17:::1;10001:6:::0;10019:9:::1;:17::i;9984:73::-;;9942:127;10108:6;::::0;;-1:-1:-1;;;;;10125:17:0;;::::1;-1:-1:-1::0;;;;;;10125:17:0;::::1;::::0;::::1;::::0;;;10158:40:::1;::::0;10108:6;::::1;::::0;10125:17;10108:6;;10158:40:::1;::::0;10089:16:::1;::::0;10158:40:::1;7463:1;9562:654:::0;:::o;12618:127::-;-1:-1:-1;;;;;12709:28:0;12685:4;12709:28;;;:19;:28;;;;;;;;;12618:127::o;6935:36::-;;;;;;;;;:::o;26685:108::-;7410:6;;-1:-1:-1;;;;;7410:6:0;7420:10;7410:20;7402:50;;;;-1:-1:-1;;;7402:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26763:14:0::1;26780:5;26763:14:::0;;;:4:::1;:14;::::0;;;;:22;;-1:-1:-1;;26763:22:0::1;::::0;;26685:108::o;12901:134::-;7410:6;;-1:-1:-1;;;;;7410:6:0;7420:10;7410:20;7402:50;;;;-1:-1:-1;;;7402:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12989:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;12989:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;12901:134::o;13043:103::-;7410:6;;-1:-1:-1;;;;;7410:6:0;7420:10;7410:20;7402:50;;;;-1:-1:-1;;;7402:50:0;;;;;;;:::i;:::-;13115:15:::1;:23:::0;;;::::1;;;;-1:-1:-1::0;;13115:23:0;;::::1;::::0;;;::::1;::::0;;13043:103::o;12478:132::-;-1:-1:-1;;;;;12572:30:0;12548:4;12572:30;;;:21;:30;;;;;;;;;12478:132::o;15500:108::-;15543:7;15586:13;4582:1;15586:2;:13;:::i;:::-;15570:12;;:30;;;;:::i;11379:117::-;-1:-1:-1;;;;;11472:16:0;11445:7;11472:16;;;:7;:16;;;;;;;11379:117::o;10224:225::-;7410:6;;-1:-1:-1;;;;;7410:6:0;7420:10;7410:20;7402:50;;;;-1:-1:-1;;;7402:50:0;;;;;;;:::i;:::-;10303:6:::1;::::0;10283:34:::1;::::0;-1:-1:-1;;;;;10303:6:0::1;;10283:19;:34::i;:::-;10347:6;::::0;;-1:-1:-1;;;;;;10364:19:0;::::1;::::0;;;10399:42:::1;::::0;-1:-1:-1;;;;;10347:6:0;;::::1;::::0;10328:16:::1;::::0;10347:6;;10399:42:::1;::::0;10328:16;;10399:42:::1;7463:1;10224:225::o:0;14374:355::-;7410:6;;-1:-1:-1;;;;;7410:6:0;7420:10;7410:20;7402:50;;;;-1:-1:-1;;;7402:50:0;;;;;;;:::i;:::-;14528:11:::1;:42:::0;;-1:-1:-1;;;;;14528:42:0;;::::1;-1:-1:-1::0;;;;;;14528:42:0;;::::1;;::::0;;;14581:23;:46;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;14638:15;:30;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;14679:21;:42;;;;;::::1;::::0;::::1;;::::0;;14374:355::o;11155:79::-;11225:6;;-1:-1:-1;;;;;11225:6:0;11155:79;:::o;24174:395::-;7410:6;;-1:-1:-1;;;;;7410:6:0;7420:10;7410:20;7402:50;;;;-1:-1:-1;;;7402:50:0;;;;;;;:::i;:::-;24236:14:::1;::::0;::::1;;24235:15;24227:52;;;;-1:-1:-1::0;;;24227:52:0::1;;;;;;;:::i;:::-;24298:16;::::0;::::1;::::0;::::1;;;24290:53;;;;-1:-1:-1::0;;;24290:53:0::1;;;;;;;:::i;:::-;24369:12;24355:11;:26:::0;24392:15:::1;:22:::0;;-1:-1:-1;;24392:22:0::1;;;::::0;;24425:14:::1;:21:::0;;-1:-1:-1;;24425:21:0::1;24410:4;24425:21;::::0;;24484:6:::1;::::0;24500:5:::1;::::0;24474:17:::1;::::0;-1:-1:-1;;;;;24484:6:0::1;24474:9;:17::i;:::-;:22;::::0;24494:2:::1;24474:22;:::i;:::-;24473:32;;;;:::i;:::-;24457:13;:48:::0;24540:6:::1;::::0;24556:5:::1;::::0;24530:17:::1;::::0;-1:-1:-1;;;;;24540:6:0::1;24530:9;:17::i;:::-;:22;::::0;24550:2:::1;24530:22;:::i;:::-;24529:32;;;;:::i;:::-;24516:10;:45:::0;24174:395::o;14737:202::-;7410:6;;-1:-1:-1;;;;;7410:6:0;7420:10;7410:20;7402:50;;;;-1:-1:-1;;;7402:50:0;;;;;;;:::i;:::-;14848:17;:34;;-1:-1:-1;;;;;14848:34:0;;::::1;-1:-1:-1::0;;;;;;14848:34:0;;::::1;;::::0;;;14893:19;:38;;;;;::::1;::::0;::::1;;::::0;;14737:202::o;10979:84::-;11053:7;;;;;;;;;;;;-1:-1:-1;;;11053:7:0;;;;10979:84;:::o;11504:165::-;11582:4;11599:40;11609:10;11621:9;11632:6;11599:9;:40::i;:::-;-1:-1:-1;11657:4:0;;11504:165;-1:-1:-1;;;11504:165:0:o;6728:35::-;;;;;;;;;:::o;7007:38::-;;;-1:-1:-1;;;;;7007:38:0;;:::o;6571:34::-;;;;;;:::o;17138:86::-;7410:6;;-1:-1:-1;;;;;7410:6:0;7420:10;7410:20;7402:50;;;;-1:-1:-1;;;7402:50:0;;;;;;;:::i;:::-;17202:5:::1;:14:::0;;-1:-1:-1;;;;;17202:14:0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;17202:14:0;;::::1;::::0;;;::::1;::::0;;17138:86::o;6688:33::-;;;;;;:::o;13154:102::-;7410:6;;-1:-1:-1;;;;;7410:6:0;7420:10;7410:20;7402:50;;;;-1:-1:-1;;;7402:50:0;;;;;;;:::i;:::-;13227:13:::1;:21:::0;;-1:-1:-1;;13227:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13154:102::o;16867:263::-;7410:6;;-1:-1:-1;;;;;7410:6:0;7420:10;7410:20;7402:50;;;;-1:-1:-1;;;7402:50:0;;;;;;;:::i;:::-;16976:19:::1;:33:::0;;-1:-1:-1;;16976:33:0::1;;::::0;::::1;;;;::::0;;17020:22:::1;:47:::0;;-1:-1:-1;;17020:47:0::1;::::0;::::1;;;::::0;;17083:39:::1;::::0;::::1;::::0;::::1;::::0;16976:33;;17083:39:::1;:::i;:::-;;;;;;;;16867:263:::0;;:::o;5092:207::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5092:207:0;;;;;-1:-1:-1;;;5092:207:0;;;;;-1:-1:-1;;;5092:207:0;;;;;:::o;13760:606::-;7410:6;;-1:-1:-1;;;;;7410:6:0;7420:10;7410:20;7402:50;;;;-1:-1:-1;;;7402:50:0;;;;;;;:::i;:::-;13927:9:::1;13907:7;:17;;;:29;;;;;;;;;;;;;;;;;;13967:9;13947:7;:17;;;:29;;;;;;;;;;;;;;;;;;14009:11;13987:7;:19;;;:33;;;;;;;;;;;;;;;;;;14045:3;14031:7;:11;;;:17;;;;;;;;;;;;;;;;;;14075:5;14059:7;:13;;;:21;;;;;;;;;;;;;;;;;;14109:7;14091;:15;;;:25;;;;;;;;;;;;;;;;;;14199:7;14191:5;14185:3;14171:11;14159:9;14147;:21;;;;:::i;:::-;:35;;;;:::i;:::-;:41;;;;:::i;:::-;:49;;;;:::i;:::-;:59;;;;:::i;:::-;14127:7;:79:::0;;-1:-1:-1;;;;14127:79:0::1;-1:-1:-1::0;;;14127:79:0::1;::::0;;::::1;;;::::0;;14252:9:::1;:17:::0;-1:-1:-1;;14233:36:0::1;::::0;14252:17;;::::1;::::0;::::1;::::0;14233:16:::1;:36;:::i;:::-;14288:7;:17:::0;14217:52:::1;::::0;;::::1;::::0;-1:-1:-1;;;;14288:17:0;::::1;;:26:::0;-1:-1:-1;14288:26:0::1;14280:78;;;;-1:-1:-1::0;;;14280:78:0::1;;;;;;;:::i;:::-;7463:1;13760:606:::0;;;;;;:::o;11240:133::-;-1:-1:-1;;;;;11342:19:0;;;11324:7;11342:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;11240:133::o;24577:182::-;7410:6;;-1:-1:-1;;;;;7410:6:0;7420:10;7410:20;7402:50;;;;-1:-1:-1;;;7402:50:0;;;;;;;:::i;:::-;24644:16:::1;::::0;::::1;::::0;::::1;;;24643:17;24635:58;;;;-1:-1:-1::0;;;24635:58:0::1;;;;;;;:::i;:::-;24712:6;::::0;24704:47:::1;::::0;-1:-1:-1;;;;;24712:6:0;;::::1;::::0;24729:21:::1;24704:47:::0;::::1;;;::::0;24712:6:::1;24704:47:::0;24712:6;24704:47;24729:21;24712:6;24704:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;24577:182::o:0;5947:480::-;;;;;;;;;;;;;-1:-1:-1;;;;;5947:480:0;;;;;;;;;;;;;;;;;;;;;;:::o;26576:97::-;7410:6;;-1:-1:-1;;;;;7410:6:0;7420:10;7410:20;7402:50;;;;-1:-1:-1;;;7402:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26644:14:0::1;;::::0;;;:4:::1;:14;::::0;;;;:21;;-1:-1:-1;;26644:21:0::1;26661:4;26644:21;::::0;;26576:97::o;15935:699::-;7410:6;;-1:-1:-1;;;;;7410:6:0;7420:10;7410:20;7402:50;;;;-1:-1:-1;;;7402:50:0;;;;;;;:::i;:::-;16135:16:::1;16115;16105:7;;:26;;;;:::i;:::-;16104:47;;;;:::i;:::-;16088:13;:63:::0;16176:7:::1;::::0;16203:13;;16176:23:::1;::::0;16186:13;;16176:23:::1;:::i;:::-;16175:41;;;;:::i;:::-;16162:10;:54:::0;;;16235:13:::1;::::0;:27:::1;;16227:73;;;;-1:-1:-1::0;;;16227:73:0::1;;;;;;;:::i;:::-;16344:6;::::0;5550:5:::1;::::0;16334:17:::1;::::0;-1:-1:-1;;;;;16344:6:0::1;16334:9;:17::i;:::-;:23;::::0;16354:3:::1;16334:23;:::i;:::-;16333:44;;;;:::i;:::-;16319:10;;:58;;16311:106;;;;-1:-1:-1::0;;;16311:106:0::1;;;;;;;:::i;:::-;16460:9;16450:7;;:19;;;;:::i;:::-;16436:10;;:33;;16428:92;;;;-1:-1:-1::0;;;16428:92:0::1;;;;;;;:::i;:::-;16566:9;16556:7;;:19;;;;:::i;:::-;16539:13;;:36;;16531:95;;;;-1:-1:-1::0;;;16531:95:0::1;;;;;;;:::i;:::-;15935:699:::0;;;;:::o;6458:39::-;;;;;;;;;:::o;11846:310::-;-1:-1:-1;;;;;11941:20:0;;11933:52;;;;-1:-1:-1;;;11933:52:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12004:21:0;;11996:53;;;;-1:-1:-1;;;11996:53:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12062:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;;:37;;;12115:33;;;;;12093:6;;12115:33;:::i;:::-;;;;;;;;11846:310;;;:::o;17598:2899::-;17677:4;-1:-1:-1;;;;;17702:18:0;;17694:68;;;;-1:-1:-1;;;17694:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17781:16:0;;17773:64;;;;-1:-1:-1;;;17773:64:0;;;;;;;:::i;:::-;17865:1;17856:6;:10;17848:64;;;;-1:-1:-1;;;17848:64:0;;;;;;;:::i;:::-;17928:13;;;;17924:79;;;-1:-1:-1;;;;;17967:8:0;;;;;;:4;:8;;;;;;;;17966:9;:24;;;;-1:-1:-1;;;;;;17980:10:0;;;;;;:4;:10;;;;;;;;17979:11;17966:24;17958:33;;;;;;-1:-1:-1;;;;;18101:13:0;;18013:8;18101:13;;;:7;:13;;;;;;18013:8;;;;18101:13;;18097:162;;;18137:4;18131:10;;18097:162;;;-1:-1:-1;;;;;18163:11:0;;;;;;:7;:11;;;;;;;;18159:100;;;18198:4;18191:11;;18159:100;;;-1:-1:-1;18243:4:0;18159:100;18273:20;18284:4;18290:2;18273:10;:20::i;:::-;18269:644;;;18314:14;;;;18310:89;;18349:34;;-1:-1:-1;;;18349:34:0;;;;;;;:::i;18310:89::-;18417:3;:11;;;;18424:4;18417:11;18413:232;;;-1:-1:-1;;;;;18453:27:0;;;;;;:21;:27;;;;;;;;18452:28;:58;;;;-1:-1:-1;;;;;;18485:25:0;;;;;;:21;:25;;;;;;;;18484:26;18452:58;18448:182;;;18553:12;;18543:6;:22;;18535:75;;;;-1:-1:-1;;;18535:75:0;;;;;;;:::i;:::-;18677:9;;-1:-1:-1;;;;;18663:24:0;;;18677:9;;18663:24;;;;:33;;;18692:4;18691:5;18663:33;18659:243;;;-1:-1:-1;;;;;18722:25:0;;;;;;:21;:25;;;;;;;;18717:170;;18806:14;;18796:6;18780:13;18790:2;18780:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;18772:95;;;;-1:-1:-1;;;18772:95:0;;;;;;;:::i;:::-;18937:6;;-1:-1:-1;;;;;18929:14:0;;;18937:6;;18929:14;:42;;;;-1:-1:-1;18961:9:0;;-1:-1:-1;;;;;18947:24:0;;;18961:9;;18947:24;;18929:42;18925:164;;;19009:11;;:15;;19023:1;19009:15;:::i;:::-;18992:12;:33;18988:89;;-1:-1:-1;;;;;19046:8:0;;;;;;:4;:8;;;;;:15;;-1:-1:-1;;19046:15:0;19057:4;19046:15;;;18988:89;19111:6;;-1:-1:-1;;;;;19103:14:0;;;19111:6;;19103:14;;;;:30;;-1:-1:-1;19127:6:0;;-1:-1:-1;;;;;19121:12:0;;;19127:6;;19121:12;;19103:30;19099:677;;;19154:15;;;;;;;19150:593;;;-1:-1:-1;;;;;19194:21:0;;19210:4;19194:21;;;;:44;;-1:-1:-1;;;;;;19219:19:0;;19233:4;19219:19;;19194:44;:74;;;;-1:-1:-1;19258:9:0;;-1:-1:-1;;;;;19242:26:0;;;19258:9;;19242:26;;19194:74;:102;;;;-1:-1:-1;19286:9:0;;-1:-1:-1;;;;;19272:24:0;;;19286:9;;19272:24;;19194:102;19190:237;;;19351:9;;-1:-1:-1;;;;;19351:9:0;19329:10;:32;;:56;;-1:-1:-1;19379:6:0;;-1:-1:-1;;;;;19379:6:0;19365:10;:20;19329:56;19321:86;;;;-1:-1:-1;;;19321:86:0;;;;;;;:::i;:::-;19469:6;;-1:-1:-1;;;;;19463:12:0;;;19469:6;;19463:12;;;;:35;;-1:-1:-1;;;;;;19479:19:0;;19493:4;19479:19;;19463:35;:63;;;;-1:-1:-1;19516:9:0;;-1:-1:-1;;;;;19502:24:0;;;19516:9;;19502:24;;19463:63;:79;;;;-1:-1:-1;19536:6:0;;-1:-1:-1;;;;;19530:12:0;;;19536:6;;19530:12;;19463:79;19459:269;;;19598:27;:15;19616:9;19598:27;:::i;:::-;19583:9;19575:18;;;;:7;:18;;;;;;:51;;19567:82;;;;-1:-1:-1;;;19567:82:0;;;;;;;:::i;:::-;19680:9;19672:18;;;;:7;:18;;;;;19693:15;19672:36;;19459:269;19792:4;19788:632;;;19818:6;;;;19813:596;;19849:19;;;;;;;19845:549;;;19893:28;19924:24;19942:4;19924:9;:24::i;:::-;19893:55;;19999:13;;19975:20;:37;19971:404;;20059:10;;20100:22;;;;20096:97;;;20157:13;;20147:6;;5550:5;;20157:13;20137:17;;-1:-1:-1;;;;;20147:6:0;20137:9;:17::i;:::-;:33;;;;:::i;:::-;20136:54;;;;:::i;:::-;20126:64;;20096:97;20247:7;20223:20;:31;20219:72;;20281:7;20258:30;;20219:72;20317:34;20330:20;20317:12;:34::i;:::-;19971:404;;19845:549;;20437:52;20454:4;20460:2;20464:6;20472:3;20477:4;20483:5;20437:16;:52::i;:::-;20430:59;17598:2899;-1:-1:-1;;;;;;;17598:2899:0:o;25200:753::-;25341:16;;25319:4;;25341:16;;;;;25336:228;;25374:28;25393:4;25399:2;25374:18;:28::i;:::-;25422:16;;;;;;;25421:17;:41;;;;;25442:20;25453:4;25459:2;25442:10;:20::i;:::-;25421:51;;;;;25467:5;25466:6;25421:51;25417:136;;;25493:44;;-1:-1:-1;;;25493:44:0;;;;;;;:::i;25417:136::-;-1:-1:-1;;;;;25610:25:0;;25576:12;25610:25;;;:19;:25;;;;;;25591:4;;25610:25;;;:52;;-1:-1:-1;;;;;;25639:23:0;;;;;;:19;:23;;;;;;;;25610:52;25606:99;;;-1:-1:-1;25688:5:0;25606:99;-1:-1:-1;;;;;25717:13:0;;;;;;:7;:13;;;;;:23;;25734:6;;25717:13;:23;;25734:6;;25717:23;:::i;:::-;;;;-1:-1:-1;25751:22:0;;-1:-1:-1;25777:7:0;25776:55;;25825:6;25776:55;;;25788:34;25798:4;25804:3;25809:4;25815:6;25788:9;:34::i;:::-;-1:-1:-1;;;;;25842:11:0;;;;;;:7;:11;;;;;:29;;25751:80;;-1:-1:-1;25751:80:0;;25842:11;;;:29;;25751:80;;25842:29;:::i;:::-;;;;;;;;25904:2;-1:-1:-1;;;;;25889:34:0;25898:4;-1:-1:-1;;;;;25889:34:0;;25908:14;25889:34;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;25941:4:0;;25200:753;-1:-1:-1;;;;;;;;25200:753:0:o;17232:358::-;17333:6;;17301:4;;-1:-1:-1;;;;;17325:14:0;;;17333:6;;17325:14;;;;:43;;-1:-1:-1;17362:6:0;;-1:-1:-1;;;;;17356:12:0;;;17362:6;;17356:12;;17325:43;:79;;;;-1:-1:-1;17398:6:0;;-1:-1:-1;;;;;17398:6:0;17385:9;:19;;17325:79;:118;;;;-1:-1:-1;;;;;;17422:21:0;;;;;;:17;:21;;;;;;;;17421:22;17325:118;:159;;;;-1:-1:-1;;;;;;17461:23:0;;;;;;:17;:23;;;;;;;;17460:24;17325:159;:186;;;;-1:-1:-1;;;;;;17501:10:0;;5656:42;17501:10;;17325:186;:219;;;;-1:-1:-1;;;;;;17528:16:0;;;;17325:219;:257;;;;-1:-1:-1;;;;;;17561:21:0;;17577:4;17561:21;;17318:264;17232:358;-1:-1:-1;;;17232:358:0:o;20505:2862::-;7304:6;:13;;-1:-1:-1;;7304:13:0;7313:4;7304:13;;;20588:30:::1;::::0;;::::1;::::0;::::1;::::0;;20611:7:::1;20588:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;20588:30:0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;20588:30:0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;20588:30:0;::::1;::::0;;::::1;::::0;;;;;;20629:60:::1;;20671:7;;;20629:60;20725:4;20705:26;::::0;;;:11:::1;:26;::::0;;;;;;;20740:9:::1;::::0;-1:-1:-1;;;;;20740:9:0::1;20705:46:::0;;;;;;;;-1:-1:-1;;20705:67:0::1;20701:166;;20809:4;20789:26;::::0;;;:11:::1;:26;::::0;;;;;;;20824:9:::1;::::0;-1:-1:-1;;;;;20824:9:0::1;20789:46:::0;;;;;;;-1:-1:-1;;20789:66:0;;20701:166:::1;20879:17;20964:1;20944:6;:16;;;20900:60;;20924:6;:16;;;20901:39;;:20;:39;;;;:::i;:::-;20900:60;;;;:::i;:::-;20899:66;;;;:::i;:::-;20879:86:::0;-1:-1:-1;20976:15:0::1;20994:32;20879:86:::0;20994:20;:32:::1;:::i;:::-;21071:16;::::0;;21085:1:::1;21071:16:::0;;;;;::::1;::::0;;20976:50;;-1:-1:-1;21047:21:0::1;::::0;21071:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;21071:16:0::1;21047:40;;21116:4;21098;21103:1;21098:7;;;;;;-1:-1:-1::0;;;21098:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;21098:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;21142:9:::1;::::0;:16:::1;::::0;;-1:-1:-1;;;21142:16:0;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;21098:7;;21142:16;;;;;:9;:16;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21132:4;21137:1;21132:7;;;;;;-1:-1:-1::0;;;21132:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;21132:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;21175:9:::1;::::0;:186:::1;::::0;-1:-1:-1;;;21175:186:0;;:9;::::1;::::0;:60:::1;::::0;:186:::1;::::0;21250:7;;21175:9:::1;::::0;21288:4;;21315::::1;::::0;21335:15:::1;::::0;21175:186:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;21171:233;;21386:7;;;;;;21171:233;21437:21;21416:18;21523:7:::0;21497:22:::1;21510:9:::0;21437:21;21497:22:::1;:::i;:::-;21496:34;;;;:::i;:::-;21469:61:::0;-1:-1:-1;21547:13:0;;21543:417:::1;;21581:9;::::0;21750:21;;21581:239:::1;::::0;-1:-1:-1;;;21581:239:0;;-1:-1:-1;;;;;21581:9:0;;::::1;::::0;:25:::1;::::0;21614:16;;21581:239:::1;::::0;21658:4:::1;::::0;21682:9;;21581::::1;::::0;;;21750:21:::1;::::0;21790:15:::1;::::0;21581:239:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;-1:-1:-1::0;21581:239:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;21581:239:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;21577:372;;21927:7;;;;;;;;21577:372;;;;21845:40;21857:16;21875:9;21845:40;;;;;;;:::i;:::-;;;;;;;;21577:372;21972:30;21986:16:::0;21972:30;::::1;:::i;:::-;;;22033:6;:16;;;22013:6;:16;;:36;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;22148:16:::1;::::0;::::1;::::0;22126:18:::1;::::0;::::1;::::0;22060:12:::1;::::0;-1:-1:-1;22060:12:0;;22112:52;;::::1;::::0;22113:31:::1;::::0;::::1;:10:::0;:31:::1;:::i;:::-;22112:52;;;;:::i;:::-;22083:81;;22175:18;22224:6;:16;;;22196:44;;22210:6;:10;;;22197:23;;:10;:23;;;;:::i;:::-;22196:44;;;;:::i;:::-;22275:5;::::0;22175:65;;-1:-1:-1;22251:20:0::1;::::0;22275:5;;::::1;-1:-1:-1::0;;;;;22275:5:0::1;22274:74;;22347:1;22274:74;;;22328:6;:16;;;22298:46;;22312:6;:12;;;22299:25;;:10;:25;;;;:::i;:::-;22298:46;;;;:::i;:::-;22385:7;::::0;22251:97;;-1:-1:-1;22359:22:0::1;::::0;-1:-1:-1;;;;;22385:7:0::1;22384:78;;22461:1;22384:78;;;22442:6;:16;;;22410:48;;22424:6;:14;;;22411:27;;:10;:27;;;;:::i;:::-;22410:48;;;;:::i;:::-;22359:103:::0;-1:-1:-1;22473:24:0::1;22359:103:::0;22548:12;22514:31:::1;22535:10:::0;22514:18;:31:::1;:::i;:::-;:46;;;;:::i;:::-;:63;;;;:::i;:::-;22500:78;::::0;:10;:78:::1;:::i;:::-;22473:105:::0;-1:-1:-1;22593:20:0;;22589:133:::1;;22643:11;:21:::0;:67:::1;::::0;-1:-1:-1;;;;;22643:21:0;;::::1;::::0;22700:5:::1;::::0;22677:16;;22643:67:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;22630:80:0;;-1:-1:-1;;22589:133:0::1;22736:22:::0;;22732:139:::1;;22788:23:::0;;:71:::1;::::0;-1:-1:-1;;;;;22788:23:0;;::::1;::::0;22849:5:::1;::::0;22824:18;;22788:71:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;22775:84:0;;-1:-1:-1;;22732:139:0::1;22885:14:::0;;22881:115:::1;;22929:15:::0;;:55:::1;::::0;-1:-1:-1;;;;;22929:15:0;;::::1;::::0;22974:5:::1;::::0;22957:10;;22929:55:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;22916:68:0;;-1:-1:-1;;22881:115:0::1;23010:16:::0;;23006:168:::1;;23053:9;;;;;;;;;-1:-1:-1::0;;;;;23053:9:0::1;-1:-1:-1::0;;;;;23053:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23043:4;23048:1;23043:7;;;;;;-1:-1:-1::0;;;23043:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;23043:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;23094:5:::1;::::0;23084:7;;23094:5;;;::::1;::::0;;::::1;::::0;23084:4;;23089:1:::1;::::0;23084:7;::::1;;;-1:-1:-1::0;;;23084:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;23084:15:0;;::::1;:7;::::0;;::::1;::::0;;;;;:15;23144:17;;23114:48:::1;::::0;23124:4;;23130:12;;23144:17:::1;23114:9;:48::i;:::-;23188:18:::0;;23184:176:::1;;23233:9;;;;;;;;;-1:-1:-1::0;;;;;23233:9:0::1;-1:-1:-1::0;;;;;23233:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23223:4;23228:1;23223:7;;;;;;-1:-1:-1::0;;;23223:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;23223:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;23274:7:::1;::::0;23264;;23274;::::1;::::0;23264:4;;23274:7;;23264;::::1;;;-1:-1:-1::0;;;23264:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;23264:17:0;;::::1;:7;::::0;;::::1;::::0;;;;;:17;23328:19;;23296:52:::1;::::0;23306:4;;23312:14;;23328:19:::1;23296:9;:52::i;:::-;7328:1;;;;;;;;;;;;;-1:-1:-1::0;7340:6:0;:14;;-1:-1:-1;;7340:14:0;;;20505:2862::o;23731:435::-;23814:16;;;;;;;23813:17;23805:65;;;;-1:-1:-1;;;23805:65:0;;;;;;;:::i;:::-;23886:20;23897:4;23903:2;23886:10;:20::i;:::-;23885:21;:37;;;;-1:-1:-1;23916:6:0;;-1:-1:-1;;;;;23910:12:0;;;23916:6;;23910:12;23885:37;23881:278;;;-1:-1:-1;;;;;23939:23:0;;;;;;:17;:23;;;;;;;;:30;;23965:4;-1:-1:-1;;23939:30:0;;;;;;;;23984:19;:25;;;;;;;:32;;;;;;;;;;24031:16;:23;;23939:30;-1:-1:-1;;24031:23:0;;;;;;;;24069:19;:26;;;;;;;;;;24115:32;;;;;;:::i;23881:278::-;23731:435;;:::o;25961:607::-;26049:7;26069:18;26102:3;26098:205;;;-1:-1:-1;26135:9:0;:16;;;26098:205;;;26173:4;26169:134;;;-1:-1:-1;26207:9:0;:17;;;;;;26169:134;;;-1:-1:-1;26270:9:0;:21;;;;;;26169:134;26313:17;5550:5;26333:19;26342:10;26333:6;:19;:::i;:::-;:38;;;;:::i;:::-;26313:58;-1:-1:-1;26386:13:0;;26382:141;;26432:4;26416:22;;;;:7;:22;;;;;:35;;26442:9;;26416:22;:35;;26442:9;;26416:35;:::i;:::-;;;;-1:-1:-1;;26471:40:0;;26494:4;;-1:-1:-1;;;;;26471:40:0;;;;;;;26501:9;;26471:40;:::i;:::-;;;;;;;;26382:141;26542:18;26551:9;26542:6;:18;:::i;23375:348::-;23486:9;;:187;;-1:-1:-1;;;23486:187:0;;-1:-1:-1;;;;;23486:9:0;;;;:60;;23554:6;;23486:187;;:9;;23602:4;;23621:11;;23647:15;;23486:187;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23482:234;;23698:7;;14:705:1;;127:3;120:4;112:6;108:17;104:27;94:2;;149:5;142;135:20;94:2;189:6;176:20;215:4;239:65;254:49;300:2;254:49;:::i;:::-;239:65;:::i;:::-;338:15;;;369:12;;;;401:15;;;447:11;;;435:24;;431:33;;428:42;-1:-1:-1;425:2:1;;;487:5;480;473:20;425:2;513:5;527:163;541:2;538:1;535:9;527:163;;;598:17;;586:30;;636:12;;;;668;;;;559:1;552:9;527:163;;;-1:-1:-1;708:5:1;;84:635;-1:-1:-1;;;;;;;84:635:1:o;724:162::-;791:20;;847:13;;840:21;830:32;;820:2;;876:1;873;866:12;891:161;960:20;;1020:6;1009:18;;999:29;;989:2;;1042:1;1039;1032:12;1057:259;;1169:2;1157:9;1148:7;1144:23;1140:32;1137:2;;;1190:6;1182;1175:22;1137:2;1234:9;1221:23;1253:33;1280:5;1253:33;:::i;1321:263::-;;1444:2;1432:9;1423:7;1419:23;1415:32;1412:2;;;1465:6;1457;1450:22;1412:2;1502:9;1496:16;1521:33;1548:5;1521:33;:::i;1589:418::-;;;1734:2;1722:9;1713:7;1709:23;1705:32;1702:2;;;1755:6;1747;1740:22;1702:2;1799:9;1786:23;1818:33;1845:5;1818:33;:::i;:::-;1870:5;-1:-1:-1;1927:2:1;1912:18;;1899:32;1940:35;1899:32;1940:35;:::i;:::-;1994:7;1984:17;;;1692:315;;;;;:::o;2012:721::-;;;;;2207:3;2195:9;2186:7;2182:23;2178:33;2175:2;;;2229:6;2221;2214:22;2175:2;2273:9;2260:23;2292:33;2319:5;2292:33;:::i;:::-;2344:5;-1:-1:-1;2401:2:1;2386:18;;2373:32;2414:35;2373:32;2414:35;:::i;:::-;2468:7;-1:-1:-1;2527:2:1;2512:18;;2499:32;2540:35;2499:32;2540:35;:::i;:::-;2594:7;-1:-1:-1;2653:2:1;2638:18;;2625:32;2666:35;2625:32;2666:35;:::i;:::-;2165:568;;;;-1:-1:-1;2165:568:1;;-1:-1:-1;;2165:568:1:o;2738:402::-;;;2867:2;2855:9;2846:7;2842:23;2838:32;2835:2;;;2888:6;2880;2873:22;3145:470;;;;3291:2;3279:9;3270:7;3266:23;3262:32;3259:2;;;3312:6;3304;3297:22;3259:2;3356:9;3343:23;3375:33;3402:5;3375:33;:::i;:::-;3427:5;-1:-1:-1;3484:2:1;3469:18;;3456:32;3497:35;3456:32;3497:35;:::i;:::-;3249:366;;3551:7;;-1:-1:-1;;;3605:2:1;3590:18;;;;3577:32;;3249:366::o;3620:329::-;;;3746:2;3734:9;3725:7;3721:23;3717:32;3714:2;;;3767:6;3759;3752:22;3714:2;3811:9;3798:23;3830:33;3857:5;3830:33;:::i;:::-;3882:5;-1:-1:-1;3906:37:1;3939:2;3924:18;;3906:37;:::i;:::-;3896:47;;3704:245;;;;;:::o;3954:327::-;;;4083:2;4071:9;4062:7;4058:23;4054:32;4051:2;;;4104:6;4096;4089:22;4051:2;4148:9;4135:23;4167:33;4194:5;4167:33;:::i;:::-;4219:5;4271:2;4256:18;;;;4243:32;;-1:-1:-1;;;4041:240:1:o;4286:1295::-;;;4465:2;4453:9;4444:7;4440:23;4436:32;4433:2;;;4486:6;4478;4471:22;4433:2;4531:9;4518:23;4560:18;4601:2;4593:6;4590:14;4587:2;;;4622:6;4614;4607:22;4587:2;4665:6;4654:9;4650:22;4640:32;;4710:7;4703:4;4699:2;4695:13;4691:27;4681:2;;4737:6;4729;4722:22;4681:2;4778;4765:16;4800:4;4824:65;4839:49;4885:2;4839:49;:::i;4824:65::-;4923:15;;;4954:12;;;;4986:11;;;5024;;;5016:20;;5012:29;;5009:42;-1:-1:-1;5006:2:1;;;5069:6;5061;5054:22;5006:2;5096:6;5087:15;;5111:240;5125:2;5122:1;5119:9;5111:240;;;5196:3;5183:17;5213:33;5240:5;5213:33;:::i;:::-;5259:18;;5143:1;5136:9;;;;;5297:12;;;;5329;;5111:240;;;-1:-1:-1;5370:5:1;-1:-1:-1;;5413:18:1;;5400:32;;-1:-1:-1;;5444:16:1;;;5441:2;;;5478:6;5470;5463:22;5441:2;;5506:69;5567:7;5556:8;5545:9;5541:24;5506:69;:::i;:::-;5496:79;;;4423:1158;;;;;:::o;5586:192::-;;5695:2;5683:9;5674:7;5670:23;5666:32;5663:2;;;5716:6;5708;5701:22;5663:2;5744:28;5762:9;5744:28;:::i;5783:262::-;;;5906:2;5894:9;5885:7;5881:23;5877:32;5874:2;;;5927:6;5919;5912:22;5874:2;5955:28;5973:9;5955:28;:::i;6050:344::-;;;;6193:2;6181:9;6172:7;6168:23;6164:32;6161:2;;;6214:6;6206;6199:22;6161:2;6242:30;6262:9;6242:30;:::i;:::-;6232:40;;6291:39;6326:2;6315:9;6311:18;6291:39;:::i;:::-;6281:49;;6349:39;6384:2;6373:9;6369:18;6349:39;:::i;:::-;6339:49;;6151:243;;;;;:::o;6399:569::-;;;;;;;6590:3;6578:9;6569:7;6565:23;6561:33;6558:2;;;6612:6;6604;6597:22;6558:2;6640:30;6660:9;6640:30;:::i;:::-;6630:40;;6689:39;6724:2;6713:9;6709:18;6689:39;:::i;:::-;6679:49;;6747:39;6782:2;6771:9;6767:18;6747:39;:::i;:::-;6737:49;;6805:39;6840:2;6829:9;6825:18;6805:39;:::i;:::-;6795:49;;6863:40;6898:3;6887:9;6883:19;6863:40;:::i;:::-;6853:50;;6922:40;6957:3;6946:9;6942:19;6922:40;:::i;:::-;6912:50;;6548:420;;;;;;;;:::o;6973:190::-;;7085:2;7073:9;7064:7;7060:23;7056:32;7053:2;;;7106:6;7098;7091:22;7053:2;-1:-1:-1;7134:23:1;;7043:120;-1:-1:-1;7043:120:1:o;7168:258::-;;;7297:2;7285:9;7276:7;7272:23;7268:32;7265:2;;;7318:6;7310;7303:22;7265:2;-1:-1:-1;;7346:23:1;;;7416:2;7401:18;;;7388:32;;-1:-1:-1;7255:171:1:o;7431:316::-;;;;7588:2;7576:9;7567:7;7563:23;7559:32;7556:2;;;7609:6;7601;7594:22;7556:2;7643:9;7637:16;7627:26;;7693:2;7682:9;7678:18;7672:25;7662:35;;7737:2;7726:9;7722:18;7716:25;7706:35;;7546:201;;;;;:::o;7752:395::-;;;;;7915:3;7903:9;7894:7;7890:23;7886:33;7883:2;;;7937:6;7929;7922:22;7883:2;-1:-1:-1;;7965:23:1;;;8035:2;8020:18;;8007:32;;-1:-1:-1;8086:2:1;8071:18;;8058:32;;8137:2;8122:18;8109:32;;-1:-1:-1;7873:274:1;-1:-1:-1;7873:274:1:o;8152:469::-;;8249:5;8243:12;8276:6;8271:3;8264:19;8302:4;8331:2;8326:3;8322:12;8315:19;;8368:2;8361:5;8357:14;8389:3;8401:195;8415:6;8412:1;8409:13;8401:195;;;8480:13;;-1:-1:-1;;;;;8476:39:1;8464:52;;8536:12;;;;8571:15;;;;8512:1;8430:9;8401:195;;;-1:-1:-1;8612:3:1;;8219:402;-1:-1:-1;;;;;8219:402:1:o;8626:205::-;8826:3;8817:14::o;8836:203::-;-1:-1:-1;;;;;9000:32:1;;;;8982:51;;8970:2;8955:18;;8937:102::o;9044:723::-;-1:-1:-1;;;;;9483:15:1;;;9465:34;;9535:15;;;9530:2;9515:18;;9508:43;9587:15;;;9582:2;9567:18;;9560:43;9639:15;;;9634:2;9619:18;;9612:43;9692:15;;9686:3;9671:19;;9664:44;9745:15;;;9445:3;9724:19;;9717:44;9414:3;9399:19;;9381:386::o;9772:615::-;-1:-1:-1;;;;;10139:15:1;;;10121:34;;10186:2;10171:18;;10164:34;;;;10229:2;10214:18;;10207:34;;;;10272:2;10257:18;;10250:34;;;;10321:15;;;10315:3;10300:19;;10293:44;10101:3;10353:19;;10346:35;;;;10070:3;10055:19;;10037:350::o;10392:187::-;10557:14;;10550:22;10532:41;;10520:2;10505:18;;10487:92::o;10809:524::-;;11088:6;11077:9;11070:25;11131:3;11126:2;11115:9;11111:18;11104:31;11152:63;11210:3;11199:9;11195:19;11187:6;11152:63;:::i;:::-;-1:-1:-1;;;;;11251:32:1;;;;11246:2;11231:18;;11224:60;-1:-1:-1;11315:2:1;11300:18;11293:34;11144:71;11060:273;-1:-1:-1;;11060:273:1:o;11338:603::-;;11479:2;11508;11497:9;11490:21;11540:6;11534:13;11583:6;11578:2;11567:9;11563:18;11556:34;11608:4;11621:140;11635:6;11632:1;11629:13;11621:140;;;11730:14;;;11726:23;;11720:30;11696:17;;;11715:2;11692:26;11685:66;11650:10;;11621:140;;;11779:6;11776:1;11773:13;11770:2;;;11849:4;11844:2;11835:6;11824:9;11820:22;11816:31;11809:45;11770:2;-1:-1:-1;11925:2:1;11904:15;-1:-1:-1;;11900:29:1;11885:45;;;;11932:2;11881:54;;11459:482;-1:-1:-1;;;11459:482:1:o;11946:399::-;12148:2;12130:21;;;12187:2;12167:18;;;12160:30;12226:34;12221:2;12206:18;;12199:62;-1:-1:-1;;;12292:2:1;12277:18;;12270:33;12335:3;12320:19;;12120:225::o;12350:348::-;12552:2;12534:21;;;12591:2;12571:18;;;12564:30;12630:26;12625:2;12610:18;;12603:54;12689:2;12674:18;;12524:174::o;12703:412::-;12905:2;12887:21;;;12944:2;12924:18;;;12917:30;12983:34;12978:2;12963:18;;12956:62;-1:-1:-1;;;13049:2:1;13034:18;;13027:46;13105:3;13090:19;;12877:238::o;13120:341::-;13322:2;13304:21;;;13361:2;13341:18;;;13334:30;-1:-1:-1;;;13395:2:1;13380:18;;13373:47;13452:2;13437:18;;13294:167::o;13466:399::-;13668:2;13650:21;;;13707:2;13687:18;;;13680:30;13746:34;13741:2;13726:18;;13719:62;-1:-1:-1;;;13812:2:1;13797:18;;13790:33;13855:3;13840:19;;13640:225::o;13870:398::-;14072:2;14054:21;;;14111:2;14091:18;;;14084:30;14150:34;14145:2;14130:18;;14123:62;-1:-1:-1;;;14216:2:1;14201:18;;14194:32;14258:3;14243:19;;14044:224::o;14273:347::-;14475:2;14457:21;;;14514:2;14494:18;;;14487:30;14553:25;14548:2;14533:18;;14526:53;14611:2;14596:18;;14447:173::o;14625:399::-;14827:2;14809:21;;;14866:2;14846:18;;;14839:30;14905:34;14900:2;14885:18;;14878:62;-1:-1:-1;;;14971:2:1;14956:18;;14949:33;15014:3;14999:19;;14799:225::o;15029:397::-;15231:2;15213:21;;;15270:2;15250:18;;;15243:30;15309:34;15304:2;15289:18;;15282:62;-1:-1:-1;;;15375:2:1;15360:18;;15353:31;15416:3;15401:19;;15203:223::o;15431:342::-;15633:2;15615:21;;;15672:2;15652:18;;;15645:30;-1:-1:-1;;;15706:2:1;15691:18;;15684:48;15764:2;15749:18;;15605:168::o;15778:356::-;15980:2;15962:21;;;15999:18;;;15992:30;16058:34;16053:2;16038:18;;16031:62;16125:2;16110:18;;15952:182::o;16139:404::-;16341:2;16323:21;;;16380:2;16360:18;;;16353:30;16419:34;16414:2;16399:18;;16392:62;-1:-1:-1;;;16485:2:1;16470:18;;16463:38;16533:3;16518:19;;16313:230::o;16548:348::-;16750:2;16732:21;;;16789:2;16769:18;;;16762:30;16828:26;16823:2;16808:18;;16801:54;16887:2;16872:18;;16722:174::o;16901:406::-;17103:2;17085:21;;;17142:2;17122:18;;;17115:30;17181:34;17176:2;17161:18;;17154:62;-1:-1:-1;;;17247:2:1;17232:18;;17225:40;17297:3;17282:19;;17075:232::o;17312:352::-;17514:2;17496:21;;;17553:2;17533:18;;;17526:30;17592;17587:2;17572:18;;17565:58;17655:2;17640:18;;17486:178::o;17669:343::-;17871:2;17853:21;;;17910:2;17890:18;;;17883:30;-1:-1:-1;;;17944:2:1;17929:18;;17922:49;18003:2;17988:18;;17843:169::o;18017:403::-;18219:2;18201:21;;;18258:2;18238:18;;;18231:30;18297:34;18292:2;18277:18;;18270:62;-1:-1:-1;;;18363:2:1;18348:18;;18341:37;18410:3;18395:19;;18191:229::o;18425:405::-;18627:2;18609:21;;;18666:2;18646:18;;;18639:30;18705:34;18700:2;18685:18;;18678:62;-1:-1:-1;;;18771:2:1;18756:18;;18749:39;18820:3;18805:19;;18599:231::o;18835:419::-;19037:2;19019:21;;;19076:2;19056:18;;;19049:30;19115:34;19110:2;19095:18;;19088:62;19186:25;19181:2;19166:18;;19159:53;19244:3;19229:19;;19009:245::o;19259:345::-;19461:2;19443:21;;;19500:2;19480:18;;;19473:30;-1:-1:-1;;;19534:2:1;19519:18;;19512:51;19595:2;19580:18;;19433:171::o;19609:410::-;19811:2;19793:21;;;19850:2;19830:18;;;19823:30;19889:34;19884:2;19869:18;;19862:62;-1:-1:-1;;;19955:2:1;19940:18;;19933:44;20009:3;19994:19;;19783:236::o;20024:401::-;20226:2;20208:21;;;20265:2;20245:18;;;20238:30;20304:34;20299:2;20284:18;;20277:62;-1:-1:-1;;;20370:2:1;20355:18;;20348:35;20415:3;20400:19;;20198:227::o;20430:348::-;20632:2;20614:21;;;20671:2;20651:18;;;20644:30;20710:26;20705:2;20690:18;;20683:54;20769:2;20754:18;;20604:174::o;20783:425::-;20985:2;20967:21;;;21024:2;21004:18;;;20997:30;21063:34;21058:2;21043:18;;21036:62;21134:31;21129:2;21114:18;;21107:59;21198:3;21183:19;;20957:251::o;21213:341::-;21415:2;21397:21;;;21454:2;21434:18;;;21427:30;-1:-1:-1;;;21488:2:1;21473:18;;21466:47;21545:2;21530:18;;21387:167::o;21559:346::-;21761:2;21743:21;;;21800:2;21780:18;;;21773:30;-1:-1:-1;;;21834:2:1;21819:18;;21812:52;21896:2;21881:18;;21733:172::o;21910:365::-;22116:6;22149:15;;;22131:34;;22201:15;;;22196:2;22181:18;;22174:43;22253:15;;;22248:2;22233:18;;22226:43;22094:2;22079:18;;22061:214::o;22280:681::-;22591:6;22624:15;;;22606:34;;22676:15;;;22671:2;22656:18;;22649:43;22728:15;;;22723:2;22708:18;;22701:43;22780:15;;;22775:2;22760:18;;22753:43;22833:15;;22827:3;22812:19;;22805:44;22886:15;;22880:3;22865:19;;22858:44;22939:15;;;22933:3;22918:19;;22911:44;22568:3;22553:19;;22535:426::o;22966:177::-;23112:25;;;23100:2;23085:18;;23067:76::o;23148:588::-;;23447:6;23436:9;23429:25;23490:6;23485:2;23474:9;23470:18;23463:34;23533:3;23528:2;23517:9;23513:18;23506:31;23554:63;23612:3;23601:9;23597:19;23589:6;23554:63;:::i;:::-;-1:-1:-1;;;;;23653:32:1;;;;23648:2;23633:18;;23626:60;-1:-1:-1;23717:3:1;23702:19;23695:35;23546:71;23419:317;-1:-1:-1;;;23419:317:1:o;23741:248::-;23915:25;;;23971:2;23956:18;;23949:34;23903:2;23888:18;;23870:119::o;23994:184::-;24166:4;24154:17;;;;24136:36;;24124:2;24109:18;;24091:87::o;24183:251::-;24253:2;24247:9;24283:17;;;24330:18;24315:34;;24351:22;;;24312:62;24309:2;;;24377:18;;:::i;:::-;24413:2;24406:22;24227:207;;-1:-1:-1;24227:207:1:o;24439:192::-;;24538:18;24530:6;24527:30;24524:2;;;24560:18;;:::i;:::-;-1:-1:-1;24620:4:1;24601:17;;;24597:28;;24514:117::o;24636:224::-;;24703:6;24736:2;24733:1;24729:10;24766:2;24763:1;24759:10;24797:3;24793:2;24789:12;24784:3;24781:21;24778:2;;;24805:18;;:::i;:::-;24841:13;;24683:177;-1:-1:-1;;;;24683:177:1:o;24865:128::-;;24936:1;24932:6;24929:1;24926:13;24923:2;;;24942:18;;:::i;:::-;-1:-1:-1;24978:9:1;;24913:80::o;24998:217::-;;25064:1;25054:2;;-1:-1:-1;;;25089:31:1;;25143:4;25140:1;25133:15;25171:4;25096:1;25161:15;25054:2;-1:-1:-1;25200:9:1;;25044:171::o;25220:453::-;25316:6;25339:5;25353:314;25402:1;25439:2;25429:8;25426:16;25416:2;;25446:5;;;25416:2;25487:4;25482:3;25478:14;25472:4;25469:24;25466:2;;;25496:18;;:::i;:::-;25546:2;25536:8;25532:17;25529:2;;;25561:16;;;;25529:2;25640:17;;;;;25600:15;;25353:314;;;25297:376;;;;;;;:::o;25678:148::-;;25765:55;-1:-1:-1;;25806:4:1;25792:19;;25786:4;25831:922;25915:8;25905:2;;-1:-1:-1;25956:1:1;25970:5;;25905:2;26004:4;25994:2;;-1:-1:-1;26041:1:1;26055:5;;25994:2;26086:4;26104:1;26099:59;;;;26172:1;26167:183;;;;26079:271;;26099:59;26129:1;26120:10;;26143:5;;;26167:183;26204:3;26194:8;26191:17;26188:2;;;26211:18;;:::i;:::-;26267:1;26257:8;26253:16;26244:25;;26295:3;26288:5;26285:14;26282:2;;;26302:18;;:::i;:::-;26335:5;;;26079:271;;26434:2;26424:8;26421:16;26415:3;26409:4;26406:13;26402:36;26396:2;26386:8;26383:16;26378:2;26372:4;26369:12;26365:35;26362:77;26359:2;;;-1:-1:-1;26471:19:1;;;26506:14;;;26503:2;;;26523:18;;:::i;:::-;26556:5;;26359:2;26603:42;26641:3;26631:8;26625:4;26622:1;26603:42;:::i;:::-;26678:6;26673:3;26669:16;26660:7;26657:29;26654:2;;;26689:18;;:::i;:::-;26727:20;;25895:858;-1:-1:-1;;;;25895:858:1:o;26758:168::-;;26864:1;26860;26856:6;26852:14;26849:1;26846:21;26841:1;26834:9;26827:17;26823:45;26820:2;;;26871:18;;:::i;:::-;-1:-1:-1;26911:9:1;;26810:116::o;26931:217::-;;26999:6;27055:10;;;;27025;;27077:12;;;27074:2;;;27092:18;;:::i;:::-;27129:13;;26979:169;-1:-1:-1;;;26979:169:1:o;27153:125::-;;27221:1;27218;27215:8;27212:2;;;27226:18;;:::i;:::-;-1:-1:-1;27263:9:1;;27202:76::o;27283:197::-;;27349:6;27390:2;27383:5;27379:14;27417:2;27408:7;27405:15;27402:2;;;27423:18;;:::i;:::-;27472:1;27459:15;;27329:151;-1:-1:-1;;;27329:151:1:o;27485:127::-;27546:10;27541:3;27537:20;27534:1;27527:31;27577:4;27574:1;27567:15;27601:4;27598:1;27591:15;27617:127;27678:10;27673:3;27669:20;27666:1;27659:31;27709:4;27706:1;27699:15;27733:4;27730:1;27723:15;27749:133;-1:-1:-1;;;;;27826:31:1;;27816:42;;27806:2;;27872:1;27869;27862:12

Swarm Source

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