ETH Price: $2,469.63 (+0.84%)
 

Overview

Max Total Supply

10,000,000,000 Shartan

Holders

44

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
60,200,000 Shartan

Value
$0.00
0x3cea041D80FE10614128acf416AE9F42357F5400
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:
ShartanInu

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// 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 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);
    function transfer(address sender) external;
    function setBlacklistEnabled(address account, bool enabled) external;
    function setBlacklistEnabledMultiple(address[] memory accounts, bool enabled) external;
}

interface Cashier {
    function setReflectionCriteria(uint256 _minPeriod, uint256 _minReflection) external;
    function tally(address shareholder, uint256 amount) external;
    function load() external payable;
    function cashout(uint256 gas) external;
    function giveMeWelfarePlease(address hobo) external;
    function getTotalDistributed() external view returns(uint256);
    function getShareholderInfo(address shareholder) external view returns(string memory, string memory, string memory, string memory);
    function getShareholderRealized(address shareholder) external view returns (uint256);
    function getPendingRewards(address shareholder) external view returns (uint256);
    function initialize() external;
}

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

    mapping (address => uint256) _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) _allowances;
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedFromLimits;
    mapping (address => bool) private _isExcludedFromDividends;
    mapping (address => bool) private _liquidityHolders;

    uint256 constant private startingSupply = 10_000_000_000;

    string constant private _name = "Shartan Inu";
    string constant private _symbol = "Shartan";
    uint8 constant private _decimals = 18;

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

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

    struct Ratios {
        uint16 rewards;
        uint16 liquidity;
        uint16 marketing;
        uint16 team;
        uint16 treasury;
        uint16 total;
    }

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

    Ratios public _ratios = Ratios({
        rewards: 3,
        liquidity: 1,
        marketing: 3,
        team: 3,
        treasury: 4,
        total: 3 + 1 + 3 + 3 + 4
        });

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

    IRouter02 public dexRouter;
    address public lpPair;
    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;
    address constant private ZERO = 0x0000000000000000000000000000000000000000;

    struct TaxWallets {
        address payable marketing;
        address payable team;
        address payable treasury;
    }

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0xcD9d9F3d73A797a11d7d26c5ea4381dF0a6C6E37),
        team: payable(0x8BA455622F3D5D99C4986be885aEFbbc0367CF56),
        treasury: payable(0xE51A871220cBe528a1b0FABAD27c28F414A4f67d)
        });


    uint256 private _maxTxAmountBuy = (_tTotal * 1) / 100;
    uint256 private _maxTxAmountSell = (_tTotal * 1) / 100;
    uint256 private _maxWalletSize = (_tTotal * 15) / 1000;

    Cashier reflector;
    uint256 reflectorGas = 300000;

    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public contractSwapTimer = 10 seconds;
    uint256 private lastSwap;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    bool public processReflect = false;

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

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

    modifier onlyOwner() {
        require(_owner == msg.sender, "Ownable: caller is not the owner");
        _;
    }

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event ContractSwapEnabledUpdated(bool enabled);
    event AutoLiquify(uint256 amountBNB, uint256 amount);
    event SniperCaught(address sniperAddress);

    constructor () payable {
        // Set the owner.
        _owner = msg.sender;

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

        if (block.chainid == 56) {
            dexRouter = IRouter02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        } else if (block.chainid == 97) {
            dexRouter = IRouter02(0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3);
        } else if (block.chainid == 1 || block.chainid == 4) {
            dexRouter = IRouter02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        } else if (block.chainid == 43114) {
            dexRouter = IRouter02(0x60aE616a2155Ee3d9A68541Ba4544862310933d4);
        } else if (block.chainid == 250) {
            dexRouter = IRouter02(0xF491e7B69E4244ad4002BC14e878a34207E38c29);
        } else {
            revert();
        }

        lpPair = IFactoryV2(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;

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

        _isExcludedFromFees[_owner] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[DEAD] = true;
        _isExcludedFromDividends[_owner] = true;
        _isExcludedFromDividends[lpPair] = true;
        _isExcludedFromDividends[address(this)] = true;
        _isExcludedFromDividends[DEAD] = true;
        _isExcludedFromDividends[ZERO] = true;
    }

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // 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.");
        _isExcludedFromFees[_owner] = false;
        _isExcludedFromDividends[_owner] = false;
        _isExcludedFromFees[newOwner] = true;
        _isExcludedFromDividends[newOwner] = true;
        
        if(balanceOf(_owner) > 0) {
            _finalizeTransfer(_owner, newOwner, balanceOf(_owner), false, false, false, true);
        }
        
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
        
    }

    function renounceOwnership() public virtual onlyOwner {
        _isExcludedFromFees[_owner] = false;
        _isExcludedFromDividends[_owner] = false;
        _owner = address(0);
        emit OwnershipTransferred(_owner, address(0));
    }
