ETH Price: $2,484.05 (+2.75%)

Token

Zero (ZRO)
 

Overview

Max Total Supply

320,000,000 ZRO

Holders

58

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
4,165,652.843953323 ZRO

Value
$0.00
0x51aefb3354aed13ce9047e915ecd8c9805885924
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:
ZRO

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-30
*/

// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.9.0;
abstract contract Context {
    function _msgSender() internal view returns (address payable) {
        return payable(msg.sender);
    }
    function _msgData() internal view returns (bytes memory) {
        this; 
        return msg.data; 
    }
}

interface IERC20Upgradeable {

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

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

library Address {
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

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

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }


    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

interface IUniswapV2Factory {
    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 IUniswapV2Router01 {
    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);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        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 swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract ZRO is Context, IERC20Upgradeable {
    address private _owner; // address of the contract owner.
    mapping (address => uint256) private _rOd; 
    mapping (address => uint256) private _tOd; 
    mapping (address => bool) lpPs;
    uint256 private tSLP = 0; 
    mapping (address => mapping (address => uint256)) private _allowances; 
    mapping (address => bool) private _iEFF; 
    mapping (address => bool) private _iE; 
    address[] private _excluded;
    mapping (address => bool) private _lH;
    uint256 private startingSupply; 
    string private _name; 
    string private _symbol; 
    uint256 public _reF = 0; uint256 public _liF = 0; uint256 public _maF = 1100; 
    uint256 public _bReF = _reF; uint256 public _bLiF = _liF; uint256 public _bMaF = _maF;
    uint256 public _sLiF = 0; uint256 public _sReF = 0; uint256 public _sMaF = 1100; 
    uint256 public _tReF = 0; uint256 public _tLiF = 0; uint256 public _tMaF = 0; 
    uint256 private maxReF = 1000; uint256 private maxLiF = 1000; uint256 private maxMaF = 2200; 
    uint256 public _liquidityRatio = 0;
    uint256 public _marketRatio = 2000;
    uint256 private masterTaxDivisor = 10000;
    uint256 private MarketS = 10;
    uint256 private DevS = 0;
    uint256 private ValueD = 10;
    uint256 private constant MAX = ~uint256(0);
    uint8 private _decimals;
    uint256 private _decimalsMul;
    uint256 private _tTotal;
    uint256 private _rTotal;
    uint256 private _tFeeTotal;

    IUniswapV2Router02 public dexRouter; 
    address public lpPair; 
    address public _routerAddress; 
    address public DEAD = 0x000000000000000000000000000000000000dEaD; 
    address public ZERO = 0x0000000000000000000000000000000000000000; 
    address payable private _devWallet; 
    address payable private _marketWallet; 
    bool inSwapAndLiquify; 
    bool public swapAndLiquifyEnabled = false; 
    uint256 public _maxTXN; 
    uint256 public mTAUI; 
    uint256 public _mWS;
    uint256 public mWSUI; 
    uint256 private swapThreshold;
    uint256 private swapAmount;
    bool Launched = false;
    bool public _LiqHasBeenAdded = false;
    uint256 private _liqAddBlock = 0;
    uint256 private _liqAddStamp = 0;
    bool private sameBlockActive = true;
    mapping (address => uint256) private lastTrade;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event SniperCaught(address sniperAddress);
    uint256 Planted;
    
    bool rft = false;
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

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

        _owner = msg.sender;

        if (block.chainid == 56) {
            _routerAddress = 0x10ED43C718714eb63d5aA57B78B54704E256024E;
        } else if (block.chainid == 97) {
            _routerAddress = 0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3;
        } else if (block.chainid == 1 || block.chainid == 4 || block.chainid == 3) {
            _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else {
            revert();
        }

        _iEFF[owner()] = true;
        _iEFF[address(this)] = true;
        _lH[owner()] = true;

        _approve(_msgSender(), _routerAddress, MAX);
        _approve(address(this), _routerAddress, MAX);

    }

    receive() external payable {}

    function setupfortrade(address payable setMarketWallet, address payable setDevWallet, string memory _tokenname, string memory _tokensymbol) external onlyOwner {
        require(!rft);

        _marketWallet = payable(setMarketWallet);
        _devWallet = payable(setDevWallet);

        _iEFF[_marketWallet] = true;
        _iEFF[_devWallet] = true;

        _name = _tokenname;
        _symbol = _tokensymbol;
        startingSupply = 320_000_000;
        if (startingSupply < 100000000000) {
            _decimals = 18;
            _decimalsMul = _decimals;
        } else {
            _decimals = 9;
            _decimalsMul = _decimals;
        }
        _tTotal = startingSupply * (10**_decimalsMul);
        _rTotal = (MAX - (MAX % _tTotal));

        dexRouter = IUniswapV2Router02(_routerAddress);
        lpPair = IUniswapV2Factory(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPs[lpPair] = true;
        _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        
        _maxTXN = (_tTotal * 1500) / 100000;
        mTAUI = (startingSupply * 500) / 100000;
        _mWS = (_tTotal * 15) / 1000;
        mWSUI = (startingSupply * 10) / 1000;
        swapThreshold = (_tTotal * 5) / 10000;
        swapAmount = (_tTotal * 30) / 10000;

        approve(_routerAddress, type(uint256).max);

        rft = true;
        _rOd[owner()] = _rTotal;
        emit Transfer(ZERO, owner(), _tTotal);

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

        _transfer(owner(), address(this), balanceOf(owner()));


        

        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, 
            0, 
            owner(),
            block.timestamp
        );
        Planted = block.number;
    }

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

    function transferOwner(address newOwner) external onlyOwner() {
        require(newOwner != address(0), "Call renounceOwnership to transfer owner to the zero address.");
        require(newOwner != DEAD, "Call renounceOwnership to transfer owner to the zero address.");
        setExcludedFromFee(_owner, false);
        setExcludedFromFee(newOwner, true);
        setExcludedFromReward(newOwner, true);
        
        if (_devWallet == payable(_owner))
            _devWallet = payable(newOwner);
        
        _allowances[_owner][newOwner] = balanceOf(_owner);
        if(balanceOf(_owner) > 0) {
            _transfer(_owner, newOwner, balanceOf(_owner));
        }
        
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
        
    }

    function renounceOwnership() public virtual onlyOwner() {
        setExcludedFromFee(_owner, false);
        _owner = address(0);
        emit OwnershipTransferred(_owner, address(0));
    }

    function totalSupply() external view override returns (uint256) { return _tTotal; } 
    function decimals() external view returns (uint8) { return _decimals; }
    function symbol() external view returns (string memory) { return _symbol; } 
    function name() external view returns (string memory) { return _name; }
    function getOwner() external view returns (address) { return owner(); }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function balanceOf(address account) public view override returns (uint256) {
        if (_iE[account]) return _tOd[account];
        return tokenFromReflection(_rOd[account]);
    }

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

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

    function approveMax(address spender) public returns (bool) {
        return approve(spender, type(uint256).max);
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - amount);
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }

