ETH Price: $3,457.72 (+1.76%)
Gas: 14 Gwei

Token

ROBOSHIB (ROBOSHIB)
 

Overview

Max Total Supply

1,000,000,000,000 ROBOSHIB

Holders

665

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
255,472,289.284151983 ROBOSHIB

Value
$0.00
0x63a560e2929dd0d6f72d342700959ae41b34d004
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:
ROBOSHIB

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-14
*/

// 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; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IERC20 {
  /**
   * @dev Returns the amount of tokens in existence.
   */
  function totalSupply() external view returns (uint256);

  /**
   * @dev Returns the token decimals.
   */
  function decimals() external view returns (uint8);

  /**
   * @dev Returns the token symbol.
   */
  function symbol() external view returns (string memory);

  /**
  * @dev Returns the token name.
  */
  function name() external view returns (string memory);

  /**
   * @dev Returns the bep token owner.
   */
  function getOwner() external view returns (address);

  /**
   * @dev Returns the amount of tokens owned by `account`.
   */
  function balanceOf(address account) external view returns (uint256);

  /**
   * @dev Moves `amount` tokens from the caller's account to `recipient`.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * Emits a {Transfer} event.
   */
  function transfer(address recipient, uint256 amount) external returns (bool);

  /**
   * @dev Returns the remaining number of tokens that `spender` will be
   * allowed to spend on behalf of `owner` through {transferFrom}. This is
   * zero by default.
   *
   * This value changes when {approve} or {transferFrom} are called.
   */
  function allowance(address _owner, address spender) external view returns (uint256);

  /**
   * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * IMPORTANT: Beware that changing an allowance with this method brings the risk
   * that someone may use both the old and the new allowance by unfortunate
   * transaction ordering. One possible solution to mitigate this race
   * condition is to first reduce the spender's allowance to 0 and set the
   * desired value afterwards:
   * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
   *
   * Emits an {Approval} event.
   */
  function approve(address spender, uint256 amount) external returns (bool);

  /**
   * @dev Moves `amount` tokens from `sender` to `recipient` using the
   * allowance mechanism. `amount` is then deducted from the caller's
   * allowance.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * Emits a {Transfer} event.
   */
  function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

  /**
   * @dev Emitted when `value` tokens are moved from one account (`from`) to
   * another (`to`).
   *
   * Note that `value` may be zero.
   */
  event Transfer(address indexed from, address indexed to, uint256 value);

  /**
   * @dev Emitted when the allowance of a `spender` for an `owner` is set by
   * a call to {approve}. `value` is the new allowance.
   */
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

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 IUniswapV2Pair {
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
    function skim(address to) external;
    function sync() external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    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;
}

interface AntiSnipe {
    function checkUser(address from, address to, uint256 amt) external returns (bool);
    function setLaunch(address _initialLpPair, uint32 _liqAddBlock, uint64 _liqAddStamp, uint8 dec) external;
    function setLpPair(address pair, bool enabled) external;
    function setProtections(bool _as, bool _ab, bool _algo) external;
    function setGasPriceLimit(uint256 gas) external;
    function removeSniper(address account) external;
    function getSniperAmt() external view returns (uint256);
    function isBlacklisted(address account) external view returns (bool);
    function setBlacklistEnabled(address account, bool enabled) external;
    function setBlacklistEnabledMultiple(address[] memory accounts, bool enabled) external;
}

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

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

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    mapping (address => bool) private presaleAddresses;
    bool private allowedPresaleExclusion = true;
    mapping (address => bool) private _liquidityHolders;

    uint256 private startingSupply = 1_000_000_000_000;

    string constant private _name = "ROBOSHIB";
    string constant private _symbol = "ROBOSHIB";
    uint8 private _decimals = 9;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = startingSupply * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));

    struct CurrentFees {
        uint16 reflect;
        uint16 totalSwap;
    }

    struct Fees {
        uint16 reflect;
        uint16 liquidity;
        uint16 marketing;
        uint16 team;
        uint16 totalSwap;
    }

    struct StaticValuesStruct {
        uint16 maxReflect;
        uint16 maxLiquidity;
        uint16 maxMarketing;
        uint16 maxTeam;
        uint16 masterTaxDivisor;
    }

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

    CurrentFees private currentTaxes = CurrentFees({
        reflect: 0,
        totalSwap: 0
        });

    Fees public _buyTaxes = Fees({
        reflect: 0,
        liquidity: 100,
        marketing: 600,
        team: 300,
        totalSwap: 1000
        });

    Fees public _sellTaxes = Fees({
        reflect: 0,
        liquidity: 100,
        marketing: 2100,
        team: 300,
        totalSwap: 2500
        });

    Fees public _transferTaxes = Fees({
        reflect: 0,
        liquidity: 100,
        marketing: 600,
        team: 300,
        totalSwap: 1000
        });

    Ratios public _ratios = Ratios({
        liquidity: 2,
        marketing: 27,
        team: 6,
        total: 35
        });

    StaticValuesStruct public staticVals = StaticValuesStruct({
        maxReflect: 800,
        maxLiquidity: 800,
        maxMarketing: 800,
        maxTeam: 800,
        masterTaxDivisor: 10000
        });

    IUniswapV2Router02 public dexRouter;
    address public lpPair;

    address public currentRouter;
    // PCS ROUTER
    address private pcsV2Router = 0x10ED43C718714eb63d5aA57B78B54704E256024E;
    // UNI ROUTER
    address private uniswapV2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;
    address payable public _marketingWallet = payable(0x555A67E126a32421A3875A931c2e4c50B8022c2B);
    address payable public _teamWallet = payable(0x555A67E126a32421A3875A931c2e4c50B8022c2B);
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    
    uint256 private maxTPercent = 1;
    uint256 private maxTDivisor = 100;
    uint256 private maxWPercent = 1;
    uint256 private maxWDivisor = 100;

    uint256 private _maxTxAmount = (_tTotal * maxTPercent) / maxTDivisor;
    uint256 public maxTxAmountUI = (startingSupply * maxTPercent) / maxTDivisor;
    uint256 private _maxWalletSize = (_tTotal * maxWPercent) / maxWDivisor;
    uint256 public maxWalletSizeUI = (startingSupply * maxWPercent) / maxWDivisor;

    uint256 private swapThreshold = (_tTotal * 5) / 10000;
    uint256 private swapAmount = (_tTotal * 25) / 10000;

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

    bool public increasedTaxTimeEnabled = true;
    uint256 public increasedTaxTimeTimer = 24 hours;

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

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Caller =/= owner.");
        _;
    }
    
    constructor () payable {
        _rOwned[_msgSender()] = _rTotal;

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

        if (block.chainid == 56 || block.chainid == 97) {
            currentRouter = pcsV2Router;
        } else if (block.chainid == 1) {
            currentRouter = uniswapV2Router;
        }

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

        _approve(msg.sender, currentRouter, type(uint256).max);
        _approve(address(this), currentRouter, type(uint256).max);

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

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    receive() external payable {}

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and renouncements.
    // This allows for removal of ownership privileges from the owner once renounced or transferred.
    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.");
        setExcludedFromFees(_owner, false);
        setExcludedFromFees(newOwner, true);
        
        if(balanceOf(_owner) > 0) {
            _transfer(_owner, newOwner, balanceOf(_owner));
        }
        
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
        
    }

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

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

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[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 _approve(address sender, address spender, uint256 amount) private {
        require(sender != address(0), "ERC20: Zero Address");
        require(spender != address(0), "ERC20: Zero Address");

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

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

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

        return _transfer(sender, recipient, amount);
    }

    function 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) public onlyOwner() {
        IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter);
        address get_pair = IUniswapV2Factory(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            lpPair = IUniswapV2Factory(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        _approve(address(this), address(dexRouter), type(uint256).max);
    }

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

    function changeRouterContingency(address router) external onlyOwner {
        require(!_hasLiqBeenAdded);
        currentRouter = router;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return (_tTotal - (balanceOf(DEAD) + balanceOf(address(0))));
    }

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

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

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

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

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

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

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

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

    function getSniperAmt() public view returns (uint256) {
        return antiSnipe.getSniperAmt();
    }

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

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

    function setTaxesBuy(uint16 reflect, uint16 liquidity, uint16 marketing, uint16 team) external onlyOwner {
        require(reflect <= staticVals.maxReflect
                && liquidity <= staticVals.maxLiquidity
                && marketing <= staticVals.maxMarketing
                && team <= staticVals.maxTeam);
        uint16 check = reflect + liquidity + marketing + team;
        require(check <= 3450);
        _buyTaxes.liquidity = liquidity;
        _buyTaxes.reflect = reflect;
        _buyTaxes.marketing = marketing;
        _buyTaxes.team = team;
        _buyTaxes.totalSwap = check - reflect;
    }

    function setTaxesSell(uint16 reflect, uint16 liquidity, uint16 marketing, uint16 team) external onlyOwner {
        require(reflect <= staticVals.maxReflect
                && liquidity <= staticVals.maxLiquidity
                && marketing <= staticVals.maxMarketing
                && team <= staticVals.maxTeam);
        uint16 check = reflect + liquidity + marketing + team;
        require(check <= 3450);
        _sellTaxes.liquidity = liquidity;
        _sellTaxes.reflect = reflect;
        _sellTaxes.marketing = marketing;
        _sellTaxes.team = team;
        _sellTaxes.totalSwap = check - reflect;
    }

    function setTaxesTransfer(uint16 reflect, uint16 liquidity, uint16 marketing, uint16 team) external onlyOwner {
        require(reflect <= staticVals.maxReflect
                && liquidity <= staticVals.maxLiquidity
                && marketing <= staticVals.maxMarketing
                && team <= staticVals.maxTeam);
        uint16 check = reflect + liquidity + marketing + team;
        require(check <= 3450);
        _transferTaxes.liquidity = liquidity;
        _transferTaxes.reflect = reflect;
        _transferTaxes.marketing = marketing;
        _transferTaxes.team = team;
        _transferTaxes.totalSwap = check - reflect;
    }

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

    function setMaxTxPercent(uint256 percent, uint256 divisor) external onlyOwner {
        uint256 check = (_tTotal * percent) / divisor;
        require(check >= (_tTotal / 1000), "Max Transaction amt must be above 0.1% of total supply.");
        _maxTxAmount = check;
        maxTxAmountUI = (startingSupply * percent) / divisor;
    }

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

    function removeLimits() external onlyOwner {
        _maxWalletSize = _tTotal;
        maxWalletSizeUI = startingSupply;
        _maxTxAmount = _tTotal;
        maxTxAmountUI = startingSupply;
    }

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

    function setWallets(address payable marketing, address payable team) external onlyOwner {
        _marketingWallet = payable(marketing);
        _teamWallet = payable(team);
    }

    function setContractSwapEnabled(bool _enabled) public onlyOwner {
        contractSwapEnabled = _enabled;
        emit ContractSwapEnabledUpdated(_enabled);
    }

    function excludePresaleAddresses(address router, address presale) external onlyOwner {
        require(allowedPresaleExclusion, "Function already used.");
        if (router == presale) {
            _liquidityHolders[presale] = true;
            presaleAddresses[presale] = true;
            setExcludedFromFees(presale, true);
            setExcludedFromReward(presale, true);
        } else {
            _liquidityHolders[router] = true;
            _liquidityHolders[presale] = true;
            presaleAddresses[router] = true;
            presaleAddresses[presale] = true;
            setExcludedFromFees(router, true);
            setExcludedFromFees(presale, true);
            setExcludedFromReward(router, true);
            setExcludedFromReward(presale, true);
        }
    }

    function _hasLimits(address from, address to) private view returns (bool) {
        return from != owner()
            && to != owner()
            && !_liquidityHolders[to]
            && !_liquidityHolders[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 _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
            if(lpPairs[from] || lpPairs[to]){
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }
            if(to != currentRouter && !lpPairs[to]) {
                require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize.");
            }
        }

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

        if (lpPairs[to]) {
            if (!inSwap
                && contractSwapEnabled
                && !presaleAddresses[to]
                && !presaleAddresses[from]
            ) {
                uint256 contractTokenBalance = balanceOf(address(this));
                if (contractTokenBalance >= swapThreshold) {
                    if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; }
                    contractSwap(contractTokenBalance);
                }
            }      
        } 
        return _finalizeTransfer(from, to, amount, takeFee);
    }

    function contractSwap(uint256 contractTokenBalance) private lockTheSwap {
        if (_ratios.total == 0)
            return;

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

        uint256 toLiquify = ((contractTokenBalance * _ratios.liquidity) / _ratios.total) / 2;

        uint256 toSwapForEth = contractTokenBalance - toLiquify;
        
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            toSwapForEth,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );


        uint256 liquidityBalance = ((address(this).balance * _ratios.liquidity) / _ratios.total) / 2;

        if (toLiquify > 0) {
            dexRouter.addLiquidityETH{value: liquidityBalance}(
                address(this),
                toLiquify,
                0, // slippage is unavoidable
                0, // slippage is unavoidable
                DEAD,
                block.timestamp
            );
            emit SwapAndLiquify(toLiquify, liquidityBalance, toLiquify);
        }
        if (address(this).balance > 0 && _ratios.total - _ratios.liquidity > 0) {
            _teamWallet.transfer((address(this).balance * _ratios.team) / (_ratios.total - _ratios.liquidity));
            _marketingWallet.transfer(address(this).balance);
        }
    }

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

    function enableTrading() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        require(_hasLiqBeenAdded, "Liquidity must be added.");
        setExcludedFromReward(address(this), true);
        setExcludedFromReward(lpPair, true);
        if(address(antiSnipe) == address(0)){
            antiSnipe = AntiSnipe(address(this));
        }
        try antiSnipe.setLaunch(lpPair, uint32(block.number), uint64(block.timestamp), _decimals) {} catch {}
        tradingEnabled = true;
        tradingEnabledTime = block.timestamp;
    }

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

    struct ExtraValues {
        uint256 tTransferAmount;
        uint256 tFee;
        uint256 tSwap;

        uint256 rTransferAmount;
        uint256 rAmount;
        uint256 rFee;
    }

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

        ExtraValues memory values = _getValues(from, to, tAmount, takeFee);

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

        if (_isExcluded[from]) {
            _tOwned[from] = _tOwned[from] - tAmount;
        }
        if (_isExcluded[to]) {
            _tOwned[to] = _tOwned[to] + values.tTransferAmount;
        }

        if (values.tSwap > 0) {
            _rOwned[address(this)] = _rOwned[address(this)] + (values.tSwap * _getRate());
            if(_isExcluded[address(this)])
                _tOwned[address(this)] = _tOwned[address(this)] + values.tSwap;
            emit Transfer(from, address(this), values.tSwap); // Transparency is the key to success.
        }
        if (values.rFee > 0 || values.tFee > 0) {
            _rTotal -= values.rFee;
        }

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

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

        values.rAmount = tAmount * currentRate;

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

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

        if(takeFee) {
            if (lpPairs[to]) {
                currentTaxes.reflect = _sellTaxes.reflect;
                currentTaxes.totalSwap = _sellTaxes.totalSwap;
            } else if (lpPairs[from]) {
                currentTaxes.reflect = _buyTaxes.reflect;
                currentTaxes.totalSwap = _buyTaxes.totalSwap;
            } else {
                currentTaxes.reflect = _transferTaxes.reflect;
                currentTaxes.totalSwap = _transferTaxes.totalSwap;
            }

            values.tFee = (tAmount * currentTaxes.reflect) / staticVals.masterTaxDivisor;
            values.tSwap = (tAmount * currentTaxes.totalSwap) / staticVals.masterTaxDivisor;
            values.tTransferAmount = tAmount - (values.tFee + values.tSwap);

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

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

    function _getRate() internal view returns(uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return _rTotal / _tTotal;
            rSupply = rSupply - _rOwned[_excluded[i]];
            tSupply = tSupply - _tOwned[_excluded[i]];
        }
        if (rSupply < _rTotal / _tTotal) return _rTotal / _tTotal;
        return rSupply / tSupply;
    }
}

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":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","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":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":"_buyTaxes","outputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"team","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"team","type":"uint16"},{"internalType":"uint16","name":"total","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxes","outputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"team","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_teamWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferTaxes","outputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"team","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approveContractContingency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"changeRouterContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"presale","type":"address"}],"name":"excludePresaleAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSniperAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"increasedTaxTimeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"increasedTaxTimeTimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"maxTxAmountUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletSizeUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabledMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initializer","type":"address"}],"name":"setInitializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_antiSnipe","type":"bool"},{"internalType":"bool","name":"_antiBlock","type":"bool"},{"internalType":"bool","name":"_algo","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"team","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"team","type":"uint16"}],"name":"setTaxesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"team","type":"uint16"}],"name":"setTaxesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"team","type":"uint16"}],"name":"setTaxesTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"team","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"staticVals","outputs":[{"internalType":"uint16","name":"maxReflect","type":"uint16"},{"internalType":"uint16","name":"maxLiquidity","type":"uint16"},{"internalType":"uint16","name":"maxMarketing","type":"uint16"},{"internalType":"uint16","name":"maxTeam","type":"uint16"},{"internalType":"uint16","name":"masterTaxDivisor","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabledTime","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"}]

