ETH Price: $2,993.88 (-1.88%)
Gas: 2 Gwei

Token

SCRO Holdings (SCROH)
 

Overview

Max Total Supply

1,500,000,000 SCROH

Holders

1,684

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
3,217,294.238428721936863251 SCROH

Value
$0.00
0xdffab1db17022a21d5d5df40558d42bf61b19d1e
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:
SCROHoldings

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IFactoryV2 {
    event PairCreated(address indexed token0, address indexed token1, address lpPair, 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);
}

interface AntiSnipe {
    function checkUser(address from, address to, uint256 amt) external returns (bool);
    function setLaunch(address _initialLpPair, uint32 _liqAddBlock, uint64 _liqAddStamp, uint8 dec) external;
    function setLpPair(address pair, bool enabled) external;
    function setProtections(bool _as, bool _ab) external;
    function removeSniper(address account) external;
    function removeBlacklisted(address account) external;
    function isBlacklisted(address account) external view returns (bool);
}

contract SCROHoldings is IERC20 {
    // Ownership moved to in-contract for customizability.
    address private _owner;

    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) private _allowances;

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

    uint256 constant private startingSupply = 1_500_000_000;
    string constant private _name = "SCRO Holdings";
    string constant private _symbol = "SCROH";
    uint8 constant private _decimals = 18;

    uint256 constant private _tTotal = startingSupply * 10**_decimals;

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

    struct Ratios {
        uint16 liquidity;
        uint16 marketing;
        uint16 maintenence;
        uint16 development;
        uint16 totalSwap;
    }

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

    Ratios public _ratios = Ratios({
        liquidity: 100,
        marketing: 500,
        maintenence: 300,
        development: 100,
        totalSwap: 1000
    });

    uint256 constant public maxBuyTaxes = 1900;
    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 maintenence;
        address payable development;
    }

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0xB66139C2471092740DCB7A17e2edB64263886939),
        maintenence: payable(0x56AA41DDa5400859Ed9f1bd578F1CCdE05E3F86B),
        development: payable(0x47de77bc10c2D424A090d0835Be622ee46688970)
    });
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    bool public piContractSwapsEnabled;
    uint256 public piSwapPercent;
    
    uint256 private _maxTxAmount = (_tTotal * 3) / 1000;
    uint256 private _maxWalletSize = (_tTotal * 3) / 1000;

    bool public tradingEnabled = false;
    bool public _hasLiqBeenAdded = false;
    AntiSnipe antiSnipe;

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

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

    constructor () payable {
        _tOwned[msg.sender] = _tTotal;
        emit Transfer(address(0), msg.sender, _tTotal);

        // Set the owner.
        _owner = msg.sender;

        if (block.chainid == 56) {
            dexRouter = IRouter02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        } else if (block.chainid == 97) {
            dexRouter = IRouter02(0xD99D1c33F9fC3444f8101754aBC46c52416550D1);
        } 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();
        }

        _isExcludedFromFees[_owner] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[DEAD] = true;
        _liquidityHolders[_owner] = true;
    }

    receive() external payable {}

    bool lpInitialized = false;

    function initializeLP(uint256 amountTokens) public onlyOwner {
        require(!lpInitialized, "Already initialized");
        require(address(this).balance > 0 , "Contract must have ETH.");
        require(balanceOf(msg.sender) >= amountTokens * 10**_decimals, "You do not have enough tokens.");
        
        address get_pair = IFactoryV2(dexRouter.factory()).getPair(address(this), dexRouter.WETH());
        if (get_pair == address(0)) {
            lpPair = IFactoryV2(dexRouter.factory()).createPair(address(this), dexRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        lpPairs[lpPair] = true;

        _approve(_owner, address(dexRouter), type(uint256).max);
        _approve(address(this), address(dexRouter), type(uint256).max);

        lpInitialized = true;

        amountTokens *= 10**_decimals;
        finalizeTransfer(msg.sender, address(this), amountTokens, false, false, true);

        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            _owner,
            block.timestamp
        );
        enableTrading();
    }


//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // 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.
    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 pure 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 approveContractContingency() external onlyOwner returns (bool) {
        _approve(address(this), address(dexRouter), type(uint256).max);
        return true;
    }

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

        return _transfer(sender, recipient, amount);
    }

    function setNewRouter(address newRouter) external onlyOwner {
        IRouter02 _newRouter = IRouter02(newRouter);
        address get_pair = IFactoryV2(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            lpPair = IFactoryV2(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        _approve(address(this), address(dexRouter), type(uint256).max);
    }

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

    function setInitializer(address initializer) external onlyOwner {
        require(!tradingEnabled);
        require(initializer != address(this), "Can't be self.");
        antiSnipe = AntiSnipe(initializer);
    }

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

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

    function isExcludedFromProtection(address account) external view returns (bool) {
        return _isExcludedFromProtection[account];
    }

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

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

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

    function removeBlacklisted(address account) external onlyOwner {
        // To remove from the pre-built blacklist ONLY. Cannot add to blacklist.
        antiSnipe.removeBlacklisted(account);
    }

    function isBlacklisted(address account) external view returns (bool) {
        return antiSnipe.isBlacklisted(account);
    }

    function removeSniper(address account) external onlyOwner {
        antiSnipe.removeSniper(account);
    }

    function setProtectionSettings(bool _antiSnipe, bool _antiBlock) external onlyOwner {
        antiSnipe.setProtections(_antiSnipe, _antiBlock);
    }

    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 maintenence, uint16 development) external onlyOwner {
        _ratios.liquidity = liquidity;
        _ratios.marketing = marketing;
        _ratios.maintenence = maintenence;
        _ratios.development = development;
        _ratios.totalSwap = liquidity + marketing + maintenence + development;
        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 maintenence, address payable development) external onlyOwner {
        _taxWallets.marketing = payable(marketing);
        _taxWallets.maintenence = payable(maintenence);
        _taxWallets.development = payable(development);
    }

    function setMaxTxPercent(uint256 percent, uint256 divisor) external onlyOwner {
        require((_tTotal * percent) / divisor >= (_tTotal / 1000), "Max Transaction amt must be above 0.1% 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 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.");
    }

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

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

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

    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(lpInitialized, "LP must first be intialized.");
        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 (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 lockTheSwap {
        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();

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            swapAmt,
            0,
            path,
            address(this),
            block.timestamp
        );

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

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

        amtBalance -= liquidityBalance;
        ratios.totalSwap -= ratios.liquidity;
        bool success;
        uint256 maintenenceBalance = (amtBalance * ratios.maintenence) / ratios.totalSwap;
        uint256 developmentBalance = (amtBalance * ratios.development) / ratios.totalSwap;
        uint256 marketingBalance = amtBalance - (maintenenceBalance + developmentBalance);
        if (ratios.development > 0) {
            (success,) = _taxWallets.development.call{value: developmentBalance, gas: 35000}("");
        }
        if (ratios.maintenence > 0) {
            (success,) = _taxWallets.maintenence.call{value: maintenenceBalance, gas: 35000}("");
        }
        if (ratios.marketing > 0) {
            (success,) = _taxWallets.marketing.call{value: marketingBalance, gas: 35000}("");
        }
    }

    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;
            if(address(antiSnipe) == address(0)){
                antiSnipe = AntiSnipe(address(this));
            }
            contractSwapEnabled = true;
            emit ContractSwapEnabledUpdated(true);
        }
    }

    function enableTrading() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        require(_hasLiqBeenAdded, "Liquidity must be added.");
        if(address(antiSnipe) == address(0)){
            antiSnipe = AntiSnipe(address(this));
        }
        try antiSnipe.setLaunch(lpPair, uint32(block.number), uint64(block.timestamp), _decimals) {} catch {}
        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 (uint8 i = 0; i < accounts.length; i++) {
            require(balanceOf(msg.sender) >= amounts[i]);
            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) && !_isExcludedFromProtection[from] && !_isExcludedFromProtection[to] && !other) {
                revert("Pre-liquidity transfer protection.");
            }
        }

        if (_hasLimits(from, to)) {
            bool checked;
            try antiSnipe.checkUser(from, to, amount) returns (bool check) {
                checked = check;
            } catch {
                revert();
            }

            if(!checked) {
                revert();
            }
        }

        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;

        _tOwned[address(this)] += feeAmount;
        emit Transfer(from, address(this), feeAmount);

        return amount - feeAmount;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountCurrency","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"maintenence","type":"uint16"},{"internalType":"uint16","name":"development","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":"maintenence","type":"address"},{"internalType":"address payable","name":"development","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approveContractContingency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"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":[],"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":"amountTokens","type":"uint256"}],"name":"initializeLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromProtection","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":"account","type":"address"}],"name":"removeBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"swapEnabled","type":"bool"},{"internalType":"bool","name":"priceImpactSwapEnabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initializer","type":"address"}],"name":"setInitializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"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":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceImpactSwapPercent","type":"uint256"}],"name":"setPriceImpactSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_antiSnipe","type":"bool"},{"internalType":"bool","name":"_antiBlock","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"maintenence","type":"uint16"},{"internalType":"uint16","name":"development","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":"maintenence","type":"address"},{"internalType":"address payable","name":"development","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":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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"}]

