ETH Price: $3,240.29 (+2.19%)
Gas: 1 Gwei

Token

Blastables (BLST)
 

Overview

Max Total Supply

1,000,000,000 BLST

Holders

46

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.389639316144102418 BLST

Value
$0.00
0x5A6Ef9D80379E91f76d95Ebe14b2749d9CA7fB50
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:
BLST

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-12-08
*/

/* SPDX-License-Identifier: UNLICENSED */

/**                             
Blastables
On-chain minesweeper-style gambling.

https://blastables.io
https://t.me/blastablesgame
https://twitter.com/BlastablesGame
**/


// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount) external returns (bool);
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @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.
 */
abstract 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() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: Blastables/token.sol



/**                             
Blastables
On-chain minesweeper-style gambling.

https://blastables.io
https://t.me/blastablesgame
https://twitter.com/BlastablesGame
**/

pragma solidity ^0.8.17;



library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

// Uniswap Pair

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

// Uniswap Router

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

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

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

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

abstract contract Blastables {
    address public marketingWallet = 0x6f6c7e97697486E733efDCBC4F9622E077acBFb2;
    address public treasuryWallet = 0x6f6c7e97697486E733efDCBC4F9622E077acBFb2;

    string constant _name = "Blastables";
    string constant _symbol = "BLST";
    uint8 constant _decimals = 18;

    uint256 _totalSupply = 1 * 10**9 * 10**_decimals;
    uint256 public _maxTxAmount = (_totalSupply * 10) / 1000;
    uint256 public _maxWalletToken = (_totalSupply * 20) / 1000;
    uint256 public buyFee             = 40;
    uint256 public buyTotalFee        = buyFee;
    uint256 public swapLpFee          = 1;
    uint256 public swapMarketing      = 38;
    uint256 public swapTreasuryFee    = 1;
    uint256 public swapTotalFee       = swapMarketing + swapLpFee + swapTreasuryFee;
    uint256 public transFee           = 0;
    uint256 public feeDenominator     = 100;
}