60806040526000600455600a8054600160ff1991821617825564e8d4a51000600c55600d80546009921682179055620000389162000913565b600c546200004791906200092b565b600e8190556200005a9060001962000963565b62000068906000196200097a565b600f55604080518082018252600080825260209182018190526010805463ffffffff19169055825160a08082018552828252606482850181905261025883870181905261012c60608086018290526103e86080968701819052601180546001600160501b03199081166903e8012c0258006400009081179092558b518089018d528a8152808c01889052610834818e01528085018690526109c4908a01526012805482166909c4012c0834006400001790558b518089018d52998a52898b01879052898c0195909552888301939093529686019690965260138054831690911790558651808501885260028152601b8188018190526006828a0152602391870191909152601480546001600160401b03191666230006001b00021790558751938401885261032080855284880181905297840188905294830196909652612710919092015260158054909416692710032003200320032017909355601980547310ed43c718714eb63d5aa57b78b54704e256024e6001600160a01b031991821617909155601a8054737a250d5630b4cf539739df2c5dacb4c659f2488d908316179055815473555a67e126a32421a3875a931c2e4c50b8022c2b91168117909155601c8054600161ff0160a01b03191690911790556001601d819055601e839055601f81905590829055600e546200026191906200092b565b6200026d919062000994565b602155601e54601d54600c546200028591906200092b565b62000291919062000994565b602255602054601f54600e54620002a991906200092b565b620002b5919062000994565b602355602054601f54600c54620002cd91906200092b565b620002d9919062000994565b602455612710600e546005620002f091906200092b565b620002fc919062000994565b602555612710600e5460196200031391906200092b565b6200031f919062000994565b6026556027805461ffff191690556029805460ff60a01b1916600160a01b17905562015180602a55600f5460016000620003563390565b6001600160a01b03168152602081019190915260400160009081209190915580546001600160a01b031916331790556038461480620003955750466061145b15620003c357601954601880546001600160a01b0319166001600160a01b03909216919091179055620003f0565b4660011415620003f057601a54601880546001600160a01b0319166001600160a01b039092169190911790555b601854601680546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200044d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004739190620009ab565b6001600160a01b031663c9c65396601660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004fb9190620009ab565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af115801562000548573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200056e9190620009ab565b601780546001600160a01b0319166001600160a01b039283169081179091556000908152600360205260409020805460ff19166001179055601854620005ba91339116600019620006fd565b601854620005d69030906001600160a01b0316600019620006fd565b600160066000620005ef6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006909252812080548316600190811790915561dead82527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280549093168117909255600b90620006776000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055620006a73390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600e54604051620006ef91815260200190565b60405180910390a3620009d6565b6001600160a01b0383166200074f5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b0382166200079d5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b604482015260640162000746565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000855578160001904821115620008395762000839620007fe565b808516156200084757918102915b93841c939080029062000819565b509250929050565b6000826200086e575060016200090d565b816200087d575060006200090d565b8160018114620008965760028114620008a157620008c1565b60019150506200090d565b60ff841115620008b557620008b5620007fe565b50506001821b6200090d565b5060208310610133831016604e8410600b8410161715620008e6575081810a6200090d565b620008f2838362000814565b8060001904821115620009095762000909620007fe565b0290505b92915050565b60006200092460ff8416836200085d565b9392505050565b6000816000190483118215151615620009485762000948620007fe565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826200097557620009756200094d565b500690565b6000828210156200098f576200098f620007fe565b500390565b600082620009a657620009a66200094d565b500490565b600060208284031215620009be57600080fd5b81516001600160a01b03811681146200092457600080fd5b614cde80620009e66000396000f3fe6080604052600436106103c75760003560e01c8063715018a6116101f2578063bc77169d1161010d578063dd62ed3e116100a0578063f6540ec71161006f578063f6540ec714610c8f578063fb78680d14610ca5578063fdb78c0e14610cc5578063fe575a8714610cf857600080fd5b8063dd62ed3e14610bf4578063eafb5a3c14610c3a578063ee5d9c2d14610c5a578063eec2744e14610c6f57600080fd5b8063c6831cd8116100dc578063c6831cd814610afc578063cab5ebea14610b49578063cf84770614610b69578063d3f6a15714610bd457600080fd5b8063bc77169d14610a3d578063becdf13f14610a5d578063c21f9a8a14610a7d578063c2fa418f14610aaf57600080fd5b80638da5cb5b11610185578063a9059cbb11610154578063a9059cbb146109bd578063aa22b172146109dd578063aa545473146109fd578063b6f8f8dc14610a1d57600080fd5b80638da5cb5b1461093557806395d89b4114610428578063962dfc751461097d578063a457c2d71461099d57600080fd5b806388f82020116101c157806388f82020146108fc578063893d20e8146109355780638a63bd9b146109535780638a8c523c1461096857600080fd5b8063715018a614610865578063751039fc1461087a5780637b45d4311461088f57806380c581d1146108dc57600080fd5b806333251a0b116102e25780634fbee193116102755780635c24b074116102445780635c24b074146107f957806364038409146108195780636fd8fb7a1461082f57806370a082311461084557600080fd5b80634fbee1931461076c57806350a8e016146107a557806355dbc369146107c4578063590ffdce146107d957600080fd5b80633f3cf56c116102b15780633f3cf56c146106f2578063452ed4f1146107125780634ada218b146107325780634fb2e45d1461074c57600080fd5b806333251a0b1461067257806337e294d514610692578063384f36b6146106b257806339509351146106d257600080fd5b806318160ddd1161035a5780632b112e49116103295780632b112e49146106055780632c76235a1461061a5780632d83811914610630578063313ce5671461065057600080fd5b806318160ddd146105245780631b6afa2d1461054357806323b872dd146105c557806326003957146105e557600080fd5b8063095ea7b311610396578063095ea7b314610494578063122fea3b146104c457806313b4a7f4146104e457806313e461921461050457600080fd5b806303fd2a45146103d357806305bbedb61461040657806306fdde03146104285780630758d9241461047457600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e961dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561041257600080fd5b5061042661042136600461466e565b610d18565b005b34801561043457600080fd5b50604080518082018252600881527f524f424f53484942000000000000000000000000000000000000000000000000602082015290516103fd9190614745565b34801561048057600080fd5b506016546103e9906001600160a01b031681565b3480156104a057600080fd5b506104b46104af36600461479a565b610dec565b60405190151581526020016103fd565b3480156104d057600080fd5b506018546103e9906001600160a01b031681565b3480156104f057600080fd5b506104266104ff3660046147c6565b610e02565b34801561051057600080fd5b5061042661051f3660046147ff565b610f8c565b34801561053057600080fd5b50600e545b6040519081526020016103fd565b34801561054f57600080fd5b506015546105909061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016103fd565b3480156105d157600080fd5b506104b46105e036600461482d565b611346565b3480156105f157600080fd5b5061042661060036600461486e565b6113be565b34801561061157600080fd5b506105356114d5565b34801561062657600080fd5b50610535602a5481565b34801561063c57600080fd5b5061053561064b366004614890565b611508565b34801561065c57600080fd5b50600d5460405160ff90911681526020016103fd565b34801561067e57600080fd5b5061042661068d3660046148a9565b61159f565b34801561069e57600080fd5b50601c546103e9906001600160a01b031681565b3480156106be57600080fd5b506104266106cd3660046148a9565b611668565b3480156106de57600080fd5b506104b46106ed36600461479a565b6116fa565b3480156106fe57600080fd5b5061042661070d36600461486e565b611736565b34801561071e57600080fd5b506017546103e9906001600160a01b031681565b34801561073e57600080fd5b506027546104b49060ff1681565b34801561075857600080fd5b506104266107673660046148a9565b61184d565b34801561077857600080fd5b506104b46107873660046148a9565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156107b157600080fd5b506027546104b490610100900460ff1681565b3480156107d057600080fd5b50610535611a51565b3480156107e557600080fd5b506104266107f43660046147ff565b611ad8565b34801561080557600080fd5b506104266108143660046148a9565b611b51565b34801561082557600080fd5b5061053560225481565b34801561083b57600080fd5b5061053560285481565b34801561085157600080fd5b506105356108603660046148a9565b611c7f565b34801561087157600080fd5b50610426611ce4565b34801561088657600080fd5b50610426611d94565b34801561089b57600080fd5b506011546105909061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b3480156108e857600080fd5b506104266108f73660046147ff565b611dfd565b34801561090857600080fd5b506104b46109173660046148a9565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561094157600080fd5b506000546001600160a01b03166103e9565b34801561095f57600080fd5b506104b4611fad565b34801561097457600080fd5b5061042661201c565b34801561098957600080fd5b50601b546103e9906001600160a01b031681565b3480156109a957600080fd5b506104b46109b836600461479a565b612216565b3480156109c957600080fd5b506104b46109d836600461479a565b61224d565b3480156109e957600080fd5b506104266109f83660046148d8565b612264565b348015610a0957600080fd5b50610426610a1836600461491b565b612345565b348015610a2957600080fd5b50610426610a3836600461496f565b612511565b348015610a4957600080fd5b50610426610a5836600461491b565b6125ec565b348015610a6957600080fd5b50610426610a7836600461491b565b6127b8565b348015610a8957600080fd5b506029546104b49074010000000000000000000000000000000000000000900460ff1681565b348015610abb57600080fd5b506013546105909061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b348015610b0857600080fd5b506012546105909061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b348015610b5557600080fd5b50610426610b643660046149ba565b612984565b348015610b7557600080fd5b50601454610ba69061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103fd565b348015610be057600080fd5b50610426610bef3660046147c6565b612a57565b348015610c0057600080fd5b50610535610c0f3660046147c6565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610c4657600080fd5b50610426610c553660046148a9565b612ae0565b348015610c6657600080fd5b50610426612e8f565b348015610c7b57600080fd5b50610426610c8a3660046147ff565b612f72565b348015610c9b57600080fd5b5061053560245481565b348015610cb157600080fd5b50610426610cc03660046149d7565b613013565b348015610cd157600080fd5b50601c546104b4907501000000000000000000000000000000000000000000900460ff1681565b348015610d0457600080fd5b506104b4610d133660046148a9565b6130a0565b6000546001600160a01b03163314610d6b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b6029546040517f05bbedb60000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906305bbedb690610db69085908590600401614a4d565b600060405180830381600087803b158015610dd057600080fd5b505af1158015610de4573d6000803e3d6000fd5b505050505050565b6000610df9338484613128565b50600192915050565b6000546001600160a01b03163314610e505760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b600a5460ff16610ea25760405162461bcd60e51b815260206004820152601660248201527f46756e6374696f6e20616c726561647920757365642e000000000000000000006044820152606401610d62565b806001600160a01b0316826001600160a01b03161415610f10576001600160a01b0381166000908152600b602090815260408083208054600160ff19918216811790925560099093529220805490911682179055610f01908290611ad8565b610f0c816001610f8c565b5050565b6001600160a01b038281166000818152600b602090815260408083208054600160ff19918216811790925595871680855282852080548816831790559484526009909252808320805486168317905592825291902080549092168117909155610f7a908390611ad8565b610f85816001611ad8565b610f018260015b6000546001600160a01b03163314610fda5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b6001811515141561111c576001600160a01b03821660009081526007602052604090205460ff161561104e5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610d62565b6001600160a01b038216600090815260016020526040902054156110a8576001600160a01b03821660009081526001602052604090205461108e90611508565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee301805473ffffffffffffffffffffffffffffffffffffffff19169091179055565b80610f0c576001600160a01b03821660009081526007602052604090205460ff166111895760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610d62565b60085460011415611205576001600160a01b038216600090815260026020908152604080832083905560079091529020805460ff1916905560088054806111d2576111d2614a71565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b60005b60085481101561134157826001600160a01b03166008828154811061122f5761122f614aa0565b6000918252602090912001546001600160a01b0316141561132f576008805461125a90600190614afe565b8154811061126a5761126a614aa0565b600091825260209091200154600880546001600160a01b03909216918390811061129657611296614aa0565b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff1916905560088054806112fb576112fb614a71565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055505050565b8061133981614b15565b915050611208565b505050565b6001600160a01b0383166000908152600560209081526040808320338452909152812054600019146113ab576001600160a01b0384166000908152600560209081526040808320338452909152812080548492906113a5908490614afe565b90915550505b6113b6848484613235565b949350505050565b6000546001600160a01b0316331461140c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b60008183600e5461141d9190614b30565b6114279190614b4f565b90506103e8600e546114399190614b4f565b8110156114ae5760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610d62565b6023819055600c5482906114c3908590614b30565b6114cd9190614b4f565b602455505050565b60006114e16000611c7f565b6114ec61dead611c7f565b6114f69190614b8a565b600e546115039190614afe565b905090565b6000600f548211156115825760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610d62565b600061158c6136ce565b90506115988184614b4f565b9392505050565b6000546001600160a01b031633146115ed5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b6029546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152909116906333251a0b90602401600060405180830381600087803b15801561164d57600080fd5b505af1158015611661573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031633146116b65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b602754610100900460ff16156116cb57600080fd5b6018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610df9918590611731908690614b8a565b613128565b6000546001600160a01b031633146117845760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b60008183600e546117959190614b30565b61179f9190614b4f565b90506103e8600e546117b19190614b4f565b8110156118265760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610d62565b6021819055600c54829061183b908590614b30565b6118459190614b4f565b602255505050565b6000546001600160a01b0316331461189b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b6001600160a01b0381166119175760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d62565b6001600160a01b03811661dead14156119985760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d62565b600080546119b1916001600160a01b0390911690611ad8565b6119bc816001611ad8565b600080546119d2906001600160a01b0316611c7f565b11156119f9576000546119f7906001600160a01b0316826119f282611c7f565b613235565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b602954604080517f55dbc36900000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916355dbc3699160048083019260209291908290030181865afa158015611ab4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115039190614ba2565b6000546001600160a01b03163314611b265760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611b9f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b602754610100900460ff1615611bf75760405162461bcd60e51b815260206004820152601860248201527f4c697175696469747920697320616c726561647920696e2e00000000000000006044820152606401610d62565b6001600160a01b038116301415611c505760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610d62565b6029805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526007602052604081205460ff1615611cbc57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054611cde90611508565b92915050565b6000546001600160a01b03163314611d325760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b60008054611d4b916001600160a01b0390911690611ad8565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314611de25760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b600e546023819055600c546024819055602191909155602255565b6000546001600160a01b03163314611e4b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b80611ed1576001600160a01b03828116600081815260036020526040808220805460ff1916905560295490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152909116906380c581d190604401600060405180830381600087803b158015610dd057600080fd5b60045415611f38576203f48060045442611eeb9190614afe565b11611f385760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610d62565b6001600160a01b0382811660008181526003602052604090819020805460ff1916600190811790915542600490815560295492517f80c581d1000000000000000000000000000000000000000000000000000000008152908101939093526024830152909116906380c581d190604401610db6565b600080546001600160a01b03163314611ffc5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b6016546120169030906001600160a01b0316600019613128565b50600190565b6000546001600160a01b0316331461206a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b60275460ff16156120bd5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610d62565b602754610100900460ff166121145760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610d62565b61211f306001610f8c565b601754612136906001600160a01b03166001610f8c565b6029546001600160a01b0316612166576029805473ffffffffffffffffffffffffffffffffffffffff1916301790555b602954601754600d546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152911690636c115c3490608401600060405180830381600087803b1580156121f157600080fd5b505af1925050508015612202575060015b506027805460ff1916600117905542602855565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610df9918590611731908690614afe565b600061225a338484613235565b5060019392505050565b6000546001600160a01b031633146122b25760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b6014805461ffff838116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff868316620100000263ffffffff199094169288169290921792909217161790558061230f8385614bbb565b6123199190614bbb565b6014805461ffff9290921666010000000000000267ffff00000000000019909216919091179055505050565b6000546001600160a01b031633146123935760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b60155461ffff908116908516118015906123bd575060155461ffff62010000909104811690841611155b80156123db575060155461ffff640100000000909104811690831611155b80156123fb575060155461ffff6601000000000000909104811690821611155b61240457600080fd5b600081836124128688614bbb565b61241c9190614bbb565b6124269190614bbb565b9050610d7a8161ffff16111561243b57600080fd5b6013805461ffff8781167fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000090921662010000888316027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff0000161791909117640100000000868316021767ffff00000000000019166601000000000000918516919091021790556124ca8582614be1565b6013805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b0316331461255f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b6029546040517f6a34b7580000000000000000000000000000000000000000000000000000000081528415156004820152831515602482015282151560448201526001600160a01b0390911690636a34b75890606401600060405180830381600087803b1580156125cf57600080fd5b505af11580156125e3573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b0316331461263a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b60155461ffff90811690851611801590612664575060155461ffff62010000909104811690841611155b8015612682575060155461ffff640100000000909104811690831611155b80156126a2575060155461ffff6601000000000000909104811690821611155b6126ab57600080fd5b600081836126b98688614bbb565b6126c39190614bbb565b6126cd9190614bbb565b9050610d7a8161ffff1611156126e257600080fd5b6011805461ffff8781167fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000090921662010000888316027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff0000161791909117640100000000868316021767ffff00000000000019166601000000000000918516919091021790556127718582614be1565b6011805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b031633146128065760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b60155461ffff90811690851611801590612830575060155461ffff62010000909104811690841611155b801561284e575060155461ffff640100000000909104811690831611155b801561286e575060155461ffff6601000000000000909104811690821611155b61287757600080fd5b600081836128858688614bbb565b61288f9190614bbb565b6128999190614bbb565b9050610d7a8161ffff1611156128ae57600080fd5b6012805461ffff8781167fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000090921662010000888316027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff0000161791909117640100000000868316021767ffff000000000000191666010000000000009185169190910217905561293d8582614be1565b6012805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b031633146129d25760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b601c80548215157501000000000000000000000000000000000000000000027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff9091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790612a4c90831515815260200190565b60405180910390a150565b6000546001600160a01b03163314612aa55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b601b80546001600160a01b0393841673ffffffffffffffffffffffffffffffffffffffff1991821617909155601c8054929093169116179055565b6000546001600160a01b03163314612b2e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b979190614c04565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612be4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c089190614c04565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612c6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c8f9190614c04565b90506001600160a01b038116612e2d57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d019190614c04565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d729190614c04565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612dd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dfb9190614c04565b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055612e56565b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155611341903090600019613128565b6000546001600160a01b03163314612edd5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b602754610100900460ff1615612f355760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610d62565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015612f6f573d6000803e3d6000fd5b50565b6000546001600160a01b03163314612fc05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b6029546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015283151560248301529091169063eec2744e90604401610db6565b6000546001600160a01b031633146130615760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b8284600e546130709190614b30565b61307a9190614b4f565b602555600e54819061308d908490614b30565b6130979190614b4f565b60265550505050565b6029546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063fe575a8790602401602060405180830381865afa158015613104573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cde9190614c21565b6001600160a01b03831661317e5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610d62565b6001600160a01b0382166131d45760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610d62565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166132b35760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610d62565b6001600160a01b03831661332f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610d62565b600082116133a55760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610d62565b6133af848461385f565b156135895760275460ff166134065760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610d62565b6001600160a01b03841660009081526003602052604090205460ff168061344557506001600160a01b03831660009081526003602052604090205460ff165b156134c2576021548211156134c25760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610d62565b6018546001600160a01b038481169116148015906134f957506001600160a01b03831660009081526003602052604090205460ff16155b15613589576023548261350b85611c7f565b6135159190614b8a565b11156135895760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610d62565b6001600160a01b03841660009081526006602052604090205460019060ff16806135cb57506001600160a01b03841660009081526006602052604090205460ff165b156135d4575060005b6001600160a01b03841660009081526003602052604090205460ff16156136b957601c5474010000000000000000000000000000000000000000900460ff1615801561363b5750601c547501000000000000000000000000000000000000000000900460ff165b801561366057506001600160a01b03841660009081526009602052604090205460ff16155b801561368557506001600160a01b03851660009081526009602052604090205460ff16155b156136b957600061369530611c7f565b905060255481106136b75760265481106136ae57506026545b6136b78161391c565b505b6136c585858584613ddd565b95945050505050565b600f54600e5460009190825b600854811015613826578260016000600884815481106136fc576136fc614aa0565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613767575081600260006008848154811061374057613740614aa0565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561378457600e54600f5461377c9190614b4f565b935050505090565b600160006008838154811061379b5761379b614aa0565b60009182526020808320909101546001600160a01b031683528201929092526040019020546137ca9084614afe565b925060026000600883815481106137e3576137e3614aa0565b60009182526020808320909101546001600160a01b031683528201929092526040019020546138129083614afe565b91508061381e81614b15565b9150506136da565b50600e54600f546138379190614b4f565b82101561385557600e54600f5461384e9190614b4f565b9250505090565b61384e8183614b4f565b600080546001600160a01b0384811691161480159061388c57506000546001600160a01b03838116911614155b80156138b157506001600160a01b0382166000908152600b602052604090205460ff16155b80156138d657506001600160a01b0383166000908152600b602052604090205460ff16155b80156138ed57506001600160a01b03821661dead14155b801561390157506001600160a01b03821615155b801561159857506001600160a01b0383163014159392505050565b601c80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017905560145461ffff66010000000000009091041661397657613db2565b3060009081526005602090815260408083206016546001600160a01b03168452909152902054600019146139cf573060009081526005602090815260408083206016546001600160a01b03168452909152902060001990555b60145460009060029061ffff660100000000000082048116916139f3911685614b30565b6139fd9190614b4f565b613a079190614b4f565b90506000613a158284614afe565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613a4f57613a4f614aa0565b6001600160a01b03928316602091820292909201810191909152601654604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613ac1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ae59190614c04565b81600181518110613af857613af8614aa0565b6001600160a01b0392831660209182029290920101526016546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790613b57908590600090869030904290600401614c3e565b600060405180830381600087803b158015613b7157600080fd5b505af1158015613b85573d6000803e3d6000fd5b5050601454600092506002915061ffff66010000000000008204811691613bad911647614b30565b613bb79190614b4f565b613bc19190614b4f565b90508315613cba576016546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101869052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015613c50573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613c759190614c7a565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b600047118015613cec5750601454600090613ce69061ffff808216916601000000000000900416614be1565b61ffff16115b15613dad57601c546014546001600160a01b03909116906108fc90613d229061ffff808216916601000000000000900416614be1565b60145461ffff91821691613d3f9164010000000090041647614b30565b613d499190614b4f565b6040518115909202916000818181858888f19350505050158015613d71573d6000803e3d6000fd5b50601b546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015613dab573d6000803e3d6000fd5b505b505050505b50601c80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b602754600090610100900460ff16613e8957613df98585614141565b602754610100900460ff16158015613e165750613e16858561385f565b15613e895760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610d62565b6000613e97868686866142d8565b60808101516001600160a01b038816600090815260016020526040902054919250613ec191614afe565b6001600160a01b0380881660009081526001602052604080822093909355606084015191881681529190912054613ef89190614b8a565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff1615613f6a576001600160a01b038616600090815260026020526040902054613f50908590614afe565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526007602052604090205460ff1615613fca5780516001600160a01b038616600090815260026020526040902054613fb09190614b8a565b6001600160a01b0386166000908152600260205260409020555b6040810151156140ac57613fdc6136ce565b8160400151613feb9190614b30565b306000908152600160205260409020546140059190614b8a565b3060009081526001602090815260408083209390935560079052205460ff161561405a57604080820151306000908152600260205291909120546140499190614b8a565b306000908152600260205260409020555b306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604001516040516140a391815260200190565b60405180910390a35b60008160a0015111806140c3575060008160200151115b156140e4578060a00151600f60008282546140de9190614afe565b90915550505b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161412d91815260200190565b60405180910390a350600195945050505050565b602754610100900460ff16156141bf5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610d62565b6141c9828261385f565b1580156141e357506017546001600160a01b038281169116145b15610f0c576001600160a01b038083166000908152600b60205260409020805460ff19166001179055602780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560295416614260576029805473ffffffffffffffffffffffffffffffffffffffff1916301790555b601c80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6143116040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b61434a6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60006143546136ce565b90506143608186614b30565b608083015261436f878761385f565b1561441c576029546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038981166004830152888116602483015260448201889052600092169063ecd07a53906064016020604051808303816000875af1925050508015614405575060408051601f3d908101601f1916820190925261440291810190614c21565b60015b61440e57600080fd5b90508061441a57600080fd5b505b83156145ab576001600160a01b03861660009081526003602052604090205460ff161561447b576012546010805461ffff80841663ffffffff199092169190911768010000000000000000909304166201000002919091179055614508565b6001600160a01b03871660009081526003602052604090205460ff16156144d4576011546010805461ffff80841663ffffffff199092169190911768010000000000000000909304166201000002919091179055614508565b6013546010805461ffff80841663ffffffff1990921691909117680100000000000000009093041662010000029190911790555b60155460105461ffff6801000000000000000090920482169161452c911687614b30565b6145369190614b4f565b602083015260155460105461ffff68010000000000000000909204821691614565916201000090041687614b30565b61456f9190614b4f565b6040830181905260208301516145859190614b8a565b61458f9086614afe565b825260208201516145a1908290614b30565b60a08301526145c4565b6000602083018190526040830181905285835260a08301525b8082604001516145d49190614b30565b8260a001516145e39190614b8a565b82608001516145f29190614afe565b60608301525095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6001600160a01b0381168114612f6f57600080fd5b803561465081614630565b919050565b8015158114612f6f57600080fd5b803561465081614655565b6000806040838503121561468157600080fd5b823567ffffffffffffffff8082111561469957600080fd5b818501915085601f8301126146ad57600080fd5b81356020828211156146c1576146c1614601565b8160051b604051601f19603f830116810181811086821117156146e6576146e6614601565b60405292835281830193508481018201928984111561470457600080fd5b948201945b838610156147295761471a86614645565b85529482019493820193614709565b96506147389050878201614663565b9450505050509250929050565b600060208083528351808285015260005b8181101561477257858101830151858201604001528201614756565b81811115614784576000604083870101525b50601f01601f1916929092016040019392505050565b600080604083850312156147ad57600080fd5b82356147b881614630565b946020939093013593505050565b600080604083850312156147d957600080fd5b82356147e481614630565b915060208301356147f481614630565b809150509250929050565b6000806040838503121561481257600080fd5b823561481d81614630565b915060208301356147f481614655565b60008060006060848603121561484257600080fd5b833561484d81614630565b9250602084013561485d81614630565b929592945050506040919091013590565b6000806040838503121561488157600080fd5b50508035926020909101359150565b6000602082840312156148a257600080fd5b5035919050565b6000602082840312156148bb57600080fd5b813561159881614630565b803561ffff8116811461465057600080fd5b6000806000606084860312156148ed57600080fd5b6148f6846148c6565b9250614904602085016148c6565b9150614912604085016148c6565b90509250925092565b6000806000806080858703121561493157600080fd5b61493a856148c6565b9350614948602086016148c6565b9250614956604086016148c6565b9150614964606086016148c6565b905092959194509250565b60008060006060848603121561498457600080fd5b833561498f81614655565b9250602084013561499f81614655565b915060408401356149af81614655565b809150509250925092565b6000602082840312156149cc57600080fd5b813561159881614655565b600080600080608085870312156149ed57600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b83811015614a425781516001600160a01b031687529582019590820190600101614a1d565b509495945050505050565b604081526000614a606040830185614a09565b905082151560208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015614b1057614b10614acf565b500390565b6000600019821415614b2957614b29614acf565b5060010190565b6000816000190483118215151615614b4a57614b4a614acf565b500290565b600082614b85577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008219821115614b9d57614b9d614acf565b500190565b600060208284031215614bb457600080fd5b5051919050565b600061ffff808316818516808303821115614bd857614bd8614acf565b01949350505050565b600061ffff83811690831681811015614bfc57614bfc614acf565b039392505050565b600060208284031215614c1657600080fd5b815161159881614630565b600060208284031215614c3357600080fd5b815161159881614655565b85815284602082015260a060408201526000614c5d60a0830186614a09565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215614c8f57600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212208655b1bdc8790e0d40d65bee972db69c63dc81bd5dc56f4c66808ab3561cd7a764736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106103c75760003560e01c8063715018a6116101f2578063bc77169d1161010d578063dd62ed3e116100a0578063f6540ec71161006f578063f6540ec714610c8f578063fb78680d14610ca5578063fdb78c0e14610cc5578063fe575a8714610cf857600080fd5b8063dd62ed3e14610bf4578063eafb5a3c14610c3a578063ee5d9c2d14610c5a578063eec2744e14610c6f57600080fd5b8063c6831cd8116100dc578063c6831cd814610afc578063cab5ebea14610b49578063cf84770614610b69578063d3f6a15714610bd457600080fd5b8063bc77169d14610a3d578063becdf13f14610a5d578063c21f9a8a14610a7d578063c2fa418f14610aaf57600080fd5b80638da5cb5b11610185578063a9059cbb11610154578063a9059cbb146109bd578063aa22b172146109dd578063aa545473146109fd578063b6f8f8dc14610a1d57600080fd5b80638da5cb5b1461093557806395d89b4114610428578063962dfc751461097d578063a457c2d71461099d57600080fd5b806388f82020116101c157806388f82020146108fc578063893d20e8146109355780638a63bd9b146109535780638a8c523c1461096857600080fd5b8063715018a614610865578063751039fc1461087a5780637b45d4311461088f57806380c581d1146108dc57600080fd5b806333251a0b116102e25780634fbee193116102755780635c24b074116102445780635c24b074146107f957806364038409146108195780636fd8fb7a1461082f57806370a082311461084557600080fd5b80634fbee1931461076c57806350a8e016146107a557806355dbc369146107c4578063590ffdce146107d957600080fd5b80633f3cf56c116102b15780633f3cf56c146106f2578063452ed4f1146107125780634ada218b146107325780634fb2e45d1461074c57600080fd5b806333251a0b1461067257806337e294d514610692578063384f36b6146106b257806339509351146106d257600080fd5b806318160ddd1161035a5780632b112e49116103295780632b112e49146106055780632c76235a1461061a5780632d83811914610630578063313ce5671461065057600080fd5b806318160ddd146105245780631b6afa2d1461054357806323b872dd146105c557806326003957146105e557600080fd5b8063095ea7b311610396578063095ea7b314610494578063122fea3b146104c457806313b4a7f4146104e457806313e461921461050457600080fd5b806303fd2a45146103d357806305bbedb61461040657806306fdde03146104285780630758d9241461047457600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e961dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561041257600080fd5b5061042661042136600461466e565b610d18565b005b34801561043457600080fd5b50604080518082018252600881527f524f424f53484942000000000000000000000000000000000000000000000000602082015290516103fd9190614745565b34801561048057600080fd5b506016546103e9906001600160a01b031681565b3480156104a057600080fd5b506104b46104af36600461479a565b610dec565b60405190151581526020016103fd565b3480156104d057600080fd5b506018546103e9906001600160a01b031681565b3480156104f057600080fd5b506104266104ff3660046147c6565b610e02565b34801561051057600080fd5b5061042661051f3660046147ff565b610f8c565b34801561053057600080fd5b50600e545b6040519081526020016103fd565b34801561054f57600080fd5b506015546105909061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016103fd565b3480156105d157600080fd5b506104b46105e036600461482d565b611346565b3480156105f157600080fd5b5061042661060036600461486e565b6113be565b34801561061157600080fd5b506105356114d5565b34801561062657600080fd5b50610535602a5481565b34801561063c57600080fd5b5061053561064b366004614890565b611508565b34801561065c57600080fd5b50600d5460405160ff90911681526020016103fd565b34801561067e57600080fd5b5061042661068d3660046148a9565b61159f565b34801561069e57600080fd5b50601c546103e9906001600160a01b031681565b3480156106be57600080fd5b506104266106cd3660046148a9565b611668565b3480156106de57600080fd5b506104b46106ed36600461479a565b6116fa565b3480156106fe57600080fd5b5061042661070d36600461486e565b611736565b34801561071e57600080fd5b506017546103e9906001600160a01b031681565b34801561073e57600080fd5b506027546104b49060ff1681565b34801561075857600080fd5b506104266107673660046148a9565b61184d565b34801561077857600080fd5b506104b46107873660046148a9565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156107b157600080fd5b506027546104b490610100900460ff1681565b3480156107d057600080fd5b50610535611a51565b3480156107e557600080fd5b506104266107f43660046147ff565b611ad8565b34801561080557600080fd5b506104266108143660046148a9565b611b51565b34801561082557600080fd5b5061053560225481565b34801561083b57600080fd5b5061053560285481565b34801561085157600080fd5b506105356108603660046148a9565b611c7f565b34801561087157600080fd5b50610426611ce4565b34801561088657600080fd5b50610426611d94565b34801561089b57600080fd5b506011546105909061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b3480156108e857600080fd5b506104266108f73660046147ff565b611dfd565b34801561090857600080fd5b506104b46109173660046148a9565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561094157600080fd5b506000546001600160a01b03166103e9565b34801561095f57600080fd5b506104b4611fad565b34801561097457600080fd5b5061042661201c565b34801561098957600080fd5b50601b546103e9906001600160a01b031681565b3480156109a957600080fd5b506104b46109b836600461479a565b612216565b3480156109c957600080fd5b506104b46109d836600461479a565b61224d565b3480156109e957600080fd5b506104266109f83660046148d8565b612264565b348015610a0957600080fd5b50610426610a1836600461491b565b612345565b348015610a2957600080fd5b50610426610a3836600461496f565b612511565b348015610a4957600080fd5b50610426610a5836600461491b565b6125ec565b348015610a6957600080fd5b50610426610a7836600461491b565b6127b8565b348015610a8957600080fd5b506029546104b49074010000000000000000000000000000000000000000900460ff1681565b348015610abb57600080fd5b506013546105909061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b348015610b0857600080fd5b506012546105909061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b348015610b5557600080fd5b50610426610b643660046149ba565b612984565b348015610b7557600080fd5b50601454610ba69061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103fd565b348015610be057600080fd5b50610426610bef3660046147c6565b612a57565b348015610c0057600080fd5b50610535610c0f3660046147c6565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610c4657600080fd5b50610426610c553660046148a9565b612ae0565b348015610c6657600080fd5b50610426612e8f565b348015610c7b57600080fd5b50610426610c8a3660046147ff565b612f72565b348015610c9b57600080fd5b5061053560245481565b348015610cb157600080fd5b50610426610cc03660046149d7565b613013565b348015610cd157600080fd5b50601c546104b4907501000000000000000000000000000000000000000000900460ff1681565b348015610d0457600080fd5b506104b4610d133660046148a9565b6130a0565b6000546001600160a01b03163314610d6b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b6029546040517f05bbedb60000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906305bbedb690610db69085908590600401614a4d565b600060405180830381600087803b158015610dd057600080fd5b505af1158015610de4573d6000803e3d6000fd5b505050505050565b6000610df9338484613128565b50600192915050565b6000546001600160a01b03163314610e505760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b600a5460ff16610ea25760405162461bcd60e51b815260206004820152601660248201527f46756e6374696f6e20616c726561647920757365642e000000000000000000006044820152606401610d62565b806001600160a01b0316826001600160a01b03161415610f10576001600160a01b0381166000908152600b602090815260408083208054600160ff19918216811790925560099093529220805490911682179055610f01908290611ad8565b610f0c816001610f8c565b5050565b6001600160a01b038281166000818152600b602090815260408083208054600160ff19918216811790925595871680855282852080548816831790559484526009909252808320805486168317905592825291902080549092168117909155610f7a908390611ad8565b610f85816001611ad8565b610f018260015b6000546001600160a01b03163314610fda5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b6001811515141561111c576001600160a01b03821660009081526007602052604090205460ff161561104e5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610d62565b6001600160a01b038216600090815260016020526040902054156110a8576001600160a01b03821660009081526001602052604090205461108e90611508565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee301805473ffffffffffffffffffffffffffffffffffffffff19169091179055565b80610f0c576001600160a01b03821660009081526007602052604090205460ff166111895760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610d62565b60085460011415611205576001600160a01b038216600090815260026020908152604080832083905560079091529020805460ff1916905560088054806111d2576111d2614a71565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b60005b60085481101561134157826001600160a01b03166008828154811061122f5761122f614aa0565b6000918252602090912001546001600160a01b0316141561132f576008805461125a90600190614afe565b8154811061126a5761126a614aa0565b600091825260209091200154600880546001600160a01b03909216918390811061129657611296614aa0565b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff1916905560088054806112fb576112fb614a71565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055505050565b8061133981614b15565b915050611208565b505050565b6001600160a01b0383166000908152600560209081526040808320338452909152812054600019146113ab576001600160a01b0384166000908152600560209081526040808320338452909152812080548492906113a5908490614afe565b90915550505b6113b6848484613235565b949350505050565b6000546001600160a01b0316331461140c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b60008183600e5461141d9190614b30565b6114279190614b4f565b90506103e8600e546114399190614b4f565b8110156114ae5760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610d62565b6023819055600c5482906114c3908590614b30565b6114cd9190614b4f565b602455505050565b60006114e16000611c7f565b6114ec61dead611c7f565b6114f69190614b8a565b600e546115039190614afe565b905090565b6000600f548211156115825760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610d62565b600061158c6136ce565b90506115988184614b4f565b9392505050565b6000546001600160a01b031633146115ed5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b6029546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152909116906333251a0b90602401600060405180830381600087803b15801561164d57600080fd5b505af1158015611661573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031633146116b65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b602754610100900460ff16156116cb57600080fd5b6018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610df9918590611731908690614b8a565b613128565b6000546001600160a01b031633146117845760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b60008183600e546117959190614b30565b61179f9190614b4f565b90506103e8600e546117b19190614b4f565b8110156118265760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610d62565b6021819055600c54829061183b908590614b30565b6118459190614b4f565b602255505050565b6000546001600160a01b0316331461189b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b6001600160a01b0381166119175760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d62565b6001600160a01b03811661dead14156119985760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d62565b600080546119b1916001600160a01b0390911690611ad8565b6119bc816001611ad8565b600080546119d2906001600160a01b0316611c7f565b11156119f9576000546119f7906001600160a01b0316826119f282611c7f565b613235565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b602954604080517f55dbc36900000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916355dbc3699160048083019260209291908290030181865afa158015611ab4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115039190614ba2565b6000546001600160a01b03163314611b265760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611b9f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b602754610100900460ff1615611bf75760405162461bcd60e51b815260206004820152601860248201527f4c697175696469747920697320616c726561647920696e2e00000000000000006044820152606401610d62565b6001600160a01b038116301415611c505760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610d62565b6029805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526007602052604081205460ff1615611cbc57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054611cde90611508565b92915050565b6000546001600160a01b03163314611d325760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b60008054611d4b916001600160a01b0390911690611ad8565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314611de25760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b600e546023819055600c546024819055602191909155602255565b6000546001600160a01b03163314611e4b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b80611ed1576001600160a01b03828116600081815260036020526040808220805460ff1916905560295490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152909116906380c581d190604401600060405180830381600087803b158015610dd057600080fd5b60045415611f38576203f48060045442611eeb9190614afe565b11611f385760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610d62565b6001600160a01b0382811660008181526003602052604090819020805460ff1916600190811790915542600490815560295492517f80c581d1000000000000000000000000000000000000000000000000000000008152908101939093526024830152909116906380c581d190604401610db6565b600080546001600160a01b03163314611ffc5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b6016546120169030906001600160a01b0316600019613128565b50600190565b6000546001600160a01b0316331461206a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b60275460ff16156120bd5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610d62565b602754610100900460ff166121145760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610d62565b61211f306001610f8c565b601754612136906001600160a01b03166001610f8c565b6029546001600160a01b0316612166576029805473ffffffffffffffffffffffffffffffffffffffff1916301790555b602954601754600d546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152911690636c115c3490608401600060405180830381600087803b1580156121f157600080fd5b505af1925050508015612202575060015b506027805460ff1916600117905542602855565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610df9918590611731908690614afe565b600061225a338484613235565b5060019392505050565b6000546001600160a01b031633146122b25760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b6014805461ffff838116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff868316620100000263ffffffff199094169288169290921792909217161790558061230f8385614bbb565b6123199190614bbb565b6014805461ffff9290921666010000000000000267ffff00000000000019909216919091179055505050565b6000546001600160a01b031633146123935760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b60155461ffff908116908516118015906123bd575060155461ffff62010000909104811690841611155b80156123db575060155461ffff640100000000909104811690831611155b80156123fb575060155461ffff6601000000000000909104811690821611155b61240457600080fd5b600081836124128688614bbb565b61241c9190614bbb565b6124269190614bbb565b9050610d7a8161ffff16111561243b57600080fd5b6013805461ffff8781167fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000090921662010000888316027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff0000161791909117640100000000868316021767ffff00000000000019166601000000000000918516919091021790556124ca8582614be1565b6013805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b0316331461255f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b6029546040517f6a34b7580000000000000000000000000000000000000000000000000000000081528415156004820152831515602482015282151560448201526001600160a01b0390911690636a34b75890606401600060405180830381600087803b1580156125cf57600080fd5b505af11580156125e3573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b0316331461263a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b60155461ffff90811690851611801590612664575060155461ffff62010000909104811690841611155b8015612682575060155461ffff640100000000909104811690831611155b80156126a2575060155461ffff6601000000000000909104811690821611155b6126ab57600080fd5b600081836126b98688614bbb565b6126c39190614bbb565b6126cd9190614bbb565b9050610d7a8161ffff1611156126e257600080fd5b6011805461ffff8781167fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000090921662010000888316027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff0000161791909117640100000000868316021767ffff00000000000019166601000000000000918516919091021790556127718582614be1565b6011805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b031633146128065760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b60155461ffff90811690851611801590612830575060155461ffff62010000909104811690841611155b801561284e575060155461ffff640100000000909104811690831611155b801561286e575060155461ffff6601000000000000909104811690821611155b61287757600080fd5b600081836128858688614bbb565b61288f9190614bbb565b6128999190614bbb565b9050610d7a8161ffff1611156128ae57600080fd5b6012805461ffff8781167fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000090921662010000888316027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff0000161791909117640100000000868316021767ffff000000000000191666010000000000009185169190910217905561293d8582614be1565b6012805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b031633146129d25760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b601c80548215157501000000000000000000000000000000000000000000027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff9091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790612a4c90831515815260200190565b60405180910390a150565b6000546001600160a01b03163314612aa55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b601b80546001600160a01b0393841673ffffffffffffffffffffffffffffffffffffffff1991821617909155601c8054929093169116179055565b6000546001600160a01b03163314612b2e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b979190614c04565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612be4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c089190614c04565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612c6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c8f9190614c04565b90506001600160a01b038116612e2d57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d019190614c04565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d729190614c04565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612dd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dfb9190614c04565b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055612e56565b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155611341903090600019613128565b6000546001600160a01b03163314612edd5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b602754610100900460ff1615612f355760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610d62565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015612f6f573d6000803e3d6000fd5b50565b6000546001600160a01b03163314612fc05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b6029546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015283151560248301529091169063eec2744e90604401610db6565b6000546001600160a01b031633146130615760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d62565b8284600e546130709190614b30565b61307a9190614b4f565b602555600e54819061308d908490614b30565b6130979190614b4f565b60265550505050565b6029546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063fe575a8790602401602060405180830381865afa158015613104573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cde9190614c21565b6001600160a01b03831661317e5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610d62565b6001600160a01b0382166131d45760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610d62565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166132b35760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610d62565b6001600160a01b03831661332f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610d62565b600082116133a55760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610d62565b6133af848461385f565b156135895760275460ff166134065760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610d62565b6001600160a01b03841660009081526003602052604090205460ff168061344557506001600160a01b03831660009081526003602052604090205460ff165b156134c2576021548211156134c25760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610d62565b6018546001600160a01b038481169116148015906134f957506001600160a01b03831660009081526003602052604090205460ff16155b15613589576023548261350b85611c7f565b6135159190614b8a565b11156135895760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610d62565b6001600160a01b03841660009081526006602052604090205460019060ff16806135cb57506001600160a01b03841660009081526006602052604090205460ff165b156135d4575060005b6001600160a01b03841660009081526003602052604090205460ff16156136b957601c5474010000000000000000000000000000000000000000900460ff1615801561363b5750601c547501000000000000000000000000000000000000000000900460ff165b801561366057506001600160a01b03841660009081526009602052604090205460ff16155b801561368557506001600160a01b03851660009081526009602052604090205460ff16155b156136b957600061369530611c7f565b905060255481106136b75760265481106136ae57506026545b6136b78161391c565b505b6136c585858584613ddd565b95945050505050565b600f54600e5460009190825b600854811015613826578260016000600884815481106136fc576136fc614aa0565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613767575081600260006008848154811061374057613740614aa0565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561378457600e54600f5461377c9190614b4f565b935050505090565b600160006008838154811061379b5761379b614aa0565b60009182526020808320909101546001600160a01b031683528201929092526040019020546137ca9084614afe565b925060026000600883815481106137e3576137e3614aa0565b60009182526020808320909101546001600160a01b031683528201929092526040019020546138129083614afe565b91508061381e81614b15565b9150506136da565b50600e54600f546138379190614b4f565b82101561385557600e54600f5461384e9190614b4f565b9250505090565b61384e8183614b4f565b600080546001600160a01b0384811691161480159061388c57506000546001600160a01b03838116911614155b80156138b157506001600160a01b0382166000908152600b602052604090205460ff16155b80156138d657506001600160a01b0383166000908152600b602052604090205460ff16155b80156138ed57506001600160a01b03821661dead14155b801561390157506001600160a01b03821615155b801561159857506001600160a01b0383163014159392505050565b601c80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017905560145461ffff66010000000000009091041661397657613db2565b3060009081526005602090815260408083206016546001600160a01b03168452909152902054600019146139cf573060009081526005602090815260408083206016546001600160a01b03168452909152902060001990555b60145460009060029061ffff660100000000000082048116916139f3911685614b30565b6139fd9190614b4f565b613a079190614b4f565b90506000613a158284614afe565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613a4f57613a4f614aa0565b6001600160a01b03928316602091820292909201810191909152601654604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613ac1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ae59190614c04565b81600181518110613af857613af8614aa0565b6001600160a01b0392831660209182029290920101526016546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790613b57908590600090869030904290600401614c3e565b600060405180830381600087803b158015613b7157600080fd5b505af1158015613b85573d6000803e3d6000fd5b5050601454600092506002915061ffff66010000000000008204811691613bad911647614b30565b613bb79190614b4f565b613bc19190614b4f565b90508315613cba576016546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101869052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015613c50573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613c759190614c7a565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b600047118015613cec5750601454600090613ce69061ffff808216916601000000000000900416614be1565b61ffff16115b15613dad57601c546014546001600160a01b03909116906108fc90613d229061ffff808216916601000000000000900416614be1565b60145461ffff91821691613d3f9164010000000090041647614b30565b613d499190614b4f565b6040518115909202916000818181858888f19350505050158015613d71573d6000803e3d6000fd5b50601b546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015613dab573d6000803e3d6000fd5b505b505050505b50601c80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b602754600090610100900460ff16613e8957613df98585614141565b602754610100900460ff16158015613e165750613e16858561385f565b15613e895760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610d62565b6000613e97868686866142d8565b60808101516001600160a01b038816600090815260016020526040902054919250613ec191614afe565b6001600160a01b0380881660009081526001602052604080822093909355606084015191881681529190912054613ef89190614b8a565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff1615613f6a576001600160a01b038616600090815260026020526040902054613f50908590614afe565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526007602052604090205460ff1615613fca5780516001600160a01b038616600090815260026020526040902054613fb09190614b8a565b6001600160a01b0386166000908152600260205260409020555b6040810151156140ac57613fdc6136ce565b8160400151613feb9190614b30565b306000908152600160205260409020546140059190614b8a565b3060009081526001602090815260408083209390935560079052205460ff161561405a57604080820151306000908152600260205291909120546140499190614b8a565b306000908152600260205260409020555b306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604001516040516140a391815260200190565b60405180910390a35b60008160a0015111806140c3575060008160200151115b156140e4578060a00151600f60008282546140de9190614afe565b90915550505b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161412d91815260200190565b60405180910390a350600195945050505050565b602754610100900460ff16156141bf5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610d62565b6141c9828261385f565b1580156141e357506017546001600160a01b038281169116145b15610f0c576001600160a01b038083166000908152600b60205260409020805460ff19166001179055602780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560295416614260576029805473ffffffffffffffffffffffffffffffffffffffff1916301790555b601c80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6143116040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b61434a6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60006143546136ce565b90506143608186614b30565b608083015261436f878761385f565b1561441c576029546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038981166004830152888116602483015260448201889052600092169063ecd07a53906064016020604051808303816000875af1925050508015614405575060408051601f3d908101601f1916820190925261440291810190614c21565b60015b61440e57600080fd5b90508061441a57600080fd5b505b83156145ab576001600160a01b03861660009081526003602052604090205460ff161561447b576012546010805461ffff80841663ffffffff199092169190911768010000000000000000909304166201000002919091179055614508565b6001600160a01b03871660009081526003602052604090205460ff16156144d4576011546010805461ffff80841663ffffffff199092169190911768010000000000000000909304166201000002919091179055614508565b6013546010805461ffff80841663ffffffff1990921691909117680100000000000000009093041662010000029190911790555b60155460105461ffff6801000000000000000090920482169161452c911687614b30565b6145369190614b4f565b602083015260155460105461ffff68010000000000000000909204821691614565916201000090041687614b30565b61456f9190614b4f565b6040830181905260208301516145859190614b8a565b61458f9086614afe565b825260208201516145a1908290614b30565b60a08301526145c4565b6000602083018190526040830181905285835260a08301525b8082604001516145d49190614b30565b8260a001516145e39190614b8a565b82608001516145f29190614afe565b60608301525095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6001600160a01b0381168114612f6f57600080fd5b803561465081614630565b919050565b8015158114612f6f57600080fd5b803561465081614655565b6000806040838503121561468157600080fd5b823567ffffffffffffffff8082111561469957600080fd5b818501915085601f8301126146ad57600080fd5b81356020828211156146c1576146c1614601565b8160051b604051601f19603f830116810181811086821117156146e6576146e6614601565b60405292835281830193508481018201928984111561470457600080fd5b948201945b838610156147295761471a86614645565b85529482019493820193614709565b96506147389050878201614663565b9450505050509250929050565b600060208083528351808285015260005b8181101561477257858101830151858201604001528201614756565b81811115614784576000604083870101525b50601f01601f1916929092016040019392505050565b600080604083850312156147ad57600080fd5b82356147b881614630565b946020939093013593505050565b600080604083850312156147d957600080fd5b82356147e481614630565b915060208301356147f481614630565b809150509250929050565b6000806040838503121561481257600080fd5b823561481d81614630565b915060208301356147f481614655565b60008060006060848603121561484257600080fd5b833561484d81614630565b9250602084013561485d81614630565b929592945050506040919091013590565b6000806040838503121561488157600080fd5b50508035926020909101359150565b6000602082840312156148a257600080fd5b5035919050565b6000602082840312156148bb57600080fd5b813561159881614630565b803561ffff8116811461465057600080fd5b6000806000606084860312156148ed57600080fd5b6148f6846148c6565b9250614904602085016148c6565b9150614912604085016148c6565b90509250925092565b6000806000806080858703121561493157600080fd5b61493a856148c6565b9350614948602086016148c6565b9250614956604086016148c6565b9150614964606086016148c6565b905092959194509250565b60008060006060848603121561498457600080fd5b833561498f81614655565b9250602084013561499f81614655565b915060408401356149af81614655565b809150509250925092565b6000602082840312156149cc57600080fd5b813561159881614655565b600080600080608085870312156149ed57600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b83811015614a425781516001600160a01b031687529582019590820190600101614a1d565b509495945050505050565b604081526000614a606040830185614a09565b905082151560208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015614b1057614b10614acf565b500390565b6000600019821415614b2957614b29614acf565b5060010190565b6000816000190483118215151615614b4a57614b4a614acf565b500290565b600082614b85577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008219821115614b9d57614b9d614acf565b500190565b600060208284031215614bb457600080fd5b5051919050565b600061ffff808316818516808303821115614bd857614bd8614acf565b01949350505050565b600061ffff83811690831681811015614bfc57614bfc614acf565b039392505050565b600060208284031215614c1657600080fd5b815161159881614630565b600060208284031215614c3357600080fd5b815161159881614655565b85815284602082015260a060408201526000614c5d60a0830186614a09565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215614c8f57600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212208655b1bdc8790e0d40d65bee972db69c63dc81bd5dc56f4c66808ab3561cd7a764736f6c634300080a0033