60006003556103e8608081905260a081905260c08190526009805465ffffffffffff19166503e803e803e8179055606460e08190526101f46101005261012c6101205261014052610160819052600a80546001600160501b0319166903e80064012c01f400641781556101e060405273b66139c2471092740dcb7a17e2edb642638869396101808190527356aa41dda5400859ed9f1bd578f1ccde05e3f86b6101a08190527347de77bc10c2d424a090d0835be622ee466889706101c0819052600d80546001600160a01b03199081169094179055600e80548416909217909155600f80549092161790556010805461ff00191690556200010390601290620004d0565b62000113906359682f00620004e8565b62000120906003620004e8565b6200012c91906200050a565b6015556103e8620001406012600a620004d0565b62000150906359682f00620004e8565b6200015d906003620004e8565b6200016991906200050a565b6016556017805461ffff60ff60b01b01191690556200018b6012600a620004d0565b6200019b906359682f00620004e8565b33600081815260016020526040812092909255907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620001de6012600a620004d0565b620001ee906359682f00620004e8565b60405190815260200160405180910390a3600080546001600160a01b03191633179055466038036200024657600b80546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e17905562000339565b466061036200027b57600b80546001600160a01b03191673d99d1c33f9fc3444f8101754abc46c52416550d117905562000339565b46600114806200028b5750466004145b80620002975750466003145b15620002c957600b80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d17905562000339565b4661a86a03620002ff57600b80546001600160a01b0319167360ae616a2155ee3d9a68541ba4544862310933d417905562000339565b4660fa036200033457600b80546001600160a01b03191673f491e7b69e4244ad4002bc14e878a34207e38c2917905562000339565b600080fd5b600080546001600160a01b0390811682526007602090815260408084208054600160ff19918216811790925530865282862080548216831790557fb0c2646e02af70b79e3fe9277b98373379f54150e4e26b2b5650139f7a75a65d8054821683179055855490941685526005909252909220805490911690911790556200052d565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000412578160001904821115620003f657620003f6620003bb565b808516156200040457918102915b93841c9390800290620003d6565b509250929050565b6000826200042b57506001620004ca565b816200043a57506000620004ca565b81600181146200045357600281146200045e576200047e565b6001915050620004ca565b60ff841115620004725762000472620003bb565b50506001821b620004ca565b5060208310610133831016604e8410600b8410161715620004a3575081810a620004ca565b620004af8383620003d1565b8060001904821115620004c657620004c6620003bb565b0290505b92915050565b6000620004e160ff8416836200041a565b9392505050565b6000816000190483118215151615620005055762000505620003bb565b500290565b6000826200052857634e487b7160e01b600052601260045260246000fd5b500490565b6148c5806200053d6000396000f3fe60806040526004361061037a5760003560e01c80634fbee193116101d1578063a9059cbb11610102578063dd62ed3e116100a0578063fb78680d1161006f578063fb78680d14610b48578063fdb78c0e14610b68578063fe575a8714610b87578063feadde9c14610ba757600080fd5b8063dd62ed3e14610a76578063eafb5a3c14610abc578063ee5d9c2d14610adc578063f94aa1b414610af157600080fd5b8063b7df8b36116100dc578063b7df8b361461099a578063bfc2fc35146109b4578063c6a276c2146109d4578063cf847706146109f457600080fd5b8063a9059cbb14610964578063b1b08f7114610984578063b3d514fb1461098457600080fd5b8063715018a61161016f578063893d20e811610149578063893d20e8146108d65780638a63bd9b146108f45780638a8c523c1461090957806395d89b411461091e57600080fd5b8063715018a61461088157806375cb1bd11461089657806380c581d1146108b657600080fd5b80635c24b074116101ab5780635c24b074146107dd5780635cce86cd146107fd5780636ebd00781461083657806370a082311461084b57600080fd5b80634fbee1931461076557806350a8e0161461079e578063590ffdce146107bd57600080fd5b80632610eaca116102ab57806336fddb041161024957806346ea7ac81161022357806346ea7ac8146106f55780634ada218b1461070b5780634e718e48146107255780634fb2e45d1461074557600080fd5b806336fddb04146106955780633f3cf56c146106b5578063452ed4f1146106d557600080fd5b80632e8fa821116102855780632e8fa82114610623578063313ce5671461063957806332cde6641461065557806333251a0b1461067557600080fd5b80632610eaca146105d757806328577751146105f75780632b28fc7a1461060d57600080fd5b8063095ea7b3116103185780630fa604e4116102f25780630fa604e41461056d57806318160ddd1461058257806323b872dd1461059757806326003957146105b757600080fd5b8063095ea7b3146104e4578063098f8b02146105145780630dcbcf1c1461053457600080fd5b8063069d955f11610354578063069d955f146103ff57806306fdde03146104555780630712d165146104a45780630758d924146104c457600080fd5b806303fd2a45146103865780630445b667146103b9578063044df726146103dd57600080fd5b3661038157005b600080fd5b34801561039257600080fd5b5061039c61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103c557600080fd5b506103cf60115481565b6040519081526020016103b0565b3480156103e957600080fd5b506103fd6103f83660046140e4565b610bc7565b005b34801561040b57600080fd5b506009546104309061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103b0565b34801561046157600080fd5b5060408051808201909152600d81527f5343524f20486f6c64696e67730000000000000000000000000000000000000060208201525b6040516103b0919061411d565b3480156104b057600080fd5b506103fd6104bf366004614189565b610ca4565b3480156104d057600080fd5b50600b5461039c906001600160a01b031681565b3480156104f057600080fd5b506105046104ff3660046141f2565b610e95565b60405190151581526020016103b0565b34801561052057600080fd5b506103fd61052f36600461421e565b610eac565b34801561054057600080fd5b5061050461054f366004614237565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561057957600080fd5b506103cf61155d565b34801561058e57600080fd5b506103cf61157d565b3480156105a357600080fd5b506105046105b2366004614254565b611599565b3480156105c357600080fd5b506103fd6105d2366004614295565b611611565b3480156105e357600080fd5b506103fd6105f23660046143a6565b611760565b34801561060357600080fd5b506103cf60145481565b34801561061957600080fd5b506103cf61076c81565b34801561062f57600080fd5b506103cf60125481565b34801561064557600080fd5b50604051601281526020016103b0565b34801561066157600080fd5b506103fd610670366004614468565b6118cd565b34801561068157600080fd5b506103fd610690366004614237565b611a67565b3480156106a157600080fd5b506103fd6106b03660046144ab565b611b31565b3480156106c157600080fd5b506103fd6106d0366004614295565b611baa565b3480156106e157600080fd5b50600c5461039c906001600160a01b031681565b34801561070157600080fd5b506103cf610bb881565b34801561071757600080fd5b506017546105049060ff1681565b34801561073157600080fd5b506103fd61074036600461421e565b611cfa565b34801561075157600080fd5b506103fd610760366004614237565b611d9e565b34801561077157600080fd5b50610504610780366004614237565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156107aa57600080fd5b5060175461050490610100900460ff1681565b3480156107c957600080fd5b506103fd6107d83660046144ab565b611fce565b3480156107e957600080fd5b506103fd6107f8366004614237565b612047565b34801561080957600080fd5b50610504610818366004614237565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561084257600080fd5b506103cf61213d565b34801561085757600080fd5b506103cf610866366004614237565b6001600160a01b031660009081526001602052604090205490565b34801561088d57600080fd5b506103fd612158565b3480156108a257600080fd5b506103fd6108b13660046144c9565b612217565b3480156108c257600080fd5b506103fd6108d13660046144ab565b6122b1565b3480156108e257600080fd5b506000546001600160a01b031661039c565b34801561090057600080fd5b50610504612457565b34801561091557600080fd5b506103fd6124c6565b34801561092a57600080fd5b5060408051808201909152600581527f5343524f480000000000000000000000000000000000000000000000000000006020820152610497565b34801561097057600080fd5b5061050461097f3660046141f2565b61272e565b34801561099057600080fd5b506103cf6107d081565b3480156109a657600080fd5b506013546105049060ff1681565b3480156109c057600080fd5b506103fd6109cf3660046140e4565b612745565b3480156109e057600080fd5b506103fd6109ef366004614237565b6127f2565b348015610a0057600080fd5b50600a54610a419061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016103b0565b348015610a8257600080fd5b506103cf610a91366004614514565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610ac857600080fd5b506103fd610ad7366004614237565b612892565b348015610ae857600080fd5b506103fd612c41565b348015610afd57600080fd5b50600d54600e54600f54610b1e926001600160a01b03908116928116911683565b604080516001600160a01b03948516815292841660208401529216918101919091526060016103b0565b348015610b5457600080fd5b506103fd610b63366004614542565b612d24565b348015610b7457600080fd5b5060105461050490610100900460ff1681565b348015610b9357600080fd5b50610504610ba2366004614237565b612e57565b348015610bb357600080fd5b506103fd610bc23660046144ab565b612ee5565b6000546001600160a01b03163314610c1a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b6017546040517fefbdbabd00000000000000000000000000000000000000000000000000000000815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610c8857600080fd5b505af1158015610c9c573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610cf25760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b600a805461ffff8681167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909216919091176201000086831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff16640100000000858316027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff16176601000000000000918416919091021790558082610d9a85876145a3565b610da491906145a3565b610dae91906145a3565b600a80547fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff166801000000000000000061ffff93841602179055600954600091610e0191620100008104821691166145a3565b600a5461ffff918216925068010000000000000000900416811015610e8e5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201527f6c20666565732e000000000000000000000000000000000000000000000000006064820152608401610c11565b5050505050565b6000610ea2338484612f5e565b5060015b92915050565b6000546001600160a01b03163314610efa5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b601754760100000000000000000000000000000000000000000000900460ff1615610f675760405162461bcd60e51b815260206004820152601360248201527f416c726561647920696e697469616c697a6564000000000000000000000000006044820152606401610c11565b60004711610fb75760405162461bcd60e51b815260206004820152601760248201527f436f6e7472616374206d7573742068617665204554482e0000000000000000006044820152606401610c11565b610fc36012600a6146ad565b610fcd90826146bc565b33600090815260016020526040902054101561102b5760405162461bcd60e51b815260206004820152601e60248201527f596f7520646f206e6f74206861766520656e6f75676820746f6b656e732e00006044820152606401610c11565b600b54604080517fc45a015500000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163c45a01559160048083019260209291908290030181865afa15801561108e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b291906146db565b6001600160a01b031663e6a4390530600b60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611114573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113891906146db565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561119b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bf91906146db565b90506001600160a01b03811661138757600b60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611222573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124691906146db565b6001600160a01b031663c9c6539630600b60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cc91906146db565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611331573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135591906146db565b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790556113b0565b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600c546001600160a01b039081166000908152600260205260408120805460ff1916600117905554600b546113ec929182169116600019612f5e565b600b546114069030906001600160a01b0316600019612f5e565b601780547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff167601000000000000000000000000000000000000000000001790556114536012600a6146ad565b61145d90836146bc565b915061146f333084600080600161306b565b50600b546001600160a01b031663f305d71947306114a2816001600160a01b031660009081526001602052604090205490565b6000805460405160e087901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03948516600482015260248101939093526044830182905260648301919091529190911660848201524260a482015260c40160606040518083038185885af1158015611529573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061154e91906146f8565b5050506115596124c6565b5050565b600061156b6012600a6146ad565b6016546115789190614726565b905090565b600061158b6012600a6146ad565b611578906359682f006146bc565b6001600160a01b0383166000908152600460209081526040808320338452909152812054600019146115fe576001600160a01b0384166000908152600460209081526040808320338452909152812080548492906115f8908490614761565b90915550505b61160984848461334a565b949350505050565b6000546001600160a01b0316331461165f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b606461166d6012600a6146ad565b61167b906359682f006146bc565b6116859190614726565b81836116936012600a6146ad565b6116a1906359682f006146bc565b6116ab91906146bc565b6116b59190614726565b10156117295760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201527f6f6620746f74616c20737570706c792e000000000000000000000000000000006064820152608401610c11565b80826117376012600a6146ad565b611745906359682f006146bc565b61174f91906146bc565b6117599190614726565b6016555050565b6000546001600160a01b031633146117ae5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b80518251146117ff5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610c11565b60005b82518160ff1610156118c857818160ff168151811061182357611823614778565b602002602001015161184a336001600160a01b031660009081526001602052604090205490565b101561185557600080fd5b6118b533848360ff168151811061186e5761186e614778565b60200260200101516012600a61188491906146ad565b858560ff168151811061189957611899614778565b60200260200101516118ab91906146bc565b600080600161306b565b50806118c0816147a7565b915050611802565b505050565b6000546001600160a01b0316331461191b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b61076c8361ffff161115801561193757506107d08261ffff1611155b801561194957506107d08161ffff1611155b6119955760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610c11565b610bb86119a283856145a3565b61ffff1611156119f45760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e6044820152606401610c11565b6009805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6000546001600160a01b03163314611ab55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b6017546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b906024015b600060405180830381600087803b158015611b1d57600080fd5b505af1158015610e8e573d6000803e3d6000fd5b6000546001600160a01b03163314611b7f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611bf85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b6103e8611c076012600a6146ad565b611c15906359682f006146bc565b611c1f9190614726565b8183611c2d6012600a6146ad565b611c3b906359682f006146bc565b611c4591906146bc565b611c4f9190614726565b1015611cc35760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610c11565b8082611cd16012600a6146ad565b611cdf906359682f006146bc565b611ce991906146bc565b611cf39190614726565b6015555050565b6000546001600160a01b03163314611d485760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b60c8811115611d995760405162461bcd60e51b815260206004820152601460248201527f43616e6e6f74207365742061626f76652032252e0000000000000000000000006044820152606401610c11565b601455565b6000546001600160a01b03163314611dec5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b6001600160a01b038116611e685760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c11565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21536001600160a01b03821601611f065760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c11565b60008054611f1f916001600160a01b0390911690611fce565b611f2a816001611fce565b600080546001600160a01b031681526001602052604090205415611f7157600080546001600160a01b03168082526001602052604090912054611f6f919083906118ab565b505b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b0316331461201c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146120955760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b60175460ff16156120a557600080fd5b306001600160a01b038216036120fd5760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610c11565b601780546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b600061214b6012600a6146ad565b6015546115789190614726565b6000546001600160a01b031633146121a65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b600080546121bf916001600160a01b0390911690611fce565b6000805473ffffffffffffffffffffffffffffffffffffffff19811682556040516001600160a01b03909116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6000546001600160a01b031633146122655760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b600d80546001600160a01b0394851673ffffffffffffffffffffffffffffffffffffffff1991821617909155600e805493851693821693909317909255600f8054919093169116179055565b6000546001600160a01b031633146122ff5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b80612376576001600160a01b03828116600081815260026020526040808220805460ff1916905560175490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401610c6e565b600354156123dd576203f480600354426123909190614761565b116123dd5760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610c11565b6001600160a01b0382811660008181526002602052604090819020805460ff191660019081179091554260035560175491517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830152620100009004909116906380c581d190604401610c6e565b600080546001600160a01b031633146124a65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b600b546124c09030906001600160a01b0316600019612f5e565b50600190565b6000546001600160a01b031633146125145760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b60175460ff16156125675760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610c11565b601754610100900460ff166125be5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610c11565b6017546201000090046001600160a01b031661260457601780547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601754600c546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260126064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561268f57600080fd5b505af19250505080156126a0575060015b506017805460ff19166001179055600c54612710906126dd906001600160a01b03166001600160a01b031660009081526001602052604090205490565b6126e890600a6146bc565b6126f29190614726565b601155600c546001600160a01b03166000908152600160205260409020546127109061271f90601e6146bc565b6127299190614726565b601255565b600061273b33848461334a565b5060019392505050565b6000546001600160a01b031633146127935760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b6010805461ff001916610100841515908102919091179091556013805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b6000546001600160a01b031633146128405760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b6017546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152620100009092049091169063c6a276c290602401611b03565b6000546001600160a01b031633146128e05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612925573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061294991906146db565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612996573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129ba91906146db565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612a1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a4191906146db565b90506001600160a01b038116612bdf57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab391906146db565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b2491906146db565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612b89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bad91906146db565b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055612c08565b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556118c8903090600019612f5e565b6000546001600160a01b03163314612c8f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b601754610100900460ff1615612ce75760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610c11565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015612d21573d6000803e3d6000fd5b50565b6000546001600160a01b03163314612d725760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b8284612d806012600a6146ad565b612d8e906359682f006146bc565b612d9891906146bc565b612da29190614726565b6011558082612db36012600a6146ad565b612dc1906359682f006146bc565b612dcb91906146bc565b612dd59190614726565b60128190556011541115612e515760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e7460448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610c11565b50505050565b6017546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015612ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea691906147c6565b6000546001600160a01b03163314612f335760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6001600160a01b038316612fb45760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610c11565b6001600160a01b03821661300a5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610c11565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601754600090610100900460ff1661316b576130878787613842565b601754610100900460ff161580156130a457506130a487876139b2565b80156130c957506001600160a01b03871660009081526006602052604090205460ff16155b80156130ee57506001600160a01b03861660009081526006602052604090205460ff16155b80156130f8575081155b1561316b5760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f60448201527f6e2e0000000000000000000000000000000000000000000000000000000000006064820152608401610c11565b61317587876139b2565b15613228576017546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015613211575060408051601f3d908101601f1916820190925261320e918101906147c6565b60015b61321a57600080fd5b90508061322657600080fd5b505b6001600160a01b03871660009081526007602052604090205460019060ff168061326a57506001600160a01b03871660009081526007602052604090205460ff165b15613273575060005b6001600160a01b0388166000908152600160205260408120805488929061329b908490614761565b9091555060009050816132ae57866132ba565b6132ba8987878a613a87565b6001600160a01b0389166000908152600160205260408120805492935083929091906132e79084906147e3565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161333391815260200190565b60405180910390a350600198975050505050505050565b60006001600160a01b0384166133c85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610c11565b6001600160a01b0383166134445760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610c11565b600082116134ba5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610c11565b601754760100000000000000000000000000000000000000000000900460ff166135265760405162461bcd60e51b815260206004820152601c60248201527f4c50206d75737420666972737420626520696e7469616c697a65642e000000006044820152606401610c11565b6001600160a01b0384166000908152600260205260408120548190819060ff16156135545760019250613582565b6001600160a01b03861660009081526002602052604090205460ff161561357e5760019150613582565b5060015b61358c87876139b2565b156137925760175460ff166135e35760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610c11565b82806135ec5750815b156136b0576001600160a01b03871660009081526008602052604090205460ff1615801561363357506001600160a01b03861660009081526008602052604090205460ff16155b156136b0576015548511156136b05760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610c11565b600b546001600160a01b038781169116148015906136cc575081155b15613792576001600160a01b03861660009081526008602052604090205460ff166137925760165485613714886001600160a01b031660009081526001602052604090205490565b61371e91906147e3565b11156137925760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610c11565b81156138295760105460ff1661382957601054610100900460ff1615613829573060009081526001602052604090205460115481106138275760125460135460ff161561381157601454600c546001600160a01b031660009081526001602052604090205461271091613804916146bc565b61380e9190614726565b90505b80821061381c578091505b61382582613b53565b505b505b61383787878786868661306b565b979650505050505050565b601754610100900460ff16156138c05760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610c11565b6138ca82826139b2565b1580156138e45750600c546001600160a01b038281169116145b15611559576001600160a01b038083166000908152600560209081526040808320805460ff19908116600190811790925560079093529220805490911690911790556017805461ff00191661010017908190556201000090041661397257601780547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b6010805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020016127e6565b600080546001600160a01b038481169116148015906139df57506000546001600160a01b03838116911614155b80156139f657506000546001600160a01b03163214155b8015613a1b57506001600160a01b03821660009081526005602052604090205460ff16155b8015613a4057506001600160a01b03831660009081526005602052604090205460ff16155b8015613a5757506001600160a01b03821661dead14155b8015613a6b57506001600160a01b03821615155b8015613a8057506001600160a01b0383163014155b9392505050565b6000808415613a9d575060095461ffff16613ac7565b8315613ab6575060095462010000900461ffff16613ac7565b50600954640100000000900461ffff165b6000612710613ad683866146bc565b613ae09190614726565b30600090815260016020526040812080549293508392909190613b049084906147e3565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36138378185614761565b6010805460ff191660011790556040805160a081018252600a5461ffff8082168352620100008204811660208401526401000000008204811693830193909352660100000000000081048316606083015268010000000000000000900490911660808201819052600003613bc757506140c9565b306000908152600460209081526040808320600b546001600160a01b0316845290915290205460001914613c2057306000908152600460209081526040808320600b546001600160a01b03168452909152902060001990555b60006002826080015161ffff16836000015161ffff1685613c4191906146bc565b613c4b9190614726565b613c559190614726565b90506000613c638285614761565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613c9d57613c9d614778565b6001600160a01b03928316602091820292909201810191909152600b54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d3391906146db565b81600181518110613d4657613d46614778565b6001600160a01b039283166020918202929092010152600b546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790613da59085906000908690309042906004016147fb565b600060405180830381600087803b158015613dbf57600080fd5b505af1158015613dd3573d6000803e3d6000fd5b5047925060009150849050613de886846146bc565b613df29190614726565b90508415613ee357600b546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015613e81573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613ea691906146f8565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b613eed8183614761565b9150856000015186608001818151613f05919061486c565b61ffff9081169091526080880151604089015160009350839291821691613f2d9116866146bc565b613f379190614726565b90506000886080015161ffff16896060015161ffff1686613f5891906146bc565b613f629190614726565b90506000613f7082846147e3565b613f7a9087614761565b60608b015190915061ffff1615613fe857600f546040516001600160a01b03909116906188b89084906000818181858888f193505050503d8060008114613fdd576040519150601f19603f3d011682016040523d82523d6000602084013e613fe2565b606091505b50909450505b60408a015161ffff161561405357600e546040516001600160a01b03909116906188b89085906000818181858888f193505050503d8060008114614048576040519150601f19603f3d011682016040523d82523d6000602084013e61404d565b606091505b50909450505b60208a015161ffff16156140be57600d546040516001600160a01b03909116906188b89083906000818181858888f193505050503d80600081146140b3576040519150601f19603f3d011682016040523d82523d6000602084013e6140b8565b606091505b50909450505b505050505050505050505b506010805460ff19169055565b8015158114612d2157600080fd5b600080604083850312156140f757600080fd5b8235614102816140d6565b91506020830135614112816140d6565b809150509250929050565b600060208083528351808285015260005b8181101561414a5785810183015185820160400152820161412e565b8181111561415c576000604083870101525b50601f01601f1916929092016040019392505050565b803561ffff8116811461418457600080fd5b919050565b6000806000806080858703121561419f57600080fd5b6141a885614172565b93506141b660208601614172565b92506141c460408601614172565b91506141d260608601614172565b905092959194509250565b6001600160a01b0381168114612d2157600080fd5b6000806040838503121561420557600080fd5b8235614210816141dd565b946020939093013593505050565b60006020828403121561423057600080fd5b5035919050565b60006020828403121561424957600080fd5b8135613a80816141dd565b60008060006060848603121561426957600080fd5b8335614274816141dd565b92506020840135614284816141dd565b929592945050506040919091013590565b600080604083850312156142a857600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561430f5761430f6142b7565b604052919050565b600067ffffffffffffffff821115614331576143316142b7565b5060051b60200190565b600082601f83011261434c57600080fd5b8135602061436161435c83614317565b6142e6565b82815260059290921b8401810191818101908684111561438057600080fd5b8286015b8481101561439b5780358352918301918301614384565b509695505050505050565b600080604083850312156143b957600080fd5b823567ffffffffffffffff808211156143d157600080fd5b818501915085601f8301126143e557600080fd5b813560206143f561435c83614317565b82815260059290921b8401810191818101908984111561441457600080fd5b948201945b8386101561443b57853561442c816141dd565b82529482019490820190614419565b9650508601359250508082111561445157600080fd5b5061445e8582860161433b565b9150509250929050565b60008060006060848603121561447d57600080fd5b61448684614172565b925061449460208501614172565b91506144a260408501614172565b90509250925092565b600080604083850312156144be57600080fd5b8235614102816141dd565b6000806000606084860312156144de57600080fd5b83356144e9816141dd565b925060208401356144f9816141dd565b91506040840135614509816141dd565b809150509250925092565b6000806040838503121561452757600080fd5b8235614532816141dd565b91506020830135614112816141dd565b6000806000806080858703121561455857600080fd5b5050823594602084013594506040840135936060013592509050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff8083168185168083038211156145c0576145c0614574565b01949350505050565b600181815b808511156146045781600019048211156145ea576145ea614574565b808516156145f757918102915b93841c93908002906145ce565b509250929050565b60008261461b57506001610ea6565b8161462857506000610ea6565b816001811461463e576002811461464857614664565b6001915050610ea6565b60ff84111561465957614659614574565b50506001821b610ea6565b5060208310610133831016604e8410600b8410161715614687575081810a610ea6565b61469183836145c9565b80600019048211156146a5576146a5614574565b029392505050565b6000613a8060ff84168361460c565b60008160001904831182151516156146d6576146d6614574565b500290565b6000602082840312156146ed57600080fd5b8151613a80816141dd565b60008060006060848603121561470d57600080fd5b8351925060208401519150604084015190509250925092565b60008261475c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008282101561477357614773614574565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff821660ff81036147bd576147bd614574565b60010192915050565b6000602082840312156147d857600080fd5b8151613a80816140d6565b600082198211156147f6576147f6614574565b500190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561484b5784516001600160a01b031683529383019391830191600101614826565b50506001600160a01b03969096166060850152505050608001529392505050565b600061ffff8381169083168181101561488757614887614574565b03939250505056fea2646970667358221220caa4a6530ba94c6e7063fcd35d4f44516d2306063993c8397aa5029b9c3be55164736f6c634300080f0033