contract BLST is Blastables, IERC20, Ownable {
    using SafeMath for uint256;

    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;
    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) isMaxExempt;
    mapping (address => bool) isTimelockExempt;

    address public autoLiquidityReceiver;

    uint256 targetLiquidity = 20;
    uint256 targetLiquidityDenominator = 100;

    IUniswapV2Router02 public immutable contractRouter;
    address public immutable uniswapV2Pair;

    bool public tradingOpen = false;

    bool public buyCooldownEnabled = false;
    uint8 public cooldownTimerInterval = 10;
    mapping (address => uint) private cooldownTimer;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply * 50 / 10000;
    uint256 public swapAmount = _totalSupply * 30 / 10000;

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

    constructor () {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //Mainnet & Testnet ETH
         // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        contractRouter = _uniswapV2Router;

        _allowances[address(this)][address(contractRouter)] = type(uint256).max;

        isFeeExempt[msg.sender] = true;
        isTxLimitExempt[msg.sender] = true;
        isMaxExempt[msg.sender] = true;

        isTimelockExempt[msg.sender] = true;
        isTimelockExempt[DEAD] = true;
        isTimelockExempt[address(this)] = true;

        isFeeExempt[marketingWallet] = true;
        isMaxExempt[marketingWallet] = true;
        isTxLimitExempt[marketingWallet] = true;

        autoLiquidityReceiver = msg.sender;

        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _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 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].sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

    function setMaxWallet(uint256 maxWalletPercent) external onlyOwner() {
        _maxWalletToken = maxWalletPercent;
    }

    function setMaxTx(uint256 maxTxPercent) external onlyOwner() {
        _maxTxAmount = maxTxPercent;
    }

    function setTxLimit(uint256 amount) external onlyOwner() {
        _maxTxAmount = amount;
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        if(sender != owner() && recipient != owner()){
            require(tradingOpen,"Trading not open yet");
        }

        bool inSell = (recipient == uniswapV2Pair);
        bool inTransfer = (recipient != uniswapV2Pair && sender != uniswapV2Pair);

        if (recipient != address(this) && 
            recipient != address(DEAD) && 
            recipient != uniswapV2Pair && 
            recipient != marketingWallet && 
            recipient != treasuryWallet && 
            recipient != autoLiquidityReceiver
        ){
            uint256 heldTokens = balanceOf(recipient);
            if(!isMaxExempt[recipient]) {
                require((heldTokens + amount) <= _maxWalletToken,"Total Holding is currently limited, you can not buy that much.");
            }
        }

        if (sender == uniswapV2Pair &&
            buyCooldownEnabled &&
            !isTimelockExempt[recipient]
        ){
            require(cooldownTimer[recipient] < block.timestamp,"Please wait for 1min between two buys");
            cooldownTimer[recipient] = block.timestamp + cooldownTimerInterval;
        }

        if(!isTxLimitExempt[recipient]) {
            checkTxLimit(sender, amount);
        }

        //Exchange tokens
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

        uint256 amountReceived = amount;

        if(inTransfer) {
            if(transFee > 0) {
                amountReceived = takeTransferFee(sender, amount);
            }
        } else {
            amountReceived = shouldTakeFee(sender) ? takeFee(sender, amount, inSell) : amount;
            
            if(shouldSwapBack()){ swapBack(); }
        }

        _balances[recipient] = _balances[recipient].add(amountReceived);

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

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    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 takeTransferFee(address sender, uint256 amount) internal returns (uint256) {

        uint256 feeToTake = transFee;
        uint256 feeAmount = amount.mul(feeToTake).mul(100).div(feeDenominator * 100);
        
        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

    function takeFee(address sender, uint256 amount, bool isSell) internal returns (uint256) {
        uint256 feeToTake;
        feeToTake = isSell ? swapTotalFee : buyTotalFee;

        uint256 feeAmount = amount.mul(feeToTake).mul(100).div(feeDenominator * 100);
        
        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

    function shouldSwapBack() internal view returns (bool) {
        return msg.sender != uniswapV2Pair
        && !inSwap
        && _balances[address(this)] >= swapThreshold;
    }

    function clearStuckBalance(uint256 amountPercentage) external {
        uint256 amountETH = address(this).balance;
        payable(marketingWallet).transfer(amountETH * amountPercentage / 100);
    }

    // switch Trading
    function tradingStatus(bool _status) public onlyOwner {
        tradingOpen = _status;
    }

    function feeOnTransfer(uint256 fee) external onlyOwner() {
        transFee = fee;
    }

    function feeOnSell(uint256 _newSwapLpFee, uint256 _newSwapMarketingFee, uint256 _newSwapTreasuryFee, uint256 _feeDenominator) external onlyOwner() {
        swapLpFee = _newSwapLpFee;
        swapMarketing = _newSwapMarketingFee;
        swapTreasuryFee = _newSwapTreasuryFee;
        swapTotalFee = _newSwapLpFee.add(_newSwapMarketingFee).add(_newSwapTreasuryFee);
        feeDenominator = _feeDenominator;
    }

    function feeOnBuy(uint256 buyTax) external onlyOwner() {
        buyTotalFee = buyTax;
    }

    function swapBack() internal swapping {
        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : swapLpFee;
        uint256 amountToLiquify = swapAmount.mul(dynamicLiquidityFee).div(swapTotalFee).div(2);
        uint256 amountToSwap = swapAmount.sub(amountToLiquify);

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

        uint256 balanceBefore = address(this).balance;

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

        uint256 amountETH = address(this).balance.sub(balanceBefore);

        uint256 totalETHFee = swapTotalFee.sub(dynamicLiquidityFee.div(2));

        uint256 amountETHLiquidity = amountETH.mul(swapLpFee).div(totalETHFee).div(2);
        uint256 amountETHMarketing = amountETH.mul(swapMarketing).div(totalETHFee);
        uint256 amountETHTreasury = amountETH.mul(swapTreasuryFee).div(totalETHFee);

        (bool tmpSuccess,) = payable(marketingWallet).call{value: amountETHMarketing, gas: 30000}("");
        (tmpSuccess,) = payable(treasuryWallet).call{value: amountETHTreasury, gas: 30000}("");

        // Supress warning msg
        tmpSuccess = false;

        if(amountToLiquify > 0){
            contractRouter.addLiquidityETH{value: amountETHLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountETHLiquidity, amountToLiquify);
        }
    }

    function triggerSwapBack() external onlyOwner {
        swapBack();
    }

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

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

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

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

    function setFeeReceivers(address _autoLiquidityReceiver, address _newMarketingWallet, address _newTreasuryWallet ) external onlyOwner() {

        isFeeExempt[treasuryWallet] = false;
        isFeeExempt[_newTreasuryWallet] = true;
        isFeeExempt[marketingWallet] = false;
        isFeeExempt[_newMarketingWallet] = true;

        isMaxExempt[_newMarketingWallet] = true;

        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingWallet = _newMarketingWallet;
        treasuryWallet = _newTreasuryWallet;
    }

    function setSwapThresholdAmount(uint256 _amount) external onlyOwner() {
        swapThreshold = _amount;
    }

    function setSwapAmount(uint256 _amount) external onlyOwner() {
        if(_amount > swapThreshold) {
            swapAmount = swapThreshold;
        } else {
            swapAmount = _amount;
        }        
    }

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

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

    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        return accuracy.mul(balanceOf(uniswapV2Pair).mul(2)).div(getCirculatingSupply());
    }

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

    /* Airdrop */
    function airDropCustom(address from, address[] calldata addresses, uint256[] calldata tokens) external onlyOwner {

        require(addresses.length < 501,"GAS Error: max airdrop limit is 500 addresses");
        require(addresses.length == tokens.length,"Mismatch between Address and token count");

        uint256 SCCC = 0;

        for(uint i=0; i < addresses.length; i++){
            SCCC = SCCC + tokens[i];
        }

        require(balanceOf(from) >= SCCC, "Not enough tokens in wallet");

        for(uint i=0; i < addresses.length; i++){
            _basicTransfer(from,addresses[i],tokens[i]);
        }
        
    }

    event AutoLiquify(uint256 amountETH, uint256 amountBOG);

}

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":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","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":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"airDropCustom","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":[{"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":[],"name":"buyCooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldownTimerInterval","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTax","type":"uint256"}],"name":"feeOnBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSwapLpFee","type":"uint256"},{"internalType":"uint256","name":"_newSwapMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_newSwapTreasuryFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"feeOnSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"feeOnTransfer","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":"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":"marketingWallet","outputs":[{"internalType":"address","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_newMarketingWallet","type":"address"},{"internalType":"address","name":"_newTreasuryWallet","type":"address"}],"name":"setFeeReceivers","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":"setIsMaxExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTimelockExempt","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":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletPercent","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapThresholdAmount","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":"amount","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapLpFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapMarketing","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":"swapTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTreasuryFee","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":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transFee","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"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"triggerSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405260008054736f6c7e97697486e733efdcbc4f9622e077acbfb26001600160a01b03199182168117909255600180549091169091179055620000486012600a62000596565b6200005890633b9aca00620005ae565b6002556103e8600254600a6200006f9190620005ae565b6200007b9190620005c8565b6003556103e86002546014620000929190620005ae565b6200009e9190620005c8565b6004556028600555600554600655600160075560266008556001600955600954600754600854620000d09190620005eb565b620000dc9190620005eb565b600a556000600b556064600c819055600e805461dead6001600160a01b031991821617909155600f8054909116905560146017556018556019805462ffffff1916620a0000179055601b805460ff191660011790556002546127109062000145906032620005ae565b620001519190620005c8565b601c55612710600254601e620001689190620005ae565b620001749190620005c8565b601d553480156200018457600080fd5b5062000190336200042f565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020e919062000601565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200025c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000282919062000601565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002d0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f6919062000601565b6001600160a01b0390811660a052818116608081905230600081815260116020908152604080832094835293815283822060001990553380835260128083528584208054600160ff1991821681179092556013808652888720805483168417905560148087528988208054841685179055601587528988208054841685179055600e548b1688528988208054841685179055978752888720805483168417905586548a168752928552878620805482168317905585548916865295845286852080548716821790558454909716845282528483208054909416909517909255601680546001600160a01b03191685179055600254848252601083528382208190559251928352917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3506200062c565b600d80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004d8578160001904821115620004bc57620004bc62000481565b80851615620004ca57918102915b93841c93908002906200049c565b509250929050565b600082620004f15750600162000590565b81620005005750600062000590565b8160018114620005195760028114620005245762000544565b600191505062000590565b60ff84111562000538576200053862000481565b50506001821b62000590565b5060208310610133831016604e8410600b841016171562000569575081810a62000590565b62000575838362000497565b80600019048211156200058c576200058c62000481565b0290505b92915050565b6000620005a760ff841683620004e0565b9392505050565b808202811582820484141762000590576200059062000481565b600082620005e657634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000590576200059062000481565b6000602082840312156200061457600080fd5b81516001600160a01b0381168114620005a757600080fd5b60805160a0516123be620006916000396000818161061701528181610fc1015281816112d10152818161130b01528181611372015281816114ab0152611ea501526000818161072a0152818161180c015281816118c60152611ac901526123be6000f3fe60806040526004361061036f5760003560e01c8063658d4b7f116101c6578063a9059cbb116100f7578063dd62ed3e11610095578063f2fde38b1161006f578063f2fde38b146109f9578063f53fd58414610a19578063f84ba65d14610a2f578063ffb54a9914610a4f57600080fd5b8063dd62ed3e1461097d578063e53c30b0146109c3578063e632313c146109d957600080fd5b8063cf703bb9116100d1578063cf703bb9146108fd578063d51ed1c81461091d578063d7c010321461093d578063dd395c631461095d57600080fd5b8063a9059cbb146108bd578063bc33718214610699578063ca33e64c146108dd57600080fd5b806375f0a87411610164578063893d20e81161013e578063893d20e81461083d5780638da5cb5b146108525780638e8aaafa1461087057806395d89b411461089057600080fd5b806375f0a874146107f157806378109e54146108115780637d1db4a51461082757600080fd5b806370a08231116101a057806370a0823114610766578063713e4ae51461079c578063715018a6146107bc578063722b62ad146107d157600080fd5b8063658d4b7f146106f857806367ac77b4146107185780636ddd17131461074c57600080fd5b80632e8fa821116102a057806349bd5a5e1161023e578063571ac8b011610218578063571ac8b0146106795780635c85974f146106995780635d0044ca146106b9578063617fe0ed146106d957600080fd5b806349bd5a5e146106055780634dd0e4d31461063957806350db71fb1461065957600080fd5b8063456d401a1161027a578063456d401a1461058c5780634626402b146105a157806346e421a2146105d957806347062402146105ef57600080fd5b80632e8fa8211461053e578063313ce567146105545780633705b3921461057657600080fd5b806318160ddd1161030d578063201e7991116102e7578063201e7991146104c957806323b872dd146104e957806329e04b4a146105095780632b112e491461052957600080fd5b806318160ddd1461047e5780631da1db5e146104935780631e25dc54146104b357600080fd5b8063095ea7b311610349578063095ea7b3146103f65780630d295980146104265780631161ae3914610448578063180b0d7e1461046857600080fd5b8063026f7d151461037b5780630445b667146103a457806306fdde03146103ba57600080fd5b3661037657005b600080fd5b34801561038757600080fd5b5061039160085481565b6040519081526020015b60405180910390f35b3480156103b057600080fd5b50610391601c5481565b3480156103c657600080fd5b5060408051808201909152600a815269426c61737461626c657360b01b60208201525b60405161039b9190611ef6565b34801561040257600080fd5b50610416610411366004611f59565b610a69565b604051901515815260200161039b565b34801561043257600080fd5b50610446610441366004611f9a565b610ad6565b005b34801561045457600080fd5b50610416610463366004611fb5565b610af1565b34801561047457600080fd5b50610391600c5481565b34801561048a57600080fd5b50600254610391565b34801561049f57600080fd5b506104466104ae366004611fd7565b610b05565b3480156104bf57600080fd5b50610391600b5481565b3480156104d557600080fd5b506104466104e4366004611fb5565b610b59565b3480156104f557600080fd5b50610416610504366004611ff0565b610b6c565b34801561051557600080fd5b50610446610524366004611fd7565b610c2e565b34801561053557600080fd5b50610391610c3b565b34801561054a57600080fd5b50610391601d5481565b34801561056057600080fd5b5060125b60405160ff909116815260200161039b565b34801561058257600080fd5b5061039160065481565b34801561059857600080fd5b50610446610c8d565b3480156105ad57600080fd5b506001546105c1906001600160a01b031681565b6040516001600160a01b03909116815260200161039b565b3480156105e557600080fd5b5061039160075481565b3480156105fb57600080fd5b5061039160055481565b34801561061157600080fd5b506105c17f000000000000000000000000000000000000000000000000000000000000000081565b34801561064557600080fd5b50610446610654366004611fd7565b610c9f565b34801561066557600080fd5b50610446610674366004612031565b610cac565b34801561068557600080fd5b50610416610694366004612066565b610cdf565b3480156106a557600080fd5b506104466106b4366004611fd7565b610ced565b3480156106c557600080fd5b506104466106d4366004611fd7565b610cfa565b3480156106e557600080fd5b5060195461041690610100900460ff1681565b34801561070457600080fd5b50610446610713366004612031565b610d07565b34801561072457600080fd5b506105c17f000000000000000000000000000000000000000000000000000000000000000081565b34801561075857600080fd5b50601b546104169060ff1681565b34801561077257600080fd5b50610391610781366004612066565b6001600160a01b031660009081526010602052604090205490565b3480156107a857600080fd5b506104466107b73660046120cf565b610d3a565b3480156107c857600080fd5b50610446610f31565b3480156107dd57600080fd5b506019546105649062010000900460ff1681565b3480156107fd57600080fd5b506000546105c1906001600160a01b031681565b34801561081d57600080fd5b5061039160045481565b34801561083357600080fd5b5061039160035481565b34801561084957600080fd5b506105c1610f43565b34801561085e57600080fd5b50600d546001600160a01b03166105c1565b34801561087c57600080fd5b5061044661088b366004612152565b610f57565b34801561089c57600080fd5b50604080518082019091526004815263109314d560e21b60208201526103e9565b3480156108c957600080fd5b506104166108d8366004611f59565b610f8d565b3480156108e957600080fd5b506016546105c1906001600160a01b031681565b34801561090957600080fd5b50610446610918366004611fd7565b610f9a565b34801561092957600080fd5b50610391610938366004611fd7565b610fa7565b34801561094957600080fd5b50610446610958366004612184565b61100e565b34801561096957600080fd5b50610446610978366004612031565b6110af565b34801561098957600080fd5b506103916109983660046121cf565b6001600160a01b03918216600090815260116020908152604080832093909416825291909152205490565b3480156109cf57600080fd5b50610391600a5481565b3480156109e557600080fd5b506104466109f4366004611fd7565b6110e2565b348015610a0557600080fd5b50610446610a14366004612066565b611106565b348015610a2557600080fd5b5061039160095481565b348015610a3b57600080fd5b50610446610a4a366004612031565b61117c565b348015610a5b57600080fd5b506019546104169060ff1681565b3360008181526011602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ac49086815260200190565b60405180910390a35060015b92915050565b610ade6111af565b6019805460ff1916911515919091179055565b600082610afd83610fa7565b119392505050565b60005447906001600160a01b03166108fc6064610b22858561221e565b610b2c9190612235565b6040518115909202916000818181858888f19350505050158015610b54573d6000803e3d6000fd5b505050565b610b616111af565b601791909155601855565b6001600160a01b038316600090815260116020908152604080832033845290915281205460001914610c19576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152601182528381203382529091529190912054610bf4918490611209565b6001600160a01b03851660009081526011602090815260408083203384529091529020555b610c24848484611235565b90505b9392505050565b610c366111af565b601c55565b600f546001600160a01b0316600090815260106020526040812054610c8890600e546001600160a01b0316600090815260106020526040902054610c829060025490611739565b90611739565b905090565b610c956111af565b610c9d611745565b565b610ca76111af565b600655565b610cb46111af565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b6000610ad082600019610a69565b610cf56111af565b600355565b610d026111af565b600455565b610d0f6111af565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b610d426111af565b6101f58310610dae5760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b60648201526084015b60405180910390fd5b828114610e0e5760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610da5565b6000805b84811015610e5257838382818110610e2c57610e2c612257565b9050602002013582610e3e919061226d565b915080610e4a81612280565b915050610e12565b5080610e73876001600160a01b031660009081526010602052604090205490565b1015610ec15760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610da5565b60005b84811015610f2857610f1587878784818110610ee257610ee2612257565b9050602002016020810190610ef79190612066565b868685818110610f0957610f09612257565b90506020020135611b8e565b5080610f2081612280565b915050610ec4565b50505050505050565b610f396111af565b610c9d6000611c62565b6000610c88600d546001600160a01b031690565b610f5f6111af565b600784905560088390556009829055610f8282610f7c8686611cb4565b90611cb4565b600a55600c55505050565b6000610c27338484611235565b610fa26111af565b600b55565b6000610ad0610fb4610c3b565b6110086110016002610ffb7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660009081526010602052604090205490565b90611cc0565b8590611cc0565b90611ccc565b6110166111af565b600180546001600160a01b039081166000908152601260209081526040808320805460ff1990811690915595841680845281842080548816871790558354851684528184208054881690559684168084528184208054881687179055601490925282208054909516841790945560168054969092166001600160a01b031996871617909155805485169092179091558054909216179055565b6110b76111af565b6001600160a01b03919091166000908152601460205260409020805460ff1916911515919091179055565b6110ea6111af565b601c548111156110fd57601c54601d5550565b601d8190555b50565b61110e6111af565b6001600160a01b0381166111735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610da5565b61110381611c62565b6111846111af565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b600d546001600160a01b03163314610c9d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610da5565b6000818484111561122d5760405162461bcd60e51b8152600401610da59190611ef6565b505050900390565b601e5460009060ff16156112555761124e848484611b8e565b9050610c27565b600d546001600160a01b038581169116148015906112815750600d546001600160a01b03848116911614155b156112cf5760195460ff166112cf5760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610da5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811690841614600081158261134057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031614155b90506001600160a01b03851630148015906113695750600e546001600160a01b03868116911614155b80156113a757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b80156113c157506000546001600160a01b03868116911614155b80156113db57506001546001600160a01b03868116911614155b80156113f557506016546001600160a01b03868116911614155b156114a9576001600160a01b03851660009081526010602090815260408083205460149092529091205460ff166114a757600454611433868361226d565b11156114a75760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610da5565b505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b03161480156114f15750601954610100900460ff165b801561151657506001600160a01b03851660009081526015602052604090205460ff16155b156115c0576001600160a01b0385166000908152601a602052604090205442116115905760405162461bcd60e51b815260206004820152602560248201527f506c65617365207761697420666f7220316d696e206265747765656e2074776f604482015264206275797360d81b6064820152608401610da5565b6019546115a69062010000900460ff164261226d565b6001600160a01b0386166000908152601a60205260409020555b6001600160a01b03851660009081526013602052604090205460ff166115ea576115ea8685611cd8565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03891660009081526010909152919091205461163c918690611209565b6001600160a01b03871660009081526010602052604090205583811561167657600b54156116715761166e8786611d45565b90505b6116bf565b6001600160a01b03871660009081526012602052604090205460ff161561169d57846116a8565b6116a8878685611de7565b90506116b2611e98565b156116bf576116bf611745565b6001600160a01b0386166000908152601060205260409020546116e29082611cb4565b6001600160a01b038088166000818152601060205260409081902093909355915190891690600080516020612369833981519152906117249085815260200190565b60405180910390a35060019695505050505050565b6000610c278284612299565b601e805460ff1916600117905560175460185460009161176491610af1565b61177057600754611773565b60005b905060006117976002611008600a5461100886601d54611cc090919063ffffffff16565b905060006117b082601d5461173990919063ffffffff16565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106117ea576117ea612257565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611868573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188c91906122ac565b8160018151811061189f5761189f612257565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b815247917f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906119049086906000908790309042906004016122c9565b600060405180830381600087803b15801561191e57600080fd5b505af1158015611932573d6000803e3d6000fd5b50505050600061194b824761173990919063ffffffff16565b9050600061196661195d886002611ccc565b600a5490611739565b9050600061198860026110088461100860075488611cc090919063ffffffff16565b905060006119a58361100860085487611cc090919063ffffffff16565b905060006119c28461100860095488611cc090919063ffffffff16565b6000805460405192935090916001600160a01b039091169061753090859084818181858888f193505050503d8060008114611a19576040519150601f19603f3d011682016040523d82523d6000602084013e611a1e565b606091505b50506001546040519192506001600160a01b0316906175309084906000818181858888f193505050503d8060008114611a73576040519150601f19603f3d011682016040523d82523d6000602084013e611a78565b606091505b5060009250508a159050611b775760165460405163f305d71960e01b8152306004820152602481018c905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990869060c40160606040518083038185885af1158015611b15573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611b3a919061233a565b505060408051868152602081018d90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b5050601e805460ff19169055505050505050505050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152601090915291822054611bdf918490611209565b6001600160a01b038086166000908152601060205260408082209390935590851681522054611c0e9083611cb4565b6001600160a01b03808516600081815260106020526040908190209390935591519086169060008051602061236983398151915290611c509086815260200190565b60405180910390a35060019392505050565b600d80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000610c27828461226d565b6000610c27828461221e565b6000610c278284612235565b60035481111580611d0157506001600160a01b03821660009081526013602052604090205460ff165b611d415760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610da5565b5050565b600080600b5490506000611d70600c546064611d61919061221e565b6110086064610ffb8887611cc0565b30600090815260106020526040902054909150611d8d9082611cb4565b30600081815260106020526040908190209290925590516001600160a01b0387169060008051602061236983398151915290611dcc9085815260200190565b60405180910390a3611dde8482611739565b95945050505050565b60008082611df757600654611dfb565b600a545b90506000611e20600c546064611e11919061221e565b6110086064610ffb8987611cc0565b30600090815260106020526040902054909150611e3d9082611cb4565b30600081815260106020526040908190209290925590516001600160a01b0388169060008051602061236983398151915290611e7c9085815260200190565b60405180910390a3611e8e8582611739565b9695505050505050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590611ed65750601e5460ff16155b8015610c88575050601c5430600090815260106020526040902054101590565b600060208083528351808285015260005b81811015611f2357858101830151858201604001528201611f07565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461110357600080fd5b60008060408385031215611f6c57600080fd5b8235611f7781611f44565b946020939093013593505050565b80358015158114611f9557600080fd5b919050565b600060208284031215611fac57600080fd5b610c2782611f85565b60008060408385031215611fc857600080fd5b50508035926020909101359150565b600060208284031215611fe957600080fd5b5035919050565b60008060006060848603121561200557600080fd5b833561201081611f44565b9250602084013561202081611f44565b929592945050506040919091013590565b6000806040838503121561204457600080fd5b823561204f81611f44565b915061205d60208401611f85565b90509250929050565b60006020828403121561207857600080fd5b8135610c2781611f44565b60008083601f84011261209557600080fd5b50813567ffffffffffffffff8111156120ad57600080fd5b6020830191508360208260051b85010111156120c857600080fd5b9250929050565b6000806000806000606086880312156120e757600080fd5b85356120f281611f44565b9450602086013567ffffffffffffffff8082111561210f57600080fd5b61211b89838a01612083565b9096509450604088013591508082111561213457600080fd5b5061214188828901612083565b969995985093965092949392505050565b6000806000806080858703121561216857600080fd5b5050823594602084013594506040840135936060013592509050565b60008060006060848603121561219957600080fd5b83356121a481611f44565b925060208401356121b481611f44565b915060408401356121c481611f44565b809150509250925092565b600080604083850312156121e257600080fd5b82356121ed81611f44565b915060208301356121fd81611f44565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610ad057610ad0612208565b60008261225257634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b80820180821115610ad057610ad0612208565b60006001820161229257612292612208565b5060010190565b81810381811115610ad057610ad0612208565b6000602082840312156122be57600080fd5b8151610c2781611f44565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123195784516001600160a01b0316835293830193918301916001016122f4565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561234f57600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220a58ada14a4b0a1d62817b73fe13c1f881a55f3e351bed2d11eba8f21ee47b81464736f6c63430008110033

Deployed Bytecode

0x60806040526004361061036f5760003560e01c8063658d4b7f116101c6578063a9059cbb116100f7578063dd62ed3e11610095578063f2fde38b1161006f578063f2fde38b146109f9578063f53fd58414610a19578063f84ba65d14610a2f578063ffb54a9914610a4f57600080fd5b8063dd62ed3e1461097d578063e53c30b0146109c3578063e632313c146109d957600080fd5b8063cf703bb9116100d1578063cf703bb9146108fd578063d51ed1c81461091d578063d7c010321461093d578063dd395c631461095d57600080fd5b8063a9059cbb146108bd578063bc33718214610699578063ca33e64c146108dd57600080fd5b806375f0a87411610164578063893d20e81161013e578063893d20e81461083d5780638da5cb5b146108525780638e8aaafa1461087057806395d89b411461089057600080fd5b806375f0a874146107f157806378109e54146108115780637d1db4a51461082757600080fd5b806370a08231116101a057806370a0823114610766578063713e4ae51461079c578063715018a6146107bc578063722b62ad146107d157600080fd5b8063658d4b7f146106f857806367ac77b4146107185780636ddd17131461074c57600080fd5b80632e8fa821116102a057806349bd5a5e1161023e578063571ac8b011610218578063571ac8b0146106795780635c85974f146106995780635d0044ca146106b9578063617fe0ed146106d957600080fd5b806349bd5a5e146106055780634dd0e4d31461063957806350db71fb1461065957600080fd5b8063456d401a1161027a578063456d401a1461058c5780634626402b146105a157806346e421a2146105d957806347062402146105ef57600080fd5b80632e8fa8211461053e578063313ce567146105545780633705b3921461057657600080fd5b806318160ddd1161030d578063201e7991116102e7578063201e7991146104c957806323b872dd146104e957806329e04b4a146105095780632b112e491461052957600080fd5b806318160ddd1461047e5780631da1db5e146104935780631e25dc54146104b357600080fd5b8063095ea7b311610349578063095ea7b3146103f65780630d295980146104265780631161ae3914610448578063180b0d7e1461046857600080fd5b8063026f7d151461037b5780630445b667146103a457806306fdde03146103ba57600080fd5b3661037657005b600080fd5b34801561038757600080fd5b5061039160085481565b6040519081526020015b60405180910390f35b3480156103b057600080fd5b50610391601c5481565b3480156103c657600080fd5b5060408051808201909152600a815269426c61737461626c657360b01b60208201525b60405161039b9190611ef6565b34801561040257600080fd5b50610416610411366004611f59565b610a69565b604051901515815260200161039b565b34801561043257600080fd5b50610446610441366004611f9a565b610ad6565b005b34801561045457600080fd5b50610416610463366004611fb5565b610af1565b34801561047457600080fd5b50610391600c5481565b34801561048a57600080fd5b50600254610391565b34801561049f57600080fd5b506104466104ae366004611fd7565b610b05565b3480156104bf57600080fd5b50610391600b5481565b3480156104d557600080fd5b506104466104e4366004611fb5565b610b59565b3480156104f557600080fd5b50610416610504366004611ff0565b610b6c565b34801561051557600080fd5b50610446610524366004611fd7565b610c2e565b34801561053557600080fd5b50610391610c3b565b34801561054a57600080fd5b50610391601d5481565b34801561056057600080fd5b5060125b60405160ff909116815260200161039b565b34801561058257600080fd5b5061039160065481565b34801561059857600080fd5b50610446610c8d565b3480156105ad57600080fd5b506001546105c1906001600160a01b031681565b6040516001600160a01b03909116815260200161039b565b3480156105e557600080fd5b5061039160075481565b3480156105fb57600080fd5b5061039160055481565b34801561061157600080fd5b506105c17f000000000000000000000000f303b404e49d1de6c74c316f2fd77ea05b3ae9bc81565b34801561064557600080fd5b50610446610654366004611fd7565b610c9f565b34801561066557600080fd5b50610446610674366004612031565b610cac565b34801561068557600080fd5b50610416610694366004612066565b610cdf565b3480156106a557600080fd5b506104466106b4366004611fd7565b610ced565b3480156106c557600080fd5b506104466106d4366004611fd7565b610cfa565b3480156106e557600080fd5b5060195461041690610100900460ff1681565b34801561070457600080fd5b50610446610713366004612031565b610d07565b34801561072457600080fd5b506105c17f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561075857600080fd5b50601b546104169060ff1681565b34801561077257600080fd5b50610391610781366004612066565b6001600160a01b031660009081526010602052604090205490565b3480156107a857600080fd5b506104466107b73660046120cf565b610d3a565b3480156107c857600080fd5b50610446610f31565b3480156107dd57600080fd5b506019546105649062010000900460ff1681565b3480156107fd57600080fd5b506000546105c1906001600160a01b031681565b34801561081d57600080fd5b5061039160045481565b34801561083357600080fd5b5061039160035481565b34801561084957600080fd5b506105c1610f43565b34801561085e57600080fd5b50600d546001600160a01b03166105c1565b34801561087c57600080fd5b5061044661088b366004612152565b610f57565b34801561089c57600080fd5b50604080518082019091526004815263109314d560e21b60208201526103e9565b3480156108c957600080fd5b506104166108d8366004611f59565b610f8d565b3480156108e957600080fd5b506016546105c1906001600160a01b031681565b34801561090957600080fd5b50610446610918366004611fd7565b610f9a565b34801561092957600080fd5b50610391610938366004611fd7565b610fa7565b34801561094957600080fd5b50610446610958366004612184565b61100e565b34801561096957600080fd5b50610446610978366004612031565b6110af565b34801561098957600080fd5b506103916109983660046121cf565b6001600160a01b03918216600090815260116020908152604080832093909416825291909152205490565b3480156109cf57600080fd5b50610391600a5481565b3480156109e557600080fd5b506104466109f4366004611fd7565b6110e2565b348015610a0557600080fd5b50610446610a14366004612066565b611106565b348015610a2557600080fd5b5061039160095481565b348015610a3b57600080fd5b50610446610a4a366004612031565b61117c565b348015610a5b57600080fd5b506019546104169060ff1681565b3360008181526011602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ac49086815260200190565b60405180910390a35060015b92915050565b610ade6111af565b6019805460ff1916911515919091179055565b600082610afd83610fa7565b119392505050565b60005447906001600160a01b03166108fc6064610b22858561221e565b610b2c9190612235565b6040518115909202916000818181858888f19350505050158015610b54573d6000803e3d6000fd5b505050565b610b616111af565b601791909155601855565b6001600160a01b038316600090815260116020908152604080832033845290915281205460001914610c19576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152601182528381203382529091529190912054610bf4918490611209565b6001600160a01b03851660009081526011602090815260408083203384529091529020555b610c24848484611235565b90505b9392505050565b610c366111af565b601c55565b600f546001600160a01b0316600090815260106020526040812054610c8890600e546001600160a01b0316600090815260106020526040902054610c829060025490611739565b90611739565b905090565b610c956111af565b610c9d611745565b565b610ca76111af565b600655565b610cb46111af565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b6000610ad082600019610a69565b610cf56111af565b600355565b610d026111af565b600455565b610d0f6111af565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b610d426111af565b6101f58310610dae5760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b60648201526084015b60405180910390fd5b828114610e0e5760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610da5565b6000805b84811015610e5257838382818110610e2c57610e2c612257565b9050602002013582610e3e919061226d565b915080610e4a81612280565b915050610e12565b5080610e73876001600160a01b031660009081526010602052604090205490565b1015610ec15760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610da5565b60005b84811015610f2857610f1587878784818110610ee257610ee2612257565b9050602002016020810190610ef79190612066565b868685818110610f0957610f09612257565b90506020020135611b8e565b5080610f2081612280565b915050610ec4565b50505050505050565b610f396111af565b610c9d6000611c62565b6000610c88600d546001600160a01b031690565b610f5f6111af565b600784905560088390556009829055610f8282610f7c8686611cb4565b90611cb4565b600a55600c55505050565b6000610c27338484611235565b610fa26111af565b600b55565b6000610ad0610fb4610c3b565b6110086110016002610ffb7f000000000000000000000000f303b404e49d1de6c74c316f2fd77ea05b3ae9bc6001600160a01b031660009081526010602052604090205490565b90611cc0565b8590611cc0565b90611ccc565b6110166111af565b600180546001600160a01b039081166000908152601260209081526040808320805460ff1990811690915595841680845281842080548816871790558354851684528184208054881690559684168084528184208054881687179055601490925282208054909516841790945560168054969092166001600160a01b031996871617909155805485169092179091558054909216179055565b6110b76111af565b6001600160a01b03919091166000908152601460205260409020805460ff1916911515919091179055565b6110ea6111af565b601c548111156110fd57601c54601d5550565b601d8190555b50565b61110e6111af565b6001600160a01b0381166111735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610da5565b61110381611c62565b6111846111af565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b600d546001600160a01b03163314610c9d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610da5565b6000818484111561122d5760405162461bcd60e51b8152600401610da59190611ef6565b505050900390565b601e5460009060ff16156112555761124e848484611b8e565b9050610c27565b600d546001600160a01b038581169116148015906112815750600d546001600160a01b03848116911614155b156112cf5760195460ff166112cf5760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610da5565b7f000000000000000000000000f303b404e49d1de6c74c316f2fd77ea05b3ae9bc6001600160a01b0390811690841614600081158261134057507f000000000000000000000000f303b404e49d1de6c74c316f2fd77ea05b3ae9bc6001600160a01b0316866001600160a01b031614155b90506001600160a01b03851630148015906113695750600e546001600160a01b03868116911614155b80156113a757507f000000000000000000000000f303b404e49d1de6c74c316f2fd77ea05b3ae9bc6001600160a01b0316856001600160a01b031614155b80156113c157506000546001600160a01b03868116911614155b80156113db57506001546001600160a01b03868116911614155b80156113f557506016546001600160a01b03868116911614155b156114a9576001600160a01b03851660009081526010602090815260408083205460149092529091205460ff166114a757600454611433868361226d565b11156114a75760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610da5565b505b7f000000000000000000000000f303b404e49d1de6c74c316f2fd77ea05b3ae9bc6001600160a01b0316866001600160a01b03161480156114f15750601954610100900460ff165b801561151657506001600160a01b03851660009081526015602052604090205460ff16155b156115c0576001600160a01b0385166000908152601a602052604090205442116115905760405162461bcd60e51b815260206004820152602560248201527f506c65617365207761697420666f7220316d696e206265747765656e2074776f604482015264206275797360d81b6064820152608401610da5565b6019546115a69062010000900460ff164261226d565b6001600160a01b0386166000908152601a60205260409020555b6001600160a01b03851660009081526013602052604090205460ff166115ea576115ea8685611cd8565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03891660009081526010909152919091205461163c918690611209565b6001600160a01b03871660009081526010602052604090205583811561167657600b54156116715761166e8786611d45565b90505b6116bf565b6001600160a01b03871660009081526012602052604090205460ff161561169d57846116a8565b6116a8878685611de7565b90506116b2611e98565b156116bf576116bf611745565b6001600160a01b0386166000908152601060205260409020546116e29082611cb4565b6001600160a01b038088166000818152601060205260409081902093909355915190891690600080516020612369833981519152906117249085815260200190565b60405180910390a35060019695505050505050565b6000610c278284612299565b601e805460ff1916600117905560175460185460009161176491610af1565b61177057600754611773565b60005b905060006117976002611008600a5461100886601d54611cc090919063ffffffff16565b905060006117b082601d5461173990919063ffffffff16565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106117ea576117ea612257565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611868573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188c91906122ac565b8160018151811061189f5761189f612257565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b815247917f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906119049086906000908790309042906004016122c9565b600060405180830381600087803b15801561191e57600080fd5b505af1158015611932573d6000803e3d6000fd5b50505050600061194b824761173990919063ffffffff16565b9050600061196661195d886002611ccc565b600a5490611739565b9050600061198860026110088461100860075488611cc090919063ffffffff16565b905060006119a58361100860085487611cc090919063ffffffff16565b905060006119c28461100860095488611cc090919063ffffffff16565b6000805460405192935090916001600160a01b039091169061753090859084818181858888f193505050503d8060008114611a19576040519150601f19603f3d011682016040523d82523d6000602084013e611a1e565b606091505b50506001546040519192506001600160a01b0316906175309084906000818181858888f193505050503d8060008114611a73576040519150601f19603f3d011682016040523d82523d6000602084013e611a78565b606091505b5060009250508a159050611b775760165460405163f305d71960e01b8152306004820152602481018c905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990869060c40160606040518083038185885af1158015611b15573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611b3a919061233a565b505060408051868152602081018d90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b5050601e805460ff19169055505050505050505050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152601090915291822054611bdf918490611209565b6001600160a01b038086166000908152601060205260408082209390935590851681522054611c0e9083611cb4565b6001600160a01b03808516600081815260106020526040908190209390935591519086169060008051602061236983398151915290611c509086815260200190565b60405180910390a35060019392505050565b600d80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000610c27828461226d565b6000610c27828461221e565b6000610c278284612235565b60035481111580611d0157506001600160a01b03821660009081526013602052604090205460ff165b611d415760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610da5565b5050565b600080600b5490506000611d70600c546064611d61919061221e565b6110086064610ffb8887611cc0565b30600090815260106020526040902054909150611d8d9082611cb4565b30600081815260106020526040908190209290925590516001600160a01b0387169060008051602061236983398151915290611dcc9085815260200190565b60405180910390a3611dde8482611739565b95945050505050565b60008082611df757600654611dfb565b600a545b90506000611e20600c546064611e11919061221e565b6110086064610ffb8987611cc0565b30600090815260106020526040902054909150611e3d9082611cb4565b30600081815260106020526040908190209290925590516001600160a01b0388169060008051602061236983398151915290611e7c9085815260200190565b60405180910390a3611e8e8582611739565b9695505050505050565b6000336001600160a01b037f000000000000000000000000f303b404e49d1de6c74c316f2fd77ea05b3ae9bc1614801590611ed65750601e5460ff16155b8015610c88575050601c5430600090815260106020526040902054101590565b600060208083528351808285015260005b81811015611f2357858101830151858201604001528201611f07565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461110357600080fd5b60008060408385031215611f6c57600080fd5b8235611f7781611f44565b946020939093013593505050565b80358015158114611f9557600080fd5b919050565b600060208284031215611fac57600080fd5b610c2782611f85565b60008060408385031215611fc857600080fd5b50508035926020909101359150565b600060208284031215611fe957600080fd5b5035919050565b60008060006060848603121561200557600080fd5b833561201081611f44565b9250602084013561202081611f44565b929592945050506040919091013590565b6000806040838503121561204457600080fd5b823561204f81611f44565b915061205d60208401611f85565b90509250929050565b60006020828403121561207857600080fd5b8135610c2781611f44565b60008083601f84011261209557600080fd5b50813567ffffffffffffffff8111156120ad57600080fd5b6020830191508360208260051b85010111156120c857600080fd5b9250929050565b6000806000806000606086880312156120e757600080fd5b85356120f281611f44565b9450602086013567ffffffffffffffff8082111561210f57600080fd5b61211b89838a01612083565b9096509450604088013591508082111561213457600080fd5b5061214188828901612083565b969995985093965092949392505050565b6000806000806080858703121561216857600080fd5b5050823594602084013594506040840135936060013592509050565b60008060006060848603121561219957600080fd5b83356121a481611f44565b925060208401356121b481611f44565b915060408401356121c481611f44565b809150509250925092565b600080604083850312156121e257600080fd5b82356121ed81611f44565b915060208301356121fd81611f44565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610ad057610ad0612208565b60008261225257634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b80820180821115610ad057610ad0612208565b60006001820161229257612292612208565b5060010190565b81810381811115610ad057610ad0612208565b6000602082840312156122be57600080fd5b8151610c2781611f44565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123195784516001600160a01b0316835293830193918301916001016122f4565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561234f57600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220a58ada14a4b0a1d62817b73fe13c1f881a55f3e351bed2d11eba8f21ee47b81464736f6c63430008110033

Deployed Bytecode Sourcemap

17057:13698:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16791:38;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;16791:38:0;;;;;;;;18031:56;;;;;;;;;;;;;;;;19636:71;;;;;;;;;;-1:-1:-1;19699:5:0;;;;;;;;;;;;-1:-1:-1;;;19699:5:0;;;;19636:71;;;;;;;:::i;20046:216::-;;;;;;;;;;-1:-1:-1;20046:216:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;20046:216:0;1205:187:1;25299:94:0;;;;;;;;;;-1:-1:-1;25299:94:0;;;;;:::i;:::-;;:::i;:::-;;29861:150;;;;;;;;;;-1:-1:-1;29861:150:0;;;;;:::i;:::-;;:::i;17010:39::-;;;;;;;;;;;;;;;;19384:88;;;;;;;;;;-1:-1:-1;19457:12:0;;19384:88;;25066:202;;;;;;;;;;-1:-1:-1;25066:202:0;;;;;:::i;:::-;;:::i;16966:37::-;;;;;;;;;;;;;;;;29335:184;;;;;;;;;;-1:-1:-1;29335:184:0;;;;;:::i;:::-;;:::i;20564:370::-;;;;;;;;;;-1:-1:-1;20564:370:0;;;;;:::i;:::-;;:::i;28986:112::-;;;;;;;;;;-1:-1:-1;28986:112:0;;;;;:::i;:::-;;:::i;29527:142::-;;;;;;;;;;;;;:::i;18094:53::-;;;;;;;;;;;;;;;;19478:71;;;;;;;;;;-1:-1:-1;16458:2:0;19478:71;;;2818:4:1;2806:17;;;2788:36;;2776:2;2761:18;19478:71:0;2646:184:1;16698:42:0;;;;;;;;;;;;;;;;27818:75;;;;;;;;;;;;;:::i;16266:74::-;;;;;;;;;;-1:-1:-1;16266:74:0;;;;-1:-1:-1;;;;;16266:74:0;;;;;;-1:-1:-1;;;;;2999:32:1;;;2981:51;;2969:2;2954:18;16266:74:0;2835:203:1;16747:37:0;;;;;;;;;;;;;;;;16653:38;;;;;;;;;;;;;;;;17760;;;;;;;;;;;;;;;25926:94;;;;;;;;;;-1:-1:-1;25926:94:0;;;;;:::i;:::-;;:::i;28296:131::-;;;;;;;;;;-1:-1:-1;28296:131:0;;;;;:::i;:::-;;:::i;20270:122::-;;;;;;;;;;-1:-1:-1;20270:122:0;;;;;:::i;:::-;;:::i;21187:97::-;;;;;;;;;;-1:-1:-1;21187:97:0;;;;;:::i;:::-;;:::i;20942:122::-;;;;;;;;;;-1:-1:-1;20942:122:0;;;;;:::i;:::-;;:::i;17847:38::-;;;;;;;;;;-1:-1:-1;17847:38:0;;;;;;;;;;;27901:121;;;;;;;;;;-1:-1:-1;27901:121:0;;;;;:::i;:::-;;:::i;17703:50::-;;;;;;;;;;;;;;;17994:30;;;;;;;;;;-1:-1:-1;17994:30:0;;;;;;;;19790:105;;;;;;;;;;-1:-1:-1;19790:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;19874:18:0;19856:7;19874:18;;;:9;:18;;;;;;;19790:105;30038:648;;;;;;;;;;-1:-1:-1;30038:648:0;;;;;:::i;:::-;;:::i;5781:103::-;;;;;;;;;;;;;:::i;17892:39::-;;;;;;;;;;-1:-1:-1;17892:39:0;;;;;;;;;;;16184:75;;;;;;;;;;-1:-1:-1;16184:75:0;;;;-1:-1:-1;;;;;16184:75:0;;;16587:59;;;;;;;;;;;;;;;;16524:56;;;;;;;;;;;;;;;;19713:71;;;;;;;;;;;;;:::i;5140:87::-;;;;;;;;;;-1:-1:-1;5213:6:0;;-1:-1:-1;;;;;5213:6:0;5140:87;;25499:419;;;;;;;;;;-1:-1:-1;25499:419:0;;;;;:::i;:::-;;:::i;19555:75::-;;;;;;;;;;-1:-1:-1;19620:7:0;;;;;;;;;;;;-1:-1:-1;;;19620:7:0;;;;19555:75;;20400:156;;;;;;;;;;-1:-1:-1;20400:156:0;;;;;:::i;:::-;;:::i;17574:36::-;;;;;;;;;;-1:-1:-1;17574:36:0;;;;-1:-1:-1;;;;;17574:36:0;;;25401:90;;;;;;;;;;-1:-1:-1;25401:90:0;;;;;:::i;:::-;;:::i;29677:176::-;;;;;;;;;;-1:-1:-1;29677:176:0;;;;;:::i;:::-;;:::i;28435:543::-;;;;;;;;;;-1:-1:-1;28435:543:0;;;;;:::i;:::-;;:::i;28030:121::-;;;;;;;;;;-1:-1:-1;28030:121:0;;;;;:::i;:::-;;:::i;19901:133::-;;;;;;;;;;-1:-1:-1;19901:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;20003:19:0;;;19985:7;20003:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;19901:133;16880:79;;;;;;;;;;;;;;;;29106:221;;;;;;;;;;-1:-1:-1;29106:221:0;;;;;:::i;:::-;;:::i;6039:201::-;;;;;;;;;;-1:-1:-1;6039:201:0;;;;;:::i;:::-;;:::i;16836:37::-;;;;;;;;;;;;;;;;28159:129;;;;;;;;;;-1:-1:-1;28159:129:0;;;;;:::i;:::-;;:::i;17807:31::-;;;;;;;;;;-1:-1:-1;17807:31:0;;;;;;;;20046:216;20150:10;20121:4;20138:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;20138:32:0;;;;;;;;;;:41;;;20195:37;20121:4;;20138:32;;20195:37;;;;20173:6;160:25:1;;148:2;133:18;;14:177;20195:37:0;;;;;;;;-1:-1:-1;20250:4:0;20046:216;;;;;:::o;25299:94::-;5026:13;:11;:13::i;:::-;25364:11:::1;:21:::0;;-1:-1:-1;;25364:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25299:94::o;29861:150::-;29941:4;29997:6;29965:29;29985:8;29965:19;:29::i;:::-;:38;;29861:150;-1:-1:-1;;;29861:150:0:o;25066:202::-;25139:17;25199:15;25159:21;;-1:-1:-1;;;;;25199:15:0;25191:69;25256:3;25225:28;25237:16;25159:21;25225:28;:::i;:::-;:34;;;;:::i;:::-;25191:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25128:140;25066:202;:::o;29335:184::-;5026:13;:11;:13::i;:::-;29434:15:::1;:25:::0;;;;29470:26:::1;:41:::0;29335:184::o;20564:370::-;-1:-1:-1;;;;;20684:19:0;;20664:4;20684:19;;;:11;:19;;;;;;;;20704:10;20684:31;;;;;;;;-1:-1:-1;;20684:52:0;20681:186;;20786:69;;;;;;;;;;;-1:-1:-1;;;20786:69:0;;;;;;;;-1:-1:-1;;;;;20786:19:0;;-1:-1:-1;20786:19:0;;;:11;:19;;;;;20806:10;20786:31;;;;;;;;;;:69;;20822:6;;20786:35;:69::i;:::-;-1:-1:-1;;;;;20752:19:0;;;;;;:11;:19;;;;;;;;20772:10;20752:31;;;;;;;:103;20681:186;20886:40;20900:6;20908:9;20919:6;20886:13;:40::i;:::-;20879:47;;20564:370;;;;;;:::o;28986:112::-;5026:13;:11;:13::i;:::-;29067::::1;:23:::0;28986:112::o;29527:142::-;29655:4;;-1:-1:-1;;;;;29655:4:0;29580:7;19874:18;;;:9;:18;;;;;;29607:54;;29634:4;;-1:-1:-1;;;;;29634:4:0;19856:7;19874:18;;;:9;:18;;;;;;29607:33;;:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;29600:61;;29527:142;:::o;27818:75::-;5026:13;:11;:13::i;:::-;27875:10:::1;:8;:10::i;:::-;27818:75::o:0;25926:94::-;5026:13;:11;:13::i;:::-;25992:11:::1;:20:::0;25926:94::o;28296:131::-;5026:13;:11;:13::i;:::-;-1:-1:-1;;;;;28386:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;28386:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28296:131::o;20270:122::-;20325:4;20349:35;20357:7;-1:-1:-1;;20349:7:0;:35::i;21187:97::-;5026:13;:11;:13::i;:::-;21255:12:::1;:21:::0;21187:97::o;20942:122::-;5026:13;:11;:13::i;:::-;21022:15:::1;:34:::0;20942:122::o;27901:121::-;5026:13;:11;:13::i;:::-;-1:-1:-1;;;;;27986:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;27986:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27901:121::o;30038:648::-;5026:13;:11;:13::i;:::-;30191:3:::1;30172:22:::0;::::1;30164:79;;;::::0;-1:-1:-1;;;30164:79:0;;7181:2:1;30164:79:0::1;::::0;::::1;7163:21:1::0;7220:2;7200:18;;;7193:30;7259:34;7239:18;;;7232:62;-1:-1:-1;;;7310:18:1;;;7303:43;7363:19;;30164:79:0::1;;;;;;;;;30262:33:::0;;::::1;30254:85;;;::::0;-1:-1:-1;;;30254:85:0;;7595:2:1;30254:85:0::1;::::0;::::1;7577:21:1::0;7634:2;7614:18;;;7607:30;7673:34;7653:18;;;7646:62;-1:-1:-1;;;7724:18:1;;;7717:38;7772:19;;30254:85:0::1;7393:404:1::0;30254:85:0::1;30352:12;30385:6:::0;30381:90:::1;30395:20:::0;;::::1;30381:90;;;30450:6;;30457:1;30450:9;;;;;;;:::i;:::-;;;;;;;30443:4;:16;;;;:::i;:::-;30436:23:::0;-1:-1:-1;30417:3:0;::::1;::::0;::::1;:::i;:::-;;;;30381:90;;;;30510:4;30491:15;30501:4;-1:-1:-1::0;;;;;19874:18:0;19856:7;19874:18;;;:9;:18;;;;;;;19790:105;30491:15:::1;:23;;30483:63;;;::::0;-1:-1:-1;;;30483:63:0;;8406:2:1;30483:63:0::1;::::0;::::1;8388:21:1::0;8445:2;8425:18;;;8418:30;8484:29;8464:18;;;8457:57;8531:18;;30483:63:0::1;8204:351:1::0;30483:63:0::1;30563:6;30559:110;30573:20:::0;;::::1;30559:110;;;30614:43;30629:4;30634:9;;30644:1;30634:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;30647:6;;30654:1;30647:9;;;;;;;:::i;:::-;;;;;;;30614:14;:43::i;:::-;-1:-1:-1::0;30595:3:0;::::1;::::0;::::1;:::i;:::-;;;;30559:110;;;;30151:535;30038:648:::0;;;;;:::o;5781:103::-;5026:13;:11;:13::i;:::-;5846:30:::1;5873:1;5846:18;:30::i;19713:71::-:0;19756:7;19774;5213:6;;-1:-1:-1;;;;;5213:6:0;;5140:87;25499:419;5026:13;:11;:13::i;:::-;25657:9:::1;:25:::0;;;25693:13:::1;:36:::0;;;25740:15:::1;:37:::0;;;25803:64:::1;25758:19:::0;25803:39:::1;25669:13:::0;25709:20;25803:17:::1;:39::i;:::-;:43:::0;::::1;:64::i;:::-;25788:12;:79:::0;25878:14:::1;:32:::0;-1:-1:-1;;;25499:419:0:o;20400:156::-;20480:4;20504:44;20518:10;20530:9;20541:6;20504:13;:44::i;25401:90::-;5026:13;:11;:13::i;:::-;25469:8:::1;:14:::0;25401:90::o;29677:176::-;29745:7;29772:73;29822:22;:20;:22::i;:::-;29772:45;29785:31;29814:1;29785:24;29795:13;-1:-1:-1;;;;;19874:18:0;19856:7;19874:18;;;:9;:18;;;;;;;19790:105;29785:24;:28;;:31::i;:::-;29772:8;;:12;:45::i;:::-;:49;;:73::i;28435:543::-;5026:13;:11;:13::i;:::-;28596:14:::1;::::0;;-1:-1:-1;;;;;28596:14:0;;::::1;28614:5;28584:27:::0;;;:11:::1;:27;::::0;;;;;;;:35;;-1:-1:-1;;28584:35:0;;::::1;::::0;;;28630:31;;::::1;::::0;;;;;;:38;;;::::1;::::0;::::1;::::0;;28691:15;;;::::1;28679:28:::0;;;;;:36;;;::::1;::::0;;28726:32;;::::1;::::0;;;;;;:39;;;::::1;::::0;::::1;::::0;;28778:11:::1;:32:::0;;;;;:39;;;;::::1;::::0;::::1;::::0;;;28830:21:::1;:46:::0;;;;;::::1;-1:-1:-1::0;;;;;;28830:46:0;;::::1;;::::0;;;28887:37;;;::::1;::::0;;::::1;::::0;;;28935:35;;;;::::1;;::::0;;28435:543::o;28030:121::-;5026:13;:11;:13::i;:::-;-1:-1:-1;;;;;28115:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;28115:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28030:121::o;29106:221::-;5026:13;:11;:13::i;:::-;29191::::1;;29181:7;:23;29178:134;;;29234:13;::::0;29221:10:::1;:26:::0;29106:221;:::o;29178:134::-:1;29280:10;:20:::0;;;29178:134:::1;29106:221:::0;:::o;6039:201::-;5026:13;:11;:13::i;:::-;-1:-1:-1;;;;;6128:22:0;::::1;6120:73;;;::::0;-1:-1:-1;;;6120:73:0;;8762:2:1;6120:73:0::1;::::0;::::1;8744:21:1::0;8801:2;8781:18;;;8774:30;8840:34;8820:18;;;8813:62;-1:-1:-1;;;8891:18:1;;;8884:36;8937:19;;6120:73:0::1;8560:402:1::0;6120:73:0::1;6204:28;6223:8;6204:18;:28::i;28159:129::-:0;5026:13;:11;:13::i;:::-;-1:-1:-1;;;;;28248:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;28248:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28159:129::o;5305:132::-;5213:6;;-1:-1:-1;;;;;5213:6:0;3771:10;5369:23;5361:68;;;;-1:-1:-1;;;5361:68:0;;9169:2:1;5361:68:0;;;9151:21:1;;;9188:18;;;9181:30;9247:34;9227:18;;;9220:62;9299:18;;5361:68:0;8967:356:1;7404:240:0;7524:7;7585:12;7577:6;;;;7569:29;;;;-1:-1:-1;;;7569:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;7620:5:0;;;7404:240::o;21292:2062::-;21404:6;;21384:4;;21404:6;;21401:63;;;21420:41;21435:6;21443:9;21454:6;21420:14;:41::i;:::-;21413:48;;;;21401:63;5213:6;;-1:-1:-1;;;;;21479:17:0;;;5213:6;;21479:17;;;;:41;;-1:-1:-1;5213:6:0;;-1:-1:-1;;;;;21500:20:0;;;5213:6;;21500:20;;21479:41;21476:115;;;21544:11;;;;21536:43;;;;-1:-1:-1;;;21536:43:0;;9530:2:1;21536:43:0;;;9512:21:1;9569:2;9549:18;;;9542:30;-1:-1:-1;;;9588:18:1;;;9581:50;9648:18;;21536:43:0;9328:344:1;21536:43:0;21631:13;-1:-1:-1;;;;;21618:26:0;;;;;;;21603:11;21675:26;;21618;21675:53;;;21715:13;-1:-1:-1;;;;;21705:23:0;:6;-1:-1:-1;;;;;21705:23:0;;;21675:53;21656:73;-1:-1:-1;;;;;;21746:26:0;;21767:4;21746:26;;;;:70;;-1:-1:-1;21811:4:0;;-1:-1:-1;;;;;21790:26:0;;;21811:4;;21790:26;;21746:70;:114;;;;;21847:13;-1:-1:-1;;;;;21834:26:0;:9;-1:-1:-1;;;;;21834:26:0;;;21746:114;:160;;;;-1:-1:-1;21891:15:0;;-1:-1:-1;;;;;21878:28:0;;;21891:15;;21878:28;;21746:160;:205;;;;-1:-1:-1;21937:14:0;;-1:-1:-1;;;;;21924:27:0;;;21937:14;;21924:27;;21746:205;:257;;;;-1:-1:-1;21982:21:0;;-1:-1:-1;;;;;21969:34:0;;;21982:21;;21969:34;;21746:257;21742:531;;;-1:-1:-1;;;;;19874:18:0;;22029;19874;;;:9;:18;;;;;;;;;22089:11;:22;;;;;;;;;22085:177;;22165:15;;22141:19;22154:6;22141:10;:19;:::i;:::-;22140:40;;22132:114;;;;-1:-1:-1;;;22132:114:0;;9879:2:1;22132:114:0;;;9861:21:1;9918:2;9898:18;;;9891:30;9957:34;9937:18;;;9930:62;10028:32;10008:18;;;10001:60;10078:19;;22132:114:0;9677:426:1;22132:114:0;22014:259;21742:531;22299:13;-1:-1:-1;;;;;22289:23:0;:6;-1:-1:-1;;;;;22289:23:0;;:58;;;;-1:-1:-1;22329:18:0;;;;;;;22289:58;:103;;;;-1:-1:-1;;;;;;22365:27:0;;;;;;:16;:27;;;;;;;;22364:28;22289:103;22285:317;;;-1:-1:-1;;;;;22426:24:0;;;;;;:13;:24;;;;;;22453:15;-1:-1:-1;22418:91:0;;;;-1:-1:-1;;;22418:91:0;;10310:2:1;22418:91:0;;;10292:21:1;10349:2;10329:18;;;10322:30;10388:34;10368:18;;;10361:62;-1:-1:-1;;;10439:18:1;;;10432:35;10484:19;;22418:91:0;10108:401:1;22418:91:0;22569:21;;22551:39;;22569:21;;;;;22551:15;:39;:::i;:::-;-1:-1:-1;;;;;22524:24:0;;;;;;:13;:24;;;;;:66;22285:317;-1:-1:-1;;;;;22618:26:0;;;;;;:15;:26;;;;;;;;22614:87;;22661:28;22674:6;22682;22661:12;:28::i;:::-;22760:53;;;;;;;;;;;-1:-1:-1;;;22760:53:0;;;;;;;;-1:-1:-1;;;;;22760:17:0;;-1:-1:-1;22760:17:0;;;:9;:17;;;;;;;;:53;;22782:6;;22760:21;:53::i;:::-;-1:-1:-1;;;;;22740:17:0;;;;;;:9;:17;;;;;:73;22851:6;22870:318;;;;22903:8;;:12;22900:100;;22953:31;22969:6;22977;22953:15;:31::i;:::-;22936:48;;22900:100;22870:318;;;-1:-1:-1;;;;;23961:19:0;;23936:4;23961:19;;;:11;:19;;;;;;;;23960:20;23049:64;;23107:6;23049:64;;;23073:31;23081:6;23089;23097;23073:7;:31::i;:::-;23032:81;;23145:16;:14;:16::i;:::-;23142:35;;;23164:10;:8;:10::i;:::-;-1:-1:-1;;;;;23223:20:0;;;;;;:9;:20;;;;;;:40;;23248:14;23223:24;:40::i;:::-;-1:-1:-1;;;;;23200:20:0;;;;;;;:9;:20;;;;;;;:63;;;;23281:43;;;;;;-1:-1:-1;;;;;;;;;;;23281:43:0;;;23309:14;160:25:1;;148:2;133:18;;14:177;23281:43:0;;;;;;;;-1:-1:-1;23342:4:0;;21292:2062;-1:-1:-1;;;;;;21292:2062:0:o;6980:98::-;7038:7;7065:5;7069:1;7065;:5;:::i;26028:1782::-;18196:6;:13;;-1:-1:-1;;18196:13:0;18205:4;18196:13;;;26123:15:::1;::::0;26140:26:::1;::::0;18196:6;;26107:60:::1;::::0;:15:::1;:60::i;:::-;:76;;26174:9;;26107:76;;;26170:1;26107:76;26077:106;;26194:23;26220:60;26278:1;26220:53;26260:12;;26220:35;26235:19;26220:10;;:14;;:35;;;;:::i;:60::-;26194:86;;26291:20;26314:31;26329:15;26314:10;;:14;;:31;;;;:::i;:::-;26382:16;::::0;;26396:1:::1;26382:16:::0;;;;;::::1;::::0;;26291:54;;-1:-1:-1;26358:21:0::1;::::0;26382:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;26382:16:0::1;26358:40;;26427:4;26409;26414:1;26409:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;26409:23:0::1;;;-1:-1:-1::0;;;;;26409:23:0::1;;;::::0;::::1;26453:14;-1:-1:-1::0;;;;;26453:19:0::1;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26443:4;26448:1;26443:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26443:31:0;;::::1;:7;::::0;;::::1;::::0;;;;;:31;26545:196:::1;::::0;-1:-1:-1;;;26545:196:0;;26511:21:::1;::::0;26545:14:::1;:65;::::0;::::1;::::0;:196:::1;::::0;26625:12;;26487:21:::1;::::0;26668:4;;26695::::1;::::0;26715:15:::1;::::0;26545:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26754:17;26774:40;26800:13;26774:21;:25;;:40;;;;:::i;:::-;26754:60:::0;-1:-1:-1;26827:19:0::1;26849:44;26866:26;:19:::0;26890:1:::1;26866:23;:26::i;:::-;26849:12;::::0;;:16:::1;:44::i;:::-;26827:66;;26906:26;26935:48;26981:1;26935:41;26964:11;26935:24;26949:9;;26935;:13;;:24;;;;:::i;:48::-;26906:77;;26994:26;27023:45;27056:11;27023:28;27037:13;;27023:9;:13;;:28;;;;:::i;:45::-;26994:74;;27079:25;27107:47;27142:11;27107:30;27121:15;;27107:9;:13;;:30;;;;:::i;:47::-;27168:15;27196::::0;;27188:72:::1;::::0;27079:75;;-1:-1:-1;27168:15:0;;-1:-1:-1;;;;;27196:15:0;;::::1;::::0;27250:5:::1;::::0;27225:18;;27168:15;27188:72;27168:15;27188:72;27225:18;27196:15;27250:5;27188:72:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;27295:14:0::1;::::0;27287:70:::1;::::0;27167:93;;-1:-1:-1;;;;;;27295:14:0::1;::::0;27347:5:::1;::::0;27323:17;;27287:70:::1;::::0;;;27323:17;27295:14;27347:5;27287:70:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;27415:5:0::1;::::0;-1:-1:-1;;27436:19:0;;;-1:-1:-1;27433:370:0::1;;27653:21;::::0;27471:252:::1;::::0;-1:-1:-1;;;27471:252:0;;27555:4:::1;27471:252;::::0;::::1;12571:34:1::0;12621:18;;;12614:34;;;-1:-1:-1;12664:18:1;;;12657:34;;;12707:18;;;12700:34;-1:-1:-1;;;;;27653:21:0;;::::1;12750:19:1::0;;;12743:44;27693:15:0::1;12803:19:1::0;;;12796:35;27471:14:0::1;:30:::0;;::::1;::::0;::::1;::::0;27509:18;;12505:19:1;;27471:252:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;27743:48:0::1;::::0;;13327:25:1;;;13383:2;13368:18;;13361:34;;;27743:48:0::1;::::0;-1:-1:-1;13300:18:1;27743:48:0::1;;;;;;;27433:370;-1:-1:-1::0;;18214:6:0;:14;;-1:-1:-1;;18214:14:0;;;-1:-1:-1;;;;;;;;;26028:1782:0:o;23362:330::-;23492:53;;;;;;;;;;;-1:-1:-1;;;23492:53:0;;;;;;;;-1:-1:-1;;;;;23492:17:0;;23455:4;23492:17;;;:9;:17;;;;;;;:53;;23514:6;;23492:21;:53::i;:::-;-1:-1:-1;;;;;23472:17:0;;;;;;;:9;:17;;;;;;:73;;;;23579:20;;;;;;;:32;;23604:6;23579:24;:32::i;:::-;-1:-1:-1;;;;;23556:20:0;;;;;;;:9;:20;;;;;;;:55;;;;23627:35;;;;;;-1:-1:-1;;;;;;;;;;;23627:35:0;;;23655:6;160:25:1;;148:2;133:18;;14:177;23627:35:0;;;;;;;;-1:-1:-1;23680:4:0;23362:330;;;;;:::o;6400:191::-;6493:6;;;-1:-1:-1;;;;;6510:17:0;;;-1:-1:-1;;;;;;6510:17:0;;;;;;;6543:40;;6493:6;;;6510:17;6493:6;;6543:40;;6474:16;;6543:40;6463:128;6400:191;:::o;6874:98::-;6932:7;6959:5;6963:1;6959;:5;:::i;7086:98::-;7144:7;7171:5;7175:1;7171;:5;:::i;7192:98::-;7250:7;7277:5;7281:1;7277;:5;:::i;23700:166::-;23797:12;;23787:6;:22;;:49;;;-1:-1:-1;;;;;;23813:23:0;;;;;;:15;:23;;;;;;;;23787:49;23779:79;;;;-1:-1:-1;;;23779:79:0;;13608:2:1;23779:79:0;;;13590:21:1;13647:2;13627:18;;;13620:30;-1:-1:-1;;;13666:18:1;;;13659:47;13723:18;;23779:79:0;13406:341:1;23779:79:0;23700:166;;:::o;23996:406::-;24071:7;24093:17;24113:8;;24093:28;;24132:17;24152:56;24187:14;;24204:3;24187:20;;;;:::i;:::-;24152:30;24178:3;24152:21;:6;24163:9;24152:10;:21::i;:56::-;24274:4;24256:24;;;;:9;:24;;;;;;24132:76;;-1:-1:-1;24256:39:0;;24132:76;24256:28;:39::i;:::-;24247:4;24229:24;;;;:9;:24;;;;;;;:66;;;;24311:42;;-1:-1:-1;;;;;24311:42:0;;;-1:-1:-1;;;;;;;;;;;24311:42:0;;;24343:9;160:25:1;;148:2;133:18;;14:177;24311:42:0;;;;;;;;24373:21;:6;24384:9;24373:10;:21::i;:::-;24366:28;23996:406;-1:-1:-1;;;;;23996:406:0:o;24410:458::-;24490:7;24510:17;24550:6;:35;;24574:11;;24550:35;;;24559:12;;24550:35;24538:47;;24598:17;24618:56;24653:14;;24670:3;24653:20;;;;:::i;:::-;24618:30;24644:3;24618:21;:6;24629:9;24618:10;:21::i;:56::-;24740:4;24722:24;;;;:9;:24;;;;;;24598:76;;-1:-1:-1;24722:39:0;;24598:76;24722:28;:39::i;:::-;24713:4;24695:24;;;;:9;:24;;;;;;;:66;;;;24777:42;;-1:-1:-1;;;;;24777:42:0;;;-1:-1:-1;;;;;;;;;;;24777:42:0;;;24809:9;160:25:1;;148:2;133:18;;14:177;24777:42:0;;;;;;;;24839:21;:6;24850:9;24839:10;:21::i;:::-;24832:28;24410:458;-1:-1:-1;;;;;;24410:458:0:o;24876:182::-;24925:4;24949:10;-1:-1:-1;;;;;24963:13:0;24949:27;;;;;:47;;-1:-1:-1;24990:6:0;;;;24989:7;24949:47;:101;;;;-1:-1:-1;;25037:13:0;;25027:4;25009:24;;;;:9;:24;;;;;;:41;;;24876:182::o;196:548: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;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;885:315;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1397:160::-;1462:20;;1518:13;;1511:21;1501:32;;1491:60;;1547:1;1544;1537:12;1491:60;1397:160;;;:::o;1562:180::-;1618:6;1671:2;1659:9;1650:7;1646:23;1642:32;1639:52;;;1687:1;1684;1677:12;1639:52;1710:26;1726:9;1710:26;:::i;1747:248::-;1815:6;1823;1876:2;1864:9;1855:7;1851:23;1847:32;1844:52;;;1892:1;1889;1882:12;1844:52;-1:-1:-1;;1915:23:1;;;1985:2;1970:18;;;1957:32;;-1:-1:-1;1747:248:1:o;2000:180::-;2059:6;2112:2;2100:9;2091:7;2087:23;2083:32;2080:52;;;2128:1;2125;2118:12;2080:52;-1:-1:-1;2151:23:1;;2000:180;-1:-1:-1;2000:180:1:o;2185:456::-;2262:6;2270;2278;2331:2;2319:9;2310:7;2306:23;2302:32;2299:52;;;2347:1;2344;2337:12;2299:52;2386:9;2373:23;2405:31;2430:5;2405:31;:::i;:::-;2455:5;-1:-1:-1;2512:2:1;2497:18;;2484:32;2525:33;2484:32;2525:33;:::i;:::-;2185:456;;2577:7;;-1:-1:-1;;;2631:2:1;2616:18;;;;2603:32;;2185:456::o;3043:315::-;3108:6;3116;3169:2;3157:9;3148:7;3144:23;3140:32;3137:52;;;3185:1;3182;3175:12;3137:52;3224:9;3211:23;3243:31;3268:5;3243:31;:::i;:::-;3293:5;-1:-1:-1;3317:35:1;3348:2;3333:18;;3317:35;:::i;:::-;3307:45;;3043:315;;;;;:::o;3363:247::-;3422:6;3475:2;3463:9;3454:7;3450:23;3446:32;3443:52;;;3491:1;3488;3481:12;3443:52;3530:9;3517:23;3549:31;3574:5;3549:31;:::i;3850:367::-;3913:8;3923:6;3977:3;3970:4;3962:6;3958:17;3954:27;3944:55;;3995:1;3992;3985:12;3944:55;-1:-1:-1;4018:20:1;;4061:18;4050:30;;4047:50;;;4093:1;4090;4083:12;4047:50;4130:4;4122:6;4118:17;4106:29;;4190:3;4183:4;4173:6;4170:1;4166:14;4158:6;4154:27;4150:38;4147:47;4144:67;;;4207:1;4204;4197:12;4144:67;3850:367;;;;;:::o;4222:908::-;4353:6;4361;4369;4377;4385;4438:2;4426:9;4417:7;4413:23;4409:32;4406:52;;;4454:1;4451;4444:12;4406:52;4493:9;4480:23;4512:31;4537:5;4512:31;:::i;:::-;4562:5;-1:-1:-1;4618:2:1;4603:18;;4590:32;4641:18;4671:14;;;4668:34;;;4698:1;4695;4688:12;4668:34;4737:70;4799:7;4790:6;4779:9;4775:22;4737:70;:::i;:::-;4826:8;;-1:-1:-1;4711:96:1;-1:-1:-1;4914:2:1;4899:18;;4886:32;;-1:-1:-1;4930:16:1;;;4927:36;;;4959:1;4956;4949:12;4927:36;;4998:72;5062:7;5051:8;5040:9;5036:24;4998:72;:::i;:::-;4222:908;;;;-1:-1:-1;4222:908:1;;-1:-1:-1;5089:8:1;;4972:98;4222:908;-1:-1:-1;;;4222:908:1:o;5135:385::-;5221:6;5229;5237;5245;5298:3;5286:9;5277:7;5273:23;5269:33;5266:53;;;5315:1;5312;5305:12;5266:53;-1:-1:-1;;5338:23:1;;;5408:2;5393:18;;5380:32;;-1:-1:-1;5459:2:1;5444:18;;5431:32;;5510:2;5495:18;5482:32;;-1:-1:-1;5135:385:1;-1:-1:-1;5135:385:1:o;5525:529::-;5602:6;5610;5618;5671:2;5659:9;5650:7;5646:23;5642:32;5639:52;;;5687:1;5684;5677:12;5639:52;5726:9;5713:23;5745:31;5770:5;5745:31;:::i;:::-;5795:5;-1:-1:-1;5852:2:1;5837:18;;5824:32;5865:33;5824:32;5865:33;:::i;:::-;5917:7;-1:-1:-1;5976:2:1;5961:18;;5948:32;5989:33;5948:32;5989:33;:::i;:::-;6041:7;6031:17;;;5525:529;;;;;:::o;6059:388::-;6127:6;6135;6188:2;6176:9;6167:7;6163:23;6159:32;6156:52;;;6204:1;6201;6194:12;6156:52;6243:9;6230:23;6262:31;6287:5;6262:31;:::i;:::-;6312:5;-1:-1:-1;6369:2:1;6354:18;;6341:32;6382:33;6341:32;6382:33;:::i;:::-;6434:7;6424:17;;;6059:388;;;;;:::o;6452:127::-;6513:10;6508:3;6504:20;6501:1;6494:31;6544:4;6541:1;6534:15;6568:4;6565:1;6558:15;6584:168;6657:9;;;6688;;6705:15;;;6699:22;;6685:37;6675:71;;6726:18;;:::i;6757:217::-;6797:1;6823;6813:132;;6867:10;6862:3;6858:20;6855:1;6848:31;6902:4;6899:1;6892:15;6930:4;6927:1;6920:15;6813:132;-1:-1:-1;6959:9:1;;6757:217::o;7802:127::-;7863:10;7858:3;7854:20;7851:1;7844:31;7894:4;7891:1;7884:15;7918:4;7915:1;7908:15;7934:125;7999:9;;;8020:10;;;8017:36;;;8033:18;;:::i;8064:135::-;8103:3;8124:17;;;8121:43;;8144:18;;:::i;:::-;-1:-1:-1;8191:1:1;8180:13;;8064:135::o;10514:128::-;10581:9;;;10602:11;;;10599:37;;;10616:18;;:::i;10779:251::-;10849:6;10902:2;10890:9;10881:7;10877:23;10873:32;10870:52;;;10918:1;10915;10908:12;10870:52;10950:9;10944:16;10969:31;10994:5;10969:31;:::i;11035:980::-;11297:4;11345:3;11334:9;11330:19;11376:6;11365:9;11358:25;11402:2;11440:6;11435:2;11424:9;11420:18;11413:34;11483:3;11478:2;11467:9;11463:18;11456:31;11507:6;11542;11536:13;11573:6;11565;11558:22;11611:3;11600:9;11596:19;11589:26;;11650:2;11642:6;11638:15;11624:29;;11671:1;11681:195;11695:6;11692:1;11689:13;11681:195;;;11760:13;;-1:-1:-1;;;;;11756:39:1;11744:52;;11851:15;;;;11816:12;;;;11792:1;11710:9;11681:195;;;-1:-1:-1;;;;;;;11932:32:1;;;;11927:2;11912:18;;11905:60;-1:-1:-1;;;11996:3:1;11981:19;11974:35;11893:3;11035:980;-1:-1:-1;;;11035:980:1:o;12842:306::-;12930:6;12938;12946;12999:2;12987:9;12978:7;12974:23;12970:32;12967:52;;;13015:1;13012;13005:12;12967:52;13044:9;13038:16;13028:26;;13094:2;13083:9;13079:18;13073:25;13063:35;;13138:2;13127:9;13123:18;13117:25;13107:35;;12842:306;;;;;:::o

Swarm Source

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