ETH Price: $3,058.82 (+1.15%)
Gas: 2 Gwei

Token

Samurai Santa (SANTA)
 

Overview

Max Total Supply

10,000,000,000 SANTA

Holders

63

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
313,514,963.888756217 SANTA

Value
$0.00
0x045cac57b86398c9065559784c4b75bb3dfff623
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:
SamuraiSanta

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/*


サムライサンタ


*/

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.10;


library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * C U ON THE MOON
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

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

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

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

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 {
    function totalSupply() external view returns (uint256);

    /**
     * @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 IDEXFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IDEXRouter {
    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 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;
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
     /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface IAntiSnipe {
  function setTokenOwner(address owner) external;

  function onPreTransferCheck(
    address from,
    address to,
    uint256 amount
  ) external returns (bool checked);
}

contract SamuraiSanta is IERC20, Ownable {
    using Address for address;
    
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    string constant _name = "Samurai Santa";
    string constant _symbol = "SANTA";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 10_000_000_000 * (10 ** _decimals);
    uint256 public _maxTxAmount = (_totalSupply * 1) / 200;
    uint256 public _maxWalletSize = (_totalSupply * 2) / 100;

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;
    mapping (address => uint256) lastBuy;

    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;

    uint256 liquidityFee = 20;
    uint256 reflectionFee = 20;
    uint256 marketingFee = 40;
    uint256 devFee = 20;
    uint256 totalFee = 100;
    uint256 sellBias = 40;
    uint256 sellPercent = 250;
    uint256 sellPeriod = 24 hours;
    uint256 feeDenominator = 1000;

    address public autoLiquidityReceiver;
    address payable public marketingFeeReceiver;
    address payable public devFeeReceiver;

    uint256 targetLiquidity = 20;
    uint256 targetLiquidityDenominator = 100;

    IDEXRouter public router;
    address routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    mapping (address => bool) liquidityPools;
    mapping (address => bool) liquidityProviders;

    address public pair;

    uint256 public launchedAt;
    uint256 public launchedTime;
    
    IAntiSnipe public antisnipe;
    bool public protectionEnabled = true;
    bool public protectionDisabled = false;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply / 400;
    uint256 public swapMinimum = _totalSupply / 10000;
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor () {
        router = IDEXRouter(routerAddress);
        pair = IDEXFactory(router.factory()).createPair(router.WETH(), address(this));
        liquidityPools[pair] = true;
        _allowances[owner()][routerAddress] = type(uint256).max;
        _allowances[address(this)][routerAddress] = type(uint256).max;
        
        isFeeExempt[owner()] = true;
        liquidityProviders[msg.sender] = true;

        isTxLimitExempt[address(this)] = true;
        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[routerAddress] = true;

        autoLiquidityReceiver = 0xa6fEF015e00659dFE4eC90bc3443Ab713F4227B5;
        marketingFeeReceiver = payable(0x5B3b180fDb3c0b107834757Cc762A1cA8b053092);
        devFeeReceiver = payable(0x1eAe3aF8D4d361Db86Cb4DB3281DcC284DEdd110);

        _balances[owner()] = _totalSupply;
        emit Transfer(address(0), owner(), _totalSupply);
    }

    receive() external payable { }

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

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

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

    function setProtection(bool _protect) external onlyOwner {
        if (_protect)
            require(!protectionDisabled);
        protectionEnabled = _protect;
    }
    
    function setProtection(address _protection, bool _call) external onlyOwner {
        if (_protection != address(antisnipe)){
            require(!protectionDisabled);
            antisnipe = IAntiSnipe(_protection);
        }
        if (_call)
            antisnipe.setTokenOwner(msg.sender);
    }
    
    function disableProtection() external onlyOwner {
        protectionDisabled = true;
    }

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

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

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(_balances[sender] >= amount, "Insufficient balance");
        require(amount > 0, "Zero amount transferred");

        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        checkTxLimit(sender, amount);
        
        if (!liquidityPools[recipient] && recipient != DEAD) {
            if (!isTxLimitExempt[recipient]) checkWalletLimit(recipient, amount);
        }

        if(!launched()){ require(liquidityProviders[sender] || liquidityProviders[recipient], "Contract not launched yet."); }

        _balances[sender] -= amount;

        uint256 amountReceived = shouldTakeFee(sender) && shouldTakeFee(recipient) ? takeFee(sender, recipient, amount) : amount;
        
        if(shouldSwapBack(recipient)){ if (amount > 0) swapBack(amount); }
        
        _balances[recipient] += amountReceived;
            
        if(launched() && protectionEnabled)
            antisnipe.onPreTransferCheck(sender, recipient, amount);

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] -= amount;
        _balances[recipient] += amount;
        emit Transfer(sender, recipient, amount);
        return true;
    }
    
    function checkWalletLimit(address recipient, uint256 amount) internal view {
        uint256 walletLimit = _maxWalletSize;
        require(_balances[recipient] + amount <= walletLimit, "Transfer amount exceeds the bag size.");
    }

    function checkTxLimit(address sender, uint256 amount) internal view {
        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
    }

    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }
    
    function setLiquidityProvider(address _provider) external onlyOwner {
        isFeeExempt[_provider] = true;
        liquidityProviders[_provider] = true;
        isTxLimitExempt[_provider] = true;
    }

    function getTotalFee(bool selling, bool inHighPeriod) public view returns (uint256) {
        if(launchedAt + 1 >= block.number){ return feeDenominator - 1; }
        if (selling) return inHighPeriod ? (totalFee * sellPercent) / 100 : totalFee + sellBias;
        return inHighPeriod ? (totalFee * sellPercent) / 100 : totalFee - sellBias;
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        uint256 feeAmount = (amount * getTotalFee(liquidityPools[recipient], !liquidityPools[sender] && lastBuy[sender] + sellPeriod > block.timestamp)) / feeDenominator;
        
        if (liquidityPools[sender] && lastBuy[recipient] == 0)
            lastBuy[recipient] = block.timestamp;

        _balances[address(this)] += feeAmount;
        emit Transfer(sender, address(this), feeAmount);

        return amount - feeAmount;
    }

    function shouldSwapBack(address recipient) internal view returns (bool) {
        return !liquidityPools[msg.sender]
        && !isFeeExempt[msg.sender]
        && !inSwap
        && swapEnabled
        && liquidityPools[recipient]
        && _balances[address(this)] >= swapMinimum &&
        totalFee > 0;
    }

    function swapBack(uint256 amount) internal swapping {
        uint256 amountToSwap = amount < swapThreshold ? amount : swapThreshold;
        if (_balances[address(this)] < amountToSwap) amountToSwap = _balances[address(this)];
        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee;
        uint256 amountToLiquify = ((amountToSwap * dynamicLiquidityFee) / totalFee) / 2;
        amountToSwap -= amountToLiquify;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        
        uint256 balanceBefore = address(this).balance;

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 balanceAfter = address(this).balance - balanceBefore;
        uint256 totalETHFee = totalFee - dynamicLiquidityFee / 2;

        uint256 amountLiquidity = (balanceAfter * dynamicLiquidityFee) / totalETHFee / 2;
        //uint256 amountReflection = (balanceAfter * reflectionFee) / totalETHFee;
        uint256 amountMarketing = (balanceAfter * marketingFee) / totalETHFee;
        uint256 amountDev = (balanceAfter * devFee) / totalETHFee;

        if(amountToLiquify > 0) {
            router.addLiquidityETH{value: amountLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountLiquidity, amountToLiquify);
        }
        
        if (amountMarketing > 0)
            marketingFeeReceiver.transfer(amountMarketing);
            
        if (amountDev > 0)
            devFeeReceiver.transfer(amountDev);

    }

    function buyBack(uint256 _percent, bool _burn) external onlyOwner {
        uint256 purchase = (address(this).balance * _percent) / 100;
        address deliverTo = _burn ? DEAD : msg.sender;

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

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: purchase}(
            0,
            path,
            deliverTo,
            block.timestamp + 300
        );
    }

    function setSellPeriod(uint256 _sellPercentIncrease, uint256 _period) external onlyOwner {
        require((totalFee * _sellPercentIncrease) / 100 <= 400, "Sell tax too high");
        require(_period <= 7 days, "Sell period too long");
        sellPercent = _sellPercentIncrease;
        sellPeriod = _period;
    }

    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function launch() external onlyOwner {
        require (launchedAt == 0);
        launchedAt = block.number;
        launchedTime = block.timestamp;
    }

    function setTxLimit(uint256 numerator, uint256 divisor) external onlyOwner {
        require(numerator > 0 && divisor > 0 && (numerator * 1000) / divisor >= 5);
        _maxTxAmount = (_totalSupply * numerator) / divisor;
    }
    
    function setMaxWallet(uint256 numerator, uint256 divisor) external onlyOwner() {
        require(divisor > 0 && divisor <= 10000);
        _maxWalletSize = (_totalSupply * numerator) / divisor;
    }

    function setIsFeeExempt(address holder, bool exempt) external onlyOwner {
        isFeeExempt[holder] = exempt;
    }

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
    }

    function setFees(uint256 _liquidityFee, uint256 _reflectionFee, uint256 _marketingFee, uint256 _devFee, uint256 _sellBias, uint256 _feeDenominator) external onlyOwner {
        liquidityFee = _liquidityFee;
        reflectionFee = _reflectionFee;
        marketingFee = _marketingFee;
        devFee = _devFee;
        sellBias = _sellBias;
        totalFee = _liquidityFee + _reflectionFee + _marketingFee + _devFee;
        feeDenominator = _feeDenominator;
        require(totalFee <= feeDenominator / 4);
        require(sellBias <= totalFee);
    }

    function setFeeReceivers(address _autoLiquidityReceiver, address _marketingFeeReceiver) external onlyOwner {
        if (autoLiquidityReceiver != DEAD)
            autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingFeeReceiver = payable(_marketingFeeReceiver);
    }
    
    function setDevReceiver(address _dev) external onlyOwner {
        devFeeReceiver = payable(_dev);
    }

    function setSwapBackSettings(bool _enabled, uint256 _denominator, uint256 _denominatorMin) external onlyOwner {
        require(_denominator > 0 && _denominatorMin > 0);
        swapEnabled = _enabled;
        swapMinimum = _totalSupply / _denominatorMin;
        swapThreshold = _totalSupply / _denominator;
    }

    function setTargetLiquidity(uint256 _target, uint256 _denominator) external onlyOwner {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply - (balanceOf(DEAD) + balanceOf(ZERO));
    }

    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        return (accuracy * balanceOf(pair)) / getCirculatingSupply();
    }

    function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
        return getLiquidityBacking(accuracy) > target;
    }

    function addLiquidityPool(address _pool, bool _enabled) external onlyOwner {
        liquidityPools[_pool] = _enabled;
    }

	function airdrop(address[] calldata _addresses, uint256[] calldata _amount) external onlyOwner
    {
        require(_addresses.length == _amount.length);
        bool previousSwap = swapEnabled;
        swapEnabled = false;
        for (uint256 i = 0; i < _addresses.length; i++) {
            require(!liquidityPools[_addresses[i]]);
            _transferFrom(msg.sender, _addresses[i], _amount[i] * (10 ** _decimals));
        }
        swapEnabled = previousSwap;
    }

    event AutoLiquify(uint256 amount, uint256 amountToken);
    //C U ON THE MOON
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToken","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"addLiquidityPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","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":[],"name":"antisnipe","outputs":[{"internalType":"contract IAntiSnipe","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_burn","type":"bool"}],"name":"buyBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"devFeeReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"selling","type":"bool"},{"internalType":"bool","name":"inHighPeriod","type":"bool"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"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":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protectionDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protectionEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_dev","type":"address"}],"name":"setDevReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_sellBias","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_provider","type":"address"}],"name":"setLiquidityProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_protect","type":"bool"}],"name":"setProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_protection","type":"address"},{"internalType":"bool","name":"_call","type":"bool"}],"name":"setProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellPercentIncrease","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"setSellPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_denominator","type":"uint256"},{"internalType":"uint256","name":"_denominatorMin","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapMinimum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"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":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600180546001600160a01b031990811661dead17909155600280549091169055620000326009600a620005ce565b62000043906402540be400620005e6565b60035560c86003546001620000599190620005e6565b62000065919062000608565b600455606460035460026200007b9190620005e6565b62000087919062000608565b6005556014600b819055600c8190556028600d819055600e8290556064600f81905560109190915560fa601155620151806012556103e8601355601791909155601855601a80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055602080546201000160a01b62ffffff60a01b199091161790556003546200011b906101909062000608565b60215561271060035462000130919062000608565b6022553480156200014057600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601a54601980546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620001df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020591906200062b565b6001600160a01b031663c9c65396601960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000267573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028d91906200062b565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015620002da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030091906200062b565b601d80546001600160a01b0319166001600160a01b039290921691821790556000908152601b60205260408120805460ff1916600117905560001990600790620003526000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120601a80548416835290855283822095909555308082526007855283822086548416835285528382206000199055815483168252600985528382208054600160ff199182168117909255338452601c87528584208054821683179055918352600a8652848320805483168217905582548416835284832080548316821790559554831682528382208054909116909517909455601480546001600160a01b031990811673a6fef015e00659dfe4ec90bc3443ab713f4227b517909155601580548216735b3b180fdb3c0b107834757cc762a1ca8b05309217905560168054909116731eae3af8d4d361db86cb4db3281dcc284dedd1101790556003548454821685526006845282852081905584549251908152911692917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a362000656565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000510578160001904821115620004f457620004f4620004b9565b808516156200050257918102915b93841c9390800290620004d4565b509250929050565b6000826200052957506001620005c8565b816200053857506000620005c8565b81600181146200055157600281146200055c576200057c565b6001915050620005c8565b60ff841115620005705762000570620004b9565b50506001821b620005c8565b5060208310610133831016604e8410600b8410161715620005a1575081810a620005c8565b620005ad8383620004cf565b8060001904821115620005c457620005c4620004b9565b0290505b92915050565b6000620005df60ff84168362000518565b9392505050565b6000816000190483118215151615620006035762000603620004b9565b500290565b6000826200062657634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200063e57600080fd5b81516001600160a01b0381168114620005df57600080fd5b6128c180620006666000396000f3fe6080604052600436106102e85760003560e01c80637d1db4a511610190578063c5363caa116100dc578063dd62ed3e11610095578063f2fde38b1161006f578063f2fde38b146108ee578063f84ba65d1461090e578063f8821a621461092e578063f887ea401461094457600080fd5b8063dd62ed3e14610868578063e624c4bc146108ae578063e96fada2146108ce57600080fd5b8063c5363caa146107a7578063ca33e64c146107c8578063d0889358146107e8578063d51ed1c814610808578063d5d035f514610828578063dab84ee71461084857600080fd5b806395d89b4111610149578063a8aa1b3111610123578063a8aa1b3114610731578063a9059cbb14610751578063abe57e7014610771578063bf56b3711461079157600080fd5b806395d89b41146106c35780639ff84a98146106f1578063a4b45c001461071157600080fd5b80637d1db4a51461062157806386f6c3c114610637578063882cfb3f14610657578063893d20e81461068f5780638da5cb5b1461068f5780638f9a55c0146106ad57600080fd5b8063421dd7c71161024f578063658d4b7f116102085780636ddd1713116101e25780636ddd17131461059457806370a08231146105b5578063715018a6146105eb5780637516baec1461060057600080fd5b8063658d4b7f14610534578063659b1c7c14610554578063672434821461057457600080fd5b8063421dd7c714610489578063492a937b1461049e578063571ac8b0146104be5780635804f1e4146104de5780635cb0f451146104f45780636419b6f91461051457600080fd5b806318160ddd116102a157806318160ddd146103e35780631faf723b146103f8578063201e79911461041857806323b872dd146104385780632b112e4914610458578063313ce5671461046d57600080fd5b806301339c21146102f45780630445b6671461030b57806306fdde0314610334578063095ea7b3146103735780630f4f7bfe146103a35780631161ae39146103c357600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b50610309610964565b005b34801561031757600080fd5b5061032160215481565b6040519081526020015b60405180910390f35b34801561034057600080fd5b5060408051808201909152600d81526c53616d757261692053616e746160981b60208201525b60405161032b9190612258565b34801561037f57600080fd5b5061039361038e3660046122c5565b6109ae565b604051901515815260200161032b565b3480156103af57600080fd5b506103096103be3660046122f1565b610a1b565b3480156103cf57600080fd5b506103936103de3660046122f1565b610af9565b3480156103ef57600080fd5b50600354610321565b34801561040457600080fd5b506103096104133660046122f1565b610b0d565b34801561042457600080fd5b506103096104333660046122f1565b610b93565b34801561044457600080fd5b50610393610453366004612313565b610bc8565b34801561046457600080fd5b50610321610c5d565b34801561047957600080fd5b506040516009815260200161032b565b34801561049557600080fd5b50610309610ca3565b3480156104aa57600080fd5b506103096104b9366004612362565b610ce2565b3480156104ca57600080fd5b506103936104d936600461239b565b610d37565b3480156104ea57600080fd5b50610321601f5481565b34801561050057600080fd5b5061030961050f3660046123b8565b610d45565b34801561052057600080fd5b5061032161052f3660046123dd565b610f05565b34801561054057600080fd5b5061030961054f366004612362565b610fa4565b34801561056057600080fd5b5061030961056f3660046123fb565b610ff9565b34801561058057600080fd5b5061030961058f366004612464565b61105e565b3480156105a057600080fd5b5060205461039390600160b01b900460ff1681565b3480156105c157600080fd5b506103216105d036600461239b565b6001600160a01b031660009081526006602052604090205490565b3480156105f757600080fd5b5061030961119f565b34801561060c57600080fd5b5060205461039390600160a01b900460ff1681565b34801561062d57600080fd5b5061032160045481565b34801561064357600080fd5b506103096106523660046124d0565b611213565b34801561066357600080fd5b50602054610677906001600160a01b031681565b6040516001600160a01b03909116815260200161032b565b34801561069b57600080fd5b506000546001600160a01b0316610677565b3480156106b957600080fd5b5061032160055481565b3480156106cf57600080fd5b5060408051808201909152600581526453414e544160d81b6020820152610366565b3480156106fd57600080fd5b5061030961070c36600461239b565b6112b0565b34801561071d57600080fd5b5061030961072c366004612513565b6112fc565b34801561073d57600080fd5b50601d54610677906001600160a01b031681565b34801561075d57600080fd5b5061039361076c3660046122c5565b61137d565b34801561077d57600080fd5b5061030961078c3660046122f1565b61138a565b34801561079d57600080fd5b50610321601e5481565b3480156107b357600080fd5b5060205461039390600160a81b900460ff1681565b3480156107d457600080fd5b50601454610677906001600160a01b031681565b3480156107f457600080fd5b50610309610803366004612541565b6113ef565b34801561081457600080fd5b50610321610823366004612576565b611470565b34801561083457600080fd5b50610309610843366004612362565b6114a9565b34801561085457600080fd5b50601654610677906001600160a01b031681565b34801561087457600080fd5b50610321610883366004612513565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b3480156108ba57600080fd5b506103096108c936600461239b565b61157e565b3480156108da57600080fd5b50601554610677906001600160a01b031681565b3480156108fa57600080fd5b5061030961090936600461239b565b6115f3565b34801561091a57600080fd5b50610309610929366004612362565b6116dd565b34801561093a57600080fd5b5061032160225481565b34801561095057600080fd5b50601954610677906001600160a01b031681565b6000546001600160a01b031633146109975760405162461bcd60e51b815260040161098e9061258f565b60405180910390fd5b601e54156109a457600080fd5b43601e5542601f55565b3360008181526007602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610a099086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610a455760405162461bcd60e51b815260040161098e9061258f565b610190606483600f54610a5891906125da565b610a6291906125f9565b1115610aa45760405162461bcd60e51b81526020600482015260116024820152700a6cad8d840e8c2f040e8dede40d0d2ced607b1b604482015260640161098e565b62093a80811115610aee5760405162461bcd60e51b815260206004820152601460248201527353656c6c20706572696f6420746f6f206c6f6e6760601b604482015260640161098e565b601191909155601255565b600082610b0583611470565b119392505050565b6000546001600160a01b03163314610b375760405162461bcd60e51b815260040161098e9061258f565b600082118015610b475750600081115b8015610b6a5750600581610b5d846103e86125da565b610b6791906125f9565b10155b610b7357600080fd5b8082600354610b8291906125da565b610b8c91906125f9565b6004555050565b6000546001600160a01b03163314610bbd5760405162461bcd60e51b815260040161098e9061258f565b601791909155601855565b6001600160a01b038316600090815260076020908152604080832033845290915281205460001914610c48576001600160a01b0384166000908152600760209081526040808320338452909152902054610c2390839061261b565b6001600160a01b03851660009081526007602090815260408083203384529091529020555b610c53848484611732565b90505b9392505050565b6002546001600160a01b039081166000908152600660205260408082205460015490931682528120549091610c9191612632565b600354610c9e919061261b565b905090565b6000546001600160a01b03163314610ccd5760405162461bcd60e51b815260040161098e9061258f565b6020805460ff60a81b1916600160a81b179055565b6000546001600160a01b03163314610d0c5760405162461bcd60e51b815260040161098e9061258f565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b6000610a15826000196109ae565b6000546001600160a01b03163314610d6f5760405162461bcd60e51b815260040161098e9061258f565b60006064610d7d84476125da565b610d8791906125f9565b9050600082610d965733610da3565b6001546001600160a01b03165b60408051600280825260608201835292935060009290916020830190803683375050601954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015610e12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e36919061264a565b81600081518110610e4957610e49612667565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110610e7d57610e7d612667565b6001600160a01b0392831660209182029290920101526019541663b6f9de958460008486610ead4261012c612632565b6040518663ffffffff1660e01b8152600401610ecc94939291906126c1565b6000604051808303818588803b158015610ee557600080fd5b505af1158015610ef9573d6000803e3d6000fd5b50505050505050505050565b600043601e546001610f179190612632565b10610f32576001601354610f2b919061261b565b9050610a15565b8215610f6e5781610f5257601054600f54610f4d9190612632565b610f2b565b6064601154600f54610f6491906125da565b610f2b91906125f9565b81610f8857601054600f54610f83919061261b565b610c56565b6064601154600f54610f9a91906125da565b610c5691906125f9565b6000546001600160a01b03163314610fce5760405162461bcd60e51b815260040161098e9061258f565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146110235760405162461bcd60e51b815260040161098e9061258f565b801561104057602054600160a81b900460ff161561104057600080fd5b60208054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b031633146110885760405162461bcd60e51b815260040161098e9061258f565b82811461109457600080fd5b6020805460ff60b01b198116909155600160b01b900460ff1660005b8481101561117c57601b60008787848181106110ce576110ce612667565b90506020020160208101906110e3919061239b565b6001600160a01b0316815260208101919091526040016000205460ff161561110a57600080fd5b6111693387878481811061112057611120612667565b9050602002016020810190611135919061239b565b6111416009600a6127da565b87878681811061115357611153612667565b9050602002013561116491906125da565b611732565b5080611174816127e9565b9150506110b0565b5060208054911515600160b01b0260ff60b01b1990921691909117905550505050565b6000546001600160a01b031633146111c95760405162461bcd60e51b815260040161098e9061258f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461123d5760405162461bcd60e51b815260040161098e9061258f565b600b869055600c859055600d849055600e839055601082905582846112628789612632565b61126c9190612632565b6112769190612632565b600f5560138190556112896004826125f9565b600f54111561129757600080fd5b600f5460105411156112a857600080fd5b505050505050565b6000546001600160a01b031633146112da5760405162461bcd60e51b815260040161098e9061258f565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146113265760405162461bcd60e51b815260040161098e9061258f565b6001546014546001600160a01b0390811691161461135a57601480546001600160a01b0319166001600160a01b0384161790555b601580546001600160a01b0319166001600160a01b039290921691909117905550565b6000610c56338484611732565b6000546001600160a01b031633146113b45760405162461bcd60e51b815260040161098e9061258f565b6000811180156113c657506127108111155b6113cf57600080fd5b80826003546113de91906125da565b6113e891906125f9565b6005555050565b6000546001600160a01b031633146114195760405162461bcd60e51b815260040161098e9061258f565b6000821180156114295750600081115b61143257600080fd5b6020805460ff60b01b1916600160b01b851515021790556003546114579082906125f9565b6022556003546114689083906125f9565b602155505050565b600061147a610c5d565b601d546001600160a01b031660009081526006602052604090205461149f90846125da565b610a1591906125f9565b6000546001600160a01b031633146114d35760405162461bcd60e51b815260040161098e9061258f565b6020546001600160a01b0383811691161461151b57602054600160a81b900460ff16156114ff57600080fd5b602080546001600160a01b0319166001600160a01b0384161790555b801561157a576020546040516318e02bd960e01b81523360048201526001600160a01b03909116906318e02bd990602401600060405180830381600087803b15801561156657600080fd5b505af11580156112a8573d6000803e3d6000fd5b5050565b6000546001600160a01b031633146115a85760405162461bcd60e51b815260040161098e9061258f565b6001600160a01b031660009081526009602090815260408083208054600160ff199182168117909255601c84528285208054821683179055600a909352922080549091169091179055565b6000546001600160a01b0316331461161d5760405162461bcd60e51b815260040161098e9061258f565b6001600160a01b0381166116825760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161098e565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146117075760405162461bcd60e51b815260040161098e9061258f565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6001600160a01b0383166000908152600660205260408120548211156117915760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b604482015260640161098e565b600082116117e15760405162461bcd60e51b815260206004820152601760248201527f5a65726f20616d6f756e74207472616e73666572726564000000000000000000604482015260640161098e565b60235460ff16156117fe576117f7848484611ac8565b9050610c56565b6118088483611b7d565b6001600160a01b0383166000908152601b602052604090205460ff1615801561183f57506001546001600160a01b03848116911614155b1561186e576001600160a01b0383166000908152600a602052604090205460ff1661186e5761186e8383611be6565b601e54611900576001600160a01b0384166000908152601c602052604090205460ff16806118b457506001600160a01b0383166000908152601c602052604090205460ff165b6119005760405162461bcd60e51b815260206004820152601a60248201527f436f6e7472616374206e6f74206c61756e63686564207965742e000000000000604482015260640161098e565b6001600160a01b0384166000908152600660205260408120805484929061192890849061261b565b90915550506001600160a01b03841660009081526009602052604081205460ff1615801561196f57506001600160a01b03841660009081526009602052604090205460ff16155b6119795782611984565b611984858585611c70565b905061198f84611dc9565b156119a35782156119a3576119a383611e71565b6001600160a01b038416600090815260066020526040812080548392906119cb908490612632565b9091555050601e54151580156119ea5750602054600160a01b900460ff165b15611a705760205460405163090ec10b60e31b81526001600160a01b038781166004830152868116602483015260448201869052909116906348760858906064016020604051808303816000875af1158015611a4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6e9190612804565b505b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611ab591815260200190565b60405180910390a3506001949350505050565b6001600160a01b038316600090815260066020526040812080548391908390611af290849061261b565b90915550506001600160a01b03831660009081526006602052604081208054849290611b1f908490612632565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611b6b91815260200190565b60405180910390a35060019392505050565b60045481111580611ba657506001600160a01b0382166000908152600a602052604090205460ff165b61157a5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b604482015260640161098e565b6005546001600160a01b0383166000908152600660205260409020548190611c0f908490612632565b1115611c6b5760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206261672060448201526439b4bd329760d91b606482015260840161098e565b505050565b6013546001600160a01b038084166000908152601b6020526040808220549287168252812054909283929091611cdc9160ff908116911615801561052f57506012546001600160a01b0389166000908152600860205260409020544291611cd691612632565b11610f05565b611ce690856125da565b611cf091906125f9565b6001600160a01b0386166000908152601b602052604090205490915060ff168015611d3157506001600160a01b038416600090815260086020526040902054155b15611d52576001600160a01b03841660009081526008602052604090204290555b3060009081526006602052604081208054839290611d71908490612632565b909155505060405181815230906001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3611dc0818461261b565b95945050505050565b336000908152601b602052604081205460ff16158015611df957503360009081526009602052604090205460ff16155b8015611e08575060235460ff16155b8015611e1d5750602054600160b01b900460ff165b8015611e4157506001600160a01b0382166000908152601b602052604090205460ff165b8015611e5e57506022543060009081526006602052604090205410155b8015610a1557506000600f541192915050565b6023805460ff191660011790556021546000908210611e9257602154611e94565b815b30600090815260066020526040902054909150811115611ec05750306000908152600660205260409020545b6000611ed0601754601854610af9565b611edc57600b54611edf565b60005b905060006002600f548385611ef491906125da565b611efe91906125f9565b611f0891906125f9565b9050611f14818461261b565b60408051600280825260608201835292955060009290916020830190803683370190505090503081600081518110611f4e57611f4e612667565b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611fa7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fcb919061264a565b81600181518110611fde57611fde612667565b6001600160a01b03928316602091820292909201015260195460405163791ac94760e01b81524792919091169063791ac94790612028908890600090879030904290600401612821565b600060405180830381600087803b15801561204257600080fd5b505af1158015612056573d6000803e3d6000fd5b5050505060008147612068919061261b565b905060006120776002876125f9565b600f54612084919061261b565b9050600060028261209589866125da565b61209f91906125f9565b6120a991906125f9565b9050600082600d54856120bc91906125da565b6120c691906125f9565b9050600083600e54866120d991906125da565b6120e391906125f9565b905087156121bd5760195460145460405163f305d71960e01b8152306004820152602481018b905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990859060c40160606040518083038185885af115801561215b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612180919061285d565b505060408051858152602081018b90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b81156121ff576015546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156121fd573d6000803e3d6000fd5b505b8015612241576016546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561223f573d6000803e3d6000fd5b505b50506023805460ff19169055505050505050505050565b600060208083528351808285015260005b8181101561228557858101830151858201604001528201612269565b81811115612297576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146122c257600080fd5b50565b600080604083850312156122d857600080fd5b82356122e3816122ad565b946020939093013593505050565b6000806040838503121561230457600080fd5b50508035926020909101359150565b60008060006060848603121561232857600080fd5b8335612333816122ad565b92506020840135612343816122ad565b929592945050506040919091013590565b80151581146122c257600080fd5b6000806040838503121561237557600080fd5b8235612380816122ad565b9150602083013561239081612354565b809150509250929050565b6000602082840312156123ad57600080fd5b8135610c56816122ad565b600080604083850312156123cb57600080fd5b82359150602083013561239081612354565b600080604083850312156123f057600080fd5b823561238081612354565b60006020828403121561240d57600080fd5b8135610c5681612354565b60008083601f84011261242a57600080fd5b50813567ffffffffffffffff81111561244257600080fd5b6020830191508360208260051b850101111561245d57600080fd5b9250929050565b6000806000806040858703121561247a57600080fd5b843567ffffffffffffffff8082111561249257600080fd5b61249e88838901612418565b909650945060208701359150808211156124b757600080fd5b506124c487828801612418565b95989497509550505050565b60008060008060008060c087890312156124e957600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b6000806040838503121561252657600080fd5b8235612531816122ad565b91506020830135612390816122ad565b60008060006060848603121561255657600080fd5b833561256181612354565b95602085013595506040909401359392505050565b60006020828403121561258857600080fd5b5035919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156125f4576125f46125c4565b500290565b60008261261657634e487b7160e01b600052601260045260246000fd5b500490565b60008282101561262d5761262d6125c4565b500390565b60008219821115612645576126456125c4565b500190565b60006020828403121561265c57600080fd5b8151610c56816122ad565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b838110156126b65781516001600160a01b031687529582019590820190600101612691565b509495945050505050565b8481526080602082015260006126da608083018661267d565b6001600160a01b03949094166040830152506060015292915050565b600181815b80851115612731578160001904821115612717576127176125c4565b8085161561272457918102915b93841c93908002906126fb565b509250929050565b60008261274857506001610a15565b8161275557506000610a15565b816001811461276b576002811461277557612791565b6001915050610a15565b60ff841115612786576127866125c4565b50506001821b610a15565b5060208310610133831016604e8410600b84101617156127b4575081810a610a15565b6127be83836126f6565b80600019048211156127d2576127d26125c4565b029392505050565b6000610c5660ff841683612739565b60006000198214156127fd576127fd6125c4565b5060010190565b60006020828403121561281657600080fd5b8151610c5681612354565b85815284602082015260a06040820152600061284060a083018661267d565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561287257600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220fd949371c1d5c80b14e46a7cdec87c6604f2d087d6151f9deaf4f928376903db64736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106102e85760003560e01c80637d1db4a511610190578063c5363caa116100dc578063dd62ed3e11610095578063f2fde38b1161006f578063f2fde38b146108ee578063f84ba65d1461090e578063f8821a621461092e578063f887ea401461094457600080fd5b8063dd62ed3e14610868578063e624c4bc146108ae578063e96fada2146108ce57600080fd5b8063c5363caa146107a7578063ca33e64c146107c8578063d0889358146107e8578063d51ed1c814610808578063d5d035f514610828578063dab84ee71461084857600080fd5b806395d89b4111610149578063a8aa1b3111610123578063a8aa1b3114610731578063a9059cbb14610751578063abe57e7014610771578063bf56b3711461079157600080fd5b806395d89b41146106c35780639ff84a98146106f1578063a4b45c001461071157600080fd5b80637d1db4a51461062157806386f6c3c114610637578063882cfb3f14610657578063893d20e81461068f5780638da5cb5b1461068f5780638f9a55c0146106ad57600080fd5b8063421dd7c71161024f578063658d4b7f116102085780636ddd1713116101e25780636ddd17131461059457806370a08231146105b5578063715018a6146105eb5780637516baec1461060057600080fd5b8063658d4b7f14610534578063659b1c7c14610554578063672434821461057457600080fd5b8063421dd7c714610489578063492a937b1461049e578063571ac8b0146104be5780635804f1e4146104de5780635cb0f451146104f45780636419b6f91461051457600080fd5b806318160ddd116102a157806318160ddd146103e35780631faf723b146103f8578063201e79911461041857806323b872dd146104385780632b112e4914610458578063313ce5671461046d57600080fd5b806301339c21146102f45780630445b6671461030b57806306fdde0314610334578063095ea7b3146103735780630f4f7bfe146103a35780631161ae39146103c357600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b50610309610964565b005b34801561031757600080fd5b5061032160215481565b6040519081526020015b60405180910390f35b34801561034057600080fd5b5060408051808201909152600d81526c53616d757261692053616e746160981b60208201525b60405161032b9190612258565b34801561037f57600080fd5b5061039361038e3660046122c5565b6109ae565b604051901515815260200161032b565b3480156103af57600080fd5b506103096103be3660046122f1565b610a1b565b3480156103cf57600080fd5b506103936103de3660046122f1565b610af9565b3480156103ef57600080fd5b50600354610321565b34801561040457600080fd5b506103096104133660046122f1565b610b0d565b34801561042457600080fd5b506103096104333660046122f1565b610b93565b34801561044457600080fd5b50610393610453366004612313565b610bc8565b34801561046457600080fd5b50610321610c5d565b34801561047957600080fd5b506040516009815260200161032b565b34801561049557600080fd5b50610309610ca3565b3480156104aa57600080fd5b506103096104b9366004612362565b610ce2565b3480156104ca57600080fd5b506103936104d936600461239b565b610d37565b3480156104ea57600080fd5b50610321601f5481565b34801561050057600080fd5b5061030961050f3660046123b8565b610d45565b34801561052057600080fd5b5061032161052f3660046123dd565b610f05565b34801561054057600080fd5b5061030961054f366004612362565b610fa4565b34801561056057600080fd5b5061030961056f3660046123fb565b610ff9565b34801561058057600080fd5b5061030961058f366004612464565b61105e565b3480156105a057600080fd5b5060205461039390600160b01b900460ff1681565b3480156105c157600080fd5b506103216105d036600461239b565b6001600160a01b031660009081526006602052604090205490565b3480156105f757600080fd5b5061030961119f565b34801561060c57600080fd5b5060205461039390600160a01b900460ff1681565b34801561062d57600080fd5b5061032160045481565b34801561064357600080fd5b506103096106523660046124d0565b611213565b34801561066357600080fd5b50602054610677906001600160a01b031681565b6040516001600160a01b03909116815260200161032b565b34801561069b57600080fd5b506000546001600160a01b0316610677565b3480156106b957600080fd5b5061032160055481565b3480156106cf57600080fd5b5060408051808201909152600581526453414e544160d81b6020820152610366565b3480156106fd57600080fd5b5061030961070c36600461239b565b6112b0565b34801561071d57600080fd5b5061030961072c366004612513565b6112fc565b34801561073d57600080fd5b50601d54610677906001600160a01b031681565b34801561075d57600080fd5b5061039361076c3660046122c5565b61137d565b34801561077d57600080fd5b5061030961078c3660046122f1565b61138a565b34801561079d57600080fd5b50610321601e5481565b3480156107b357600080fd5b5060205461039390600160a81b900460ff1681565b3480156107d457600080fd5b50601454610677906001600160a01b031681565b3480156107f457600080fd5b50610309610803366004612541565b6113ef565b34801561081457600080fd5b50610321610823366004612576565b611470565b34801561083457600080fd5b50610309610843366004612362565b6114a9565b34801561085457600080fd5b50601654610677906001600160a01b031681565b34801561087457600080fd5b50610321610883366004612513565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b3480156108ba57600080fd5b506103096108c936600461239b565b61157e565b3480156108da57600080fd5b50601554610677906001600160a01b031681565b3480156108fa57600080fd5b5061030961090936600461239b565b6115f3565b34801561091a57600080fd5b50610309610929366004612362565b6116dd565b34801561093a57600080fd5b5061032160225481565b34801561095057600080fd5b50601954610677906001600160a01b031681565b6000546001600160a01b031633146109975760405162461bcd60e51b815260040161098e9061258f565b60405180910390fd5b601e54156109a457600080fd5b43601e5542601f55565b3360008181526007602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610a099086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610a455760405162461bcd60e51b815260040161098e9061258f565b610190606483600f54610a5891906125da565b610a6291906125f9565b1115610aa45760405162461bcd60e51b81526020600482015260116024820152700a6cad8d840e8c2f040e8dede40d0d2ced607b1b604482015260640161098e565b62093a80811115610aee5760405162461bcd60e51b815260206004820152601460248201527353656c6c20706572696f6420746f6f206c6f6e6760601b604482015260640161098e565b601191909155601255565b600082610b0583611470565b119392505050565b6000546001600160a01b03163314610b375760405162461bcd60e51b815260040161098e9061258f565b600082118015610b475750600081115b8015610b6a5750600581610b5d846103e86125da565b610b6791906125f9565b10155b610b7357600080fd5b8082600354610b8291906125da565b610b8c91906125f9565b6004555050565b6000546001600160a01b03163314610bbd5760405162461bcd60e51b815260040161098e9061258f565b601791909155601855565b6001600160a01b038316600090815260076020908152604080832033845290915281205460001914610c48576001600160a01b0384166000908152600760209081526040808320338452909152902054610c2390839061261b565b6001600160a01b03851660009081526007602090815260408083203384529091529020555b610c53848484611732565b90505b9392505050565b6002546001600160a01b039081166000908152600660205260408082205460015490931682528120549091610c9191612632565b600354610c9e919061261b565b905090565b6000546001600160a01b03163314610ccd5760405162461bcd60e51b815260040161098e9061258f565b6020805460ff60a81b1916600160a81b179055565b6000546001600160a01b03163314610d0c5760405162461bcd60e51b815260040161098e9061258f565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b6000610a15826000196109ae565b6000546001600160a01b03163314610d6f5760405162461bcd60e51b815260040161098e9061258f565b60006064610d7d84476125da565b610d8791906125f9565b9050600082610d965733610da3565b6001546001600160a01b03165b60408051600280825260608201835292935060009290916020830190803683375050601954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015610e12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e36919061264a565b81600081518110610e4957610e49612667565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110610e7d57610e7d612667565b6001600160a01b0392831660209182029290920101526019541663b6f9de958460008486610ead4261012c612632565b6040518663ffffffff1660e01b8152600401610ecc94939291906126c1565b6000604051808303818588803b158015610ee557600080fd5b505af1158015610ef9573d6000803e3d6000fd5b50505050505050505050565b600043601e546001610f179190612632565b10610f32576001601354610f2b919061261b565b9050610a15565b8215610f6e5781610f5257601054600f54610f4d9190612632565b610f2b565b6064601154600f54610f6491906125da565b610f2b91906125f9565b81610f8857601054600f54610f83919061261b565b610c56565b6064601154600f54610f9a91906125da565b610c5691906125f9565b6000546001600160a01b03163314610fce5760405162461bcd60e51b815260040161098e9061258f565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146110235760405162461bcd60e51b815260040161098e9061258f565b801561104057602054600160a81b900460ff161561104057600080fd5b60208054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b031633146110885760405162461bcd60e51b815260040161098e9061258f565b82811461109457600080fd5b6020805460ff60b01b198116909155600160b01b900460ff1660005b8481101561117c57601b60008787848181106110ce576110ce612667565b90506020020160208101906110e3919061239b565b6001600160a01b0316815260208101919091526040016000205460ff161561110a57600080fd5b6111693387878481811061112057611120612667565b9050602002016020810190611135919061239b565b6111416009600a6127da565b87878681811061115357611153612667565b9050602002013561116491906125da565b611732565b5080611174816127e9565b9150506110b0565b5060208054911515600160b01b0260ff60b01b1990921691909117905550505050565b6000546001600160a01b031633146111c95760405162461bcd60e51b815260040161098e9061258f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461123d5760405162461bcd60e51b815260040161098e9061258f565b600b869055600c859055600d849055600e839055601082905582846112628789612632565b61126c9190612632565b6112769190612632565b600f5560138190556112896004826125f9565b600f54111561129757600080fd5b600f5460105411156112a857600080fd5b505050505050565b6000546001600160a01b031633146112da5760405162461bcd60e51b815260040161098e9061258f565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146113265760405162461bcd60e51b815260040161098e9061258f565b6001546014546001600160a01b0390811691161461135a57601480546001600160a01b0319166001600160a01b0384161790555b601580546001600160a01b0319166001600160a01b039290921691909117905550565b6000610c56338484611732565b6000546001600160a01b031633146113b45760405162461bcd60e51b815260040161098e9061258f565b6000811180156113c657506127108111155b6113cf57600080fd5b80826003546113de91906125da565b6113e891906125f9565b6005555050565b6000546001600160a01b031633146114195760405162461bcd60e51b815260040161098e9061258f565b6000821180156114295750600081115b61143257600080fd5b6020805460ff60b01b1916600160b01b851515021790556003546114579082906125f9565b6022556003546114689083906125f9565b602155505050565b600061147a610c5d565b601d546001600160a01b031660009081526006602052604090205461149f90846125da565b610a1591906125f9565b6000546001600160a01b031633146114d35760405162461bcd60e51b815260040161098e9061258f565b6020546001600160a01b0383811691161461151b57602054600160a81b900460ff16156114ff57600080fd5b602080546001600160a01b0319166001600160a01b0384161790555b801561157a576020546040516318e02bd960e01b81523360048201526001600160a01b03909116906318e02bd990602401600060405180830381600087803b15801561156657600080fd5b505af11580156112a8573d6000803e3d6000fd5b5050565b6000546001600160a01b031633146115a85760405162461bcd60e51b815260040161098e9061258f565b6001600160a01b031660009081526009602090815260408083208054600160ff199182168117909255601c84528285208054821683179055600a909352922080549091169091179055565b6000546001600160a01b0316331461161d5760405162461bcd60e51b815260040161098e9061258f565b6001600160a01b0381166116825760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161098e565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146117075760405162461bcd60e51b815260040161098e9061258f565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6001600160a01b0383166000908152600660205260408120548211156117915760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b604482015260640161098e565b600082116117e15760405162461bcd60e51b815260206004820152601760248201527f5a65726f20616d6f756e74207472616e73666572726564000000000000000000604482015260640161098e565b60235460ff16156117fe576117f7848484611ac8565b9050610c56565b6118088483611b7d565b6001600160a01b0383166000908152601b602052604090205460ff1615801561183f57506001546001600160a01b03848116911614155b1561186e576001600160a01b0383166000908152600a602052604090205460ff1661186e5761186e8383611be6565b601e54611900576001600160a01b0384166000908152601c602052604090205460ff16806118b457506001600160a01b0383166000908152601c602052604090205460ff165b6119005760405162461bcd60e51b815260206004820152601a60248201527f436f6e7472616374206e6f74206c61756e63686564207965742e000000000000604482015260640161098e565b6001600160a01b0384166000908152600660205260408120805484929061192890849061261b565b90915550506001600160a01b03841660009081526009602052604081205460ff1615801561196f57506001600160a01b03841660009081526009602052604090205460ff16155b6119795782611984565b611984858585611c70565b905061198f84611dc9565b156119a35782156119a3576119a383611e71565b6001600160a01b038416600090815260066020526040812080548392906119cb908490612632565b9091555050601e54151580156119ea5750602054600160a01b900460ff165b15611a705760205460405163090ec10b60e31b81526001600160a01b038781166004830152868116602483015260448201869052909116906348760858906064016020604051808303816000875af1158015611a4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6e9190612804565b505b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611ab591815260200190565b60405180910390a3506001949350505050565b6001600160a01b038316600090815260066020526040812080548391908390611af290849061261b565b90915550506001600160a01b03831660009081526006602052604081208054849290611b1f908490612632565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611b6b91815260200190565b60405180910390a35060019392505050565b60045481111580611ba657506001600160a01b0382166000908152600a602052604090205460ff165b61157a5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b604482015260640161098e565b6005546001600160a01b0383166000908152600660205260409020548190611c0f908490612632565b1115611c6b5760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206261672060448201526439b4bd329760d91b606482015260840161098e565b505050565b6013546001600160a01b038084166000908152601b6020526040808220549287168252812054909283929091611cdc9160ff908116911615801561052f57506012546001600160a01b0389166000908152600860205260409020544291611cd691612632565b11610f05565b611ce690856125da565b611cf091906125f9565b6001600160a01b0386166000908152601b602052604090205490915060ff168015611d3157506001600160a01b038416600090815260086020526040902054155b15611d52576001600160a01b03841660009081526008602052604090204290555b3060009081526006602052604081208054839290611d71908490612632565b909155505060405181815230906001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3611dc0818461261b565b95945050505050565b336000908152601b602052604081205460ff16158015611df957503360009081526009602052604090205460ff16155b8015611e08575060235460ff16155b8015611e1d5750602054600160b01b900460ff165b8015611e4157506001600160a01b0382166000908152601b602052604090205460ff165b8015611e5e57506022543060009081526006602052604090205410155b8015610a1557506000600f541192915050565b6023805460ff191660011790556021546000908210611e9257602154611e94565b815b30600090815260066020526040902054909150811115611ec05750306000908152600660205260409020545b6000611ed0601754601854610af9565b611edc57600b54611edf565b60005b905060006002600f548385611ef491906125da565b611efe91906125f9565b611f0891906125f9565b9050611f14818461261b565b60408051600280825260608201835292955060009290916020830190803683370190505090503081600081518110611f4e57611f4e612667565b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611fa7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fcb919061264a565b81600181518110611fde57611fde612667565b6001600160a01b03928316602091820292909201015260195460405163791ac94760e01b81524792919091169063791ac94790612028908890600090879030904290600401612821565b600060405180830381600087803b15801561204257600080fd5b505af1158015612056573d6000803e3d6000fd5b5050505060008147612068919061261b565b905060006120776002876125f9565b600f54612084919061261b565b9050600060028261209589866125da565b61209f91906125f9565b6120a991906125f9565b9050600082600d54856120bc91906125da565b6120c691906125f9565b9050600083600e54866120d991906125da565b6120e391906125f9565b905087156121bd5760195460145460405163f305d71960e01b8152306004820152602481018b905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990859060c40160606040518083038185885af115801561215b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612180919061285d565b505060408051858152602081018b90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b81156121ff576015546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156121fd573d6000803e3d6000fd5b505b8015612241576016546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561223f573d6000803e3d6000fd5b505b50506023805460ff19169055505050505050505050565b600060208083528351808285015260005b8181101561228557858101830151858201604001528201612269565b81811115612297576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146122c257600080fd5b50565b600080604083850312156122d857600080fd5b82356122e3816122ad565b946020939093013593505050565b6000806040838503121561230457600080fd5b50508035926020909101359150565b60008060006060848603121561232857600080fd5b8335612333816122ad565b92506020840135612343816122ad565b929592945050506040919091013590565b80151581146122c257600080fd5b6000806040838503121561237557600080fd5b8235612380816122ad565b9150602083013561239081612354565b809150509250929050565b6000602082840312156123ad57600080fd5b8135610c56816122ad565b600080604083850312156123cb57600080fd5b82359150602083013561239081612354565b600080604083850312156123f057600080fd5b823561238081612354565b60006020828403121561240d57600080fd5b8135610c5681612354565b60008083601f84011261242a57600080fd5b50813567ffffffffffffffff81111561244257600080fd5b6020830191508360208260051b850101111561245d57600080fd5b9250929050565b6000806000806040858703121561247a57600080fd5b843567ffffffffffffffff8082111561249257600080fd5b61249e88838901612418565b909650945060208701359150808211156124b757600080fd5b506124c487828801612418565b95989497509550505050565b60008060008060008060c087890312156124e957600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b6000806040838503121561252657600080fd5b8235612531816122ad565b91506020830135612390816122ad565b60008060006060848603121561255657600080fd5b833561256181612354565b95602085013595506040909401359392505050565b60006020828403121561258857600080fd5b5035919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156125f4576125f46125c4565b500290565b60008261261657634e487b7160e01b600052601260045260246000fd5b500490565b60008282101561262d5761262d6125c4565b500390565b60008219821115612645576126456125c4565b500190565b60006020828403121561265c57600080fd5b8151610c56816122ad565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b838110156126b65781516001600160a01b031687529582019590820190600101612691565b509495945050505050565b8481526080602082015260006126da608083018661267d565b6001600160a01b03949094166040830152506060015292915050565b600181815b80851115612731578160001904821115612717576127176125c4565b8085161561272457918102915b93841c93908002906126fb565b509250929050565b60008261274857506001610a15565b8161275557506000610a15565b816001811461276b576002811461277557612791565b6001915050610a15565b60ff841115612786576127866125c4565b50506001821b610a15565b5060208310610133831016604e8410600b84101617156127b4575081810a610a15565b6127be83836126f6565b80600019048211156127d2576127d26125c4565b029392505050565b6000610c5660ff841683612739565b60006000198214156127fd576127fd6125c4565b5060010190565b60006020828403121561281657600080fd5b8151610c5681612354565b85815284602082015260a06040820152600061284060a083018661267d565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561287257600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220fd949371c1d5c80b14e46a7cdec87c6604f2d087d6151f9deaf4f928376903db64736f6c634300080b0033

Deployed Bytecode Sourcemap

13047:14908:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24406:158;;;;;;;;;;;;;:::i;:::-;;14804:49;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;14804:49:0;;;;;;;;16213:71;;;;;;;;;;-1:-1:-1;16276:5:0;;;;;;;;;;;;-1:-1:-1;;;16276:5:0;;;;16213:71;;;;;;;:::i;16619:216::-;;;;;;;;;;-1:-1:-1;16619:216:0;;;;;:::i;:::-;;:::i;:::-;;;1419:14:1;;1412:22;1394:41;;1382:2;1367:18;16619:216:0;1254:187:1;23979:321:0;;;;;;;;;;-1:-1:-1;23979:321:0;;;;;:::i;:::-;;:::i;27094:150::-;;;;;;;;;;-1:-1:-1;27094:150:0;;;;;:::i;:::-;;:::i;15961:88::-;;;;;;;;;;-1:-1:-1;16034:12:0;;15961:88;;24572:230;;;;;;;;;;-1:-1:-1;24572:230:0;;;;;:::i;:::-;;:::i;26594:182::-;;;;;;;;;;-1:-1:-1;26594:182:0;;;;;:::i;:::-;;:::i;17737:341::-;;;;;;;;;;-1:-1:-1;17737:341:0;;;;;:::i;:::-;;:::i;26784:138::-;;;;;;;;;;;;;:::i;16055:71::-;;;;;;;;;;-1:-1:-1;16055:71:0;;13376:1;2302:36:1;;2290:2;2275:18;16055:71:0;2160:184:1;17473:92:0;;;;;;;;;;;;;:::i;27252:126::-;;;;;;;;;;-1:-1:-1;27252:126:0;;;;;:::i;:::-;;:::i;16843:122::-;;;;;;;;;;-1:-1:-1;16843:122:0;;;;;:::i;:::-;;:::i;14603:27::-;;;;;;;;;;;;;;;;23457:514;;;;;;;;;;-1:-1:-1;23457:514:0;;;;;:::i;:::-;;:::i;20301:349::-;;;;;;;;;;-1:-1:-1;20301:349:0;;;;;:::i;:::-;;:::i;25024:119::-;;;;;;;;;;-1:-1:-1;25024:119:0;;;;;:::i;:::-;;:::i;16973:170::-;;;;;;;;;;-1:-1:-1;16973:170:0;;;;;:::i;:::-;;:::i;27383:483::-;;;;;;;;;;-1:-1:-1;27383:483:0;;;;;:::i;:::-;;:::i;14767:30::-;;;;;;;;;;-1:-1:-1;14767:30:0;;;;-1:-1:-1;;;14767:30:0;;;;;;16367:105;;;;;;;;;;-1:-1:-1;16367:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;16451:18:0;16433:7;16451:18;;;:9;:18;;;;;;;16367:105;12285:148;;;;;;;;;;;;;:::i;14677:36::-;;;;;;;;;;-1:-1:-1;14677:36:0;;;;-1:-1:-1;;;14677:36:0;;;;;;13450:54;;;;;;;;;;;;;;;;25286:563;;;;;;;;;;-1:-1:-1;25286:563:0;;;;;:::i;:::-;;:::i;14643:27::-;;;;;;;;;;-1:-1:-1;14643:27:0;;;;-1:-1:-1;;;;;14643:27:0;;;;;;-1:-1:-1;;;;;5912:32:1;;;5894:51;;5882:2;5867:18;14643:27:0;5730:221:1;16290:71:0;;;;;;;;;;-1:-1:-1;16333:7:0;11709:6;-1:-1:-1;;;;;11709:6:0;16290:71;26784:138;13511:56;;;;;;;;;;;;;;;;16132:75;;;;;;;;;;-1:-1:-1;16197:7:0;;;;;;;;;;;;-1:-1:-1;;;16197:7:0;;;;16132:75;;26153:106;;;;;;;;;;-1:-1:-1;26153:106:0;;;;;:::i;:::-;;:::i;25857:284::-;;;;;;;;;;-1:-1:-1;25857:284:0;;;;;:::i;:::-;;:::i;14543:19::-;;;;;;;;;;-1:-1:-1;14543:19:0;;;;-1:-1:-1;;;;;14543:19:0;;;17573:156;;;;;;;;;;-1:-1:-1;17573:156:0;;;;;:::i;:::-;;:::i;24814:202::-;;;;;;;;;;-1:-1:-1;24814:202:0;;;;;:::i;:::-;;:::i;14571:25::-;;;;;;;;;;;;;;;;14720:38;;;;;;;;;;-1:-1:-1;14720:38:0;;;;-1:-1:-1;;;14720:38:0;;;;;;14114:36;;;;;;;;;;-1:-1:-1;14114:36:0;;;;-1:-1:-1;;;;;14114:36:0;;;26267:319;;;;;;;;;;-1:-1:-1;26267:319:0;;;;;:::i;:::-;;:::i;26930:156::-;;;;;;;;;;-1:-1:-1;26930:156:0;;;;;:::i;:::-;;:::i;17155:306::-;;;;;;;;;;-1:-1:-1;17155:306:0;;;;;:::i;:::-;;:::i;14207:37::-;;;;;;;;;;-1:-1:-1;14207:37:0;;;;-1:-1:-1;;;;;14207:37:0;;;16478:133;;;;;;;;;;-1:-1:-1;16478:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;16580:19:0;;;16562:7;16580:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;16478:133;20086:207;;;;;;;;;;-1:-1:-1;20086:207:0;;;;;:::i;:::-;;:::i;14157:43::-;;;;;;;;;;-1:-1:-1;14157:43:0;;;;-1:-1:-1;;;;;14157:43:0;;;12588:244;;;;;;;;;;-1:-1:-1;12588:244:0;;;;;:::i;:::-;;:::i;25151:127::-;;;;;;;;;;-1:-1:-1;25151:127:0;;;;;:::i;:::-;;:::i;14860:49::-;;;;;;;;;;;;;;;;14337:24;;;;;;;;;;-1:-1:-1;14337:24:0;;;;-1:-1:-1;;;;;14337:24:0;;;24406:158;11856:6;;-1:-1:-1;;;;;11856:6:0;6346:10;11856:22;11848:67;;;;-1:-1:-1;;;11848:67:0;;;;;;;:::i;:::-;;;;;;;;;24463:10:::1;::::0;:15;24454:25:::1;;;::::0;::::1;;24503:12;24490:10;:25:::0;24541:15:::1;24526:12;:30:::0;24406:158::o;16619:216::-;16723:10;16694:4;16711:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;16711:32:0;;;;;;;;;;:41;;;16768:37;16694:4;;16711:32;;16768:37;;;;16746:6;160:25:1;;148:2;133:18;;14:177;16768:37:0;;;;;;;;-1:-1:-1;16823:4:0;16619:216;;;;;:::o;23979:321::-;11856:6;;-1:-1:-1;;;;;11856:6:0;6346:10;11856:22;11848:67;;;;-1:-1:-1;;;11848:67:0;;;;;;;:::i;:::-;24130:3:::1;24123;24099:20;24088:8;;:31;;;;:::i;:::-;24087:39;;;;:::i;:::-;:46;;24079:76;;;::::0;-1:-1:-1;;;24079:76:0;;8664:2:1;24079:76:0::1;::::0;::::1;8646:21:1::0;8703:2;8683:18;;;8676:30;-1:-1:-1;;;8722:18:1;;;8715:47;8779:18;;24079:76:0::1;8462:341:1::0;24079:76:0::1;24185:6;24174:7;:17;;24166:50;;;::::0;-1:-1:-1;;;24166:50:0;;9010:2:1;24166:50:0::1;::::0;::::1;8992:21:1::0;9049:2;9029:18;;;9022:30;-1:-1:-1;;;9068:18:1;;;9061:50;9128:18;;24166:50:0::1;8808:344:1::0;24166:50:0::1;24227:11;:34:::0;;;;24272:10:::1;:20:::0;23979:321::o;27094:150::-;27174:4;27230:6;27198:29;27218:8;27198:19;:29::i;:::-;:38;;27094:150;-1:-1:-1;;;27094:150:0:o;24572:230::-;11856:6;;-1:-1:-1;;;;;11856:6:0;6346:10;11856:22;11848:67;;;;-1:-1:-1;;;11848:67:0;;;;;;;:::i;:::-;24678:1:::1;24666:9;:13;:28;;;;;24693:1;24683:7;:11;24666:28;:65;;;;-1:-1:-1::0;24730:1:0::1;24719:7:::0;24699:16:::1;:9:::0;24711:4:::1;24699:16;:::i;:::-;24698:28;;;;:::i;:::-;:33;;24666:65;24658:74;;;::::0;::::1;;24787:7;24774:9;24759:12;;:24;;;;:::i;:::-;24758:36;;;;:::i;:::-;24743:12;:51:::0;-1:-1:-1;;24572:230:0:o;26594:182::-;11856:6;;-1:-1:-1;;;;;11856:6:0;6346:10;11856:22;11848:67;;;;-1:-1:-1;;;11848:67:0;;;;;;;:::i;:::-;26691:15:::1;:25:::0;;;;26727:26:::1;:41:::0;26594:182::o;17737:341::-;-1:-1:-1;;;;;17857:19:0;;17837:4;17857:19;;;:11;:19;;;;;;;;17877:10;17857:31;;;;;;;;-1:-1:-1;;17857:52:0;17854:157;;-1:-1:-1;;;;;17959:19:0;;;;;;:11;:19;;;;;;;;17979:10;17959:31;;;;;;;;:40;;17993:6;;17959:40;:::i;:::-;-1:-1:-1;;;;;17925:19:0;;;;;;:11;:19;;;;;;;;17945:10;17925:31;;;;;;;:74;17854:157;18030:40;18044:6;18052:9;18063:6;18030:13;:40::i;:::-;18023:47;;17737:341;;;;;;:::o;26784:138::-;26908:4;;-1:-1:-1;;;;;26908:4:0;;;26837:7;16451:18;;;:9;:18;;;;;;;26890:4;;;;;16451:18;;;;;26837:7;;26880:33;;;:::i;:::-;26864:12;;:50;;;;:::i;:::-;26857:57;;26784:138;:::o;17473:92::-;11856:6;;-1:-1:-1;;;;;11856:6:0;6346:10;11856:22;11848:67;;;;-1:-1:-1;;;11848:67:0;;;;;;;:::i;:::-;17532:18:::1;:25:::0;;-1:-1:-1;;;;17532:25:0::1;-1:-1:-1::0;;;17532:25:0::1;::::0;;17473:92::o;27252:126::-;11856:6;;-1:-1:-1;;;;;11856:6:0;6346:10;11856:22;11848:67;;;;-1:-1:-1;;;11848:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27338:21:0;;;::::1;;::::0;;;:14:::1;:21;::::0;;;;:32;;-1:-1:-1;;27338:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27252:126::o;16843:122::-;16898:4;16922:35;16930:7;-1:-1:-1;;16922:7:0;:35::i;23457:514::-;11856:6;;-1:-1:-1;;;;;11856:6:0;6346:10;11856:22;11848:67;;;;-1:-1:-1;;;11848:67:0;;;;;;;:::i;:::-;23534:16:::1;23590:3;23554:32;23578:8:::0;23554:21:::1;:32;:::i;:::-;23553:40;;;;:::i;:::-;23534:59;;23604:17;23624:5;:25;;23639:10;23624:25;;;23632:4;::::0;-1:-1:-1;;;;;23632:4:0::1;23624:25;23686:16;::::0;;23700:1:::1;23686:16:::0;;;;;::::1;::::0;;23604:45;;-1:-1:-1;23662:21:0::1;::::0;23686:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;23723:6:0::1;::::0;:13:::1;::::0;;-1:-1:-1;;;23723:13:0;;;;23662:40;;-1:-1:-1;;;;;;23723:6:0;;::::1;::::0;:11:::1;::::0;-1:-1:-1;23723:13:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23713:4;23718:1;23713:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;23713:23:0::1;;;-1:-1:-1::0;;;;;23713:23:0::1;;;::::0;::::1;23765:4;23747;23752:1;23747:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23747:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;23783:6:::1;::::0;::::1;:57;23848:8:::0;23783:6:::1;23888:4:::0;23907:9;23931:21:::1;:15;23949:3;23931:21;:::i;:::-;23783:180;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;23523:448;;;23457:514:::0;;:::o;20301:349::-;20376:7;20417:12;20399:10;;20412:1;20399:14;;;;:::i;:::-;:30;20396:64;;20456:1;20439:14;;:18;;;;:::i;:::-;20432:25;;;;20396:64;20474:7;20470:87;;;20490:12;:67;;20549:8;;20538;;:19;;;;:::i;:::-;20490:67;;;20532:3;20517:11;;20506:8;;:22;;;;:::i;:::-;20505:30;;;;:::i;20470:87::-;20575:12;:67;;20634:8;;20623;;:19;;;;:::i;:::-;20575:67;;;20617:3;20602:11;;20591:8;;:22;;;;:::i;:::-;20590:30;;;;:::i;25024:119::-;11856:6;;-1:-1:-1;;;;;11856:6:0;6346:10;11856:22;11848:67;;;;-1:-1:-1;;;11848:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25107:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;25107:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25024:119::o;16973:170::-;11856:6;;-1:-1:-1;;;;;11856:6:0;6346:10;11856:22;11848:67;;;;-1:-1:-1;;;11848:67:0;;;;;;;:::i;:::-;17045:8:::1;17041:55;;;17077:18;::::0;-1:-1:-1;;;17077:18:0;::::1;;;17076:19;17068:28;;;::::0;::::1;;17107:17;:28:::0;;;::::1;;-1:-1:-1::0;;;17107:28:0::1;-1:-1:-1::0;;;;17107:28:0;;::::1;::::0;;;::::1;::::0;;16973:170::o;27383:483::-;11856:6;;-1:-1:-1;;;;;11856:6:0;6346:10;11856:22;11848:67;;;;-1:-1:-1;;;11848:67:0;;;;;;;:::i;:::-;27502:35;;::::1;27494:44;;;::::0;::::1;;27569:11;::::0;;-1:-1:-1;;;;27591:19:0;::::1;::::0;;;-1:-1:-1;;;27569:11:0;::::1;;;-1:-1:-1::0;27621:201:0::1;27641:21:::0;;::::1;27621:201;;;27693:14;:29;27708:10;;27719:1;27708:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27693:29:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;27693:29:0;;::::1;;27692:30;27684:39;;;::::0;::::1;;27738:72;27752:10;27764;;27775:1;27764:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;27793:15;13376:1;27793:2;:15;:::i;:::-;27779:7;;27787:1;27779:10;;;;;;;:::i;:::-;;;;;;;:30;;;;:::i;:::-;27738:13;:72::i;:::-;-1:-1:-1::0;27664:3:0;::::1;::::0;::::1;:::i;:::-;;;;27621:201;;;-1:-1:-1::0;27832:11:0::1;:26:::0;;;::::1;;-1:-1:-1::0;;;27832:26:0::1;-1:-1:-1::0;;;;27832:26:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;27383:483:0:o;12285:148::-;11856:6;;-1:-1:-1;;;;;11856:6:0;6346:10;11856:22;11848:67;;;;-1:-1:-1;;;11848:67:0;;;;;;;:::i;:::-;12392:1:::1;12376:6:::0;;12355:40:::1;::::0;-1:-1:-1;;;;;12376:6:0;;::::1;::::0;12355:40:::1;::::0;12392:1;;12355:40:::1;12423:1;12406:19:::0;;-1:-1:-1;;;;;;12406:19:0::1;::::0;;12285:148::o;25286:563::-;11856:6;;-1:-1:-1;;;;;11856:6:0;6346:10;11856:22;11848:67;;;;-1:-1:-1;;;11848:67:0;;;;;;;:::i;:::-;25464:12:::1;:28:::0;;;25503:13:::1;:30:::0;;;25544:12:::1;:28:::0;;;25583:6:::1;:16:::0;;;25610:8:::1;:20:::0;;;25592:7;25559:13;25652:30:::1;25519:14:::0;25479:13;25652:30:::1;:::i;:::-;:46;;;;:::i;:::-;:56;;;;:::i;:::-;25641:8;:67:::0;25719:14:::1;:32:::0;;;25782:18:::1;25799:1;25736:15:::0;25782:18:::1;:::i;:::-;25770:8;;:30;;25762:39;;;::::0;::::1;;25832:8;;25820;;:20;;25812:29;;;::::0;::::1;;25286:563:::0;;;;;;:::o;26153:106::-;11856:6;;-1:-1:-1;;;;;11856:6:0;6346:10;11856:22;11848:67;;;;-1:-1:-1;;;11848:67:0;;;;;;;:::i;:::-;26221:14:::1;:30:::0;;-1:-1:-1;;;;;;26221:30:0::1;-1:-1:-1::0;;;;;26221:30:0;;;::::1;::::0;;;::::1;::::0;;26153:106::o;25857:284::-;11856:6;;-1:-1:-1;;;;;11856:6:0;6346:10;11856:22;11848:67;;;;-1:-1:-1;;;11848:67:0;;;;;;;:::i;:::-;26004:4:::1;::::0;25979:21:::1;::::0;-1:-1:-1;;;;;25979:21:0;;::::1;26004:4:::0;::::1;25979:29;25975:94;;26023:21;:46:::0;;-1:-1:-1;;;;;;26023:46:0::1;-1:-1:-1::0;;;;;26023:46:0;::::1;;::::0;;25975:94:::1;26080:20;:53:::0;;-1:-1:-1;;;;;;26080:53:0::1;-1:-1:-1::0;;;;;26080:53:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;25857:284:0:o;17573:156::-;17653:4;17677:44;17691:10;17703:9;17714:6;17677:13;:44::i;24814:202::-;11856:6;;-1:-1:-1;;;;;11856:6:0;6346:10;11856:22;11848:67;;;;-1:-1:-1;;;11848:67:0;;;;;;;:::i;:::-;24922:1:::1;24912:7;:11;:31;;;;;24938:5;24927:7;:16;;24912:31;24904:40;;;::::0;::::1;;25001:7;24988:9;24973:12;;:24;;;;:::i;:::-;24972:36;;;;:::i;:::-;24955:14;:53:::0;-1:-1:-1;;24814:202:0:o;26267:319::-;11856:6;;-1:-1:-1;;;;;11856:6:0;6346:10;11856:22;11848:67;;;;-1:-1:-1;;;11848:67:0;;;;;;;:::i;:::-;26411:1:::1;26396:12;:16;:39;;;;;26434:1;26416:15;:19;26396:39;26388:48;;;::::0;::::1;;26447:11;:22:::0;;-1:-1:-1;;;;26447:22:0::1;-1:-1:-1::0;;;26447:22:0;::::1;;;;::::0;;26494:12:::1;::::0;:30:::1;::::0;26509:15;;26494:30:::1;:::i;:::-;26480:11;:44:::0;26551:12:::1;::::0;:27:::1;::::0;26566:12;;26551:27:::1;:::i;:::-;26535:13;:43:::0;-1:-1:-1;;;26267:319:0:o;26930:156::-;26998:7;27056:22;:20;:22::i;:::-;27047:4;;-1:-1:-1;;;;;27047:4:0;16433:7;16451:18;;;:9;:18;;;;;;27026:26;;:8;:26;:::i;:::-;27025:53;;;;:::i;17155:306::-;11856:6;;-1:-1:-1;;;;;11856:6:0;6346:10;11856:22;11848:67;;;;-1:-1:-1;;;11848:67:0;;;;;;;:::i;:::-;17268:9:::1;::::0;-1:-1:-1;;;;;17245:33:0;;::::1;17268:9:::0;::::1;17245:33;17241:143;;17303:18;::::0;-1:-1:-1;;;17303:18:0;::::1;;;17302:19;17294:28;;;::::0;::::1;;17337:9;:35:::0;;-1:-1:-1;;;;;;17337:35:0::1;-1:-1:-1::0;;;;;17337:35:0;::::1;;::::0;;17241:143:::1;17398:5;17394:59;;;17418:9;::::0;:35:::1;::::0;-1:-1:-1;;;17418:35:0;;17442:10:::1;17418:35;::::0;::::1;5894:51:1::0;-1:-1:-1;;;;;17418:9:0;;::::1;::::0;:23:::1;::::0;5867:18:1;;17418:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;17394:59;17155:306:::0;;:::o;20086:207::-;11856:6;;-1:-1:-1;;;;;11856:6:0;6346:10;11856:22;11848:67;;;;-1:-1:-1;;;11848:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20165:22:0::1;;::::0;;;:11:::1;:22;::::0;;;;;;;:29;;20190:4:::1;-1:-1:-1::0;;20165:29:0;;::::1;::::0;::::1;::::0;;;20205:18:::1;:29:::0;;;;;:36;;;::::1;::::0;::::1;::::0;;20252:15:::1;:26:::0;;;;;:33;;;;::::1;::::0;;::::1;::::0;;20086:207::o;12588:244::-;11856:6;;-1:-1:-1;;;;;11856:6:0;6346:10;11856:22;11848:67;;;;-1:-1:-1;;;11848:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12677:22:0;::::1;12669:73;;;::::0;-1:-1:-1;;;12669:73:0;;12646:2:1;12669:73:0::1;::::0;::::1;12628:21:1::0;12685:2;12665:18;;;12658:30;12724:34;12704:18;;;12697:62;-1:-1:-1;;;12775:18:1;;;12768:36;12821:19;;12669:73:0::1;12444:402:1::0;12669:73:0::1;12779:6;::::0;;12758:38:::1;::::0;-1:-1:-1;;;;;12758:38:0;;::::1;::::0;12779:6;::::1;::::0;12758:38:::1;::::0;::::1;12807:6;:17:::0;;-1:-1:-1;;;;;;12807:17:0::1;-1:-1:-1::0;;;;;12807:17:0;;;::::1;::::0;;;::::1;::::0;;12588:244::o;25151:127::-;11856:6;;-1:-1:-1;;;;;11856:6:0;6346:10;11856:22;11848:67;;;;-1:-1:-1;;;11848:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25238:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;25238:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25151:127::o;18086:1178::-;-1:-1:-1;;;;;18203:17:0;;18178:4;18203:17;;;:9;:17;;;;;;:27;-1:-1:-1;18203:27:0;18195:60;;;;-1:-1:-1;;;18195:60:0;;13053:2:1;18195:60:0;;;13035:21:1;13092:2;13072:18;;;13065:30;-1:-1:-1;;;13111:18:1;;;13104:50;13171:18;;18195:60:0;12851:344:1;18195:60:0;18283:1;18274:6;:10;18266:46;;;;-1:-1:-1;;;18266:46:0;;13402:2:1;18266:46:0;;;13384:21:1;13441:2;13421:18;;;13414:30;13480:25;13460:18;;;13453:53;13523:18;;18266:46:0;13200:347:1;18266:46:0;18328:6;;;;18325:63;;;18344:41;18359:6;18367:9;18378:6;18344:14;:41::i;:::-;18337:48;;;;18325:63;18400:28;18413:6;18421;18400:12;:28::i;:::-;-1:-1:-1;;;;;18454:25:0;;;;;;:14;:25;;;;;;;;18453:26;:47;;;;-1:-1:-1;18496:4:0;;-1:-1:-1;;;;;18483:17:0;;;18496:4;;18483:17;;18453:47;18449:148;;;-1:-1:-1;;;;;18522:26:0;;;;;;:15;:26;;;;;;;;18517:68;;18550:35;18567:9;18578:6;18550:16;:35::i;:::-;24375:10;;18609:118;;-1:-1:-1;;;;;18634:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;18664:29:0;;;;;;:18;:29;;;;;;;;18634:59;18626:98;;;;-1:-1:-1;;;18626:98:0;;13754:2:1;18626:98:0;;;13736:21:1;13793:2;13773:18;;;13766:30;13832:28;13812:18;;;13805:56;13878:18;;18626:98:0;13552:350:1;18626:98:0;-1:-1:-1;;;;;18739:17:0;;;;;;:9;:17;;;;;:27;;18760:6;;18739:17;:27;;18760:6;;18739:27;:::i;:::-;;;;-1:-1:-1;;;;;;;20047:19:0;;18779:22;20047:19;;;:11;:19;;;;;;;;20046:20;18804:49;;;;-1:-1:-1;;;;;;20047:19:0;;20022:4;20047:19;;;:11;:19;;;;;;;;20046:20;18829:24;18804:95;;18893:6;18804:95;;;18856:34;18864:6;18872:9;18883:6;18856:7;:34::i;:::-;18779:120;;18923:25;18938:9;18923:14;:25::i;:::-;18920:66;;;18955:10;;18951:32;;18967:16;18976:6;18967:8;:16::i;:::-;-1:-1:-1;;;;;19006:20:0;;;;;;:9;:20;;;;;:38;;19030:14;;19006:20;:38;;19030:14;;19006:38;:::i;:::-;;;;-1:-1:-1;;24375:10:0;;:15;;19072:31;;;;-1:-1:-1;19086:17:0;;-1:-1:-1;;;19086:17:0;;;;19072:31;19069:104;;;19118:9;;:55;;-1:-1:-1;;;19118:55:0;;-1:-1:-1;;;;;14165:15:1;;;19118:55:0;;;14147:34:1;14217:15;;;14197:18;;;14190:43;14249:18;;;14242:34;;;19118:9:0;;;;:28;;14082:18:1;;19118:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19069:104;19208:9;-1:-1:-1;;;;;19191:43:0;19200:6;-1:-1:-1;;;;;19191:43:0;;19219:14;19191:43;;;;160:25:1;;148:2;133:18;;14:177;19191:43:0;;;;;;;;-1:-1:-1;19252:4:0;;18086:1178;-1:-1:-1;;;;18086:1178:0:o;19272:259::-;-1:-1:-1;;;;;19382:17:0;;19365:4;19382:17;;;:9;:17;;;;;:27;;19403:6;;19382:17;19365:4;;19382:27;;19403:6;;19382:27;:::i;:::-;;;;-1:-1:-1;;;;;;;19420:20:0;;;;;;:9;:20;;;;;:30;;19444:6;;19420:20;:30;;19444:6;;19420:30;:::i;:::-;;;;;;;;19483:9;-1:-1:-1;;;;;19466:35:0;19475:6;-1:-1:-1;;;;;19466:35:0;;19494:6;19466:35;;;;160:25:1;;148:2;133:18;;14:177;19466:35:0;;;;;;;;-1:-1:-1;19519:4:0;19272:259;;;;;:::o;19786:166::-;19883:12;;19873:6;:22;;:49;;;-1:-1:-1;;;;;;19899:23:0;;;;;;:15;:23;;;;;;;;19873:49;19865:79;;;;-1:-1:-1;;;19865:79:0;;14739:2:1;19865:79:0;;;14721:21:1;14778:2;14758:18;;;14751:30;-1:-1:-1;;;14797:18:1;;;14790:47;14854:18;;19865:79:0;14537:341:1;19543:235:0;19651:14;;-1:-1:-1;;;;;19684:20:0;;19629:19;19684:20;;;:9;:20;;;;;;19651:14;;19684:29;;19707:6;;19684:29;:::i;:::-;:44;;19676:94;;;;-1:-1:-1;;;19676:94:0;;15085:2:1;19676:94:0;;;15067:21:1;15124:2;15104:18;;;15097:30;15163:34;15143:18;;;15136:62;-1:-1:-1;;;15214:18:1;;;15207:35;15259:19;;19676:94:0;14883:401:1;19676:94:0;19618:160;19543:235;;:::o;20658:546::-;20911:14;;-1:-1:-1;;;;;20806:25:0;;;20744:7;20806:25;;;:14;:25;;;;;;;20834:22;;;;;;;;20744:7;;;;20911:14;;20794:113;;20806:25;;;;;20834:22;20833:23;:73;;;;-1:-1:-1;20878:10:0;;-1:-1:-1;;;;;20860:15:0;;;;;;:7;:15;;;;;;20891;;20860:28;;;:::i;:::-;:46;20794:11;:113::i;:::-;20785:122;;:6;:122;:::i;:::-;20784:141;;;;:::i;:::-;-1:-1:-1;;;;;20950:22:0;;;;;;:14;:22;;;;;;20764:161;;-1:-1:-1;20950:22:0;;:49;;;;-1:-1:-1;;;;;;20976:18:0;;;;;;:7;:18;;;;;;:23;20950:49;20946:104;;;-1:-1:-1;;;;;21014:18:0;;;;;;:7;:18;;;;;21035:15;21014:36;;20946:104;21081:4;21063:24;;;;:9;:24;;;;;:37;;21091:9;;21063:24;:37;;21091:9;;21063:37;:::i;:::-;;;;-1:-1:-1;;21116:42:0;;160:25:1;;;21141:4:0;;-1:-1:-1;;;;;21116:42:0;;;;;148:2:1;133:18;21116:42:0;;;;;;;21178:18;21187:9;21178:6;:18;:::i;:::-;21171:25;20658:546;-1:-1:-1;;;;;20658:546:0:o;21212:321::-;21318:10;21278:4;21303:26;;;:14;:26;;;;;;;;21302:27;:64;;;;-1:-1:-1;21355:10:0;21343:23;;;;:11;:23;;;;;;;;21342:24;21302:64;:84;;;;-1:-1:-1;21380:6:0;;;;21379:7;21302:84;:108;;;;-1:-1:-1;21399:11:0;;-1:-1:-1;;;21399:11:0;;;;21302:108;:146;;;;-1:-1:-1;;;;;;21423:25:0;;;;;;:14;:25;;;;;;;;21302:146;:198;;;;-1:-1:-1;21489:11:0;;21479:4;21461:24;;;;:9;:24;;;;;;:39;;21302:198;:223;;;;;21524:1;21513:8;;:12;21295:230;21212:321;-1:-1:-1;;21212:321:0:o;21541:1908::-;14956:6;:13;;-1:-1:-1;;14956:13:0;14965:4;14956:13;;;21636::::1;::::0;14956:6;;21627:22;::::1;:47;;21661:13;;21627:47;;;21652:6;21627:47;21707:4;21689:24;::::0;;;:9:::1;:24;::::0;;;;;21604:70;;-1:-1:-1;21689:39:0;-1:-1:-1;21685:84:0::1;;;-1:-1:-1::0;21763:4:0::1;21745:24;::::0;;;:9:::1;:24;::::0;;;;;21685:84:::1;21780:27;21810:60;21826:15;;21843:26;;21810:15;:60::i;:::-;:79;;21877:12;;21810:79;;;21873:1;21810:79;21780:109;;21900:23;21978:1;21966:8;;21943:19;21928:12;:34;;;;:::i;:::-;21927:47;;;;:::i;:::-;21926:53;;;;:::i;:::-;21900:79:::0;-1:-1:-1;21990:31:0::1;21900:79:::0;21990:31;::::1;:::i;:::-;22058:16;::::0;;22072:1:::1;22058:16:::0;;;;;::::1;::::0;;21990:31;;-1:-1:-1;22034:21:0::1;::::0;22058:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;22058:16:0::1;22034:40;;22103:4;22085;22090:1;22085:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22085:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;22129:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;22129:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;22085:7;;22129:13;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22119:4;22124:1;22119:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22119:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;22221:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;22221:188:0;;22187:21:::1;::::0;22221:6;;;::::1;::::0;:57:::1;::::0;:188:::1;::::0;22293:12;;22163:21:::1;::::0;22336:4;;22363::::1;::::0;22383:15:::1;::::0;22221:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22422:20;22469:13;22445:21;:37;;;;:::i;:::-;22422:60:::0;-1:-1:-1;22493:19:0::1;22526:23;22548:1;22526:19:::0;:23:::1;:::i;:::-;22515:8;;:34;;;;:::i;:::-;22493:56:::0;-1:-1:-1;22562:23:0::1;22641:1;22493:56:::0;22589:34:::1;22604:19:::0;22589:12;:34:::1;:::i;:::-;22588:50;;;;:::i;:::-;:54;;;;:::i;:::-;22562:80;;22737:23;22795:11;22779:12;;22764;:27;;;;:::i;:::-;22763:43;;;;:::i;:::-;22737:69;;22817:17;22863:11;22853:6;;22838:12;:21;;;;:::i;:::-;22837:37;;;;:::i;:::-;22817:57:::0;-1:-1:-1;22890:19:0;;22887:357:::1;;22926:6;::::0;23097:21:::1;::::0;22926:241:::1;::::0;-1:-1:-1;;;22926:241:0;;22999:4:::1;22926:241;::::0;::::1;16217:34:1::0;16267:18;;;16260:34;;;22926:6:0::1;16310:18:1::0;;;16303:34;;;16353:18;;;16346:34;-1:-1:-1;;;;;23097:21:0;;::::1;16396:19:1::0;;;16389:44;23137:15:0::1;16449:19:1::0;;;16442:35;22926:6:0;::::1;::::0;:22:::1;::::0;22956:15;;16151:19:1;;22926:241:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;23187:45:0::1;::::0;;16973:25:1;;;17029:2;17014:18;;17007:34;;;23187:45:0::1;::::0;-1:-1:-1;16946:18:1;23187:45:0::1;;;;;;;22887:357;23268:19:::0;;23264:84:::1;;23302:20;::::0;:46:::1;::::0;-1:-1:-1;;;;;23302:20:0;;::::1;::::0;:46;::::1;;;::::0;23332:15;;23302:20:::1;:46:::0;:20;:46;23332:15;23302:20;:46;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;23264:84;23377:13:::0;;23373:66:::1;;23405:14;::::0;:34:::1;::::0;-1:-1:-1;;;;;23405:14:0;;::::1;::::0;:34;::::1;;;::::0;23429:9;;23405:14:::1;:34:::0;:14;:34;23429:9;23405:14;:34;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;23373:66;-1:-1:-1::0;;14974:6:0;:14;;-1:-1:-1;;14974:14:0;;;-1:-1:-1;;;;;;;;;21541:1908:0:o;196:597:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;634:6;631:1;628:13;625:91;;;704:1;699:2;690:6;679:9;675:22;671:31;664:42;625:91;-1:-1:-1;777:2:1;756:15;-1:-1:-1;;752:29:1;737:45;;;;784:2;733:54;;196:597;-1:-1:-1;;;196:597:1:o;798:131::-;-1:-1:-1;;;;;873:31:1;;863:42;;853:70;;919:1;916;909:12;853:70;798:131;:::o;934:315::-;1002:6;1010;1063:2;1051:9;1042:7;1038:23;1034:32;1031:52;;;1079:1;1076;1069:12;1031:52;1118:9;1105:23;1137:31;1162:5;1137:31;:::i;:::-;1187:5;1239:2;1224:18;;;;1211:32;;-1:-1:-1;;;934:315:1:o;1446:248::-;1514:6;1522;1575:2;1563:9;1554:7;1550:23;1546:32;1543:52;;;1591:1;1588;1581:12;1543:52;-1:-1:-1;;1614:23:1;;;1684:2;1669:18;;;1656:32;;-1:-1:-1;1446:248:1:o;1699:456::-;1776:6;1784;1792;1845:2;1833:9;1824:7;1820:23;1816:32;1813:52;;;1861:1;1858;1851:12;1813:52;1900:9;1887:23;1919:31;1944:5;1919:31;:::i;:::-;1969:5;-1:-1:-1;2026:2:1;2011:18;;1998:32;2039:33;1998:32;2039:33;:::i;:::-;1699:456;;2091:7;;-1:-1:-1;;;2145:2:1;2130:18;;;;2117:32;;1699:456::o;2349:118::-;2435:5;2428:13;2421:21;2414:5;2411:32;2401:60;;2457:1;2454;2447:12;2472:382;2537:6;2545;2598:2;2586:9;2577:7;2573:23;2569:32;2566:52;;;2614:1;2611;2604:12;2566:52;2653:9;2640:23;2672:31;2697:5;2672:31;:::i;:::-;2722:5;-1:-1:-1;2779:2:1;2764:18;;2751:32;2792:30;2751:32;2792:30;:::i;:::-;2841:7;2831:17;;;2472:382;;;;;:::o;2859:247::-;2918:6;2971:2;2959:9;2950:7;2946:23;2942:32;2939:52;;;2987:1;2984;2977:12;2939:52;3026:9;3013:23;3045:31;3070:5;3045:31;:::i;3111:309::-;3176:6;3184;3237:2;3225:9;3216:7;3212:23;3208:32;3205:52;;;3253:1;3250;3243:12;3205:52;3289:9;3276:23;3266:33;;3349:2;3338:9;3334:18;3321:32;3362:28;3384:5;3362:28;:::i;3425:376::-;3487:6;3495;3548:2;3536:9;3527:7;3523:23;3519:32;3516:52;;;3564:1;3561;3554:12;3516:52;3603:9;3590:23;3622:28;3644:5;3622:28;:::i;3806:241::-;3862:6;3915:2;3903:9;3894:7;3890:23;3886:32;3883:52;;;3931:1;3928;3921:12;3883:52;3970:9;3957:23;3989:28;4011:5;3989:28;:::i;4052:367::-;4115:8;4125:6;4179:3;4172:4;4164:6;4160:17;4156:27;4146:55;;4197:1;4194;4187:12;4146:55;-1:-1:-1;4220:20:1;;4263:18;4252:30;;4249:50;;;4295:1;4292;4285:12;4249:50;4332:4;4324:6;4320:17;4308:29;;4392:3;4385:4;4375:6;4372:1;4368:14;4360:6;4356:27;4352:38;4349:47;4346:67;;;4409:1;4406;4399:12;4346:67;4052:367;;;;;:::o;4424:773::-;4546:6;4554;4562;4570;4623:2;4611:9;4602:7;4598:23;4594:32;4591:52;;;4639:1;4636;4629:12;4591:52;4679:9;4666:23;4708:18;4749:2;4741:6;4738:14;4735:34;;;4765:1;4762;4755:12;4735:34;4804:70;4866:7;4857:6;4846:9;4842:22;4804:70;:::i;:::-;4893:8;;-1:-1:-1;4778:96:1;-1:-1:-1;4981:2:1;4966:18;;4953:32;;-1:-1:-1;4997:16:1;;;4994:36;;;5026:1;5023;5016:12;4994:36;;5065:72;5129:7;5118:8;5107:9;5103:24;5065:72;:::i;:::-;4424:773;;;;-1:-1:-1;5156:8:1;-1:-1:-1;;;;4424:773:1:o;5202:523::-;5306:6;5314;5322;5330;5338;5346;5399:3;5387:9;5378:7;5374:23;5370:33;5367:53;;;5416:1;5413;5406:12;5367:53;-1:-1:-1;;5439:23:1;;;5509:2;5494:18;;5481:32;;-1:-1:-1;5560:2:1;5545:18;;5532:32;;5611:2;5596:18;;5583:32;;-1:-1:-1;5662:3:1;5647:19;;5634:33;;-1:-1:-1;5714:3:1;5699:19;5686:33;;-1:-1:-1;5202:523:1;-1:-1:-1;5202:523:1:o;6164:388::-;6232:6;6240;6293:2;6281:9;6272:7;6268:23;6264:32;6261:52;;;6309:1;6306;6299:12;6261:52;6348:9;6335:23;6367:31;6392:5;6367:31;:::i;:::-;6417:5;-1:-1:-1;6474:2:1;6459:18;;6446:32;6487:33;6446:32;6487:33;:::i;6557:377::-;6631:6;6639;6647;6700:2;6688:9;6679:7;6675:23;6671:32;6668:52;;;6716:1;6713;6706:12;6668:52;6755:9;6742:23;6774:28;6796:5;6774:28;:::i;:::-;6821:5;6873:2;6858:18;;6845:32;;-1:-1:-1;6924:2:1;6909:18;;;6896:32;;6557:377;-1:-1:-1;;;6557:377:1:o;6939:180::-;6998:6;7051:2;7039:9;7030:7;7026:23;7022:32;7019:52;;;7067:1;7064;7057:12;7019:52;-1:-1:-1;7090:23:1;;6939:180;-1:-1:-1;6939:180:1:o;7574:356::-;7776:2;7758:21;;;7795:18;;;7788:30;7854:34;7849:2;7834:18;;7827:62;7921:2;7906:18;;7574:356::o;7935:127::-;7996:10;7991:3;7987:20;7984:1;7977:31;8027:4;8024:1;8017:15;8051:4;8048:1;8041:15;8067:168;8107:7;8173:1;8169;8165:6;8161:14;8158:1;8155:21;8150:1;8143:9;8136:17;8132:45;8129:71;;;8180:18;;:::i;:::-;-1:-1:-1;8220:9:1;;8067:168::o;8240:217::-;8280:1;8306;8296:132;;8350:10;8345:3;8341:20;8338:1;8331:31;8385:4;8382:1;8375:15;8413:4;8410:1;8403:15;8296:132;-1:-1:-1;8442:9:1;;8240:217::o;9157:125::-;9197:4;9225:1;9222;9219:8;9216:34;;;9230:18;;:::i;:::-;-1:-1:-1;9267:9:1;;9157:125::o;9287:128::-;9327:3;9358:1;9354:6;9351:1;9348:13;9345:39;;;9364:18;;:::i;:::-;-1:-1:-1;9400:9:1;;9287:128::o;9552:251::-;9622:6;9675:2;9663:9;9654:7;9650:23;9646:32;9643:52;;;9691:1;9688;9681:12;9643:52;9723:9;9717:16;9742:31;9767:5;9742:31;:::i;9808:127::-;9869:10;9864:3;9860:20;9857:1;9850:31;9900:4;9897:1;9890:15;9924:4;9921:1;9914:15;9940:461;9993:3;10031:5;10025:12;10058:6;10053:3;10046:19;10084:4;10113:2;10108:3;10104:12;10097:19;;10150:2;10143:5;10139:14;10171:1;10181:195;10195:6;10192:1;10189:13;10181:195;;;10260:13;;-1:-1:-1;;;;;10256:39:1;10244:52;;10316:12;;;;10351:15;;;;10292:1;10210:9;10181:195;;;-1:-1:-1;10392:3:1;;9940:461;-1:-1:-1;;;;;9940:461:1:o;10406:510::-;10677:6;10666:9;10659:25;10720:3;10715:2;10704:9;10700:18;10693:31;10640:4;10741:57;10793:3;10782:9;10778:19;10770:6;10741:57;:::i;:::-;-1:-1:-1;;;;;10834:32:1;;;;10829:2;10814:18;;10807:60;-1:-1:-1;10898:2:1;10883:18;10876:34;10733:65;10406:510;-1:-1:-1;;10406:510:1:o;10921:422::-;11010:1;11053:5;11010:1;11067:270;11088:7;11078:8;11075:21;11067:270;;;11147:4;11143:1;11139:6;11135:17;11129:4;11126:27;11123:53;;;11156:18;;:::i;:::-;11206:7;11196:8;11192:22;11189:55;;;11226:16;;;;11189:55;11305:22;;;;11265:15;;;;11067:270;;;11071:3;10921:422;;;;;:::o;11348:806::-;11397:5;11427:8;11417:80;;-1:-1:-1;11468:1:1;11482:5;;11417:80;11516:4;11506:76;;-1:-1:-1;11553:1:1;11567:5;;11506:76;11598:4;11616:1;11611:59;;;;11684:1;11679:130;;;;11591:218;;11611:59;11641:1;11632:10;;11655:5;;;11679:130;11716:3;11706:8;11703:17;11700:43;;;11723:18;;:::i;:::-;-1:-1:-1;;11779:1:1;11765:16;;11794:5;;11591:218;;11893:2;11883:8;11880:16;11874:3;11868:4;11865:13;11861:36;11855:2;11845:8;11842:16;11837:2;11831:4;11828:12;11824:35;11821:77;11818:159;;;-1:-1:-1;11930:19:1;;;11962:5;;11818:159;12009:34;12034:8;12028:4;12009:34;:::i;:::-;12079:6;12075:1;12071:6;12067:19;12058:7;12055:32;12052:58;;;12090:18;;:::i;:::-;12128:20;;11348:806;-1:-1:-1;;;11348:806:1:o;12159:140::-;12217:5;12246:47;12287:4;12277:8;12273:19;12267:4;12246:47;:::i;12304:135::-;12343:3;-1:-1:-1;;12364:17:1;;12361:43;;;12384:18;;:::i;:::-;-1:-1:-1;12431:1:1;12420:13;;12304:135::o;14287:245::-;14354:6;14407:2;14395:9;14386:7;14382:23;14378:32;14375:52;;;14423:1;14420;14413:12;14375:52;14455:9;14449:16;14474:28;14496:5;14474:28;:::i;15289:582::-;15588:6;15577:9;15570:25;15631:6;15626:2;15615:9;15611:18;15604:34;15674:3;15669:2;15658:9;15654:18;15647:31;15551:4;15695:57;15747:3;15736:9;15732:19;15724:6;15695:57;:::i;:::-;-1:-1:-1;;;;;15788:32:1;;;;15783:2;15768:18;;15761:60;-1:-1:-1;15852:3:1;15837:19;15830:35;15687:65;15289:582;-1:-1:-1;;;15289:582:1:o;16488:306::-;16576:6;16584;16592;16645:2;16633:9;16624:7;16620:23;16616:32;16613:52;;;16661:1;16658;16651:12;16613:52;16690:9;16684:16;16674:26;;16740:2;16729:9;16725:18;16719:25;16709:35;;16784:2;16773:9;16769:18;16763:25;16753:35;;16488:306;;;;;:::o

Swarm Source

ipfs://fd949371c1d5c80b14e46a7cdec87c6604f2d087d6151f9deaf4f928376903db
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.