Deployed Bytecode

0x60806040526004361061037a5760003560e01c80634fbee193116101d1578063a9059cbb11610102578063dd62ed3e116100a0578063fb78680d1161006f578063fb78680d14610b48578063fdb78c0e14610b68578063fe575a8714610b87578063feadde9c14610ba757600080fd5b8063dd62ed3e14610a76578063eafb5a3c14610abc578063ee5d9c2d14610adc578063f94aa1b414610af157600080fd5b8063b7df8b36116100dc578063b7df8b361461099a578063bfc2fc35146109b4578063c6a276c2146109d4578063cf847706146109f457600080fd5b8063a9059cbb14610964578063b1b08f7114610984578063b3d514fb1461098457600080fd5b8063715018a61161016f578063893d20e811610149578063893d20e8146108d65780638a63bd9b146108f45780638a8c523c1461090957806395d89b411461091e57600080fd5b8063715018a61461088157806375cb1bd11461089657806380c581d1146108b657600080fd5b80635c24b074116101ab5780635c24b074146107dd5780635cce86cd146107fd5780636ebd00781461083657806370a082311461084b57600080fd5b80634fbee1931461076557806350a8e0161461079e578063590ffdce146107bd57600080fd5b80632610eaca116102ab57806336fddb041161024957806346ea7ac81161022357806346ea7ac8146106f55780634ada218b1461070b5780634e718e48146107255780634fb2e45d1461074557600080fd5b806336fddb04146106955780633f3cf56c146106b5578063452ed4f1146106d557600080fd5b80632e8fa821116102855780632e8fa82114610623578063313ce5671461063957806332cde6641461065557806333251a0b1461067557600080fd5b80632610eaca146105d757806328577751146105f75780632b28fc7a1461060d57600080fd5b8063095ea7b3116103185780630fa604e4116102f25780630fa604e41461056d57806318160ddd1461058257806323b872dd1461059757806326003957146105b757600080fd5b8063095ea7b3146104e4578063098f8b02146105145780630dcbcf1c1461053457600080fd5b8063069d955f11610354578063069d955f146103ff57806306fdde03146104555780630712d165146104a45780630758d924146104c457600080fd5b806303fd2a45146103865780630445b667146103b9578063044df726146103dd57600080fd5b3661038157005b600080fd5b34801561039257600080fd5b5061039c61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103c557600080fd5b506103cf60115481565b6040519081526020016103b0565b3480156103e957600080fd5b506103fd6103f83660046140e4565b610bc7565b005b34801561040b57600080fd5b506009546104309061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103b0565b34801561046157600080fd5b5060408051808201909152600d81527f5343524f20486f6c64696e67730000000000000000000000000000000000000060208201525b6040516103b0919061411d565b3480156104b057600080fd5b506103fd6104bf366004614189565b610ca4565b3480156104d057600080fd5b50600b5461039c906001600160a01b031681565b3480156104f057600080fd5b506105046104ff3660046141f2565b610e95565b60405190151581526020016103b0565b34801561052057600080fd5b506103fd61052f36600461421e565b610eac565b34801561054057600080fd5b5061050461054f366004614237565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561057957600080fd5b506103cf61155d565b34801561058e57600080fd5b506103cf61157d565b3480156105a357600080fd5b506105046105b2366004614254565b611599565b3480156105c357600080fd5b506103fd6105d2366004614295565b611611565b3480156105e357600080fd5b506103fd6105f23660046143a6565b611760565b34801561060357600080fd5b506103cf60145481565b34801561061957600080fd5b506103cf61076c81565b34801561062f57600080fd5b506103cf60125481565b34801561064557600080fd5b50604051601281526020016103b0565b34801561066157600080fd5b506103fd610670366004614468565b6118cd565b34801561068157600080fd5b506103fd610690366004614237565b611a67565b3480156106a157600080fd5b506103fd6106b03660046144ab565b611b31565b3480156106c157600080fd5b506103fd6106d0366004614295565b611baa565b3480156106e157600080fd5b50600c5461039c906001600160a01b031681565b34801561070157600080fd5b506103cf610bb881565b34801561071757600080fd5b506017546105049060ff1681565b34801561073157600080fd5b506103fd61074036600461421e565b611cfa565b34801561075157600080fd5b506103fd610760366004614237565b611d9e565b34801561077157600080fd5b50610504610780366004614237565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156107aa57600080fd5b5060175461050490610100900460ff1681565b3480156107c957600080fd5b506103fd6107d83660046144ab565b611fce565b3480156107e957600080fd5b506103fd6107f8366004614237565b612047565b34801561080957600080fd5b50610504610818366004614237565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561084257600080fd5b506103cf61213d565b34801561085757600080fd5b506103cf610866366004614237565b6001600160a01b031660009081526001602052604090205490565b34801561088d57600080fd5b506103fd612158565b3480156108a257600080fd5b506103fd6108b13660046144c9565b612217565b3480156108c257600080fd5b506103fd6108d13660046144ab565b6122b1565b3480156108e257600080fd5b506000546001600160a01b031661039c565b34801561090057600080fd5b50610504612457565b34801561091557600080fd5b506103fd6124c6565b34801561092a57600080fd5b5060408051808201909152600581527f5343524f480000000000000000000000000000000000000000000000000000006020820152610497565b34801561097057600080fd5b5061050461097f3660046141f2565b61272e565b34801561099057600080fd5b506103cf6107d081565b3480156109a657600080fd5b506013546105049060ff1681565b3480156109c057600080fd5b506103fd6109cf3660046140e4565b612745565b3480156109e057600080fd5b506103fd6109ef366004614237565b6127f2565b348015610a0057600080fd5b50600a54610a419061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016103b0565b348015610a8257600080fd5b506103cf610a91366004614514565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610ac857600080fd5b506103fd610ad7366004614237565b612892565b348015610ae857600080fd5b506103fd612c41565b348015610afd57600080fd5b50600d54600e54600f54610b1e926001600160a01b03908116928116911683565b604080516001600160a01b03948516815292841660208401529216918101919091526060016103b0565b348015610b5457600080fd5b506103fd610b63366004614542565b612d24565b348015610b7457600080fd5b5060105461050490610100900460ff1681565b348015610b9357600080fd5b50610504610ba2366004614237565b612e57565b348015610bb357600080fd5b506103fd610bc23660046144ab565b612ee5565b6000546001600160a01b03163314610c1a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b6017546040517fefbdbabd00000000000000000000000000000000000000000000000000000000815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610c8857600080fd5b505af1158015610c9c573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610cf25760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b600a805461ffff8681167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909216919091176201000086831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff16640100000000858316027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff16176601000000000000918416919091021790558082610d9a85876145a3565b610da491906145a3565b610dae91906145a3565b600a80547fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff166801000000000000000061ffff93841602179055600954600091610e0191620100008104821691166145a3565b600a5461ffff918216925068010000000000000000900416811015610e8e5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201527f6c20666565732e000000000000000000000000000000000000000000000000006064820152608401610c11565b5050505050565b6000610ea2338484612f5e565b5060015b92915050565b6000546001600160a01b03163314610efa5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b601754760100000000000000000000000000000000000000000000900460ff1615610f675760405162461bcd60e51b815260206004820152601360248201527f416c726561647920696e697469616c697a6564000000000000000000000000006044820152606401610c11565b60004711610fb75760405162461bcd60e51b815260206004820152601760248201527f436f6e7472616374206d7573742068617665204554482e0000000000000000006044820152606401610c11565b610fc36012600a6146ad565b610fcd90826146bc565b33600090815260016020526040902054101561102b5760405162461bcd60e51b815260206004820152601e60248201527f596f7520646f206e6f74206861766520656e6f75676820746f6b656e732e00006044820152606401610c11565b600b54604080517fc45a015500000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163c45a01559160048083019260209291908290030181865afa15801561108e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b291906146db565b6001600160a01b031663e6a4390530600b60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611114573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113891906146db565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561119b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bf91906146db565b90506001600160a01b03811661138757600b60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611222573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124691906146db565b6001600160a01b031663c9c6539630600b60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cc91906146db565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611331573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135591906146db565b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790556113b0565b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600c546001600160a01b039081166000908152600260205260408120805460ff1916600117905554600b546113ec929182169116600019612f5e565b600b546114069030906001600160a01b0316600019612f5e565b601780547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff167601000000000000000000000000000000000000000000001790556114536012600a6146ad565b61145d90836146bc565b915061146f333084600080600161306b565b50600b546001600160a01b031663f305d71947306114a2816001600160a01b031660009081526001602052604090205490565b6000805460405160e087901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03948516600482015260248101939093526044830182905260648301919091529190911660848201524260a482015260c40160606040518083038185885af1158015611529573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061154e91906146f8565b5050506115596124c6565b5050565b600061156b6012600a6146ad565b6016546115789190614726565b905090565b600061158b6012600a6146ad565b611578906359682f006146bc565b6001600160a01b0383166000908152600460209081526040808320338452909152812054600019146115fe576001600160a01b0384166000908152600460209081526040808320338452909152812080548492906115f8908490614761565b90915550505b61160984848461334a565b949350505050565b6000546001600160a01b0316331461165f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b606461166d6012600a6146ad565b61167b906359682f006146bc565b6116859190614726565b81836116936012600a6146ad565b6116a1906359682f006146bc565b6116ab91906146bc565b6116b59190614726565b10156117295760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201527f6f6620746f74616c20737570706c792e000000000000000000000000000000006064820152608401610c11565b80826117376012600a6146ad565b611745906359682f006146bc565b61174f91906146bc565b6117599190614726565b6016555050565b6000546001600160a01b031633146117ae5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b80518251146117ff5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610c11565b60005b82518160ff1610156118c857818160ff168151811061182357611823614778565b602002602001015161184a336001600160a01b031660009081526001602052604090205490565b101561185557600080fd5b6118b533848360ff168151811061186e5761186e614778565b60200260200101516012600a61188491906146ad565b858560ff168151811061189957611899614778565b60200260200101516118ab91906146bc565b600080600161306b565b50806118c0816147a7565b915050611802565b505050565b6000546001600160a01b0316331461191b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b61076c8361ffff161115801561193757506107d08261ffff1611155b801561194957506107d08161ffff1611155b6119955760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610c11565b610bb86119a283856145a3565b61ffff1611156119f45760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e6044820152606401610c11565b6009805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6000546001600160a01b03163314611ab55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b6017546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b906024015b600060405180830381600087803b158015611b1d57600080fd5b505af1158015610e8e573d6000803e3d6000fd5b6000546001600160a01b03163314611b7f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611bf85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b6103e8611c076012600a6146ad565b611c15906359682f006146bc565b611c1f9190614726565b8183611c2d6012600a6146ad565b611c3b906359682f006146bc565b611c4591906146bc565b611c4f9190614726565b1015611cc35760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610c11565b8082611cd16012600a6146ad565b611cdf906359682f006146bc565b611ce991906146bc565b611cf39190614726565b6015555050565b6000546001600160a01b03163314611d485760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b60c8811115611d995760405162461bcd60e51b815260206004820152601460248201527f43616e6e6f74207365742061626f76652032252e0000000000000000000000006044820152606401610c11565b601455565b6000546001600160a01b03163314611dec5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b6001600160a01b038116611e685760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c11565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21536001600160a01b03821601611f065760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c11565b60008054611f1f916001600160a01b0390911690611fce565b611f2a816001611fce565b600080546001600160a01b031681526001602052604090205415611f7157600080546001600160a01b03168082526001602052604090912054611f6f919083906118ab565b505b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b0316331461201c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146120955760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b60175460ff16156120a557600080fd5b306001600160a01b038216036120fd5760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610c11565b601780546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b600061214b6012600a6146ad565b6015546115789190614726565b6000546001600160a01b031633146121a65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b600080546121bf916001600160a01b0390911690611fce565b6000805473ffffffffffffffffffffffffffffffffffffffff19811682556040516001600160a01b03909116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6000546001600160a01b031633146122655760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b600d80546001600160a01b0394851673ffffffffffffffffffffffffffffffffffffffff1991821617909155600e805493851693821693909317909255600f8054919093169116179055565b6000546001600160a01b031633146122ff5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b80612376576001600160a01b03828116600081815260026020526040808220805460ff1916905560175490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401610c6e565b600354156123dd576203f480600354426123909190614761565b116123dd5760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610c11565b6001600160a01b0382811660008181526002602052604090819020805460ff191660019081179091554260035560175491517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830152620100009004909116906380c581d190604401610c6e565b600080546001600160a01b031633146124a65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b600b546124c09030906001600160a01b0316600019612f5e565b50600190565b6000546001600160a01b031633146125145760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b60175460ff16156125675760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610c11565b601754610100900460ff166125be5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610c11565b6017546201000090046001600160a01b031661260457601780547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601754600c546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260126064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561268f57600080fd5b505af19250505080156126a0575060015b506017805460ff19166001179055600c54612710906126dd906001600160a01b03166001600160a01b031660009081526001602052604090205490565b6126e890600a6146bc565b6126f29190614726565b601155600c546001600160a01b03166000908152600160205260409020546127109061271f90601e6146bc565b6127299190614726565b601255565b600061273b33848461334a565b5060019392505050565b6000546001600160a01b031633146127935760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b6010805461ff001916610100841515908102919091179091556013805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b6000546001600160a01b031633146128405760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b6017546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152620100009092049091169063c6a276c290602401611b03565b6000546001600160a01b031633146128e05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612925573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061294991906146db565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612996573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129ba91906146db565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612a1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a4191906146db565b90506001600160a01b038116612bdf57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab391906146db565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b2491906146db565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612b89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bad91906146db565b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055612c08565b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556118c8903090600019612f5e565b6000546001600160a01b03163314612c8f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b601754610100900460ff1615612ce75760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610c11565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015612d21573d6000803e3d6000fd5b50565b6000546001600160a01b03163314612d725760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b8284612d806012600a6146ad565b612d8e906359682f006146bc565b612d9891906146bc565b612da29190614726565b6011558082612db36012600a6146ad565b612dc1906359682f006146bc565b612dcb91906146bc565b612dd59190614726565b60128190556011541115612e515760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e7460448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610c11565b50505050565b6017546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015612ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea691906147c6565b6000546001600160a01b03163314612f335760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c11565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6001600160a01b038316612fb45760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610c11565b6001600160a01b03821661300a5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610c11565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601754600090610100900460ff1661316b576130878787613842565b601754610100900460ff161580156130a457506130a487876139b2565b80156130c957506001600160a01b03871660009081526006602052604090205460ff16155b80156130ee57506001600160a01b03861660009081526006602052604090205460ff16155b80156130f8575081155b1561316b5760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f60448201527f6e2e0000000000000000000000000000000000000000000000000000000000006064820152608401610c11565b61317587876139b2565b15613228576017546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015613211575060408051601f3d908101601f1916820190925261320e918101906147c6565b60015b61321a57600080fd5b90508061322657600080fd5b505b6001600160a01b03871660009081526007602052604090205460019060ff168061326a57506001600160a01b03871660009081526007602052604090205460ff165b15613273575060005b6001600160a01b0388166000908152600160205260408120805488929061329b908490614761565b9091555060009050816132ae57866132ba565b6132ba8987878a613a87565b6001600160a01b0389166000908152600160205260408120805492935083929091906132e79084906147e3565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161333391815260200190565b60405180910390a350600198975050505050505050565b60006001600160a01b0384166133c85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610c11565b6001600160a01b0383166134445760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610c11565b600082116134ba5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610c11565b601754760100000000000000000000000000000000000000000000900460ff166135265760405162461bcd60e51b815260206004820152601c60248201527f4c50206d75737420666972737420626520696e7469616c697a65642e000000006044820152606401610c11565b6001600160a01b0384166000908152600260205260408120548190819060ff16156135545760019250613582565b6001600160a01b03861660009081526002602052604090205460ff161561357e5760019150613582565b5060015b61358c87876139b2565b156137925760175460ff166135e35760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610c11565b82806135ec5750815b156136b0576001600160a01b03871660009081526008602052604090205460ff1615801561363357506001600160a01b03861660009081526008602052604090205460ff16155b156136b0576015548511156136b05760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610c11565b600b546001600160a01b038781169116148015906136cc575081155b15613792576001600160a01b03861660009081526008602052604090205460ff166137925760165485613714886001600160a01b031660009081526001602052604090205490565b61371e91906147e3565b11156137925760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610c11565b81156138295760105460ff1661382957601054610100900460ff1615613829573060009081526001602052604090205460115481106138275760125460135460ff161561381157601454600c546001600160a01b031660009081526001602052604090205461271091613804916146bc565b61380e9190614726565b90505b80821061381c578091505b61382582613b53565b505b505b61383787878786868661306b565b979650505050505050565b601754610100900460ff16156138c05760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610c11565b6138ca82826139b2565b1580156138e45750600c546001600160a01b038281169116145b15611559576001600160a01b038083166000908152600560209081526040808320805460ff19908116600190811790925560079093529220805490911690911790556017805461ff00191661010017908190556201000090041661397257601780547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b6010805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020016127e6565b600080546001600160a01b038481169116148015906139df57506000546001600160a01b03838116911614155b80156139f657506000546001600160a01b03163214155b8015613a1b57506001600160a01b03821660009081526005602052604090205460ff16155b8015613a4057506001600160a01b03831660009081526005602052604090205460ff16155b8015613a5757506001600160a01b03821661dead14155b8015613a6b57506001600160a01b03821615155b8015613a8057506001600160a01b0383163014155b9392505050565b6000808415613a9d575060095461ffff16613ac7565b8315613ab6575060095462010000900461ffff16613ac7565b50600954640100000000900461ffff165b6000612710613ad683866146bc565b613ae09190614726565b30600090815260016020526040812080549293508392909190613b049084906147e3565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36138378185614761565b6010805460ff191660011790556040805160a081018252600a5461ffff8082168352620100008204811660208401526401000000008204811693830193909352660100000000000081048316606083015268010000000000000000900490911660808201819052600003613bc757506140c9565b306000908152600460209081526040808320600b546001600160a01b0316845290915290205460001914613c2057306000908152600460209081526040808320600b546001600160a01b03168452909152902060001990555b60006002826080015161ffff16836000015161ffff1685613c4191906146bc565b613c4b9190614726565b613c559190614726565b90506000613c638285614761565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613c9d57613c9d614778565b6001600160a01b03928316602091820292909201810191909152600b54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d3391906146db565b81600181518110613d4657613d46614778565b6001600160a01b039283166020918202929092010152600b546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790613da59085906000908690309042906004016147fb565b600060405180830381600087803b158015613dbf57600080fd5b505af1158015613dd3573d6000803e3d6000fd5b5047925060009150849050613de886846146bc565b613df29190614726565b90508415613ee357600b546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015613e81573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613ea691906146f8565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b613eed8183614761565b9150856000015186608001818151613f05919061486c565b61ffff9081169091526080880151604089015160009350839291821691613f2d9116866146bc565b613f379190614726565b90506000886080015161ffff16896060015161ffff1686613f5891906146bc565b613f629190614726565b90506000613f7082846147e3565b613f7a9087614761565b60608b015190915061ffff1615613fe857600f546040516001600160a01b03909116906188b89084906000818181858888f193505050503d8060008114613fdd576040519150601f19603f3d011682016040523d82523d6000602084013e613fe2565b606091505b50909450505b60408a015161ffff161561405357600e546040516001600160a01b03909116906188b89085906000818181858888f193505050503d8060008114614048576040519150601f19603f3d011682016040523d82523d6000602084013e61404d565b606091505b50909450505b60208a015161ffff16156140be57600d546040516001600160a01b03909116906188b89083906000818181858888f193505050503d80600081146140b3576040519150601f19603f3d011682016040523d82523d6000602084013e6140b8565b606091505b50909450505b505050505050505050505b506010805460ff19169055565b8015158114612d2157600080fd5b600080604083850312156140f757600080fd5b8235614102816140d6565b91506020830135614112816140d6565b809150509250929050565b600060208083528351808285015260005b8181101561414a5785810183015185820160400152820161412e565b8181111561415c576000604083870101525b50601f01601f1916929092016040019392505050565b803561ffff8116811461418457600080fd5b919050565b6000806000806080858703121561419f57600080fd5b6141a885614172565b93506141b660208601614172565b92506141c460408601614172565b91506141d260608601614172565b905092959194509250565b6001600160a01b0381168114612d2157600080fd5b6000806040838503121561420557600080fd5b8235614210816141dd565b946020939093013593505050565b60006020828403121561423057600080fd5b5035919050565b60006020828403121561424957600080fd5b8135613a80816141dd565b60008060006060848603121561426957600080fd5b8335614274816141dd565b92506020840135614284816141dd565b929592945050506040919091013590565b600080604083850312156142a857600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561430f5761430f6142b7565b604052919050565b600067ffffffffffffffff821115614331576143316142b7565b5060051b60200190565b600082601f83011261434c57600080fd5b8135602061436161435c83614317565b6142e6565b82815260059290921b8401810191818101908684111561438057600080fd5b8286015b8481101561439b5780358352918301918301614384565b509695505050505050565b600080604083850312156143b957600080fd5b823567ffffffffffffffff808211156143d157600080fd5b818501915085601f8301126143e557600080fd5b813560206143f561435c83614317565b82815260059290921b8401810191818101908984111561441457600080fd5b948201945b8386101561443b57853561442c816141dd565b82529482019490820190614419565b9650508601359250508082111561445157600080fd5b5061445e8582860161433b565b9150509250929050565b60008060006060848603121561447d57600080fd5b61448684614172565b925061449460208501614172565b91506144a260408501614172565b90509250925092565b600080604083850312156144be57600080fd5b8235614102816141dd565b6000806000606084860312156144de57600080fd5b83356144e9816141dd565b925060208401356144f9816141dd565b91506040840135614509816141dd565b809150509250925092565b6000806040838503121561452757600080fd5b8235614532816141dd565b91506020830135614112816141dd565b6000806000806080858703121561455857600080fd5b5050823594602084013594506040840135936060013592509050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff8083168185168083038211156145c0576145c0614574565b01949350505050565b600181815b808511156146045781600019048211156145ea576145ea614574565b808516156145f757918102915b93841c93908002906145ce565b509250929050565b60008261461b57506001610ea6565b8161462857506000610ea6565b816001811461463e576002811461464857614664565b6001915050610ea6565b60ff84111561465957614659614574565b50506001821b610ea6565b5060208310610133831016604e8410600b8410161715614687575081810a610ea6565b61469183836145c9565b80600019048211156146a5576146a5614574565b029392505050565b6000613a8060ff84168361460c565b60008160001904831182151516156146d6576146d6614574565b500290565b6000602082840312156146ed57600080fd5b8151613a80816141dd565b60008060006060848603121561470d57600080fd5b8351925060208401519150604084015190509250925092565b60008261475c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008282101561477357614773614574565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff821660ff81036147bd576147bd614574565b60010192915050565b6000602082840312156147d857600080fd5b8151613a80816140d6565b600082198211156147f6576147f6614574565b500190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561484b5784516001600160a01b031683529383019391830191600101614826565b50506001600160a01b03969096166060850152505050608001529392505050565b600061ffff8381169083168181101561488757614887614574565b03939250505056fea2646970667358221220caa4a6530ba94c6e7063fcd35d4f44516d2306063993c8397aa5029b9c3be55164736f6c634300080f0033