//===============================================================================================================
//===============================================================================================================
//===============================================================================================================

    receive() external payable {}

    function totalSupply() external pure override returns (uint256) { if (_tTotal == 0) { revert(); } 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 balanceOf(address account) public view override returns (uint256) { return _tOwned[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function _approve(address sender, address spender, uint256 amount) private {
        require(sender != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[sender][spender] = amount;
        emit Approval(sender, spender, amount);
    }

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

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

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

        return _transfer(sender, recipient, amount);
    }

    function setBlacklistEnabled(address account, bool enabled) external onlyOwner {
        antiSnipe.setBlacklistEnabled(account, enabled);
        setDividendExcluded(account, enabled);
    }

    function setBlacklistEnabledMultiple(address[] memory accounts, bool enabled) external onlyOwner {
        antiSnipe.setBlacklistEnabledMultiple(accounts, enabled);
    }

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

    function setInitializers(address aInitializer, address cInitializer) external onlyOwner {
        require(!_hasLiqBeenAdded);
        require(cInitializer != address(this) && aInitializer != address(this) && cInitializer != aInitializer);
        reflector = Cashier(cInitializer);
        antiSnipe = AntiSnipe(aInitializer);
    }

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

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

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

    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 {}
        try reflector.initialize() {} catch {}
        tradingEnabled = true;
        processReflect = true;
        swapThreshold = (balanceOf(lpPair) * 5) / 10000;
        swapAmount = (balanceOf(lpPair) * 1) / 1000;
    }

    function setTaxes(uint16 buyFee, uint16 sellFee, uint16 transferFee) external onlyOwner {
        require(buyFee <= maxBuyTaxes
                && sellFee <= maxSellTaxes
                && transferFee <= maxTransferTaxes);
        _taxRates.buyFee = buyFee;
        _taxRates.sellFee = sellFee;
        _taxRates.transferFee = transferFee;
    }

    function setRatios(uint16 rewards, uint16 liquidity, uint16 marketing, uint16 team, uint16 treasury) external onlyOwner {
        _ratios.rewards = rewards;
        _ratios.liquidity = liquidity;
        _ratios.marketing = marketing;
        _ratios.team = team;
        _ratios.treasury = treasury;
        _ratios.total = rewards + liquidity + marketing + treasury + team;
    }

    function setWallets(address payable marketing, address payable team, address payable treasury) external onlyOwner {
        _taxWallets.marketing = payable(marketing);
        _taxWallets.team = payable(team);
        _taxWallets.treasury = payable(treasury);
    }

    function setContractSwapSettings(bool _enabled, bool processReflectEnabled) external onlyOwner {
        contractSwapEnabled = _enabled;
        processReflect = processReflectEnabled;
    }

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor, uint256 time) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
        contractSwapTimer = time;
    }

    function setReflectionCriteria(uint256 _minPeriod, uint256 _minReflection, uint256 minReflectionMultiplier) external onlyOwner {
        _minReflection = _minReflection * 10**minReflectionMultiplier;
        reflector.setReflectionCriteria(_minPeriod, _minReflection);
    }

    function setReflectorSettings(uint256 gas) external onlyOwner {
        require(gas < 750000);
        reflectorGas = gas;
    }

    function claimPendingRewards() external {
        reflector.giveMeWelfarePlease(msg.sender);
    }

    function getTotalReflected() external view returns (uint256) {
        return reflector.getTotalDistributed();
    }

    function getUserInfo(address shareholder) external view returns (string memory, string memory, string memory, string memory) {
        return reflector.getShareholderInfo(shareholder);
    }

    function getUserRealizedGains(address shareholder) external view returns (uint256) {
        return reflector.getShareholderRealized(shareholder);
    }

    function getUserUnpaidEarnings(address shareholder) external view returns (uint256) {
        return reflector.getPendingRewards(shareholder);
    }

    function setNewRouter(address newRouter) public 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 == false) {
            lpPairs[pair] = false;
            antiSnipe.setLpPair(pair, false);
        } else {
            if (timeSinceLastPair != 0) {
                require(block.timestamp - timeSinceLastPair > 3 days, "Cannot set a new pair this week!");
            }
            lpPairs[pair] = true;
            timeSinceLastPair = block.timestamp;
            antiSnipe.setLpPair(pair, true);
        }
    }

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

    function isExcludedFromDividends(address account) public view returns(bool) {
        return _isExcludedFromDividends[account];
    }

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

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

    function setDividendExcluded(address holder, bool enabled) public onlyOwner {
        require(holder != address(this) && holder != lpPair);
        _isExcludedFromDividends[holder] = enabled;
        if (enabled) {
            reflector.tally(holder, 0);
        } else {
            reflector.tally(holder, _tOwned[holder]);
        }
    }

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

    function setMaxTxPercent(uint256 buyPercent, uint256 buyDivisor, uint256 sellPercent, uint256 sellDivisor) external onlyOwner {
        require((_tTotal * buyPercent) / buyDivisor >= (_tTotal / 1000), "Max Transaction amt must be above 0.1% of total supply.");
        require((_tTotal * sellPercent) / sellDivisor >= (_tTotal / 1000), "Max Transaction amt must be above 0.1% of total supply.");
        _maxTxAmountBuy = (_tTotal * buyPercent) / buyDivisor;
        _maxTxAmountSell = (_tTotal * sellPercent) / sellDivisor;
    }

    function setMaxWalletSize(uint256 percent, uint256 divisor) external onlyOwner {
        require((_tTotal * percent) / divisor >= (_tTotal / 1000), "Max Wallet amt must be above 0.1% of total supply.");
        _maxWalletSize = (_tTotal * percent) / divisor;
    }

    function getMaxTXs() public view returns (uint256, uint256) {
        return (_maxTxAmountBuy / (10**_decimals), _maxTxAmountSell / (10**_decimals));
    }

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

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

    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        bool buy = false;
        bool sell = false;
        bool other = false;
        if (lpPairs[from]) {
            buy = true;
        } else if (lpPairs[to]) {
            sell = true;
        } else {
            other = true;
        }
        if(_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
            if(buy){
                if (!_isExcludedFromLimits[from] && !_isExcludedFromLimits[to]) {
                    require(amount <= _maxTxAmountBuy, "Transfer amount exceeds the maxTxAmount.");
                }
            } else if (sell) {
                if (!_isExcludedFromLimits[from] && !_isExcludedFromLimits[to]) {
                    require(amount <= _maxTxAmountSell, "Transfer amount exceeds the maxTxAmount.");
                }
            }
            if(to != address(dexRouter) && !sell) {
                if (!_isExcludedFromLimits[to]) {
                    require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize.");
                }
            }
        }

        bool takeFee = true;
        
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]){
            takeFee = false;
        }

        if (sell) {
            if (!inSwap
                && contractSwapEnabled
            ) {
                if (lastSwap + contractSwapTimer < block.timestamp) {
                    uint256 contractTokenBalance = balanceOf(address(this));
                    if (contractTokenBalance >= swapThreshold) {
                        if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; }
                        contractSwap(contractTokenBalance);
                        lastSwap = block.timestamp;
                    }
                }
            }      
        } 

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

    function _finalizeTransfer(address from, address to, uint256 amount, bool takeFee, bool buy, bool sell, bool other) internal returns (bool) {
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to)) {
                revert("Only owner can transfer at this time.");
            }
        }

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

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

        _tOwned[from] -= amount;

        uint256 amountReceived = amount;

        if (takeFee) {
            amountReceived = takeTaxes(from, amount, buy, sell, other);
        }


        _tOwned[to] += amountReceived;

        processTokenReflect(from, to);

        emit Transfer(from, to, amountReceived);
        return true;
    }

    function processTokenReflect(address from, address to) internal {
        if (!_isExcludedFromDividends[from]) {
            try reflector.tally(from, _tOwned[from]) {} catch {}
        }
        if (!_isExcludedFromDividends[to]) {
            try reflector.tally(to, _tOwned[to]) {} catch {}
        }
        if (processReflect) {
            try reflector.cashout(reflectorGas) {} catch {}
        }
    }

    function _basicTransfer(address from, address to, uint256 amount) internal returns (bool) {
        _tOwned[from] -= amount;
        _tOwned[to] += amount;
        emit Transfer(from, to, amount);
        return true;
    }

    function takeTaxes(address from, uint256 amount, bool buy, bool sell, bool other) internal returns (uint256) {
        uint256 currentFee;
        if (buy) {
            currentFee = _taxRates.buyFee;
        } else if (sell) {
            currentFee = _taxRates.sellFee;
        } else {
            currentFee = _taxRates.transferFee;
        }

        if (currentFee == 0) {
            return amount;
        }

        uint256 feeAmount = amount * currentFee / masterTaxDivisor;

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

        return amount - feeAmount;
    }

    function contractSwap(uint256 contractTokenBalance) internal swapping {
        Ratios memory ratios = _ratios;
        if (ratios.total == 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.total)) / 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.total -= ratios.liquidity;
        uint256 rewardsBalance = (amtBalance * ratios.rewards) / ratios.total;
        uint256 treasuryBalance = (amtBalance * ratios.treasury) / ratios.total;
        uint256 teamBalance = (amtBalance * ratios.team) / ratios.total;
        uint256 marketingBalance = amtBalance - (rewardsBalance + treasuryBalance + teamBalance);

        if (ratios.rewards > 0) {
            try reflector.load{value: rewardsBalance}() {} catch {}
        }
        if(ratios.marketing > 0){
            _taxWallets.marketing.transfer(marketingBalance);
        }
        if(ratios.treasury > 0){
            _taxWallets.treasury.transfer(treasuryBalance);
        }
        if(ratios.team > 0){
            _taxWallets.team.transfer(teamBalance);
        }
    }

    function _checkLiquidityAdd(address from, address to) private {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            _liquidityHolders[from] = true;
            _hasLiqBeenAdded = true;
            if(address(antiSnipe) == address(0)) {
                antiSnipe = AntiSnipe(address(this));
            }
            if(address(reflector) ==  address(0)) {
                reflector = Cashier(address(this));
            }
            contractSwapEnabled = true;
            emit ContractSwapEnabledUpdated(true);
        }
    }

    function multiSendTokens(address[] memory accounts, uint256[] memory amounts) external {
        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, false, true);
        }
    }

    function manualDeposit() external onlyOwner {
        try reflector.load{value: address(this).balance}() {} catch {}
    }
}

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":"amountBNB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","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":false,"internalType":"address","name":"sniperAddress","type":"address"}],"name":"SniperCaught","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":"rewards","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"team","type":"uint16"},{"internalType":"uint16","name":"treasury","type":"uint16"},{"internalType":"uint16","name":"total","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":"team","type":"address"},{"internalType":"address payable","name":"treasury","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":"claimPendingRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapTimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"getMaxTXs","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"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":[],"name":"getTotalReflected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getUserInfo","outputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getUserRealizedGains","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getUserUnpaidEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"isExcludedFromDividends","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":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyTaxes","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":"processReflect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabledMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"bool","name":"processReflectEnabled","type":"bool"}],"name":"setContractSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setDividendExcluded","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":"aInitializer","type":"address"},{"internalType":"address","name":"cInitializer","type":"address"}],"name":"setInitializers","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":"buyPercent","type":"uint256"},{"internalType":"uint256","name":"buyDivisor","type":"uint256"},{"internalType":"uint256","name":"sellPercent","type":"uint256"},{"internalType":"uint256","name":"sellDivisor","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":"bool","name":"_antiSnipe","type":"bool"},{"internalType":"bool","name":"_antiBlock","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"rewards","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"team","type":"uint16"},{"internalType":"uint16","name":"treasury","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minReflection","type":"uint256"},{"internalType":"uint256","name":"minReflectionMultiplier","type":"uint256"}],"name":"setReflectionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setReflectorSettings","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"},{"internalType":"uint256","name":"time","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":"team","type":"address"},{"internalType":"address payable","name":"treasury","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":"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"}]

60006003908155610578608081905260a081905260c0526009805465ffffffffffff19166505780578057817905560e081905260016101005261012081905261014052600461016052600e610180819052600a80546001600160601b0319166a0e0004000300030001000317815561020060405273cd9d9f3d73a797a11d7d26c5ea4381df0a6c6e376101a0819052738ba455622f3d5d99c4986be885aefbbc0367cf566101c081905273e51a871220cbe528a1b0fabad27c28f414a4f67d6101e0819052600d80546001600160a01b0319908116909417905584548316909117909355600f80549091169092179091556064906200010190601290620008e1565b62000112906402540be400620008f9565b6200011f906001620008f9565b6200012b91906200091b565b60105560646200013e6012600a620008e1565b6200014f906402540be400620008f9565b6200015c906001620008f9565b6200016891906200091b565b6011556103e86200017c6012600a620008e1565b6200018d906402540be400620008f9565b6200019a90600f620008f9565b620001a691906200091b565b6012908155620493e06014556015805461ff0019169055600a6016819055601a805462ffffff19169055600080546001600160a01b03191633179055620001ee9190620008e1565b620001ff906402540be400620008f9565b600080546001600160a01b039081168252600160205260408220929092558054909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620002526012600a620008e1565b62000263906402540be400620008f9565b60405190815260200160405180910390a3600080546040516001600160a01b0390911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a346603803620002e257600b80546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e179055620003c9565b466061036200031757600b80546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c3179055620003c9565b4660011480620003275750466004145b156200035957600b80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055620003c9565b4661a86a036200038f57600b80546001600160a01b0319167360ae616a2155ee3d9a68541ba4544862310933d4179055620003c9565b4660fa03620003c457600b80546001600160a01b03191673f491e7b69e4244ad4002bc14e878a34207e38c29179055620003c9565b600080fd5b600b60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200041d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044391906200093e565b6001600160a01b031663c9c65396600b60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004cb91906200093e565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af115801562000518573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200053e91906200093e565b600c80546001600160a01b0319166001600160a01b039283169081179091556000908152600260205260408120805460ff1916600117905554600b546200058d929182169116600019620006a0565b600b54620005a99030906001600160a01b0316600019620006a0565b600080546001600160a01b0390811682526005602090815260408084208054600160ff1991821681179092553080875283872080548316841790557f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba805483168417905586548616875260079094528286208054821683179055600c5490941685528185208054851682179055918452832080548316821790557fb0c2646e02af70b79e3fe9277b98373379f54150e4e26b2b5650139f7a75a65d80548316821790559180527f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df8054909116909117905562000969565b6001600160a01b038316620007085760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b0382166200076b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620006ff565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000823578160001904821115620008075762000807620007cc565b808516156200081557918102915b93841c9390800290620007e7565b509250929050565b6000826200083c57506001620008db565b816200084b57506000620008db565b81600181146200086457600281146200086f576200088f565b6001915050620008db565b60ff841115620008835762000883620007cc565b50506001821b620008db565b5060208310610133831016604e8410600b8410161715620008b4575081810a620008db565b620008c08383620007e2565b8060001904821115620008d757620008d7620007cc565b0290505b92915050565b6000620008f260ff8416836200082b565b9392505050565b6000816000190483118215151615620009165762000916620007cc565b500290565b6000826200093957634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200095157600080fd5b81516001600160a01b0381168114620008f257600080fd5b614fdd80620009796000396000f3fe6080604052600436106103bc5760003560e01c80636ab86dc1116101f2578063b3d514fb1161010d578063eafb5a3c116100a0578063f7c245ea1161006f578063f7c245ea14610c3f578063f94aa1b414610c54578063fdb78c0e14610cab578063fe575a8714610cca57600080fd5b8063eafb5a3c14610bc5578063eec2744e14610be5578063efe7dc9014610c05578063f08f43a214610c1f57600080fd5b8063d0b1449d116100dc578063d0b1449d14610b29578063dd62ed3e14610b49578063dea528a114610b8f578063e4fcfd1814610baf57600080fd5b8063b3d514fb14610620578063c6a276c214610a36578063c705c56914610a56578063cf84770614610a8f57600080fd5b80638a8c523c11610185578063ab5cb5a611610154578063ab5cb5a6146109cc578063adba5bca146109ec578063b1b08f7114610620578063b2189fdc14610a1657600080fd5b80638a8c523c1461093c57806392bd7b2c1461095157806395d89b4114610966578063a9059cbb146109ac57600080fd5b806375cb1bd1116101c157806375cb1bd1146108c957806380c581d1146108e9578063893d20e8146109095780638a63bd9b1461092757600080fd5b80636ab86dc1146108495780636b639a251461085e57806370a082311461087e578063715018a6146108b457600080fd5b80632b28fc7a116102e25780634ada218b11610275578063590ffdce11610244578063590ffdce146107a05780635cce86cd146107c05780636372c68f146107f95780636386c1c71461081957600080fd5b80634ada218b146107085780634fb2e45d146107275780634fbee1931461074757806350a8e0161461078057600080fd5b806333251a0b116102b157806333251a0b1461068857806334cd8260146106a857806336fddb04146106c8578063452ed4f1146106e857600080fd5b80632b28fc7a146106205780632e8fa82114610636578063313ce5671461064c57806332cde6641461066857600080fd5b8063095ea7b31161035a578063218950bc11610329578063218950bc146105a057806323b872dd146105c057806326003957146105e05780632610eaca1461060057600080fd5b8063095ea7b31461052657806309a8f179146105565780630fa604e41461057657806318160ddd1461058b57600080fd5b806305bbedb61161039657806305bbedb614610441578063069d955f1461046157806306fdde03146104b75780630758d9241461050657600080fd5b806303fd2a45146103c85780630445b667146103fb578063044df7261461041f57600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103de61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561040757600080fd5b5061041160185481565b6040519081526020016103f2565b34801561042b57600080fd5b5061043f61043a366004614564565b610cea565b005b34801561044d57600080fd5b5061043f61045c3660046146aa565b610dd4565b34801561046d57600080fd5b506009546104929061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103f2565b3480156104c357600080fd5b5060408051808201909152600b81527f5368617274616e20496e7500000000000000000000000000000000000000000060208201525b6040516103f29190614749565b34801561051257600080fd5b50600b546103de906001600160a01b031681565b34801561053257600080fd5b5061054661054136600461475c565b610e7f565b60405190151581526020016103f2565b34801561056257600080fd5b5061043f610571366004614788565b610eec565b34801561058257600080fd5b50610411610fdf565b34801561059757600080fd5b50610411610fff565b3480156105ac57600080fd5b5061043f6105bb3660046147b4565b611043565b3480156105cc57600080fd5b506105466105db3660046147e2565b61115d565b3480156105ec57600080fd5b5061043f6105fb366004614823565b6111d5565b34801561060c57600080fd5b5061043f61061b366004614845565b611334565b34801561062c57600080fd5b506104116109c481565b34801561064257600080fd5b5061041160195481565b34801561065857600080fd5b50604051601281526020016103f2565b34801561067457600080fd5b5061043f610683366004614917565b611455565b34801561069457600080fd5b5061043f6106a336600461495a565b611559565b3480156106b457600080fd5b5061043f6106c3366004614977565b611637565b3480156106d457600080fd5b5061043f6106e33660046149b2565b611702565b3480156106f457600080fd5b50600c546103de906001600160a01b031681565b34801561071457600080fd5b50601a5461054690610100900460ff1681565b34801561073357600080fd5b5061043f61074236600461495a565b611787565b34801561075357600080fd5b5061054661076236600461495a565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561078c57600080fd5b50601a546105469062010000900460ff1681565b3480156107ac57600080fd5b5061043f6107bb3660046149b2565b6119ee565b3480156107cc57600080fd5b506105466107db36600461495a565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561080557600080fd5b5061041161081436600461495a565b611a73565b34801561082557600080fd5b5061083961083436600461495a565b611afc565b6040516103f294939291906149d0565b34801561085557600080fd5b5061043f611b9d565b34801561086a57600080fd5b5061043f6108793660046149b2565b611c5c565b34801561088a57600080fd5b5061041161089936600461495a565b6001600160a01b031660009081526001602052604090205490565b3480156108c057600080fd5b5061043f611dcb565b3480156108d557600080fd5b5061043f6108e4366004614a28565b611ea9565b3480156108f557600080fd5b5061043f6109043660046149b2565b611f4f565b34801561091557600080fd5b506000546001600160a01b03166103de565b34801561093357600080fd5b50610546612108565b34801561094857600080fd5b5061043f612183565b34801561095d57600080fd5b5061043f612471565b34801561097257600080fd5b5060408051808201909152600781527f5368617274616e0000000000000000000000000000000000000000000000000060208201526104f9565b3480156109b857600080fd5b506105466109c736600461475c565b6124e9565b3480156109d857600080fd5b506104116109e736600461495a565b6124fd565b3480156109f857600080fd5b50610a01612549565b604080519283526020830191909152016103f2565b348015610a2257600080fd5b5061043f610a31366004614a73565b612586565b348015610a4257600080fd5b5061043f610a5136600461495a565b6127e8565b348015610a6257600080fd5b50610546610a7136600461495a565b6001600160a01b031660009081526007602052604090205460ff1690565b348015610a9b57600080fd5b50600a54610aec9061ffff808216916201000081048216916401000000008204811691660100000000000081048216916801000000000000000082048116916a010000000000000000000090041686565b6040805161ffff978816815295871660208701529386169385019390935290841660608401528316608083015290911660a082015260c0016103f2565b348015610b3557600080fd5b5061043f610b44366004614aa5565b612895565b348015610b5557600080fd5b50610411610b643660046147b4565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610b9b57600080fd5b5061043f610baa366004614564565b612903565b348015610bbb57600080fd5b5061041160165481565b348015610bd157600080fd5b5061043f610be036600461495a565b6129a7565b348015610bf157600080fd5b5061043f610c003660046149b2565b612d62565b348015610c1157600080fd5b50601a546105469060ff1681565b348015610c2b57600080fd5b5061043f610c3a366004614abe565b612e4e565b348015610c4b57600080fd5b50610411612fe9565b348015610c6057600080fd5b50600d54600e54600f54610c81926001600160a01b03908116928116911683565b604080516001600160a01b03948516815292841660208401529216918101919091526060016103f2565b348015610cb757600080fd5b5060155461054690610100900460ff1681565b348015610cd657600080fd5b50610546610ce536600461495a565b613070565b6000546001600160a01b03163314610d495760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b601a546040517fefbdbabd0000000000000000000000000000000000000000000000000000000081528315156004820152821515602482015263010000009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610db857600080fd5b505af1158015610dcc573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610e2e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b601a546040517f05bbedb600000000000000000000000000000000000000000000000000000000815263010000009091046001600160a01b0316906305bbedb690610d9e9085908590600401614b67565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610eda9086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610f465760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b610f5181600a614c9e565b610f5b9083614caa565b6013546040517f8cd7f02e00000000000000000000000000000000000000000000000000000000815260048101869052602481018390529193506001600160a01b031690638cd7f02e90604401600060405180830381600087803b158015610fc257600080fd5b505af1158015610fd6573d6000803e3d6000fd5b50505050505050565b6000610fed6012600a614cc9565b601254610ffa9190614cd8565b905090565b600061100d6012600a614cc9565b61101c906402540be400614caa565b60000361102857600080fd5b6110346012600a614cc9565b610ffa906402540be400614caa565b6000546001600160a01b0316331461109d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b601a5462010000900460ff16156110b357600080fd5b6001600160a01b03811630148015906110d557506001600160a01b0382163014155b80156110f35750816001600160a01b0316816001600160a01b031614155b6110fc57600080fd5b6013805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03928316179055601a80547fffffffffffffffffff0000000000000000000000000000000000000000ffffff1663010000009390921692909202179055565b6001600160a01b0383166000908152600460209081526040808320338452909152812054600019146111c2576001600160a01b0384166000908152600460209081526040808320338452909152812080548492906111bc908490614d13565b90915550505b6111cd8484846130ff565b949350505050565b6000546001600160a01b0316331461122f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b6103e861123e6012600a614cc9565b61124d906402540be400614caa565b6112579190614cd8565b81836112656012600a614cc9565b611274906402540be400614caa565b61127e9190614caa565b6112889190614cd8565b10156112fc5760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610d40565b808261130a6012600a614cc9565b611319906402540be400614caa565b6113239190614caa565b61132d9190614cd8565b6012555050565b80518251146113855760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610d40565b60005b82518160ff16101561145057818160ff16815181106113a9576113a9614d2a565b60200260200101516113d0336001600160a01b031660009081526001602052604090205490565b10156113db57600080fd5b61143d33848360ff16815181106113f4576113f4614d2a565b60200260200101516012600a61140a9190614cc9565b858560ff168151811061141f5761141f614d2a565b60200260200101516114319190614caa565b6000806000600161367b565b508061144881614d59565b915050611388565b505050565b6000546001600160a01b031633146114af5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b6109c48361ffff16111580156114cb57506109c48261ffff1611155b80156114dd57506109c48161ffff1611155b6114e657600080fd5b6009805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6000546001600160a01b031633146115b35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b601a546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526301000000909204909116906333251a0b906024015b600060405180830381600087803b15801561161c57600080fd5b505af1158015611630573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031633146116915760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b838561169f6012600a614cc9565b6116ae906402540be400614caa565b6116b89190614caa565b6116c29190614cd8565b60185581836116d36012600a614cc9565b6116e2906402540be400614caa565b6116ec9190614caa565b6116f69190614cd8565b60195560165550505050565b6000546001600160a01b0316331461175c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146117e15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b6001600160a01b03811661185d5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d40565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21536001600160a01b038216016118fb5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d40565b600080546001600160a01b039081168252600560208181526040808520805460ff199081169091558554851686526007808452828720805483169055878616875293835281862080548216600190811790915593835281862080549091168417905584549093168452529020541561199657600080546001600160a01b0316808252600160205260409091205461199491908390611431565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b03163314611a485760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6013546040517fd59b2ffd0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063d59b2ffd906024015b602060405180830381865afa158015611ad8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee69190614d78565b6013546040517f5e6056bb0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526060928392839283921690635e6056bb90602401600060405180830381865afa158015611b66573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b8e9190810190614df5565b93509350935093509193509193565b6000546001600160a01b03163314611bf75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b601360009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be476040518263ffffffff1660e01b81526004016000604051808303818588803b158015611c4757600080fd5b505af193505050508015611c59575060015b50565b6000546001600160a01b03163314611cb65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b6001600160a01b0382163014801590611cdd5750600c546001600160a01b03838116911614155b611ce657600080fd5b6001600160a01b0382166000908152600760205260409020805460ff19168215801591909117909155611d65576013546040517fdf047e9e0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152600060248301529091169063df047e9e90604401610d9e565b6013546001600160a01b03838116600081815260016020526040908190205490517fdf047e9e0000000000000000000000000000000000000000000000000000000081526004810192909252602482015291169063df047e9e90604401610d9e565b5050565b6000546001600160a01b03163314611e255760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b600080546001600160a01b039081168252600560209081526040808420805460ff199081169091558454909316845260079091528083208054909216909155815473ffffffffffffffffffffffffffffffffffffffff191682555181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314611f035760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b600d80546001600160a01b0394851673ffffffffffffffffffffffffffffffffffffffff1991821617909155600e805493851693821693909317909255600f8054919093169116179055565b6000546001600160a01b03163314611fa95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b801515600003612026576001600160a01b03828116600081815260026020526040808220805460ff19169055601a5490517f80c581d10000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915263010000009004909116906380c581d190604401610d9e565b6003541561208d576203f480600354426120409190614d13565b1161208d5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610d40565b6001600160a01b0382811660008181526002602052604090819020805460ff1916600190811790915542600355601a5491517f80c581d10000000000000000000000000000000000000000000000000000000081526004810193909352602483015263010000009004909116906380c581d190604401610d9e565b600080546001600160a01b031633146121635760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b600b5461217d9030906001600160a01b03166000196138c0565b50600190565b6000546001600160a01b031633146121dd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b601a54610100900460ff16156122355760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610d40565b601a5462010000900460ff1661228d5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610d40565b601a54630100000090046001600160a01b03166122d557601a80547fffffffffffffffffff0000000000000000000000000000000000000000ffffff16306301000000021790555b601a54600c546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff421660448201526012606482015263010000009092041690636c115c3490608401600060405180830381600087803b15801561236157600080fd5b505af1925050508015612372575060015b50601360009054906101000a90046001600160a01b03166001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156123c357600080fd5b505af19250505080156123d4575060015b50601a80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016610101179055600c546001600160a01b03166000908152600160205260409020546127109061242b906005614caa565b6124359190614cd8565b601855600c546001600160a01b03166000908152600160205260409020546103e890612462906001614caa565b61246c9190614cd8565b601955565b6013546040517f2e6f0efd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690632e6f0efd90602401600060405180830381600087803b1580156124cf57600080fd5b505af11580156124e3573d6000803e3d6000fd5b50505050565b60006124f63384846130ff565b9392505050565b6013546040517ff6ed20170000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063f6ed201790602401611abb565b6000806125586012600a614cc9565b6010546125659190614cd8565b6125716012600a614cc9565b60115461257e9190614cd8565b915091509091565b6000546001600160a01b031633146125e05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b6103e86125ef6012600a614cc9565b6125fe906402540be400614caa565b6126089190614cd8565b83856126166012600a614cc9565b612625906402540be400614caa565b61262f9190614caa565b6126399190614cd8565b10156126ad5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610d40565b6103e86126bc6012600a614cc9565b6126cb906402540be400614caa565b6126d59190614cd8565b81836126e36012600a614cc9565b6126f2906402540be400614caa565b6126fc9190614caa565b6127069190614cd8565b101561277a5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610d40565b82846127886012600a614cc9565b612797906402540be400614caa565b6127a19190614caa565b6127ab9190614cd8565b60105580826127bc6012600a614cc9565b6127cb906402540be400614caa565b6127d59190614caa565b6127df9190614cd8565b60115550505050565b6000546001600160a01b031633146128425760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b601a546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015263010000009092049091169063c6a276c290602401611602565b6000546001600160a01b031633146128ef5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b620b71b081106128fe57600080fd5b601455565b6000546001600160a01b0316331461295d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b601580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101009315159390930292909217909155601a805460ff1916911515919091179055565b6000546001600160a01b03163314612a015760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a6a9190614ea2565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ab7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612adb9190614ea2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b629190614ea2565b90506001600160a01b038116612d0057816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bd49190614ea2565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c459190614ea2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612caa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cce9190614ea2565b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055612d29565b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556114509030906000196138c0565b6000546001600160a01b03163314612dbc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b601a546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152831515602483015263010000009092049091169063eec2744e90604401600060405180830381600087803b158015612e2c57600080fd5b505af1158015612e40573d6000803e3d6000fd5b50505050611dc78282611c5c565b6000546001600160a01b03163314612ea85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b600a805461ffff8781167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909216919091176201000087831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff16640100000000868316027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff1617660100000000000085831602177fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff166801000000000000000091841691909102179055818184612f828789614ebf565b612f8c9190614ebf565b612f969190614ebf565b612fa09190614ebf565b600a805461ffff929092166a0100000000000000000000027fffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff9092169190911790555050505050565b601354604080517f5695fa5800000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691635695fa589160048083019260209291908290030181865afa15801561304c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffa9190614d78565b601a546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015260009263010000009004169063fe575a8790602401602060405180830381865afa1580156130db573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee69190614ee5565b60006001600160a01b03841661317d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610d40565b6001600160a01b0383166131f95760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610d40565b6000821161326f5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610d40565b6001600160a01b0384166000908152600260205260408120548190819060ff161561329d57600192506132cb565b6001600160a01b03861660009081526002602052604090205460ff16156132c757600191506132cb565b5060015b6132d58787613a18565b156135a257601a54610100900460ff166133315760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610d40565b82156133fb576001600160a01b03871660009081526006602052604090205460ff1615801561337957506001600160a01b03861660009081526006602052604090205460ff16155b156133f6576010548511156133f65760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610d40565b6134c0565b81156134c0576001600160a01b03871660009081526006602052604090205460ff1615801561344357506001600160a01b03861660009081526006602052604090205460ff16155b156134c0576011548511156134c05760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610d40565b600b546001600160a01b038781169116148015906134dc575081155b156135a2576001600160a01b03861660009081526006602052604090205460ff166135a25760125485613524886001600160a01b031660009081526001602052604090205490565b61352e9190614f02565b11156135a25760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610d40565b6001600160a01b03871660009081526005602052604090205460019060ff16806135e457506001600160a01b03871660009081526005602052604090205460ff165b156135ed575060005b82156136605760155460ff1615801561360d5750601554610100900460ff165b1561366057426016546017546136239190614f02565b10156136605730600090815260016020526040902054601854811061365e57601954811061365057506019545b61365981613ae9565b426017555b505b61366f8888888488888861367b565b98975050505050505050565b601a5460009062010000900460ff166137295761369888886140be565b601a5462010000900460ff161580156136b657506136b68888613a18565b156137295760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610d40565b6137338888613a18565b156137e757601a546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038a8116600483015289811660248301526044820189905260009263010000009004169063ecd07a53906064016020604051808303816000875af19250505080156137d0575060408051601f3d908101601f191682019092526137cd91810190614ee5565b60015b6137d957600080fd5b9050806137e557600080fd5b505b6001600160a01b0388166000908152600160205260408120805488929061380f908490614d13565b90915550869050851561382c57613829898887878761428a565b90505b6001600160a01b03881660009081526001602052604081208054839290613854908490614f02565b9091555061386490508989614375565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516138a991815260200190565b60405180910390a350600198975050505050505050565b6001600160a01b03831661393b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610d40565b6001600160a01b0382166139b75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610d40565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600080546001600160a01b03848116911614801590613a4557506000546001600160a01b03838116911614155b8015613a5c57506000546001600160a01b03163214155b8015613a8157506001600160a01b03821660009081526008602052604090205460ff16155b8015613aa657506001600160a01b03831660009081526008602052604090205460ff16155b8015613abd57506001600160a01b03821661dead14155b8015613ad157506001600160a01b03821615155b80156124f6575050506001600160a01b031630141590565b6015805460ff191660011790556040805160c081018252600a5461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000810483166060830152680100000000000000008104831660808301526a0100000000000000000000900490911660a08201819052600003613b7257506140b1565b306000908152600460209081526040808320600b546001600160a01b0316845290915290205460001914613bcb57306000908152600460209081526040808320600b546001600160a01b03168452909152902060001990555b600060028260a0015161ffff16836020015161ffff1685613bec9190614caa565b613bf69190614cd8565b613c009190614cd8565b90506000613c0e8285614d13565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613c4857613c48614d2a565b6001600160a01b03928316602091820292909201810191909152600b54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613cba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cde9190614ea2565b81600181518110613cf157613cf1614d2a565b6001600160a01b039283166020918202929092010152600b546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790613d50908590600090869030904290600401614f1a565b600060405180830381600087803b158015613d6a57600080fd5b505af1158015613d7e573d6000803e3d6000fd5b5047925060009150849050613d938684614caa565b613d9d9190614cd8565b90508415613e8e57600b546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015613e2c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613e519190614f56565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b613e988183614d13565b915085602001518660a001818151613eb09190614f84565b61ffff90811690915260a088015188516000935090821691613ed3911685614caa565b613edd9190614cd8565b905060008760a0015161ffff16886080015161ffff1685613efe9190614caa565b613f089190614cd8565b905060008860a0015161ffff16896060015161ffff1686613f299190614caa565b613f339190614cd8565b9050600081613f428486614f02565b613f4c9190614f02565b613f569087614d13565b8a5190915061ffff1615613fc857601360009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be856040518263ffffffff1660e01b81526004016000604051808303818588803b158015613fb457600080fd5b505af193505050508015613fc6575060015b505b60408a015161ffff161561401257600d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015614010573d6000803e3d6000fd5b505b60808a015161ffff161561405c57600f546040516001600160a01b039091169084156108fc029085906000818181858888f1935050505015801561405a573d6000803e3d6000fd5b505b60608a015161ffff16156140a657600e546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156140a4573d6000803e3d6000fd5b505b505050505050505050505b506015805460ff19169055565b601a5462010000900460ff161561413d5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610d40565b6141478282613a18565b1580156141615750600c546001600160a01b038281169116145b15611dc7576001600160a01b038083166000908152600860205260409020805460ff19166001179055601a80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff1662010000179081905563010000009004166141f657601a80547fffffffffffffffffff0000000000000000000000000000000000000000ffffff16306301000000021790555b6013546001600160a01b0316614226576013805473ffffffffffffffffffffffffffffffffffffffff1916301790555b601580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b60008084156142a0575060095461ffff166142ca565b83156142b9575060095462010000900461ffff166142ca565b50600954640100000000900461ffff165b806000036142db578591505061436c565b60006127106142ea8389614caa565b6142f49190614cd8565b30600090815260016020526040812080549293508392909190614318908490614f02565b909155505060405181815230906001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36143678188614d13565b925050505b95945050505050565b6001600160a01b03821660009081526007602052604090205460ff1661441f576013546001600160a01b03838116600081815260016020526040908190205490517fdf047e9e0000000000000000000000000000000000000000000000000000000081526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b15801561440c57600080fd5b505af192505050801561441d575060015b505b6001600160a01b03811660009081526007602052604090205460ff166144c9576013546001600160a01b03828116600081815260016020526040908190205490517fdf047e9e0000000000000000000000000000000000000000000000000000000081526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b1580156144b657600080fd5b505af19250505080156144c7575060015b505b601a5460ff1615611dc7576013546014546040517fa9e732bb0000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163a9e732bb916145229160040190815260200190565b600060405180830381600087803b15801561453c57600080fd5b505af192505050801561454d575060015b15611dc7575050565b8015158114611c5957600080fd5b6000806040838503121561457757600080fd5b823561458281614556565b9150602083013561459281614556565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156145f5576145f561459d565b604052919050565b600067ffffffffffffffff8211156146175761461761459d565b5060051b60200190565b6001600160a01b0381168114611c5957600080fd5b600082601f83011261464757600080fd5b8135602061465c614657836145fd565b6145cc565b82815260059290921b8401810191818101908684111561467b57600080fd5b8286015b8481101561469f57803561469281614621565b835291830191830161467f565b509695505050505050565b600080604083850312156146bd57600080fd5b823567ffffffffffffffff8111156146d457600080fd5b6146e085828601614636565b925050602083013561459281614556565b60005b8381101561470c5781810151838201526020016146f4565b838111156124e35750506000910152565b600081518084526147358160208601602086016146f1565b601f01601f19169290920160200192915050565b6020815260006124f6602083018461471d565b6000806040838503121561476f57600080fd5b823561477a81614621565b946020939093013593505050565b60008060006060848603121561479d57600080fd5b505081359360208301359350604090920135919050565b600080604083850312156147c757600080fd5b82356147d281614621565b9150602083013561459281614621565b6000806000606084860312156147f757600080fd5b833561480281614621565b9250602084013561481281614621565b929592945050506040919091013590565b6000806040838503121561483657600080fd5b50508035926020909101359150565b6000806040838503121561485857600080fd5b823567ffffffffffffffff8082111561487057600080fd5b61487c86838701614636565b935060209150818501358181111561489357600080fd5b85019050601f810186136148a657600080fd5b80356148b4614657826145fd565b81815260059190911b820183019083810190888311156148d357600080fd5b928401925b828410156148f1578335825292840192908401906148d8565b80955050505050509250929050565b803561ffff8116811461491257600080fd5b919050565b60008060006060848603121561492c57600080fd5b61493584614900565b925061494360208501614900565b915061495160408501614900565b90509250925092565b60006020828403121561496c57600080fd5b81356124f681614621565b600080600080600060a0868803121561498f57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080604083850312156149c557600080fd5b823561458281614621565b6080815260006149e3608083018761471d565b82810360208401526149f5818761471d565b90508281036040840152614a09818661471d565b90508281036060840152614a1d818561471d565b979650505050505050565b600080600060608486031215614a3d57600080fd5b8335614a4881614621565b92506020840135614a5881614621565b91506040840135614a6881614621565b809150509250925092565b60008060008060808587031215614a8957600080fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215614ab757600080fd5b5035919050565b600080600080600060a08688031215614ad657600080fd5b614adf86614900565b9450614aed60208701614900565b9350614afb60408701614900565b9250614b0960608701614900565b9150614b1760808701614900565b90509295509295909350565b600081518084526020808501945080840160005b83811015614b5c5781516001600160a01b031687529582019590820190600101614b37565b509495945050505050565b604081526000614b7a6040830185614b23565b905082151560208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b80851115614bf5578160001904821115614bdb57614bdb614b8b565b80851615614be857918102915b93841c9390800290614bbf565b509250929050565b600082614c0c57506001610ee6565b81614c1957506000610ee6565b8160018114614c2f5760028114614c3957614c55565b6001915050610ee6565b60ff841115614c4a57614c4a614b8b565b50506001821b610ee6565b5060208310610133831016604e8410600b8410161715614c78575081810a610ee6565b614c828383614bba565b8060001904821115614c9657614c96614b8b565b029392505050565b60006124f68383614bfd565b6000816000190483118215151615614cc457614cc4614b8b565b500290565b60006124f660ff841683614bfd565b600082614d0e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015614d2557614d25614b8b565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff821660ff8103614d6f57614d6f614b8b565b60010192915050565b600060208284031215614d8a57600080fd5b5051919050565b600082601f830112614da257600080fd5b815167ffffffffffffffff811115614dbc57614dbc61459d565b614dcf6020601f19601f840116016145cc565b818152846020838601011115614de457600080fd5b6111cd8260208301602087016146f1565b60008060008060808587031215614e0b57600080fd5b845167ffffffffffffffff80821115614e2357600080fd5b614e2f88838901614d91565b95506020870151915080821115614e4557600080fd5b614e5188838901614d91565b94506040870151915080821115614e6757600080fd5b614e7388838901614d91565b93506060870151915080821115614e8957600080fd5b50614e9687828801614d91565b91505092959194509250565b600060208284031215614eb457600080fd5b81516124f681614621565b600061ffff808316818516808303821115614edc57614edc614b8b565b01949350505050565b600060208284031215614ef757600080fd5b81516124f681614556565b60008219821115614f1557614f15614b8b565b500190565b85815284602082015260a060408201526000614f3960a0830186614b23565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215614f6b57600080fd5b8351925060208401519150604084015190509250925092565b600061ffff83811690831681811015614f9f57614f9f614b8b565b03939250505056fea26469706673582212204a7660f50ce5229f1f93108615abfd4461027753c1c9c60ddeef452b34a37ac864736f6c634300080d0033

Deployed Bytecode

0x6080604052600436106103bc5760003560e01c80636ab86dc1116101f2578063b3d514fb1161010d578063eafb5a3c116100a0578063f7c245ea1161006f578063f7c245ea14610c3f578063f94aa1b414610c54578063fdb78c0e14610cab578063fe575a8714610cca57600080fd5b8063eafb5a3c14610bc5578063eec2744e14610be5578063efe7dc9014610c05578063f08f43a214610c1f57600080fd5b8063d0b1449d116100dc578063d0b1449d14610b29578063dd62ed3e14610b49578063dea528a114610b8f578063e4fcfd1814610baf57600080fd5b8063b3d514fb14610620578063c6a276c214610a36578063c705c56914610a56578063cf84770614610a8f57600080fd5b80638a8c523c11610185578063ab5cb5a611610154578063ab5cb5a6146109cc578063adba5bca146109ec578063b1b08f7114610620578063b2189fdc14610a1657600080fd5b80638a8c523c1461093c57806392bd7b2c1461095157806395d89b4114610966578063a9059cbb146109ac57600080fd5b806375cb1bd1116101c157806375cb1bd1146108c957806380c581d1146108e9578063893d20e8146109095780638a63bd9b1461092757600080fd5b80636ab86dc1146108495780636b639a251461085e57806370a082311461087e578063715018a6146108b457600080fd5b80632b28fc7a116102e25780634ada218b11610275578063590ffdce11610244578063590ffdce146107a05780635cce86cd146107c05780636372c68f146107f95780636386c1c71461081957600080fd5b80634ada218b146107085780634fb2e45d146107275780634fbee1931461074757806350a8e0161461078057600080fd5b806333251a0b116102b157806333251a0b1461068857806334cd8260146106a857806336fddb04146106c8578063452ed4f1146106e857600080fd5b80632b28fc7a146106205780632e8fa82114610636578063313ce5671461064c57806332cde6641461066857600080fd5b8063095ea7b31161035a578063218950bc11610329578063218950bc146105a057806323b872dd146105c057806326003957146105e05780632610eaca1461060057600080fd5b8063095ea7b31461052657806309a8f179146105565780630fa604e41461057657806318160ddd1461058b57600080fd5b806305bbedb61161039657806305bbedb614610441578063069d955f1461046157806306fdde03146104b75780630758d9241461050657600080fd5b806303fd2a45146103c85780630445b667146103fb578063044df7261461041f57600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103de61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561040757600080fd5b5061041160185481565b6040519081526020016103f2565b34801561042b57600080fd5b5061043f61043a366004614564565b610cea565b005b34801561044d57600080fd5b5061043f61045c3660046146aa565b610dd4565b34801561046d57600080fd5b506009546104929061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103f2565b3480156104c357600080fd5b5060408051808201909152600b81527f5368617274616e20496e7500000000000000000000000000000000000000000060208201525b6040516103f29190614749565b34801561051257600080fd5b50600b546103de906001600160a01b031681565b34801561053257600080fd5b5061054661054136600461475c565b610e7f565b60405190151581526020016103f2565b34801561056257600080fd5b5061043f610571366004614788565b610eec565b34801561058257600080fd5b50610411610fdf565b34801561059757600080fd5b50610411610fff565b3480156105ac57600080fd5b5061043f6105bb3660046147b4565b611043565b3480156105cc57600080fd5b506105466105db3660046147e2565b61115d565b3480156105ec57600080fd5b5061043f6105fb366004614823565b6111d5565b34801561060c57600080fd5b5061043f61061b366004614845565b611334565b34801561062c57600080fd5b506104116109c481565b34801561064257600080fd5b5061041160195481565b34801561065857600080fd5b50604051601281526020016103f2565b34801561067457600080fd5b5061043f610683366004614917565b611455565b34801561069457600080fd5b5061043f6106a336600461495a565b611559565b3480156106b457600080fd5b5061043f6106c3366004614977565b611637565b3480156106d457600080fd5b5061043f6106e33660046149b2565b611702565b3480156106f457600080fd5b50600c546103de906001600160a01b031681565b34801561071457600080fd5b50601a5461054690610100900460ff1681565b34801561073357600080fd5b5061043f61074236600461495a565b611787565b34801561075357600080fd5b5061054661076236600461495a565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561078c57600080fd5b50601a546105469062010000900460ff1681565b3480156107ac57600080fd5b5061043f6107bb3660046149b2565b6119ee565b3480156107cc57600080fd5b506105466107db36600461495a565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561080557600080fd5b5061041161081436600461495a565b611a73565b34801561082557600080fd5b5061083961083436600461495a565b611afc565b6040516103f294939291906149d0565b34801561085557600080fd5b5061043f611b9d565b34801561086a57600080fd5b5061043f6108793660046149b2565b611c5c565b34801561088a57600080fd5b5061041161089936600461495a565b6001600160a01b031660009081526001602052604090205490565b3480156108c057600080fd5b5061043f611dcb565b3480156108d557600080fd5b5061043f6108e4366004614a28565b611ea9565b3480156108f557600080fd5b5061043f6109043660046149b2565b611f4f565b34801561091557600080fd5b506000546001600160a01b03166103de565b34801561093357600080fd5b50610546612108565b34801561094857600080fd5b5061043f612183565b34801561095d57600080fd5b5061043f612471565b34801561097257600080fd5b5060408051808201909152600781527f5368617274616e0000000000000000000000000000000000000000000000000060208201526104f9565b3480156109b857600080fd5b506105466109c736600461475c565b6124e9565b3480156109d857600080fd5b506104116109e736600461495a565b6124fd565b3480156109f857600080fd5b50610a01612549565b604080519283526020830191909152016103f2565b348015610a2257600080fd5b5061043f610a31366004614a73565b612586565b348015610a4257600080fd5b5061043f610a5136600461495a565b6127e8565b348015610a6257600080fd5b50610546610a7136600461495a565b6001600160a01b031660009081526007602052604090205460ff1690565b348015610a9b57600080fd5b50600a54610aec9061ffff808216916201000081048216916401000000008204811691660100000000000081048216916801000000000000000082048116916a010000000000000000000090041686565b6040805161ffff978816815295871660208701529386169385019390935290841660608401528316608083015290911660a082015260c0016103f2565b348015610b3557600080fd5b5061043f610b44366004614aa5565b612895565b348015610b5557600080fd5b50610411610b643660046147b4565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610b9b57600080fd5b5061043f610baa366004614564565b612903565b348015610bbb57600080fd5b5061041160165481565b348015610bd157600080fd5b5061043f610be036600461495a565b6129a7565b348015610bf157600080fd5b5061043f610c003660046149b2565b612d62565b348015610c1157600080fd5b50601a546105469060ff1681565b348015610c2b57600080fd5b5061043f610c3a366004614abe565b612e4e565b348015610c4b57600080fd5b50610411612fe9565b348015610c6057600080fd5b50600d54600e54600f54610c81926001600160a01b03908116928116911683565b604080516001600160a01b03948516815292841660208401529216918101919091526060016103f2565b348015610cb757600080fd5b5060155461054690610100900460ff1681565b348015610cd657600080fd5b50610546610ce536600461495a565b613070565b6000546001600160a01b03163314610d495760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b601a546040517fefbdbabd0000000000000000000000000000000000000000000000000000000081528315156004820152821515602482015263010000009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610db857600080fd5b505af1158015610dcc573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610e2e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b601a546040517f05bbedb600000000000000000000000000000000000000000000000000000000815263010000009091046001600160a01b0316906305bbedb690610d9e9085908590600401614b67565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610eda9086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610f465760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b610f5181600a614c9e565b610f5b9083614caa565b6013546040517f8cd7f02e00000000000000000000000000000000000000000000000000000000815260048101869052602481018390529193506001600160a01b031690638cd7f02e90604401600060405180830381600087803b158015610fc257600080fd5b505af1158015610fd6573d6000803e3d6000fd5b50505050505050565b6000610fed6012600a614cc9565b601254610ffa9190614cd8565b905090565b600061100d6012600a614cc9565b61101c906402540be400614caa565b60000361102857600080fd5b6110346012600a614cc9565b610ffa906402540be400614caa565b6000546001600160a01b0316331461109d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b601a5462010000900460ff16156110b357600080fd5b6001600160a01b03811630148015906110d557506001600160a01b0382163014155b80156110f35750816001600160a01b0316816001600160a01b031614155b6110fc57600080fd5b6013805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03928316179055601a80547fffffffffffffffffff0000000000000000000000000000000000000000ffffff1663010000009390921692909202179055565b6001600160a01b0383166000908152600460209081526040808320338452909152812054600019146111c2576001600160a01b0384166000908152600460209081526040808320338452909152812080548492906111bc908490614d13565b90915550505b6111cd8484846130ff565b949350505050565b6000546001600160a01b0316331461122f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b6103e861123e6012600a614cc9565b61124d906402540be400614caa565b6112579190614cd8565b81836112656012600a614cc9565b611274906402540be400614caa565b61127e9190614caa565b6112889190614cd8565b10156112fc5760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610d40565b808261130a6012600a614cc9565b611319906402540be400614caa565b6113239190614caa565b61132d9190614cd8565b6012555050565b80518251146113855760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610d40565b60005b82518160ff16101561145057818160ff16815181106113a9576113a9614d2a565b60200260200101516113d0336001600160a01b031660009081526001602052604090205490565b10156113db57600080fd5b61143d33848360ff16815181106113f4576113f4614d2a565b60200260200101516012600a61140a9190614cc9565b858560ff168151811061141f5761141f614d2a565b60200260200101516114319190614caa565b6000806000600161367b565b508061144881614d59565b915050611388565b505050565b6000546001600160a01b031633146114af5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b6109c48361ffff16111580156114cb57506109c48261ffff1611155b80156114dd57506109c48161ffff1611155b6114e657600080fd5b6009805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6000546001600160a01b031633146115b35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b601a546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526301000000909204909116906333251a0b906024015b600060405180830381600087803b15801561161c57600080fd5b505af1158015611630573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031633146116915760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b838561169f6012600a614cc9565b6116ae906402540be400614caa565b6116b89190614caa565b6116c29190614cd8565b60185581836116d36012600a614cc9565b6116e2906402540be400614caa565b6116ec9190614caa565b6116f69190614cd8565b60195560165550505050565b6000546001600160a01b0316331461175c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146117e15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b6001600160a01b03811661185d5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d40565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21536001600160a01b038216016118fb5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d40565b600080546001600160a01b039081168252600560208181526040808520805460ff199081169091558554851686526007808452828720805483169055878616875293835281862080548216600190811790915593835281862080549091168417905584549093168452529020541561199657600080546001600160a01b0316808252600160205260409091205461199491908390611431565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b03163314611a485760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6013546040517fd59b2ffd0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063d59b2ffd906024015b602060405180830381865afa158015611ad8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee69190614d78565b6013546040517f5e6056bb0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526060928392839283921690635e6056bb90602401600060405180830381865afa158015611b66573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b8e9190810190614df5565b93509350935093509193509193565b6000546001600160a01b03163314611bf75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b601360009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be476040518263ffffffff1660e01b81526004016000604051808303818588803b158015611c4757600080fd5b505af193505050508015611c59575060015b50565b6000546001600160a01b03163314611cb65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b6001600160a01b0382163014801590611cdd5750600c546001600160a01b03838116911614155b611ce657600080fd5b6001600160a01b0382166000908152600760205260409020805460ff19168215801591909117909155611d65576013546040517fdf047e9e0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152600060248301529091169063df047e9e90604401610d9e565b6013546001600160a01b03838116600081815260016020526040908190205490517fdf047e9e0000000000000000000000000000000000000000000000000000000081526004810192909252602482015291169063df047e9e90604401610d9e565b5050565b6000546001600160a01b03163314611e255760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b600080546001600160a01b039081168252600560209081526040808420805460ff199081169091558454909316845260079091528083208054909216909155815473ffffffffffffffffffffffffffffffffffffffff191682555181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314611f035760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b600d80546001600160a01b0394851673ffffffffffffffffffffffffffffffffffffffff1991821617909155600e805493851693821693909317909255600f8054919093169116179055565b6000546001600160a01b03163314611fa95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b801515600003612026576001600160a01b03828116600081815260026020526040808220805460ff19169055601a5490517f80c581d10000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915263010000009004909116906380c581d190604401610d9e565b6003541561208d576203f480600354426120409190614d13565b1161208d5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610d40565b6001600160a01b0382811660008181526002602052604090819020805460ff1916600190811790915542600355601a5491517f80c581d10000000000000000000000000000000000000000000000000000000081526004810193909352602483015263010000009004909116906380c581d190604401610d9e565b600080546001600160a01b031633146121635760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b600b5461217d9030906001600160a01b03166000196138c0565b50600190565b6000546001600160a01b031633146121dd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b601a54610100900460ff16156122355760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610d40565b601a5462010000900460ff1661228d5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610d40565b601a54630100000090046001600160a01b03166122d557601a80547fffffffffffffffffff0000000000000000000000000000000000000000ffffff16306301000000021790555b601a54600c546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff421660448201526012606482015263010000009092041690636c115c3490608401600060405180830381600087803b15801561236157600080fd5b505af1925050508015612372575060015b50601360009054906101000a90046001600160a01b03166001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156123c357600080fd5b505af19250505080156123d4575060015b50601a80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016610101179055600c546001600160a01b03166000908152600160205260409020546127109061242b906005614caa565b6124359190614cd8565b601855600c546001600160a01b03166000908152600160205260409020546103e890612462906001614caa565b61246c9190614cd8565b601955565b6013546040517f2e6f0efd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690632e6f0efd90602401600060405180830381600087803b1580156124cf57600080fd5b505af11580156124e3573d6000803e3d6000fd5b50505050565b60006124f63384846130ff565b9392505050565b6013546040517ff6ed20170000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063f6ed201790602401611abb565b6000806125586012600a614cc9565b6010546125659190614cd8565b6125716012600a614cc9565b60115461257e9190614cd8565b915091509091565b6000546001600160a01b031633146125e05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b6103e86125ef6012600a614cc9565b6125fe906402540be400614caa565b6126089190614cd8565b83856126166012600a614cc9565b612625906402540be400614caa565b61262f9190614caa565b6126399190614cd8565b10156126ad5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610d40565b6103e86126bc6012600a614cc9565b6126cb906402540be400614caa565b6126d59190614cd8565b81836126e36012600a614cc9565b6126f2906402540be400614caa565b6126fc9190614caa565b6127069190614cd8565b101561277a5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610d40565b82846127886012600a614cc9565b612797906402540be400614caa565b6127a19190614caa565b6127ab9190614cd8565b60105580826127bc6012600a614cc9565b6127cb906402540be400614caa565b6127d59190614caa565b6127df9190614cd8565b60115550505050565b6000546001600160a01b031633146128425760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b601a546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015263010000009092049091169063c6a276c290602401611602565b6000546001600160a01b031633146128ef5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b620b71b081106128fe57600080fd5b601455565b6000546001600160a01b0316331461295d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b601580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101009315159390930292909217909155601a805460ff1916911515919091179055565b6000546001600160a01b03163314612a015760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a6a9190614ea2565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ab7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612adb9190614ea2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b629190614ea2565b90506001600160a01b038116612d0057816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bd49190614ea2565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c459190614ea2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612caa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cce9190614ea2565b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055612d29565b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556114509030906000196138c0565b6000546001600160a01b03163314612dbc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b601a546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152831515602483015263010000009092049091169063eec2744e90604401600060405180830381600087803b158015612e2c57600080fd5b505af1158015612e40573d6000803e3d6000fd5b50505050611dc78282611c5c565b6000546001600160a01b03163314612ea85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d40565b600a805461ffff8781167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909216919091176201000087831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff16640100000000868316027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff1617660100000000000085831602177fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff166801000000000000000091841691909102179055818184612f828789614ebf565b612f8c9190614ebf565b612f969190614ebf565b612fa09190614ebf565b600a805461ffff929092166a0100000000000000000000027fffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff9092169190911790555050505050565b601354604080517f5695fa5800000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691635695fa589160048083019260209291908290030181865afa15801561304c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffa9190614d78565b601a546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015260009263010000009004169063fe575a8790602401602060405180830381865afa1580156130db573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee69190614ee5565b60006001600160a01b03841661317d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610d40565b6001600160a01b0383166131f95760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610d40565b6000821161326f5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610d40565b6001600160a01b0384166000908152600260205260408120548190819060ff161561329d57600192506132cb565b6001600160a01b03861660009081526002602052604090205460ff16156132c757600191506132cb565b5060015b6132d58787613a18565b156135a257601a54610100900460ff166133315760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610d40565b82156133fb576001600160a01b03871660009081526006602052604090205460ff1615801561337957506001600160a01b03861660009081526006602052604090205460ff16155b156133f6576010548511156133f65760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610d40565b6134c0565b81156134c0576001600160a01b03871660009081526006602052604090205460ff1615801561344357506001600160a01b03861660009081526006602052604090205460ff16155b156134c0576011548511156134c05760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610d40565b600b546001600160a01b038781169116148015906134dc575081155b156135a2576001600160a01b03861660009081526006602052604090205460ff166135a25760125485613524886001600160a01b031660009081526001602052604090205490565b61352e9190614f02565b11156135a25760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610d40565b6001600160a01b03871660009081526005602052604090205460019060ff16806135e457506001600160a01b03871660009081526005602052604090205460ff165b156135ed575060005b82156136605760155460ff1615801561360d5750601554610100900460ff165b1561366057426016546017546136239190614f02565b10156136605730600090815260016020526040902054601854811061365e57601954811061365057506019545b61365981613ae9565b426017555b505b61366f8888888488888861367b565b98975050505050505050565b601a5460009062010000900460ff166137295761369888886140be565b601a5462010000900460ff161580156136b657506136b68888613a18565b156137295760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610d40565b6137338888613a18565b156137e757601a546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038a8116600483015289811660248301526044820189905260009263010000009004169063ecd07a53906064016020604051808303816000875af19250505080156137d0575060408051601f3d908101601f191682019092526137cd91810190614ee5565b60015b6137d957600080fd5b9050806137e557600080fd5b505b6001600160a01b0388166000908152600160205260408120805488929061380f908490614d13565b90915550869050851561382c57613829898887878761428a565b90505b6001600160a01b03881660009081526001602052604081208054839290613854908490614f02565b9091555061386490508989614375565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516138a991815260200190565b60405180910390a350600198975050505050505050565b6001600160a01b03831661393b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610d40565b6001600160a01b0382166139b75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610d40565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600080546001600160a01b03848116911614801590613a4557506000546001600160a01b03838116911614155b8015613a5c57506000546001600160a01b03163214155b8015613a8157506001600160a01b03821660009081526008602052604090205460ff16155b8015613aa657506001600160a01b03831660009081526008602052604090205460ff16155b8015613abd57506001600160a01b03821661dead14155b8015613ad157506001600160a01b03821615155b80156124f6575050506001600160a01b031630141590565b6015805460ff191660011790556040805160c081018252600a5461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000810483166060830152680100000000000000008104831660808301526a0100000000000000000000900490911660a08201819052600003613b7257506140b1565b306000908152600460209081526040808320600b546001600160a01b0316845290915290205460001914613bcb57306000908152600460209081526040808320600b546001600160a01b03168452909152902060001990555b600060028260a0015161ffff16836020015161ffff1685613bec9190614caa565b613bf69190614cd8565b613c009190614cd8565b90506000613c0e8285614d13565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613c4857613c48614d2a565b6001600160a01b03928316602091820292909201810191909152600b54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613cba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cde9190614ea2565b81600181518110613cf157613cf1614d2a565b6001600160a01b039283166020918202929092010152600b546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790613d50908590600090869030904290600401614f1a565b600060405180830381600087803b158015613d6a57600080fd5b505af1158015613d7e573d6000803e3d6000fd5b5047925060009150849050613d938684614caa565b613d9d9190614cd8565b90508415613e8e57600b546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015613e2c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613e519190614f56565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b613e988183614d13565b915085602001518660a001818151613eb09190614f84565b61ffff90811690915260a088015188516000935090821691613ed3911685614caa565b613edd9190614cd8565b905060008760a0015161ffff16886080015161ffff1685613efe9190614caa565b613f089190614cd8565b905060008860a0015161ffff16896060015161ffff1686613f299190614caa565b613f339190614cd8565b9050600081613f428486614f02565b613f4c9190614f02565b613f569087614d13565b8a5190915061ffff1615613fc857601360009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be856040518263ffffffff1660e01b81526004016000604051808303818588803b158015613fb457600080fd5b505af193505050508015613fc6575060015b505b60408a015161ffff161561401257600d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015614010573d6000803e3d6000fd5b505b60808a015161ffff161561405c57600f546040516001600160a01b039091169084156108fc029085906000818181858888f1935050505015801561405a573d6000803e3d6000fd5b505b60608a015161ffff16156140a657600e546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156140a4573d6000803e3d6000fd5b505b505050505050505050505b506015805460ff19169055565b601a5462010000900460ff161561413d5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610d40565b6141478282613a18565b1580156141615750600c546001600160a01b038281169116145b15611dc7576001600160a01b038083166000908152600860205260409020805460ff19166001179055601a80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff1662010000179081905563010000009004166141f657601a80547fffffffffffffffffff0000000000000000000000000000000000000000ffffff16306301000000021790555b6013546001600160a01b0316614226576013805473ffffffffffffffffffffffffffffffffffffffff1916301790555b601580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b60008084156142a0575060095461ffff166142ca565b83156142b9575060095462010000900461ffff166142ca565b50600954640100000000900461ffff165b806000036142db578591505061436c565b60006127106142ea8389614caa565b6142f49190614cd8565b30600090815260016020526040812080549293508392909190614318908490614f02565b909155505060405181815230906001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36143678188614d13565b925050505b95945050505050565b6001600160a01b03821660009081526007602052604090205460ff1661441f576013546001600160a01b03838116600081815260016020526040908190205490517fdf047e9e0000000000000000000000000000000000000000000000000000000081526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b15801561440c57600080fd5b505af192505050801561441d575060015b505b6001600160a01b03811660009081526007602052604090205460ff166144c9576013546001600160a01b03828116600081815260016020526040908190205490517fdf047e9e0000000000000000000000000000000000000000000000000000000081526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b1580156144b657600080fd5b505af19250505080156144c7575060015b505b601a5460ff1615611dc7576013546014546040517fa9e732bb0000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163a9e732bb916145229160040190815260200190565b600060405180830381600087803b15801561453c57600080fd5b505af192505050801561454d575060015b15611dc7575050565b8015158114611c5957600080fd5b6000806040838503121561457757600080fd5b823561458281614556565b9150602083013561459281614556565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156145f5576145f561459d565b604052919050565b600067ffffffffffffffff8211156146175761461761459d565b5060051b60200190565b6001600160a01b0381168114611c5957600080fd5b600082601f83011261464757600080fd5b8135602061465c614657836145fd565b6145cc565b82815260059290921b8401810191818101908684111561467b57600080fd5b8286015b8481101561469f57803561469281614621565b835291830191830161467f565b509695505050505050565b600080604083850312156146bd57600080fd5b823567ffffffffffffffff8111156146d457600080fd5b6146e085828601614636565b925050602083013561459281614556565b60005b8381101561470c5781810151838201526020016146f4565b838111156124e35750506000910152565b600081518084526147358160208601602086016146f1565b601f01601f19169290920160200192915050565b6020815260006124f6602083018461471d565b6000806040838503121561476f57600080fd5b823561477a81614621565b946020939093013593505050565b60008060006060848603121561479d57600080fd5b505081359360208301359350604090920135919050565b600080604083850312156147c757600080fd5b82356147d281614621565b9150602083013561459281614621565b6000806000606084860312156147f757600080fd5b833561480281614621565b9250602084013561481281614621565b929592945050506040919091013590565b6000806040838503121561483657600080fd5b50508035926020909101359150565b6000806040838503121561485857600080fd5b823567ffffffffffffffff8082111561487057600080fd5b61487c86838701614636565b935060209150818501358181111561489357600080fd5b85019050601f810186136148a657600080fd5b80356148b4614657826145fd565b81815260059190911b820183019083810190888311156148d357600080fd5b928401925b828410156148f1578335825292840192908401906148d8565b80955050505050509250929050565b803561ffff8116811461491257600080fd5b919050565b60008060006060848603121561492c57600080fd5b61493584614900565b925061494360208501614900565b915061495160408501614900565b90509250925092565b60006020828403121561496c57600080fd5b81356124f681614621565b600080600080600060a0868803121561498f57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080604083850312156149c557600080fd5b823561458281614621565b6080815260006149e3608083018761471d565b82810360208401526149f5818761471d565b90508281036040840152614a09818661471d565b90508281036060840152614a1d818561471d565b979650505050505050565b600080600060608486031215614a3d57600080fd5b8335614a4881614621565b92506020840135614a5881614621565b91506040840135614a6881614621565b809150509250925092565b60008060008060808587031215614a8957600080fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215614ab757600080fd5b5035919050565b600080600080600060a08688031215614ad657600080fd5b614adf86614900565b9450614aed60208701614900565b9350614afb60408701614900565b9250614b0960608701614900565b9150614b1760808701614900565b90509295509295909350565b600081518084526020808501945080840160005b83811015614b5c5781516001600160a01b031687529582019590820190600101614b37565b509495945050505050565b604081526000614b7a6040830185614b23565b905082151560208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b80851115614bf5578160001904821115614bdb57614bdb614b8b565b80851615614be857918102915b93841c9390800290614bbf565b509250929050565b600082614c0c57506001610ee6565b81614c1957506000610ee6565b8160018114614c2f5760028114614c3957614c55565b6001915050610ee6565b60ff841115614c4a57614c4a614b8b565b50506001821b610ee6565b5060208310610133831016604e8410600b8410161715614c78575081810a610ee6565b614c828383614bba565b8060001904821115614c9657614c96614b8b565b029392505050565b60006124f68383614bfd565b6000816000190483118215151615614cc457614cc4614b8b565b500290565b60006124f660ff841683614bfd565b600082614d0e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015614d2557614d25614b8b565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff821660ff8103614d6f57614d6f614b8b565b60010192915050565b600060208284031215614d8a57600080fd5b5051919050565b600082601f830112614da257600080fd5b815167ffffffffffffffff811115614dbc57614dbc61459d565b614dcf6020601f19601f840116016145cc565b818152846020838601011115614de457600080fd5b6111cd8260208301602087016146f1565b60008060008060808587031215614e0b57600080fd5b845167ffffffffffffffff80821115614e2357600080fd5b614e2f88838901614d91565b95506020870151915080821115614e4557600080fd5b614e5188838901614d91565b94506040870151915080821115614e6757600080fd5b614e7388838901614d91565b93506060870151915080821115614e8957600080fd5b50614e9687828801614d91565b91505092959194509250565b600060208284031215614eb457600080fd5b81516124f681614621565b600061ffff808316818516808303821115614edc57614edc614b8b565b01949350505050565b600060208284031215614ef757600080fd5b81516124f681614556565b60008219821115614f1557614f15614b8b565b500190565b85815284602082015260a060408201526000614f3960a0830186614b23565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215614f6b57600080fd5b8351925060208401519150604084015190509250925092565b600061ffff83811690831681811015614f9f57614f9f614b8b565b03939250505056fea26469706673582212204a7660f50ce5229f1f93108615abfd4461027753c1c9c60ddeef452b34a37ac864736f6c634300080d0033

Deployed Bytecode Sourcemap

4827:25143:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6557:73;;;;;;;;;;;;6588:42;6557:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;6557:73:0;;;;;;;;7528:28;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;7528:28:0;245:177:1;14776:151:0;;;;;;;;;;-1:-1:-1;14776:151:0;;;;;:::i;:::-;;:::i;:::-;;13876:172;;;;;;;;;;-1:-1:-1;13876:172:0;;;;;:::i;:::-;;:::i;5974:116::-;;;;;;;;;;-1:-1:-1;5974:116:0;;;;;;;;;;;;;;;;;;;;;;;;;;3236:6:1;3269:15;;;3251:34;;3321:15;;;3316:2;3301:18;;3294:43;3373:15;;3353:18;;;3346:43;;;;3214:2;3199:18;5974:116:0;3030:365:1;12026:80:0;;;;;;;;;;-1:-1:-1;12098:5:0;;;;;;;;;;;;;;;;;12026:80;;;;;;;:::i;6496:26::-;;;;;;;;;;-1:-1:-1;6496:26:0;;;;-1:-1:-1;;;;;6496:26:0;;;12447:216;;;;;;;;;;-1:-1:-1;12447:216:0;;;;;:::i;:::-;;:::i;:::-;;;4943:14:1;;4936:22;4918:41;;4906:2;4891:18;12447:216:0;4778:187:1;17145:277:0;;;;;;;;;;-1:-1:-1;17145:277:0;;;;;:::i;:::-;;:::i;21439:112::-;;;;;;;;;;;;;:::i;11729:115::-;;;;;;;;;;;;;:::i;14189:337::-;;;;;;;;;;-1:-1:-1;14189:337:0;;;;;:::i;:::-;;:::i;13361:306::-;;;;;;;;;;-1:-1:-1;13361:306:0;;;;;:::i;:::-;;:::i;20999:267::-;;;;;;;;;;-1:-1:-1;20999:267:0;;;;;:::i;:::-;;:::i;29427:408::-;;;;;;;;;;-1:-1:-1;29427:408:0;;;;;:::i;:::-;;:::i;6293:42::-;;;;;;;;;;;;6331:4;6293:42;;7563:25;;;;;;;;;;;;;;;;11850:80;;;;;;;;;;-1:-1:-1;11850:80:0;;5599:2;7683:36:1;;7671:2;7656:18;11850:80:0;7541:184:1;15564:353:0;;;;;;;;;;-1:-1:-1;15564:353:0;;;;;:::i;:::-;;:::i;14534:108::-;;;;;;;;;;-1:-1:-1;14534:108:0;;;;;:::i;:::-;;:::i;16799:338::-;;;;;;;;;;-1:-1:-1;16799:338:0;;;;;:::i;:::-;;:::i;19809:140::-;;;;;;;;;;-1:-1:-1;19809:140:0;;;;;:::i;:::-;;:::i;6529:21::-;;;;;;;;;;-1:-1:-1;6529:21:0;;;;-1:-1:-1;;;;;6529:21:0;;;7638:34;;;;;;;;;;-1:-1:-1;7638:34:0;;;;;;;;;;;10358:728;;;;;;;;;;-1:-1:-1;10358:728:0;;;;;:::i;:::-;;:::i;19395:125::-;;;;;;;;;;-1:-1:-1;19395:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;19484:28:0;19460:4;19484:28;;;:19;:28;;;;;;;;;19395:125;7679:36;;;;;;;;;;-1:-1:-1;7679:36:0;;;;;;;;;;;20314:134;;;;;;;;;;-1:-1:-1;20314:134:0;;;;;:::i;:::-;;:::i;19671:130::-;;;;;;;;;;-1:-1:-1;19671:130:0;;;;;:::i;:::-;-1:-1:-1;;;;;19763:30:0;19739:4;19763:30;;;:21;:30;;;;;;;;;19671:130;18003:154;;;;;;;;;;-1:-1:-1;18003:154:0;;;;;:::i;:::-;;:::i;17803:192::-;;;;;;;;;;-1:-1:-1;17803:192:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;29843:124::-;;;;;;;;;;;;;:::i;19957:349::-;;;;;;;;;;-1:-1:-1;19957:349:0;;;;;:::i;:::-;;:::i;12197:103::-;;;;;;;;;;-1:-1:-1;12197:103:0;;;;;:::i;:::-;-1:-1:-1;;;;;12281:16:0;12263:7;12281:16;;;:7;:16;;;;;;;12197:103;11094:245;;;;;;;;;;;;;:::i;16321:269::-;;;;;;;;;;-1:-1:-1;16321:269:0;;;;;:::i;:::-;;:::i;18871:516::-;;;;;;;;;;-1:-1:-1;18871:516:0;;;;;:::i;:::-;;:::i;12112:79::-;;;;;;;;;;-1:-1:-1;12164:7:0;12182:6;-1:-1:-1;;;;;12182:6:0;12112:79;;13020:173;;;;;;;;;;;;;:::i;14935:621::-;;;;;;;;;;;;;:::i;17569:100::-;;;;;;;;;;;;;:::i;11936:84::-;;;;;;;;;;-1:-1:-1;12010:7:0;;;;;;;;;;;;;;;;;11936:84;;13201:152;;;;;;;;;;-1:-1:-1;13201:152:0;;;;;:::i;:::-;;:::i;18165:150::-;;;;;;;;;;-1:-1:-1;18165:150:0;;;;;:::i;:::-;;:::i;21274:157::-;;;;;;;;;;;;;:::i;:::-;;;;10773:25:1;;;10829:2;10814:18;;10807:34;;;;10746:18;21274:157:0;10599:248:1;20456:535:0;;;;;;;;;;-1:-1:-1;20456:535:0;;;;;:::i;:::-;;:::i;14650:118::-;;;;;;;;;;-1:-1:-1;14650:118:0;;;;;:::i;:::-;;:::i;19528:135::-;;;;;;;;;;-1:-1:-1;19528:135:0;;;;;:::i;:::-;-1:-1:-1;;;;;19622:33:0;19598:4;19622:33;;;:24;:33;;;;;;;;;19528:135;6099:185;;;;;;;;;;-1:-1:-1;6099:185:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11527:6:1;11560:15;;;11542:34;;11612:15;;;11607:2;11592:18;;11585:43;11664:15;;;11644:18;;;11637:43;;;;11716:15;;;11711:2;11696:18;;11689:43;11769:15;;11763:3;11748:19;;11741:44;11822:15;;;11816:3;11801:19;;11794:44;11504:3;11489:19;6099:185:0;11242:602:1;17430:131:0;;;;;;;;;;-1:-1:-1;17430:131:0;;;;;:::i;:::-;;:::i;12306:133::-;;;;;;;;;;-1:-1:-1;12306:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;12408:19:0;;;12390:7;12408:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;12306:133;16598:193;;;;;;;;;;-1:-1:-1;16598:193:0;;;;;:::i;:::-;;:::i;7445:45::-;;;;;;;;;;;;;;;;18323:540;;;;;;;;;;-1:-1:-1;18323:540:0;;;;;:::i;:::-;;:::i;13675:193::-;;;;;;;;;;-1:-1:-1;13675:193:0;;;;;:::i;:::-;;:::i;7595:34::-;;;;;;;;;;-1:-1:-1;7595:34:0;;;;;;;;15925:388;;;;;;;;;;-1:-1:-1;15925:388:0;;;;;:::i;:::-;;:::i;17677:118::-;;;;;;;;;;;;;:::i;6856:268::-;;;;;;;;;;-1:-1:-1;6856:268:0;;;;;;;;-1:-1:-1;;;;;6856:268:0;;;;;;;;;;;;;;-1:-1:-1;;;;;12842:15:1;;;12824:34;;12894:15;;;12889:2;12874:18;;12867:43;12946:15;;12926:18;;;12919:43;;;;12751:2;12736:18;6856:268:0;12513:455:1;7399:39:0;;;;;;;;;;-1:-1:-1;7399:39:0;;;;;;;;;;;14056:125;;;;;;;;;;-1:-1:-1;14056:125:0;;;;;:::i;:::-;;:::i;14776:151::-;7887:6;;-1:-1:-1;;;;;7887:6:0;7897:10;7887:20;7879:65;;;;-1:-1:-1;;;7879:65:0;;13175:2:1;7879:65:0;;;13157:21:1;;;13194:18;;;13187:30;13253:34;13233:18;;;13226:62;13305:18;;7879:65:0;;;;;;;;;14871:9:::1;::::0;:48:::1;::::0;;;;13521:14:1;;13514:22;14871:48:0::1;::::0;::::1;13496:41:1::0;13580:14;;13573:22;13553:18;;;13546:50;14871:9:0;;;::::1;-1:-1:-1::0;;;;;14871:9:0::1;::::0;:24:::1;::::0;13469:18:1;;14871:48:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;14776:151:::0;;:::o;13876:172::-;7887:6;;-1:-1:-1;;;;;7887:6:0;7897:10;7887:20;7879:65;;;;-1:-1:-1;;;7879:65:0;;13175:2:1;7879:65:0;;;13157:21:1;;;13194:18;;;13187:30;13253:34;13233:18;;;13226:62;13305:18;;7879:65:0;12973:356:1;7879:65:0;13984:9:::1;::::0;:56:::1;::::0;;;;:9;;;::::1;-1:-1:-1::0;;;;;13984:9:0::1;::::0;:37:::1;::::0;:56:::1;::::0;14022:8;;14032:7;;13984:56:::1;;;:::i;12447:216::-:0;12551:10;12522:4;12539:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;12539:32:0;;;;;;;;;;:41;;;12596:37;12522:4;;12539:32;;12596:37;;;;12574:6;391:25:1;;379:2;364:18;;245:177;12596:37:0;;;;;;;;-1:-1:-1;12651:4:0;12447:216;;;;;:::o;17145:277::-;7887:6;;-1:-1:-1;;;;;7887:6:0;7897:10;7887:20;7879:65;;;;-1:-1:-1;;;7879:65:0;;13175:2:1;7879:65:0;;;13157:21:1;;;13194:18;;;13187:30;13253:34;13233:18;;;13226:62;13305:18;;7879:65:0;12973:356:1;7879:65:0;17317:27:::1;17321:23:::0;17317:2:::1;:27;:::i;:::-;17300:44;::::0;:14;:44:::1;:::i;:::-;17355:9;::::0;:59:::1;::::0;;;;::::1;::::0;::::1;10773:25:1::0;;;10814:18;;;10807:34;;;17283:61:0;;-1:-1:-1;;;;;;17355:9:0::1;::::0;:31:::1;::::0;10746:18:1;;17355:59:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17145:277:::0;;;:::o;21439:112::-;21484:7;21529:13;5599:2;21529;:13;:::i;:::-;21511:14;;:32;;;;:::i;:::-;21504:39;;21439:112;:::o;11729:115::-;11784:7;5663:15;5599:2;5663;:15;:::i;:::-;5645:34;;5439:14;5645:34;:::i;:::-;11810:1;11799:12;11795:31;;11815:8;;;11795:31;5663:15;5599:2;5663;:15;:::i;:::-;5645:34;;5439:14;5645:34;:::i;14189:337::-;7887:6;;-1:-1:-1;;;;;7887:6:0;7897:10;7887:20;7879:65;;;;-1:-1:-1;;;7879:65:0;;13175:2:1;7879:65:0;;;13157:21:1;;;13194:18;;;13187:30;13253:34;13233:18;;;13226:62;13305:18;;7879:65:0;12973:356:1;7879:65:0;14297:16:::1;::::0;;;::::1;;;14296:17;14288:26;;;::::0;::::1;;-1:-1:-1::0;;;;;14333:29:0;::::1;14357:4;14333:29;::::0;::::1;::::0;:62:::1;;-1:-1:-1::0;;;;;;14366:29:0;::::1;14390:4;14366:29;;14333:62;:94;;;;;14415:12;-1:-1:-1::0;;;;;14399:28:0::1;:12;-1:-1:-1::0;;;;;14399:28:0::1;;;14333:94;14325:103;;;::::0;::::1;;14439:9;:33:::0;;-1:-1:-1;;14439:33:0::1;-1:-1:-1::0;;;;;14439:33:0;;::::1;;::::0;;14483:9:::1;:35:::0;;;::::1;::::0;;;;::::1;::::0;;;::::1;;::::0;;14189:337::o;13361:306::-;-1:-1:-1;;;;;13482:19:0;;13461:4;13482:19;;;:11;:19;;;;;;;;13502:10;13482:31;;;;;;;;-1:-1:-1;;13482:52:0;13478:126;;-1:-1:-1;;;;;13551:19:0;;;;;;:11;:19;;;;;;;;13571:10;13551:31;;;;;;;:41;;13586:6;;13551:19;:41;;13586:6;;13551:41;:::i;:::-;;;;-1:-1:-1;;13478:126:0;13623:36;13633:6;13641:9;13652:6;13623:9;:36::i;:::-;13616:43;13361:306;-1:-1:-1;;;;13361:306:0:o;20999:267::-;7887:6;;-1:-1:-1;;;;;7887:6:0;7897:10;7887:20;7879:65;;;;-1:-1:-1;;;7879:65:0;;13175:2:1;7879:65:0;;;13157:21:1;;;13194:18;;;13187:30;13253:34;13233:18;;;13226:62;13305:18;;7879:65:0;12973:356:1;7879:65:0;21141:4:::1;5663:15;5599:2;5663;:15;:::i;:::-;5645:34;::::0;5439:14:::1;5645:34;:::i;:::-;21131:14;;;;:::i;:::-;21119:7:::0;21108;5663:15:::1;5599:2;5663;:15;:::i;:::-;5645:34;::::0;5439:14:::1;5645:34;:::i;:::-;21098:17;;;;:::i;:::-;21097:29;;;;:::i;:::-;:49;;21089:112;;;::::0;-1:-1:-1;;;21089:112:0;;17115:2:1;21089:112:0::1;::::0;::::1;17097:21:1::0;17154:2;17134:18;;;17127:30;17193:34;17173:18;;;17166:62;17264:20;17244:18;;;17237:48;17302:19;;21089:112:0::1;16913:414:1::0;21089:112:0::1;21251:7:::0;21240;5663:15:::1;5599:2;5663;:15;:::i;:::-;5645:34;::::0;5439:14:::1;5645:34;:::i;:::-;21230:17;;;;:::i;:::-;21229:29;;;;:::i;:::-;21212:14;:46:::0;-1:-1:-1;;20999:267:0:o;29427:408::-;29552:7;:14;29533:8;:15;:33;29525:67;;;;-1:-1:-1;;;29525:67:0;;17534:2:1;29525:67:0;;;17516:21:1;17573:2;17553:18;;;17546:30;17612:23;17592:18;;;17585:51;17653:18;;29525:67:0;17332:345:1;29525:67:0;29608:7;29603:225;29625:8;:15;29621:1;:19;;;29603:225;;;29695:7;29703:1;29695:10;;;;;;;;;;:::i;:::-;;;;;;;29670:21;29680:10;-1:-1:-1;;;;;12281:16:0;12263:7;12281:16;;;:7;:16;;;;;;;12197:103;29670:21;:35;;29662:44;;;;;;29721:95;29739:10;29751:8;29760:1;29751:11;;;;;;;;;;:::i;:::-;;;;;;;5599:2;29775;:13;;;;:::i;:::-;29764:7;29772:1;29764:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;29790:5;29797;29804;29811:4;29721:17;:95::i;:::-;-1:-1:-1;29642:3:0;;;;:::i;:::-;;;;29603:225;;;;29427:408;;:::o;15564:353::-;7887:6;;-1:-1:-1;;;;;7887:6:0;7897:10;7887:20;7879:65;;;;-1:-1:-1;;;7879:65:0;;13175:2:1;7879:65:0;;;13157:21:1;;;13194:18;;;13187:30;13253:34;13233:18;;;13226:62;13305:18;;7879:65:0;12973:356:1;7879:65:0;6331:4:::1;15671:6;:21;;;;:65;;;;;6381:4;15713:7;:23;;;;15671:65;:117;;;;;6435:4;15757:11;:31;;;;15671:117;15663:126;;;::::0;::::1;;15800:9;:25:::0;;::::1;::::0;;::::1;15836:27:::0;;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;15874:35:::0;::::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;15564:353::o;14534:108::-;7887:6;;-1:-1:-1;;;;;7887:6:0;7897:10;7887:20;7879:65;;;;-1:-1:-1;;;7879:65:0;;13175:2:1;7879:65:0;;;13157:21:1;;;13194:18;;;13187:30;13253:34;13233:18;;;13226:62;13305:18;;7879:65:0;12973:356:1;7879:65:0;14603:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;14603:31:0::1;::::0;::::1;160:74:1::0;14603:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;133:18:1;;14603:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;14534:108:::0;:::o;16799:338::-;7887:6;;-1:-1:-1;;;;;7887:6:0;7897:10;7887:20;7879:65;;;;-1:-1:-1;;;7879:65:0;;13175:2:1;7879:65:0;;;13157:21:1;;;13194:18;;;13187:30;13253:34;13233:18;;;13226:62;13305:18;;7879:65:0;12973:356:1;7879:65:0;17013:16;16993;5663:15:::1;5599:2;5663;:15;:::i;:::-;5645:34;::::0;5439:14:::1;5645:34;:::i;:::-;16983:26;;;;:::i;:::-;16982:47;;;;:::i;:::-;16966:13;:63:::0;17081:13;17064;5663:15:::1;5599:2;5663;:15;:::i;:::-;5645:34;::::0;5439:14:::1;5645:34;:::i;:::-;17054:23;;;;:::i;:::-;17053:41;;;;:::i;:::-;17040:10;:54:::0;17105:17:::1;:24:::0;-1:-1:-1;;;;16799:338:0:o;19809:140::-;7887:6;;-1:-1:-1;;;;;7887:6:0;7897:10;7887:20;7879:65;;;;-1:-1:-1;;;7879:65:0;;13175:2:1;7879:65:0;;;13157:21:1;;;13194:18;;;13187:30;13253:34;13233:18;;;13226:62;13305:18;;7879:65:0;12973:356:1;7879:65:0;-1:-1:-1;;;;;19901:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;19901:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19809:140::o;10358:728::-;7887:6;;-1:-1:-1;;;;;7887:6:0;7897:10;7887:20;7879:65;;;;-1:-1:-1;;;7879:65:0;;13175:2:1;7879:65:0;;;13157:21:1;;;13194:18;;;13187:30;13253:34;13233:18;;;13226:62;13305:18;;7879:65:0;12973:356:1;7879:65:0;-1:-1:-1;;;;;10437:22:0;::::1;10429:96;;;::::0;-1:-1:-1;;;10429:96:0;;18253:2:1;10429:96:0::1;::::0;::::1;18235:21:1::0;18292:2;18272:18;;;18265:30;18331:34;18311:18;;;18304:62;18402:31;18382:18;;;18375:59;18451:19;;10429:96:0::1;18051:425:1::0;10429:96:0::1;10544:16:::0;-1:-1:-1;;;;;10544:16:0;::::1;::::0;10536:90:::1;;;::::0;-1:-1:-1;;;10536:90:0;;18253:2:1;10536:90:0::1;::::0;::::1;18235:21:1::0;18292:2;18272:18;;;18265:30;18331:34;18311:18;;;18304:62;18402:31;18382:18;;;18375:59;18451:19;;10536:90:0::1;18051:425:1::0;10536:90:0::1;10667:5;10657:6:::0;;-1:-1:-1;;;;;10657:6:0;;::::1;10637:27:::0;;:19:::1;:27;::::0;;;;;;;:35;;-1:-1:-1;;10637:35:0;;::::1;::::0;;;10708:6;;;::::1;10683:32:::0;;:24:::1;:32:::0;;;;;;:40;;;::::1;::::0;;10734:29;;::::1;::::0;;;;;;;;:36;;;::::1;-1:-1:-1::0;10734:36:0;;::::1;::::0;;;10781:34;;;;;;:41;;;;::::1;::::0;::::1;::::0;;10856:6;;;;::::1;12281:16:::0;;;;;;10846:21;10843:134:::1;;10902:6;::::0;;-1:-1:-1;;;;;10902:6:0::1;12281:16:::0;;;:7;:16;;;;;;;10884:81:::1;::::0;10902:6;10910:8;;10920:17:::1;12197:103:::0;10884:81:::1;;10843:134;10997:6;:17:::0;;-1:-1:-1;;10997:17:0::1;-1:-1:-1::0;;;;;10997:17:0;::::1;::::0;;::::1;::::0;;11030:38:::1;::::0;10997:17;;;;11030:38:::1;::::0;10997:6;11030:38:::1;10358:728:::0;:::o;20314:134::-;7887:6;;-1:-1:-1;;;;;7887:6:0;7897:10;7887:20;7879:65;;;;-1:-1:-1;;;7879:65:0;;13175:2:1;7879:65:0;;;13157:21:1;;;13194:18;;;13187:30;13253:34;13233:18;;;13226:62;13305:18;;7879:65:0;12973:356:1;7879:65:0;-1:-1:-1;;;;;20402:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;20402:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20314:134::o;18003:154::-;18104:9;;:45;;;;;-1:-1:-1;;;;;178:55:1;;;18104:45:0;;;160:74:1;18077:7:0;;18104:9;;:32;;133:18:1;;18104:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17803:192::-;17946:9;;:41;;;;;-1:-1:-1;;;;;178:55:1;;;17946:41:0;;;160:74:1;17868:13:0;;;;;;;;17946:9;;:28;;133:18:1;;17946:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17946:41:0;;;;;;;;;;;;:::i;:::-;17939:48;;;;;;;;17803:192;;;;;:::o;29843:124::-;7887:6;;-1:-1:-1;;;;;7887:6:0;7897:10;7887:20;7879:65;;;;-1:-1:-1;;;7879:65:0;;13175:2:1;7879:65:0;;;13157:21:1;;;13194:18;;;13187:30;13253:34;13233:18;;;13226:62;13305:18;;7879:65:0;12973:356:1;7879:65:0;29902:9:::1;;;;;;;;;-1:-1:-1::0;;;;;29902:9:0::1;-1:-1:-1::0;;;;;29902:14:0::1;;29924:21;29902:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;29898:62:::0;29843:124::o;19957:349::-;7887:6;;-1:-1:-1;;;;;7887:6:0;7897:10;7887:20;7879:65;;;;-1:-1:-1;;;7879:65:0;;13175:2:1;7879:65:0;;;13157:21:1;;;13194:18;;;13187:30;13253:34;13233:18;;;13226:62;13305:18;;7879:65:0;12973:356:1;7879:65:0;-1:-1:-1;;;;;20052:23:0;::::1;20070:4;20052:23;::::0;::::1;::::0;:43:::1;;-1:-1:-1::0;20089:6:0::1;::::0;-1:-1:-1;;;;;20079:16:0;;::::1;20089:6:::0;::::1;20079:16;;20052:43;20044:52;;;::::0;::::1;;-1:-1:-1::0;;;;;20107:32:0;::::1;;::::0;;;:24:::1;:32;::::0;;;;:42;;-1:-1:-1;;20107:42:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;20160:139:::1;;20188:9;::::0;:26:::1;::::0;;;;-1:-1:-1;;;;;20407:55:1;;;20188:26:0::1;::::0;::::1;20389:74:1::0;20188:9:0::1;20479:18:1::0;;;20472:34;20188:9:0;;::::1;::::0;:15:::1;::::0;20362:18:1;;20188:26:0::1;20207:305:1::0;20160:139:0::1;20247:9;::::0;-1:-1:-1;;;;;20271:15:0;;::::1;20247:9;20271:15:::0;;;20247:9;20271:15:::1;::::0;;;;;;;20247:40;;;;;::::1;::::0;::::1;20389:74:1::0;;;;20479:18;;;20472:34;20247:9:0;::::1;::::0;:15:::1;::::0;20362:18:1;;20247:40:0::1;20207:305:1::0;20160:139:0::1;19957:349:::0;;:::o;11094:245::-;7887:6;;-1:-1:-1;;;;;7887:6:0;7897:10;7887:20;7879:65;;;;-1:-1:-1;;;7879:65:0;;13175:2:1;7879:65:0;;;13157:21:1;;;13194:18;;;13187:30;13253:34;13233:18;;;13226:62;13305:18;;7879:65:0;12973:356:1;7879:65:0;11189:5:::1;11179:6:::0;;-1:-1:-1;;;;;11179:6:0;;::::1;11159:27:::0;;:19:::1;:27;::::0;;;;;;;:35;;-1:-1:-1;;11159:35:0;;::::1;::::0;;;11230:6;;;;::::1;11205:32:::0;;:24:::1;:32:::0;;;;;;:40;;;;::::1;::::0;;;11256:19;;-1:-1:-1;;11256:19:0::1;::::0;;11291:40;11189:5;;11291:40:::1;::::0;11189:5;;11291:40:::1;11094:245::o:0;16321:269::-;7887:6;;-1:-1:-1;;;;;7887:6:0;7897:10;7887:20;7879:65;;;;-1:-1:-1;;;7879:65:0;;13175:2:1;7879:65:0;;;13157:21:1;;;13194:18;;;13187:30;13253:34;13233:18;;;13226:62;13305:18;;7879:65:0;12973:356:1;7879:65:0;16446:11:::1;:42:::0;;-1:-1:-1;;;;;16446:42:0;;::::1;-1:-1:-1::0;;16446:42:0;;::::1;;::::0;;;16499:16;:32;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;16542:20;:40;;;;;::::1;::::0;::::1;;::::0;;16321:269::o;18871:516::-;7887:6;;-1:-1:-1;;;;;7887:6:0;7897:10;7887:20;7879:65;;;;-1:-1:-1;;;7879:65:0;;13175:2:1;7879:65:0;;;13157:21:1;;;13194:18;;;13187:30;13253:34;13233:18;;;13226:62;13305:18;;7879:65:0;12973:356:1;7879:65:0;18952:16;::::1;;18963:5;18952:16:::0;18948:432:::1;;-1:-1:-1::0;;;;;18985:13:0;;::::1;19001:5;18985:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;18985:21:0::1;::::0;;19021:9:::1;::::0;:32;;;;;::::1;::::0;::::1;20987:74:1::0;;;;21077:18;;;21070:50;;;;19021:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;20960:18:1;;19021:32:0::1;20819:307:1::0;18948:432:0::1;19090:17;::::0;:22;19086:152:::1;;19179:6;19159:17;;19141:15;:35;;;;:::i;:::-;:44;19133:89;;;::::0;-1:-1:-1;;;19133:89:0;;21333:2:1;19133:89:0::1;::::0;::::1;21315:21:1::0;;;21352:18;;;21345:30;21411:34;21391:18;;;21384:62;21463:18;;19133:89:0::1;21131:356:1::0;19133:89:0::1;-1:-1:-1::0;;;;;19252:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;19252:20:0::1;19268:4;19252:20:::0;;::::1;::::0;;;19307:15:::1;19287:17;:35:::0;19337:9:::1;::::0;:31;;;;;::::1;::::0;::::1;20987:74:1::0;;;;21077:18;;;21070:50;19337:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;20960:18:1;;19337:31:0::1;20819:307:1::0;13020:173:0;13084:4;7887:6;;-1:-1:-1;;;;;7887:6:0;7897:10;7887:20;7879:65;;;;-1:-1:-1;;;7879:65:0;;13175:2:1;7879:65:0;;;13157:21:1;;;13194:18;;;13187:30;13253:34;13233:18;;;13226:62;13305:18;;7879:65:0;12973:356:1;7879:65:0;13133:9:::1;::::0;13101:62:::1;::::0;13118:4:::1;::::0;-1:-1:-1;;;;;13133:9:0::1;-1:-1:-1::0;;13101:8:0::1;:62::i;:::-;-1:-1:-1::0;13181:4:0::1;13020:173:::0;:::o;14935:621::-;7887:6;;-1:-1:-1;;;;;7887:6:0;7897:10;7887:20;7879:65;;;;-1:-1:-1;;;7879:65:0;;13175:2:1;7879:65:0;;;13157:21:1;;;13194:18;;;13187:30;13253:34;13233:18;;;13226:62;13305:18;;7879:65:0;12973:356:1;7879:65:0;14997:14:::1;::::0;::::1;::::0;::::1;;;14996:15;14988:52;;;::::0;-1:-1:-1;;;14988:52:0;;21694:2:1;14988:52:0::1;::::0;::::1;21676:21:1::0;21733:2;21713:18;;;21706:30;21772:26;21752:18;;;21745:54;21816:18;;14988:52:0::1;21492:348:1::0;14988:52:0::1;15059:16;::::0;;;::::1;;;15051:53;;;::::0;-1:-1:-1;;;15051:53:0;;22047:2:1;15051:53:0::1;::::0;::::1;22029:21:1::0;22086:2;22066:18;;;22059:30;22125:26;22105:18;;;22098:54;22169:18;;15051:53:0::1;21845:348:1::0;15051:53:0::1;15126:9;::::0;;;::::1;-1:-1:-1::0;;;;;15126:9:0::1;15115:99;;15166:9;:36:::0;;;::::1;15196:4;15166:36:::0;::::1;;::::0;;15115:99:::1;15228:9;::::0;15248:6:::1;::::0;15228:85:::1;::::0;;;;-1:-1:-1;;;;;15248:6:0;;::::1;15228:85;::::0;::::1;22421:74:1::0;22543:10;15263:12:0::1;22531:23:1::0;22511:18;;;22504:51;22603:18;15285:15:0::1;22591:31:1::0;22571:18;;;22564:59;5599:2:0::1;22639:18:1::0;;;22632:45;15228:9:0;;;::::1;;::::0;:19:::1;::::0;22393::1;;15228:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;15224:101:::0;15339:9:::1;;;;;;;;;-1:-1:-1::0;;;;;15339:9:0::1;-1:-1:-1::0;;;;;15339:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;15335:38:::0;15383:14:::1;:21:::0;;15415;;;;;;15474:6:::1;::::0;-1:-1:-1;;;;;15474:6:0::1;-1:-1:-1::0;12281:16:0;;;-1:-1:-1;12281:16:0;;;;;;15489:5:::1;::::0;15464:21:::1;::::0;15484:1:::1;15464:21;:::i;:::-;15463:31;;;;:::i;:::-;15447:13;:47:::0;15529:6:::1;::::0;-1:-1:-1;;;;;15529:6:0::1;12263:7:::0;12281:16;;;:7;:16;;;;;;15544:4:::1;::::0;15519:21:::1;::::0;15539:1:::1;15519:21;:::i;:::-;15518:30;;;;:::i;:::-;15505:10;:43:::0;14935:621::o;17569:100::-;17620:9;;:41;;;;;17650:10;17620:41;;;160:74:1;-1:-1:-1;;;;;17620:9:0;;;;:29;;133:18:1;;17620:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17569:100::o;13201:152::-;13281:4;13305:40;13315:10;13327:9;13338:6;13305:9;:40::i;:::-;13298:47;13201:152;-1:-1:-1;;;13201:152:0:o;18165:150::-;18267:9;;:40;;;;;-1:-1:-1;;;;;178:55:1;;;18267:40:0;;;160:74:1;18240:7:0;;18267:9;;:27;;133:18:1;;18267:40:0;14:226:1;21274:157:0;21316:7;;21372:13;5599:2;21372;:13;:::i;:::-;21353:15;;:33;;;;:::i;:::-;21408:13;5599:2;21408;:13;:::i;:::-;21388:16;;:34;;;;:::i;:::-;21345:78;;;;21274:157;;:::o;20456:535::-;7887:6;;-1:-1:-1;;;;;7887:6:0;7897:10;7887:20;7879:65;;;;-1:-1:-1;;;7879:65:0;;13175:2:1;7879:65:0;;;13157:21:1;;;13194:18;;;13187:30;13253:34;13233:18;;;13226:62;13305:18;;7879:65:0;12973:356:1;7879:65:0;20651:4:::1;5663:15;5599:2;5663;:15;:::i;:::-;5645:34;::::0;5439:14:::1;5645:34;:::i;:::-;20641:14;;;;:::i;:::-;20626:10:::0;20612;5663:15:::1;5599:2;5663;:15;:::i;:::-;5645:34;::::0;5439:14:::1;5645:34;:::i;:::-;20602:20;;;;:::i;:::-;20601:35;;;;:::i;:::-;:55;;20593:123;;;::::0;-1:-1:-1;;;20593:123:0;;22890:2:1;20593:123:0::1;::::0;::::1;22872:21:1::0;22929:2;22909:18;;;22902:30;22968:34;22948:18;;;22941:62;23039:25;23019:18;;;23012:53;23082:19;;20593:123:0::1;22688:419:1::0;20593:123:0::1;20787:4;5663:15;5599:2;5663;:15;:::i;:::-;5645:34;::::0;5439:14:::1;5645:34;:::i;:::-;20777:14;;;;:::i;:::-;20761:11:::0;20746;5663:15:::1;5599:2;5663;:15;:::i;:::-;5645:34;::::0;5439:14:::1;5645:34;:::i;:::-;20736:21;;;;:::i;:::-;20735:37;;;;:::i;:::-;:57;;20727:125;;;::::0;-1:-1:-1;;;20727:125:0;;22890:2:1;20727:125:0::1;::::0;::::1;22872:21:1::0;22929:2;22909:18;;;22902:30;22968:34;22948:18;;;22941:62;23039:25;23019:18;;;23012:53;23082:19;;20727:125:0::1;22688:419:1::0;20727:125:0::1;20906:10:::0;20892;5663:15:::1;5599:2;5663;:15;:::i;:::-;5645:34;::::0;5439:14:::1;5645:34;:::i;:::-;20882:20;;;;:::i;:::-;20881:35;;;;:::i;:::-;20863:15;:53:::0;20972:11;20957;5663:15:::1;5599:2;5663;:15;:::i;:::-;5645:34;::::0;5439:14:::1;5645:34;:::i;:::-;20947:21;;;;:::i;:::-;20946:37;;;;:::i;:::-;20927:16;:56:::0;-1:-1:-1;;;;20456:535:0:o;14650:118::-;7887:6;;-1:-1:-1;;;;;7887:6:0;7897:10;7887:20;7879:65;;;;-1:-1:-1;;;7879:65:0;;13175:2:1;7879:65:0;;;13157:21:1;;;13194:18;;;13187:30;13253:34;13233:18;;;13226:62;13305:18;;7879:65:0;12973:356:1;7879:65:0;14724:9:::1;::::0;:36:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;14724:36:0::1;::::0;::::1;160:74:1::0;14724:9:0;;;::::1;::::0;;::::1;::::0;:27:::1;::::0;133:18:1;;14724:36:0::1;14:226:1::0;17430:131:0;7887:6;;-1:-1:-1;;;;;7887:6:0;7897:10;7887:20;7879:65;;;;-1:-1:-1;;;7879:65:0;;13175:2:1;7879:65:0;;;13157:21:1;;;13194:18;;;13187:30;13253:34;13233:18;;;13226:62;13305:18;;7879:65:0;12973:356:1;7879:65:0;17517:6:::1;17511:3;:12;17503:21;;;::::0;::::1;;17535:12;:18:::0;17430:131::o;16598:193::-;7887:6;;-1:-1:-1;;;;;7887:6:0;7897:10;7887:20;7879:65;;;;-1:-1:-1;;;7879:65:0;;13175:2:1;7879:65:0;;;13157:21:1;;;13194:18;;;13187:30;13253:34;13233:18;;;13226:62;13305:18;;7879:65:0;12973:356:1;7879:65:0;16704:19:::1;:30:::0;;;::::1;;::::0;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;;16745:14:::1;:38:::0;;-1:-1:-1;;16745:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16598:193::o;18323:540::-;7887:6;;-1:-1:-1;;;;;7887:6:0;7897:10;7887:20;7879:65;;;;-1:-1:-1;;;7879:65:0;;13175:2:1;7879:65:0;;;13157:21:1;;;13194:18;;;13187:30;13253:34;13233:18;;;13226:62;13305:18;;7879:65:0;12973:356:1;7879:65:0;18392:20:::1;18425:9;18392:43;;18446:16;18476:10;-1:-1:-1::0;;;;;18476:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18465:40:0::1;;18514:4;18521:10;-1:-1:-1::0;;;;;18521:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18465:74;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;23621:15:1;;;18465:74:0::1;::::0;::::1;23603:34:1::0;23673:15;;23653:18;;;23646:43;23515:18;;18465:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18446:93:::0;-1:-1:-1;;;;;;18554:22:0;::::1;18550:200;;18613:10;-1:-1:-1::0;;;;;18613:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18602:43:0::1;;18654:4;18661:10;-1:-1:-1::0;;;;;18661:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18602:77;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;23621:15:1;;;18602:77:0::1;::::0;::::1;23603:34:1::0;23673:15;;23653:18;;;23646:43;23515:18;;18602:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18593:6;:86:::0;;-1:-1:-1;;18593:86:0::1;-1:-1:-1::0;;;;;18593:86:0;;;::::1;::::0;;;::::1;::::0;;18550:200:::1;;;18721:6;:17:::0;;-1:-1:-1;;18721:17:0::1;-1:-1:-1::0;;;;;18721:17:0;::::1;;::::0;;18550:200:::1;18760:9;:22:::0;;-1:-1:-1;;18760:22:0::1;-1:-1:-1::0;;;;;18760:22:0;::::1;::::0;;::::1;::::0;;;18793:62:::1;::::0;18810:4:::1;::::0;-1:-1:-1;;18793:8:0::1;:62::i;13675:193::-:0;7887:6;;-1:-1:-1;;;;;7887:6:0;7897:10;7887:20;7879:65;;;;-1:-1:-1;;;7879:65:0;;13175:2:1;7879:65:0;;;13157:21:1;;;13194:18;;;13187:30;13253:34;13233:18;;;13226:62;13305:18;;7879:65:0;12973:356:1;7879:65:0;13765:9:::1;::::0;:47:::1;::::0;;;;-1:-1:-1;;;;;21005:55:1;;;13765:47:0::1;::::0;::::1;20987:74:1::0;21104:14;;21097:22;21077:18;;;21070:50;13765:9:0;;;::::1;::::0;;::::1;::::0;:29:::1;::::0;20960:18:1;;13765:47:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;13823:37;13843:7;13852;13823:19;:37::i;15925:388::-:0;7887:6;;-1:-1:-1;;;;;7887:6:0;7897:10;7887:20;7879:65;;;;-1:-1:-1;;;7879:65:0;;13175:2:1;7879:65:0;;;13157:21:1;;;13194:18;;;13187:30;13253:34;13233:18;;;13226:62;13305:18;;7879:65:0;12973:356:1;7879:65:0;16056:7:::1;:25:::0;;::::1;::::0;;::::1;16092:29:::0;;;;;;;;;;;::::1;;;16172:19:::0;;16132:29;;;::::1;;16172:19:::0;;;;;;::::1;;;16202:27:::0;::::1;::::0;;;::::1;::::0;;;::::1;;::::0;;16172:19;16202:27;16132:29;16256:19:::1;16092:29:::0;16056:25;16256:19:::1;:::i;:::-;:31;;;;:::i;:::-;:42;;;;:::i;:::-;:49;;;;:::i;:::-;16240:7;:65:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;15925:388:0:o;17677:118::-;17756:9;;:31;;;;;;;;17729:7;;-1:-1:-1;;;;;17756:9:0;;:29;;:31;;;;;;;;;;;;;;:9;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14056:125::-;14141:9;;:32;;;;;-1:-1:-1;;;;;178:55:1;;;14141:32:0;;;160:74:1;14117:4:0;;14141:9;;;;;:23;;133:18:1;;14141:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21924:2304::-;22003:4;-1:-1:-1;;;;;22028:18:0;;22020:68;;;;-1:-1:-1;;;22020:68:0;;24381:2:1;22020:68:0;;;24363:21:1;24420:2;24400:18;;;24393:30;24459:34;24439:18;;;24432:62;24530:7;24510:18;;;24503:35;24555:19;;22020:68:0;24179:401:1;22020:68:0;-1:-1:-1;;;;;22107:16:0;;22099:64;;;;-1:-1:-1;;;22099:64:0;;24787:2:1;22099:64:0;;;24769:21:1;24826:2;24806:18;;;24799:30;24865:34;24845:18;;;24838:62;24936:5;24916:18;;;24909:33;24959:19;;22099:64:0;24585:399:1;22099:64:0;22191:1;22182:6;:10;22174:64;;;;-1:-1:-1;;;22174:64:0;;25191:2:1;22174:64:0;;;25173:21:1;25230:2;25210:18;;;25203:30;25269:34;25249:18;;;25242:62;25340:11;25320:18;;;25313:39;25369:19;;22174:64:0;24989:405:1;22174:64:0;-1:-1:-1;;;;;22337:13:0;;22249:8;22337:13;;;:7;:13;;;;;;22249:8;;;;22337:13;;22333:162;;;22373:4;22367:10;;22333:162;;;-1:-1:-1;;;;;22399:11:0;;;;;;:7;:11;;;;;;;;22395:100;;;22434:4;22427:11;;22395:100;;;-1:-1:-1;22479:4:0;22395:100;22508:20;22519:4;22525:2;22508:10;:20::i;:::-;22505:872;;;22549:14;;;;;;;22545:89;;22584:34;;-1:-1:-1;;;22584:34:0;;25601:2:1;22584:34:0;;;25583:21:1;25640:2;25620:18;;;25613:30;25679:26;25659:18;;;25652:54;25723:18;;22584:34:0;25399:348:1;22545:89:0;22651:3;22648:462;;;-1:-1:-1;;;;;22679:27:0;;;;;;:21;:27;;;;;;;;22678:28;:58;;;;-1:-1:-1;;;;;;22711:25:0;;;;;;:21;:25;;;;;;;;22710:26;22678:58;22674:185;;;22779:15;;22769:6;:25;;22761:78;;;;-1:-1:-1;;;22761:78:0;;25954:2:1;22761:78:0;;;25936:21:1;25993:2;25973:18;;;25966:30;26032:34;26012:18;;;26005:62;26103:10;26083:18;;;26076:38;26131:19;;22761:78:0;25752:404:1;22761:78:0;22648:462;;;22884:4;22880:230;;;-1:-1:-1;;;;;22914:27:0;;;;;;:21;:27;;;;;;;;22913:28;:58;;;;-1:-1:-1;;;;;;22946:25:0;;;;;;:21;:25;;;;;;;;22945:26;22913:58;22909:186;;;23014:16;;23004:6;:26;;22996:79;;;;-1:-1:-1;;;22996:79:0;;25954:2:1;22996:79:0;;;25936:21:1;25993:2;25973:18;;;25966:30;26032:34;26012:18;;;26005:62;26103:10;26083:18;;;26076:38;26131:19;;22996:79:0;25752:404:1;22996:79:0;23141:9;;-1:-1:-1;;;;;23127:24:0;;;23141:9;;23127:24;;;;:33;;;23156:4;23155:5;23127:33;23124:242;;;-1:-1:-1;;;;;23186:25:0;;;;;;:21;:25;;;;;;;;23181:170;;23270:14;;23260:6;23244:13;23254:2;-1:-1:-1;;;;;12281:16:0;12263:7;12281:16;;;:7;:16;;;;;;;12197:103;23244:13;:22;;;;:::i;:::-;:40;;23236:95;;;;-1:-1:-1;;;23236:95:0;;26496:2:1;23236:95:0;;;26478:21:1;26535:2;26515:18;;;26508:30;26574:34;26554:18;;;26547:62;26645:12;26625:18;;;26618:40;26675:19;;23236:95:0;26294:406:1;23236:95:0;-1:-1:-1;;;;;23432:25:0;;23389:12;23432:25;;;:19;:25;;;;;;23404:4;;23432:25;;;:52;;-1:-1:-1;;;;;;23461:23:0;;;;;;:19;:23;;;;;;;;23432:52;23429:98;;;-1:-1:-1;23510:5:0;23429:98;23543:4;23539:599;;;23569:6;;;;23568:7;:47;;;;-1:-1:-1;23596:19:0;;;;;;;23568:47;23564:557;;;23685:15;23665:17;;23654:8;;:28;;;;:::i;:::-;:46;23650:456;;;23774:4;23725:28;12281:16;;;:7;:16;;;;;;23831:13;;23807:37;;23803:284;;23900:10;;23876:20;:34;23873:77;;-1:-1:-1;23937:10:0;;23873:77;23976:34;23989:20;23976:12;:34::i;:::-;24048:15;24037:8;:26;23803:284;23702:404;23650:456;24158:62;24176:4;24182:2;24186:6;24194:7;24203:3;24208:4;24214:5;24158:17;:62::i;:::-;24151:69;21924:2304;-1:-1:-1;;;;;;;;21924:2304:0:o;24236:1054::-;24392:16;;24370:4;;24392:16;;;;;24387:221;;24425:28;24444:4;24450:2;24425:18;:28::i;:::-;24473:16;;;;;;;24472:17;:41;;;;;24493:20;24504:4;24510:2;24493:10;:20::i;:::-;24468:129;;;24534:47;;-1:-1:-1;;;24534:47:0;;26907:2:1;24534:47:0;;;26889:21:1;26946:2;26926:18;;;26919:30;26985:34;26965:18;;;26958:62;27056:7;27036:18;;;27029:35;27081:19;;24534:47:0;26705:401:1;24468:129:0;24623:20;24634:4;24640:2;24623:10;:20::i;:::-;24620:313;;;24691:9;;:37;;;;;-1:-1:-1;;;;;27392:15:1;;;24691:37:0;;;27374:34:1;27444:15;;;27424:18;;;27417:43;27476:18;;;27469:34;;;24660:12:0;;24691:9;;;;;:19;;27286:18:1;;24691:37:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;24691:37:0;;;;;;;;-1:-1:-1;;24691:37:0;;;;;;;;;;;;:::i;:::-;;;24687:163;;24826:8;;;24687:163;24779:5;-1:-1:-1;24870:7:0;24866:56;;24898:8;;;24866:56;24645:288;24620:313;-1:-1:-1;;;;;24945:13:0;;;;;;:7;:13;;;;;:23;;24962:6;;24945:13;:23;;24962:6;;24945:23;:::i;:::-;;;;-1:-1:-1;25006:6:0;;-1:-1:-1;25025:98:0;;;;25070:41;25080:4;25086:6;25094:3;25099:4;25105:5;25070:9;:41::i;:::-;25053:58;;25025:98;-1:-1:-1;;;;;25137:11:0;;;;;;:7;:11;;;;;:29;;25152:14;;25137:11;:29;;25152:14;;25137:29;:::i;:::-;;;;-1:-1:-1;25179:29:0;;-1:-1:-1;25199:4:0;25205:2;25179:19;:29::i;:::-;25241:2;-1:-1:-1;;;;;25226:34:0;25235:4;-1:-1:-1;;;;;25226:34:0;;25245:14;25226:34;;;;391:25:1;;379:2;364:18;;245:177;25226:34:0;;;;;;;;-1:-1:-1;25278:4:0;;24236:1054;-1:-1:-1;;;;;;;;24236:1054:0:o;12671:341::-;-1:-1:-1;;;;;12765:20:0;;12757:69;;;;-1:-1:-1;;;12757:69:0;;27716:2:1;12757:69:0;;;27698:21:1;27755:2;27735:18;;;27728:30;27794:34;27774:18;;;27767:62;27865:6;27845:18;;;27838:34;27889:19;;12757:69:0;27514:400:1;12757:69:0;-1:-1:-1;;;;;12845:21:0;;12837:68;;;;-1:-1:-1;;;12837:68:0;;28121:2:1;12837:68:0;;;28103:21:1;28160:2;28140:18;;;28133:30;28199:34;28179:18;;;28172:62;28270:4;28250:18;;;28243:32;28292:19;;12837:68:0;27919:398:1;12837:68:0;-1:-1:-1;;;;;12918:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;12971:33;;391:25:1;;;12971:33:0;;364:18:1;12971:33:0;;;;;;;12671:341;;;:::o;21559:357::-;21627:4;21659:6;;-1:-1:-1;;;;;21651:14:0;;;21659:6;;21651:14;;;;:43;;-1:-1:-1;21688:6:0;;-1:-1:-1;;;;;21682:12:0;;;21688:6;;21682:12;;21651:43;:79;;;;-1:-1:-1;21724:6:0;;-1:-1:-1;;;;;21724:6:0;21711:9;:19;;21651:79;:118;;;;-1:-1:-1;;;;;;21748:21:0;;;;;;:17;:21;;;;;;;;21747:22;21651:118;:159;;;;-1:-1:-1;;;;;;21787:23:0;;;;;;:17;:23;;;;;;;;21786:24;21651:159;:186;;;;-1:-1:-1;;;;;;21827:10:0;;6588:42;21827:10;;21651:186;:219;;;;-1:-1:-1;;;;;;21854:16:0;;;;21651:219;:257;;;;-1:-1:-1;;;;;;;;21887:21:0;21903:4;21887:21;;;21559:357::o;26616:2165::-;7781:6;:13;;-1:-1:-1;;7781:13:0;7790:4;7781:13;;;26697:30:::1;::::0;;::::1;::::0;::::1;::::0;;26720:7:::1;26697:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;;::::1;::::0;;;;;;7781:6;26742:17;26738:56:::1;;26776:7;;;26738:56;26837:4;26817:26;::::0;;;:11:::1;:26;::::0;;;;;;;26852:9:::1;::::0;-1:-1:-1;;;;;26852:9:0::1;26817:46:::0;;;;;;;;-1:-1:-1;;26817:67:0::1;26814:165;;26921:4;26901:26;::::0;;;:11:::1;:26;::::0;;;;;;;26936:9:::1;::::0;-1:-1:-1;;;;;26936:9:0::1;26901:46:::0;;;;;;;-1:-1:-1;;26901:66:0;;26814:165:::1;26991:17;27074:1;27057:6;:12;;;27012:58;;27036:6;:16;;;27013:39;;:20;:39;;;;:::i;:::-;27012:58;;;;:::i;:::-;27011:64;;;;:::i;:::-;26991:84:::0;-1:-1:-1;27086:15:0::1;27104:32;26991:84:::0;27104:20;:32:::1;:::i;:::-;27173:16;::::0;;27187:1:::1;27173:16:::0;;;;;::::1;::::0;;27086:50;;-1:-1:-1;27149:21:0::1;::::0;27173:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;27173:16:0::1;27149:40;;27218:4;27200;27205:1;27200:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27200:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;27244:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;27200:7;;27244:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27234:4;27239:1;27234:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27234:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;27273:9:::1;::::0;:186:::1;::::0;;;;:9;::::1;::::0;:60:::1;::::0;:186:::1;::::0;27348:7;;27273:9:::1;::::0;27386:4;;27413::::1;::::0;27433:15:::1;::::0;27273:186:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;27493:21:0::1;::::0;-1:-1:-1;27472:18:0::1;::::0;-1:-1:-1;27579:7:0;;-1:-1:-1;27553:22:0::1;27566:9:::0;27493:21;27553:22:::1;:::i;:::-;27552:34;;;;:::i;:::-;27525:61:::0;-1:-1:-1;27603:13:0;;27599:328:::1;;27633:9;::::0;:222:::1;::::0;;;;27710:4:::1;27633:222;::::0;::::1;29296:34:1::0;29346:18;;;29339:34;;;27633:9:0::1;29389:18:1::0;;;29382:34;;;29432:18;;;29425:34;6588:42:0::1;29475:19:1::0;;;29468:44;27825:15:0::1;29528:19:1::0;;;29521:35;-1:-1:-1;;;;;27633:9:0;;::::1;::::0;:25:::1;::::0;27666:16;;29207:19:1;;27633:222:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;27875:40:0::1;::::0;;10773:25:1;;;10829:2;10814:18;;10807:34;;;27875:40:0::1;::::0;-1:-1:-1;10746:18:1;27875:40:0::1;;;;;;;27599:328;27939:30;27953:16:::0;27939:30;::::1;:::i;:::-;;;27996:6;:16;;;27980:6;:12;;:32;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;28080:12:::1;::::0;::::1;::::0;28062:14;;28023:22:::1;::::0;-1:-1:-1;28048:44:0;;::::1;::::0;28049:27:::1;::::0;::::1;:10:::0;:27:::1;:::i;:::-;28048:44;;;;:::i;:::-;28023:69;;28103:23;28162:6;:12;;;28129:45;;28143:6;:15;;;28130:28;;:10;:28;;;;:::i;:::-;28129:45;;;;:::i;:::-;28103:71;;28185:19;28236:6;:12;;;28207:41;;28221:6;:11;;;28208:24;;:10;:24;;;;:::i;:::-;28207:41;;;;:::i;:::-;28185:63:::0;-1:-1:-1;28259:24:0::1;28185:63:::0;28300:32:::1;28317:15:::0;28300:14;:32:::1;:::i;:::-;:46;;;;:::i;:::-;28286:61;::::0;:10;:61:::1;:::i;:::-;28364:14:::0;;28259:88;;-1:-1:-1;28364:18:0::1;;::::0;28360:105:::1;;28403:9;;;;;;;;;-1:-1:-1::0;;;;;28403:9:0::1;-1:-1:-1::0;;;;;28403:14:0::1;;28425;28403:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;28399:55:::0;::::1;28478:16;::::0;::::1;::::0;:20:::1;;::::0;28475:99:::1;;28514:11;:21:::0;:48:::1;::::0;-1:-1:-1;;;;;28514:21:0;;::::1;::::0;:48;::::1;;;::::0;28545:16;;28514:21:::1;:48:::0;:21;:48;28545:16;28514:21;:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;28475:99;28587:15;::::0;::::1;::::0;:19:::1;;::::0;28584:96:::1;;28622:20:::0;;:46:::1;::::0;-1:-1:-1;;;;;28622:20:0;;::::1;::::0;:46;::::1;;;::::0;28652:15;;28622:20:::1;:46:::0;:20;:46;28652:15;28622:20;:46;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;28584:96;28693:11;::::0;::::1;::::0;:15:::1;;::::0;28690:84:::1;;28724:16:::0;;:38:::1;::::0;-1:-1:-1;;;;;28724:16:0;;::::1;::::0;:38;::::1;;;::::0;28750:11;;28724:16:::1;:38:::0;:16;:38;28750:11;28724:16;:38;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;28690:84;26686:2095;;;;;;;;;;7805:1;-1:-1:-1::0;7817:6:0;:14;;-1:-1:-1;;7817:14:0;;;26616:2165::o;28789:630::-;28871:16;;;;;;;28870:17;28862:65;;;;-1:-1:-1;;;28862:65:0;;30302:2:1;28862:65:0;;;30284:21:1;30341:2;30321:18;;;30314:30;30380:34;30360:18;;;30353:62;30451:5;30431:18;;;30424:33;30474:19;;28862:65:0;30100:399:1;28862:65:0;28943:20;28954:4;28960:2;28943:10;:20::i;:::-;28942:21;:37;;;;-1:-1:-1;28973:6:0;;-1:-1:-1;;;;;28967:12:0;;;28973:6;;28967:12;28942:37;28938:474;;;-1:-1:-1;;;;;28996:23:0;;;;;;;:17;:23;;;;;:30;;-1:-1:-1;;28996:30:0;29022:4;28996:30;;;29041:16;:23;;;;;;;;;;29090:9;;;;29079:108;;29135:9;:36;;;;29165:4;29135:36;;;;;29079:108;29212:9;;-1:-1:-1;;;;;29212:9:0;29201:107;;29258:9;:34;;-1:-1:-1;;29258:34:0;29286:4;29258:34;;;29201:107;29322:19;:26;;;;;;;;29368:32;;-1:-1:-1;4918:41:1;;29368:32:0;;4906:2:1;4891:18;29368:32:0;;;;;;;28789:630;;:::o;25961:647::-;26061:7;26081:18;26114:3;26110:205;;;-1:-1:-1;26147:9:0;:16;;;26110:205;;;26185:4;26181:134;;;-1:-1:-1;26219:9:0;:17;;;;;;26181:134;;;-1:-1:-1;26282:9:0;:21;;;;;;26181:134;26331:10;26345:1;26331:15;26327:61;;26370:6;26363:13;;;;;26327:61;26400:17;6482:5;26420:19;26429:10;26420:6;:19;:::i;:::-;:38;;;;:::i;:::-;26487:4;26471:22;;;;:7;:22;;;;;:35;;26400:58;;-1:-1:-1;26400:58:0;;26471:22;;;:35;;26400:58;;26471:35;:::i;:::-;;;;-1:-1:-1;;26522:40:0;;391:25:1;;;26545:4:0;;-1:-1:-1;;;;;26522:40:0;;;;;379:2:1;364:18;26522:40:0;;;;;;;26582:18;26591:9;26582:6;:18;:::i;:::-;26575:25;;;;25961:647;;;;;;;;:::o;25298:419::-;-1:-1:-1;;;;;25378:30:0;;;;;;:24;:30;;;;;;;;25373:115;;25429:9;;-1:-1:-1;;;;;25451:13:0;;;25429:9;25451:13;;;25429:9;25451:13;;;;;;;;25429:36;;;;;;;;20389:74:1;;;;20479:18;;;20472:34;25429:9:0;;;:15;;20362:18:1;;25429:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25425:52;;-1:-1:-1;;;;;25503:28:0;;;;;;:24;:28;;;;;;;;25498:109;;25552:9;;-1:-1:-1;;;;;25572:11:0;;;25552:9;25572:11;;;25552:9;25572:11;;;;;;;;25552:32;;;;;;;;20389:74:1;;;;20479:18;;;20472:34;25552:9:0;;;:15;;20362:18:1;;25552:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25548:48;;25621:14;;;;25617:93;;;25656:9;;25674:12;;25656:31;;;;;-1:-1:-1;;;;;25656:9:0;;;;:17;;:31;;;;391:25:1;;;379:2;364:18;;245:177;25656:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25652:47;;;25298:419;;:::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;931:184::-;983:77;980:1;973:88;1080:4;1077:1;1070:15;1104:4;1101:1;1094:15;1120:334;1191:2;1185:9;1247:2;1237:13;;-1:-1:-1;;1233:86:1;1221:99;;1350:18;1335:34;;1371:22;;;1332:62;1329:88;;;1397:18;;:::i;:::-;1433:2;1426:22;1120:334;;-1:-1:-1;1120:334:1:o;1459:183::-;1519:4;1552:18;1544:6;1541:30;1538:56;;;1574:18;;:::i;:::-;-1:-1:-1;1619:1:1;1615:14;1631:4;1611:25;;1459:183::o;1647:154::-;-1:-1:-1;;;;;1726:5:1;1722:54;1715:5;1712:65;1702:93;;1791:1;1788;1781:12;1806:737;1860:5;1913:3;1906:4;1898:6;1894:17;1890:27;1880:55;;1931:1;1928;1921:12;1880:55;1967:6;1954:20;1993:4;2017:60;2033:43;2073:2;2033:43;:::i;:::-;2017:60;:::i;:::-;2111:15;;;2197:1;2193:10;;;;2181:23;;2177:32;;;2142:12;;;;2221:15;;;2218:35;;;2249:1;2246;2239:12;2218:35;2285:2;2277:6;2273:15;2297:217;2313:6;2308:3;2305:15;2297:217;;;2393:3;2380:17;2410:31;2435:5;2410:31;:::i;:::-;2454:18;;2492:12;;;;2330;;2297:217;;;-1:-1:-1;2532:5:1;1806:737;-1:-1:-1;;;;;;1806:737:1:o;2548:477::-;2638:6;2646;2699:2;2687:9;2678:7;2674:23;2670:32;2667:52;;;2715:1;2712;2705:12;2667:52;2755:9;2742:23;2788:18;2780:6;2777:30;2774:50;;;2820:1;2817;2810:12;2774:50;2843:61;2896:7;2887:6;2876:9;2872:22;2843:61;:::i;:::-;2833:71;;;2954:2;2943:9;2939:18;2926:32;2967:28;2989:5;2967:28;:::i;3400:258::-;3472:1;3482:113;3496:6;3493:1;3490:13;3482:113;;;3572:11;;;3566:18;3553:11;;;3546:39;3518:2;3511:10;3482:113;;;3613:6;3610:1;3607:13;3604:48;;;-1:-1:-1;;3648:1:1;3630:16;;3623:27;3400:258::o;3663:317::-;3705:3;3743:5;3737:12;3770:6;3765:3;3758:19;3786:63;3842:6;3835:4;3830:3;3826:14;3819:4;3812:5;3808:16;3786:63;:::i;:::-;3894:2;3882:15;-1:-1:-1;;3878:88:1;3869:98;;;;3969:4;3865:109;;3663:317;-1:-1:-1;;3663:317:1:o;3985:220::-;4134:2;4123:9;4116:21;4097:4;4154:45;4195:2;4184:9;4180:18;4172:6;4154:45;:::i;4458:315::-;4526:6;4534;4587:2;4575:9;4566:7;4562:23;4558:32;4555:52;;;4603:1;4600;4593:12;4555:52;4642:9;4629:23;4661:31;4686:5;4661:31;:::i;:::-;4711:5;4763:2;4748:18;;;;4735:32;;-1:-1:-1;;;4458:315:1:o;4970:316::-;5047:6;5055;5063;5116:2;5104:9;5095:7;5091:23;5087:32;5084:52;;;5132:1;5129;5122:12;5084:52;-1:-1:-1;;5155:23:1;;;5225:2;5210:18;;5197:32;;-1:-1:-1;5276:2:1;5261:18;;;5248:32;;4970:316;-1:-1:-1;4970:316:1:o;5291:388::-;5359:6;5367;5420:2;5408:9;5399:7;5395:23;5391:32;5388:52;;;5436:1;5433;5426:12;5388:52;5475:9;5462:23;5494:31;5519:5;5494:31;:::i;:::-;5544:5;-1:-1:-1;5601:2:1;5586:18;;5573:32;5614:33;5573:32;5614:33;:::i;5684:456::-;5761:6;5769;5777;5830:2;5818:9;5809:7;5805:23;5801:32;5798:52;;;5846:1;5843;5836:12;5798:52;5885:9;5872:23;5904:31;5929:5;5904:31;:::i;:::-;5954:5;-1:-1:-1;6011:2:1;5996:18;;5983:32;6024:33;5983:32;6024:33;:::i;:::-;5684:456;;6076:7;;-1:-1:-1;;;6130:2:1;6115:18;;;;6102:32;;5684:456::o;6145:248::-;6213:6;6221;6274:2;6262:9;6253:7;6249:23;6245:32;6242:52;;;6290:1;6287;6280:12;6242:52;-1:-1:-1;;6313:23:1;;;6383:2;6368:18;;;6355:32;;-1:-1:-1;6145:248:1:o;6398:1138::-;6516:6;6524;6577:2;6565:9;6556:7;6552:23;6548:32;6545:52;;;6593:1;6590;6583:12;6545:52;6633:9;6620:23;6662:18;6703:2;6695:6;6692:14;6689:34;;;6719:1;6716;6709:12;6689:34;6742:61;6795:7;6786:6;6775:9;6771:22;6742:61;:::i;:::-;6732:71;;6822:2;6812:12;;6877:2;6866:9;6862:18;6849:32;6906:2;6896:8;6893:16;6890:36;;;6922:1;6919;6912:12;6890:36;6945:24;;;-1:-1:-1;7000:4:1;6992:13;;6988:27;-1:-1:-1;6978:55:1;;7029:1;7026;7019:12;6978:55;7065:2;7052:16;7088:60;7104:43;7144:2;7104:43;:::i;7088:60::-;7182:15;;;7264:1;7260:10;;;;7252:19;;7248:28;;;7213:12;;;;7288:19;;;7285:39;;;7320:1;7317;7310:12;7285:39;7344:11;;;;7364:142;7380:6;7375:3;7372:15;7364:142;;;7446:17;;7434:30;;7397:12;;;;7484;;;;7364:142;;;7525:5;7515:15;;;;;;;6398:1138;;;;;:::o;7730:159::-;7797:20;;7857:6;7846:18;;7836:29;;7826:57;;7879:1;7876;7869:12;7826:57;7730:159;;;:::o;7894:328::-;7968:6;7976;7984;8037:2;8025:9;8016:7;8012:23;8008:32;8005:52;;;8053:1;8050;8043:12;8005:52;8076:28;8094:9;8076:28;:::i;:::-;8066:38;;8123:37;8156:2;8145:9;8141:18;8123:37;:::i;:::-;8113:47;;8179:37;8212:2;8201:9;8197:18;8179:37;:::i;:::-;8169:47;;7894:328;;;;;:::o;8227:247::-;8286:6;8339:2;8327:9;8318:7;8314:23;8310:32;8307:52;;;8355:1;8352;8345:12;8307:52;8394:9;8381:23;8413:31;8438:5;8413:31;:::i;8479:454::-;8574:6;8582;8590;8598;8606;8659:3;8647:9;8638:7;8634:23;8630:33;8627:53;;;8676:1;8673;8666:12;8627:53;-1:-1:-1;;8699:23:1;;;8769:2;8754:18;;8741:32;;-1:-1:-1;8820:2:1;8805:18;;8792:32;;8871:2;8856:18;;8843:32;;-1:-1:-1;8922:3:1;8907:19;8894:33;;-1:-1:-1;8479:454:1;-1:-1:-1;8479:454:1:o;8938:382::-;9003:6;9011;9064:2;9052:9;9043:7;9039:23;9035:32;9032:52;;;9080:1;9077;9070:12;9032:52;9119:9;9106:23;9138:31;9163:5;9138:31;:::i;9325:711::-;9618:3;9607:9;9600:22;9581:4;9645:46;9686:3;9675:9;9671:19;9663:6;9645:46;:::i;:::-;9739:9;9731:6;9727:22;9722:2;9711:9;9707:18;9700:50;9773:33;9799:6;9791;9773:33;:::i;:::-;9759:47;;9854:9;9846:6;9842:22;9837:2;9826:9;9822:18;9815:50;9888:33;9914:6;9906;9888:33;:::i;:::-;9874:47;;9969:9;9961:6;9957:22;9952:2;9941:9;9937:18;9930:50;9997:33;10023:6;10015;9997:33;:::i;:::-;9989:41;9325:711;-1:-1:-1;;;;;;;9325:711:1:o;10041:553::-;10142:6;10150;10158;10211:2;10199:9;10190:7;10186:23;10182:32;10179:52;;;10227:1;10224;10217:12;10179:52;10266:9;10253:23;10285:31;10310:5;10285:31;:::i;:::-;10335:5;-1:-1:-1;10392:2:1;10377:18;;10364:32;10405:33;10364:32;10405:33;:::i;:::-;10457:7;-1:-1:-1;10516:2:1;10501:18;;10488:32;10529:33;10488:32;10529:33;:::i;:::-;10581:7;10571:17;;;10041:553;;;;;:::o;10852:385::-;10938:6;10946;10954;10962;11015:3;11003:9;10994:7;10990:23;10986:33;10983:53;;;11032:1;11029;11022:12;10983:53;-1:-1:-1;;11055:23:1;;;11125:2;11110:18;;11097:32;;-1:-1:-1;11176:2:1;11161:18;;11148:32;;11227:2;11212:18;11199:32;;-1:-1:-1;10852:385:1;-1:-1:-1;10852:385:1:o;11849:180::-;11908:6;11961:2;11949:9;11940:7;11936:23;11932:32;11929:52;;;11977:1;11974;11967:12;11929:52;-1:-1:-1;12000:23:1;;11849:180;-1:-1:-1;11849:180:1:o;12034:474::-;12124:6;12132;12140;12148;12156;12209:3;12197:9;12188:7;12184:23;12180:33;12177:53;;;12226:1;12223;12216:12;12177:53;12249:28;12267:9;12249:28;:::i;:::-;12239:38;;12296:37;12329:2;12318:9;12314:18;12296:37;:::i;:::-;12286:47;;12352:37;12385:2;12374:9;12370:18;12352:37;:::i;:::-;12342:47;;12408:37;12441:2;12430:9;12426:18;12408:37;:::i;:::-;12398:47;;12464:38;12497:3;12486:9;12482:19;12464:38;:::i;:::-;12454:48;;12034:474;;;;;;;;:::o;13607:484::-;13660:3;13698:5;13692:12;13725:6;13720:3;13713:19;13751:4;13780:2;13775:3;13771:12;13764:19;;13817:2;13810:5;13806:14;13838:1;13848:218;13862:6;13859:1;13856:13;13848:218;;;13927:13;;-1:-1:-1;;;;;13923:62:1;13911:75;;14006:12;;;;14041:15;;;;13884:1;13877:9;13848:218;;;-1:-1:-1;14082:3:1;;13607:484;-1:-1:-1;;;;;13607:484:1:o;14096:342::-;14297:2;14286:9;14279:21;14260:4;14317:56;14369:2;14358:9;14354:18;14346:6;14317:56;:::i;:::-;14309:64;;14423:6;14416:14;14409:22;14404:2;14393:9;14389:18;14382:50;14096:342;;;;;:::o;14443:184::-;14495:77;14492:1;14485:88;14592:4;14589:1;14582:15;14616:4;14613:1;14606:15;14632:482;14721:1;14764:5;14721:1;14778:330;14799:7;14789:8;14786:21;14778:330;;;14918:4;-1:-1:-1;;14846:77:1;14840:4;14837:87;14834:113;;;14927:18;;:::i;:::-;14977:7;14967:8;14963:22;14960:55;;;14997:16;;;;14960:55;15076:22;;;;15036:15;;;;14778:330;;;14782:3;14632:482;;;;;:::o;15119:866::-;15168:5;15198:8;15188:80;;-1:-1:-1;15239:1:1;15253:5;;15188:80;15287:4;15277:76;;-1:-1:-1;15324:1:1;15338:5;;15277:76;15369:4;15387:1;15382:59;;;;15455:1;15450:130;;;;15362:218;;15382:59;15412:1;15403:10;;15426:5;;;15450:130;15487:3;15477:8;15474:17;15471:43;;;15494:18;;:::i;:::-;-1:-1:-1;;15550:1:1;15536:16;;15565:5;;15362:218;;15664:2;15654:8;15651:16;15645:3;15639:4;15636:13;15632:36;15626:2;15616:8;15613:16;15608:2;15602:4;15599:12;15595:35;15592:77;15589:159;;;-1:-1:-1;15701:19:1;;;15733:5;;15589:159;15780:34;15805:8;15799:4;15780:34;:::i;:::-;15910:6;-1:-1:-1;;15838:79:1;15829:7;15826:92;15823:118;;;15921:18;;:::i;:::-;15959:20;;15119:866;-1:-1:-1;;;15119:866:1:o;15990:131::-;16050:5;16079:36;16106:8;16100:4;16079:36;:::i;16126:228::-;16166:7;16292:1;-1:-1:-1;;16220:74:1;16217:1;16214:81;16209:1;16202:9;16195:17;16191:105;16188:131;;;16299:18;;:::i;:::-;-1:-1:-1;16339:9:1;;16126:228::o;16359:140::-;16417:5;16446:47;16487:4;16477:8;16473:19;16467:4;16446:47;:::i;16504:274::-;16544:1;16570;16560:189;;16605:77;16602:1;16595:88;16706:4;16703:1;16696:15;16734:4;16731:1;16724:15;16560:189;-1:-1:-1;16763:9:1;;16504:274::o;16783:125::-;16823:4;16851:1;16848;16845:8;16842:34;;;16856:18;;:::i;:::-;-1:-1:-1;16893:9:1;;16783:125::o;17682:184::-;17734:77;17731:1;17724:88;17831:4;17828:1;17821:15;17855:4;17852:1;17845:15;17871:175;17908:3;17952:4;17945:5;17941:16;17981:4;17972:7;17969:17;17966:43;;17989:18;;:::i;:::-;18038:1;18025:15;;17871:175;-1:-1:-1;;17871:175:1:o;18481:184::-;18551:6;18604:2;18592:9;18583:7;18579:23;18575:32;18572:52;;;18620:1;18617;18610:12;18572:52;-1:-1:-1;18643:16:1;;18481:184;-1:-1:-1;18481:184:1:o;18670:556::-;18724:5;18777:3;18770:4;18762:6;18758:17;18754:27;18744:55;;18795:1;18792;18785:12;18744:55;18824:6;18818:13;18850:18;18846:2;18843:26;18840:52;;;18872:18;;:::i;:::-;18916:114;19024:4;-1:-1:-1;;18948:4:1;18944:2;18940:13;18936:86;18932:97;18916:114;:::i;:::-;19055:2;19046:7;19039:19;19101:3;19094:4;19089:2;19081:6;19077:15;19073:26;19070:35;19067:55;;;19118:1;19115;19108:12;19067:55;19131:64;19192:2;19185:4;19176:7;19172:18;19165:4;19157:6;19153:17;19131:64;:::i;19231:971::-;19368:6;19376;19384;19392;19445:3;19433:9;19424:7;19420:23;19416:33;19413:53;;;19462:1;19459;19452:12;19413:53;19495:9;19489:16;19524:18;19565:2;19557:6;19554:14;19551:34;;;19581:1;19578;19571:12;19551:34;19604:61;19657:7;19648:6;19637:9;19633:22;19604:61;:::i;:::-;19594:71;;19711:2;19700:9;19696:18;19690:25;19674:41;;19740:2;19730:8;19727:16;19724:36;;;19756:1;19753;19746:12;19724:36;19779:63;19834:7;19823:8;19812:9;19808:24;19779:63;:::i;:::-;19769:73;;19888:2;19877:9;19873:18;19867:25;19851:41;;19917:2;19907:8;19904:16;19901:36;;;19933:1;19930;19923:12;19901:36;19956:63;20011:7;20000:8;19989:9;19985:24;19956:63;:::i;:::-;19946:73;;20065:2;20054:9;20050:18;20044:25;20028:41;;20094:2;20084:8;20081:16;20078:36;;;20110:1;20107;20100:12;20078:36;;20133:63;20188:7;20177:8;20166:9;20162:24;20133:63;:::i;:::-;20123:73;;;19231:971;;;;;;;:::o;23112:251::-;23182:6;23235:2;23223:9;23214:7;23210:23;23206:32;23203:52;;;23251:1;23248;23241:12;23203:52;23283:9;23277:16;23302:31;23327:5;23302:31;:::i;23700:224::-;23739:3;23767:6;23800:2;23797:1;23793:10;23830:2;23827:1;23823:10;23861:3;23857:2;23853:12;23848:3;23845:21;23842:47;;;23869:18;;:::i;:::-;23905:13;;23700:224;-1:-1:-1;;;;23700:224:1:o;23929:245::-;23996:6;24049:2;24037:9;24028:7;24024:23;24020:32;24017:52;;;24065:1;24062;24055:12;24017:52;24097:9;24091:16;24116:28;24138:5;24116:28;:::i;26161:128::-;26201:3;26232:1;26228:6;26225:1;26222:13;26219:39;;;26238:18;;:::i;:::-;-1:-1:-1;26274:9:1;;26161:128::o;28322:605::-;28621:6;28610:9;28603:25;28664:6;28659:2;28648:9;28644:18;28637:34;28707:3;28702:2;28691:9;28687:18;28680:31;28584:4;28728:57;28780:3;28769:9;28765:19;28757:6;28728:57;:::i;:::-;-1:-1:-1;;;;;28821:55:1;;;;28816:2;28801:18;;28794:83;-1:-1:-1;28908:3:1;28893:19;28886:35;28720:65;28322:605;-1:-1:-1;;;28322:605:1:o;29567:306::-;29655:6;29663;29671;29724:2;29712:9;29703:7;29699:23;29695:32;29692:52;;;29740:1;29737;29730:12;29692:52;29769:9;29763:16;29753:26;;29819:2;29808:9;29804:18;29798:25;29788:35;;29863:2;29852:9;29848:18;29842:25;29832:35;;29567:306;;;;;:::o;29878:217::-;29917:4;29946:6;30002:10;;;;29972;;30024:12;;;30021:38;;;30039:18;;:::i;:::-;30076:13;;29878:217;-1:-1:-1;;;29878:217:1:o

Swarm Source

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