    function setNewRouter(address newRouter) external onlyOwner() {
        IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter);
        address g_p = IUniswapV2Factory(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (g_p == address(0)) {
            lpPair = IUniswapV2Factory(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = g_p;
        }
        dexRouter = _newRouter;
        _approve(address(this), newRouter, MAX);
    }

    function setLpPair(address pair, bool enabled) external onlyOwner {
        if (enabled == false) {
            lpPs[pair] = false;
        } else {
            if (tSLP != 0) {
                require(block.timestamp - tSLP > 1 weeks, "Cannot set a new pair this week!");
            }
            lpPs[pair] = true;
            tSLP = block.timestamp;
        }
    }

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

    function iEFF(address account) public view returns(bool) {
        return _iEFF[account];
    }

    function setTaxesBuy(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner {
        require(reflect <= maxReF
                && liquidity <= maxLiF
                && marketing <= maxMaF
                );
        require(reflect + liquidity + marketing <= 4900);
        _bReF = reflect;
        _bLiF = liquidity;
        _bMaF = marketing;
    }

    function setTaxesSell(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner {
        require(reflect <= maxReF
                && liquidity <= maxLiF
                && marketing <= maxMaF
                );
        require(reflect + liquidity + marketing <= 4900);
        _sReF = reflect;
        _sLiF = liquidity;
        _sMaF = marketing;
    }

    function setTaxesTransfer(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner {
        require(reflect <= maxReF
                && liquidity <= maxLiF
                && marketing <= maxMaF
                );
        require(reflect + liquidity + marketing <= 4900);
        _tReF = reflect;
        _tLiF = liquidity;
        _tMaF = marketing;
    }

    function setValues(uint256 ms, uint256 ds, uint256 vd) external onlyOwner {
        MarketS = ms;
        DevS = ds;
        ValueD = vd;
    }

    function setRatios(uint256 liquidity, uint256 marketing) external onlyOwner {
        _liquidityRatio = liquidity;
        _marketRatio = marketing;
    }

    function setMaxTxn(uint256 percent, uint256 divisor) external onlyOwner {
        uint256 check = (_tTotal * percent) / divisor;
        require(check >= (_tTotal / 1000), "Must be above 0.1% of total supply.");
        _maxTXN = check;
        mTAUI = (startingSupply * percent) / divisor;
    }

    function setMaxWallet(uint256 p, uint256 d) external onlyOwner {
        uint256 check = (_tTotal * p) / d; 
        require(check >= (_tTotal / 1000), "Must be above 0.1% of total supply.");
        _mWS = check;
        mWSUI = (startingSupply * p) / d;
    }

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

    function setNewMarketWallet(address payable newWallet) external onlyOwner {
        require(_marketWallet != newWallet, "Wallet already set!");
        _marketWallet = payable(newWallet);
    }

    function setNewDevWallet(address payable newWallet) external onlyOwner {
        require(_devWallet != newWallet, "Wallet already set!");
        _devWallet = payable(newWallet);
    }
    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

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

    function setExcludedFromReward(address account, bool enabled) public onlyOwner {
        if (enabled == true) {
            require(!_iE[account], "Account is already excluded.");
            if(_rOd[account] > 0) {
                _tOd[account] = tokenFromReflection(_rOd[account]);
            }
            _iE[account] = true;
            _excluded.push(account);
        } else if (enabled == false) {
            require(_iE[account], "Account is already included.");
            for (uint256 i = 0; i < _excluded.length; i++) {
                if (_excluded[i] == account) {
                    _excluded[i] = _excluded[_excluded.length - 1];
                    _tOd[account] = 0;
                    _iE[account] = false;
                    _excluded.pop();
                    break;
                }
            }
        }
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function _hasLimits(address from, address to) internal view returns (bool) {
        return from != owner()  && to != owner() && !_lH[to] && !_lH[from] && to != DEAD && to != address(0) && from != address(this);
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount / currentRate;
    }
    
    function _approve(address sender, address spender, uint256 amount) internal {
        require(sender != address(0), "Cannot approve from the zero address");
        require(spender != address(0), "Cannot approve to the zero address");

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

    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "Cannot transfer from the zero address");
        require(to != address(0), "Cannot transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(_hasLimits(from, to)) {
            if(!Launched) {
                revert("Trading not yet enabled!");
            }
            if (sameBlockActive) {
                if (lpPs[from]){
                    require(lastTrade[to] != block.number + 1);
                    lastTrade[to] = block.number;
                } else {
                    require(lastTrade[from] != block.number + 1);
                    lastTrade[from] = block.number;
                }
            }
            require(amount <= _maxTXN, "Transfer exceeds the maxTxAmount.");
            if(to != _routerAddress && !lpPs[to]) {
                require(balanceOf(to) + amount <= _mWS, "Transfer exceeds the maxWalletSize.");
            }
        }
        bool takeFee = true;
        if(_iEFF[from] || _iEFF[to]){
            takeFee = false;
        }

        if (lpPs[to]) {
            if (!inSwapAndLiquify
                && swapAndLiquifyEnabled
            ) {
                uint256 contractTokenBalance = balanceOf(address(this));
                if (contractTokenBalance >= swapThreshold) {
                    if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; }
                    swapAndLiquify(contractTokenBalance);
                }
            }      
        } 
        return _ftt(from, to, amount, takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) internal lockTheSwap {
        if (_liquidityRatio + _marketRatio == 0)
            return;
        uint256 toLiquify = ((contractTokenBalance * _liquidityRatio) / (_liquidityRatio + _marketRatio)) / 2;

        uint256 toSwapForEth = contractTokenBalance - toLiquify;

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

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


        uint256 liquidityBalance = ((address(this).balance * _liquidityRatio) / (_liquidityRatio + _marketRatio)) / 2;

        if (toLiquify > 0) {
            dexRouter.addLiquidityETH{value: liquidityBalance}(
                address(this),
                toLiquify,
                0, 
                0, 
                _devWallet,
                block.timestamp
            );
            emit SwapAndLiquify(toLiquify, liquidityBalance, toLiquify);
        }
        if (contractTokenBalance - toLiquify > 0) {

            uint256 OperationsFee = (address(this).balance);
            uint256 marketF = OperationsFee/(ValueD)*(MarketS);
            uint256 devF = OperationsFee/(ValueD)*(DevS); _devWallet.transfer(devF); 
            _marketWallet.transfer(marketF);           

        }
    }

    

    function _checkLiquidityAdd(address from, address to) internal {
        require(!_LiqHasBeenAdded, "Liquidity is already added.");
        if (!_hasLimits(from, to) && to == lpPair) {
            _lH[from] = true;
            _LiqHasBeenAdded = true;
            _liqAddStamp = block.timestamp;

            swapAndLiquifyEnabled = true;
            emit SwapAndLiquifyEnabledUpdated(true);
        }
    }

    function Zero() public onlyOwner {
        require(!Launched, "Trading is already enabled!");
        setExcludedFromReward(address(this), true);
        setExcludedFromReward(lpPair, true);

        Launched = true;
        swapAndLiquifyEnabled = true;
    }

    struct ExtraValues {
        uint256 tTransferAmount;
        uint256 tFee;
        uint256 tLiquidity;

        uint256 rTransferAmount;
        uint256 rAmount;
        uint256 rFee;
    }

    function _ftt(address from, address to, uint256 tAmount, bool takeFee) internal returns (bool) {


        if (!_LiqHasBeenAdded) {
                _checkLiquidityAdd(from, to);
                if (!_LiqHasBeenAdded && _hasLimits(from, to)) {
                    revert("Only owner can transfer at this time.");
                }
        }
        
        ExtraValues memory values = _getValues(from, to, tAmount, takeFee);

        _rOd[from] = _rOd[from] - values.rAmount;
        _rOd[to] = _rOd[to] + values.rTransferAmount;

        if (_iE[from] && !_iE[to]) {
            _tOd[from] = _tOd[from] - tAmount;
        } else if (!_iE[from] && _iE[to]) {
            _tOd[to] = _tOd[to] + values.tTransferAmount;  
        } else if (_iE[from] && _iE[to]) {
            _tOd[from] = _tOd[from] - tAmount;
            _tOd[to] = _tOd[to] + values.tTransferAmount;
        }

        if (values.tLiquidity > 0)
            _takeLiquidity(from, values.tLiquidity);
        if (values.rFee > 0 || values.tFee > 0)
            _takeReflect(values.rFee, values.tFee);

        emit Transfer(from, to, values.tTransferAmount);
        return true;
    }

    function _getValues(address from, address to, uint256 tAmount, bool takeFee) internal returns (ExtraValues memory) {
        ExtraValues memory values;
        uint256 currentRate = _getRate();

        values.rAmount = tAmount * currentRate;

        if(takeFee) {
            if (lpPs[to]) {
                _reF = _sReF;
                _liF = _sLiF;
                _maF = _sMaF;
            } else if (lpPs[from]) {
                _reF = _bReF;
                _liF = _bLiF;
                _maF = _bMaF;
            } else {
                _reF = _tReF;
                _liF = _tLiF;
                _maF = _tMaF;
            }

            values.tFee = (tAmount * _reF) / masterTaxDivisor;
            values.tLiquidity = (tAmount * (_liF + _maF)) / masterTaxDivisor;
            values.tTransferAmount = tAmount - (values.tFee + values.tLiquidity);

            values.rFee = values.tFee * currentRate;
        } else {
            values.tFee = 0;
            values.tLiquidity = 0;
            values.tTransferAmount = tAmount;

            values.rFee = 0;
        }

        values.rTransferAmount = values.rAmount - (values.rFee + (values.tLiquidity * currentRate));
        return values;
    }

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

    function _getCurrentSupply() internal view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOd[_excluded[i]] > rSupply || _tOd[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply - _rOd[_excluded[i]];
            tSupply = tSupply - _tOd[_excluded[i]];
        }
        if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeReflect(uint256 rFee, uint256 tFee) internal {
        _rTotal = _rTotal - rFee;
        _tFeeTotal = _tFeeTotal + tFee;
    }

    function removeETHstuck() external onlyOwner {
        payable(owner()).transfer(address(this).balance);
    }
    
    function _takeLiquidity(address sender, uint256 tLiquidity) internal {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity * currentRate;
        _rOd[address(this)] = _rOd[address(this)] + rLiquidity;
        if(_iE[address(this)])
            _tOd[address(this)] = _tOd[address(this)] + tLiquidity;
        emit Transfer(sender, address(this), tLiquidity); 
    }
}

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":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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":"ZERO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Zero","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_LiqHasBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_bLiF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_bMaF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_bReF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mWS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTXN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_routerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sLiF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sMaF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sReF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tLiF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tMaF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tReF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","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":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"iEFF","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","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":"mTAUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mWSUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeETHstuck","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":"setExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"p","type":"uint256"},{"internalType":"uint256","name":"d","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setNewDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setNewMarketWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxesTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ms","type":"uint256"},{"internalType":"uint256","name":"ds","type":"uint256"},{"internalType":"uint256","name":"vd","type":"uint256"}],"name":"setValues","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"setMarketWallet","type":"address"},{"internalType":"address payable","name":"setDevWallet","type":"address"},{"internalType":"string","name":"_tokenname","type":"string"},{"internalType":"string","name":"_tokensymbol","type":"string"}],"name":"setupfortrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"}]

608060405260006004819055600d819055600e81905561044c600f819055601082905560118290556012819055601382905560148290556015556016819055601781905560188190556103e86019819055601a55610898601b55601c8190556107d0601d55612710601e55600a601f8190556020829055602155602a80546001600160a01b031990811661dead17909155602b805482169055602d805460ff60a81b191690556034805461ffff19169055603582905560368290556037805460ff19908116600117909155603a805490911690558154163317905560384614156200011057602980546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e17905562000199565b46606114156200014657602980546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c317905562000199565b4660011480620001565750466004145b80620001625750466003145b156200019457602980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d17905562000199565b600080fd5b600160066000620001b26000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260069092528120805490921660019081179092556009906200020b6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055620002546200023f3390565b6029546001600160a01b031660001962000276565b602954620002709030906001600160a01b031660001962000276565b620003a2565b6001600160a01b038316620002de5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620003415760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f7420617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620002d5565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b613dba80620003b26000396000f3fe6080604052600436106103bc5760003560e01c80636a30fb9d116101f2578063abe57e701161010d578063da37be24116100a0578063f17b67fa1161006f578063f17b67fa14610abe578063f456040314610ade578063fb78680d14610af3578063fb8bc55f14610b1357600080fd5b8063da37be2414610a22578063dd62ed3e14610a38578063e7c281d614610a7e578063eafb5a3c14610a9e57600080fd5b8063c3183e7e116100dc578063c3183e7e146109b6578063c49b9a80146109cc578063d8742467146109ec578063d9e6646014610a0257600080fd5b8063abe57e7014610954578063b46def5514610974578063bb10050e1461098a578063be5a4630146109a057600080fd5b806388f82020116101855780639a09a61b116101545780639a09a61b146108d5578063a3f4782f146108f4578063a457c2d714610914578063a9059cbb1461093457600080fd5b806388f8202014610869578063893d20e8146108a25780638da5cb5b146108a257806395d89b41146108c057600080fd5b80636ed515e6116101c15780636ed515e6146107fe57806370a0823114610814578063715018a61461083457806380c581d11461084957600080fd5b80636a30fb9d146107885780636aa7a071146107a85780636c295456146107be5780636c6d9fa1146107de57600080fd5b8063384f6b51116102e2578063575f18e5116102755780635e0f6584116102445780635e0f65841461071c5780636612e66f146107325780636639dd9314610752578063668357da1461077257600080fd5b8063575f18e5146106b057806358a142b9146106d057806358fa63ca146106e65780635b8e40461461070657600080fd5b8063452ed4f1116102b1578063452ed4f11461062f5780634a74bb021461064f5780634fb2e45d14610670578063571ac8b01461069057600080fd5b8063384f6b51146105cd5780633895aa25146105e357806339509351146105f95780633d0c8f6c1461061957600080fd5b806313e461921161035a5780632733e083116103295780632733e0831461053d5780632d83811914610552578063313ce5671461057257806337a9314f1461059457600080fd5b806313e46192146104d257806318160ddd146104f257806323b872dd14610507578063270bcdfb1461052757600080fd5b8063095ea7b311610396578063095ea7b3146104475780630cdc822614610477578063111be3161461049b57806313114a9d146104bd57600080fd5b806303fd2a45146103c857806306fdde03146104055780630758d9241461042757600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b50602a546103e8906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561041157600080fd5b5061041a610b29565b6040516103fc919061364d565b34801561043357600080fd5b506027546103e8906001600160a01b031681565b34801561045357600080fd5b506104676104623660046136b7565b610bbb565b60405190151581526020016103fc565b34801561048357600080fd5b5061048d600f5481565b6040519081526020016103fc565b3480156104a757600080fd5b506104bb6104b63660046136e3565b610bd2565b005b3480156104c957600080fd5b5060265461048d565b3480156104de57600080fd5b506104bb6104ed366004613724565b610c13565b3480156104fe57600080fd5b5060245461048d565b34801561051357600080fd5b50610467610522366004613759565b610f07565b34801561053357600080fd5b5061048d601d5481565b34801561054957600080fd5b506104bb610f5a565b34801561055e57600080fd5b5061048d61056d36600461379a565b610fc1565b34801561057e57600080fd5b5060225460405160ff90911681526020016103fc565b3480156105a057600080fd5b506104676105af3660046137b3565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156105d957600080fd5b5061048d601c5481565b3480156105ef57600080fd5b5061048d600e5481565b34801561060557600080fd5b506104676106143660046136b7565b611045565b34801561062557600080fd5b5061048d60305481565b34801561063b57600080fd5b506028546103e8906001600160a01b031681565b34801561065b57600080fd5b50602d5461046790600160a81b900460ff1681565b34801561067c57600080fd5b506104bb61068b3660046137b3565b61107c565b34801561069c57600080fd5b506104676106ab3660046137b3565b61121e565b3480156106bc57600080fd5b506104bb6106cb3660046136e3565b61122c565b3480156106dc57600080fd5b5061048d602f5481565b3480156106f257600080fd5b50602b546103e8906001600160a01b031681565b34801561071257600080fd5b5061048d60115481565b34801561072857600080fd5b5061048d60315481565b34801561073e57600080fd5b506104bb61074d366004613724565b6112b2565b34801561075e57600080fd5b506104bb61076d3660046137d0565b611307565b34801561077e57600080fd5b5061048d600d5481565b34801561079457600080fd5b506104bb6107a33660046137b3565b61133c565b3480156107b457600080fd5b5061048d60145481565b3480156107ca57600080fd5b506104bb6107d9366004613895565b6113dc565b3480156107ea57600080fd5b506104bb6107f93660046136e3565b61191d565b34801561080a57600080fd5b5061048d60155481565b34801561082057600080fd5b5061048d61082f3660046137b3565b6119a3565b34801561084057600080fd5b506104bb611a02565b34801561085557600080fd5b506104bb610864366004613724565b611a81565b34801561087557600080fd5b506104676108843660046137b3565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156108ae57600080fd5b506000546001600160a01b03166103e8565b3480156108cc57600080fd5b5061041a611b64565b3480156108e157600080fd5b5060345461046790610100900460ff1681565b34801561090057600080fd5b506104bb61090f3660046137d0565b611b73565b34801561092057600080fd5b5061046761092f3660046136b7565b611c10565b34801561094057600080fd5b5061046761094f3660046136b7565b611c47565b34801561096057600080fd5b506104bb61096f3660046137d0565b611c54565b34801561098057600080fd5b5061048d60175481565b34801561099657600080fd5b5061048d602e5481565b3480156109ac57600080fd5b5061048d60125481565b3480156109c257600080fd5b5061048d60165481565b3480156109d857600080fd5b506104bb6109e736600461391e565b611cf1565b3480156109f857600080fd5b5061048d60105481565b348015610a0e57600080fd5b506029546103e8906001600160a01b031681565b348015610a2e57600080fd5b5061048d60185481565b348015610a4457600080fd5b5061048d610a53366004613939565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610a8a57600080fd5b506104bb610a993660046136e3565b611d73565b348015610aaa57600080fd5b506104bb610ab93660046137b3565b611df9565b348015610aca57600080fd5b506104bb610ad93660046137b3565b612129565b348015610aea57600080fd5b506104bb6121c9565b348015610aff57600080fd5b506104bb610b0e366004613972565b61228a565b348015610b1f57600080fd5b5061048d60135481565b6060600b8054610b38906139a4565b80601f0160208091040260200160405190810160405280929190818152602001828054610b64906139a4565b8015610bb15780601f10610b8657610100808354040283529160200191610bb1565b820191906000526020600020905b815481529060010190602001808311610b9457829003601f168201915b5050505050905090565b6000610bc83384846122f3565b5060015b92915050565b6000546001600160a01b03163314610c055760405162461bcd60e51b8152600401610bfc906139df565b60405180910390fd5b601f92909255602055602155565b6000546001600160a01b03163314610c3d5760405162461bcd60e51b8152600401610bfc906139df565b60018115151415610d72576001600160a01b03821660009081526007602052604090205460ff1615610cb15760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610bfc565b6001600160a01b03821660009081526001602052604090205415610d0b576001600160a01b038216600090815260016020526040902054610cf190610fc1565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b80610f03576001600160a01b03821660009081526007602052604090205460ff16610ddf5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610bfc565b60005b600854811015610f0157826001600160a01b031660088281548110610e0957610e09613a14565b6000918252602090912001546001600160a01b03161415610eef5760088054610e3490600190613a40565b81548110610e4457610e44613a14565b600091825260209091200154600880546001600160a01b039092169183908110610e7057610e70613a14565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff191690556008805480610ec857610ec8613a57565b600082815260209020810160001990810180546001600160a01b0319169055019055610f01565b80610ef981613a6d565b915050610de2565b505b5050565b6000610f14848484612417565b506001600160a01b038416600090815260056020908152604080832033808552925290912054610f50918691610f4b908690613a40565b6122f3565b5060019392505050565b6000546001600160a01b03163314610f845760405162461bcd60e51b8152600401610bfc906139df565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015610fbe573d6000803e3d6000fd5b50565b60006025548211156110285760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610bfc565b6000611032612849565b905061103e8184613a9e565b9392505050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610bc8918590610f4b908690613ab2565b6000546001600160a01b031633146110a65760405162461bcd60e51b8152600401610bfc906139df565b6001600160a01b0381166110cc5760405162461bcd60e51b8152600401610bfc90613aca565b602a546001600160a01b03828116911614156110fa5760405162461bcd60e51b8152600401610bfc90613aca565b60008054611113916001600160a01b03909116906112b2565b61111e8160016112b2565b611129816001610c13565b600054602c546001600160a01b039081169116141561115e57602c80546001600160a01b0319166001600160a01b0383161790555b600054611173906001600160a01b03166119a3565b600080546001600160a01b0390811682526005602090815260408084208684168552909152822092909255805490916111ac91166119a3565b11156111d3576000546111d1906001600160a01b0316826111cc826119a3565b612417565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000610bcc82600019610bbb565b6000546001600160a01b031633146112565760405162461bcd60e51b8152600401610bfc906139df565b601954831115801561126a5750601a548211155b80156112785750601b548111155b61128157600080fd5b6113248161128f8486613ab2565b6112999190613ab2565b11156112a457600080fd5b601692909255601755601855565b6000546001600160a01b031633146112dc5760405162461bcd60e51b8152600401610bfc906139df565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146113315760405162461bcd60e51b8152600401610bfc906139df565b601c91909155601d55565b6000546001600160a01b031633146113665760405162461bcd60e51b8152600401610bfc906139df565b602c546001600160a01b03828116911614156113ba5760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610bfc565b602c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146114065760405162461bcd60e51b8152600401610bfc906139df565b603a5460ff161561141657600080fd5b602d80546001600160a01b038087166001600160a01b03199283168117909355602c805487831693169290921782556000928352600660209081526040808520805460ff199081166001908117909255945490931685529093208054909216179055825161148a91600b91908501906135b4565b50805161149e90600c9060208401906135b4565b50631312d000600a556022805460ff191660129081179091556023556023546114c890600a613c0b565b600a546114d59190613c17565b60248190556114e690600019613c36565b6114f290600019613a40565b602555602954602780546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115759190613c4a565b6001600160a01b031663c9c65396602760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115fa9190613c4a565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015611646573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166a9190613c4a565b602880546001600160a01b0319166001600160a01b039283169081179091556000908152600360209081526040808320805460ff19166001179055308352600582528083206027549094168352929052206000199055602454620186a0906116d4906105dc613c17565b6116de9190613a9e565b602e55600a54620186a0906116f5906101f4613c17565b6116ff9190613a9e565b602f556024546103e89061171490600f613c17565b61171e9190613a9e565b603055600a80546103e8916117339190613c17565b61173d9190613a9e565b60315560245461271090611752906005613c17565b61175c9190613a9e565b6032556024546127109061177190601e613c17565b61177b9190613a9e565b603355602954611796906001600160a01b0316600019610bbb565b50603a805460ff191660019081179091556025549060006117bf6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020556117eb6000546001600160a01b031690565b602b546024546040519081526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a360275461184e9030906001600160a01b03166000196122f3565b6118796118636000546001600160a01b031690565b306111cc61082f6000546001600160a01b031690565b506027546001600160a01b031663f305d7194730611896816119a3565b6000806118ab6000546001600160a01b031690565b426040518863ffffffff1660e01b81526004016118cd96959493929190613c67565b60606040518083038185885af11580156118eb573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906119109190613ca2565b5050436039555050505050565b6000546001600160a01b031633146119475760405162461bcd60e51b8152600401610bfc906139df565b601954831115801561195b5750601a548211155b80156119695750601b548111155b61197257600080fd5b611324816119808486613ab2565b61198a9190613ab2565b111561199557600080fd5b601092909255601155601255565b6001600160a01b03811660009081526007602052604081205460ff16156119e057506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610bcc90610fc1565b6000546001600160a01b03163314611a2c5760405162461bcd60e51b8152600401610bfc906139df565b60008054611a45916001600160a01b03909116906112b2565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314611aab5760405162461bcd60e51b8152600401610bfc906139df565b80611ad257506001600160a01b03166000908152600360205260409020805460ff19169055565b60045415611b395762093a8060045442611aec9190613a40565b11611b395760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610bfc565b6001600160a01b0382166000908152600360205260409020805460ff19166001179055426004555050565b6060600c8054610b38906139a4565b6000546001600160a01b03163314611b9d5760405162461bcd60e51b8152600401610bfc906139df565b60008183602454611bae9190613c17565b611bb89190613a9e565b90506103e8602454611bca9190613a9e565b811015611be95760405162461bcd60e51b8152600401610bfc90613cd0565b602e819055600a548290611bfe908590613c17565b611c089190613a9e565b602f55505050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610bc8918590610f4b908690613a40565b6000610f50338484612417565b6000546001600160a01b03163314611c7e5760405162461bcd60e51b8152600401610bfc906139df565b60008183602454611c8f9190613c17565b611c999190613a9e565b90506103e8602454611cab9190613a9e565b811015611cca5760405162461bcd60e51b8152600401610bfc90613cd0565b6030819055600a548290611cdf908590613c17565b611ce99190613a9e565b603155505050565b6000546001600160a01b03163314611d1b5760405162461bcd60e51b8152600401610bfc906139df565b602d8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611d6890831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611d9d5760405162461bcd60e51b8152600401610bfc906139df565b6019548311158015611db15750601a548211155b8015611dbf5750601b548111155b611dc857600080fd5b61132481611dd68486613ab2565b611de09190613ab2565b1115611deb57600080fd5b601492909255601355601555565b6000546001600160a01b03163314611e235760405162461bcd60e51b8152600401610bfc906139df565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8c9190613c4a565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ed9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611efd9190613c4a565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611f48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6c9190613c4a565b90506001600160a01b0381166120e557816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fde9190613c4a565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561202b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204f9190613c4a565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561209c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c09190613c4a565b602880546001600160a01b0319166001600160a01b0392909216919091179055612101565b602880546001600160a01b0319166001600160a01b0383161790555b602780546001600160a01b0319166001600160a01b038416179055610f0130846000196122f3565b6000546001600160a01b031633146121535760405162461bcd60e51b8152600401610bfc906139df565b602d546001600160a01b03828116911614156121a75760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610bfc565b602d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146121f35760405162461bcd60e51b8152600401610bfc906139df565b60345460ff16156122465760405162461bcd60e51b815260206004820152601b60248201527f54726164696e6720697320616c726561647920656e61626c65642100000000006044820152606401610bfc565b612251306001610c13565b602854612268906001600160a01b03166001610c13565b6034805460ff19166001179055602d805460ff60a81b1916600160a81b179055565b6000546001600160a01b031633146122b45760405162461bcd60e51b8152600401610bfc906139df565b82846024546122c39190613c17565b6122cd9190613a9e565b60325560245481906122e0908490613c17565b6122ea9190613a9e565b60335550505050565b6001600160a01b0383166123555760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bfc565b6001600160a01b0382166123b65760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f7420617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bfc565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b03841661247d5760405162461bcd60e51b815260206004820152602560248201527f43616e6e6f74207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bfc565b6001600160a01b0383166124df5760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f74207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610bfc565b600082116125415760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610bfc565b61254b848461286c565b156127715760345460ff166125a25760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610bfc565b60375460ff1615612668576001600160a01b03841660009081526003602052604090205460ff161561261d576125d9436001613ab2565b6001600160a01b03841660009081526038602052604090205414156125fd57600080fd5b6001600160a01b0383166000908152603860205260409020439055612668565b612628436001613ab2565b6001600160a01b038516600090815260386020526040902054141561264c57600080fd5b6001600160a01b03841660009081526038602052604090204390555b602e548211156126c45760405162461bcd60e51b815260206004820152602160248201527f5472616e73666572206578636565647320746865206d61785478416d6f756e746044820152601760f91b6064820152608401610bfc565b6029546001600160a01b038481169116148015906126fb57506001600160a01b03831660009081526003602052604090205460ff16155b15612771576030548261270d856119a3565b6127179190613ab2565b11156127715760405162461bcd60e51b815260206004820152602360248201527f5472616e73666572206578636565647320746865206d617857616c6c657453696044820152623d329760e91b6064820152608401610bfc565b6001600160a01b03841660009081526006602052604090205460019060ff16806127b357506001600160a01b03841660009081526006602052604090205460ff165b156127bc575060005b6001600160a01b03841660009081526003602052604090205460ff161561283457602d54600160a01b900460ff161580156128005750602d54600160a81b900460ff165b15612834576000612810306119a3565b9050603254811061283257603354811061282957506033545b6128328161292c565b505b61284085858584612cc2565b95945050505050565b6000806000612856613043565b90925090506128658183613a9e565b9250505090565b600080546001600160a01b0384811691161480159061289957506000546001600160a01b03838116911614155b80156128be57506001600160a01b03821660009081526009602052604090205460ff16155b80156128e357506001600160a01b03831660009081526009602052604090205460ff16155b80156128fd5750602a546001600160a01b03838116911614155b801561291157506001600160a01b03821615155b801561103e57506001600160a01b0383163014159392505050565b602d805460ff60a01b1916600160a01b179055601d54601c5461294f9190613ab2565b61295857612cb2565b60006002601d54601c5461296c9190613ab2565b601c546129799085613c17565b6129839190613a9e565b61298d9190613a9e565b9050600061299b8284613a40565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106129d5576129d5613a14565b6001600160a01b03928316602091820292909201810191909152602754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612a2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a529190613c4a565b81600181518110612a6557612a65613a14565b6001600160a01b03928316602091820292909201015260275460405163791ac94760e01b815291169063791ac94790612aab908590600090869030904290600401613d13565b600060405180830381600087803b158015612ac557600080fd5b505af1158015612ad9573d6000803e3d6000fd5b5050505060006002601d54601c54612af19190613ab2565b601c54612afe9047613c17565b612b089190613a9e565b612b129190613a9e565b90508315612be257602754602c5460405163f305d71960e01b81526001600160a01b039283169263f305d719928592612b5a9230928b92600092839216904290600401613c67565b60606040518083038185885af1158015612b78573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b9d9190613ca2565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b6000612bee8587613a40565b1115612cad57601f546021544791600091612c099084613a9e565b612c139190613c17565b9050600060205460215484612c289190613a9e565b612c329190613c17565b602c546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612c6d573d6000803e3d6000fd5b50602d546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015612ca8573d6000803e3d6000fd5b505050505b505050505b50602d805460ff60a01b19169055565b603454600090610100900460ff16612d5657612cde85856131c6565b603454610100900460ff16158015612cfb5750612cfb858561286c565b15612d565760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b6064820152608401610bfc565b6000612d64868686866132d4565b60808101516001600160a01b038816600090815260016020526040902054919250612d8e91613a40565b6001600160a01b0380881660009081526001602052604080822093909355606084015191881681529190912054612dc59190613ab2565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff168015612e1957506001600160a01b03851660009081526007602052604090205460ff16155b15612e60576001600160a01b038616600090815260026020526040902054612e42908590613a40565b6001600160a01b038716600090815260026020526040902055612fa0565b6001600160a01b03861660009081526007602052604090205460ff16158015612ea157506001600160a01b03851660009081526007602052604090205460ff165b15612ee95780516001600160a01b038616600090815260026020526040902054612ecb9190613ab2565b6001600160a01b038616600090815260026020526040902055612fa0565b6001600160a01b03861660009081526007602052604090205460ff168015612f2957506001600160a01b03851660009081526007602052604090205460ff165b15612fa0576001600160a01b038616600090815260026020526040902054612f52908590613a40565b6001600160a01b0380881660009081526002602052604080822093909355835191881681529190912054612f869190613ab2565b6001600160a01b0386166000908152600260205260409020555b604081015115612fb857612fb88682604001516134c2565b60008160a001511180612fcf575060008160200151115b15612fe657612fe68160a00151826020015161358e565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161302f91815260200190565b60405180910390a350600195945050505050565b6025546024546000918291825b6008548110156131955782600160006008848154811061307257613072613a14565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806130dd57508160026000600884815481106130b6576130b6613a14565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156130f357602554602454945094505050509091565b600160006008838154811061310a5761310a613a14565b60009182526020808320909101546001600160a01b031683528201929092526040019020546131399084613a40565b9250600260006008838154811061315257613152613a14565b60009182526020808320909101546001600160a01b031683528201929092526040019020546131819083613a40565b91508061318d81613a6d565b915050613050565b506024546025546131a69190613a9e565b8210156131bd576025546024549350935050509091565b90939092509050565b603454610100900460ff161561321e5760405162461bcd60e51b815260206004820152601b60248201527f4c697175696469747920697320616c72656164792061646465642e00000000006044820152606401610bfc565b613228828261286c565b15801561324257506028546001600160a01b038281169116145b15610f03576001600160a01b03821660009081526009602052604090819020805460ff191660019081179091556034805461ff00191661010017905542603655602d805460ff60a81b1916600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159916132c891901515815260200190565b60405180910390a15050565b61330d6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6133466040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000613350612849565b905061335c8186613c17565b6080830152831561346c576001600160a01b03861660009081526003602052604090205460ff161561339f57601454600d55601354600e55601554600f556133ea565b6001600160a01b03871660009081526003602052604090205460ff16156133d757601054600d55601154600e55601254600f556133ea565b601654600d55601754600e55601854600f555b601e54600d546133fa9087613c17565b6134049190613a9e565b6020830152601e54600f54600e5461341c9190613ab2565b6134269087613c17565b6134309190613a9e565b6040830181905260208301516134469190613ab2565b6134509086613a40565b82526020820151613462908290613c17565b60a0830152613485565b6000602083018190526040830181905285835260a08301525b8082604001516134959190613c17565b8260a001516134a49190613ab2565b82608001516134b39190613a40565b60608301525095945050505050565b60006134cc612849565b905060006134da8284613c17565b306000908152600160205260409020549091506134f8908290613ab2565b3060009081526001602090815260408083209390935560079052205460ff16156135485730600090815260026020526040902054613537908490613ab2565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b8160255461359c9190613a40565b6025556026546135ad908290613ab2565b6026555050565b8280546135c0906139a4565b90600052602060002090601f0160209004810192826135e25760008555613628565b82601f106135fb57805160ff1916838001178555613628565b82800160010185558215613628579182015b8281111561362857825182559160200191906001019061360d565b50613634929150613638565b5090565b5b808211156136345760008155600101613639565b600060208083528351808285015260005b8181101561367a5785810183015185820160400152820161365e565b8181111561368c576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610fbe57600080fd5b600080604083850312156136ca57600080fd5b82356136d5816136a2565b946020939093013593505050565b6000806000606084860312156136f857600080fd5b505081359360208301359350604090920135919050565b8035801515811461371f57600080fd5b919050565b6000806040838503121561373757600080fd5b8235613742816136a2565b91506137506020840161370f565b90509250929050565b60008060006060848603121561376e57600080fd5b8335613779816136a2565b92506020840135613789816136a2565b929592945050506040919091013590565b6000602082840312156137ac57600080fd5b5035919050565b6000602082840312156137c557600080fd5b813561103e816136a2565b600080604083850312156137e357600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261381957600080fd5b813567ffffffffffffffff80821115613834576138346137f2565b604051601f8301601f19908116603f0116810190828211818310171561385c5761385c6137f2565b8160405283815286602085880101111561387557600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080608085870312156138ab57600080fd5b84356138b6816136a2565b935060208501356138c6816136a2565b9250604085013567ffffffffffffffff808211156138e357600080fd5b6138ef88838901613808565b9350606087013591508082111561390557600080fd5b5061391287828801613808565b91505092959194509250565b60006020828403121561393057600080fd5b61103e8261370f565b6000806040838503121561394c57600080fd5b8235613957816136a2565b91506020830135613967816136a2565b809150509250929050565b6000806000806080858703121561398857600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c908216806139b857607f821691505b602082108114156139d957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015613a5257613a52613a2a565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415613a8157613a81613a2a565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600082613aad57613aad613a88565b500490565b60008219821115613ac557613ac5613a2a565b500190565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b600181815b80851115613b62578160001904821115613b4857613b48613a2a565b80851615613b5557918102915b93841c9390800290613b2c565b509250929050565b600082613b7957506001610bcc565b81613b8657506000610bcc565b8160018114613b9c5760028114613ba657613bc2565b6001915050610bcc565b60ff841115613bb757613bb7613a2a565b50506001821b610bcc565b5060208310610133831016604e8410600b8410161715613be5575081810a610bcc565b613bef8383613b27565b8060001904821115613c0357613c03613a2a565b029392505050565b600061103e8383613b6a565b6000816000190483118215151615613c3157613c31613a2a565b500290565b600082613c4557613c45613a88565b500690565b600060208284031215613c5c57600080fd5b815161103e816136a2565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215613cb757600080fd5b8351925060208401519150604084015190509250925092565b60208082526023908201527f4d7573742062652061626f766520302e3125206f6620746f74616c2073757070604082015262363c9760e91b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613d635784516001600160a01b031683529383019391830191600101613d3e565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220a7e33392db896fee50d46b303b020c1ffd4fba02be87dd566bd031efddcf899964736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106103bc5760003560e01c80636a30fb9d116101f2578063abe57e701161010d578063da37be24116100a0578063f17b67fa1161006f578063f17b67fa14610abe578063f456040314610ade578063fb78680d14610af3578063fb8bc55f14610b1357600080fd5b8063da37be2414610a22578063dd62ed3e14610a38578063e7c281d614610a7e578063eafb5a3c14610a9e57600080fd5b8063c3183e7e116100dc578063c3183e7e146109b6578063c49b9a80146109cc578063d8742467146109ec578063d9e6646014610a0257600080fd5b8063abe57e7014610954578063b46def5514610974578063bb10050e1461098a578063be5a4630146109a057600080fd5b806388f82020116101855780639a09a61b116101545780639a09a61b146108d5578063a3f4782f146108f4578063a457c2d714610914578063a9059cbb1461093457600080fd5b806388f8202014610869578063893d20e8146108a25780638da5cb5b146108a257806395d89b41146108c057600080fd5b80636ed515e6116101c15780636ed515e6146107fe57806370a0823114610814578063715018a61461083457806380c581d11461084957600080fd5b80636a30fb9d146107885780636aa7a071146107a85780636c295456146107be5780636c6d9fa1146107de57600080fd5b8063384f6b51116102e2578063575f18e5116102755780635e0f6584116102445780635e0f65841461071c5780636612e66f146107325780636639dd9314610752578063668357da1461077257600080fd5b8063575f18e5146106b057806358a142b9146106d057806358fa63ca146106e65780635b8e40461461070657600080fd5b8063452ed4f1116102b1578063452ed4f11461062f5780634a74bb021461064f5780634fb2e45d14610670578063571ac8b01461069057600080fd5b8063384f6b51146105cd5780633895aa25146105e357806339509351146105f95780633d0c8f6c1461061957600080fd5b806313e461921161035a5780632733e083116103295780632733e0831461053d5780632d83811914610552578063313ce5671461057257806337a9314f1461059457600080fd5b806313e46192146104d257806318160ddd146104f257806323b872dd14610507578063270bcdfb1461052757600080fd5b8063095ea7b311610396578063095ea7b3146104475780630cdc822614610477578063111be3161461049b57806313114a9d146104bd57600080fd5b806303fd2a45146103c857806306fdde03146104055780630758d9241461042757600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b50602a546103e8906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561041157600080fd5b5061041a610b29565b6040516103fc919061364d565b34801561043357600080fd5b506027546103e8906001600160a01b031681565b34801561045357600080fd5b506104676104623660046136b7565b610bbb565b60405190151581526020016103fc565b34801561048357600080fd5b5061048d600f5481565b6040519081526020016103fc565b3480156104a757600080fd5b506104bb6104b63660046136e3565b610bd2565b005b3480156104c957600080fd5b5060265461048d565b3480156104de57600080fd5b506104bb6104ed366004613724565b610c13565b3480156104fe57600080fd5b5060245461048d565b34801561051357600080fd5b50610467610522366004613759565b610f07565b34801561053357600080fd5b5061048d601d5481565b34801561054957600080fd5b506104bb610f5a565b34801561055e57600080fd5b5061048d61056d36600461379a565b610fc1565b34801561057e57600080fd5b5060225460405160ff90911681526020016103fc565b3480156105a057600080fd5b506104676105af3660046137b3565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156105d957600080fd5b5061048d601c5481565b3480156105ef57600080fd5b5061048d600e5481565b34801561060557600080fd5b506104676106143660046136b7565b611045565b34801561062557600080fd5b5061048d60305481565b34801561063b57600080fd5b506028546103e8906001600160a01b031681565b34801561065b57600080fd5b50602d5461046790600160a81b900460ff1681565b34801561067c57600080fd5b506104bb61068b3660046137b3565b61107c565b34801561069c57600080fd5b506104676106ab3660046137b3565b61121e565b3480156106bc57600080fd5b506104bb6106cb3660046136e3565b61122c565b3480156106dc57600080fd5b5061048d602f5481565b3480156106f257600080fd5b50602b546103e8906001600160a01b031681565b34801561071257600080fd5b5061048d60115481565b34801561072857600080fd5b5061048d60315481565b34801561073e57600080fd5b506104bb61074d366004613724565b6112b2565b34801561075e57600080fd5b506104bb61076d3660046137d0565b611307565b34801561077e57600080fd5b5061048d600d5481565b34801561079457600080fd5b506104bb6107a33660046137b3565b61133c565b3480156107b457600080fd5b5061048d60145481565b3480156107ca57600080fd5b506104bb6107d9366004613895565b6113dc565b3480156107ea57600080fd5b506104bb6107f93660046136e3565b61191d565b34801561080a57600080fd5b5061048d60155481565b34801561082057600080fd5b5061048d61082f3660046137b3565b6119a3565b34801561084057600080fd5b506104bb611a02565b34801561085557600080fd5b506104bb610864366004613724565b611a81565b34801561087557600080fd5b506104676108843660046137b3565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156108ae57600080fd5b506000546001600160a01b03166103e8565b3480156108cc57600080fd5b5061041a611b64565b3480156108e157600080fd5b5060345461046790610100900460ff1681565b34801561090057600080fd5b506104bb61090f3660046137d0565b611b73565b34801561092057600080fd5b5061046761092f3660046136b7565b611c10565b34801561094057600080fd5b5061046761094f3660046136b7565b611c47565b34801561096057600080fd5b506104bb61096f3660046137d0565b611c54565b34801561098057600080fd5b5061048d60175481565b34801561099657600080fd5b5061048d602e5481565b3480156109ac57600080fd5b5061048d60125481565b3480156109c257600080fd5b5061048d60165481565b3480156109d857600080fd5b506104bb6109e736600461391e565b611cf1565b3480156109f857600080fd5b5061048d60105481565b348015610a0e57600080fd5b506029546103e8906001600160a01b031681565b348015610a2e57600080fd5b5061048d60185481565b348015610a4457600080fd5b5061048d610a53366004613939565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610a8a57600080fd5b506104bb610a993660046136e3565b611d73565b348015610aaa57600080fd5b506104bb610ab93660046137b3565b611df9565b348015610aca57600080fd5b506104bb610ad93660046137b3565b612129565b348015610aea57600080fd5b506104bb6121c9565b348015610aff57600080fd5b506104bb610b0e366004613972565b61228a565b348015610b1f57600080fd5b5061048d60135481565b6060600b8054610b38906139a4565b80601f0160208091040260200160405190810160405280929190818152602001828054610b64906139a4565b8015610bb15780601f10610b8657610100808354040283529160200191610bb1565b820191906000526020600020905b815481529060010190602001808311610b9457829003601f168201915b5050505050905090565b6000610bc83384846122f3565b5060015b92915050565b6000546001600160a01b03163314610c055760405162461bcd60e51b8152600401610bfc906139df565b60405180910390fd5b601f92909255602055602155565b6000546001600160a01b03163314610c3d5760405162461bcd60e51b8152600401610bfc906139df565b60018115151415610d72576001600160a01b03821660009081526007602052604090205460ff1615610cb15760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610bfc565b6001600160a01b03821660009081526001602052604090205415610d0b576001600160a01b038216600090815260016020526040902054610cf190610fc1565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b80610f03576001600160a01b03821660009081526007602052604090205460ff16610ddf5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610bfc565b60005b600854811015610f0157826001600160a01b031660088281548110610e0957610e09613a14565b6000918252602090912001546001600160a01b03161415610eef5760088054610e3490600190613a40565b81548110610e4457610e44613a14565b600091825260209091200154600880546001600160a01b039092169183908110610e7057610e70613a14565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff191690556008805480610ec857610ec8613a57565b600082815260209020810160001990810180546001600160a01b0319169055019055610f01565b80610ef981613a6d565b915050610de2565b505b5050565b6000610f14848484612417565b506001600160a01b038416600090815260056020908152604080832033808552925290912054610f50918691610f4b908690613a40565b6122f3565b5060019392505050565b6000546001600160a01b03163314610f845760405162461bcd60e51b8152600401610bfc906139df565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015610fbe573d6000803e3d6000fd5b50565b60006025548211156110285760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610bfc565b6000611032612849565b905061103e8184613a9e565b9392505050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610bc8918590610f4b908690613ab2565b6000546001600160a01b031633146110a65760405162461bcd60e51b8152600401610bfc906139df565b6001600160a01b0381166110cc5760405162461bcd60e51b8152600401610bfc90613aca565b602a546001600160a01b03828116911614156110fa5760405162461bcd60e51b8152600401610bfc90613aca565b60008054611113916001600160a01b03909116906112b2565b61111e8160016112b2565b611129816001610c13565b600054602c546001600160a01b039081169116141561115e57602c80546001600160a01b0319166001600160a01b0383161790555b600054611173906001600160a01b03166119a3565b600080546001600160a01b0390811682526005602090815260408084208684168552909152822092909255805490916111ac91166119a3565b11156111d3576000546111d1906001600160a01b0316826111cc826119a3565b612417565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000610bcc82600019610bbb565b6000546001600160a01b031633146112565760405162461bcd60e51b8152600401610bfc906139df565b601954831115801561126a5750601a548211155b80156112785750601b548111155b61128157600080fd5b6113248161128f8486613ab2565b6112999190613ab2565b11156112a457600080fd5b601692909255601755601855565b6000546001600160a01b031633146112dc5760405162461bcd60e51b8152600401610bfc906139df565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146113315760405162461bcd60e51b8152600401610bfc906139df565b601c91909155601d55565b6000546001600160a01b031633146113665760405162461bcd60e51b8152600401610bfc906139df565b602c546001600160a01b03828116911614156113ba5760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610bfc565b602c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146114065760405162461bcd60e51b8152600401610bfc906139df565b603a5460ff161561141657600080fd5b602d80546001600160a01b038087166001600160a01b03199283168117909355602c805487831693169290921782556000928352600660209081526040808520805460ff199081166001908117909255945490931685529093208054909216179055825161148a91600b91908501906135b4565b50805161149e90600c9060208401906135b4565b50631312d000600a556022805460ff191660129081179091556023556023546114c890600a613c0b565b600a546114d59190613c17565b60248190556114e690600019613c36565b6114f290600019613a40565b602555602954602780546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115759190613c4a565b6001600160a01b031663c9c65396602760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115fa9190613c4a565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015611646573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166a9190613c4a565b602880546001600160a01b0319166001600160a01b039283169081179091556000908152600360209081526040808320805460ff19166001179055308352600582528083206027549094168352929052206000199055602454620186a0906116d4906105dc613c17565b6116de9190613a9e565b602e55600a54620186a0906116f5906101f4613c17565b6116ff9190613a9e565b602f556024546103e89061171490600f613c17565b61171e9190613a9e565b603055600a80546103e8916117339190613c17565b61173d9190613a9e565b60315560245461271090611752906005613c17565b61175c9190613a9e565b6032556024546127109061177190601e613c17565b61177b9190613a9e565b603355602954611796906001600160a01b0316600019610bbb565b50603a805460ff191660019081179091556025549060006117bf6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020556117eb6000546001600160a01b031690565b602b546024546040519081526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a360275461184e9030906001600160a01b03166000196122f3565b6118796118636000546001600160a01b031690565b306111cc61082f6000546001600160a01b031690565b506027546001600160a01b031663f305d7194730611896816119a3565b6000806118ab6000546001600160a01b031690565b426040518863ffffffff1660e01b81526004016118cd96959493929190613c67565b60606040518083038185885af11580156118eb573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906119109190613ca2565b5050436039555050505050565b6000546001600160a01b031633146119475760405162461bcd60e51b8152600401610bfc906139df565b601954831115801561195b5750601a548211155b80156119695750601b548111155b61197257600080fd5b611324816119808486613ab2565b61198a9190613ab2565b111561199557600080fd5b601092909255601155601255565b6001600160a01b03811660009081526007602052604081205460ff16156119e057506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610bcc90610fc1565b6000546001600160a01b03163314611a2c5760405162461bcd60e51b8152600401610bfc906139df565b60008054611a45916001600160a01b03909116906112b2565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314611aab5760405162461bcd60e51b8152600401610bfc906139df565b80611ad257506001600160a01b03166000908152600360205260409020805460ff19169055565b60045415611b395762093a8060045442611aec9190613a40565b11611b395760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610bfc565b6001600160a01b0382166000908152600360205260409020805460ff19166001179055426004555050565b6060600c8054610b38906139a4565b6000546001600160a01b03163314611b9d5760405162461bcd60e51b8152600401610bfc906139df565b60008183602454611bae9190613c17565b611bb89190613a9e565b90506103e8602454611bca9190613a9e565b811015611be95760405162461bcd60e51b8152600401610bfc90613cd0565b602e819055600a548290611bfe908590613c17565b611c089190613a9e565b602f55505050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610bc8918590610f4b908690613a40565b6000610f50338484612417565b6000546001600160a01b03163314611c7e5760405162461bcd60e51b8152600401610bfc906139df565b60008183602454611c8f9190613c17565b611c999190613a9e565b90506103e8602454611cab9190613a9e565b811015611cca5760405162461bcd60e51b8152600401610bfc90613cd0565b6030819055600a548290611cdf908590613c17565b611ce99190613a9e565b603155505050565b6000546001600160a01b03163314611d1b5760405162461bcd60e51b8152600401610bfc906139df565b602d8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611d6890831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611d9d5760405162461bcd60e51b8152600401610bfc906139df565b6019548311158015611db15750601a548211155b8015611dbf5750601b548111155b611dc857600080fd5b61132481611dd68486613ab2565b611de09190613ab2565b1115611deb57600080fd5b601492909255601355601555565b6000546001600160a01b03163314611e235760405162461bcd60e51b8152600401610bfc906139df565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8c9190613c4a565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ed9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611efd9190613c4a565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611f48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6c9190613c4a565b90506001600160a01b0381166120e557816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fde9190613c4a565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561202b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204f9190613c4a565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561209c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c09190613c4a565b602880546001600160a01b0319166001600160a01b0392909216919091179055612101565b602880546001600160a01b0319166001600160a01b0383161790555b602780546001600160a01b0319166001600160a01b038416179055610f0130846000196122f3565b6000546001600160a01b031633146121535760405162461bcd60e51b8152600401610bfc906139df565b602d546001600160a01b03828116911614156121a75760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610bfc565b602d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146121f35760405162461bcd60e51b8152600401610bfc906139df565b60345460ff16156122465760405162461bcd60e51b815260206004820152601b60248201527f54726164696e6720697320616c726561647920656e61626c65642100000000006044820152606401610bfc565b612251306001610c13565b602854612268906001600160a01b03166001610c13565b6034805460ff19166001179055602d805460ff60a81b1916600160a81b179055565b6000546001600160a01b031633146122b45760405162461bcd60e51b8152600401610bfc906139df565b82846024546122c39190613c17565b6122cd9190613a9e565b60325560245481906122e0908490613c17565b6122ea9190613a9e565b60335550505050565b6001600160a01b0383166123555760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bfc565b6001600160a01b0382166123b65760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f7420617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bfc565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b03841661247d5760405162461bcd60e51b815260206004820152602560248201527f43616e6e6f74207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bfc565b6001600160a01b0383166124df5760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f74207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610bfc565b600082116125415760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610bfc565b61254b848461286c565b156127715760345460ff166125a25760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610bfc565b60375460ff1615612668576001600160a01b03841660009081526003602052604090205460ff161561261d576125d9436001613ab2565b6001600160a01b03841660009081526038602052604090205414156125fd57600080fd5b6001600160a01b0383166000908152603860205260409020439055612668565b612628436001613ab2565b6001600160a01b038516600090815260386020526040902054141561264c57600080fd5b6001600160a01b03841660009081526038602052604090204390555b602e548211156126c45760405162461bcd60e51b815260206004820152602160248201527f5472616e73666572206578636565647320746865206d61785478416d6f756e746044820152601760f91b6064820152608401610bfc565b6029546001600160a01b038481169116148015906126fb57506001600160a01b03831660009081526003602052604090205460ff16155b15612771576030548261270d856119a3565b6127179190613ab2565b11156127715760405162461bcd60e51b815260206004820152602360248201527f5472616e73666572206578636565647320746865206d617857616c6c657453696044820152623d329760e91b6064820152608401610bfc565b6001600160a01b03841660009081526006602052604090205460019060ff16806127b357506001600160a01b03841660009081526006602052604090205460ff165b156127bc575060005b6001600160a01b03841660009081526003602052604090205460ff161561283457602d54600160a01b900460ff161580156128005750602d54600160a81b900460ff165b15612834576000612810306119a3565b9050603254811061283257603354811061282957506033545b6128328161292c565b505b61284085858584612cc2565b95945050505050565b6000806000612856613043565b90925090506128658183613a9e565b9250505090565b600080546001600160a01b0384811691161480159061289957506000546001600160a01b03838116911614155b80156128be57506001600160a01b03821660009081526009602052604090205460ff16155b80156128e357506001600160a01b03831660009081526009602052604090205460ff16155b80156128fd5750602a546001600160a01b03838116911614155b801561291157506001600160a01b03821615155b801561103e57506001600160a01b0383163014159392505050565b602d805460ff60a01b1916600160a01b179055601d54601c5461294f9190613ab2565b61295857612cb2565b60006002601d54601c5461296c9190613ab2565b601c546129799085613c17565b6129839190613a9e565b61298d9190613a9e565b9050600061299b8284613a40565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106129d5576129d5613a14565b6001600160a01b03928316602091820292909201810191909152602754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612a2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a529190613c4a565b81600181518110612a6557612a65613a14565b6001600160a01b03928316602091820292909201015260275460405163791ac94760e01b815291169063791ac94790612aab908590600090869030904290600401613d13565b600060405180830381600087803b158015612ac557600080fd5b505af1158015612ad9573d6000803e3d6000fd5b5050505060006002601d54601c54612af19190613ab2565b601c54612afe9047613c17565b612b089190613a9e565b612b129190613a9e565b90508315612be257602754602c5460405163f305d71960e01b81526001600160a01b039283169263f305d719928592612b5a9230928b92600092839216904290600401613c67565b60606040518083038185885af1158015612b78573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b9d9190613ca2565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b6000612bee8587613a40565b1115612cad57601f546021544791600091612c099084613a9e565b612c139190613c17565b9050600060205460215484612c289190613a9e565b612c329190613c17565b602c546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612c6d573d6000803e3d6000fd5b50602d546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015612ca8573d6000803e3d6000fd5b505050505b505050505b50602d805460ff60a01b19169055565b603454600090610100900460ff16612d5657612cde85856131c6565b603454610100900460ff16158015612cfb5750612cfb858561286c565b15612d565760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b6064820152608401610bfc565b6000612d64868686866132d4565b60808101516001600160a01b038816600090815260016020526040902054919250612d8e91613a40565b6001600160a01b0380881660009081526001602052604080822093909355606084015191881681529190912054612dc59190613ab2565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff168015612e1957506001600160a01b03851660009081526007602052604090205460ff16155b15612e60576001600160a01b038616600090815260026020526040902054612e42908590613a40565b6001600160a01b038716600090815260026020526040902055612fa0565b6001600160a01b03861660009081526007602052604090205460ff16158015612ea157506001600160a01b03851660009081526007602052604090205460ff165b15612ee95780516001600160a01b038616600090815260026020526040902054612ecb9190613ab2565b6001600160a01b038616600090815260026020526040902055612fa0565b6001600160a01b03861660009081526007602052604090205460ff168015612f2957506001600160a01b03851660009081526007602052604090205460ff165b15612fa0576001600160a01b038616600090815260026020526040902054612f52908590613a40565b6001600160a01b0380881660009081526002602052604080822093909355835191881681529190912054612f869190613ab2565b6001600160a01b0386166000908152600260205260409020555b604081015115612fb857612fb88682604001516134c2565b60008160a001511180612fcf575060008160200151115b15612fe657612fe68160a00151826020015161358e565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161302f91815260200190565b60405180910390a350600195945050505050565b6025546024546000918291825b6008548110156131955782600160006008848154811061307257613072613a14565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806130dd57508160026000600884815481106130b6576130b6613a14565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156130f357602554602454945094505050509091565b600160006008838154811061310a5761310a613a14565b60009182526020808320909101546001600160a01b031683528201929092526040019020546131399084613a40565b9250600260006008838154811061315257613152613a14565b60009182526020808320909101546001600160a01b031683528201929092526040019020546131819083613a40565b91508061318d81613a6d565b915050613050565b506024546025546131a69190613a9e565b8210156131bd576025546024549350935050509091565b90939092509050565b603454610100900460ff161561321e5760405162461bcd60e51b815260206004820152601b60248201527f4c697175696469747920697320616c72656164792061646465642e00000000006044820152606401610bfc565b613228828261286c565b15801561324257506028546001600160a01b038281169116145b15610f03576001600160a01b03821660009081526009602052604090819020805460ff191660019081179091556034805461ff00191661010017905542603655602d805460ff60a81b1916600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159916132c891901515815260200190565b60405180910390a15050565b61330d6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6133466040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000613350612849565b905061335c8186613c17565b6080830152831561346c576001600160a01b03861660009081526003602052604090205460ff161561339f57601454600d55601354600e55601554600f556133ea565b6001600160a01b03871660009081526003602052604090205460ff16156133d757601054600d55601154600e55601254600f556133ea565b601654600d55601754600e55601854600f555b601e54600d546133fa9087613c17565b6134049190613a9e565b6020830152601e54600f54600e5461341c9190613ab2565b6134269087613c17565b6134309190613a9e565b6040830181905260208301516134469190613ab2565b6134509086613a40565b82526020820151613462908290613c17565b60a0830152613485565b6000602083018190526040830181905285835260a08301525b8082604001516134959190613c17565b8260a001516134a49190613ab2565b82608001516134b39190613a40565b60608301525095945050505050565b60006134cc612849565b905060006134da8284613c17565b306000908152600160205260409020549091506134f8908290613ab2565b3060009081526001602090815260408083209390935560079052205460ff16156135485730600090815260026020526040902054613537908490613ab2565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b8160255461359c9190613a40565b6025556026546135ad908290613ab2565b6026555050565b8280546135c0906139a4565b90600052602060002090601f0160209004810192826135e25760008555613628565b82601f106135fb57805160ff1916838001178555613628565b82800160010185558215613628579182015b8281111561362857825182559160200191906001019061360d565b50613634929150613638565b5090565b5b808211156136345760008155600101613639565b600060208083528351808285015260005b8181101561367a5785810183015185820160400152820161365e565b8181111561368c576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610fbe57600080fd5b600080604083850312156136ca57600080fd5b82356136d5816136a2565b946020939093013593505050565b6000806000606084860312156136f857600080fd5b505081359360208301359350604090920135919050565b8035801515811461371f57600080fd5b919050565b6000806040838503121561373757600080fd5b8235613742816136a2565b91506137506020840161370f565b90509250929050565b60008060006060848603121561376e57600080fd5b8335613779816136a2565b92506020840135613789816136a2565b929592945050506040919091013590565b6000602082840312156137ac57600080fd5b5035919050565b6000602082840312156137c557600080fd5b813561103e816136a2565b600080604083850312156137e357600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261381957600080fd5b813567ffffffffffffffff80821115613834576138346137f2565b604051601f8301601f19908116603f0116810190828211818310171561385c5761385c6137f2565b8160405283815286602085880101111561387557600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080608085870312156138ab57600080fd5b84356138b6816136a2565b935060208501356138c6816136a2565b9250604085013567ffffffffffffffff808211156138e357600080fd5b6138ef88838901613808565b9350606087013591508082111561390557600080fd5b5061391287828801613808565b91505092959194509250565b60006020828403121561393057600080fd5b61103e8261370f565b6000806040838503121561394c57600080fd5b8235613957816136a2565b91506020830135613967816136a2565b809150509250929050565b6000806000806080858703121561398857600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c908216806139b857607f821691505b602082108114156139d957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015613a5257613a52613a2a565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415613a8157613a81613a2a565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600082613aad57613aad613a88565b500490565b60008219821115613ac557613ac5613a2a565b500190565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b600181815b80851115613b62578160001904821115613b4857613b48613a2a565b80851615613b5557918102915b93841c9390800290613b2c565b509250929050565b600082613b7957506001610bcc565b81613b8657506000610bcc565b8160018114613b9c5760028114613ba657613bc2565b6001915050610bcc565b60ff841115613bb757613bb7613a2a565b50506001821b610bcc565b5060208310610133831016604e8410600b8410161715613be5575081810a610bcc565b613bef8383613b27565b8060001904821115613c0357613c03613a2a565b029392505050565b600061103e8383613b6a565b6000816000190483118215151615613c3157613c31613a2a565b500290565b600082613c4557613c45613a88565b500690565b600060208284031215613c5c57600080fd5b815161103e816136a2565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215613cb757600080fd5b8351925060208401519150604084015190509250925092565b60208082526023908201527f4d7573742062652061626f766520302e3125206f6620746f74616c2073757070604082015262363c9760e91b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613d635784516001600160a01b031683529383019391830191600101613d3e565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220a7e33392db896fee50d46b303b020c1ffd4fba02be87dd566bd031efddcf899964736f6c634300080a0033

Deployed Bytecode Sourcemap

6046:22756:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7662:64;;;;;;;;;;-1:-1:-1;7662:64:0;;;;-1:-1:-1;;;;;7662:64:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;7662:64:0;;;;;;;;13122:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;7553:35::-;;;;;;;;;;-1:-1:-1;7553:35:0;;;;-1:-1:-1;;;;;7553:35:0;;;13784:161;;;;;;;;;;-1:-1:-1;13784:161:0;;;;;:::i;:::-;;:::i;:::-;;;1679:14:1;;1672:22;1654:41;;1642:2;1627:18;13784:161:0;1514:187:1;6719:26:0;;;;;;;;;;;;;;;;;;;1852:25:1;;;1840:2;1825:18;6719:26:0;1706:177:1;17136:147:0;;;;;;;;;;-1:-1:-1;17136:147:0;;;;;:::i;:::-;;:::i;:::-;;19909:87;;;;;;;;;;-1:-1:-1;19978:10:0;;19909:87;;19039:862;;;;;;;;;;-1:-1:-1;19039:862:0;;;;;:::i;:::-;;:::i;12873:83::-;;;;;;;;;;-1:-1:-1;12946:7:0;;12873:83;;14081:266;;;;;;;;;;-1:-1:-1;14081:266:0;;;;;:::i;:::-;;:::i;7156:34::-;;;;;;;;;;;;;;;;28272:112;;;;;;;;;;;;;:::i;20231:250::-;;;;;;;;;;-1:-1:-1;20231:250:0;;;;;:::i;:::-;;:::i;12963:71::-;;;;;;;;;;-1:-1:-1;13022:9:0;;12963:71;;13022:9;;;;3482:36:1;;3470:2;3455:18;12963:71:0;3340:184:1;15864:97:0;;;;;;;;;;-1:-1:-1;15864:97:0;;;;;:::i;:::-;-1:-1:-1;;;;;15939:14:0;15915:4;15939:14;;;:5;:14;;;;;;;;;15864:97;7115:34;;;;;;;;;;;;;;;;6694:23;;;;;;;;;;;;;;;;14355:215;;;;;;;;;;-1:-1:-1;14355:215:0;;;;;:::i;:::-;;:::i;8029:19::-;;;;;;;;;;;;;;;;7596:21;;;;;;;;;;-1:-1:-1;7596:21:0;;;;-1:-1:-1;;;;;7596:21:0;;;7922:41;;;;;;;;;;-1:-1:-1;7922:41:0;;;;-1:-1:-1;;;7922:41:0;;;;;;11868:795;;;;;;;;;;-1:-1:-1;11868:795:0;;;;;:::i;:::-;;:::i;13953:120::-;;;;;;;;;;-1:-1:-1;13953:120:0;;;;;:::i;:::-;;:::i;16744:384::-;;;;;;;;;;-1:-1:-1;16744:384:0;;;;;:::i;:::-;;:::i;8001:20::-;;;;;;;;;;;;;;;;7734:64;;;;;;;;;;-1:-1:-1;7734:64:0;;;;-1:-1:-1;;;;;7734:64:0;;;6782:27;;;;;;;;;;;;;;;;8055:20;;;;;;;;;;;;;;;;18912:119;;;;;;;;;;-1:-1:-1;18912:119:0;;;;;:::i;:::-;;:::i;17291:157::-;;;;;;;;;;-1:-1:-1;17291:157:0;;;;;:::i;:::-;;:::i;6669:23::-;;;;;;;;;;;;;;;;18540:187;;;;;;;;;;-1:-1:-1;18540:187:0;;;;;:::i;:::-;;:::i;6871:24::-;;;;;;;;;;;;;;;;9862:1911;;;;;;;;;;-1:-1:-1;9862:1911:0;;;;;:::i;:::-;;:::i;15969:379::-;;;;;;;;;;-1:-1:-1;15969:379:0;;;;;:::i;:::-;;:::i;6897:27::-;;;;;;;;;;;;;;;;13417:184;;;;;;;;;;-1:-1:-1;13417:184:0;;;;;:::i;:::-;;:::i;12671:194::-;;;;;;;;;;;;;:::i;15357:379::-;;;;;;;;;;-1:-1:-1;15357:379:0;;;;;:::i;:::-;;:::i;15744:112::-;;;;;;;;;;-1:-1:-1;15744:112:0;;;;;:::i;:::-;-1:-1:-1;;;;;15836:12:0;15812:4;15836:12;;;:3;:12;;;;;;;;;15744:112;13199:71;;;;;;;;;;-1:-1:-1;13242:7:0;11846:6;-1:-1:-1;;;;;11846:6:0;13199:71;;13040:75;;;;;;;;;;;;;:::i;8180:36::-;;;;;;;;;;-1:-1:-1;8180:36:0;;;;;;;;;;;17456:301;;;;;;;;;;-1:-1:-1;17456:301:0;;;;;:::i;:::-;;:::i;14578:225::-;;;;;;;;;;-1:-1:-1;14578:225:0;;;;;:::i;:::-;;:::i;13609:167::-;;;;;;;;;;-1:-1:-1;13609:167:0;;;;;:::i;:::-;;:::i;17765:266::-;;;;;;;;;;-1:-1:-1;17765:266:0;;;;;:::i;:::-;;:::i;6958:24::-;;;;;;;;;;;;;;;;7971:22;;;;;;;;;;;;;;;;6811:27;;;;;;;;;;;;;;;;6932:24;;;;;;;;;;;;;;;;18733:171;;;;;;;;;;-1:-1:-1;18733:171:0;;;;;:::i;:::-;;:::i;6753:27::-;;;;;;;;;;;;;;;;7625:29;;;;;;;;;;-1:-1:-1;7625:29:0;;;;-1:-1:-1;;;;;7625:29:0;;;6984:24;;;;;;;;;;;;;;;;13276:133;;;;;;;;;;-1:-1:-1;13276:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;13378:19:0;;;13360:7;13378:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;13276:133;16356:380;;;;;;;;;;-1:-1:-1;16356:380:0;;;;;:::i;:::-;;:::i;14811:538::-;;;;;;;;;;-1:-1:-1;14811:538:0;;;;;:::i;:::-;;:::i;18336:196::-;;;;;;;;;;-1:-1:-1;18336:196:0;;;;;:::i;:::-;;:::i;24480:267::-;;;;;;;;;;;;;:::i;18039:289::-;;;;;;;;;;-1:-1:-1;18039:289:0;;;;;:::i;:::-;;:::i;6845:24::-;;;;;;;;;;;;;;;;13122:71;13161:13;13185:5;13178:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13122:71;:::o;13784:161::-;13859:4;13876:39;187:10;13899:7;13908:6;13876:8;:39::i;:::-;-1:-1:-1;13933:4:0;13784:161;;;;;:::o;17136:147::-;9007:6;;-1:-1:-1;;;;;9007:6:0;187:10;9007:22;8999:67;;;;-1:-1:-1;;;8999:67:0;;;;;;;:::i;:::-;;;;;;;;;17221:7:::1;:12:::0;;;;17244:4:::1;:9:::0;17264:6:::1;:11:::0;17136:147::o;19039:862::-;9007:6;;-1:-1:-1;;;;;9007:6:0;187:10;9007:22;8999:67;;;;-1:-1:-1;;;8999:67:0;;;;;;;:::i;:::-;19144:4:::1;19133:15:::0;::::1;;;19129:765;;;-1:-1:-1::0;;;;;19174:12:0;::::1;;::::0;;;:3:::1;:12;::::0;;;;;::::1;;19173:13;19165:54;;;::::0;-1:-1:-1;;;19165:54:0;;7907:2:1;19165:54:0::1;::::0;::::1;7889:21:1::0;7946:2;7926:18;;;7919:30;7985;7965:18;;;7958:58;8033:18;;19165:54:0::1;7705:352:1::0;19165:54:0::1;-1:-1:-1::0;;;;;19237:13:0;::::1;19253:1;19237:13:::0;;;:4:::1;:13;::::0;;;;;:17;19234:107:::1;;-1:-1:-1::0;;;;;19311:13:0;::::1;;::::0;;;:4:::1;:13;::::0;;;;;19291:34:::1;::::0;:19:::1;:34::i;:::-;-1:-1:-1::0;;;;;19275:13:0;::::1;;::::0;;;:4:::1;:13;::::0;;;;:50;19234:107:::1;-1:-1:-1::0;;;;;;19355:12:0::1;;::::0;;;:3:::1;:12;::::0;;;;:19;;-1:-1:-1;;19355:19:0::1;19370:4;19355:19:::0;;::::1;::::0;;;19389:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;19389:23:0::1;::::0;;::::1;::::0;;19039:862::o;19129:765::-:1;19434:16:::0;19430:464:::1;;-1:-1:-1::0;;;;;19475:12:0;::::1;;::::0;;;:3:::1;:12;::::0;;;;;::::1;;19467:53;;;::::0;-1:-1:-1;;;19467:53:0;;8264:2:1;19467:53:0::1;::::0;::::1;8246:21:1::0;8303:2;8283:18;;;8276:30;8342;8322:18;;;8315:58;8390:18;;19467:53:0::1;8062:352:1::0;19467:53:0::1;19540:9;19535:348;19559:9;:16:::0;19555:20;::::1;19535:348;;;19621:7;-1:-1:-1::0;;;;;19605:23:0::1;:9;19615:1;19605:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;19605:12:0::1;:23;19601:267;;;19668:9;19678:16:::0;;:20:::1;::::0;19697:1:::1;::::0;19678:20:::1;:::i;:::-;19668:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;19653:9:::1;:12:::0;;-1:-1:-1;;;;;19668:31:0;;::::1;::::0;19663:1;;19653:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;19653:46:0::1;-1:-1:-1::0;;;;;19653:46:0;;::::1;;::::0;;19722:13;;::::1;::::0;;:4:::1;:13:::0;;;;;;:17;;;19762:3:::1;:12:::0;;;;:20;;-1:-1:-1;;19762:20:0::1;::::0;;19805:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;19805:15:0;;;;;-1:-1:-1;;;;;;19805:15:0::1;::::0;;;;;19843:5:::1;;19601:267;19577:3:::0;::::1;::::0;::::1;:::i;:::-;;;;19535:348;;;;19430:464;19039:862:::0;;:::o;14081:266::-;14179:4;14196:36;14206:6;14214:9;14225:6;14196:9;:36::i;:::-;-1:-1:-1;;;;;;14274:19:0;;;;;;:11;:19;;;;;;;;187:10;14274:33;;;;;;;;;14243:74;;14252:6;;14274:42;;14310:6;;14274:42;:::i;:::-;14243:8;:74::i;:::-;-1:-1:-1;14335:4:0;14081:266;;;;;:::o;28272:112::-;9007:6;;-1:-1:-1;;;;;9007:6:0;187:10;9007:22;8999:67;;;;-1:-1:-1;;;8999:67:0;;;;;;;:::i;:::-;11819:7;11846:6;;28328:48:::1;::::0;-1:-1:-1;;;;;11846:6:0;;;;28354:21:::1;28328:48:::0;::::1;;;::::0;28354:21;;28328:48;11819:7;28328:48;28354:21;11846:6;28328:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;28272:112::o:0;20231:250::-;20297:7;20336;;20325;:18;;20317:73;;;;-1:-1:-1;;;20317:73:0;;9287:2:1;20317:73:0;;;9269:21:1;9326:2;9306:18;;;9299:30;9365:34;9345:18;;;9338:62;-1:-1:-1;;;9416:18:1;;;9409:40;9466:19;;20317:73:0;9085:406:1;20317:73:0;20401:19;20424:10;:8;:10::i;:::-;20401:33;-1:-1:-1;20452:21:0;20401:33;20452:7;:21;:::i;:::-;20445:28;20231:250;-1:-1:-1;;;20231:250:0:o;14355:215::-;187:10;14443:4;14492:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14492:34:0;;;;;;;;;;14443:4;;14460:80;;14483:7;;14492:47;;14529:10;;14492:47;:::i;11868:795::-;9007:6;;-1:-1:-1;;;;;9007:6:0;187:10;9007:22;8999:67;;;;-1:-1:-1;;;8999:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11949:22:0;::::1;11941:96;;;;-1:-1:-1::0;;;11941:96:0::1;;;;;;;:::i;:::-;12068:4;::::0;-1:-1:-1;;;;;12056:16:0;;::::1;12068:4:::0;::::1;12056:16;;12048:90;;;;-1:-1:-1::0;;;12048:90:0::1;;;;;;;:::i;:::-;12168:6;::::0;;12149:33:::1;::::0;-1:-1:-1;;;;;12168:6:0;;::::1;::::0;12149:18:::1;:33::i;:::-;12193:34;12212:8;12222:4;12193:18;:34::i;:::-;12238:37;12260:8;12270:4;12238:21;:37::i;:::-;12322:6;::::0;12300:10:::1;::::0;-1:-1:-1;;;;;12300:10:0;;::::1;12322:6:::0;::::1;12300:29;12296:78;;;12344:10;:30:::0;;-1:-1:-1;;;;;;12344:30:0::1;-1:-1:-1::0;;;;;12344:30:0;::::1;;::::0;;12296:78:::1;12437:6;::::0;12427:17:::1;::::0;-1:-1:-1;;;;;12437:6:0::1;12427:9;:17::i;:::-;12395:19;12407:6:::0;;-1:-1:-1;;;;;12407:6:0;;::::1;12395:19:::0;;:11:::1;:19;::::0;;;;;;;:29;;::::1;::::0;;;;;;;:49;;;;12468:6;;12395:19;;12458:17:::1;::::0;12468:6:::1;12458:9;:17::i;:::-;:21;12455:99;;;12506:6;::::0;12496:46:::1;::::0;-1:-1:-1;;;;;12506:6:0::1;12514:8:::0;12524:17:::1;12506:6:::0;12524:9:::1;:17::i;:::-;12496:9;:46::i;:::-;;12455:99;12574:6;:17:::0;;-1:-1:-1;;;;;;12574:17:0::1;-1:-1:-1::0;;;;;12574:17:0;::::1;::::0;;::::1;::::0;;12607:38:::1;::::0;12574:17;;;;12607:38:::1;::::0;12574:6;12607:38:::1;11868:795:::0;:::o;13953:120::-;14006:4;14030:35;14038:7;-1:-1:-1;;14030:7:0;:35::i;16744:384::-;9007:6;;-1:-1:-1;;;;;9007:6:0;187:10;9007:22;8999:67;;;;-1:-1:-1;;;8999:67:0;;;;;;;:::i;:::-;16874:6:::1;;16863:7;:17;;:57;;;;;16914:6;;16901:9;:19;;16863:57;:97;;;;;16954:6;;16941:9;:19;;16863:97;16855:124;;;::::0;::::1;;17033:4;17020:9:::0;16998:19:::1;17008:9:::0;16998:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;16990:48;;;::::0;::::1;;17049:5;:15:::0;;;;17075:5:::1;:17:::0;17103:5:::1;:17:::0;16744:384::o;18912:119::-;9007:6;;-1:-1:-1;;;;;9007:6:0;187:10;9007:22;8999:67;;;;-1:-1:-1;;;8999:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18999:14:0;;;::::1;;::::0;;;:5:::1;:14;::::0;;;;:24;;-1:-1:-1;;18999:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18912:119::o;17291:157::-;9007:6;;-1:-1:-1;;;;;9007:6:0;187:10;9007:22;8999:67;;;;-1:-1:-1;;;8999:67:0;;;;;;;:::i;:::-;17378:15:::1;:27:::0;;;;17416:12:::1;:24:::0;17291:157::o;18540:187::-;9007:6;;-1:-1:-1;;;;;9007:6:0;187:10;9007:22;8999:67;;;;-1:-1:-1;;;8999:67:0;;;;;;;:::i;:::-;18630:10:::1;::::0;-1:-1:-1;;;;;18630:23:0;;::::1;:10:::0;::::1;:23;;18622:55;;;::::0;-1:-1:-1;;;18622:55:0;;10518:2:1;18622:55:0::1;::::0;::::1;10500:21:1::0;10557:2;10537:18;;;10530:30;-1:-1:-1;;;10576:18:1;;;10569:49;10635:18;;18622:55:0::1;10316:343:1::0;18622:55:0::1;18688:10;:31:::0;;-1:-1:-1;;;;;;18688:31:0::1;-1:-1:-1::0;;;;;18688:31:0;;;::::1;::::0;;;::::1;::::0;;18540:187::o;9862:1911::-;9007:6;;-1:-1:-1;;;;;9007:6:0;187:10;9007:22;8999:67;;;;-1:-1:-1;;;8999:67:0;;;;;;;:::i;:::-;10041:3:::1;::::0;::::1;;10040:4;10032:13;;;::::0;::::1;;10058;:40:::0;;-1:-1:-1;;;;;10058:40:0;;::::1;-1:-1:-1::0;;;;;;10058:40:0;;::::1;::::0;::::1;::::0;;;10109:10:::1;:34:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;10058:13:::1;10156:20:::0;;;:5:::1;:20;::::0;;;;;;;:27;;-1:-1:-1;;10156:27:0;;::::1;10058:40:::0;10156:27;;::::1;::::0;;;10200:10;;;;::::1;10194:17:::0;;;;;:24;;;;::::1;;::::0;;10231:18;;::::1;::::0;:5:::1;::::0;:18;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;10260:22:0;;::::1;::::0;:7:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;10310:11:0::1;10293:14;:28:::0;10382:9:::1;:14:::0;;-1:-1:-1;;10382:14:0::1;10394:2;10382:14:::0;;::::1;::::0;;;10411:12:::1;:24:::0;10574:12:::1;::::0;10570:16:::1;::::0;:2:::1;:16;:::i;:::-;10552:14;;:35;;;;:::i;:::-;10542:7;:45:::0;;;10616:13:::1;::::0;-1:-1:-1;;10616:13:0::1;:::i;:::-;10609:21;::::0;-1:-1:-1;;10609:21:0::1;:::i;:::-;10598:7;:33:::0;10675:14:::1;::::0;10644:9:::1;:46:::0;;-1:-1:-1;;;;;;10644:46:0::1;-1:-1:-1::0;;;;;10675:14:0;;::::1;10644:46:::0;;::::1;::::0;;10728:19:::1;::::0;;-1:-1:-1;;;10728:19:0;;;;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;10675:14;10728:19:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;10710:49:0::1;;10760:9;;;;;;;;;-1:-1:-1::0;;;;;10760:9:0::1;-1:-1:-1::0;;;;;10760:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10710:82;::::0;-1:-1:-1;;;;;;10710:82:0::1;::::0;;;;;;-1:-1:-1;;;;;12814:15:1;;;10710:82:0::1;::::0;::::1;12796:34:1::0;10786:4:0::1;12846:18:1::0;;;12839:43;12731:18;;10710:82:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10701:6;:91:::0;;-1:-1:-1;;;;;;10701:91:0::1;-1:-1:-1::0;;;;;10701:91:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;10803:12:0;;;:4:::1;:12;::::0;;;;;;;:19;;-1:-1:-1;;10803:19:0::1;-1:-1:-1::0;10803:19:0::1;::::0;;10853:4:::1;10833:26:::0;;:11:::1;:26:::0;;;;;10868:9:::1;::::0;;;::::1;10833:46:::0;;;;;;-1:-1:-1;;10833:66:0;;10931:7:::1;::::0;10949:6:::1;::::0;10931:14:::1;::::0;10941:4:::1;10931:14;:::i;:::-;10930:25;;;;:::i;:::-;10920:7;:35:::0;10975:14:::1;::::0;10999:6:::1;::::0;10975:20:::1;::::0;10992:3:::1;10975:20;:::i;:::-;10974:31;;;;:::i;:::-;10966:5;:39:::0;11024:7:::1;::::0;11040:4:::1;::::0;11024:12:::1;::::0;11034:2:::1;11024:12;:::i;:::-;11023:21;;;;:::i;:::-;11016:4;:28:::0;11064:14:::1;::::0;;11087:4:::1;::::0;11064:19:::1;::::0;:14;:19:::1;:::i;:::-;11063:28;;;;:::i;:::-;11055:5;:36:::0;11119:7:::1;::::0;11134:5:::1;::::0;11119:11:::1;::::0;11129:1:::1;11119:11;:::i;:::-;11118:21;;;;:::i;:::-;11102:13;:37:::0;11164:7:::1;::::0;11180:5:::1;::::0;11164:12:::1;::::0;11174:2:::1;11164:12;:::i;:::-;11163:22;;;;:::i;:::-;11150:10;:35:::0;11206:14:::1;::::0;11198:42:::1;::::0;-1:-1:-1;;;;;11206:14:0::1;-1:-1:-1::0;;11198:7:0::1;:42::i;:::-;-1:-1:-1::0;11253:3:0::1;:10:::0;;-1:-1:-1;;11253:10:0::1;11259:4;11253:10:::0;;::::1;::::0;;;11290:7:::1;::::0;;11253:3:::1;11279:7;11819::::0;11846:6;-1:-1:-1;;;;;11846:6:0;;11781:79;11279:7:::1;-1:-1:-1::0;;;;;11274:13:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;11274:13:0;:23;11328:7:::1;11819::::0;11846:6;-1:-1:-1;;;;;11846:6:0;;11781:79;11328:7:::1;11322:4;::::0;11337:7:::1;::::0;11313:32:::1;::::0;1852:25:1;;;-1:-1:-1;;;;;11313:32:0;;::::1;::::0;11322:4;;::::1;::::0;11313:32:::1;::::0;1840:2:1;1825:18;11313:32:0::1;;;;;;;11390:9;::::0;11358:62:::1;::::0;11375:4:::1;::::0;-1:-1:-1;;;;;11390:9:0::1;-1:-1:-1::0;;11358:8:0::1;:62::i;:::-;11433:53;11443:7;11819::::0;11846:6;-1:-1:-1;;;;;11846:6:0;;11781:79;11443:7:::1;11460:4;11467:18;11477:7;11819::::0;11846:6;-1:-1:-1;;;;;11846:6:0;;11781:79;11433:53:::1;-1:-1:-1::0;11513:9:0::1;::::0;-1:-1:-1;;;;;11513:9:0::1;:25;11546:21;11591:4;11611:24;11591:4:::0;11611:9:::1;:24::i;:::-;11650:1;11667::::0;11684:7:::1;11819::::0;11846:6;-1:-1:-1;;;;;11846:6:0;;11781:79;11684:7:::1;11706:15;11513:219;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;11753:12:0::1;11743:7;:22:::0;-1:-1:-1;;;;;9862:1911:0:o;15969:379::-;9007:6;;-1:-1:-1;;;;;9007:6:0;187:10;9007:22;8999:67;;;;-1:-1:-1;;;8999:67:0;;;;;;;:::i;:::-;16094:6:::1;;16083:7;:17;;:57;;;;;16134:6;;16121:9;:19;;16083:57;:97;;;;;16174:6;;16161:9;:19;;16083:97;16075:124;;;::::0;::::1;;16253:4;16240:9:::0;16218:19:::1;16228:9:::0;16218:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;16210:48;;;::::0;::::1;;16269:5;:15:::0;;;;16295:5:::1;:17:::0;16323:5:::1;:17:::0;15969:379::o;13417:184::-;-1:-1:-1;;;;;13507:12:0;;13483:7;13507:12;;;:3;:12;;;;;;;;13503:38;;;-1:-1:-1;;;;;;13528:13:0;;;;;:4;:13;;;;;;;13417:184::o;13503:38::-;-1:-1:-1;;;;;13579:13:0;;;;;;:4;:13;;;;;;13559:34;;:19;:34::i;12671:194::-;9007:6;;-1:-1:-1;;;;;9007:6:0;187:10;9007:22;8999:67;;;;-1:-1:-1;;;8999:67:0;;;;;;;:::i;:::-;12757:6:::1;::::0;;12738:33:::1;::::0;-1:-1:-1;;;;;12757:6:0;;::::1;::::0;12738:18:::1;:33::i;:::-;12799:1;12782:19:::0;;-1:-1:-1;;;;;;12782:19:0::1;::::0;;12817:40:::1;::::0;12799:1;;12817:40:::1;::::0;12799:1;;12817:40:::1;12671:194::o:0;15357:379::-;9007:6;;-1:-1:-1;;;;;9007:6:0;187:10;9007:22;8999:67;;;;-1:-1:-1;;;8999:67:0;;;;;;;:::i;:::-;15438:16;15434:295:::1;;-1:-1:-1::0;;;;;;15471:10:0::1;15484:5;15471:10:::0;;;:4:::1;:10;::::0;;;;:18;;-1:-1:-1;;15471:18:0::1;::::0;;19039:862::o;15434:295::-:1;15526:4;::::0;:9;15522:127:::1;;15589:7;15582:4;;15564:15;:22;;;;:::i;:::-;:32;15556:77;;;::::0;-1:-1:-1;;;15556:77:0;;14018:2:1;15556:77:0::1;::::0;::::1;14000:21:1::0;;;14037:18;;;14030:30;14096:34;14076:18;;;14069:62;14148:18;;15556:77:0::1;13816:356:1::0;15556:77:0::1;-1:-1:-1::0;;;;;15663:10:0;::::1;;::::0;;;:4:::1;:10;::::0;;;;:17;;-1:-1:-1;;15663:17:0::1;15676:4;15663:17;::::0;;15702:15:::1;15695:4;:22:::0;15357:379;;:::o;13040:75::-;13081:13;13105:7;13098:14;;;;;:::i;17456:301::-;9007:6;;-1:-1:-1;;;;;9007:6:0;187:10;9007:22;8999:67;;;;-1:-1:-1;;;8999:67:0;;;;;;;:::i;:::-;17539:13:::1;17577:7;17566;17556;;:17;;;;:::i;:::-;17555:29;;;;:::i;:::-;17539:45;;17623:4;17613:7;;:14;;;;:::i;:::-;17603:5;:25;;17595:73;;;;-1:-1:-1::0;;;17595:73:0::1;;;;;;;:::i;:::-;17679:7;:15:::0;;;17714:14:::1;::::0;17742:7;;17714:24:::1;::::0;17731:7;;17714:24:::1;:::i;:::-;17713:36;;;;:::i;:::-;17705:5;:44:::0;-1:-1:-1;;;17456:301:0:o;14578:225::-;187:10;14671:4;14720:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14720:34:0;;;;;;;;;;14671:4;;14688:85;;14711:7;;14720:52;;14757:15;;14720:52;:::i;13609:167::-;13687:4;13704:42;187:10;13728:9;13739:6;13704:9;:42::i;17765:266::-;9007:6;;-1:-1:-1;;;;;9007:6:0;187:10;9007:22;8999:67;;;;-1:-1:-1;;;8999:67:0;;;;;;;:::i;:::-;17839:13:::1;17871:1;17866;17856:7;;:11;;;;:::i;:::-;17855:17;;;;:::i;:::-;17839:33;;17912:4;17902:7;;:14;;;;:::i;:::-;17892:5;:25;;17884:73;;;;-1:-1:-1::0;;;17884:73:0::1;;;;;;;:::i;:::-;17968:4;:12:::0;;;18000:14:::1;::::0;18022:1;;18000:18:::1;::::0;18017:1;;18000:18:::1;:::i;:::-;17999:24;;;;:::i;:::-;17991:5;:32:::0;-1:-1:-1;;;17765:266:0:o;18733:171::-;9007:6;;-1:-1:-1;;;;;9007:6:0;187:10;9007:22;8999:67;;;;-1:-1:-1;;;8999:67:0;;;;;;;:::i;:::-;18810:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;18810:32:0::1;-1:-1:-1::0;;;;18810:32:0;;::::1;;::::0;;18858:38:::1;::::0;::::1;::::0;::::1;::::0;18834:8;1679:14:1;1672:22;1654:41;;1642:2;1627:18;;1514:187;18858:38:0::1;;;;;;;;18733:171:::0;:::o;16356:380::-;9007:6;;-1:-1:-1;;;;;9007:6:0;187:10;9007:22;8999:67;;;;-1:-1:-1;;;8999:67:0;;;;;;;:::i;:::-;16482:6:::1;;16471:7;:17;;:57;;;;;16522:6;;16509:9;:19;;16471:57;:97;;;;;16562:6;;16549:9;:19;;16471:97;16463:124;;;::::0;::::1;;16641:4;16628:9:::0;16606:19:::1;16616:9:::0;16606:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;16598:48;;;::::0;::::1;;16657:5;:15:::0;;;;16683:5:::1;:17:::0;16711:5:::1;:17:::0;16356:380::o;14811:538::-;9007:6;;-1:-1:-1;;;;;9007:6:0;187:10;9007:22;8999:67;;;;-1:-1:-1;;;8999:67:0;;;;;;;:::i;:::-;14884:29:::1;14935:9;14884:61;;14956:11;14988:10;-1:-1:-1::0;;;;;14988:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14970:47:0::1;;15026:4;15033:10;-1:-1:-1::0;;;;;15033:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14970:81;::::0;-1:-1:-1;;;;;;14970:81:0::1;::::0;;;;;;-1:-1:-1;;;;;12814:15:1;;;14970:81:0::1;::::0;::::1;12796:34:1::0;12866:15;;12846:18;;;12839:43;12731:18;;14970:81:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14956:95:::0;-1:-1:-1;;;;;;15066:17:0;::::1;15062:197;;15127:10;-1:-1:-1::0;;;;;15127:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15109:50:0::1;;15168:4;15175:10;-1:-1:-1::0;;;;;15175:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15109:84;::::0;-1:-1:-1;;;;;;15109:84:0::1;::::0;;;;;;-1:-1:-1;;;;;12814:15:1;;;15109:84:0::1;::::0;::::1;12796:34:1::0;12866:15;;12846:18;;;12839:43;12731:18;;15109:84:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15100:6;:93:::0;;-1:-1:-1;;;;;;15100:93:0::1;-1:-1:-1::0;;;;;15100:93:0;;;::::1;::::0;;;::::1;::::0;;15062:197:::1;;;15235:6;:12:::0;;-1:-1:-1;;;;;;15235:12:0::1;-1:-1:-1::0;;;;;15235:12:0;::::1;;::::0;;15062:197:::1;15269:9;:22:::0;;-1:-1:-1;;;;;;15269:22:0::1;-1:-1:-1::0;;;;;15269:22:0;::::1;;::::0;;15302:39:::1;15319:4;15326:9:::0;-1:-1:-1;;15302:8:0::1;:39::i;18336:196::-:0;9007:6;;-1:-1:-1;;;;;9007:6:0;187:10;9007:22;8999:67;;;;-1:-1:-1;;;8999:67:0;;;;;;;:::i;:::-;18429:13:::1;::::0;-1:-1:-1;;;;;18429:26:0;;::::1;:13:::0;::::1;:26;;18421:58;;;::::0;-1:-1:-1;;;18421:58:0;;10518:2:1;18421:58:0::1;::::0;::::1;10500:21:1::0;10557:2;10537:18;;;10530:30;-1:-1:-1;;;10576:18:1;;;10569:49;10635:18;;18421:58:0::1;10316:343:1::0;18421:58:0::1;18490:13;:34:::0;;-1:-1:-1;;;;;;18490:34:0::1;-1:-1:-1::0;;;;;18490:34:0;;;::::1;::::0;;;::::1;::::0;;18336:196::o;24480:267::-;9007:6;;-1:-1:-1;;;;;9007:6:0;187:10;9007:22;8999:67;;;;-1:-1:-1;;;8999:67:0;;;;;;;:::i;:::-;24533:8:::1;::::0;::::1;;24532:9;24524:49;;;::::0;-1:-1:-1;;;24524:49:0;;14783:2:1;24524:49:0::1;::::0;::::1;14765:21:1::0;14822:2;14802:18;;;14795:30;14861:29;14841:18;;;14834:57;14908:18;;24524:49:0::1;14581:351:1::0;24524:49:0::1;24584:42;24614:4;24621;24584:21;:42::i;:::-;24659:6;::::0;24637:35:::1;::::0;-1:-1:-1;;;;;24659:6:0::1;::::0;24637:21:::1;:35::i;:::-;24685:8;:15:::0;;-1:-1:-1;;24685:15:0::1;24696:4;24685:15;::::0;;24711:21:::1;:28:::0;;-1:-1:-1;;;;24711:28:0::1;-1:-1:-1::0;;;24711:28:0::1;::::0;;24480:267::o;18039:289::-;9007:6;;-1:-1:-1;;;;;9007:6:0;187:10;9007:22;8999:67;;;;-1:-1:-1;;;8999:67:0;;;;;;;:::i;:::-;18239:16:::1;18219;18209:7;;:26;;;;:::i;:::-;18208:47;;;;:::i;:::-;18192:13;:63:::0;18280:7:::1;::::0;18307:13;;18280:23:::1;::::0;18290:13;;18280:23:::1;:::i;:::-;18279:41;;;;:::i;:::-;18266:10;:54:::0;-1:-1:-1;;;;18039:289:0:o;20493:342::-;-1:-1:-1;;;;;20588:20:0;;20580:69;;;;-1:-1:-1;;;20580:69:0;;15139:2:1;20580:69:0;;;15121:21:1;15178:2;15158:18;;;15151:30;15217:34;15197:18;;;15190:62;-1:-1:-1;;;15268:18:1;;;15261:34;15312:19;;20580:69:0;14937:400:1;20580:69:0;-1:-1:-1;;;;;20668:21:0;;20660:68;;;;-1:-1:-1;;;20660:68:0;;15544:2:1;20660:68:0;;;15526:21:1;15583:2;15563:18;;;15556:30;15622:34;15602:18;;;15595:62;-1:-1:-1;;;15673:18:1;;;15666:32;15715:19;;20660:68:0;15342:398:1;20660:68:0;-1:-1:-1;;;;;20741:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;20794:33;;1852:25:1;;;20794:33:0;;1825:18:1;20794:33:0;;;;;;;20493:342;;;:::o;20843:1701::-;20922:4;-1:-1:-1;;;;;20947:18:0;;20939:68;;;;-1:-1:-1;;;20939:68:0;;15947:2:1;20939:68:0;;;15929:21:1;15986:2;15966:18;;;15959:30;16025:34;16005:18;;;15998:62;-1:-1:-1;;;16076:18:1;;;16069:35;16121:19;;20939:68:0;15745:401:1;20939:68:0;-1:-1:-1;;;;;21026:16:0;;21018:64;;;;-1:-1:-1;;;21018:64:0;;16353:2:1;21018:64:0;;;16335:21:1;16392:2;16372:18;;;16365:30;16431:34;16411:18;;;16404:62;-1:-1:-1;;;16482:18:1;;;16475:33;16525:19;;21018:64:0;16151:399:1;21018:64:0;21110:1;21101:6;:10;21093:64;;;;-1:-1:-1;;;21093:64:0;;16757:2:1;21093:64:0;;;16739:21:1;16796:2;16776:18;;;16769:30;16835:34;16815:18;;;16808:62;-1:-1:-1;;;16886:18:1;;;16879:39;16935:19;;21093:64:0;16555:405:1;21093:64:0;21171:20;21182:4;21188:2;21171:10;:20::i;:::-;21168:743;;;21212:8;;;;21208:83;;21241:34;;-1:-1:-1;;;21241:34:0;;17167:2:1;21241:34:0;;;17149:21:1;17206:2;17186:18;;;17179:30;17245:26;17225:18;;;17218:54;17289:18;;21241:34:0;16965:348:1;21208:83:0;21309:15;;;;21305:352;;;-1:-1:-1;;;;;21349:10:0;;;;;;:4;:10;;;;;;;;21345:297;;;21408:16;:12;21423:1;21408:16;:::i;:::-;-1:-1:-1;;;;;21391:13:0;;;;;;:9;:13;;;;;;:33;;21383:42;;;;;;-1:-1:-1;;;;;21448:13:0;;;;;;:9;:13;;;;;21464:12;21448:28;;21345:297;;;21552:16;:12;21567:1;21552:16;:::i;:::-;-1:-1:-1;;;;;21533:15:0;;;;;;:9;:15;;;;;;:35;;21525:44;;;;;;-1:-1:-1;;;;;21592:15:0;;;;;;:9;:15;;;;;21610:12;21592:30;;21345:297;21689:7;;21679:6;:17;;21671:63;;;;-1:-1:-1;;;21671:63:0;;17520:2:1;21671:63:0;;;17502:21:1;17559:2;17539:18;;;17532:30;17598:34;17578:18;;;17571:62;-1:-1:-1;;;17649:18:1;;;17642:31;17690:19;;21671:63:0;17318:397:1;21671:63:0;21758:14;;-1:-1:-1;;;;;21752:20:0;;;21758:14;;21752:20;;;;:33;;-1:-1:-1;;;;;;21777:8:0;;;;;;:4;:8;;;;;;;;21776:9;21752:33;21749:151;;;21840:4;;21830:6;21814:13;21824:2;21814:9;:13::i;:::-;:22;;;;:::i;:::-;:30;;21806:78;;;;-1:-1:-1;;;21806:78:0;;17922:2:1;21806:78:0;;;17904:21:1;17961:2;17941:18;;;17934:30;18000:34;17980:18;;;17973:62;-1:-1:-1;;;18051:18:1;;;18044:33;18094:19;;21806:78:0;17720:399:1;21806:78:0;-1:-1:-1;;;;;21954:11:0;;21921:12;21954:11;;;:5;:11;;;;;;21936:4;;21954:11;;;:24;;-1:-1:-1;;;;;;21969:9:0;;;;;;:5;:9;;;;;;;;21954:24;21951:70;;;-1:-1:-1;22004:5:0;21951:70;-1:-1:-1;;;;;22037:8:0;;;;;;:4;:8;;;;;;;;22033:454;;;22067:16;;-1:-1:-1;;;22067:16:0;;;;22066:17;:59;;;;-1:-1:-1;22104:21:0;;-1:-1:-1;;;22104:21:0;;;;22066:59;22062:408;;;22160:28;22191:24;22209:4;22191:9;:24::i;:::-;22160:55;;22262:13;;22238:20;:37;22234:221;;22327:10;;22303:20;:34;22300:77;;-1:-1:-1;22364:10:0;;22300:77;22399:36;22414:20;22399:14;:36::i;:::-;22141:329;22062:408;22505:31;22510:4;22516:2;22520:6;22528:7;22505:4;:31::i;:::-;22498:38;20843:1701;-1:-1:-1;;;;;20843:1701:0:o;27405:161::-;27447:7;27468:15;27485;27504:19;:17;:19::i;:::-;27467:56;;-1:-1:-1;27467:56:0;-1:-1:-1;27541:17:0;27467:56;;27541:17;:::i;:::-;27534:24;;;;27405:161;:::o;20004:219::-;20073:4;11846:6;;-1:-1:-1;;;;;20097:15:0;;;11846:6;;20097:15;;;;:33;;-1:-1:-1;11819:7:0;11846:6;-1:-1:-1;;;;;20117:13:0;;;11846:6;;20117:13;;20097:33;:45;;;;-1:-1:-1;;;;;;20135:7:0;;;;;;:3;:7;;;;;;;;20134:8;20097:45;:59;;;;-1:-1:-1;;;;;;20147:9:0;;;;;;:3;:9;;;;;;;;20146:10;20097:59;:73;;;;-1:-1:-1;20166:4:0;;-1:-1:-1;;;;;20160:10:0;;;20166:4;;20160:10;;20097:73;:93;;;;-1:-1:-1;;;;;;20174:16:0;;;;20097:93;:118;;;;-1:-1:-1;;;;;;20194:21:0;;20210:4;20194:21;;20090:125;20004:219;-1:-1:-1;;;20004:219:0:o;22552:1487::-;8881:16;:23;;-1:-1:-1;;;;8881:23:0;-1:-1:-1;;;8881:23:0;;;22660:12:::1;::::0;22642:15:::1;::::0;:30:::1;::::0;22660:12;22642:30:::1;:::i;:::-;22638:61;;22692:7;;22638:61;22709:17;22809:1;22792:12;;22774:15;;:30;;;;:::i;:::-;22754:15;::::0;22731:38:::1;::::0;:20;:38:::1;:::i;:::-;22730:75;;;;:::i;:::-;22729:81;;;;:::i;:::-;22709:101:::0;-1:-1:-1;22823:20:0::1;22846:32;22709:101:::0;22846:20;:32:::1;:::i;:::-;22915:16;::::0;;22929:1:::1;22915:16:::0;;;;;::::1;::::0;;22823:55;;-1:-1:-1;22891:21:0::1;::::0;22915:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;22915:16:0::1;22891:40;;22960:4;22942;22947:1;22942:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22942:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;22986:9:::1;::::0;:16:::1;::::0;;-1:-1:-1;;;22986:16:0;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;22942:7;;22986:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22976:4;22981:1;22976:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22976:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;23015:9:::1;::::0;:191:::1;::::0;-1:-1:-1;;;23015:191:0;;:9;::::1;::::0;:60:::1;::::0;:191:::1;::::0;23090:12;;23015:9:::1;::::0;23133:4;;23160::::1;::::0;23180:15:::1;::::0;23015:191:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;23221:24;23329:1;23312:12;;23294:15;;:30;;;;:::i;:::-;23274:15;::::0;23250:39:::1;::::0;:21:::1;:39;:::i;:::-;23249:76;;;;:::i;:::-;23248:82;;;;:::i;:::-;23221:109:::0;-1:-1:-1;23347:13:0;;23343:350:::1;;23377:9;::::0;23548:10:::1;::::0;23377:230:::1;::::0;-1:-1:-1;;;23377:230:0;;-1:-1:-1;;;;;23377:9:0;;::::1;::::0;:25:::1;::::0;23410:16;;23377:230:::1;::::0;23454:4:::1;::::0;23478:9;;23377::::1;::::0;;;23548:10:::1;::::0;23577:15:::1;::::0;23377:230:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;23627:54:0::1;::::0;;19931:25:1;;;19987:2;19972:18;;19965:34;;;20015:18;;;20008:34;;;23627:54:0::1;::::0;-1:-1:-1;19919:2:1;19904:18;23627:54:0::1;;;;;;;23343:350;23742:1;23707:32;23730:9:::0;23707:20;:32:::1;:::i;:::-;:36;23703:329;;;23866:7;::::0;23857:6:::1;::::0;23787:21:::1;::::0;23762::::1;::::0;23842:22:::1;::::0;23787:21;23842:22:::1;:::i;:::-;:32;;;;:::i;:::-;23824:50;;23889:12;23928:4;;23919:6;;23904:13;:22;;;;:::i;:::-;:29;;;;:::i;:::-;23935:10;::::0;:25:::1;::::0;23889:44;;-1:-1:-1;;;;;;23935:10:0::1;::::0;:25;::::1;;;::::0;23889:44;;23935:10:::1;:25:::0;:10;:25;23889:44;23935:10;:25;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;23976:13:0::1;::::0;:31:::1;::::0;-1:-1:-1;;;;;23976:13:0;;::::1;::::0;:31;::::1;;;::::0;23999:7;;23976:13:::1;:31:::0;:13;:31;23999:7;23976:13;:31;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;23745:287;;;23703:329;22627:1412;;;;8915:1;-1:-1:-1::0;8927:16:0;:24;;-1:-1:-1;;;;8927:24:0;;;22552:1487::o;24961:1181::-;25076:16;;25050:4;;25076:16;;;;;25071:237;;25113:28;25132:4;25138:2;25113:18;:28::i;:::-;25165:16;;;;;;;25164:17;:41;;;;;25185:20;25196:4;25202:2;25185:10;:20::i;:::-;25160:137;;;25230:47;;-1:-1:-1;;;25230:47:0;;20255:2:1;25230:47:0;;;20237:21:1;20294:2;20274:18;;;20267:30;20333:34;20313:18;;;20306:62;-1:-1:-1;;;20384:18:1;;;20377:35;20429:19;;25230:47:0;20053:401:1;25160:137:0;25328:25;25356:38;25367:4;25373:2;25377:7;25386;25356:10;:38::i;:::-;25433:14;;;;-1:-1:-1;;;;;25420:10:0;;;;;;:4;:10;;;;;;25328:66;;-1:-1:-1;25420:27:0;;;:::i;:::-;-1:-1:-1;;;;;25407:10:0;;;;;;;:4;:10;;;;;;:40;;;;25480:22;;;;25469:8;;;;;;;;;;:33;;25480:22;25469:33;:::i;:::-;-1:-1:-1;;;;;25458:8:0;;;;;;;:4;:8;;;;;;;;:44;;;;25519:9;;;;;:3;:9;;;;;;;:21;;;;-1:-1:-1;;;;;;25533:7:0;;;;;;:3;:7;;;;;;;;25532:8;25519:21;25515:344;;;-1:-1:-1;;;;;25570:10:0;;;;;;:4;:10;;;;;;:20;;25583:7;;25570:20;:::i;:::-;-1:-1:-1;;;;;25557:10:0;;;;;;:4;:10;;;;;:33;25515:344;;;-1:-1:-1;;;;;25613:9:0;;;;;;:3;:9;;;;;;;;25612:10;:21;;;;-1:-1:-1;;;;;;25626:7:0;;;;;;:3;:7;;;;;;;;25612:21;25608:251;;;25672:22;;-1:-1:-1;;;;;25661:8:0;;25672:22;25661:8;;;:4;:8;;;;;;:33;;25672:22;25661:33;:::i;:::-;-1:-1:-1;;;;;25650:8:0;;;;;;:4;:8;;;;;:44;25608:251;;;-1:-1:-1;;;;;25718:9:0;;;;;;:3;:9;;;;;;;;:20;;;;-1:-1:-1;;;;;;25731:7:0;;;;;;:3;:7;;;;;;;;25718:20;25714:145;;;-1:-1:-1;;;;;25768:10:0;;;;;;:4;:10;;;;;;:20;;25781:7;;25768:20;:::i;:::-;-1:-1:-1;;;;;25755:10:0;;;;;;;:4;:10;;;;;;:33;;;;25825:22;;25814:8;;;;;;;;;;:33;;25825:22;25814:33;:::i;:::-;-1:-1:-1;;;;;25803:8:0;;;;;;:4;:8;;;;;:44;25714:145;25875:17;;;;:21;25871:79;;25911:39;25926:4;25932:6;:17;;;25911:14;:39::i;:::-;25979:1;25965:6;:11;;;:15;:34;;;;25998:1;25984:6;:11;;;:15;25965:34;25961:91;;;26014:38;26027:6;:11;;;26040:6;:11;;;26014:12;:38::i;:::-;26085:2;-1:-1:-1;;;;;26070:42:0;26079:4;-1:-1:-1;;;;;26070:42:0;;26089:6;:22;;;26070:42;;;;1852:25:1;;1840:2;1825:18;;1706:177;26070:42:0;;;;;;;;-1:-1:-1;26130:4:0;;24961:1181;-1:-1:-1;;;;;24961:1181:0:o;27574:535::-;27672:7;;27708;;27625;;;;;27726:271;27750:9;:16;27746:20;;27726:271;;;27813:7;27792:4;:18;27797:9;27807:1;27797:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;27797:12:0;27792:18;;;;;;;;;;;;;:28;;:60;;;27845:7;27824:4;:18;27829:9;27839:1;27829:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;27829:12:0;27824:18;;;;;;;;;;;;;:28;27792:60;27788:91;;;27862:7;;27871;;27854:25;;;;;;;27574:535;;:::o;27788:91::-;27914:4;:18;27919:9;27929:1;27919:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;27919:12:0;27914:18;;;;;;;;;;;;;27904:28;;:7;:28;:::i;:::-;27894:38;;27967:4;:18;27972:9;27982:1;27972:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;27972:12:0;27967:18;;;;;;;;;;;;;27957:28;;:7;:28;:::i;:::-;27947:38;-1:-1:-1;27768:3:0;;;;:::i;:::-;;;;27726:271;;;;28031:7;;28021;;:17;;;;:::i;:::-;28011:7;:27;28007:58;;;28048:7;;28057;;28040:25;;;;;;27574:535;;:::o;28007:58::-;28084:7;;28093;;-1:-1:-1;27574:535:0;-1:-1:-1;27574:535:0:o;24055:417::-;24138:16;;;;;;;24137:17;24129:57;;;;-1:-1:-1;;;24129:57:0;;20661:2:1;24129:57:0;;;20643:21:1;20700:2;20680:18;;;20673:30;20739:29;20719:18;;;20712:57;20786:18;;24129:57:0;20459:351:1;24129:57:0;24202:20;24213:4;24219:2;24202:10;:20::i;:::-;24201:21;:37;;;;-1:-1:-1;24232:6:0;;-1:-1:-1;;;;;24226:12:0;;;24232:6;;24226:12;24201:37;24197:268;;;-1:-1:-1;;;;;24255:9:0;;;;;;:3;:9;;;;;;;:16;;-1:-1:-1;;24255:16:0;24267:4;24255:16;;;;;;24286;:23;;-1:-1:-1;;24286:23:0;24255:16;24286:23;;;24339:15;24324:12;:30;24371:21;:28;;-1:-1:-1;;;;24371:28:0;-1:-1:-1;;;24371:28:0;;;24419:34;;;;;;1679:14:1;;1672:22;1654:41;;1642:2;1627:18;;1514:187;24419:34:0;;;;;;;;24055:417;;:::o;26150:1247::-;26245:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26245:18:0;26276:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26276:25:0;26312:19;26334:10;:8;:10::i;:::-;26312:32;-1:-1:-1;26374:21:0;26312:32;26374:7;:21;:::i;:::-;26357:14;;;:38;26408:854;;;;-1:-1:-1;;;;;26439:8:0;;;;;;:4;:8;;;;;;;;26435:369;;;26475:5;;26468:4;:12;26506:5;;26499:4;:12;26537:5;;26530:4;:12;26435:369;;;-1:-1:-1;;;;;26568:10:0;;;;;;:4;:10;;;;;;;;26564:240;;;26606:5;;26599:4;:12;26637:5;;26630:4;:12;26668:5;;26661:4;:12;26564:240;;;26721:5;;26714:4;:12;26752:5;;26745:4;:12;26783:5;;26776:4;:12;26564:240;26853:16;;26845:4;;26835:14;;:7;:14;:::i;:::-;26834:35;;;;:::i;:::-;26820:11;;;:49;26932:16;;26923:4;;26916;;:11;;26923:4;26916:11;:::i;:::-;26905:23;;:7;:23;:::i;:::-;26904:44;;;;:::i;:::-;26884:17;;;:64;;;26999:11;;;;:31;;26884:64;26999:31;:::i;:::-;26988:43;;:7;:43;:::i;:::-;26963:68;;27062:11;;;;:25;;27076:11;;27062:25;:::i;:::-;27048:11;;;:39;26408:854;;;27134:1;27120:11;;;:15;;;27150:17;;;:21;;;27186:32;;;27235:11;;;:15;26408:854;27352:11;27332:6;:17;;;:31;;;;:::i;:::-;27317:6;:11;;;:47;;;;:::i;:::-;27299:6;:14;;;:66;;;;:::i;:::-;27274:22;;;:91;-1:-1:-1;27274:22:0;26150:1247;-1:-1:-1;;;;;26150:1247:0:o;28396:403::-;28476:19;28499:10;:8;:10::i;:::-;28476:33;-1:-1:-1;28520:18:0;28541:24;28476:33;28541:10;:24;:::i;:::-;28611:4;28598:19;;;;:4;:19;;;;;;28520:45;;-1:-1:-1;28598:32:0;;28520:45;;28598:32;:::i;:::-;28589:4;28576:19;;;;:4;:19;;;;;;;;:54;;;;28644:3;:18;;;;;;28641:90;;;28712:4;28699:19;;;;:4;:19;;;;;;:32;;28721:10;;28699:32;:::i;:::-;28690:4;28677:19;;;;:4;:19;;;;;:54;28641:90;28747:43;;1852:25:1;;;28772:4:0;;-1:-1:-1;;;;;28747:43:0;;;;;1840:2:1;1825:18;28747:43:0;;;;;;;28465:334;;28396:403;;:::o;28121:143::-;28211:4;28201:7;;:14;;;;:::i;:::-;28191:7;:24;28239:10;;:17;;28252:4;;28239:17;:::i;:::-;28226:10;:30;-1:-1:-1;;28121:143:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;222:597:1;334:4;363:2;392;381:9;374:21;424:6;418:13;467:6;462:2;451:9;447:18;440:34;492:1;502:140;516:6;513:1;510:13;502:140;;;611:14;;;607:23;;601:30;577:17;;;596:2;573:26;566:66;531:10;;502:140;;;660:6;657:1;654:13;651:91;;;730:1;725:2;716:6;705:9;701:22;697:31;690:42;651:91;-1:-1:-1;803:2:1;782:15;-1:-1:-1;;778:29:1;763:45;;;;810:2;759:54;;222:597;-1:-1:-1;;;222:597:1:o;1058:131::-;-1:-1:-1;;;;;1133:31:1;;1123:42;;1113:70;;1179:1;1176;1169:12;1194:315;1262:6;1270;1323:2;1311:9;1302:7;1298:23;1294:32;1291:52;;;1339:1;1336;1329:12;1291:52;1378:9;1365:23;1397:31;1422:5;1397:31;:::i;:::-;1447:5;1499:2;1484:18;;;;1471:32;;-1:-1:-1;;;1194:315:1:o;1888:316::-;1965:6;1973;1981;2034:2;2022:9;2013:7;2009:23;2005:32;2002:52;;;2050:1;2047;2040:12;2002:52;-1:-1:-1;;2073:23:1;;;2143:2;2128:18;;2115:32;;-1:-1:-1;2194:2:1;2179:18;;;2166:32;;1888:316;-1:-1:-1;1888:316:1:o;2209:160::-;2274:20;;2330:13;;2323:21;2313:32;;2303:60;;2359:1;2356;2349:12;2303:60;2209:160;;;:::o;2374:315::-;2439:6;2447;2500:2;2488:9;2479:7;2475:23;2471:32;2468:52;;;2516:1;2513;2506:12;2468:52;2555:9;2542:23;2574:31;2599:5;2574:31;:::i;:::-;2624:5;-1:-1:-1;2648:35:1;2679:2;2664:18;;2648:35;:::i;:::-;2638:45;;2374:315;;;;;:::o;2694:456::-;2771:6;2779;2787;2840:2;2828:9;2819:7;2815:23;2811:32;2808:52;;;2856:1;2853;2846:12;2808:52;2895:9;2882:23;2914:31;2939:5;2914:31;:::i;:::-;2964:5;-1:-1:-1;3021:2:1;3006:18;;2993:32;3034:33;2993:32;3034:33;:::i;:::-;2694:456;;3086:7;;-1:-1:-1;;;3140:2:1;3125:18;;;;3112:32;;2694:456::o;3155:180::-;3214:6;3267:2;3255:9;3246:7;3242:23;3238:32;3235:52;;;3283:1;3280;3273:12;3235:52;-1:-1:-1;3306:23:1;;3155:180;-1:-1:-1;3155:180:1:o;3529:247::-;3588:6;3641:2;3629:9;3620:7;3616:23;3612:32;3609:52;;;3657:1;3654;3647:12;3609:52;3696:9;3683:23;3715:31;3740:5;3715:31;:::i;3781:248::-;3849:6;3857;3910:2;3898:9;3889:7;3885:23;3881:32;3878:52;;;3926:1;3923;3916:12;3878:52;-1:-1:-1;;3949:23:1;;;4019:2;4004:18;;;3991:32;;-1:-1:-1;3781:248:1:o;4294:127::-;4355:10;4350:3;4346:20;4343:1;4336:31;4386:4;4383:1;4376:15;4410:4;4407:1;4400:15;4426:719;4469:5;4522:3;4515:4;4507:6;4503:17;4499:27;4489:55;;4540:1;4537;4530:12;4489:55;4576:6;4563:20;4602:18;4639:2;4635;4632:10;4629:36;;;4645:18;;:::i;:::-;4720:2;4714:9;4688:2;4774:13;;-1:-1:-1;;4770:22:1;;;4794:2;4766:31;4762:40;4750:53;;;4818:18;;;4838:22;;;4815:46;4812:72;;;4864:18;;:::i;:::-;4904:10;4900:2;4893:22;4939:2;4931:6;4924:18;4985:3;4978:4;4973:2;4965:6;4961:15;4957:26;4954:35;4951:55;;;5002:1;4999;4992:12;4951:55;5066:2;5059:4;5051:6;5047:17;5040:4;5032:6;5028:17;5015:54;5113:1;5106:4;5101:2;5093:6;5089:15;5085:26;5078:37;5133:6;5124:15;;;;;;4426:719;;;;:::o;5150:836::-;5272:6;5280;5288;5296;5349:3;5337:9;5328:7;5324:23;5320:33;5317:53;;;5366:1;5363;5356:12;5317:53;5405:9;5392:23;5424:31;5449:5;5424:31;:::i;:::-;5474:5;-1:-1:-1;5531:2:1;5516:18;;5503:32;5544:33;5503:32;5544:33;:::i;:::-;5596:7;-1:-1:-1;5654:2:1;5639:18;;5626:32;5677:18;5707:14;;;5704:34;;;5734:1;5731;5724:12;5704:34;5757:50;5799:7;5790:6;5779:9;5775:22;5757:50;:::i;:::-;5747:60;;5860:2;5849:9;5845:18;5832:32;5816:48;;5889:2;5879:8;5876:16;5873:36;;;5905:1;5902;5895:12;5873:36;;5928:52;5972:7;5961:8;5950:9;5946:24;5928:52;:::i;:::-;5918:62;;;5150:836;;;;;;;:::o;5991:180::-;6047:6;6100:2;6088:9;6079:7;6075:23;6071:32;6068:52;;;6116:1;6113;6106:12;6068:52;6139:26;6155:9;6139:26;:::i;6176:388::-;6244:6;6252;6305:2;6293:9;6284:7;6280:23;6276:32;6273:52;;;6321:1;6318;6311:12;6273:52;6360:9;6347:23;6379:31;6404:5;6379:31;:::i;:::-;6429:5;-1:-1:-1;6486:2:1;6471:18;;6458:32;6499:33;6458:32;6499:33;:::i;:::-;6551:7;6541:17;;;6176:388;;;;;:::o;6569:385::-;6655:6;6663;6671;6679;6732:3;6720:9;6711:7;6707:23;6703:33;6700:53;;;6749:1;6746;6739:12;6700:53;-1:-1:-1;;6772:23:1;;;6842:2;6827:18;;6814:32;;-1:-1:-1;6893:2:1;6878:18;;6865:32;;6944:2;6929:18;6916:32;;-1:-1:-1;6569:385:1;-1:-1:-1;6569:385:1:o;6959:380::-;7038:1;7034:12;;;;7081;;;7102:61;;7156:4;7148:6;7144:17;7134:27;;7102:61;7209:2;7201:6;7198:14;7178:18;7175:38;7172:161;;;7255:10;7250:3;7246:20;7243:1;7236:31;7290:4;7287:1;7280:15;7318:4;7315:1;7308:15;7172:161;;6959:380;;;:::o;7344:356::-;7546:2;7528:21;;;7565:18;;;7558:30;7624:34;7619:2;7604:18;;7597:62;7691:2;7676:18;;7344:356::o;8419:127::-;8480:10;8475:3;8471:20;8468:1;8461:31;8511:4;8508:1;8501:15;8535:4;8532:1;8525:15;8551:127;8612:10;8607:3;8603:20;8600:1;8593:31;8643:4;8640:1;8633:15;8667:4;8664:1;8657:15;8683:125;8723:4;8751:1;8748;8745:8;8742:34;;;8756:18;;:::i;:::-;-1:-1:-1;8793:9:1;;8683:125::o;8813:127::-;8874:10;8869:3;8865:20;8862:1;8855:31;8905:4;8902:1;8895:15;8929:4;8926:1;8919:15;8945:135;8984:3;-1:-1:-1;;9005:17:1;;9002:43;;;9025:18;;:::i;:::-;-1:-1:-1;9072:1:1;9061:13;;8945:135::o;9496:127::-;9557:10;9552:3;9548:20;9545:1;9538:31;9588:4;9585:1;9578:15;9612:4;9609:1;9602:15;9628:120;9668:1;9694;9684:35;;9699:18;;:::i;:::-;-1:-1:-1;9733:9:1;;9628:120::o;9753:128::-;9793:3;9824:1;9820:6;9817:1;9814:13;9811:39;;;9830:18;;:::i;:::-;-1:-1:-1;9866:9:1;;9753:128::o;9886:425::-;10088:2;10070:21;;;10127:2;10107:18;;;10100:30;10166:34;10161:2;10146:18;;10139:62;10237:31;10232:2;10217:18;;10210:59;10301:3;10286:19;;9886:425::o;10664:422::-;10753:1;10796:5;10753:1;10810:270;10831:7;10821:8;10818:21;10810:270;;;10890:4;10886:1;10882:6;10878:17;10872:4;10869:27;10866:53;;;10899:18;;:::i;:::-;10949:7;10939:8;10935:22;10932:55;;;10969:16;;;;10932:55;11048:22;;;;11008:15;;;;10810:270;;;10814:3;10664:422;;;;;:::o;11091:806::-;11140:5;11170:8;11160:80;;-1:-1:-1;11211:1:1;11225:5;;11160:80;11259:4;11249:76;;-1:-1:-1;11296:1:1;11310:5;;11249:76;11341:4;11359:1;11354:59;;;;11427:1;11422:130;;;;11334:218;;11354:59;11384:1;11375:10;;11398:5;;;11422:130;11459:3;11449:8;11446:17;11443:43;;;11466:18;;:::i;:::-;-1:-1:-1;;11522:1:1;11508:16;;11537:5;;11334:218;;11636:2;11626:8;11623:16;11617:3;11611:4;11608:13;11604:36;11598:2;11588:8;11585:16;11580:2;11574:4;11571:12;11567:35;11564:77;11561:159;;;-1:-1:-1;11673:19:1;;;11705:5;;11561:159;11752:34;11777:8;11771:4;11752:34;:::i;:::-;11822:6;11818:1;11814:6;11810:19;11801:7;11798:32;11795:58;;;11833:18;;:::i;:::-;11871:20;;11091:806;-1:-1:-1;;;11091:806:1:o;11902:131::-;11962:5;11991:36;12018:8;12012:4;11991:36;:::i;12038:168::-;12078:7;12144:1;12140;12136:6;12132:14;12129:1;12126:21;12121:1;12114:9;12107:17;12103:45;12100:71;;;12151:18;;:::i;:::-;-1:-1:-1;12191:9:1;;12038:168::o;12211:112::-;12243:1;12269;12259:35;;12274:18;;:::i;:::-;-1:-1:-1;12308:9:1;;12211:112::o;12328:251::-;12398:6;12451:2;12439:9;12430:7;12426:23;12422:32;12419:52;;;12467:1;12464;12457:12;12419:52;12499:9;12493:16;12518:31;12543:5;12518:31;:::i;12893:607::-;-1:-1:-1;;;;;13252:15:1;;;13234:34;;13299:2;13284:18;;13277:34;;;;13342:2;13327:18;;13320:34;;;;13385:2;13370:18;;13363:34;;;;13434:15;;;13428:3;13413:19;;13406:44;13214:3;13466:19;;13459:35;;;;13183:3;13168:19;;12893:607::o;13505:306::-;13593:6;13601;13609;13662:2;13650:9;13641:7;13637:23;13633:32;13630:52;;;13678:1;13675;13668:12;13630:52;13707:9;13701:16;13691:26;;13757:2;13746:9;13742:18;13736:25;13726:35;;13801:2;13790:9;13786:18;13780:25;13770:35;;13505:306;;;;;:::o;14177:399::-;14379:2;14361:21;;;14418:2;14398:18;;;14391:30;14457:34;14452:2;14437:18;;14430:62;-1:-1:-1;;;14523:2:1;14508:18;;14501:33;14566:3;14551:19;;14177:399::o;18124:980::-;18386:4;18434:3;18423:9;18419:19;18465:6;18454:9;18447:25;18491:2;18529:6;18524:2;18513:9;18509:18;18502:34;18572:3;18567:2;18556:9;18552:18;18545:31;18596:6;18631;18625:13;18662:6;18654;18647:22;18700:3;18689:9;18685:19;18678:26;;18739:2;18731:6;18727:15;18713:29;;18760:1;18770:195;18784:6;18781:1;18778:13;18770:195;;;18849:13;;-1:-1:-1;;;;;18845:39:1;18833:52;;18940:15;;;;18905:12;;;;18881:1;18799:9;18770:195;;;-1:-1:-1;;;;;;;19021:32:1;;;;19016:2;19001:18;;18994:60;-1:-1:-1;;;19085:3:1;19070:19;19063:35;18982:3;18124:980;-1:-1:-1;;;18124:980:1:o

Swarm Source

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