Deployed Bytecode Sourcemap

4083:23073:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5849:73;;;;;;;;;;;;5880:42;5849:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;5849:73:0;;;;;;;;6428:28;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;6428:28:0;245:177:1;15996:151:0;;;;;;;;;;-1:-1:-1;15996:151:0;;;;;:::i;:::-;;:::i;:::-;;5233:112;;;;;;;;;;-1:-1:-1;5233:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;1137:6:1;1170:15;;;1152:34;;1222:15;;;1217:2;1202:18;;1195:43;1274:15;;1254:18;;;1247:43;;;;1115:2;1100:18;5233:112:0;931:365:1;11798:80:0;;;;;;;;;;-1:-1:-1;11870:5:0;;;;;;;;;;;;;;;;;11798:80;;;;;;;:::i;16651:522::-;;;;;;;;;;-1:-1:-1;16651:522:0;;;;;:::i;:::-;;:::i;5788:26::-;;;;;;;;;;-1:-1:-1;5788:26:0;;;;-1:-1:-1;;;;;5788:26:0;;;12408:161;;;;;;;;;;-1:-1:-1;12408:161:0;;;;;:::i;:::-;;:::i;:::-;;;3424:14:1;;3417:22;3399:41;;3387:2;3372:18;12408:161:0;3259:187:1;8468:1272:0;;;;;;;;;;-1:-1:-1;8468:1272:0;;;;;:::i;:::-;;:::i;14943:140::-;;;;;;;;;;-1:-1:-1;14943:140:0;;;;;:::i;:::-;-1:-1:-1;;;;;15041:34:0;15017:4;15041:34;;;:25;:34;;;;;;;;;14943:140;18151:114;;;;;;;;;;;;;:::i;11533:83::-;;;;;;;;;;;;;:::i;13078:306::-;;;;;;;;;;-1:-1:-1;13078:306:0;;;;;:::i;:::-;;:::i;17765:264::-;;;;;;;;;;-1:-1:-1;17765:264:0;;;;;:::i;:::-;;:::i;25017:410::-;;;;;;;;;;-1:-1:-1;25017:410:0;;;;;:::i;:::-;;:::i;6536:28::-;;;;;;;;;;;;;;;;5532:42;;;;;;;;;;;;5570:4;5532:42;;6463:25;;;;;;;;;;;;;;;;11622:80;;;;;;;;;;-1:-1:-1;11622:80:0;;4873:2;7347:36:1;;7335:2;7320:18;11622:80:0;7205:184:1;16155:488:0;;;;;;;;;;-1:-1:-1;16155:488:0;;;;;:::i;:::-;;:::i;15880:108::-;;;;;;;;;;-1:-1:-1;15880:108:0;;;;;:::i;:::-;;:::i;15091:140::-;;;;;;;;;;-1:-1:-1;15091:140:0;;;;;:::i;:::-;;:::i;17488:269::-;;;;;;;;;;-1:-1:-1;17488:269:0;;;;;:::i;:::-;;:::i;5821:21::-;;;;;;;;;;-1:-1:-1;5821:21:0;;;;-1:-1:-1;;;;;5821:21:0;;;5685:46;;;;;;;;;;;;5727:4;5685:46;;6697:34;;;;;;;;;;-1:-1:-1;6697:34:0;;;;;;;;18654:215;;;;;;;;;;-1:-1:-1;18654:215:0;;;;;:::i;:::-;;:::i;10294:653::-;;;;;;;;;;-1:-1:-1;10294:653:0;;;;;:::i;:::-;;:::i;14808:127::-;;;;;;;;;;-1:-1:-1;14808:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;14899:28:0;14875:4;14899:28;;;:19;:28;;;;;;;;;14808:127;6738:36;;;;;;;;;;-1:-1:-1;6738:36:0;;;;;;;;;;;15239:134;;;;;;;;;;-1:-1:-1;15239:134:0;;;;;:::i;:::-;;:::i;14442:218::-;;;;;;;;;;-1:-1:-1;14442:218:0;;;;;:::i;:::-;;:::i;14668:132::-;;;;;;;;;;-1:-1:-1;14668:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;14762:30:0;14738:4;14762:30;;;:21;:30;;;;;;;;;14668:132;18035:108;;;;;;;;;;;;;:::i;12110:117::-;;;;;;;;;;-1:-1:-1;12110:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;12203:16:0;12176:7;12203:16;;;:7;:16;;;;;;;12110:117;10955:225;;;;;;;;;;;;;:::i;17181:299::-;;;;;;;;;;-1:-1:-1;17181:299:0;;;;;:::i;:::-;;:::i;13942:492::-;;;;;;;;;;-1:-1:-1;13942:492:0;;;;;:::i;:::-;;:::i;11884:79::-;;;;;;;;;;-1:-1:-1;11936:7:0;11954:6;-1:-1:-1;;;;;11954:6:0;11884:79;;12895:175;;;;;;;;;;;;;:::i;24275:544::-;;;;;;;;;;;;;:::i;11708:84::-;;;;;;;;;;-1:-1:-1;11782:7:0;;;;;;;;;;;;;;;;;11708:84;;12235:165;;;;;;;;;;-1:-1:-1;12235:165:0;;;;;:::i;:::-;;:::i;5631:47::-;;;;;;;;;;;;5674:4;5631:47;;6495:34;;;;;;;;;;-1:-1:-1;6495:34:0;;;;;;;;18877:263;;;;;;;;;;-1:-1:-1;18877:263:0;;;;;:::i;:::-;;:::i;15537:200::-;;;;;;;;;;-1:-1:-1;15537:200:0;;;;;:::i;:::-;;:::i;5354:169::-;;;;;;;;;;-1:-1:-1;5354:169:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8931:6:1;8964:15;;;8946:34;;9016:15;;;9011:2;8996:18;;8989:43;9068:15;;;9048:18;;;9041:43;;;;9120:15;;9115:2;9100:18;;9093:43;9173:15;;;9167:3;9152:19;;9145:44;8908:3;8893:19;5354:169:0;8672:523:1;11969:133:0;;;;;;;;;;-1:-1:-1;11969:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;12071:19:0;;;12053:7;12071:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;11969:133;13392:542;;;;;;;;;;-1:-1:-1;13392:542:0;;;;;:::i;:::-;;:::i;24827:182::-;;;;;;;;;;;;;:::i;6077:274::-;;;;;;;;;;-1:-1:-1;6077:274:0;;;;;;;;-1:-1:-1;;;;;6077:274:0;;;;;;;;;;;;;;-1:-1:-1;;;;;9922:15:1;;;9904:34;;9974:15;;;9969:2;9954:18;;9947:43;10026:15;;10006:18;;;9999:43;;;;9831:2;9816:18;6077:274:0;9593:455:1;18273:373:0;;;;;;;;;;-1:-1:-1;18273:373:0;;;;;:::i;:::-;;:::i;6382:39::-;;;;;;;;;;-1:-1:-1;6382:39:0;;;;;;;;;;;15745:127;;;;;;;;;;-1:-1:-1;15745:127:0;;;;;:::i;:::-;;:::i;15381:148::-;;;;;;;;;;-1:-1:-1;15381:148:0;;;;;:::i;:::-;;:::i;15996:151::-;7166:6;;-1:-1:-1;;;;;7166:6:0;7176:10;7166:20;7158:50;;;;-1:-1:-1;;;7158:50:0;;10645:2:1;7158:50:0;;;10627:21:1;10684:2;10664:18;;;10657:30;-1:-1:-1;;;10703:18:1;;;10696:47;10760:18;;7158:50:0;;;;;;;;;16091:9:::1;::::0;:48:::1;::::0;;;;10976:14:1;;10969:22;16091:48:0::1;::::0;::::1;10951:41:1::0;11035:14;;11028:22;11008:18;;;11001:50;16091:9:0;;;::::1;-1:-1:-1::0;;;;;16091:9:0::1;::::0;:24:::1;::::0;10924:18:1;;16091:48:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;15996:151:::0;;:::o;16651:522::-;7166:6;;-1:-1:-1;;;;;7166:6:0;7176:10;7166:20;7158:50;;;;-1:-1:-1;;;7158:50:0;;10645:2:1;7158:50:0;;;10627:21:1;10684:2;10664:18;;;10657:30;-1:-1:-1;;;10703:18:1;;;10696:47;10760:18;;7158:50:0;10443:341:1;7158:50:0;16776:7:::1;:29:::0;;::::1;::::0;;::::1;16816::::0;;;;;;;;;;;::::1;;;16900:33:::0;;16856;;;::::1;;16900::::0;;;;;;::::1;::::0;;;::::1;;::::0;;;16856;16964:21:::1;16816:29:::0;16776;16964:21:::1;:::i;:::-;:35;;;;:::i;:::-;:49;;;;:::i;:::-;16944:7;:69:::0;;;::::1;::::0;::::1;::::0;;::::1;;;::::0;;17059:9:::1;:17:::0;-1:-1:-1;;17040:36:0::1;::::0;17059:17;;::::1;::::0;::::1;::::0;17040:16:::1;:36;:::i;:::-;17095:7;:17:::0;17024:52:::1;::::0;;::::1;::::0;-1:-1:-1;17095:17:0;;::::1;;:26:::0;-1:-1:-1;17095:26:0::1;17087:78;;;::::0;-1:-1:-1;;;17087:78:0;;11682:2:1;17087:78:0::1;::::0;::::1;11664:21:1::0;11721:2;11701:18;;;11694:30;11760:34;11740:18;;;11733:62;11831:9;11811:18;;;11804:37;11858:19;;17087:78:0::1;11480:403:1::0;17087:78:0::1;16765:408;16651:522:::0;;;;:::o;12408:161::-;12485:4;12502:37;12511:10;12523:7;12532:6;12502:8;:37::i;:::-;-1:-1:-1;12557:4:0;12408:161;;;;;:::o;8468:1272::-;7166:6;;-1:-1:-1;;;;;7166:6:0;7176:10;7166:20;7158:50;;;;-1:-1:-1;;;7158:50:0;;10645:2:1;7158:50:0;;;10627:21:1;10684:2;10664:18;;;10657:30;-1:-1:-1;;;10703:18:1;;;10696:47;10760:18;;7158:50:0;10443:341:1;7158:50:0;8549:13:::1;::::0;;;::::1;;;8548:14;8540:46;;;::::0;-1:-1:-1;;;8540:46:0;;12090:2:1;8540:46:0::1;::::0;::::1;12072:21:1::0;12129:2;12109:18;;;12102:30;12168:21;12148:18;;;12141:49;12207:18;;8540:46:0::1;11888:343:1::0;8540:46:0::1;8629:1;8605:21;:25;8597:62;;;::::0;-1:-1:-1;;;8597:62:0;;12438:2:1;8597:62:0::1;::::0;::::1;12420:21:1::0;12477:2;12457:18;;;12450:30;12516:25;12496:18;;;12489:53;12559:18;;8597:62:0::1;12236:347:1::0;8597:62:0::1;8718:13;4873:2;8718;:13;:::i;:::-;8703:28;::::0;:12;:28:::1;:::i;:::-;8688:10;12176:7:::0;12203:16;;;:7;:16;;;;;;8678:53:::1;;8670:96;;;::::0;-1:-1:-1;;;8670:96:0;;14526:2:1;8670:96:0::1;::::0;::::1;14508:21:1::0;14565:2;14545:18;;;14538:30;14604:32;14584:18;;;14577:60;14654:18;;8670:96:0::1;14324:354:1::0;8670:96:0::1;8817:9;::::0;:19:::1;::::0;;;;;;;8787:16:::1;::::0;-1:-1:-1;;;;;8817:9:0::1;::::0;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:9;:19:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;8806:39:0::1;;8854:4;8861:9;;;;;;;;;-1:-1:-1::0;;;;;8861:9:0::1;-1:-1:-1::0;;;;;8861:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8806:72;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;15192:15:1;;;8806:72:0::1;::::0;::::1;15174:34:1::0;15244:15;;15224:18;;;15217:43;15086:18;;8806:72:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8787:91:::0;-1:-1:-1;;;;;;8893:22:0;::::1;8889:198;;8952:9;;;;;;;;;-1:-1:-1::0;;;;;8952:9:0::1;-1:-1:-1::0;;;;;8952:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;8941:42:0::1;;8992:4;8999:9;;;;;;;;;-1:-1:-1::0;;;;;8999:9:0::1;-1:-1:-1::0;;;;;8999:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8941:75;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;15192:15:1;;;8941:75:0::1;::::0;::::1;15174:34:1::0;15244:15;;15224:18;;;15217:43;15086:18;;8941:75:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8932:6;:84:::0;;-1:-1:-1;;8932:84:0::1;-1:-1:-1::0;;;;;8932:84:0;;;::::1;::::0;;;::::1;::::0;;8889:198:::1;;;9058:6;:17:::0;;-1:-1:-1;;9058:17:0::1;-1:-1:-1::0;;;;;9058:17:0;::::1;;::::0;;8889:198:::1;9105:6;::::0;-1:-1:-1;;;;;9105:6:0;;::::1;9097:15;::::0;;;:7:::1;:15;::::0;;;;:22;;-1:-1:-1;;9097:22:0::1;9115:4;9097:22;::::0;;9141:6;9157:9:::1;::::0;9132:55:::1;::::0;9141:6;;::::1;::::0;9157:9:::1;-1:-1:-1::0;;9132:8:0::1;:55::i;:::-;9230:9;::::0;9198:62:::1;::::0;9215:4:::1;::::0;-1:-1:-1;;;;;9230:9:0::1;-1:-1:-1::0;;9198:8:0::1;:62::i;:::-;9273:13;:20:::0;;;::::1;::::0;::::1;::::0;;9322:13:::1;4873:2;9322;:13;:::i;:::-;9306:29;::::0;;::::1;:::i;:::-;;;9346:77;9363:10;9383:4;9390:12;9404:5;9411::::0;9418:4:::1;9346:16;:77::i;:::-;-1:-1:-1::0;9436:9:0::1;::::0;-1:-1:-1;;;;;9436:9:0::1;:25;9469:21;9514:4;9534:24;9514:4:::0;-1:-1:-1;;;;;12203:16:0;12176:7;12203:16;;;:7;:16;;;;;;;12110:117;9534:24:::1;9573:1;9659:6:::0;;9436:270:::1;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;15653:15:1;;;9436:270:0::1;::::0;::::1;15635:34:1::0;15685:18;;;15678:34;;;;15728:18;;;15721:34;;;15771:18;;;15764:34;;;;9659:6:0;;;::::1;15814:19:1::0;;;15807:44;9680:15:0::1;15867:19:1::0;;;15860:35;15546:19;;9436:270:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;9717:15;:13;:15::i;:::-;8529:1211;8468:1272:::0;:::o;18151:114::-;18198:7;18243:13;4873:2;18243;:13;:::i;:::-;18225:14;;:32;;;;:::i;:::-;18218:39;;18151:114;:::o;11533:83::-;11588:7;4936:13;4873:2;4936;:13;:::i;:::-;4919:30;;4716:13;4919:30;:::i;13078:306::-;-1:-1:-1;;;;;13199:19:0;;13178:4;13199:19;;;:11;:19;;;;;;;;13219:10;13199:31;;;;;;;;-1:-1:-1;;13199:52:0;13195:126;;-1:-1:-1;;;;;13268:19:0;;;;;;:11;:19;;;;;;;;13288:10;13268:31;;;;;;;:41;;13303:6;;13268:19;:41;;13303:6;;13268:41;:::i;:::-;;;;-1:-1:-1;;13195:126:0;13340:36;13350:6;13358:9;13369:6;13340:9;:36::i;:::-;13333:43;13078:306;-1:-1:-1;;;;13078:306:0:o;17765:264::-;7166:6;;-1:-1:-1;;;;;7166:6:0;7176:10;7166:20;7158:50;;;;-1:-1:-1;;;7158:50:0;;10645:2:1;7158:50:0;;;10627:21:1;10684:2;10664:18;;;10657:30;-1:-1:-1;;;10703:18:1;;;10696:47;10760:18;;7158:50:0;10443:341:1;7158:50:0;17907:3:::1;4936:13;4873:2;4936;:13;:::i;:::-;4919:30;::::0;4716:13:::1;4919:30;:::i;:::-;17897:13;;;;:::i;:::-;17885:7:::0;17874;4936:13:::1;4873:2;4936;:13;:::i;:::-;4919:30;::::0;4716:13:::1;4919:30;:::i;:::-;17864:17;;;;:::i;:::-;17863:29;;;;:::i;:::-;:48;;17855:109;;;::::0;-1:-1:-1;;;17855:109:0;;16828:2:1;17855:109:0::1;::::0;::::1;16810:21:1::0;16867:2;16847:18;;;16840:30;16906:34;16886:18;;;16879:62;16977:18;16957;;;16950:46;17013:19;;17855:109:0::1;16626:412:1::0;17855:109:0::1;18014:7:::0;18003;4936:13:::1;4873:2;4936;:13;:::i;:::-;4919:30;::::0;4716:13:::1;4919:30;:::i;:::-;17993:17;;;;:::i;:::-;17992:29;;;;:::i;:::-;17975:14;:46:::0;-1:-1:-1;;17765:264:0:o;25017:410::-;7166:6;;-1:-1:-1;;;;;7166:6:0;7176:10;7166:20;7158:50;;;;-1:-1:-1;;;7158:50:0;;10645:2:1;7158:50:0;;;10627:21:1;10684:2;10664:18;;;10657:30;-1:-1:-1;;;10703:18:1;;;10696:47;10760:18;;7158:50:0;10443:341:1;7158:50:0;25152:7:::1;:14;25133:8;:15;:33;25125:67;;;::::0;-1:-1:-1;;;25125:67:0;;17245:2:1;25125:67:0::1;::::0;::::1;17227:21:1::0;17284:2;17264:18;;;17257:30;17323:23;17303:18;;;17296:51;17364:18;;25125:67:0::1;17043:345:1::0;25125:67:0::1;25208:7;25203:217;25225:8;:15;25221:1;:19;;;25203:217;;;25295:7;25303:1;25295:10;;;;;;;;;;:::i;:::-;;;;;;;25270:21;25280:10;-1:-1:-1::0;;;;;12203:16:0;12176:7;12203:16;;;:7;:16;;;;;;;12110:117;25270:21:::1;:35;;25262:44;;;::::0;::::1;;25321:87;25338:10;25350:8;25359:1;25350:11;;;;;;;;;;:::i;:::-;;;;;;;4873:2;25374;:13;;;;:::i;:::-;25363:7;25371:1;25363:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;25389:5;25396::::0;25403:4:::1;25321:16;:87::i;:::-;-1:-1:-1::0;25242:3:0;::::1;::::0;::::1;:::i;:::-;;;;25203:217;;;;25017:410:::0;;:::o;16155:488::-;7166:6;;-1:-1:-1;;;;;7166:6:0;7176:10;7166:20;7158:50;;;;-1:-1:-1;;;7158:50:0;;10645:2:1;7158:50:0;;;10627:21:1;10684:2;10664:18;;;10657:30;-1:-1:-1;;;10703:18:1;;;10696:47;10760:18;;7158:50:0;10443:341:1;7158:50:0;5570:4:::1;16262:6;:21;;;;:65;;;;;5620:4;16304:7;:23;;;;16262:65;:117;;;;;5674:4;16348:11;:31;;;;16262:117;16254:170;;;::::0;-1:-1:-1;;;16254:170:0;;17964:2:1;16254:170:0::1;::::0;::::1;17946:21:1::0;18003:2;17983:18;;;17976:30;18042:25;18022:18;;;18015:53;18085:18;;16254:170:0::1;17762:347:1::0;16254:170:0::1;5727:4;16443:16;16452:7:::0;16443:6;:16:::1;:::i;:::-;:35;;;;16435:80;;;::::0;-1:-1:-1;;;16435:80:0;;18316:2:1;16435:80:0::1;::::0;::::1;18298:21:1::0;;;18335:18;;;18328:30;18394:34;18374:18;;;18367:62;18446:18;;16435:80:0::1;18114:356:1::0;16435:80:0::1;16526:9;:25:::0;;::::1;::::0;;::::1;16562:27:::0;;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;16600:35:::0;::::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;16155:488::o;15880:108::-;7166:6;;-1:-1:-1;;;;;7166:6:0;7176:10;7166:20;7158:50;;;;-1:-1:-1;;;7158:50:0;;10645:2:1;7158:50:0;;;10627:21:1;10684:2;10664:18;;;10657:30;-1:-1:-1;;;10703:18:1;;;10696:47;10760:18;;7158:50:0;10443:341:1;7158:50:0;15949:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;15949:31:0::1;::::0;::::1;160:74:1::0;15949:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;133:18:1;;15949:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;15091:140:::0;7166:6;;-1:-1:-1;;;;;7166:6:0;7176:10;7166:20;7158:50;;;;-1:-1:-1;;;7158:50:0;;10645:2:1;7158:50:0;;;10627:21:1;10684:2;10664:18;;;10657:30;-1:-1:-1;;;10703:18:1;;;10696:47;10760:18;;7158:50:0;10443:341:1;7158:50:0;-1:-1:-1;;;;;15183:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;15183:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15091:140::o;17488:269::-;7166:6;;-1:-1:-1;;;;;7166:6:0;7176:10;7166:20;7158:50;;;;-1:-1:-1;;;7158:50:0;;10645:2:1;7158:50:0;;;10627:21:1;10684:2;10664:18;;;10657:30;-1:-1:-1;;;10703:18:1;;;10696:47;10760:18;;7158:50:0;10443:341:1;7158:50:0;17629:4:::1;4936:13;4873:2;4936;:13;:::i;:::-;4919:30;::::0;4716:13:::1;4919:30;:::i;:::-;17619:14;;;;:::i;:::-;17607:7:::0;17596;4936:13:::1;4873:2;4936;:13;:::i;:::-;4919:30;::::0;4716:13:::1;4919:30;:::i;:::-;17586:17;;;;:::i;:::-;17585:29;;;;:::i;:::-;:49;;17577:117;;;::::0;-1:-1:-1;;;17577:117:0;;18677:2:1;17577:117:0::1;::::0;::::1;18659:21:1::0;18716:2;18696:18;;;18689:30;18755:34;18735:18;;;18728:62;18826:25;18806:18;;;18799:53;18869:19;;17577:117:0::1;18475:419:1::0;17577:117:0::1;17742:7:::0;17731;4936:13:::1;4873:2;4936;:13;:::i;:::-;4919:30;::::0;4716:13:::1;4919:30;:::i;:::-;17721:17;;;;:::i;:::-;17720:29;;;;:::i;:::-;17705:12;:44:::0;-1:-1:-1;;17488:269:0:o;18654:215::-;7166:6;;-1:-1:-1;;;;;7166:6:0;7176:10;7166:20;7158:50;;;;-1:-1:-1;;;7158:50:0;;10645:2:1;7158:50:0;;;10627:21:1;10684:2;10664:18;;;10657:30;-1:-1:-1;;;10703:18:1;;;10696:47;10760:18;;7158:50:0;10443:341:1;7158:50:0;18784:3:::1;18758:22;:29;;18750:62;;;::::0;-1:-1:-1;;;18750:62:0;;19101:2:1;18750:62:0::1;::::0;::::1;19083:21:1::0;19140:2;19120:18;;;19113:30;19179:22;19159:18;;;19152:50;19219:18;;18750:62:0::1;18899:344:1::0;18750:62:0::1;18823:13;:38:::0;18654:215::o;10294:653::-;7166:6;;-1:-1:-1;;;;;7166:6:0;7176:10;7166:20;7158:50;;;;-1:-1:-1;;;7158:50:0;;10645:2:1;7158:50:0;;;10627:21:1;10684:2;10664:18;;;10657:30;-1:-1:-1;;;10703:18:1;;;10696:47;10760:18;;7158:50:0;10443:341:1;7158:50:0;-1:-1:-1;;;;;10373:22:0;::::1;10365:96;;;::::0;-1:-1:-1;;;10365:96:0;;19450:2:1;10365:96:0::1;::::0;::::1;19432:21:1::0;19489:2;19469:18;;;19462:30;19528:34;19508:18;;;19501:62;19599:31;19579:18;;;19572:59;19648:19;;10365:96:0::1;19248:425:1::0;10365:96:0::1;10480:16:::0;-1:-1:-1;;;;;10480:16:0;::::1;::::0;10472:90:::1;;;::::0;-1:-1:-1;;;10472:90:0;;19450:2:1;10472:90:0::1;::::0;::::1;19432:21:1::0;19489:2;19469:18;;;19462:30;19528:34;19508:18;;;19501:62;19599:31;19579:18;;;19572:59;19648:19;;10472:90:0::1;19248:425:1::0;10472:90:0::1;10593:6;::::0;;10573:34:::1;::::0;-1:-1:-1;;;;;10593:6:0;;::::1;::::0;10573:19:::1;:34::i;:::-;10618:35;10638:8;10648:4;10618:19;:35::i;:::-;10697:1;10687:6:::0;;-1:-1:-1;;;;;10687:6:0::1;12203:16:::0;;:7;:16;;;;;;10677:21;10674:126:::1;;10732:6;::::0;;-1:-1:-1;;;;;10732:6:0::1;12203:16:::0;;;:7;:16;;;;;;;10715:73:::1;::::0;10732:6;10740:8;;10750:17:::1;12110:117:::0;10715:73:::1;;10674:126;10820:16;10839:6:::0;;-1:-1:-1;;;;;10856:17:0;;::::1;-1:-1:-1::0;;10856:17:0;::::1;::::0;::::1;::::0;;10889:40:::1;::::0;10839:6;;;::::1;::::0;;;10889:40:::1;::::0;10820:16;10889:40:::1;10354:593;10294:653:::0;:::o;15239:134::-;7166:6;;-1:-1:-1;;;;;7166:6:0;7176:10;7166:20;7158:50;;;;-1:-1:-1;;;7158:50:0;;10645:2:1;7158:50:0;;;10627:21:1;10684:2;10664:18;;;10657:30;-1:-1:-1;;;10703:18:1;;;10696:47;10760:18;;7158:50:0;10443:341:1;7158:50:0;-1:-1:-1;;;;;15327:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;15327:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15239:134::o;14442:218::-;7166:6;;-1:-1:-1;;;;;7166:6:0;7176:10;7166:20;7158:50;;;;-1:-1:-1;;;7158:50:0;;10645:2:1;7158:50:0;;;10627:21:1;10684:2;10664:18;;;10657:30;-1:-1:-1;;;10703:18:1;;;10696:47;10760:18;;7158:50:0;10443:341:1;7158:50:0;14526:14:::1;::::0;::::1;;14525:15;14517:24;;;::::0;::::1;;14583:4;-1:-1:-1::0;;;;;14560:28:0;::::1;::::0;14552:55:::1;;;::::0;-1:-1:-1;;;14552:55:0;;19880:2:1;14552:55:0::1;::::0;::::1;19862:21:1::0;19919:2;19899:18;;;19892:30;19958:16;19938:18;;;19931:44;19992:18;;14552:55:0::1;19678:338:1::0;14552:55:0::1;14618:9;:34:::0;;-1:-1:-1;;;;;14618:34:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;14442:218::o;18035:108::-;18078:7;18121:13;4873:2;18121;:13;:::i;:::-;18105:12;;:30;;;;:::i;10955:225::-;7166:6;;-1:-1:-1;;;;;7166:6:0;7176:10;7166:20;7158:50;;;;-1:-1:-1;;;7158:50:0;;10645:2:1;7158:50:0;;;10627:21:1;10684:2;10664:18;;;10657:30;-1:-1:-1;;;10703:18:1;;;10696:47;10760:18;;7158:50:0;10443:341:1;7158:50:0;11034:6:::1;::::0;;11014:34:::1;::::0;-1:-1:-1;;;;;11034:6:0;;::::1;::::0;11014:19:::1;:34::i;:::-;11059:16;11078:6:::0;;-1:-1:-1;;11095:19:0;::::1;::::0;;11130:42:::1;::::0;-1:-1:-1;;;;;11078:6:0;;::::1;::::0;11059:16;11078:6;;11130:42:::1;::::0;11059:16;;11130:42:::1;11003:177;10955:225::o:0;17181:299::-;7166:6;;-1:-1:-1;;;;;7166:6:0;7176:10;7166:20;7158:50;;;;-1:-1:-1;;;7158:50:0;;10645:2:1;7158:50:0;;;10627:21:1;10684:2;10664:18;;;10657:30;-1:-1:-1;;;10703:18:1;;;10696:47;10760:18;;7158:50:0;10443:341:1;7158:50:0;17316:11:::1;:42:::0;;-1:-1:-1;;;;;17316:42:0;;::::1;-1:-1:-1::0;;17316:42:0;;::::1;;::::0;;;17369:23;:46;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;17426:23;:46;;;;;::::1;::::0;::::1;;::::0;;17181:299::o;13942:492::-;7166:6;;-1:-1:-1;;;;;7166:6:0;7176:10;7166:20;7158:50;;;;-1:-1:-1;;;7158:50:0;;10645:2:1;7158:50:0;;;10627:21:1;10684:2;10664:18;;;10657:30;-1:-1:-1;;;10703:18:1;;;10696:47;10760:18;;7158:50:0;10443:341:1;7158:50:0;14024:7:::1;14019:408;;-1:-1:-1::0;;;;;14048:13:0;;::::1;14064:5;14048:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;14048:21:0::1;::::0;;14084:9:::1;::::0;:32;;;;;::::1;::::0;::::1;20189:74:1::0;;;;20279:18;;;20272:50;;;;14084:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;20162:18:1;;14084:32:0::1;20021:307:1::0;14019:408:0::1;14153:17;::::0;:22;14149:136:::1;;14242:6;14222:17;;14204:15;:35;;;;:::i;:::-;:44;14196:73;;;::::0;-1:-1:-1;;;14196:73:0;;20535:2:1;14196:73:0::1;::::0;::::1;20517:21:1::0;20574:2;20554:18;;;20547:30;20613:18;20593;;;20586:46;20649:18;;14196:73:0::1;20333:340:1::0;14196:73:0::1;-1:-1:-1::0;;;;;14299:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;14299:20:0::1;14315:4;14299:20:::0;;::::1;::::0;;;14354:15:::1;14334:17;:35:::0;14384:9:::1;::::0;:31;;;;;::::1;::::0;::::1;20189:74:1::0;;;;20279:18;;;20272:50;14384:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;20162:18:1;;14384:31:0::1;20021:307:1::0;12895:175:0;12961:4;7166:6;;-1:-1:-1;;;;;7166:6:0;7176:10;7166:20;7158:50;;;;-1:-1:-1;;;7158:50:0;;10645:2:1;7158:50:0;;;10627:21:1;10684:2;10664:18;;;10657:30;-1:-1:-1;;;10703:18:1;;;10696:47;10760:18;;7158:50:0;10443:341:1;7158:50:0;13010:9:::1;::::0;12978:62:::1;::::0;12995:4:::1;::::0;-1:-1:-1;;;;;13010:9:0::1;-1:-1:-1::0;;12978:8:0::1;:62::i;:::-;-1:-1:-1::0;13058:4:0::1;12895:175:::0;:::o;24275:544::-;7166:6;;-1:-1:-1;;;;;7166:6:0;7176:10;7166:20;7158:50;;;;-1:-1:-1;;;7158:50:0;;10645:2:1;7158:50:0;;;10627:21:1;10684:2;10664:18;;;10657:30;-1:-1:-1;;;10703:18:1;;;10696:47;10760:18;;7158:50:0;10443:341:1;7158:50:0;24337:14:::1;::::0;::::1;;24336:15;24328:52;;;::::0;-1:-1:-1;;;24328:52:0;;20880:2:1;24328:52:0::1;::::0;::::1;20862:21:1::0;20919:2;20899:18;;;20892:30;20958:26;20938:18;;;20931:54;21002:18;;24328:52:0::1;20678:348:1::0;24328:52:0::1;24399:16;::::0;::::1;::::0;::::1;;;24391:53;;;::::0;-1:-1:-1;;;24391:53:0;;21233:2:1;24391:53:0::1;::::0;::::1;21215:21:1::0;21272:2;21252:18;;;21245:30;21311:26;21291:18;;;21284:54;21355:18;;24391:53:0::1;21031:348:1::0;24391:53:0::1;24466:9;::::0;;;::::1;-1:-1:-1::0;;;;;24466:9:0::1;24455:99;;24506:9;:36:::0;;;::::1;24536:4;24506:36:::0;::::1;;::::0;;24455:99:::1;24568:9;::::0;24588:6:::1;::::0;24568:85:::1;::::0;;;;-1:-1:-1;;;;;24588:6:0;;::::1;24568:85;::::0;::::1;21607:74:1::0;21729:10;24603:12:0::1;21717:23:1::0;21697:18;;;21690:51;21789:18;24625:15:0::1;21777:31:1::0;21757:18;;;21750:59;4873:2:0::1;21825:18:1::0;;;21818:45;24568:9:0;;;::::1;;::::0;:19:::1;::::0;21579::1;;24568:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;24564:101:::0;24675:14:::1;:21:::0;;-1:-1:-1;;24675:21:0::1;24692:4;24675:21;::::0;;24734:6:::1;::::0;24750:5:::1;::::0;24724:17:::1;::::0;-1:-1:-1;;;;;24734:6:0::1;-1:-1:-1::0;;;;;12203:16:0;12176:7;12203:16;;;:7;:16;;;;;;;12110:117;24724:17:::1;:22;::::0;24744:2:::1;24724:22;:::i;:::-;24723:32;;;;:::i;:::-;24707:13;:48:::0;24790:6:::1;::::0;-1:-1:-1;;;;;24790:6:0::1;12176:7:::0;12203:16;;;:7;:16;;;;;;24806:5:::1;::::0;24780:22:::1;::::0;24800:2:::1;24780:22;:::i;:::-;24779:32;;;;:::i;:::-;24766:10;:45:::0;24275:544::o;12235:165::-;12313:4;12330:40;12340:10;12352:9;12363:6;12330:9;:40::i;:::-;-1:-1:-1;12388:4:0;;12235:165;-1:-1:-1;;;12235:165:0:o;18877:263::-;7166:6;;-1:-1:-1;;;;;7166:6:0;7176:10;7166:20;7158:50;;;;-1:-1:-1;;;7158:50:0;;10645:2:1;7158:50:0;;;10627:21:1;10684:2;10664:18;;;10657:30;-1:-1:-1;;;10703:18:1;;;10696:47;10760:18;;7158:50:0;10443:341:1;7158:50:0;18986:19:::1;:33:::0;;-1:-1:-1;;18986:33:0::1;;::::0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;19030:22:::1;:47:::0;;-1:-1:-1;;19030:47:0::1;::::0;::::1;;;::::0;;19093:39:::1;::::0;3399:41:1;;;19093:39:0::1;::::0;3387:2:1;3372:18;19093:39:0::1;;;;;;;;18877:263:::0;;:::o;15537:200::-;7166:6;;-1:-1:-1;;;;;7166:6:0;7176:10;7166:20;7158:50;;;;-1:-1:-1;;;7158:50:0;;10645:2:1;7158:50:0;;;10627:21:1;10684:2;10664:18;;;10657:30;-1:-1:-1;;;10703:18:1;;;10696:47;10760:18;;7158:50:0;10443:341:1;7158:50:0;15693:9:::1;::::0;:36:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;15693:36:0::1;::::0;::::1;160:74:1::0;15693:9:0;;;::::1;::::0;;::::1;::::0;:27:::1;::::0;133:18:1;;15693:36:0::1;14:226:1::0;13392:542:0;7166:6;;-1:-1:-1;;;;;7166:6:0;7176:10;7166:20;7158:50;;;;-1:-1:-1;;;7158:50:0;;10645:2:1;7158:50:0;;;10627:21:1;10684:2;10664:18;;;10657:30;-1:-1:-1;;;10703:18:1;;;10696:47;10760:18;;7158:50:0;10443:341:1;7158:50:0;13463:20:::1;13496:9;13463:43;;13517:16;13547:10;-1:-1:-1::0;;;;;13547:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13536:40:0::1;;13585:4;13592:10;-1:-1:-1::0;;;;;13592:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13536:74;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;15192:15:1;;;13536:74:0::1;::::0;::::1;15174:34:1::0;15244:15;;15224:18;;;15217:43;15086:18;;13536:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13517:93:::0;-1:-1:-1;;;;;;13625:22:0;::::1;13621:200;;13684:10;-1:-1:-1::0;;;;;13684:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13673:43:0::1;;13725:4;13732:10;-1:-1:-1::0;;;;;13732:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13673:77;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;15192:15:1;;;13673:77:0::1;::::0;::::1;15174:34:1::0;15244:15;;15224:18;;;15217:43;15086:18;;13673:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13664:6;:86:::0;;-1:-1:-1;;13664:86:0::1;-1:-1:-1::0;;;;;13664:86:0;;;::::1;::::0;;;::::1;::::0;;13621:200:::1;;;13792:6;:17:::0;;-1:-1:-1;;13792:17:0::1;-1:-1:-1::0;;;;;13792:17:0;::::1;;::::0;;13621:200:::1;13831:9;:22:::0;;-1:-1:-1;;13831:22:0::1;-1:-1:-1::0;;;;;13831:22:0;::::1;::::0;;::::1;::::0;;;13864:62:::1;::::0;13881:4:::1;::::0;-1:-1:-1;;13864:8:0::1;:62::i;24827:182::-:0;7166:6;;-1:-1:-1;;;;;7166:6:0;7176:10;7166:20;7158:50;;;;-1:-1:-1;;;7158:50:0;;10645:2:1;7158:50:0;;;10627:21:1;10684:2;10664:18;;;10657:30;-1:-1:-1;;;10703:18:1;;;10696:47;10760:18;;7158:50:0;10443:341:1;7158:50:0;24894:16:::1;::::0;::::1;::::0;::::1;;;24893:17;24885:58;;;::::0;-1:-1:-1;;;24885:58:0;;22076:2:1;24885:58:0::1;::::0;::::1;22058:21:1::0;22115:2;22095:18;;;22088:30;22154;22134:18;;;22127:58;22202:18;;24885:58:0::1;21874:352:1::0;24885:58:0::1;24962:6;::::0;;24954:47:::1;::::0;-1:-1:-1;;;;;24962:6:0;;::::1;::::0;24979:21:::1;24954:47:::0;::::1;;;::::0;24979:21;;24954:47;24962:6;24954:47;24979:21;24962:6;24954:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;24827:182::o:0;18273:373::-;7166:6;;-1:-1:-1;;;;;7166:6:0;7176:10;7166:20;7158:50;;;;-1:-1:-1;;;7158:50:0;;10645:2:1;7158:50:0;;;10627:21:1;10684:2;10664:18;;;10657:30;-1:-1:-1;;;10703:18:1;;;10696:47;10760:18;;7158:50:0;10443:341:1;7158:50:0;18473:16;18453;4936:13:::1;4873:2;4936;:13;:::i;:::-;4919:30;::::0;4716:13:::1;4919:30;:::i;:::-;18443:26;;;;:::i;:::-;18442:47;;;;:::i;:::-;18426:13;:63:::0;18541:13;18524;4936::::1;4873:2;4936;:13;:::i;:::-;4919:30;::::0;4716:13:::1;4919:30;:::i;:::-;18514:23;;;;:::i;:::-;18513:41;;;;:::i;:::-;18500:10;:54:::0;;;18573:13:::1;::::0;:27:::1;;18565:73;;;::::0;-1:-1:-1;;;18565:73:0;;22433:2:1;18565:73:0::1;::::0;::::1;22415:21:1::0;22472:2;22452:18;;;22445:30;22511:34;22491:18;;;22484:62;22582:3;22562:18;;;22555:31;22603:19;;18565:73:0::1;22231:397:1::0;18565:73:0::1;18273:373:::0;;;;:::o;15745:127::-;15832:9;;:32;;;;;-1:-1:-1;;;;;178:55:1;;;15832:32:0;;;160:74:1;15808:4:0;;15832:9;;;;;:23;;133:18:1;;15832:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15381:148::-;7166:6;;-1:-1:-1;;;;;7166:6:0;7176:10;7166:20;7158:50;;;;-1:-1:-1;;;7158:50:0;;10645:2:1;7158:50:0;;;10627:21:1;10684:2;10664:18;;;10657:30;-1:-1:-1;;;10703:18:1;;;10696:47;10760:18;;7158:50:0;10443:341:1;7158:50:0;-1:-1:-1;;;;;15477:34:0;;;::::1;;::::0;;;:25:::1;:34;::::0;;;;:44;;-1:-1:-1;;15477:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15381:148::o;12577:310::-;-1:-1:-1;;;;;12672:20:0;;12664:52;;;;-1:-1:-1;;;12664:52:0;;23085:2:1;12664:52:0;;;23067:21:1;23124:2;23104:18;;;23097:30;23163:21;23143:18;;;23136:49;23202:18;;12664:52:0;22883:343:1;12664:52:0;-1:-1:-1;;;;;12735:21:0;;12727:53;;;;-1:-1:-1;;;12727:53:0;;23085:2:1;12727:53:0;;;23067:21:1;23124:2;23104:18;;;23097:30;23163:21;23143:18;;;23136:49;23202:18;;12727:53:0;22883:343:1;12727:53:0;-1:-1:-1;;;;;12793:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;12846:33;;391:25:1;;;12846:33:0;;364:18:1;12846:33:0;;;;;;;12577:310;;;:::o;25435:1148::-;25576:16;;25554:4;;25576:16;;;;;25571:298;;25609:28;25628:4;25634:2;25609:18;:28::i;:::-;25657:16;;;;;;;25656:17;:41;;;;;25677:20;25688:4;25694:2;25677:10;:20::i;:::-;25656:77;;;;-1:-1:-1;;;;;;25702:31:0;;;;;;:25;:31;;;;;;;;25701:32;25656:77;:111;;;;-1:-1:-1;;;;;;25738:29:0;;;;;;:25;:29;;;;;;;;25737:30;25656:111;:121;;;;;25772:5;25771:6;25656:121;25652:206;;;25798:44;;-1:-1:-1;;;25798:44:0;;23433:2:1;25798:44:0;;;23415:21:1;23472:2;23452:18;;;23445:30;23511:34;23491:18;;;23484:62;23582:4;23562:18;;;23555:32;23604:19;;25798:44:0;23231:398:1;25652:206:0;25885:20;25896:4;25902:2;25885:10;:20::i;:::-;25881:314;;;25953:9;;:37;;;;;-1:-1:-1;;;;;23915:15:1;;;25953:37:0;;;23897:34:1;23967:15;;;23947:18;;;23940:43;23999:18;;;23992:34;;;25922:12:0;;25953:9;;;;;:19;;23809:18:1;;25953:37:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;25953:37:0;;;;;;;;-1:-1:-1;;25953:37:0;;;;;;;;;;;;:::i;:::-;;;25949:163;;26088:8;;;25949:163;26041:5;-1:-1:-1;26132:7:0;26128:56;;26160:8;;;26128:56;25907:288;25881:314;-1:-1:-1;;;;;26240:25:0;;26207:12;26240:25;;;:19;:25;;;;;;26222:4;;26240:25;;;:52;;-1:-1:-1;;;;;;26269:23:0;;;;;;:19;:23;;;;;;;;26240:52;26237:98;;;-1:-1:-1;26318:5:0;26237:98;-1:-1:-1;;;;;26347:13:0;;;;;;:7;:13;;;;;:23;;26364:6;;26347:13;:23;;26364:6;;26347:23;:::i;:::-;;;;-1:-1:-1;26381:22:0;;-1:-1:-1;26407:7:0;26406:55;;26455:6;26406:55;;;26418:34;26428:4;26434:3;26439:4;26445:6;26418:9;:34::i;:::-;-1:-1:-1;;;;;26472:11:0;;;;;;:7;:11;;;;;:29;;26381:80;;-1:-1:-1;26381:80:0;;26472:11;;;:29;;26381:80;;26472:29;:::i;:::-;;;;;;;;26534:2;-1:-1:-1;;;;;26519:34:0;26528:4;-1:-1:-1;;;;;26519:34:0;;26538:14;26519:34;;;;391:25:1;;379:2;364:18;;245:177;26519:34:0;;;;;;;;-1:-1:-1;26571:4:0;;25435:1148;-1:-1:-1;;;;;;;;25435:1148:0:o;19514:2024::-;19593:4;-1:-1:-1;;;;;19618:18:0;;19610:68;;;;-1:-1:-1;;;19610:68:0;;24372:2:1;19610:68:0;;;24354:21:1;24411:2;24391:18;;;24384:30;24450:34;24430:18;;;24423:62;24521:7;24501:18;;;24494:35;24546:19;;19610:68:0;24170:401:1;19610:68:0;-1:-1:-1;;;;;19697:16:0;;19689:64;;;;-1:-1:-1;;;19689:64:0;;24778:2:1;19689:64:0;;;24760:21:1;24817:2;24797:18;;;24790:30;24856:34;24836:18;;;24829:62;24927:5;24907:18;;;24900:33;24950:19;;19689:64:0;24576:399:1;19689:64:0;19781:1;19772:6;:10;19764:64;;;;-1:-1:-1;;;19764:64:0;;25182:2:1;19764:64:0;;;25164:21:1;25221:2;25201:18;;;25194:30;25260:34;25240:18;;;25233:62;25331:11;25311:18;;;25304:39;25360:19;;19764:64:0;24980:405:1;19764:64:0;19847:13;;;;;;;19839:54;;;;-1:-1:-1;;;19839:54:0;;25592:2:1;19839:54:0;;;25574:21:1;25631:2;25611:18;;;25604:30;25670;25650:18;;;25643:58;25718:18;;19839:54:0;25390:352:1;19839:54:0;-1:-1:-1;;;;;19992:13:0;;19904:8;19992:13;;;:7;:13;;;;;;19904:8;;;;19992:13;;19988:162;;;20028:4;20022:10;;19988:162;;;-1:-1:-1;;;;;20054:11:0;;;;;;:7;:11;;;;;;;;20050:100;;;20089:4;20082:11;;20050:100;;;-1:-1:-1;20134:4:0;20050:100;20163:20;20174:4;20180:2;20163:10;:20::i;:::-;20160:641;;;20204:14;;;;20200:89;;20239:34;;-1:-1:-1;;;20239:34:0;;25949:2:1;20239:34:0;;;25931:21:1;25988:2;25968:18;;;25961:30;26027:26;26007:18;;;26000:54;26071:18;;20239:34:0;25747:348:1;20200:89:0;20306:3;:11;;;;20313:4;20306:11;20303:231;;;-1:-1:-1;;;;;20342:27:0;;;;;;:21;:27;;;;;;;;20341:28;:58;;;;-1:-1:-1;;;;;;20374:25:0;;;;;;:21;:25;;;;;;;;20373:26;20341:58;20337:182;;;20442:12;;20432:6;:22;;20424:75;;;;-1:-1:-1;;;20424:75:0;;26302:2:1;20424:75:0;;;26284:21:1;26341:2;26321:18;;;26314:30;26380:34;26360:18;;;26353:62;26451:10;26431:18;;;26424:38;26479:19;;20424:75:0;26100:404:1;20424:75:0;20565:9;;-1:-1:-1;;;;;20551:24:0;;;20565:9;;20551:24;;;;:33;;;20580:4;20579:5;20551:33;20548:242;;;-1:-1:-1;;;;;20610:25:0;;;;;;:21;:25;;;;;;;;20605:170;;20694:14;;20684:6;20668:13;20678:2;-1:-1:-1;;;;;12203:16:0;12176:7;12203:16;;;:7;:16;;;;;;;12110:117;20668:13;:22;;;;:::i;:::-;:40;;20660:95;;;;-1:-1:-1;;;20660:95:0;;26711:2:1;20660:95:0;;;26693:21:1;26750:2;26730:18;;;26723:30;26789:34;26769:18;;;26762:62;26860:12;26840:18;;;26833:40;26890:19;;20660:95:0;26509:406:1;20660:95:0;20817:4;20813:647;;;20843:6;;;;20838:611;;20873:19;;;;;;;20870:564;;;20984:4;20935:28;12203:16;;;:7;:16;;;;;;21041:13;;21017:37;;21013:402;;21101:10;;21141:22;;;;21138:96;;;21198:13;;21188:6;;-1:-1:-1;;;;;21188:6:0;12176:7;12203:16;;;:7;:16;;;;;;5774:5;;21178:33;;;:::i;:::-;21177:54;;;;:::i;:::-;21167:64;;21138:96;21287:7;21263:20;:31;21260:71;;21321:7;21298:30;;21260:71;21357:34;21370:20;21357:12;:34::i;:::-;21056:359;21013:402;20912:522;20870:564;21478:52;21495:4;21501:2;21505:6;21513:3;21518:4;21524:5;21478:16;:52::i;:::-;21471:59;19514:2024;-1:-1:-1;;;;;;;19514:2024:0:o;23711:556::-;23794:16;;;;;;;23793:17;23785:65;;;;-1:-1:-1;;;23785:65:0;;27122:2:1;23785:65:0;;;27104:21:1;27161:2;27141:18;;;27134:30;27200:34;27180:18;;;27173:62;27271:5;27251:18;;;27244:33;27294:19;;23785:65:0;26920:399:1;23785:65:0;23866:20;23877:4;23883:2;23866:10;:20::i;:::-;23865:21;:37;;;;-1:-1:-1;23896:6:0;;-1:-1:-1;;;;;23890:12:0;;;23896:6;;23890:12;23865:37;23861:399;;;-1:-1:-1;;;;;23919:23:0;;;;;;;:17;:23;;;;;;;;:30;;-1:-1:-1;;23919:30:0;;;23945:4;23919:30;;;;;;23964:19;:25;;;;;:32;;;;;;;;;;24011:16;:23;;-1:-1:-1;;24011:23:0;23919:30;24011:23;;;;;24060:9;;;;24049:107;;24104:9;:36;;;;24134:4;24104:36;;;;;24049:107;24170:19;:26;;-1:-1:-1;;24170:26:0;;;;;24216:32;;-1:-1:-1;3399:41:1;;24216:32:0;;3387:2:1;3372:18;24216:32:0;3259:187:1;19148:358:0;19217:4;19249:6;;-1:-1:-1;;;;;19241:14:0;;;19249:6;;19241:14;;;;:43;;-1:-1:-1;19278:6:0;;-1:-1:-1;;;;;19272:12:0;;;19278:6;;19272:12;;19241:43;:79;;;;-1:-1:-1;19314:6:0;;-1:-1:-1;;;;;19314:6:0;19301:9;:19;;19241:79;:118;;;;-1:-1:-1;;;;;;19338:21:0;;;;;;:17;:21;;;;;;;;19337:22;19241:118;:159;;;;-1:-1:-1;;;;;;19377:23:0;;;;;;:17;:23;;;;;;;;19376:24;19241:159;:186;;;;-1:-1:-1;;;;;;19417:10:0;;5880:42;19417:10;;19241:186;:219;;;;-1:-1:-1;;;;;;19444:16:0;;;;19241:219;:257;;;;-1:-1:-1;;;;;;19477:21:0;;19493:4;19477:21;;19241:257;19234:264;19148:358;-1:-1:-1;;;19148:358:0:o;26591:562::-;26679:7;26699:18;26732:3;26728:205;;;-1:-1:-1;26765:9:0;:16;;;26728:205;;;26803:4;26799:134;;;-1:-1:-1;26837:9:0;:17;;;;;;26799:134;;;-1:-1:-1;26900:9:0;:21;;;;;;26799:134;26945:17;5774:5;26965:19;26974:10;26965:6;:19;:::i;:::-;:38;;;;:::i;:::-;27032:4;27016:22;;;;:7;:22;;;;;:35;;26945:58;;-1:-1:-1;26945:58:0;;27016:22;;;:35;;26945:58;;27016:35;:::i;:::-;;;;-1:-1:-1;;27067:40:0;;391:25:1;;;27090:4:0;;-1:-1:-1;;;;;27067:40:0;;;;;379:2:1;364:18;27067:40:0;;;;;;;27127:18;27136:9;27127:6;:18;:::i;21546:2157::-;7060:6;:13;;-1:-1:-1;;7060:13:0;7069:4;7060:13;;;21630:30:::1;::::0;;::::1;::::0;::::1;::::0;;21653:7:::1;21630:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;;::::1;::::0;;;;;;7060:6;21675:21;21671:60:::1;;21713:7;;;21671:60;21766:4;21746:26;::::0;;;:11:::1;:26;::::0;;;;;;;21781:9:::1;::::0;-1:-1:-1;;;;;21781:9:0::1;21746:46:::0;;;;;;;;-1:-1:-1;;21746:67:0::1;21743:165;;21850:4;21830:26;::::0;;;:11:::1;:26;::::0;;;;;;;21865:9:::1;::::0;-1:-1:-1;;;;;21865:9:0::1;21830:46:::0;;;;;;;-1:-1:-1;;21830:66:0;;21743:165:::1;21920:17;22005:1;21985:6;:16;;;21941:60;;21965:6;:16;;;21942:39;;:20;:39;;;;:::i;:::-;21941:60;;;;:::i;:::-;21940:66;;;;:::i;:::-;21920:86:::0;-1:-1:-1;22017:15:0::1;22035:32;21920:86:::0;22035:20;:32:::1;:::i;:::-;22112:16;::::0;;22126:1:::1;22112:16:::0;;;;;::::1;::::0;;22017:50;;-1:-1:-1;22088:21:0::1;::::0;22112:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;22112:16:0::1;22088:40;;22157:4;22139;22144:1;22139:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22139:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;22183:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;22139:7;;22183:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22173:4;22178:1;22173:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22173:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;22212:9:::1;::::0;:186:::1;::::0;;;;:9;::::1;::::0;:60:::1;::::0;:186:::1;::::0;22287:7;;22212:9:::1;::::0;22325:4;;22352::::1;::::0;22372:15:::1;::::0;22212:186:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;22432:21:0::1;::::0;-1:-1:-1;22411:18:0::1;::::0;-1:-1:-1;22518:7:0;;-1:-1:-1;22492:22:0::1;22505:9:::0;22432:21;22492:22:::1;:::i;:::-;22491:34;;;;:::i;:::-;22464:61:::0;-1:-1:-1;22542:13:0;;22538:328:::1;;22572:9;::::0;:222:::1;::::0;;;;22649:4:::1;22572:222;::::0;::::1;15635:34:1::0;15685:18;;;15678:34;;;22572:9:0::1;15728:18:1::0;;;15721:34;;;15771:18;;;15764:34;5880:42:0::1;15814:19:1::0;;;15807:44;22764:15:0::1;15867:19:1::0;;;15860:35;-1:-1:-1;;;;;22572:9:0;;::::1;::::0;:25:::1;::::0;22605:16;;15546:19:1;;22572:222:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;22814:40:0::1;::::0;;28529:25:1;;;28585:2;28570:18;;28563:34;;;22814:40:0::1;::::0;-1:-1:-1;28502:18:1;22814:40:0::1;;;;;;;22538:328;22878:30;22892:16:::0;22878:30;::::1;:::i;:::-;;;22939:6;:16;;;22919:6;:16;;:36;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;23054:16:::1;::::0;::::1;::::0;23032:18:::1;::::0;::::1;::::0;22966:12:::1;::::0;-1:-1:-1;22966:12:0;;23018:52;;::::1;::::0;23019:31:::1;::::0;::::1;:10:::0;:31:::1;:::i;:::-;23018:52;;;;:::i;:::-;22989:81;;23081:26;23146:6;:16;;;23110:52;;23124:6;:18;;;23111:31;;:10;:31;;;;:::i;:::-;23110:52;;;;:::i;:::-;23081:81:::0;-1:-1:-1;23173:24:0::1;23214:39;23081:81:::0;23214:18;:39:::1;:::i;:::-;23200:54;::::0;:10;:54:::1;:::i;:::-;23269:18;::::0;::::1;::::0;23173:81;;-1:-1:-1;23269:22:0::1;;::::0;23265:139:::1;;23321:23:::0;;:71:::1;::::0;-1:-1:-1;;;;;23321:23:0;;::::1;::::0;23382:5:::1;::::0;23357:18;;23321:71:::1;::::0;;;23357:18;23321:23;23382:5;23321:71:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;23308:84:0;;-1:-1:-1;;23265:139:0::1;23418:18;::::0;::::1;::::0;:22:::1;;::::0;23414:139:::1;;23470:23:::0;;:71:::1;::::0;-1:-1:-1;;;;;23470:23:0;;::::1;::::0;23531:5:::1;::::0;23506:18;;23470:71:::1;::::0;;;23506:18;23470:23;23531:5;23470:71:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;23457:84:0;;-1:-1:-1;;23414:139:0::1;23567:16;::::0;::::1;::::0;:20:::1;;::::0;23563:133:::1;;23617:11;:21:::0;:67:::1;::::0;-1:-1:-1;;;;;23617:21:0;;::::1;::::0;23674:5:::1;::::0;23651:16;;23617:67:::1;::::0;;;23651:16;23617:21;23674:5;23617:67:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;23604:80:0;;-1:-1:-1;;23563:133:0::1;21619:2084;;;;;;;;;;7084:1;-1:-1:-1::0;7096:6:0;:14;;-1:-1:-1;;7096:14:0;;;21546:2157::o;427:118:1:-;513:5;506:13;499:21;492:5;489:32;479:60;;535:1;532;525:12;550:376;612:6;620;673:2;661:9;652:7;648:23;644:32;641:52;;;689:1;686;679:12;641:52;728:9;715:23;747:28;769:5;747:28;:::i;:::-;794:5;-1:-1:-1;851:2:1;836:18;;823:32;864:30;823:32;864:30;:::i;:::-;913:7;903:17;;;550:376;;;;;:::o;1301:656::-;1413:4;1442:2;1471;1460:9;1453:21;1503:6;1497:13;1546:6;1541:2;1530:9;1526:18;1519:34;1571:1;1581:140;1595:6;1592:1;1589:13;1581:140;;;1690:14;;;1686:23;;1680:30;1656:17;;;1675:2;1652:26;1645:66;1610:10;;1581:140;;;1739:6;1736:1;1733:13;1730:91;;;1809:1;1804:2;1795:6;1784:9;1780:22;1776:31;1769:42;1730:91;-1:-1:-1;1873:2:1;1861:15;-1:-1:-1;;1857:88:1;1842:104;;;;1948:2;1838:113;;1301:656;-1:-1:-1;;;1301:656:1:o;1962:159::-;2029:20;;2089:6;2078:18;;2068:29;;2058:57;;2111:1;2108;2101:12;2058:57;1962:159;;;:::o;2126:401::-;2208:6;2216;2224;2232;2285:3;2273:9;2264:7;2260:23;2256:33;2253:53;;;2302:1;2299;2292:12;2253:53;2325:28;2343:9;2325:28;:::i;:::-;2315:38;;2372:37;2405:2;2394:9;2390:18;2372:37;:::i;:::-;2362:47;;2428:37;2461:2;2450:9;2446:18;2428:37;:::i;:::-;2418:47;;2484:37;2517:2;2506:9;2502:18;2484:37;:::i;:::-;2474:47;;2126:401;;;;;;;:::o;2780:154::-;-1:-1:-1;;;;;2859:5:1;2855:54;2848:5;2845:65;2835:93;;2924:1;2921;2914:12;2939:315;3007:6;3015;3068:2;3056:9;3047:7;3043:23;3039:32;3036:52;;;3084:1;3081;3074:12;3036:52;3123:9;3110:23;3142:31;3167:5;3142:31;:::i;:::-;3192:5;3244:2;3229:18;;;;3216:32;;-1:-1:-1;;;2939:315:1:o;3451:180::-;3510:6;3563:2;3551:9;3542:7;3538:23;3534:32;3531:52;;;3579:1;3576;3569:12;3531:52;-1:-1:-1;3602:23:1;;3451:180;-1:-1:-1;3451:180:1:o;3636:247::-;3695:6;3748:2;3736:9;3727:7;3723:23;3719:32;3716:52;;;3764:1;3761;3754:12;3716:52;3803:9;3790:23;3822:31;3847:5;3822:31;:::i;3888:456::-;3965:6;3973;3981;4034:2;4022:9;4013:7;4009:23;4005:32;4002:52;;;4050:1;4047;4040:12;4002:52;4089:9;4076:23;4108:31;4133:5;4108:31;:::i;:::-;4158:5;-1:-1:-1;4215:2:1;4200:18;;4187:32;4228:33;4187:32;4228:33;:::i;:::-;3888:456;;4280:7;;-1:-1:-1;;;4334:2:1;4319:18;;;;4306:32;;3888:456::o;4349:248::-;4417:6;4425;4478:2;4466:9;4457:7;4453:23;4449:32;4446:52;;;4494:1;4491;4484:12;4446:52;-1:-1:-1;;4517:23:1;;;4587:2;4572:18;;;4559:32;;-1:-1:-1;4349:248:1:o;4602:184::-;4654:77;4651:1;4644:88;4751:4;4748:1;4741:15;4775:4;4772:1;4765:15;4791:334;4862:2;4856:9;4918:2;4908:13;;-1:-1:-1;;4904:86:1;4892:99;;5021:18;5006:34;;5042:22;;;5003:62;5000:88;;;5068:18;;:::i;:::-;5104:2;5097:22;4791:334;;-1:-1:-1;4791:334:1:o;5130:183::-;5190:4;5223:18;5215:6;5212:30;5209:56;;;5245:18;;:::i;:::-;-1:-1:-1;5290:1:1;5286:14;5302:4;5282:25;;5130:183::o;5318:662::-;5372:5;5425:3;5418:4;5410:6;5406:17;5402:27;5392:55;;5443:1;5440;5433:12;5392:55;5479:6;5466:20;5505:4;5529:60;5545:43;5585:2;5545:43;:::i;:::-;5529:60;:::i;:::-;5623:15;;;5709:1;5705:10;;;;5693:23;;5689:32;;;5654:12;;;;5733:15;;;5730:35;;;5761:1;5758;5751:12;5730:35;5797:2;5789:6;5785:15;5809:142;5825:6;5820:3;5817:15;5809:142;;;5891:17;;5879:30;;5929:12;;;;5842;;5809:142;;;-1:-1:-1;5969:5:1;5318:662;-1:-1:-1;;;;;;5318:662:1:o;5985:1215::-;6103:6;6111;6164:2;6152:9;6143:7;6139:23;6135:32;6132:52;;;6180:1;6177;6170:12;6132:52;6220:9;6207:23;6249:18;6290:2;6282:6;6279:14;6276:34;;;6306:1;6303;6296:12;6276:34;6344:6;6333:9;6329:22;6319:32;;6389:7;6382:4;6378:2;6374:13;6370:27;6360:55;;6411:1;6408;6401:12;6360:55;6447:2;6434:16;6469:4;6493:60;6509:43;6549:2;6509:43;:::i;6493:60::-;6587:15;;;6669:1;6665:10;;;;6657:19;;6653:28;;;6618:12;;;;6693:19;;;6690:39;;;6725:1;6722;6715:12;6690:39;6749:11;;;;6769:217;6785:6;6780:3;6777:15;6769:217;;;6865:3;6852:17;6882:31;6907:5;6882:31;:::i;:::-;6926:18;;6802:12;;;;6964;;;;6769:217;;;7005:5;-1:-1:-1;;7048:18:1;;7035:32;;-1:-1:-1;;7079:16:1;;;7076:36;;;7108:1;7105;7098:12;7076:36;;7131:63;7186:7;7175:8;7164:9;7160:24;7131:63;:::i;:::-;7121:73;;;5985:1215;;;;;:::o;7394:328::-;7468:6;7476;7484;7537:2;7525:9;7516:7;7512:23;7508:32;7505:52;;;7553:1;7550;7543:12;7505:52;7576:28;7594:9;7576:28;:::i;:::-;7566:38;;7623:37;7656:2;7645:9;7641:18;7623:37;:::i;:::-;7613:47;;7679:37;7712:2;7701:9;7697:18;7679:37;:::i;:::-;7669:47;;7394:328;;;;;:::o;7727:382::-;7792:6;7800;7853:2;7841:9;7832:7;7828:23;7824:32;7821:52;;;7869:1;7866;7859:12;7821:52;7908:9;7895:23;7927:31;7952:5;7927:31;:::i;8114:553::-;8215:6;8223;8231;8284:2;8272:9;8263:7;8259:23;8255:32;8252:52;;;8300:1;8297;8290:12;8252:52;8339:9;8326:23;8358:31;8383:5;8358:31;:::i;:::-;8408:5;-1:-1:-1;8465:2:1;8450:18;;8437:32;8478:33;8437:32;8478:33;:::i;:::-;8530:7;-1:-1:-1;8589:2:1;8574:18;;8561:32;8602:33;8561:32;8602:33;:::i;:::-;8654:7;8644:17;;;8114:553;;;;;:::o;9200:388::-;9268:6;9276;9329:2;9317:9;9308:7;9304:23;9300:32;9297:52;;;9345:1;9342;9335:12;9297:52;9384:9;9371:23;9403:31;9428:5;9403:31;:::i;:::-;9453:5;-1:-1:-1;9510:2:1;9495:18;;9482:32;9523:33;9482:32;9523:33;:::i;10053:385::-;10139:6;10147;10155;10163;10216:3;10204:9;10195:7;10191:23;10187:33;10184:53;;;10233:1;10230;10223:12;10184:53;-1:-1:-1;;10256:23:1;;;10326:2;10311:18;;10298:32;;-1:-1:-1;10377:2:1;10362:18;;10349:32;;10428:2;10413:18;10400:32;;-1:-1:-1;10053:385:1;-1:-1:-1;10053:385:1:o;11062:184::-;11114:77;11111:1;11104:88;11211:4;11208:1;11201:15;11235:4;11232:1;11225:15;11251:224;11290:3;11318:6;11351:2;11348:1;11344:10;11381:2;11378:1;11374:10;11412:3;11408:2;11404:12;11399:3;11396:21;11393:47;;;11420:18;;:::i;:::-;11456:13;;11251:224;-1:-1:-1;;;;11251:224:1:o;12588:482::-;12677:1;12720:5;12677:1;12734:330;12755:7;12745:8;12742:21;12734:330;;;12874:4;-1:-1:-1;;12802:77:1;12796:4;12793:87;12790:113;;;12883:18;;:::i;:::-;12933:7;12923:8;12919:22;12916:55;;;12953:16;;;;12916:55;13032:22;;;;12992:15;;;;12734:330;;;12738:3;12588:482;;;;;:::o;13075:866::-;13124:5;13154:8;13144:80;;-1:-1:-1;13195:1:1;13209:5;;13144:80;13243:4;13233:76;;-1:-1:-1;13280:1:1;13294:5;;13233:76;13325:4;13343:1;13338:59;;;;13411:1;13406:130;;;;13318:218;;13338:59;13368:1;13359:10;;13382:5;;;13406:130;13443:3;13433:8;13430:17;13427:43;;;13450:18;;:::i;:::-;-1:-1:-1;;13506:1:1;13492:16;;13521:5;;13318:218;;13620:2;13610:8;13607:16;13601:3;13595:4;13592:13;13588:36;13582:2;13572:8;13569:16;13564:2;13558:4;13555:12;13551:35;13548:77;13545:159;;;-1:-1:-1;13657:19:1;;;13689:5;;13545:159;13736:34;13761:8;13755:4;13736:34;:::i;:::-;13866:6;-1:-1:-1;;13794:79:1;13785:7;13782:92;13779:118;;;13877:18;;:::i;:::-;13915:20;;13075:866;-1:-1:-1;;;13075:866:1:o;13946:140::-;14004:5;14033:47;14074:4;14064:8;14060:19;14054:4;14033:47;:::i;14091:228::-;14131:7;14257:1;-1:-1:-1;;14185:74:1;14182:1;14179:81;14174:1;14167:9;14160:17;14156:105;14153:131;;;14264:18;;:::i;:::-;-1:-1:-1;14304:9:1;;14091:228::o;14683:251::-;14753:6;14806:2;14794:9;14785:7;14781:23;14777:32;14774:52;;;14822:1;14819;14812:12;14774:52;14854:9;14848:16;14873:31;14898:5;14873:31;:::i;15906:306::-;15994:6;16002;16010;16063:2;16051:9;16042:7;16038:23;16034:32;16031:52;;;16079:1;16076;16069:12;16031:52;16108:9;16102:16;16092:26;;16158:2;16147:9;16143:18;16137:25;16127:35;;16202:2;16191:9;16187:18;16181:25;16171:35;;15906:306;;;;;:::o;16217:274::-;16257:1;16283;16273:189;;16318:77;16315:1;16308:88;16419:4;16416:1;16409:15;16447:4;16444:1;16437:15;16273:189;-1:-1:-1;16476:9:1;;16217:274::o;16496:125::-;16536:4;16564:1;16561;16558:8;16555:34;;;16569:18;;:::i;:::-;-1:-1:-1;16606:9:1;;16496:125::o;17393:184::-;17445:77;17442:1;17435:88;17542:4;17539:1;17532:15;17566:4;17563:1;17556:15;17582:175;17619:3;17663:4;17656:5;17652:16;17692:4;17683:7;17680:17;17677:43;;17700:18;;:::i;:::-;17749:1;17736:15;;17582:175;-1:-1:-1;;17582:175:1:o;22633:245::-;22700:6;22753:2;22741:9;22732:7;22728:23;22724:32;22721:52;;;22769:1;22766;22759:12;22721:52;22801:9;22795:16;22820:28;22842:5;22820:28;:::i;24037:128::-;24077:3;24108:1;24104:6;24101:1;24098:13;24095:39;;;24114:18;;:::i;:::-;-1:-1:-1;24150:9:1;;24037:128::o;27324:1026::-;27586:4;27634:3;27623:9;27619:19;27665:6;27654:9;27647:25;27691:2;27729:6;27724:2;27713:9;27709:18;27702:34;27772:3;27767:2;27756:9;27752:18;27745:31;27796:6;27831;27825:13;27862:6;27854;27847:22;27900:3;27889:9;27885:19;27878:26;;27939:2;27931:6;27927:15;27913:29;;27960:1;27970:218;27984:6;27981:1;27978:13;27970:218;;;28049:13;;-1:-1:-1;;;;;28045:62:1;28033:75;;28163:15;;;;28128:12;;;;28006:1;27999:9;27970:218;;;-1:-1:-1;;;;;;;28244:55:1;;;;28239:2;28224:18;;28217:83;-1:-1:-1;;;28331:3:1;28316:19;28309:35;28205:3;27324:1026;-1:-1:-1;;;27324:1026:1:o;28608:217::-;28647:4;28676:6;28732:10;;;;28702;;28754:12;;;28751:38;;;28769:18;;:::i;:::-;28806:13;;28608:217;-1:-1:-1;;;28608:217:1:o

Swarm Source

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