Deployed Bytecode Sourcemap

7735:27350:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10659:73;;;;;;;;;;;;10690:42;10659:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;10659:73:0;;;;;;;;20957:172;;;;;;;;;;-1:-1:-1;20957:172:0;;;;;:::i;:::-;;:::i;:::-;;15474:80;;;;;;;;;;-1:-1:-1;15546:5:0;;;;;;;;;;;;;;;;15474:80;;;;15546:5;15474:80;:::i;10350:35::-;;;;;;;;;;-1:-1:-1;10350:35:0;;;;-1:-1:-1;;;;;10350:35:0;;;16168:161;;;;;;;;;;-1:-1:-1;16168:161:0;;;;;:::i;:::-;;:::i;:::-;;;3646:14:1;;3639:22;3621:41;;3609:2;3594:18;16168:161:0;3481:187:1;10422:28:0;;;;;;;;;;-1:-1:-1;10422:28:0;;;;-1:-1:-1;;;;;10422:28:0;;;25446:806;;;;;;;;;;-1:-1:-1;25446:806:0;;;;;:::i;:::-;;:::i;19401:1139::-;;;;;;;;;;-1:-1:-1;19401:1139:0;;;;;:::i;:::-;;:::i;15209:83::-;;;;;;;;;;-1:-1:-1;15282:7:0;;15209:83;;;4599:25:1;;;4587:2;4572:18;15209:83:0;4453:177:1;10132:209:0;;;;;;;;;;-1:-1:-1;10132:209:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4894:6:1;4927:15;;;4909:34;;4979:15;;;4974:2;4959:18;;4952:43;5031:15;;;5011:18;;;5004:43;;;;5083:15;;5078:2;5063:18;;5056:43;5136:15;;;5130:3;5115:19;;5108:44;4871:3;4856:19;10132:209:0;4635:523:1;16835:306:0;;;;;;;;;;-1:-1:-1;16835:306:0;;;;;:::i;:::-;;:::i;24227:340::-;;;;;;;;;;-1:-1:-1;24227:340:0;;;;;:::i;:::-;;:::i;18849:141::-;;;;;;;;;;;;;:::i;11809:47::-;;;;;;;;;;;;;;;;26591:250;;;;;;;;;;-1:-1:-1;26591:250:0;;;;;:::i;:::-;;:::i;15298:80::-;;;;;;;;;;-1:-1:-1;15366:9:0;;15298:80;;15366:9;;;;6204:36:1;;6192:2;6177:18;15298:80:0;6062:184:1;21382:108:0;;;;;;;;;;-1:-1:-1;21382:108:0;;;;;:::i;:::-;;:::i;10839:88::-;;;;;;;;;;-1:-1:-1;10839:88:0;;;;-1:-1:-1;;;;;10839:88:0;;;18695:146;;;;;;;;;;-1:-1:-1;18695:146:0;;;;;:::i;:::-;;:::i;17149:215::-;;;;;;;;;;-1:-1:-1;17149:215:0;;;;;:::i;:::-;;:::i;23879:340::-;;;;;;;;;;-1:-1:-1;23879:340:0;;;;;:::i;:::-;;:::i;10392:21::-;;;;;;;;;;-1:-1:-1;10392:21:0;;;;-1:-1:-1;;;;;10392:21:0;;;11608:34;;;;;;;;;;-1:-1:-1;11608:34:0;;;;;;;;14063:590;;;;;;;;;;-1:-1:-1;14063:590:0;;;;;:::i;:::-;;:::i;18998:125::-;;;;;;;;;;-1:-1:-1;18998:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;19087:28:0;19063:4;19087:28;;;:19;:28;;;;;;;;;18998:125;11649:36;;;;;;;;;;-1:-1:-1;11649:36:0;;;;;;;;;;;21270:104;;;;;;;;;;;;;:::i;19131:134::-;;;;;;;;;;-1:-1:-1;19131:134:0;;;;;:::i;:::-;;:::i;20548:248::-;;;;;;;;;;-1:-1:-1;20548:248:0;;;;;:::i;:::-;;:::i;11243:75::-;;;;;;;;;;;;;;;;11692:33;;;;;;;;;;;;;;;;15787:198;;;;;;;;;;-1:-1:-1;15787:198:0;;;;;:::i;:::-;;:::i;14661:195::-;;;;;;;;;;;;;:::i;24575:203::-;;;;;;;;;;;;;:::i;9487:158::-;;;;;;;;;;-1:-1:-1;9487:158:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18187:500;;;;;;;;;;-1:-1:-1;18187:500:0;;;;;:::i;:::-;;:::i;19273:120::-;;;;;;;;;;-1:-1:-1;19273:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;19365:20:0;19341:4;19365:20;;;:11;:20;;;;;;;;;19273:120;15560:80;;;;;;;;;;-1:-1:-1;15612:7:0;14041:6;-1:-1:-1;;;;;14041:6:0;15560:80;18849:141;16654:173;;;;;;;;;;;;;:::i;30562:575::-;;;;;;;;;;;;;:::i;10739:93::-;;;;;;;;;;-1:-1:-1;10739:93:0;;;;-1:-1:-1;;;;;10739:93:0;;;17372:225;;;;;;;;;;-1:-1:-1;17372:225:0;;;;;:::i;:::-;;:::i;15993:167::-;;;;;;;;;;-1:-1:-1;15993:167:0;;;;;:::i;:::-;;:::i;23611:260::-;;;;;;;;;;-1:-1:-1;23611:260:0;;;;;:::i;:::-;;:::i;22948:655::-;;;;;;;;;;-1:-1:-1;22948:655:0;;;;;:::i;:::-;;:::i;21498:170::-;;;;;;;;;;-1:-1:-1;21498:170:0;;;;;:::i;:::-;;:::i;21676:625::-;;;;;;;;;;-1:-1:-1;21676:625:0;;;;;:::i;:::-;;:::i;22309:631::-;;;;;;;;;;-1:-1:-1;22309:631:0;;;;;:::i;:::-;;:::i;11760:42::-;;;;;;;;;;-1:-1:-1;11760:42:0;;;;;;;;;;;9823:163;;;;;;;;;;-1:-1:-1;9823:163:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9654:160;;;;;;;;;;-1:-1:-1;9654:160:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25273:165;;;;;;;;;;-1:-1:-1;25273:165:0;;;;;:::i;:::-;;:::i;9995:128::-;;;;;;;;;;-1:-1:-1;9995:128:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8648:6:1;8681:15;;;8663:34;;8733:15;;;8728:2;8713:18;;8706:43;8785:15;;;8765:18;;;8758:43;;;;8837:15;;;8832:2;8817:18;;8810:43;8625:3;8610:19;9995:128:0;8415:444:1;25083:182:0;;;;;;;;;;-1:-1:-1;25083:182:0;;;;;:::i;:::-;;:::i;15646:133::-;;;;;;;;;;-1:-1:-1;15646:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;15748:19:0;;;15730:7;15748:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;15646:133;17605:574;;;;;;;;;;-1:-1:-1;17605:574:0;;;;;:::i;:::-;;:::i;31145:183::-;;;;;;;;;;;;;:::i;20804:145::-;;;;;;;;;;-1:-1:-1;20804:145:0;;;;;:::i;:::-;;:::i;11402:77::-;;;;;;;;;;;;;;;;24786:289;;;;;;;;;;-1:-1:-1;24786:289:0;;;;;:::i;:::-;;:::i;10958:39::-;;;;;;;;;;-1:-1:-1;10958:39:0;;;;;;;;;;;21137:125;;;;;;;;;;-1:-1:-1;21137:125:0;;;;;:::i;:::-;;:::i;20957:172::-;12401:6;;-1:-1:-1;;;;;12401:6:0;189:10;12401:22;12393:52;;;;-1:-1:-1;;;12393:52:0;;9865:2:1;12393:52:0;;;9847:21:1;9904:2;9884:18;;;9877:30;-1:-1:-1;;;9923:18:1;;;9916:47;9980:18;;12393:52:0;;;;;;;;;21065:9:::1;::::0;:56:::1;::::0;;;;-1:-1:-1;;;;;21065:9:0;;::::1;::::0;:37:::1;::::0;:56:::1;::::0;21103:8;;21113:7;;21065:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20957:172:::0;;:::o;16168:161::-;16243:4;16260:39;189:10;16283:7;16292:6;16260:8;:39::i;:::-;-1:-1:-1;16317:4:0;16168:161;;;;:::o;25446:806::-;12401:6;;-1:-1:-1;;;;;12401:6:0;189:10;12401:22;12393:52;;;;-1:-1:-1;;;12393:52:0;;9865:2:1;12393:52:0;;;9847:21:1;9904:2;9884:18;;;9877:30;-1:-1:-1;;;9923:18:1;;;9916:47;9980:18;;12393:52:0;9663:341:1;12393:52:0;25550:23:::1;::::0;::::1;;25542:58;;;::::0;-1:-1:-1;;;25542:58:0;;11047:2:1;25542:58:0::1;::::0;::::1;11029:21:1::0;11086:2;11066:18;;;11059:30;11125:24;11105:18;;;11098:52;11167:18;;25542:58:0::1;10845:346:1::0;25542:58:0::1;25625:7;-1:-1:-1::0;;;;;25615:17:0::1;:6;-1:-1:-1::0;;;;;25615:17:0::1;;25611:634;;;-1:-1:-1::0;;;;;25649:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;;;:33;;25678:4:::1;-1:-1:-1::0;;25649:33:0;;::::1;::::0;::::1;::::0;;;25697:16:::1;:25:::0;;;;;:32;;;;::::1;::::0;::::1;::::0;;25744:34:::1;::::0;25649:26;;25744:19:::1;:34::i;:::-;25793:36;25815:7;25824:4;25793:21;:36::i;:::-;25446:806:::0;;:::o;25611:634::-:1;-1:-1:-1::0;;;;;25862:25:0;;::::1;;::::0;;;:17:::1;:25;::::0;;;;;;;:32;;25890:4:::1;-1:-1:-1::0;;25862:32:0;;::::1;::::0;::::1;::::0;;;25909:26;;::::1;::::0;;;;;;:33;;;::::1;::::0;::::1;::::0;;25957:24;;;:16:::1;:24:::0;;;;;;:31;;;::::1;::::0;::::1;::::0;;26003:25;;;;;;:32;;;;::::1;::::0;::::1;::::0;;;26050:33:::1;::::0;25862:25;;26050:19:::1;:33::i;:::-;26098:34;26118:7;26127:4;26098:19;:34::i;:::-;26147:35;26169:6;26177:4;19401:1139:::0;12401:6;;-1:-1:-1;;;;;12401:6:0;189:10;12401:22;12393:52;;;;-1:-1:-1;;;12393:52:0;;9865:2:1;12393:52:0;;;9847:21:1;9904:2;9884:18;;;9877:30;-1:-1:-1;;;9923:18:1;;;9916:47;9980:18;;12393:52:0;9663:341:1;12393:52:0;19506:4:::1;19495:15:::0;::::1;;;19491:1042;;;-1:-1:-1::0;;;;;19536:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;19535:21;19527:62;;;::::0;-1:-1:-1;;;19527:62:0;;11398:2:1;19527:62:0::1;::::0;::::1;11380:21:1::0;11437:2;11417:18;;;11410:30;11476;11456:18;;;11449:58;11524:18;;19527:62:0::1;11196:352:1::0;19527:62:0::1;-1:-1:-1::0;;;;;19607:16:0;::::1;19626:1;19607:16:::0;;;:7:::1;:16;::::0;;;;;:20;19604:116:::1;;-1:-1:-1::0;;;;;19687:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;19667:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;19648:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;19604:116:::1;-1:-1:-1::0;;;;;;19734:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;19734:27:0::1;19757:4;19734:27:::0;;::::1;::::0;;;19776:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;19776:23:0::1;::::0;;::::1;::::0;;25446:806::o;19491:1042::-:1;19821:16:::0;19817:716:::1;;-1:-1:-1::0;;;;;19862:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;19854:61;;;::::0;-1:-1:-1;;;19854:61:0;;11755:2:1;19854:61:0::1;::::0;::::1;11737:21:1::0;11794:2;11774:18;;;11767:30;11833;11813:18;;;11806:58;11881:18;;19854:61:0::1;11553:352:1::0;19854:61:0::1;19933:9;:16:::0;19953:1:::1;19933:21;19930:592;;;-1:-1:-1::0;;;;;19974:16:0;::::1;19993:1;19974:16:::0;;;:7:::1;:16;::::0;;;;;;;:20;;;20013:11:::1;:20:::0;;;;;:28;;-1:-1:-1;;20013:28:0::1;::::0;;20060:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;20060:15:0;;;;;-1:-1:-1;;20060:15:0::1;::::0;;;;;25446:806;;:::o;19930:592::-:1;20121:9;20116:391;20140:9;:16:::0;20136:20;::::1;20116:391;;;20206:7;-1:-1:-1::0;;;;;20190:23:0::1;:9;20200:1;20190:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;20190:12:0::1;:23;20186:302;;;20257:9;20267:16:::0;;:20:::1;::::0;20286:1:::1;::::0;20267:20:::1;:::i;:::-;20257:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;20242:9:::1;:12:::0;;-1:-1:-1;;;;;20257:31:0;;::::1;::::0;20252:1;;20242:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;20242:46:0::1;-1:-1:-1::0;;;;;20242:46:0;;::::1;;::::0;;20315:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;20362:11:::1;:20:::0;;;;:28;;-1:-1:-1;;20362:28:0::1;::::0;;20417:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;20417:15:0;;;;;-1:-1:-1;;20417:15:0::1;::::0;;;;;20116:391:::1;19401:1139:::0;;:::o;20186:302::-:1;20158:3:::0;::::1;::::0;::::1;:::i;:::-;;;;20116:391;;;;19401:1139:::0;;:::o;16835:306::-;-1:-1:-1;;;;;16956:19:0;;16935:4;16956:19;;;:11;:19;;;;;;;;16976:10;16956:31;;;;;;;;-1:-1:-1;;16956:52:0;16952:126;;-1:-1:-1;;;;;17025:19:0;;;;;;:11;:19;;;;;;;;17045:10;17025:31;;;;;;;:41;;17060:6;;17025:19;:41;;17060:6;;17025:41;:::i;:::-;;;;-1:-1:-1;;16952:126:0;17097:36;17107:6;17115:9;17126:6;17097:9;:36::i;:::-;17090:43;16835:306;-1:-1:-1;;;;16835:306:0:o;24227:340::-;12401:6;;-1:-1:-1;;;;;12401:6:0;189:10;12401:22;12393:52;;;;-1:-1:-1;;;12393:52:0;;9865:2:1;12393:52:0;;;9847:21:1;9904:2;9884:18;;;9877:30;-1:-1:-1;;;9923:18:1;;;9916:47;9980:18;;12393:52:0;9663:341:1;12393:52:0;24317:13:::1;24355:7;24344;24334;;:17;;;;:::i;:::-;24333:29;;;;:::i;:::-;24317:45;;24401:4;24391:7;;:14;;;;:::i;:::-;24381:5;:25;;24373:88;;;::::0;-1:-1:-1;;;24373:88:0;;13521:2:1;24373:88:0::1;::::0;::::1;13503:21:1::0;13560:2;13540:18;;;13533:30;13599:34;13579:18;;;13572:62;13670:20;13650:18;;;13643:48;13708:19;;24373:88:0::1;13319:414:1::0;24373:88:0::1;24472:14;:22:::0;;;24524:14:::1;::::0;24552:7;;24524:24:::1;::::0;24541:7;;24524:24:::1;:::i;:::-;24523:36;;;;:::i;:::-;24505:15;:54:::0;-1:-1:-1;;;24227:340:0:o;18849:141::-;18902:7;18959:21;18977:1;18959:9;:21::i;:::-;18941:15;10690:42;18941:9;:15::i;:::-;:39;;;;:::i;:::-;18930:7;;:51;;;;:::i;:::-;18922:60;;18849:141;:::o;26591:250::-;26657:7;26696;;26685;:18;;26677:73;;;;-1:-1:-1;;;26677:73:0;;14073:2:1;26677:73:0;;;14055:21:1;14112:2;14092:18;;;14085:30;14151:34;14131:18;;;14124:62;14222:12;14202:18;;;14195:40;14252:19;;26677:73:0;13871:406:1;26677:73:0;26761:19;26784:10;:8;:10::i;:::-;26761:33;-1:-1:-1;26812:21:0;26761:33;26812:7;:21;:::i;:::-;26805:28;26591:250;-1:-1:-1;;;26591:250:0:o;21382:108::-;12401:6;;-1:-1:-1;;;;;12401:6:0;189:10;12401:22;12393:52;;;;-1:-1:-1;;;12393:52:0;;9865:2:1;12393:52:0;;;9847:21:1;9904:2;9884:18;;;9877:30;-1:-1:-1;;;9923:18:1;;;9916:47;9980:18;;12393:52:0;9663:341:1;12393:52:0;21451:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;21451:31:0::1;::::0;::::1;160:74:1::0;21451:9:0;;::::1;::::0;:22:::1;::::0;133:18:1;;21451:31:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21382:108:::0;:::o;18695:146::-;12401:6;;-1:-1:-1;;;;;12401:6:0;189:10;12401:22;12393:52;;;;-1:-1:-1;;;12393:52:0;;9865:2:1;12393:52:0;;;9847:21:1;9904:2;9884:18;;;9877:30;-1:-1:-1;;;9923:18:1;;;9916:47;9980:18;;12393:52:0;9663:341:1;12393:52:0;18783:16:::1;::::0;::::1;::::0;::::1;;;18782:17;18774:26;;;::::0;::::1;;18811:13;:22:::0;;-1:-1:-1;;18811:22:0::1;-1:-1:-1::0;;;;;18811:22:0;;;::::1;::::0;;;::::1;::::0;;18695:146::o;17149:215::-;189:10;17237:4;17286:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17286:34:0;;;;;;;;;;17237:4;;17254:80;;17277:7;;17286:47;;17323:10;;17286:47;:::i;:::-;17254:8;:80::i;23879:340::-;12401:6;;-1:-1:-1;;;;;12401:6:0;189:10;12401:22;12393:52;;;;-1:-1:-1;;;12393:52:0;;9865:2:1;12393:52:0;;;9847:21:1;9904:2;9884:18;;;9877:30;-1:-1:-1;;;9923:18:1;;;9916:47;9980:18;;12393:52:0;9663:341:1;12393:52:0;23968:13:::1;24006:7;23995;23985;;:17;;;;:::i;:::-;23984:29;;;;:::i;:::-;23968:45;;24052:4;24042:7;;:14;;;;:::i;:::-;24032:5;:25;;24024:93;;;::::0;-1:-1:-1;;;24024:93:0;;14484:2:1;24024:93:0::1;::::0;::::1;14466:21:1::0;14523:2;14503:18;;;14496:30;14562:34;14542:18;;;14535:62;14633:25;14613:18;;;14606:53;14676:19;;24024:93:0::1;14282:419:1::0;24024:93:0::1;24128:12;:20:::0;;;24176:14:::1;::::0;24204:7;;24176:24:::1;::::0;24193:7;;24176:24:::1;:::i;:::-;24175:36;;;;:::i;:::-;24159:13;:52:::0;-1:-1:-1;;;23879:340:0:o;14063:590::-;12401:6;;-1:-1:-1;;;;;12401:6:0;189:10;12401:22;12393:52;;;;-1:-1:-1;;;12393:52:0;;9865:2:1;12393:52:0;;;9847:21:1;9904:2;9884:18;;;9877:30;-1:-1:-1;;;9923:18:1;;;9916:47;9980:18;;12393:52:0;9663:341:1;12393:52:0;-1:-1:-1;;;;;14144:22:0;::::1;14136:96;;;::::0;-1:-1:-1;;;14136:96:0;;14908:2:1;14136:96:0::1;::::0;::::1;14890:21:1::0;14947:2;14927:18;;;14920:30;14986:34;14966:18;;;14959:62;15057:31;15037:18;;;15030:59;15106:19;;14136:96:0::1;14706:425:1::0;14136:96:0::1;-1:-1:-1::0;;;;;14251:16:0;::::1;10690:42;14251:16;;14243:90;;;::::0;-1:-1:-1;;;14243:90:0;;14908:2:1;14243:90:0::1;::::0;::::1;14890:21:1::0;14947:2;14927:18;;;14920:30;14986:34;14966:18;;;14959:62;15057:31;15037:18;;;15030:59;15106:19;;14243:90:0::1;14706:425:1::0;14243:90:0::1;14364:6;::::0;;14344:34:::1;::::0;-1:-1:-1;;;;;14364:6:0;;::::1;::::0;14344:19:::1;:34::i;:::-;14389:35;14409:8;14419:4;14389:19;:35::i;:::-;14468:1;14458:6:::0;;14448:17:::1;::::0;-1:-1:-1;;;;;14458:6:0::1;14448:9;:17::i;:::-;:21;14445:99;;;14496:6;::::0;14486:46:::1;::::0;-1:-1:-1;;;;;14496:6:0::1;14504:8:::0;14514:17:::1;14496:6:::0;14514:9:::1;:17::i;:::-;14486:9;:46::i;:::-;;14445:99;14564:6;:17:::0;;-1:-1:-1;;14564:17:0::1;-1:-1:-1::0;;;;;14564:17:0;::::1;::::0;;::::1;::::0;;14597:38:::1;::::0;14564:17;;;;14597:38:::1;::::0;14564:6;14597:38:::1;14063:590:::0;:::o;21270:104::-;21342:9;;:24;;;;;;;;21315:7;;-1:-1:-1;;;;;21342:9:0;;:22;;:24;;;;;;;;;;;;;;:9;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19131:134::-;12401:6;;-1:-1:-1;;;;;12401:6:0;189:10;12401:22;12393:52;;;;-1:-1:-1;;;12393:52:0;;9865:2:1;12393:52:0;;;9847:21:1;9904:2;9884:18;;;9877:30;-1:-1:-1;;;9923:18:1;;;9916:47;9980:18;;12393:52:0;9663:341:1;12393:52:0;-1:-1:-1;;;;;19219:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;19219:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19131:134::o;20548:248::-;12401:6;;-1:-1:-1;;;;;12401:6:0;189:10;12401:22;12393:52;;;;-1:-1:-1;;;12393:52:0;;9865:2:1;12393:52:0;;;9847:21:1;9904:2;9884:18;;;9877:30;-1:-1:-1;;;9923:18:1;;;9916:47;9980:18;;12393:52:0;9663:341:1;12393:52:0;20632:16:::1;::::0;::::1;::::0;::::1;;;20631:17;20623:54;;;::::0;-1:-1:-1;;;20623:54:0;;15527:2:1;20623:54:0::1;::::0;::::1;15509:21:1::0;15566:2;15546:18;;;15539:30;15605:26;15585:18;;;15578:54;15649:18;;20623:54:0::1;15325:348:1::0;20623:54:0::1;-1:-1:-1::0;;;;;20696:28:0;::::1;20719:4;20696:28;;20688:55;;;::::0;-1:-1:-1;;;20688:55:0;;15880:2:1;20688:55:0::1;::::0;::::1;15862:21:1::0;15919:2;15899:18;;;15892:30;15958:16;15938:18;;;15931:44;15992:18;;20688:55:0::1;15678:338:1::0;20688:55:0::1;20754:9;:34:::0;;-1:-1:-1;;20754:34:0::1;-1:-1:-1::0;;;;;20754:34:0;;;::::1;::::0;;;::::1;::::0;;20548:248::o;15787:198::-;-1:-1:-1;;;;;15877:20:0;;15853:7;15877:20;;;:11;:20;;;;;;;;15873:49;;;-1:-1:-1;;;;;;15906:16:0;;;;;:7;:16;;;;;;;15787:198::o;15873:49::-;-1:-1:-1;;;;;15960:16:0;;;;;;:7;:16;;;;;;15940:37;;:19;:37::i;:::-;15933:44;15787:198;-1:-1:-1;;15787:198:0:o;14661:195::-;12401:6;;-1:-1:-1;;;;;12401:6:0;189:10;12401:22;12393:52;;;;-1:-1:-1;;;12393:52:0;;9865:2:1;12393:52:0;;;9847:21:1;9904:2;9884:18;;;9877:30;-1:-1:-1;;;9923:18:1;;;9916:47;9980:18;;12393:52:0;9663:341:1;12393:52:0;14748:6:::1;::::0;;14728:34:::1;::::0;-1:-1:-1;;;;;14748:6:0;;::::1;::::0;14728:19:::1;:34::i;:::-;14790:1;14773:19:::0;;-1:-1:-1;;14773:19:0::1;::::0;;14808:40:::1;::::0;14790:1;;14808:40:::1;::::0;14790:1;;14808:40:::1;14661:195::o:0;24575:203::-;12401:6;;-1:-1:-1;;;;;12401:6:0;189:10;12401:22;12393:52;;;;-1:-1:-1;;;12393:52:0;;9865:2:1;12393:52:0;;;9847:21:1;9904:2;9884:18;;;9877:30;-1:-1:-1;;;9923:18:1;;;9916:47;9980:18;;12393:52:0;9663:341:1;12393:52:0;24646:7:::1;::::0;24629:14:::1;:24:::0;;;24682:14:::1;::::0;24664:15:::1;:32:::0;;;24707:12:::1;:22:::0;;;;24740:13:::1;:30:::0;24575:203::o;18187:500::-;12401:6;;-1:-1:-1;;;;;12401:6:0;189:10;12401:22;12393:52;;;;-1:-1:-1;;;12393:52:0;;9865:2:1;12393:52:0;;;9847:21:1;9904:2;9884:18;;;9877:30;-1:-1:-1;;;9923:18:1;;;9916:47;9980:18;;12393:52:0;9663:341:1;12393:52:0;18268:16;18264:416:::1;;-1:-1:-1::0;;;;;18301:13:0;;::::1;18317:5;18301:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;18301:21:0::1;::::0;;18337:9:::1;::::0;:32;;;;;::::1;::::0;::::1;16189:74:1::0;;;;16279:18;;;16272:50;;;;18337:9:0;;::::1;::::0;:19:::1;::::0;16162:18:1;;18337:32:0::1;;;;;;;;;;;;;;;;;::::0;::::1;18264:416;18406:17;::::0;:22;18402:136:::1;;18495:6;18475:17;;18457:15;:35;;;;:::i;:::-;:44;18449:73;;;::::0;-1:-1:-1;;;18449:73:0;;16535:2:1;18449:73:0::1;::::0;::::1;16517:21:1::0;16574:2;16554:18;;;16547:30;16613:18;16593;;;16586:46;16649:18;;18449:73:0::1;16333:340:1::0;18449:73:0::1;-1:-1:-1::0;;;;;18552:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;18552:20:0::1;18568:4;18552:20:::0;;::::1;::::0;;;18607:15:::1;18587:17;:35:::0;;;18637:9:::1;::::0;:31;;;;;;;::::1;16189:74:1::0;;;;16279:18;;;16272:50;18637:9:0;;::::1;::::0;:19:::1;::::0;16162:18:1;;18637:31:0::1;16021:307:1::0;16654:173:0;16718:4;12401:6;;-1:-1:-1;;;;;12401:6:0;189:10;12401:22;12393:52;;;;-1:-1:-1;;;12393:52:0;;9865:2:1;12393:52:0;;;9847:21:1;9904:2;9884:18;;;9877:30;-1:-1:-1;;;9923:18:1;;;9916:47;9980:18;;12393:52:0;9663:341:1;12393:52:0;16767:9:::1;::::0;16735:62:::1;::::0;16752:4:::1;::::0;-1:-1:-1;;;;;16767:9:0::1;-1:-1:-1::0;;16735:8:0::1;:62::i;:::-;-1:-1:-1::0;16815:4:0::1;16654:173:::0;:::o;30562:575::-;12401:6;;-1:-1:-1;;;;;12401:6:0;189:10;12401:22;12393:52;;;;-1:-1:-1;;;12393:52:0;;9865:2:1;12393:52:0;;;9847:21:1;9904:2;9884:18;;;9877:30;-1:-1:-1;;;9923:18:1;;;9916:47;9980:18;;12393:52:0;9663:341:1;12393:52:0;30624:14:::1;::::0;::::1;;30623:15;30615:52;;;::::0;-1:-1:-1;;;30615:52:0;;16880:2:1;30615:52:0::1;::::0;::::1;16862:21:1::0;16919:2;16899:18;;;16892:30;16958:26;16938:18;;;16931:54;17002:18;;30615:52:0::1;16678:348:1::0;30615:52:0::1;30686:16;::::0;::::1;::::0;::::1;;;30678:53;;;::::0;-1:-1:-1;;;30678:53:0;;17233:2:1;30678:53:0::1;::::0;::::1;17215:21:1::0;17272:2;17252:18;;;17245:30;17311:26;17291:18;;;17284:54;17355:18;;30678:53:0::1;17031:348:1::0;30678:53:0::1;30742:42;30772:4;30779;30742:21;:42::i;:::-;30817:6;::::0;30795:35:::1;::::0;-1:-1:-1;;;;;30817:6:0::1;::::0;30795:21:::1;:35::i;:::-;30852:9;::::0;-1:-1:-1;;;;;30852:9:0::1;30841:99;;30892:9;:36:::0;;-1:-1:-1;;30892:36:0::1;30922:4;30892:36;::::0;;30841:99:::1;30954:9;::::0;30974:6:::1;::::0;31029:9:::1;::::0;30954:85:::1;::::0;;;;-1:-1:-1;;;;;30974:6:0;;::::1;30954:85;::::0;::::1;17607:74:1::0;17729:10;30989:12:0::1;17717:23:1::0;17697:18;;;17690:51;17789:18;31011:15:0::1;17777:31:1::0;17757:18;;;17750:59;31029:9:0::1;::::0;;::::1;17825:18:1::0;;;17818:45;30954:9:0;::::1;::::0;:19:::1;::::0;17579::1;;30954:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;30950:101:::0;31061:14:::1;:21:::0;;-1:-1:-1;;31061:21:0::1;31078:4;31061:21;::::0;;31114:15:::1;31093:18;:36:::0;30562:575::o;17372:225::-;189:10;17465:4;17514:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17514:34:0;;;;;;;;;;17465:4;;17482:85;;17505:7;;17514:52;;17551:15;;17514:52;:::i;15993:167::-;16071:4;16088:42;189:10;16112:9;16123:6;16088:9;:42::i;:::-;-1:-1:-1;16148:4:0;;15993:167;-1:-1:-1;;;15993:167:0:o;23611:260::-;12401:6;;-1:-1:-1;;;;;12401:6:0;189:10;12401:22;12393:52;;;;-1:-1:-1;;;12393:52:0;;9865:2:1;12393:52:0;;;9847:21:1;9904:2;9884:18;;;9877:30;-1:-1:-1;;;9923:18:1;;;9916:47;9980:18;;12393:52:0;9663:341:1;12393:52:0;23709:7:::1;:29:::0;;::::1;23789:19:::0;;::::1;::::0;::::1;::::0;23749:29;;::::1;::::0;::::1;-1:-1:-1::0;;23749:29:0;;;23709;;::::1;23749::::0;;;;;;;::::1;23789:19;;::::0;;23804:4;23835:21:::1;23769:9:::0;23729;23835:21:::1;:::i;:::-;:28;;;;:::i;:::-;23819:7;:44:::0;;::::1;::::0;;;::::1;::::0;::::1;-1:-1:-1::0;;23819:44:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;23611:260:0:o;22948:655::-;12401:6;;-1:-1:-1;;;;;12401:6:0;189:10;12401:22;12393:52;;;;-1:-1:-1;;;12393:52:0;;9865:2:1;12393:52:0;;;9847:21:1;9904:2;9884:18;;;9877:30;-1:-1:-1;;;9923:18:1;;;9916:47;9980:18;;12393:52:0;9663:341:1;12393:52:0;23088:10:::1;:21:::0;::::1;::::0;;::::1;23077:32:::0;;::::1;;::::0;::::1;::::0;:89:::1;;-1:-1:-1::0;23143:10:0::1;:23:::0;::::1;::::0;;;::::1;::::0;::::1;23130:36:::0;;::::1;;;23077:89;:146;;;;-1:-1:-1::0;23200:10:0::1;:23:::0;::::1;::::0;;;::::1;::::0;::::1;23187:36:::0;;::::1;;;23077:146;:193;;;;-1:-1:-1::0;23252:10:0::1;:18:::0;::::1;::::0;;;::::1;::::0;::::1;23244:26:::0;;::::1;;;23077:193;23069:202;;;::::0;::::1;;23282:12;23331:4:::0;23319:9;23297:19:::1;23307:9:::0;23297:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:38;;;;:::i;:::-;23282:53;;23363:4;23354:5;:13;;;;23346:22;;;::::0;::::1;;23379:14;:36:::0;;::::1;23426:32:::0;;::::1;23469:36:::0;;;;23379;;;::::1;;23469::::0;;;;;;;;;;::::1;;;-1:-1:-1::0;;23516:26:0::1;::::0;;;::::1;::::0;;;::::1;;::::0;;23580:15:::1;23426:32:::0;23580:5;:15:::1;:::i;:::-;23553:14;:42:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;22948:655:0:o;21498:170::-;12401:6;;-1:-1:-1;;;;;12401:6:0;189:10;12401:22;12393:52;;;;-1:-1:-1;;;12393:52:0;;9865:2:1;12393:52:0;;;9847:21:1;9904:2;9884:18;;;9877:30;-1:-1:-1;;;9923:18:1;;;9916:47;9980:18;;12393:52:0;9663:341:1;12393:52:0;21605:9:::1;::::0;:55:::1;::::0;;;;18534:14:1;;18527:22;21605:55:0::1;::::0;::::1;18509:41:1::0;18593:14;;18586:22;18566:18;;;18559:50;18652:14;;18645:22;18625:18;;;18618:50;-1:-1:-1;;;;;21605:9:0;;::::1;::::0;:24:::1;::::0;18482:18:1;;21605:55:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21498:170:::0;;;:::o;21676:625::-;12401:6;;-1:-1:-1;;;;;12401:6:0;189:10;12401:22;12393:52;;;;-1:-1:-1;;;12393:52:0;;9865:2:1;12393:52:0;;;9847:21:1;9904:2;9884:18;;;9877:30;-1:-1:-1;;;9923:18:1;;;9916:47;9980:18;;12393:52:0;9663:341:1;12393:52:0;21811:10:::1;:21:::0;::::1;::::0;;::::1;21800:32:::0;;::::1;;::::0;::::1;::::0;:89:::1;;-1:-1:-1::0;21866:10:0::1;:23:::0;::::1;::::0;;;::::1;::::0;::::1;21853:36:::0;;::::1;;;21800:89;:146;;;;-1:-1:-1::0;21923:10:0::1;:23:::0;::::1;::::0;;;::::1;::::0;::::1;21910:36:::0;;::::1;;;21800:146;:193;;;;-1:-1:-1::0;21975:10:0::1;:18:::0;::::1;::::0;;;::::1;::::0;::::1;21967:26:::0;;::::1;;;21800:193;21792:202;;;::::0;::::1;;22005:12;22054:4:::0;22042:9;22020:19:::1;22030:9:::0;22020:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:38;;;;:::i;:::-;22005:53;;22086:4;22077:5;:13;;;;22069:22;;;::::0;::::1;;22102:9;:31:::0;;::::1;22144:27:::0;;::::1;22182:31:::0;;;;22102;;;::::1;;22182::::0;;;;;;;;;;::::1;;;-1:-1:-1::0;;22224:21:0::1;::::0;;;::::1;::::0;;;::::1;;::::0;;22278:15:::1;22144:27:::0;22278:5;:15:::1;:::i;:::-;22256:9;:37:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;21676:625:0:o;22309:631::-;12401:6;;-1:-1:-1;;;;;12401:6:0;189:10;12401:22;12393:52;;;;-1:-1:-1;;;12393:52:0;;9865:2:1;12393:52:0;;;9847:21:1;9904:2;9884:18;;;9877:30;-1:-1:-1;;;9923:18:1;;;9916:47;9980:18;;12393:52:0;9663:341:1;12393:52:0;22445:10:::1;:21:::0;::::1;::::0;;::::1;22434:32:::0;;::::1;;::::0;::::1;::::0;:89:::1;;-1:-1:-1::0;22500:10:0::1;:23:::0;::::1;::::0;;;::::1;::::0;::::1;22487:36:::0;;::::1;;;22434:89;:146;;;;-1:-1:-1::0;22557:10:0::1;:23:::0;::::1;::::0;;;::::1;::::0;::::1;22544:36:::0;;::::1;;;22434:146;:193;;;;-1:-1:-1::0;22609:10:0::1;:18:::0;::::1;::::0;;;::::1;::::0;::::1;22601:26:::0;;::::1;;;22434:193;22426:202;;;::::0;::::1;;22639:12;22688:4:::0;22676:9;22654:19:::1;22664:9:::0;22654:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:38;;;;:::i;:::-;22639:53;;22720:4;22711:5;:13;;;;22703:22;;;::::0;::::1;;22736:10;:32:::0;;::::1;22779:28:::0;;::::1;22818:32:::0;;;;22736;;;::::1;;22818::::0;;;;;;;;;;::::1;;;-1:-1:-1::0;;22861:22:0::1;::::0;;;::::1;::::0;;;::::1;;::::0;;22917:15:::1;22779:28:::0;22917:5;:15:::1;:::i;:::-;22894:10;:38:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;22309:631:0:o;25273:165::-;12401:6;;-1:-1:-1;;;;;12401:6:0;189:10;12401:22;12393:52;;;;-1:-1:-1;;;12393:52:0;;9865:2:1;12393:52:0;;;9847:21:1;9904:2;9884:18;;;9877:30;-1:-1:-1;;;9923:18:1;;;9916:47;9980:18;;12393:52:0;9663:341:1;12393:52:0;25348:19:::1;:30:::0;;;::::1;;::::0;::::1;::::0;;;::::1;;::::0;;25394:36:::1;::::0;::::1;::::0;::::1;::::0;25370:8;3646:14:1;3639:22;3621:41;;3609:2;3594:18;;3481:187;25394:36:0::1;;;;;;;;25273:165:::0;:::o;25083:182::-;12401:6;;-1:-1:-1;;;;;12401:6:0;189:10;12401:22;12393:52;;;;-1:-1:-1;;;12393:52:0;;9865:2:1;12393:52:0;;;9847:21:1;9904:2;9884:18;;;9877:30;-1:-1:-1;;;9923:18:1;;;9916:47;9980:18;;12393:52:0;9663:341:1;12393:52:0;25182:16:::1;:37:::0;;-1:-1:-1;;;;;25182:37:0;;::::1;-1:-1:-1::0;;25182:37:0;;::::1;;::::0;;;25230:11:::1;:27:::0;;;;;::::1;::::0;::::1;;::::0;;25083:182::o;17605:574::-;12401:6;;-1:-1:-1;;;;;12401:6:0;189:10;12401:22;12393:52;;;;-1:-1:-1;;;12393:52:0;;9865:2:1;12393:52:0;;;9847:21:1;9904:2;9884:18;;;9877:30;-1:-1:-1;;;9923:18:1;;;9916:47;9980:18;;12393:52:0;9663:341:1;12393:52:0;17676:29:::1;17727:9;17676:61;;17748:16;17785:10;-1:-1:-1::0;;;;;17785:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17767:47:0::1;;17823:4;17830:10;-1:-1:-1::0;;;;;17830:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17767:81;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;19188:15:1;;;17767:81:0::1;::::0;::::1;19170:34:1::0;19240:15;;19220:18;;;19213:43;19082:18;;17767:81:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17748:100:::0;-1:-1:-1;;;;;;17863:22:0;::::1;17859:207;;17929:10;-1:-1:-1::0;;;;;17929:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17911:50:0::1;;17970:4;17977:10;-1:-1:-1::0;;;;;17977:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17911:84;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;19188:15:1;;;17911:84:0::1;::::0;::::1;19170:34:1::0;19240:15;;19220:18;;;19213:43;19082:18;;17911:84:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17902:6;:93:::0;;-1:-1:-1;;17902:93:0::1;-1:-1:-1::0;;;;;17902:93:0;;;::::1;::::0;;;::::1;::::0;;17859:207:::1;;;18037:6;:17:::0;;-1:-1:-1;;18037:17:0::1;-1:-1:-1::0;;;;;18037:17:0;::::1;;::::0;;17859:207:::1;18076:9;:22:::0;;-1:-1:-1;;18076:22:0::1;-1:-1:-1::0;;;;;18076:22:0;::::1;::::0;;::::1;::::0;;;18109:62:::1;::::0;18126:4:::1;::::0;-1:-1:-1;;18109:8:0::1;:62::i;31145:183::-:0;12401:6;;-1:-1:-1;;;;;12401:6:0;189:10;12401:22;12393:52;;;;-1:-1:-1;;;12393:52:0;;9865:2:1;12393:52:0;;;9847:21:1;9904:2;9884:18;;;9877:30;-1:-1:-1;;;9923:18:1;;;9916:47;9980:18;;12393:52:0;9663:341:1;12393:52:0;31212:16:::1;::::0;::::1;::::0;::::1;;;31211:17;31203:58;;;::::0;-1:-1:-1;;;31203:58:0;;19469:2:1;31203:58:0::1;::::0;::::1;19451:21:1::0;19508:2;19488:18;;;19481:30;19547;19527:18;;;19520:58;19595:18;;31203:58:0::1;19267:352:1::0;31203:58:0::1;14014:7:::0;14041:6;;31272:48:::1;::::0;-1:-1:-1;;;;;14041:6:0;;;;31298:21:::1;31272:48:::0;::::1;;;::::0;31298:21;;31272:48;14014:7;31272:48;31298:21;14041:6;31272:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;31145:183::o:0;20804:145::-;12401:6;;-1:-1:-1;;;;;12401:6:0;189:10;12401:22;12393:52;;;;-1:-1:-1;;;12393:52:0;;9865:2:1;12393:52:0;;;9847:21:1;9904:2;9884:18;;;9877:30;-1:-1:-1;;;9923:18:1;;;9916:47;9980:18;;12393:52:0;9663:341:1;12393:52:0;20894:9:::1;::::0;:47:::1;::::0;;;;-1:-1:-1;;;;;16207:55:1;;;20894:47:0::1;::::0;::::1;16189:74:1::0;16306:14;;16299:22;16279:18;;;16272:50;20894:9:0;;::::1;::::0;:29:::1;::::0;16162:18:1;;20894:47:0::1;16021:307:1::0;24786:289:0;12401:6;;-1:-1:-1;;;;;12401:6:0;189:10;12401:22;12393:52;;;;-1:-1:-1;;;12393:52:0;;9865:2:1;12393:52:0;;;9847:21:1;9904:2;9884:18;;;9877:30;-1:-1:-1;;;9923:18:1;;;9916:47;9980:18;;12393:52:0;9663:341:1;12393:52:0;24986:16:::1;24966;24956:7;;:26;;;;:::i;:::-;24955:47;;;;:::i;:::-;24939:13;:63:::0;25027:7:::1;::::0;25054:13;;25027:23:::1;::::0;25037:13;;25027:23:::1;:::i;:::-;25026:41;;;;:::i;:::-;25013:10;:54:::0;-1:-1:-1;;;;24786:289:0:o;21137:125::-;21222:9;;:32;;;;;-1:-1:-1;;;;;178:55:1;;;21222:32:0;;;160:74:1;21198:4:0;;21222:9;;:23;;133:18:1;;21222:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16337:309::-;-1:-1:-1;;;;;16431:20:0;;16423:52;;;;-1:-1:-1;;;16423:52:0;;20076:2:1;16423:52:0;;;20058:21:1;20115:2;20095:18;;;20088:30;20154:21;20134:18;;;20127:49;20193:18;;16423:52:0;19874:343:1;16423:52:0;-1:-1:-1;;;;;16494:21:0;;16486:53;;;;-1:-1:-1;;;16486:53:0;;20076:2:1;16486:53:0;;;20058:21:1;20115:2;20095:18;;;20088:30;20154:21;20134:18;;;20127:49;20193:18;;16486:53:0;19874:343:1;16486:53:0;-1:-1:-1;;;;;16552:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;16605:33;;4599:25:1;;;16605:33:0;;4572:18:1;16605:33:0;;;;;;;16337:309;;;:::o;26849:1556::-;26928:4;-1:-1:-1;;;;;26953:18:0;;26945:68;;;;-1:-1:-1;;;26945:68:0;;20424:2:1;26945:68:0;;;20406:21:1;20463:2;20443:18;;;20436:30;20502:34;20482:18;;;20475:62;20573:7;20553:18;;;20546:35;20598:19;;26945:68:0;20222:401:1;26945:68:0;-1:-1:-1;;;;;27032:16:0;;27024:64;;;;-1:-1:-1;;;27024:64:0;;20830:2:1;27024:64:0;;;20812:21:1;20869:2;20849:18;;;20842:30;20908:34;20888:18;;;20881:62;20979:5;20959:18;;;20952:33;21002:19;;27024:64:0;20628:399:1;27024:64:0;27116:1;27107:6;:10;27099:64;;;;-1:-1:-1;;;27099:64:0;;21234:2:1;27099:64:0;;;21216:21:1;21273:2;21253:18;;;21246:30;21312:34;21292:18;;;21285:62;21383:11;21363:18;;;21356:39;21412:19;;27099:64:0;21032:405:1;27099:64:0;27177:20;27188:4;27194:2;27177:10;:20::i;:::-;27174:480;;;27218:14;;;;27214:89;;27253:34;;-1:-1:-1;;;27253:34:0;;21644:2:1;27253:34:0;;;21626:21:1;21683:2;21663:18;;;21656:30;21722:26;21702:18;;;21695:54;21766:18;;27253:34:0;21442:348:1;27214:89:0;-1:-1:-1;;;;;27320:13:0;;;;;;:7;:13;;;;;;;;;:28;;-1:-1:-1;;;;;;27337:11:0;;;;;;:7;:11;;;;;;;;27320:28;27317:142;;;27386:12;;27376:6;:22;;27368:75;;;;-1:-1:-1;;;27368:75:0;;21997:2:1;27368:75:0;;;21979:21:1;22036:2;22016:18;;;22009:30;22075:34;22055:18;;;22048:62;22146:10;22126:18;;;22119:38;22174:19;;27368:75:0;21795:404:1;27368:75:0;27482:13;;-1:-1:-1;;;;;27476:19:0;;;27482:13;;27476:19;;;;:35;;-1:-1:-1;;;;;;27500:11:0;;;;;;:7;:11;;;;;;;;27499:12;27476:35;27473:170;;;27566:14;;27556:6;27540:13;27550:2;27540:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;27532:95;;;;-1:-1:-1;;;27532:95:0;;22406:2:1;27532:95:0;;;22388:21:1;22445:2;22425:18;;;22418:30;22484:34;22464:18;;;22457:62;22555:12;22535:18;;;22528:40;22585:19;;27532:95:0;22204:406:1;27532:95:0;-1:-1:-1;;;;;27699:25:0;;27666:12;27699:25;;;:19;:25;;;;;;27681:4;;27699:25;;;:52;;-1:-1:-1;;;;;;27728:23:0;;;;;;:19;:23;;;;;;;;27699:52;27696:98;;;-1:-1:-1;27777:5:0;27696:98;-1:-1:-1;;;;;27810:11:0;;;;;;:7;:11;;;;;;;;27806:529;;;27843:6;;;;;;;27842:7;:47;;;;-1:-1:-1;27870:19:0;;;;;;;27842:47;:89;;;;-1:-1:-1;;;;;;27911:20:0;;;;;;:16;:20;;;;;;;;27910:21;27842:89;:133;;;;-1:-1:-1;;;;;;27953:22:0;;;;;;:16;:22;;;;;;;;27952:23;27842:133;27838:480;;;28010:28;28041:24;28059:4;28041:9;:24::i;:::-;28010:55;;28112:13;;28088:20;:37;28084:219;;28177:10;;28153:20;:34;28150:77;;-1:-1:-1;28214:10:0;;28150:77;28249:34;28262:20;28249:12;:34::i;:::-;27991:327;27838:480;28353:44;28371:4;28377:2;28381:6;28389:7;28353:17;:44::i;:::-;28346:51;26849:1556;-1:-1:-1;;;;;26849:1556:0:o;34556:526::-;34636:7;;34672;;34598;;34636;34598;34690:282;34714:9;:16;34710:20;;34690:282;;;34780:7;34756;:21;34764:9;34774:1;34764:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34764:12:0;34756:21;;;;;;;;;;;;;:31;;:66;;;34815:7;34791;:21;34799:9;34809:1;34799:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34799:12:0;34791:21;;;;;;;;;;;;;:31;34756:66;34752:96;;;34841:7;;34831;;:17;;;;:::i;:::-;34824:24;;;;;34556:526;:::o;34752:96::-;34883:7;:21;34891:9;34901:1;34891:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34891:12:0;34883:21;;;;;;;;;;;;;34873:31;;:7;:31;:::i;:::-;34863:41;;34939:7;:21;34947:9;34957:1;34947:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34947:12:0;34939:21;;;;;;;;;;;;;34929:31;;:7;:31;:::i;:::-;34919:41;-1:-1:-1;34732:3:0;;;;:::i;:::-;;;;34690:282;;;;35006:7;;34996;;:17;;;;:::i;:::-;34986:7;:27;34982:57;;;35032:7;;35022;;:17;;;;:::i;:::-;35015:24;;;;34556:526;:::o;34982:57::-;35057:17;35067:7;35057;:17;:::i;26260:323::-;26328:4;14041:6;;-1:-1:-1;;;;;26352:15:0;;;14041:6;;26352:15;;;;:45;;-1:-1:-1;14014:7:0;14041:6;-1:-1:-1;;;;;26384:13:0;;;14041:6;;26384:13;;26352:45;:84;;;;-1:-1:-1;;;;;;26415:21:0;;;;;;:17;:21;;;;;;;;26414:22;26352:84;:125;;;;-1:-1:-1;;;;;;26454:23:0;;;;;;:17;:23;;;;;;;;26453:24;26352:125;:152;;;;-1:-1:-1;;;;;;26494:10:0;;10690:42;26494:10;;26352:152;:185;;;;-1:-1:-1;;;;;;26521:16:0;;;;26352:185;:223;;;;-1:-1:-1;;;;;;26554:21:0;;26570:4;26554:21;;26345:230;26260:323;-1:-1:-1;;;26260:323:0:o;28413:1625::-;12295:6;:13;;;;;;;;:6;28500:13;::::1;::::0;;;::::1;;28496:44;;28533:7;;28496:44;28575:4;28555:26;::::0;;;:11:::1;:26;::::0;;;;;;;28590:9:::1;::::0;-1:-1:-1;;;;;28590:9:0::1;28555:46:::0;;;;;;;;-1:-1:-1;;28555:67:0::1;28552:165;;28659:4;28639:26;::::0;;;:11:::1;:26;::::0;;;;;;;28674:9:::1;::::0;-1:-1:-1;;;;;28674:9:0::1;28639:46:::0;;;;;;;-1:-1:-1;;28639:66:0;;28552:165:::1;28795:7;:13:::0;28729:17:::1;::::0;28812:1:::1;::::0;28795:13:::1;::::0;;::::1;::::0;::::1;::::0;28751:40:::1;::::0;28774:17:::1;28751:20:::0;:40:::1;:::i;:::-;28750:58;;;;:::i;:::-;28749:64;;;;:::i;:::-;28729:84:::0;-1:-1:-1;28826:20:0::1;28849:32;28729:84:::0;28849:20;:32:::1;:::i;:::-;28926:16;::::0;;28940:1:::1;28926:16:::0;;;;;::::1;::::0;;28826:55;;-1:-1:-1;28902:21:0::1;::::0;28926:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;28926:16:0::1;28902:40;;28971:4;28953;28958:1;28953:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28953:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;28997:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;28953:7;;28997:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28987:4;28992:1;28987:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28987:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;29026:9:::1;::::0;:219:::1;::::0;;;;:9;::::1;::::0;:60:::1;::::0;:219:::1;::::0;29101:12;;29026:9:::1;::::0;29172:4;;29199::::1;::::0;29219:15:::1;::::0;29026:219:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;29334:7:0::1;:13:::0;29260:24:::1;::::0;-1:-1:-1;29351:1:0::1;::::0;-1:-1:-1;29334:13:0::1;::::0;;::::1;::::0;::::1;::::0;29289:41:::1;::::0;29313:17:::1;29289:21;:41;:::i;:::-;29288:59;;;;:::i;:::-;29287:65;;;;:::i;:::-;29260:92:::0;-1:-1:-1;29369:13:0;;29365:396:::1;;29399:9;::::0;:276:::1;::::0;;;;29476:4:::1;29399:276;::::0;::::1;23589:34:1::0;23639:18;;;23632:34;;;29399:9:0::1;23682:18:1::0;;;23675:34;;;23725:18;;;23718:34;10690:42:0::1;23768:19:1::0;;;23761:44;29645:15:0::1;23821:19:1::0;;;23814:35;-1:-1:-1;;;;;29399:9:0;;::::1;::::0;:25:::1;::::0;29432:16;;23500:19:1;;29399:276:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;29695:54:0::1;::::0;;24373:25:1;;;24429:2;24414:18;;24407:34;;;24457:18;;;24450:34;;;29695:54:0::1;::::0;-1:-1:-1;24361:2:1;24346:18;29695:54:0::1;;;;;;;29365:396;29799:1;29775:21;:25;:66;;;;-1:-1:-1::0;29820:7:0::1;:17:::0;29840:1:::1;::::0;29804:33:::1;::::0;29820:17:::1;::::0;;::::1;::::0;29804:13;;::::1;;:33;:::i;:::-;:37;;;29775:66;29771:260;;;29858:11;::::0;29937:7:::1;:17:::0;-1:-1:-1;;;;;29858:11:0;;::::1;::::0;:98:::1;::::0;29921:33:::1;::::0;29937:17:::1;::::0;;::::1;::::0;29921:13;;::::1;;:33;:::i;:::-;29904:7;:12:::0;29879:76:::1;::::0;;::::1;::::0;29880:36:::1;::::0;29904:12;;::::1;;29880:21;:36;:::i;:::-;29879:76;;;;:::i;:::-;29858:98;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;29971:16:0::1;::::0;:48:::1;::::0;-1:-1:-1;;;;;29971:16:0;;::::1;::::0;29997:21:::1;29971:48:::0;::::1;;;::::0;:16:::1;:48:::0;:16;:48;29997:21;29971:16;:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;29771:260;28485:1553;;;;12319:1;-1:-1:-1::0;12331:6:0;:14;;;;;;28413:1625::o;31537:1300::-;31660:16;;31638:4;;31660:16;;;;;31655:221;;31693:28;31712:4;31718:2;31693:18;:28::i;:::-;31741:16;;;;;;;31740:17;:41;;;;;31761:20;31772:4;31778:2;31761:10;:20::i;:::-;31736:129;;;31802:47;;-1:-1:-1;;;31802:47:0;;24697:2:1;31802:47:0;;;24679:21:1;24736:2;24716:18;;;24709:30;24775:34;24755:18;;;24748:62;24846:7;24826:18;;;24819:35;24871:19;;31802:47:0;24495:401:1;31736:129:0;31888:25;31916:38;31927:4;31933:2;31937:7;31946;31916:10;:38::i;:::-;31999:14;;;;-1:-1:-1;;;;;31983:13:0;;;;;;:7;:13;;;;;;31888:66;;-1:-1:-1;31983:30:0;;;:::i;:::-;-1:-1:-1;;;;;31967:13:0;;;;;;;:7;:13;;;;;;:46;;;;32052:22;;;;32038:11;;;;;;;;;;:36;;32052:22;32038:36;:::i;:::-;-1:-1:-1;;;;;32024:11:0;;;;;;;:7;:11;;;;;;;;:50;;;;32091:17;;;;;:11;:17;;;;;;;32087:89;;;-1:-1:-1;;;;;32141:13:0;;;;;;:7;:13;;;;;;:23;;32157:7;;32141:23;:::i;:::-;-1:-1:-1;;;;;32125:13:0;;;;;;:7;:13;;;;;:39;32087:89;-1:-1:-1;;;;;32190:15:0;;;;;;:11;:15;;;;;;;;32186:98;;;32250:22;;-1:-1:-1;;;;;32236:11:0;;32250:22;32236:11;;;:7;:11;;;;;;:36;;32250:22;32236:36;:::i;:::-;-1:-1:-1;;;;;32222:11:0;;;;;;:7;:11;;;;;:50;32186:98;32300:12;;;;:16;32296:353;;32399:10;:8;:10::i;:::-;32384:6;:12;;;:25;;;;:::i;:::-;32374:4;32358:22;;;;:7;:22;;;;;;:52;;;;:::i;:::-;32349:4;32333:22;;;;:7;:22;;;;;;;;:77;;;;32428:11;:26;;;;;;32425:110;;;32523:12;;;;;32514:4;32498:22;;;;:7;:22;;;;;;;:37;;32523:12;32498:37;:::i;:::-;32489:4;32473:22;;;;:7;:22;;;;;:62;32425:110;32578:4;-1:-1:-1;;;;;32555:43:0;32564:4;-1:-1:-1;;;;;32555:43:0;;32585:6;:12;;;32555:43;;;;4599:25:1;;4587:2;4572:18;;4453:177;32555:43:0;;;;;;;;32296:353;32677:1;32663:6;:11;;;:15;:34;;;;32696:1;32682:6;:11;;;:15;32663:34;32659:89;;;32725:6;:11;;;32714:7;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;32659:89:0;32780:2;-1:-1:-1;;;;;32765:42:0;32774:4;-1:-1:-1;;;;;32765:42:0;;32784:6;:22;;;32765:42;;;;4599:25:1;;4587:2;4572:18;;4453:177;32765:42:0;;;;;;;;-1:-1:-1;32825:4:0;;31537:1300;-1:-1:-1;;;;;31537:1300:0:o;30046:508::-;30128:16;;;;;;;30127:17;30119:65;;;;-1:-1:-1;;;30119:65:0;;25103:2:1;30119:65:0;;;25085:21:1;25142:2;25122:18;;;25115:30;25181:34;25161:18;;;25154:62;25252:5;25232:18;;;25225:33;25275:19;;30119:65:0;24901:399:1;30119:65:0;30200:20;30211:4;30217:2;30200:10;:20::i;:::-;30199:21;:37;;;;-1:-1:-1;30230:6:0;;-1:-1:-1;;;;;30224:12:0;;;30230:6;;30224:12;30199:37;30195:352;;;-1:-1:-1;;;;;30253:23:0;;;;;;;:17;:23;;;;;:30;;-1:-1:-1;;30253:30:0;30279:4;30253:30;;;30298:16;:23;;;;30253:30;30298:23;;;30347:9;;;30336:107;;30391:9;:36;;-1:-1:-1;;30391:36:0;30421:4;30391:36;;;30336:107;30457:19;:26;;;;;;;;30503:32;;-1:-1:-1;3621:41:1;;30503:32:0;;3609:2:1;3594:18;30503:32:0;;;;;;;30046:508;;:::o;32845:1703::-;32939:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32939:18:0;32970:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32970:25:0;33006:19;33028:10;:8;:10::i;:::-;33006:32;-1:-1:-1;33068:21:0;33006:32;33068:7;:21;:::i;:::-;33051:14;;;:38;33106:20;33117:4;33123:2;33106:10;:20::i;:::-;33102:315;;;33174:9;;:38;;;;;-1:-1:-1;;;;;25586:15:1;;;33174:38:0;;;25568:34:1;25638:15;;;25618:18;;;25611:43;25670:18;;;25663:34;;;33143:12:0;;33174:9;;:19;;25480:18:1;;33174:38:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;33174:38:0;;;;;;;;-1:-1:-1;;33174:38:0;;;;;;;;;;;;:::i;:::-;;;33170:164;;33310:8;;;33170:164;33263:5;-1:-1:-1;33354:7:0;33350:56;;33382:8;;;33350:56;33128:289;33102:315;33432:7;33429:991;;;-1:-1:-1;;;;;33460:11:0;;;;;;:7;:11;;;;;;;;33456:474;;;33515:10;:18;33492:12;:41;;33515:18;;;;-1:-1:-1;;33552:45:0;;;;;;;33577:20;;;;;33552:45;;;;;;;;33456:474;;;-1:-1:-1;;;;;33623:13:0;;;;;;:7;:13;;;;;;;;33619:311;;;33680:9;:17;33657:12;:40;;33680:17;;;;-1:-1:-1;;33716:44:0;;;;;;;33741:19;;;;;33716:44;;;;;;;;33619:311;;;33824:14;:22;33801:12;:45;;33824:22;;;;-1:-1:-1;;33865:49:0;;;;;;;33890:24;;;;;33865:49;;;;;;;;33619:311;33995:10;:27;33971:12;:20;33995:27;;;;;;;;33961:30;;33971:20;33961:7;:30;:::i;:::-;33960:62;;;;:::i;:::-;33946:11;;;:76;34089:10;:27;34063:12;:22;34089:27;;;;;;;;34053:32;;34063:22;;;;34053:7;:32;:::i;:::-;34052:64;;;;:::i;:::-;34037:12;;;:79;;;34167:11;;;;:26;;34037:79;34167:26;:::i;:::-;34156:38;;:7;:38;:::i;:::-;34131:63;;34225:11;;;;:25;;34239:11;;34225:25;:::i;:::-;34211:11;;;:39;33429:991;;;34297:1;34283:11;;;:15;;;34313:12;;;:16;;;34344:32;;;34393:11;;;:15;33429:991;34503:11;34488:6;:12;;;:26;;;;:::i;:::-;34473:6;:11;;;:42;;;;:::i;:::-;34455:6;:14;;;:61;;;;:::i;:::-;34430:22;;;:86;-1:-1:-1;34430:22:0;32845:1703;-1:-1:-1;;;;;32845:1703:0:o;245:184:1:-;297:77;294:1;287:88;394:4;391:1;384:15;418:4;415:1;408:15;434:154;-1:-1:-1;;;;;513:5:1;509:54;502:5;499:65;489:93;;578:1;575;568:12;593:134;661:20;;690:31;661:20;690:31;:::i;:::-;593:134;;;:::o;732:118::-;818:5;811:13;804:21;797:5;794:32;784:60;;840:1;837;830:12;855:128;920:20;;949:28;920:20;949:28;:::i;988:1250::-;1078:6;1086;1139:2;1127:9;1118:7;1114:23;1110:32;1107:52;;;1155:1;1152;1145:12;1107:52;1195:9;1182:23;1224:18;1265:2;1257:6;1254:14;1251:34;;;1281:1;1278;1271:12;1251:34;1319:6;1308:9;1304:22;1294:32;;1364:7;1357:4;1353:2;1349:13;1345:27;1335:55;;1386:1;1383;1376:12;1335:55;1422:2;1409:16;1444:4;1467:2;1463;1460:10;1457:36;;;1473:18;;:::i;:::-;1519:2;1516:1;1512:10;1551:2;1545:9;-1:-1:-1;;1605:2:1;1601;1597:11;1593:84;1585:6;1581:97;1728:6;1716:10;1713:22;1708:2;1696:10;1693:18;1690:46;1687:72;;;1739:18;;:::i;:::-;1775:2;1768:22;1825:18;;;1859:15;;;;-1:-1:-1;1901:11:1;;;1897:20;;;1929:19;;;1926:39;;;1961:1;1958;1951:12;1926:39;1985:11;;;;2005:148;2021:6;2016:3;2013:15;2005:148;;;2087:23;2106:3;2087:23;:::i;:::-;2075:36;;2038:12;;;;2131;;;;2005:148;;;2172:6;-1:-1:-1;2197:35:1;;-1:-1:-1;2213:18:1;;;2197:35;:::i;:::-;2187:45;;;;;;988:1250;;;;;:::o;2243:656::-;2355:4;2384:2;2413;2402:9;2395:21;2445:6;2439:13;2488:6;2483:2;2472:9;2468:18;2461:34;2513:1;2523:140;2537:6;2534:1;2531:13;2523:140;;;2632:14;;;2628:23;;2622:30;2598:17;;;2617:2;2594:26;2587:66;2552:10;;2523:140;;;2681:6;2678:1;2675:13;2672:91;;;2751:1;2746:2;2737:6;2726:9;2722:22;2718:31;2711:42;2672:91;-1:-1:-1;2815:2:1;2803:15;-1:-1:-1;;2799:88:1;2784:104;;;;2890:2;2780:113;;2243:656;-1:-1:-1;;;2243:656:1:o;3161:315::-;3229:6;3237;3290:2;3278:9;3269:7;3265:23;3261:32;3258:52;;;3306:1;3303;3296:12;3258:52;3345:9;3332:23;3364:31;3389:5;3364:31;:::i;:::-;3414:5;3466:2;3451:18;;;;3438:32;;-1:-1:-1;;;3161:315:1:o;3673:388::-;3741:6;3749;3802:2;3790:9;3781:7;3777:23;3773:32;3770:52;;;3818:1;3815;3808:12;3770:52;3857:9;3844:23;3876:31;3901:5;3876:31;:::i;:::-;3926:5;-1:-1:-1;3983:2:1;3968:18;;3955:32;3996:33;3955:32;3996:33;:::i;:::-;4048:7;4038:17;;;3673:388;;;;;:::o;4066:382::-;4131:6;4139;4192:2;4180:9;4171:7;4167:23;4163:32;4160:52;;;4208:1;4205;4198:12;4160:52;4247:9;4234:23;4266:31;4291:5;4266:31;:::i;:::-;4316:5;-1:-1:-1;4373:2:1;4358:18;;4345:32;4386:30;4345:32;4386:30;:::i;5163:456::-;5240:6;5248;5256;5309:2;5297:9;5288:7;5284:23;5280:32;5277:52;;;5325:1;5322;5315:12;5277:52;5364:9;5351:23;5383:31;5408:5;5383:31;:::i;:::-;5433:5;-1:-1:-1;5490:2:1;5475:18;;5462:32;5503:33;5462:32;5503:33;:::i;:::-;5163:456;;5555:7;;-1:-1:-1;;;5609:2:1;5594:18;;;;5581:32;;5163:456::o;5624:248::-;5692:6;5700;5753:2;5741:9;5732:7;5728:23;5724:32;5721:52;;;5769:1;5766;5759:12;5721:52;-1:-1:-1;;5792:23:1;;;5862:2;5847:18;;;5834:32;;-1:-1:-1;5624:248:1:o;5877:180::-;5936:6;5989:2;5977:9;5968:7;5964:23;5960:32;5957:52;;;6005:1;6002;5995:12;5957:52;-1:-1:-1;6028:23:1;;5877:180;-1:-1:-1;5877:180:1:o;6251:247::-;6310:6;6363:2;6351:9;6342:7;6338:23;6334:32;6331:52;;;6379:1;6376;6369:12;6331:52;6418:9;6405:23;6437:31;6462:5;6437:31;:::i;6750:159::-;6817:20;;6877:6;6866:18;;6856:29;;6846:57;;6899:1;6896;6889:12;6914:328;6988:6;6996;7004;7057:2;7045:9;7036:7;7032:23;7028:32;7025:52;;;7073:1;7070;7063:12;7025:52;7096:28;7114:9;7096:28;:::i;:::-;7086:38;;7143:37;7176:2;7165:9;7161:18;7143:37;:::i;:::-;7133:47;;7199:37;7232:2;7221:9;7217:18;7199:37;:::i;:::-;7189:47;;6914:328;;;;;:::o;7247:401::-;7329:6;7337;7345;7353;7406:3;7394:9;7385:7;7381:23;7377:33;7374:53;;;7423:1;7420;7413:12;7374:53;7446:28;7464:9;7446:28;:::i;:::-;7436:38;;7493:37;7526:2;7515:9;7511:18;7493:37;:::i;:::-;7483:47;;7549:37;7582:2;7571:9;7567:18;7549:37;:::i;:::-;7539:47;;7605:37;7638:2;7627:9;7623:18;7605:37;:::i;:::-;7595:47;;7247:401;;;;;;;:::o;7653:511::-;7721:6;7729;7737;7790:2;7778:9;7769:7;7765:23;7761:32;7758:52;;;7806:1;7803;7796:12;7758:52;7845:9;7832:23;7864:28;7886:5;7864:28;:::i;:::-;7911:5;-1:-1:-1;7968:2:1;7953:18;;7940:32;7981:30;7940:32;7981:30;:::i;:::-;8030:7;-1:-1:-1;8089:2:1;8074:18;;8061:32;8102:30;8061:32;8102:30;:::i;:::-;8151:7;8141:17;;;7653:511;;;;;:::o;8169:241::-;8225:6;8278:2;8266:9;8257:7;8253:23;8249:32;8246:52;;;8294:1;8291;8284:12;8246:52;8333:9;8320:23;8352:28;8374:5;8352:28;:::i;9273:385::-;9359:6;9367;9375;9383;9436:3;9424:9;9415:7;9411:23;9407:33;9404:53;;;9453:1;9450;9443:12;9404:53;-1:-1:-1;;9476:23:1;;;9546:2;9531:18;;9518:32;;-1:-1:-1;9597:2:1;9582:18;;9569:32;;9648:2;9633:18;9620:32;;-1:-1:-1;9273:385:1;-1:-1:-1;9273:385:1:o;10009:484::-;10062:3;10100:5;10094:12;10127:6;10122:3;10115:19;10153:4;10182:2;10177:3;10173:12;10166:19;;10219:2;10212:5;10208:14;10240:1;10250:218;10264:6;10261:1;10258:13;10250:218;;;10329:13;;-1:-1:-1;;;;;10325:62:1;10313:75;;10408:12;;;;10443:15;;;;10286:1;10279:9;10250:218;;;-1:-1:-1;10484:3:1;;10009:484;-1:-1:-1;;;;;10009:484:1:o;10498:342::-;10699:2;10688:9;10681:21;10662:4;10719:56;10771:2;10760:9;10756:18;10748:6;10719:56;:::i;:::-;10711:64;;10825:6;10818:14;10811:22;10806:2;10795:9;10791:18;10784:50;10498:342;;;;;:::o;11910:184::-;11962:77;11959:1;11952:88;12059:4;12056:1;12049:15;12083:4;12080:1;12073:15;12099:184;12151:77;12148:1;12141:88;12248:4;12245:1;12238:15;12272:4;12269:1;12262:15;12288:184;12340:77;12337:1;12330:88;12437:4;12434:1;12427:15;12461:4;12458:1;12451:15;12477:125;12517:4;12545:1;12542;12539:8;12536:34;;;12550:18;;:::i;:::-;-1:-1:-1;12587:9:1;;12477:125::o;12607:195::-;12646:3;-1:-1:-1;;12670:5:1;12667:77;12664:103;;;12747:18;;:::i;:::-;-1:-1:-1;12794:1:1;12783:13;;12607:195::o;12807:228::-;12847:7;12973:1;-1:-1:-1;;12901:74:1;12898:1;12895:81;12890:1;12883:9;12876:17;12872:105;12869:131;;;12980:18;;:::i;:::-;-1:-1:-1;13020:9:1;;12807:228::o;13040:274::-;13080:1;13106;13096:189;;13141:77;13138:1;13131:88;13242:4;13239:1;13232:15;13270:4;13267:1;13260:15;13096:189;-1:-1:-1;13299:9:1;;13040:274::o;13738:128::-;13778:3;13809:1;13805:6;13802:1;13799:13;13796:39;;;13815:18;;:::i;:::-;-1:-1:-1;13851:9:1;;13738:128::o;15136:184::-;15206:6;15259:2;15247:9;15238:7;15234:23;15230:32;15227:52;;;15275:1;15272;15265:12;15227:52;-1:-1:-1;15298:16:1;;15136:184;-1:-1:-1;15136:184:1:o;17874:224::-;17913:3;17941:6;17974:2;17971:1;17967:10;18004:2;18001:1;17997:10;18035:3;18031:2;18027:12;18022:3;18019:21;18016:47;;;18043:18;;:::i;:::-;18079:13;;17874:224;-1:-1:-1;;;;17874:224:1:o;18103:217::-;18142:4;18171:6;18227:10;;;;18197;;18249:12;;;18246:38;;;18264:18;;:::i;:::-;18301:13;;18103:217;-1:-1:-1;;;18103:217:1:o;18679:251::-;18749:6;18802:2;18790:9;18781:7;18777:23;18773:32;18770:52;;;18818:1;18815;18808:12;18770:52;18850:9;18844:16;18869:31;18894:5;18869:31;:::i;19624:245::-;19691:6;19744:2;19732:9;19723:7;19719:23;19715:32;19712:52;;;19760:1;19757;19750:12;19712:52;19792:9;19786:16;19811:28;19833:5;19811:28;:::i;22615:605::-;22914:6;22903:9;22896:25;22957:6;22952:2;22941:9;22937:18;22930:34;23000:3;22995:2;22984:9;22980:18;22973:31;22877:4;23021:57;23073:3;23062:9;23058:19;23050:6;23021:57;:::i;:::-;-1:-1:-1;;;;;23114:55:1;;;;23109:2;23094:18;;23087:83;-1:-1:-1;23201:3:1;23186:19;23179:35;23013:65;22615:605;-1:-1:-1;;;22615:605:1:o;23860:306::-;23948:6;23956;23964;24017:2;24005:9;23996:7;23992:23;23988:32;23985:52;;;24033:1;24030;24023:12;23985:52;24062:9;24056:16;24046:26;;24112:2;24101:9;24097:18;24091:25;24081:35;;24156:2;24145:9;24141:18;24135:25;24125:35;;23860:306;;;;;:::o

Swarm Source

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