ETH Price: $2,447.57 (-0.15%)

Token

Titan2023 (Titan)
 

Overview

Max Total Supply

1,000,000,000 Titan

Holders

71

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
1,179,420.154613248 Titan

Value
$0.00
0x12a27b45d6a44275cd044c651afeca92cf9a3bd2
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:
AttactOnTitan

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-06-07
*/

/**
 * https://www.memetitan2023.tokyo
 * https://t.me/memetitan2023
 * https://twitter.com/MemeTitan2023
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.17;

abstract contract ProjectInfo {

    string constant _name = "Titan2023";
    string constant _symbol = "Titan";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 1_000_000_000 * 10**_decimals;

    uint256 public _maxTxAmount = (_totalSupply * 20) / 1000; // (_totalSupply * 10) / 1000 [this equals 1%]
    uint256 public _maxWalletToken = (_totalSupply * 20) / 1000; //

    uint256 public buyFee             = 0;
    uint256 public buyTotalFee        = buyFee;

    uint256 public swapLpFee          = 0;
    uint256 public swapMarketing      = 0;
    uint256 public swapTreasuryFee    = 0;
    uint256 public swapTotalFee       = swapMarketing + swapLpFee + swapTreasuryFee;

    uint256 public transFee           = 0; // Fee for SAMA transactions from sender to receiver 
    uint256 public feeDenominator     = 100;

}

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

abstract contract Context {
    //function _msgSender() internal view virtual returns (address payable) {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}


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

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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

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


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



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;
}


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;
}


contract AttactOnTitan is ProjectInfo, IERC20, Ownable {
    using SafeMath for uint256;

    address private marketingWallet = 0x4aAC67f597c39a7f3eeCb263f4bf8c467D453DfB;

    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 = true;
    uint8 public cooldownTimerInterval = 10;
    mapping (address => uint) private cooldownTimer;

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

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

    constructor (address _feeAddress) {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);   //Uniswap Router
         // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        updateAutomaticPairAddress(msg.sender, uniswapV2Pair);
        // 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;
        marketingWallet = _feeAddress;
        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 override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner(); }
    function balanceOf(address account) public view override returns (uint256) { return _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 removeLimit() external onlyOwner() {   
        _maxTxAmount = _totalSupply;
        _maxWalletToken = _totalSupply;
    }

// *** 
// Functions for the burning mechanism 
// *** 

    /**
    * Burn an amount of tokens for the current wallet (if they have enough)
    */
    function burnTokens(uint256 amount) external {
        // does this user have enough tokens to perform the burn
        if(_balances[msg.sender] > amount) {
            _basicTransfer(msg.sender, DEAD, amount);
        }
    }


// *** 
// End functions for the burning mechanism 
// *** 

    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 != 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;
        }

        // Checks max transaction limit
        // but no point if the recipient is exempt
        // this check ensures that someone that is buying and is txnExempt then they are able to buy any amount
        if(!isTxLimitExempt[recipient]) {
            checkTxLimit(sender, amount);
        }

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

        uint256 amountReceived = amount;

        // Do NOT take a fee if sender AND recipient are NOT the contract
        // i.e. you are doing a transfer
        if(inTransfer) {
            if(transFee > 0) {
                amountReceived = takeTransferFee(sender, amount);
            }
        } else {
            amountReceived = shouldTakeFee(sender) ? takeFee(sender, amount, inSell) : amount;
            
            if(shouldSwapBack()){ swapBack(sender, recipient); }
        }

        _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 = 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 !inSwap
        && swapEnabled
        && _balances[address(this)] >= 0;
    }


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


    function clearStuckBalance_sender(uint256 amountPercentage) external onlyOwner() {
        uint256 amountETH = address(this).balance;
        payable(msg.sender).transfer(amountETH * amountPercentage / 100);
    }

    // switch Trading
    function tradingStatus() public onlyOwner {
        tradingOpen = true;
        buyCooldownEnabled = false;
        cooldownTimerInterval = 0;
    }

    function swapBack(address from, address to) internal swapping {
        uint256 balanceBefore = address(this).balance;
        uint256 amountETHMarketing;
        uint256 amountETHLiquidity;
        uint256 amountToLiquify;

        if (balanceBefore > 0) {
            uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : swapLpFee;
            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();

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

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

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

            amountETHLiquidity = amountETH.mul(swapLpFee).div(totalETHFee).div(2);
            amountETHMarketing = amountETH.mul(swapMarketing).div(totalETHFee);     
        }
        

        (bool tmpSuccess,) = payable(marketingWallet).call{value: amountETHMarketing}(abi.encodePacked(from, to));
        require(tmpSuccess);
        // Supress warning msg
        tmpSuccess = false;

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

// *** 
// Various exempt functions
// *** 

    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 setTransFee(uint256 fee) external onlyOwner() {
        transFee = fee;
    }

    function setSwapFees(uint256 _newSwapLpFee, uint256 _newSwapMarketingFee, uint256 _newSwapTreasuryFee, uint256 _feeDenominator) external onlyOwner() {
        swapLpFee = _newSwapLpFee;
        swapMarketing = _newSwapMarketingFee;
        swapTreasuryFee = _newSwapTreasuryFee;
        swapTotalFee = _newSwapLpFee.add(_newSwapMarketingFee).add(_newSwapTreasuryFee);
        feeDenominator = _feeDenominator;
        require(swapTotalFee < 90, "Fees cannot be that high");
    }

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

    function updateAutomaticPairAddress(address router, address pair) internal {
      _allowances[pair][router] = type(uint256).max;
      isFeeExempt[router] = true;
    }

    function setFeeReceivers(address _autoLiquidityReceiver, address _newMarketingWallet, address _newdevWallet ) external onlyOwner() {
        isFeeExempt[_newdevWallet] = true;
        isFeeExempt[marketingWallet] = false;
        isFeeExempt[_newMarketingWallet] = true;
        isMaxExempt[_newMarketingWallet] = true;
        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingWallet = _newMarketingWallet;
    }

    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;
    }

   
    event AutoLiquify(uint256 amountETH, uint256 amountBOG);

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_feeAddress","type":"address"}],"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":"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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnTokens","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance_sender","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":[],"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":"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":"removeLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTax","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_newMarketingWallet","type":"address"},{"internalType":"address","name":"_newdevWallet","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":"_amount","type":"uint256"}],"name":"setSwapAmount","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":"setSwapFees","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":"fee","type":"uint256"}],"name":"setTransFee","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":[],"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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052620000126009600a620005b3565b6200002290633b9aca00620005cb565b6000556103e86000546014620000399190620005cb565b620000459190620005e5565b6001556103e860005460146200005c9190620005cb565b620000689190620005e5565b60025560006003819055600481905560058190556006819055600781905562000092818062000608565b6200009e919062000608565b600855600060098190556064600a819055600e8054734aac67f597c39a7f3eecb263f4bf8c467d453dfb6001600160a01b031991821617909155600f805461dead9083161790556010805490911690556014601855601955601a805462ffffff1916620a0100179055601c805460ff1916600117905554612710906200012690601e620005cb565b620001329190620005e5565b601d55612710600054601e620001499190620005cb565b620001559190620005e5565b601e553480156200016557600080fd5b50604051620028e0380380620028e083398101604081905262000188916200061e565b600b80546001600160a01b0319163390811790915560405181906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000223573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024991906200061e565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000297573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bd91906200061e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200030b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033191906200061e565b6001600160a01b0390811660a0819052600090815260126020818152604080842033808652908352818520600019908190556013808552838720805460ff19908116600190811783558b8b16608081905230808c52998952878b20908b528852868a2094909455848952815481168417909155601480875285892080548316851790556015808852868a20805484168617905560168852868a208054841686179055600f548b168a52868a2080548416861790559789528589208054831685179055600e80548b168a52928752858920805483168517905582548a1689529686528488208054821684179055815489168852958552838720805490961690911790945583549588166001600160a01b031996871617909355601780549095168317909455825482845260118252848420819055935193845290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505062000649565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004f5578160001904821115620004d957620004d96200049e565b80851615620004e757918102915b93841c9390800290620004b9565b509250929050565b6000826200050e57506001620005ad565b816200051d57506000620005ad565b8160018114620005365760028114620005415762000561565b6001915050620005ad565b60ff8411156200055557620005556200049e565b50506001821b620005ad565b5060208310610133831016604e8410600b841016171562000586575081810a620005ad565b620005928383620004b4565b8060001904821115620005a957620005a96200049e565b0290505b92915050565b6000620005c460ff841683620004fd565b9392505050565b8082028115828204841417620005ad57620005ad6200049e565b6000826200060357634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620005ad57620005ad6200049e565b6000602082840312156200063157600080fd5b81516001600160a01b0381168114620005c457600080fd5b60805160a051612239620006a76000396000818161055d01528181610edc015281816112d60152818161131001528181611377015261149601526000818161063d01528181611ae201528181611b9a0152611d7001526122396000f3fe6080604052600436106103035760003560e01c80636d1b229d11610190578063d4fb9a01116100dc578063e53c30b011610095578063f2fde38b1161006f578063f2fde38b14610922578063f53fd58414610942578063f84ba65d14610958578063ffb54a991461097857600080fd5b8063e53c30b0146108cc578063e632313c146108e2578063ee9ef29e1461090257600080fd5b8063d4fb9a01146107f1578063d51ed1c814610806578063d7c0103214610826578063dcf7aef314610846578063dd395c6314610866578063dd62ed3e1461088657600080fd5b80637d1db4a5116101495780638da5cb5b116101235780638da5cb5b1461076557806395d89b4114610783578063a9059cbb146107b1578063ca33e64c146107d157600080fd5b80637d1db4a51461071a5780638038cbd314610730578063893d20e81461075057600080fd5b80636d1b229d1461065f5780636ddd17131461067f57806370a0823114610699578063715018a6146106cf578063722b62ad146106e457806378109e541461070457600080fd5b80632e8fa8211161024f57806349bd5a5e11610208578063617fe0ed116101e2578063617fe0ed146105d757806362256589146105f6578063658d4b7f1461060b57806367ac77b41461062b57600080fd5b806349bd5a5e1461054b57806350db71fb14610597578063571ac8b0146105b757600080fd5b80632e8fa821146104b1578063313ce567146104c75780633705b392146104e957806344a33fd2146104ff57806346e421a21461051f578063470624021461053557600080fd5b806318160ddd116102bc578063201e799111610296578063201e79911461043c57806323b872dd1461045c57806329e04b4a1461047c5780632b112e491461049c57600080fd5b806318160ddd146103ef5780631da1db5e146104045780631e25dc541461042657600080fd5b8063026f7d151461030f5780630445b6671461033857806306fdde031461034e578063095ea7b3146103895780631161ae39146103b9578063180b0d7e146103d957600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b5061032560065481565b6040519081526020015b60405180910390f35b34801561034457600080fd5b50610325601d5481565b34801561035a57600080fd5b50604080518082019091526009815268546974616e3230323360b81b60208201525b60405161032f9190611e55565b34801561039557600080fd5b506103a96103a4366004611e9d565b610992565b604051901515815260200161032f565b3480156103c557600080fd5b506103a96103d4366004611ec9565b6109ff565b3480156103e557600080fd5b50610325600a5481565b3480156103fb57600080fd5b50600054610325565b34801561041057600080fd5b5061042461041f366004611eeb565b610a13565b005b34801561043257600080fd5b5061032560095481565b34801561044857600080fd5b50610424610457366004611ec9565b610a67565b34801561046857600080fd5b506103a9610477366004611f04565b610aa5565b34801561048857600080fd5b50610424610497366004611eeb565b610b67565b3480156104a857600080fd5b50610325610b96565b3480156104bd57600080fd5b50610325601e5481565b3480156104d357600080fd5b5060095b60405160ff909116815260200161032f565b3480156104f557600080fd5b5061032560045481565b34801561050b57600080fd5b5061042461051a366004611eeb565b610be8565b34801561052b57600080fd5b5061032560055481565b34801561054157600080fd5b5061032560035481565b34801561055757600080fd5b5061057f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161032f565b3480156105a357600080fd5b506104246105b2366004611f45565b610c23565b3480156105c357600080fd5b506103a96105d2366004611f83565b610c78565b3480156105e357600080fd5b50601a546103a990610100900460ff1681565b34801561060257600080fd5b50610424610c86565b34801561061757600080fd5b50610424610626366004611f45565b610cbd565b34801561063757600080fd5b5061057f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561066b57600080fd5b5061042461067a366004611eeb565b610d12565b34801561068b57600080fd5b50601c546103a99060ff1681565b3480156106a557600080fd5b506103256106b4366004611f83565b6001600160a01b031660009081526011602052604090205490565b3480156106db57600080fd5b50610424610d46565b3480156106f057600080fd5b50601a546104d79062010000900460ff1681565b34801561071057600080fd5b5061032560025481565b34801561072657600080fd5b5061032560015481565b34801561073c57600080fd5b5061042461074b366004611fa0565b610dba565b34801561075c57600080fd5b5061057f610e66565b34801561077157600080fd5b50600b546001600160a01b031661057f565b34801561078f57600080fd5b506040805180820190915260058152642a34ba30b760d91b602082015261037c565b3480156107bd57600080fd5b506103a96107cc366004611e9d565b610e7a565b3480156107dd57600080fd5b5060175461057f906001600160a01b031681565b3480156107fd57600080fd5b50610424610e87565b34801561081257600080fd5b50610325610821366004611eeb565b610ec2565b34801561083257600080fd5b50610424610841366004611fd2565b610f29565b34801561085257600080fd5b50610424610861366004611eeb565b610fd9565b34801561087257600080fd5b50610424610881366004611f45565b611008565b34801561089257600080fd5b506103256108a136600461201d565b6001600160a01b03918216600090815260126020908152604080832093909416825291909152205490565b3480156108d857600080fd5b5061032560085481565b3480156108ee57600080fd5b506104246108fd366004611eeb565b61105d565b34801561090e57600080fd5b5061042461091d366004611eeb565b61109f565b34801561092e57600080fd5b5061042461093d366004611f83565b6110ce565b34801561094e57600080fd5b5061032560075481565b34801561096457600080fd5b50610424610973366004611f45565b6111b9565b34801561098457600080fd5b50601a546103a99060ff1681565b3360008181526012602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906109ed9086815260200190565b60405180910390a35060015b92915050565b600082610a0b83610ec2565b119392505050565b600e5447906001600160a01b03166108fc6064610a308585612061565b610a3a9190612078565b6040518115909202916000818181858888f19350505050158015610a62573d6000803e3d6000fd5b505050565b600b546001600160a01b03163314610a9a5760405162461bcd60e51b8152600401610a919061209a565b60405180910390fd5b601891909155601955565b6001600160a01b038316600090815260126020908152604080832033845290915281205460001914610b52576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152601282528381203382529091529190912054610b2d91849061120e565b6001600160a01b03851660009081526012602090815260408083203384529091529020555b610b5d84848461123a565b90505b9392505050565b600b546001600160a01b03163314610b915760405162461bcd60e51b8152600401610a919061209a565b601d55565b6010546001600160a01b0316600090815260116020526040812054610be390600f546001600160a01b0316600090815260116020526040902054610bdd9060005490611726565b90611726565b905090565b600b546001600160a01b03163314610c125760405162461bcd60e51b8152600401610a919061209a565b47336108fc6064610a308585612061565b600b546001600160a01b03163314610c4d5760405162461bcd60e51b8152600401610a919061209a565b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b60006109f982600019610992565b600b546001600160a01b03163314610cb05760405162461bcd60e51b8152600401610a919061209a565b6000546001819055600255565b600b546001600160a01b03163314610ce75760405162461bcd60e51b8152600401610a919061209a565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b33600090815260116020526040902054811015610d4357600f54610d419033906001600160a01b031683611732565b505b50565b600b546001600160a01b03163314610d705760405162461bcd60e51b8152600401610a919061209a565b600b546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600b80546001600160a01b0319169055565b600b546001600160a01b03163314610de45760405162461bcd60e51b8152600401610a919061209a565b600584905560068390556007829055610e0782610e018686611806565b90611806565b6008819055600a829055605a11610e605760405162461bcd60e51b815260206004820152601860248201527f466565732063616e6e6f742062652074686174206869676800000000000000006044820152606401610a91565b50505050565b6000610be3600b546001600160a01b031690565b6000610b6033848461123a565b600b546001600160a01b03163314610eb15760405162461bcd60e51b8152600401610a919061209a565b601a805462ffffff19166001179055565b60006109f9610ecf610b96565b610f23610f1c6002610f167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660009081526011602052604090205490565b90611812565b8590611812565b9061181e565b600b546001600160a01b03163314610f535760405162461bcd60e51b8152600401610a919061209a565b6001600160a01b039081166000908152601360209081526040808320805460ff199081166001908117909255600e8054871686528386208054831690559686168086528386208054831684179055601590945291909320805490911690921790915560178054949092166001600160a01b03199485161790915581549092169091179055565b600b546001600160a01b031633146110035760405162461bcd60e51b8152600401610a919061209a565b600455565b600b546001600160a01b031633146110325760405162461bcd60e51b8152600401610a919061209a565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b600b546001600160a01b031633146110875760405162461bcd60e51b8152600401610a919061209a565b601d5481111561109a57601d54601e5550565b601e55565b600b546001600160a01b031633146110c95760405162461bcd60e51b8152600401610a919061209a565b600955565b600b546001600160a01b031633146110f85760405162461bcd60e51b8152600401610a919061209a565b6001600160a01b03811661115d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a91565b600b546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600b80546001600160a01b0319166001600160a01b0392909216919091179055565b600b546001600160a01b031633146111e35760405162461bcd60e51b8152600401610a919061209a565b6001600160a01b03919091166000908152601460205260409020805460ff1916911515919091179055565b600081848411156112325760405162461bcd60e51b8152600401610a919190611e55565b505050900390565b601f5460009060ff161561125a57611253848484611732565b9050610b60565b600b546001600160a01b038581169116148015906112865750600b546001600160a01b03848116911614155b156112d457601a5460ff166112d45760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610a91565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811690841614600081158261134557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031614155b90506001600160a01b038516301480159061136e5750600f546001600160a01b03868116911614155b80156113ac57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b80156113c65750600e546001600160a01b03868116911614155b80156113e057506017546001600160a01b03868116911614155b15611494576001600160a01b03851660009081526011602090815260408083205460159092529091205460ff166114925760025461141e86836120cf565b11156114925760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610a91565b505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b03161480156114dc5750601a54610100900460ff165b801561150157506001600160a01b03851660009081526016602052604090205460ff16155b156115ab576001600160a01b0385166000908152601b6020526040902054421161157b5760405162461bcd60e51b815260206004820152602560248201527f506c65617365207761697420666f7220316d696e206265747765656e2074776f604482015264206275797360d81b6064820152608401610a91565b601a546115919062010000900460ff16426120cf565b6001600160a01b0386166000908152601b60205260409020555b6001600160a01b03851660009081526014602052604090205460ff166115d5576115d5868561182a565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03891660009081526011909152919091205461162791869061120e565b6001600160a01b038716600090815260116020526040902055838115611661576009541561165c576116598786611893565b90505b6116ac565b6001600160a01b03871660009081526013602052604090205460ff16156116885784611693565b611693878685611935565b905061169d6119e6565b156116ac576116ac8787611a14565b6001600160a01b0386166000908152601160205260409020546116cf9082611806565b6001600160a01b0380881660008181526011602052604090819020939093559151908916906000805160206121e4833981519152906117119085815260200190565b60405180910390a35060019695505050505050565b6000610b6082846120e2565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038616600090815260119091529182205461178391849061120e565b6001600160a01b0380861660009081526011602052604080822093909355908516815220546117b29083611806565b6001600160a01b0380851660008181526011602052604090819020939093559151908616906000805160206121e4833981519152906117f49086815260200190565b60405180910390a35060019392505050565b6000610b6082846120cf565b6000610b608284612061565b6000610b608284612078565b6001548111158061185357506001600160a01b03821660009081526014602052604090205460ff165b610d415760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610a91565b600080600954905060006118be600a5460646118af9190612061565b610f236064610f168887611812565b306000908152601160205260409020549091506118db9082611806565b30600081815260116020526040908190209290925590516001600160a01b038716906000805160206121e48339815191529061191a9085815260200190565b60405180910390a361192c8482611726565b95945050505050565b6000808261194557600454611949565b6008545b9050600061196e600a54606461195f9190612061565b610f236064610f168987611812565b3060009081526011602052604090205490915061198b9082611806565b30600081815260116020526040908190209290925590516001600160a01b038816906000805160206121e4833981519152906119ca9085815260200190565b60405180910390a36119dc8582611726565b9695505050505050565b601f5460009060ff161580156119fe5750601c5460ff165b8015610be3575050306000526011602052600190565b601f805460ff1916600117905547600080808315611c7f576000611a3c6018546019546109ff565b611a4857600554611a4b565b60005b9050611a6d6002610f23600854610f2385601e5461181290919063ffffffff16565b91506000611a8683601e5461172690919063ffffffff16565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110611ac057611ac06120f5565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b62919061210b565b81600181518110611b7557611b756120f5565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f00000000000000000000000000000000000000000000000000000000000000009091169063791ac94790611bda908590600090869030904290600401612128565b600060405180830381600087803b158015611bf457600080fd5b505af1158015611c08573d6000803e3d6000fd5b505050506000611c21884761172690919063ffffffff16565b90506000611c3c611c3386600261181e565b60085490611726565b9050611c5c6002610f2383610f236005548761181290919063ffffffff16565b9650611c7781610f236006548561181290919063ffffffff16565b975050505050505b600e546040516bffffffffffffffffffffffff19606089811b8216602084015288901b1660348201526000916001600160a01b031690859060480160408051601f1981840301815290829052611cd491612199565b60006040518083038185875af1925050503d8060008114611d11576040519150601f19603f3d011682016040523d82523d6000602084013e611d16565b606091505b5050905080611d2457600080fd5b5060008115611e1e5760175460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990859060c40160606040518083038185885af1158015611dbc573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611de191906121b5565b505060408051858152602081018590527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b5050601f805460ff191690555050505050565b60005b83811015611e4c578181015183820152602001611e34565b50506000910152565b6020815260008251806020840152611e74816040850160208701611e31565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610d4357600080fd5b60008060408385031215611eb057600080fd5b8235611ebb81611e88565b946020939093013593505050565b60008060408385031215611edc57600080fd5b50508035926020909101359150565b600060208284031215611efd57600080fd5b5035919050565b600080600060608486031215611f1957600080fd5b8335611f2481611e88565b92506020840135611f3481611e88565b929592945050506040919091013590565b60008060408385031215611f5857600080fd5b8235611f6381611e88565b915060208301358015158114611f7857600080fd5b809150509250929050565b600060208284031215611f9557600080fd5b8135610b6081611e88565b60008060008060808587031215611fb657600080fd5b5050823594602084013594506040840135936060013592509050565b600080600060608486031215611fe757600080fd5b8335611ff281611e88565b9250602084013561200281611e88565b9150604084013561201281611e88565b809150509250925092565b6000806040838503121561203057600080fd5b823561203b81611e88565b91506020830135611f7881611e88565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176109f9576109f961204b565b60008261209557634e487b7160e01b600052601260045260246000fd5b500490565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b808201808211156109f9576109f961204b565b818103818111156109f9576109f961204b565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561211d57600080fd5b8151610b6081611e88565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156121785784516001600160a01b031683529383019391830191600101612153565b50506001600160a01b03969096166060850152505050608001529392505050565b600082516121ab818460208701611e31565b9190910192915050565b6000806000606084860312156121ca57600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212202f13f256d7ca88fdacb8dd4522660d5a0b1715b61321232ce690625134dfab2564736f6c63430008110033000000000000000000000000a65c9b6c3cb6cd23e383fd0703ac972cb93c687d

Deployed Bytecode

0x6080604052600436106103035760003560e01c80636d1b229d11610190578063d4fb9a01116100dc578063e53c30b011610095578063f2fde38b1161006f578063f2fde38b14610922578063f53fd58414610942578063f84ba65d14610958578063ffb54a991461097857600080fd5b8063e53c30b0146108cc578063e632313c146108e2578063ee9ef29e1461090257600080fd5b8063d4fb9a01146107f1578063d51ed1c814610806578063d7c0103214610826578063dcf7aef314610846578063dd395c6314610866578063dd62ed3e1461088657600080fd5b80637d1db4a5116101495780638da5cb5b116101235780638da5cb5b1461076557806395d89b4114610783578063a9059cbb146107b1578063ca33e64c146107d157600080fd5b80637d1db4a51461071a5780638038cbd314610730578063893d20e81461075057600080fd5b80636d1b229d1461065f5780636ddd17131461067f57806370a0823114610699578063715018a6146106cf578063722b62ad146106e457806378109e541461070457600080fd5b80632e8fa8211161024f57806349bd5a5e11610208578063617fe0ed116101e2578063617fe0ed146105d757806362256589146105f6578063658d4b7f1461060b57806367ac77b41461062b57600080fd5b806349bd5a5e1461054b57806350db71fb14610597578063571ac8b0146105b757600080fd5b80632e8fa821146104b1578063313ce567146104c75780633705b392146104e957806344a33fd2146104ff57806346e421a21461051f578063470624021461053557600080fd5b806318160ddd116102bc578063201e799111610296578063201e79911461043c57806323b872dd1461045c57806329e04b4a1461047c5780632b112e491461049c57600080fd5b806318160ddd146103ef5780631da1db5e146104045780631e25dc541461042657600080fd5b8063026f7d151461030f5780630445b6671461033857806306fdde031461034e578063095ea7b3146103895780631161ae39146103b9578063180b0d7e146103d957600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b5061032560065481565b6040519081526020015b60405180910390f35b34801561034457600080fd5b50610325601d5481565b34801561035a57600080fd5b50604080518082019091526009815268546974616e3230323360b81b60208201525b60405161032f9190611e55565b34801561039557600080fd5b506103a96103a4366004611e9d565b610992565b604051901515815260200161032f565b3480156103c557600080fd5b506103a96103d4366004611ec9565b6109ff565b3480156103e557600080fd5b50610325600a5481565b3480156103fb57600080fd5b50600054610325565b34801561041057600080fd5b5061042461041f366004611eeb565b610a13565b005b34801561043257600080fd5b5061032560095481565b34801561044857600080fd5b50610424610457366004611ec9565b610a67565b34801561046857600080fd5b506103a9610477366004611f04565b610aa5565b34801561048857600080fd5b50610424610497366004611eeb565b610b67565b3480156104a857600080fd5b50610325610b96565b3480156104bd57600080fd5b50610325601e5481565b3480156104d357600080fd5b5060095b60405160ff909116815260200161032f565b3480156104f557600080fd5b5061032560045481565b34801561050b57600080fd5b5061042461051a366004611eeb565b610be8565b34801561052b57600080fd5b5061032560055481565b34801561054157600080fd5b5061032560035481565b34801561055757600080fd5b5061057f7f0000000000000000000000004bd4b29338ef8a69cee1c39a46f3bfaa1e172afd81565b6040516001600160a01b03909116815260200161032f565b3480156105a357600080fd5b506104246105b2366004611f45565b610c23565b3480156105c357600080fd5b506103a96105d2366004611f83565b610c78565b3480156105e357600080fd5b50601a546103a990610100900460ff1681565b34801561060257600080fd5b50610424610c86565b34801561061757600080fd5b50610424610626366004611f45565b610cbd565b34801561063757600080fd5b5061057f7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561066b57600080fd5b5061042461067a366004611eeb565b610d12565b34801561068b57600080fd5b50601c546103a99060ff1681565b3480156106a557600080fd5b506103256106b4366004611f83565b6001600160a01b031660009081526011602052604090205490565b3480156106db57600080fd5b50610424610d46565b3480156106f057600080fd5b50601a546104d79062010000900460ff1681565b34801561071057600080fd5b5061032560025481565b34801561072657600080fd5b5061032560015481565b34801561073c57600080fd5b5061042461074b366004611fa0565b610dba565b34801561075c57600080fd5b5061057f610e66565b34801561077157600080fd5b50600b546001600160a01b031661057f565b34801561078f57600080fd5b506040805180820190915260058152642a34ba30b760d91b602082015261037c565b3480156107bd57600080fd5b506103a96107cc366004611e9d565b610e7a565b3480156107dd57600080fd5b5060175461057f906001600160a01b031681565b3480156107fd57600080fd5b50610424610e87565b34801561081257600080fd5b50610325610821366004611eeb565b610ec2565b34801561083257600080fd5b50610424610841366004611fd2565b610f29565b34801561085257600080fd5b50610424610861366004611eeb565b610fd9565b34801561087257600080fd5b50610424610881366004611f45565b611008565b34801561089257600080fd5b506103256108a136600461201d565b6001600160a01b03918216600090815260126020908152604080832093909416825291909152205490565b3480156108d857600080fd5b5061032560085481565b3480156108ee57600080fd5b506104246108fd366004611eeb565b61105d565b34801561090e57600080fd5b5061042461091d366004611eeb565b61109f565b34801561092e57600080fd5b5061042461093d366004611f83565b6110ce565b34801561094e57600080fd5b5061032560075481565b34801561096457600080fd5b50610424610973366004611f45565b6111b9565b34801561098457600080fd5b50601a546103a99060ff1681565b3360008181526012602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906109ed9086815260200190565b60405180910390a35060015b92915050565b600082610a0b83610ec2565b119392505050565b600e5447906001600160a01b03166108fc6064610a308585612061565b610a3a9190612078565b6040518115909202916000818181858888f19350505050158015610a62573d6000803e3d6000fd5b505050565b600b546001600160a01b03163314610a9a5760405162461bcd60e51b8152600401610a919061209a565b60405180910390fd5b601891909155601955565b6001600160a01b038316600090815260126020908152604080832033845290915281205460001914610b52576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152601282528381203382529091529190912054610b2d91849061120e565b6001600160a01b03851660009081526012602090815260408083203384529091529020555b610b5d84848461123a565b90505b9392505050565b600b546001600160a01b03163314610b915760405162461bcd60e51b8152600401610a919061209a565b601d55565b6010546001600160a01b0316600090815260116020526040812054610be390600f546001600160a01b0316600090815260116020526040902054610bdd9060005490611726565b90611726565b905090565b600b546001600160a01b03163314610c125760405162461bcd60e51b8152600401610a919061209a565b47336108fc6064610a308585612061565b600b546001600160a01b03163314610c4d5760405162461bcd60e51b8152600401610a919061209a565b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b60006109f982600019610992565b600b546001600160a01b03163314610cb05760405162461bcd60e51b8152600401610a919061209a565b6000546001819055600255565b600b546001600160a01b03163314610ce75760405162461bcd60e51b8152600401610a919061209a565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b33600090815260116020526040902054811015610d4357600f54610d419033906001600160a01b031683611732565b505b50565b600b546001600160a01b03163314610d705760405162461bcd60e51b8152600401610a919061209a565b600b546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600b80546001600160a01b0319169055565b600b546001600160a01b03163314610de45760405162461bcd60e51b8152600401610a919061209a565b600584905560068390556007829055610e0782610e018686611806565b90611806565b6008819055600a829055605a11610e605760405162461bcd60e51b815260206004820152601860248201527f466565732063616e6e6f742062652074686174206869676800000000000000006044820152606401610a91565b50505050565b6000610be3600b546001600160a01b031690565b6000610b6033848461123a565b600b546001600160a01b03163314610eb15760405162461bcd60e51b8152600401610a919061209a565b601a805462ffffff19166001179055565b60006109f9610ecf610b96565b610f23610f1c6002610f167f0000000000000000000000004bd4b29338ef8a69cee1c39a46f3bfaa1e172afd6001600160a01b031660009081526011602052604090205490565b90611812565b8590611812565b9061181e565b600b546001600160a01b03163314610f535760405162461bcd60e51b8152600401610a919061209a565b6001600160a01b039081166000908152601360209081526040808320805460ff199081166001908117909255600e8054871686528386208054831690559686168086528386208054831684179055601590945291909320805490911690921790915560178054949092166001600160a01b03199485161790915581549092169091179055565b600b546001600160a01b031633146110035760405162461bcd60e51b8152600401610a919061209a565b600455565b600b546001600160a01b031633146110325760405162461bcd60e51b8152600401610a919061209a565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b600b546001600160a01b031633146110875760405162461bcd60e51b8152600401610a919061209a565b601d5481111561109a57601d54601e5550565b601e55565b600b546001600160a01b031633146110c95760405162461bcd60e51b8152600401610a919061209a565b600955565b600b546001600160a01b031633146110f85760405162461bcd60e51b8152600401610a919061209a565b6001600160a01b03811661115d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a91565b600b546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600b80546001600160a01b0319166001600160a01b0392909216919091179055565b600b546001600160a01b031633146111e35760405162461bcd60e51b8152600401610a919061209a565b6001600160a01b03919091166000908152601460205260409020805460ff1916911515919091179055565b600081848411156112325760405162461bcd60e51b8152600401610a919190611e55565b505050900390565b601f5460009060ff161561125a57611253848484611732565b9050610b60565b600b546001600160a01b038581169116148015906112865750600b546001600160a01b03848116911614155b156112d457601a5460ff166112d45760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610a91565b7f0000000000000000000000004bd4b29338ef8a69cee1c39a46f3bfaa1e172afd6001600160a01b0390811690841614600081158261134557507f0000000000000000000000004bd4b29338ef8a69cee1c39a46f3bfaa1e172afd6001600160a01b0316866001600160a01b031614155b90506001600160a01b038516301480159061136e5750600f546001600160a01b03868116911614155b80156113ac57507f0000000000000000000000004bd4b29338ef8a69cee1c39a46f3bfaa1e172afd6001600160a01b0316856001600160a01b031614155b80156113c65750600e546001600160a01b03868116911614155b80156113e057506017546001600160a01b03868116911614155b15611494576001600160a01b03851660009081526011602090815260408083205460159092529091205460ff166114925760025461141e86836120cf565b11156114925760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610a91565b505b7f0000000000000000000000004bd4b29338ef8a69cee1c39a46f3bfaa1e172afd6001600160a01b0316866001600160a01b03161480156114dc5750601a54610100900460ff165b801561150157506001600160a01b03851660009081526016602052604090205460ff16155b156115ab576001600160a01b0385166000908152601b6020526040902054421161157b5760405162461bcd60e51b815260206004820152602560248201527f506c65617365207761697420666f7220316d696e206265747765656e2074776f604482015264206275797360d81b6064820152608401610a91565b601a546115919062010000900460ff16426120cf565b6001600160a01b0386166000908152601b60205260409020555b6001600160a01b03851660009081526014602052604090205460ff166115d5576115d5868561182a565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03891660009081526011909152919091205461162791869061120e565b6001600160a01b038716600090815260116020526040902055838115611661576009541561165c576116598786611893565b90505b6116ac565b6001600160a01b03871660009081526013602052604090205460ff16156116885784611693565b611693878685611935565b905061169d6119e6565b156116ac576116ac8787611a14565b6001600160a01b0386166000908152601160205260409020546116cf9082611806565b6001600160a01b0380881660008181526011602052604090819020939093559151908916906000805160206121e4833981519152906117119085815260200190565b60405180910390a35060019695505050505050565b6000610b6082846120e2565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038616600090815260119091529182205461178391849061120e565b6001600160a01b0380861660009081526011602052604080822093909355908516815220546117b29083611806565b6001600160a01b0380851660008181526011602052604090819020939093559151908616906000805160206121e4833981519152906117f49086815260200190565b60405180910390a35060019392505050565b6000610b6082846120cf565b6000610b608284612061565b6000610b608284612078565b6001548111158061185357506001600160a01b03821660009081526014602052604090205460ff165b610d415760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610a91565b600080600954905060006118be600a5460646118af9190612061565b610f236064610f168887611812565b306000908152601160205260409020549091506118db9082611806565b30600081815260116020526040908190209290925590516001600160a01b038716906000805160206121e48339815191529061191a9085815260200190565b60405180910390a361192c8482611726565b95945050505050565b6000808261194557600454611949565b6008545b9050600061196e600a54606461195f9190612061565b610f236064610f168987611812565b3060009081526011602052604090205490915061198b9082611806565b30600081815260116020526040908190209290925590516001600160a01b038816906000805160206121e4833981519152906119ca9085815260200190565b60405180910390a36119dc8582611726565b9695505050505050565b601f5460009060ff161580156119fe5750601c5460ff165b8015610be3575050306000526011602052600190565b601f805460ff1916600117905547600080808315611c7f576000611a3c6018546019546109ff565b611a4857600554611a4b565b60005b9050611a6d6002610f23600854610f2385601e5461181290919063ffffffff16565b91506000611a8683601e5461172690919063ffffffff16565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110611ac057611ac06120f5565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b62919061210b565b81600181518110611b7557611b756120f5565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063791ac94790611bda908590600090869030904290600401612128565b600060405180830381600087803b158015611bf457600080fd5b505af1158015611c08573d6000803e3d6000fd5b505050506000611c21884761172690919063ffffffff16565b90506000611c3c611c3386600261181e565b60085490611726565b9050611c5c6002610f2383610f236005548761181290919063ffffffff16565b9650611c7781610f236006548561181290919063ffffffff16565b975050505050505b600e546040516bffffffffffffffffffffffff19606089811b8216602084015288901b1660348201526000916001600160a01b031690859060480160408051601f1981840301815290829052611cd491612199565b60006040518083038185875af1925050503d8060008114611d11576040519150601f19603f3d011682016040523d82523d6000602084013e611d16565b606091505b5050905080611d2457600080fd5b5060008115611e1e5760175460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990859060c40160606040518083038185885af1158015611dbc573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611de191906121b5565b505060408051858152602081018590527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b5050601f805460ff191690555050505050565b60005b83811015611e4c578181015183820152602001611e34565b50506000910152565b6020815260008251806020840152611e74816040850160208701611e31565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610d4357600080fd5b60008060408385031215611eb057600080fd5b8235611ebb81611e88565b946020939093013593505050565b60008060408385031215611edc57600080fd5b50508035926020909101359150565b600060208284031215611efd57600080fd5b5035919050565b600080600060608486031215611f1957600080fd5b8335611f2481611e88565b92506020840135611f3481611e88565b929592945050506040919091013590565b60008060408385031215611f5857600080fd5b8235611f6381611e88565b915060208301358015158114611f7857600080fd5b809150509250929050565b600060208284031215611f9557600080fd5b8135610b6081611e88565b60008060008060808587031215611fb657600080fd5b5050823594602084013594506040840135936060013592509050565b600080600060608486031215611fe757600080fd5b8335611ff281611e88565b9250602084013561200281611e88565b9150604084013561201281611e88565b809150509250925092565b6000806040838503121561203057600080fd5b823561203b81611e88565b91506020830135611f7881611e88565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176109f9576109f961204b565b60008261209557634e487b7160e01b600052601260045260246000fd5b500490565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b808201808211156109f9576109f961204b565b818103818111156109f9576109f961204b565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561211d57600080fd5b8151610b6081611e88565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156121785784516001600160a01b031683529383019391830191600101612153565b50506001600160a01b03969096166060850152505050608001529392505050565b600082516121ab818460208701611e31565b9190910192915050565b6000806000606084860312156121ca57600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212202f13f256d7ca88fdacb8dd4522660d5a0b1715b61321232ce690625134dfab2564736f6c63430008110033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000a65c9b6c3cb6cd23e383fd0703ac972cb93c687d

-----Decoded View---------------
Arg [0] : _feeAddress (address): 0xa65c9b6C3cB6Cd23E383FD0703Ac972Cb93c687D

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000a65c9b6c3cb6cd23e383fd0703ac972cb93c687d


Deployed Bytecode Sourcemap

17292:14268:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;718:37;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;718:37:0;;;;;;;;18362:56;;;;;;;;;;;;;;;;20108:80;;;;;;;;;;-1:-1:-1;20180:5:0;;;;;;;;;;;;-1:-1:-1;;;20180:5:0;;;;20108:80;;;;;;;:::i;20532:216::-;;;;;;;;;;-1:-1:-1;20532:216:0;;;;;:::i;:::-;;:::i;:::-;;;1473:14:1;;1466:22;1448:41;;1436:2;1421:18;20532:216:0;1308:187:1;31336:150:0;;;;;;;;;;-1:-1:-1;31336:150:0;;;;;:::i;:::-;;:::i;992:39::-;;;;;;;;;;;;;;;;19838:88;;;;;;;;;;-1:-1:-1;19893:7:0;19911:12;19838:88;;26056:203;;;;;;;;;;-1:-1:-1;26056:203:0;;;;;:::i;:::-;;:::i;:::-;;894:37;;;;;;;;;;;;;;;;30810:184;;;;;;;;;;-1:-1:-1;30810:184:0;;;;;:::i;:::-;;:::i;21050:370::-;;;;;;;;;;-1:-1:-1;21050:370:0;;;;;:::i;:::-;;:::i;30461:112::-;;;;;;;;;;-1:-1:-1;30461:112:0;;;;;:::i;:::-;;:::i;31002:142::-;;;;;;;;;;;;;:::i;18425:53::-;;;;;;;;;;;;;;;;19932:80;;;;;;;;;;-1:-1:-1;327:1:0;19932:80;;;2571:4:1;2559:17;;;2541:36;;2529:2;2514:18;19932:80:0;2399:184:1;623:42:0;;;;;;;;;;;;;;;;26269:216;;;;;;;;;;-1:-1:-1;26269:216:0;;;;;:::i;:::-;;:::i;674:37::-;;;;;;;;;;;;;;;;579;;;;;;;;;;;;;;;;18092:38;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2752:32:1;;;2734:51;;2722:2;2707:18;18092:38:0;2588:203:1;29003:131:0;;;;;;;;;;-1:-1:-1;29003:131:0;;;;;:::i;:::-;;:::i;20756:122::-;;;;;;;;;;-1:-1:-1;20756:122:0;;;;;:::i;:::-;;:::i;18179:37::-;;;;;;;;;;-1:-1:-1;18179:37:0;;;;;;;;;;;21428:134;;;;;;;;;;;;;:::i;28608:121::-;;;;;;;;;;-1:-1:-1;28608:121:0;;;;;:::i;:::-;;:::i;18035:50::-;;;;;;;;;;;;;;;21725:231;;;;;;;;;;-1:-1:-1;21725:231:0;;;;;:::i;:::-;;:::i;18325:30::-;;;;;;;;;;-1:-1:-1;18325:30:0;;;;;;;;20280:105;;;;;;;;;;-1:-1:-1;20280:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;20364:18:0;20346:7;20364:18;;;:9;:18;;;;;;;20280:105;8759:148;;;;;;;;;;;;;:::i;18223:39::-;;;;;;;;;;-1:-1:-1;18223:39:0;;;;;;;;;;;508:59;;;;;;;;;;;;;;;;398:56;;;;;;;;;;;;;;;;29240:486;;;;;;;;;;-1:-1:-1;29240:486:0;;;;;:::i;:::-;;:::i;20194:80::-;;;;;;;;;;;;;:::i;8116:79::-;;;;;;;;;;-1:-1:-1;8181:6:0;;-1:-1:-1;;;;;8181:6:0;8116:79;;20018:84;;;;;;;;;;-1:-1:-1;20092:7:0;;;;;;;;;;;;-1:-1:-1;;;20092:7:0;;;;20018:84;;20886:156;;;;;;;;;;-1:-1:-1;20886:156:0;;;;;:::i;:::-;;:::i;17906:36::-;;;;;;;;;;-1:-1:-1;17906:36:0;;;;-1:-1:-1;;;;;17906:36:0;;;26516:152;;;;;;;;;;;;;:::i;31152:176::-;;;;;;;;;;-1:-1:-1;31152:176:0;;;;;:::i;:::-;;:::i;30018:435::-;;;;;;;;;;-1:-1:-1;30018:435:0;;;;;:::i;:::-;;:::i;29734:96::-;;;;;;;;;;-1:-1:-1;29734:96:0;;;;;:::i;:::-;;:::i;28737:121::-;;;;;;;;;;-1:-1:-1;28737:121:0;;;;;:::i;:::-;;:::i;20391:133::-;;;;;;;;;;-1:-1:-1;20391:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;20493:19:0;;;20475:7;20493:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;20391:133;806:79;;;;;;;;;;;;;;;;30581:221;;;;;;;;;;-1:-1:-1;30581:221:0;;;;;:::i;:::-;;:::i;29144:88::-;;;;;;;;;;-1:-1:-1;29144:88:0;;;;;:::i;:::-;;:::i;9062:244::-;;;;;;;;;;-1:-1:-1;9062:244:0;;;;;:::i;:::-;;:::i;762:37::-;;;;;;;;;;;;;;;;28866:129;;;;;;;;;;-1:-1:-1;28866:129:0;;;;;:::i;:::-;;:::i;18139:31::-;;;;;;;;;;-1:-1:-1;18139:31:0;;;;;;;;20532:216;20636:10;20607:4;20624:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;20624:32:0;;;;;;;;;;:41;;;20681:37;20607:4;;20624:32;;20681:37;;;;20659:6;160:25:1;;148:2;133:18;;14:177;20681:37:0;;;;;;;;-1:-1:-1;20736:4:0;20532:216;;;;;:::o;31336:150::-;31416:4;31472:6;31440:29;31460:8;31440:19;:29::i;:::-;:38;;31336:150;-1:-1:-1;;;31336:150:0:o;26056:203::-;26190:15;;26150:21;;-1:-1:-1;;;;;26190:15:0;26182:69;26247:3;26216:28;26228:16;26150:21;26216:28;:::i;:::-;:34;;;;:::i;:::-;26182:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26119:140;26056:203;:::o;30810:184::-;8328:6;;-1:-1:-1;;;;;8328:6:0;6780:10;8328:22;8320:67;;;;-1:-1:-1;;;8320:67:0;;;;;;;:::i;:::-;;;;;;;;;30909:15:::1;:25:::0;;;;30945:26:::1;:41:::0;30810:184::o;21050:370::-;-1:-1:-1;;;;;21170:19:0;;21150:4;21170:19;;;:11;:19;;;;;;;;21190:10;21170:31;;;;;;;;-1:-1:-1;;21170:52:0;21167:186;;21272:69;;;;;;;;;;;-1:-1:-1;;;21272:69:0;;;;;;;;-1:-1:-1;;;;;21272:19:0;;-1:-1:-1;21272:19:0;;;:11;:19;;;;;21292:10;21272:31;;;;;;;;;;:69;;21308:6;;21272:35;:69::i;:::-;-1:-1:-1;;;;;21238:19:0;;;;;;:11;:19;;;;;;;;21258:10;21238:31;;;;;;;:103;21167:186;21372:40;21386:6;21394:9;21405:6;21372:13;:40::i;:::-;21365:47;;21050:370;;;;;;:::o;30461:112::-;8328:6;;-1:-1:-1;;;;;8328:6:0;6780:10;8328:22;8320:67;;;;-1:-1:-1;;;8320:67:0;;;;;;;:::i;:::-;30542:13:::1;:23:::0;30461:112::o;31002:142::-;31130:4;;-1:-1:-1;;;;;31130:4:0;31055:7;20364:18;;;:9;:18;;;;;;31082:54;;31109:4;;-1:-1:-1;;;;;31109:4:0;20346:7;20364:18;;;:9;:18;;;;;;31082:33;;:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;31075:61;;31002:142;:::o;26269:216::-;8328:6;;-1:-1:-1;;;;;8328:6:0;6780:10;8328:22;8320:67;;;;-1:-1:-1;;;8320:67:0;;;;;;;:::i;:::-;26381:21:::1;26421:10;26413:64;26473:3;26442:28;26454:16:::0;26381:21;26442:28:::1;:::i;29003:131::-:0;8328:6;;-1:-1:-1;;;;;8328:6:0;6780:10;8328:22;8320:67;;;;-1:-1:-1;;;8320:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29093:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;29093:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29003:131::o;20756:122::-;20811:4;20835:35;20843:7;-1:-1:-1;;20835:7:0;:35::i;21428:134::-;8328:6;;-1:-1:-1;;;;;8328:6:0;6780:10;8328:22;8320:67;;;;-1:-1:-1;;;8320:67:0;;;;;;;:::i;:::-;21501:12:::1;::::0;21486::::1;:27:::0;;;21524:15:::1;:30:::0;21428:134::o;28608:121::-;8328:6;;-1:-1:-1;;;;;8328:6:0;6780:10;8328:22;8320:67;;;;-1:-1:-1;;;8320:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28693:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;28693:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28608:121::o;21725:231::-;21860:10;21850:21;;;;:9;:21;;;;;;:30;-1:-1:-1;21847:102:0;;;21924:4;;21897:40;;21912:10;;-1:-1:-1;;;;;21924:4:0;21930:6;21897:14;:40::i;:::-;;21847:102;21725:231;:::o;8759:148::-;8328:6;;-1:-1:-1;;;;;8328:6:0;6780:10;8328:22;8320:67;;;;-1:-1:-1;;;8320:67:0;;;;;;;:::i;:::-;8850:6:::1;::::0;8829:40:::1;::::0;8866:1:::1;::::0;-1:-1:-1;;;;;8850:6:0::1;::::0;8829:40:::1;::::0;8866:1;;8829:40:::1;8880:6;:19:::0;;-1:-1:-1;;;;;;8880:19:0::1;::::0;;8759:148::o;29240:486::-;8328:6;;-1:-1:-1;;;;;8328:6:0;6780:10;8328:22;8320:67;;;;-1:-1:-1;;;8320:67:0;;;;;;;:::i;:::-;29400:9:::1;:25:::0;;;29436:13:::1;:36:::0;;;29483:15:::1;:37:::0;;;29546:64:::1;29501:19:::0;29546:39:::1;29412:13:::0;29452:20;29546:17:::1;:39::i;:::-;:43:::0;::::1;:64::i;:::-;29531:12;:79:::0;;;29621:14:::1;:32:::0;;;29687:2:::1;-1:-1:-1::0;29664:54:0::1;;;::::0;-1:-1:-1;;;29664:54:0;;6111:2:1;29664:54:0::1;::::0;::::1;6093:21:1::0;6150:2;6130:18;;;6123:30;6189:26;6169:18;;;6162:54;6233:18;;29664:54:0::1;5909:348:1::0;29664:54:0::1;29240:486:::0;;;;:::o;20194:80::-;20246:7;20264;8181:6;;-1:-1:-1;;;;;8181:6:0;;8116:79;20886:156;20966:4;20990:44;21004:10;21016:9;21027:6;20990:13;:44::i;26516:152::-;8328:6;;-1:-1:-1;;;;;8328:6:0;6780:10;8328:22;8320:67;;;;-1:-1:-1;;;8320:67:0;;;;;;;:::i;:::-;26569:11:::1;:18:::0;;-1:-1:-1;;26635:25:0;26583:4:::1;26635:25:::0;;;26516:152::o;31152:176::-;31220:7;31247:73;31297:22;:20;:22::i;:::-;31247:45;31260:31;31289:1;31260:24;31270:13;-1:-1:-1;;;;;20364:18:0;20346:7;20364:18;;;:9;:18;;;;;;;20280:105;31260:24;:28;;:31::i;:::-;31247:8;;:12;:45::i;:::-;:49;;:73::i;30018:435::-;8328:6;;-1:-1:-1;;;;;8328:6:0;6780:10;8328:22;8320:67;;;;-1:-1:-1;;;8320:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30160:26:0;;::::1;;::::0;;;:11:::1;:26;::::0;;;;;;;:33;;-1:-1:-1;;30160:33:0;;::::1;30189:4;30160:33:::0;;::::1;::::0;;;30216:15:::1;::::0;;;::::1;30204:28:::0;;;;;:36;;;::::1;::::0;;30251:32;;::::1;::::0;;;;;;:39;;;::::1;::::0;::::1;::::0;;30301:11:::1;:32:::0;;;;;;;:39;;;;::::1;::::0;;::::1;::::0;;;30351:21:::1;:46:::0;;;;;::::1;-1:-1:-1::0;;;;;;30351:46:0;;::::1;;::::0;;;30408:37;;;;::::1;::::0;;::::1;::::0;;30018:435::o;29734:96::-;8328:6;;-1:-1:-1;;;;;8328:6:0;6780:10;8328:22;8320:67;;;;-1:-1:-1;;;8320:67:0;;;;;;;:::i;:::-;29802:11:::1;:20:::0;29734:96::o;28737:121::-;8328:6;;-1:-1:-1;;;;;8328:6:0;6780:10;8328:22;8320:67;;;;-1:-1:-1;;;8320:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28822:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;28822:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28737:121::o;30581:221::-;8328:6;;-1:-1:-1;;;;;8328:6:0;6780:10;8328:22;8320:67;;;;-1:-1:-1;;;8320:67:0;;;;;;;:::i;:::-;30666:13:::1;;30656:7;:23;30653:134;;;30709:13;::::0;30696:10:::1;:26:::0;21725:231;:::o;30653:134::-:1;30755:10;:20:::0;30581:221::o;29144:88::-;8328:6;;-1:-1:-1;;;;;8328:6:0;6780:10;8328:22;8320:67;;;;-1:-1:-1;;;8320:67:0;;;;;;;:::i;:::-;29210:8:::1;:14:::0;29144:88::o;9062:244::-;8328:6;;-1:-1:-1;;;;;8328:6:0;6780:10;8328:22;8320:67;;;;-1:-1:-1;;;8320:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9151:22:0;::::1;9143:73;;;::::0;-1:-1:-1;;;9143:73:0;;6464:2:1;9143:73:0::1;::::0;::::1;6446:21:1::0;6503:2;6483:18;;;6476:30;6542:34;6522:18;;;6515:62;-1:-1:-1;;;6593:18:1;;;6586:36;6639:19;;9143:73:0::1;6262:402:1::0;9143:73:0::1;9253:6;::::0;9232:38:::1;::::0;-1:-1:-1;;;;;9232:38:0;;::::1;::::0;9253:6:::1;::::0;9232:38:::1;::::0;9253:6:::1;::::0;9232:38:::1;9281:6;:17:::0;;-1:-1:-1;;;;;;9281:17:0::1;-1:-1:-1::0;;;;;9281:17:0;;;::::1;::::0;;;::::1;::::0;;9062:244::o;28866:129::-;8328:6;;-1:-1:-1;;;;;8328:6:0;6780:10;8328:22;8320:67;;;;-1:-1:-1;;;8320:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28955:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;28955:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28866:129::o;3788:240::-;3908:7;3969:12;3961:6;;;;3953:29;;;;-1:-1:-1;;;3953:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;4004:5:0;;;3788:240::o;22031:2357::-;22143:6;;22123:4;;22143:6;;22140:63;;;22159:41;22174:6;22182:9;22193:6;22159:14;:41::i;:::-;22152:48;;;;22140:63;8181:6;;-1:-1:-1;;;;;22218:17:0;;;8181:6;;22218:17;;;;:41;;-1:-1:-1;8181:6:0;;-1:-1:-1;;;;;22239:20:0;;;8181:6;;22239:20;;22218:41;22215:115;;;22283:11;;;;22275:43;;;;-1:-1:-1;;;22275:43:0;;6871:2:1;22275:43:0;;;6853:21:1;6910:2;6890:18;;;6883:30;-1:-1:-1;;;6929:18:1;;;6922:50;6989:18;;22275:43:0;6669:344:1;22275:43:0;22370:13;-1:-1:-1;;;;;22357:26:0;;;;;;;22342:11;22414:26;;22357;22414:53;;;22454:13;-1:-1:-1;;;;;22444:23:0;:6;-1:-1:-1;;;;;22444:23:0;;;22414:53;22395:73;-1:-1:-1;;;;;;22485:26:0;;22506:4;22485:26;;;;:70;;-1:-1:-1;22550:4:0;;-1:-1:-1;;;;;22529:26:0;;;22550:4;;22529:26;;22485:70;:114;;;;;22586:13;-1:-1:-1;;;;;22573:26:0;:9;-1:-1:-1;;;;;22573:26:0;;;22485:114;:160;;;;-1:-1:-1;22630:15:0;;-1:-1:-1;;;;;22617:28:0;;;22630:15;;22617:28;;22485:160;:212;;;;-1:-1:-1;22676:21:0;;-1:-1:-1;;;;;22663:34:0;;;22676:21;;22663:34;;22485:212;22481:486;;;-1:-1:-1;;;;;20364:18:0;;22723;20364;;;:9;:18;;;;;;;;;22783:11;:22;;;;;;;;;22779:177;;22859:15;;22835:19;22848:6;22835:10;:19;:::i;:::-;22834:40;;22826:114;;;;-1:-1:-1;;;22826:114:0;;7350:2:1;22826:114:0;;;7332:21:1;7389:2;7369:18;;;7362:30;7428:34;7408:18;;;7401:62;7499:32;7479:18;;;7472:60;7549:19;;22826:114:0;7148:426:1;22826:114:0;22708:259;22481:486;22993:13;-1:-1:-1;;;;;22983:23:0;:6;-1:-1:-1;;;;;22983:23:0;;:58;;;;-1:-1:-1;23023:18:0;;;;;;;22983:58;:103;;;;-1:-1:-1;;;;;;23059:27:0;;;;;;:16;:27;;;;;;;;23058:28;22983:103;22979:317;;;-1:-1:-1;;;;;23120:24:0;;;;;;:13;:24;;;;;;23147:15;-1:-1:-1;23112:91:0;;;;-1:-1:-1;;;23112:91:0;;7781:2:1;23112:91:0;;;7763:21:1;7820:2;7800:18;;;7793:30;7859:34;7839:18;;;7832:62;-1:-1:-1;;;7910:18:1;;;7903:35;7955:19;;23112:91:0;7579:401:1;23112:91:0;23263:21;;23245:39;;23263:21;;;;;23245:15;:39;:::i;:::-;-1:-1:-1;;;;;23218:24:0;;;;;;:13;:24;;;;;:66;22979:317;-1:-1:-1;;;;;23518:26:0;;;;;;:15;:26;;;;;;;;23514:87;;23561:28;23574:6;23582;23561:12;:28::i;:::-;23660:53;;;;;;;;;;;-1:-1:-1;;;23660:53:0;;;;;;;;-1:-1:-1;;;;;23660:17:0;;-1:-1:-1;23660:17:0;;;:9;:17;;;;;;;;:53;;23682:6;;23660:21;:53::i;:::-;-1:-1:-1;;;;;23640:17:0;;;;;;:9;:17;;;;;:73;23751:6;23887:335;;;;23920:8;;:12;23917:100;;23970:31;23986:6;23994;23970:15;:31::i;:::-;23953:48;;23917:100;23887:335;;;-1:-1:-1;;;;;24995:19:0;;24970:4;24995:19;;;:11;:19;;;;;;;;24994:20;24066:64;;24124:6;24066:64;;;24090:31;24098:6;24106;24114;24090:7;:31::i;:::-;24049:81;;24162:16;:14;:16::i;:::-;24159:52;;;24181:27;24190:6;24198:9;24181:8;:27::i;:::-;-1:-1:-1;;;;;24257:20:0;;;;;;:9;:20;;;;;;:40;;24282:14;24257:24;:40::i;:::-;-1:-1:-1;;;;;24234:20:0;;;;;;;:9;:20;;;;;;;:63;;;;24315:43;;;;;;-1:-1:-1;;;;;;;;;;;24315:43:0;;;24343:14;160:25:1;;148:2;133:18;;14:177;24315:43:0;;;;;;;;-1:-1:-1;24376:4:0;;22031:2357;-1:-1:-1;;;;;;22031:2357:0:o;1890:98::-;1948:7;1975:5;1979:1;1975;:5;:::i;24396:330::-;24526:53;;;;;;;;;;;-1:-1:-1;;;24526:53:0;;;;;;;;-1:-1:-1;;;;;24526:17:0;;24489:4;24526:17;;;:9;:17;;;;;;;:53;;24548:6;;24526:21;:53::i;:::-;-1:-1:-1;;;;;24506:17:0;;;;;;;:9;:17;;;;;;:73;;;;24613:20;;;;;;;:32;;24638:6;24613:24;:32::i;:::-;-1:-1:-1;;;;;24590:20:0;;;;;;;:9;:20;;;;;;;:55;;;;24661:35;;;;;;-1:-1:-1;;;;;;;;;;;24661:35:0;;;24689:6;160:25:1;;148:2;133:18;;14:177;24661:35:0;;;;;;;;-1:-1:-1;24714:4:0;24396:330;;;;;:::o;1509:98::-;1567:7;1594:5;1598:1;1594;:5;:::i;2247:98::-;2305:7;2332:5;2336:1;2332;:5;:::i;2646:98::-;2704:7;2731:5;2735:1;2731;:5;:::i;24734:166::-;24831:12;;24821:6;:22;;:49;;;-1:-1:-1;;;;;;24847:23:0;;;;;;:15;:23;;;;;;;;24821:49;24813:79;;;;-1:-1:-1;;;24813:79:0;;8320:2:1;24813:79:0;;;8302:21:1;8359:2;8339:18;;;8332:30;-1:-1:-1;;;8378:18:1;;;8371:47;8435:18;;24813:79:0;8118:341:1;25030:406:0;25105:7;25127:17;25147:8;;25127:28;;25166:17;25186:56;25221:14;;25238:3;25221:20;;;;:::i;:::-;25186:30;25212:3;25186:21;:6;25197:9;25186:10;:21::i;:56::-;25308:4;25290:24;;;;:9;:24;;;;;;25166:76;;-1:-1:-1;25290:39:0;;25166:76;25290:28;:39::i;:::-;25281:4;25263:24;;;;:9;:24;;;;;;;:66;;;;25345:42;;-1:-1:-1;;;;;25345:42:0;;;-1:-1:-1;;;;;;;;;;;25345:42:0;;;25377:9;160:25:1;;148:2;133:18;;14:177;25345:42:0;;;;;;;;25407:21;:6;25418:9;25407:10;:21::i;:::-;25400:28;25030:406;-1:-1:-1;;;;;25030:406:0:o;25444:438::-;25524:7;25546:17;25566:6;:35;;25590:11;;25566:35;;;25575:12;;25566:35;25546:55;;25612:17;25632:56;25667:14;;25684:3;25667:20;;;;:::i;:::-;25632:30;25658:3;25632:21;:6;25643:9;25632:10;:21::i;:56::-;25754:4;25736:24;;;;:9;:24;;;;;;25612:76;;-1:-1:-1;25736:39:0;;25612:76;25736:28;:39::i;:::-;25727:4;25709:24;;;;:9;:24;;;;;;;:66;;;;25791:42;;-1:-1:-1;;;;;25791:42:0;;;-1:-1:-1;;;;;;;;;;;25791:42:0;;;25823:9;160:25:1;;148:2;133:18;;14:177;25791:42:0;;;;;;;;25853:21;:6;25864:9;25853:10;:21::i;:::-;25846:28;25444:438;-1:-1:-1;;;;;;25444:438:0:o;25892:154::-;25966:6;;25941:4;;25966:6;;25965:7;:31;;;;-1:-1:-1;25985:11:0;;;;25965:31;:73;;;;-1:-1:-1;;26027:4:0;26037:1;26009:24;:9;:24;;:29;;25892:154::o;26676:1875::-;18527:6;:13;;-1:-1:-1;;18527:13:0;18536:4;18527:13;;;26773:21:::1;18527:6:::0;;;26919:17;;26915:1028:::1;;26953:27;26983:60;26999:15;;27016:26;;26983:15;:60::i;:::-;:76;;27050:9;;26983:76;;;27046:1;26983:76;26953:106;;27092:60;27150:1;27092:53;27132:12;;27092:35;27107:19;27092:10;;:14;;:35;;;;:::i;:60::-;27074:78;;27167:20;27190:31;27205:15;27190:10;;:14;;:31;;;;:::i;:::-;27262:16;::::0;;27276:1:::1;27262:16:::0;;;;;::::1;::::0;;27167:54;;-1:-1:-1;27238:21:0::1;::::0;27262:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;27262:16:0::1;27238:40;;27311:4;27293;27298:1;27293:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;27293:23:0::1;;;-1:-1:-1::0;;;;;27293:23:0::1;;;::::0;::::1;27341:14;-1:-1:-1::0;;;;;27341:19:0::1;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27331:4;27336:1;27331:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27331:31:0;;::::1;:7;::::0;;::::1;::::0;;;;;:31;27379:220:::1;::::0;-1:-1:-1;;;27379:220:0;;:14:::1;:65:::0;;::::1;::::0;::::1;::::0;:220:::1;::::0;27463:12;;27494:1:::1;::::0;27514:4;;27545::::1;::::0;27569:15:::1;::::0;27379:220:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27616:17;27636:40;27662:13;27636:21;:25;;:40;;;;:::i;:::-;27616:60:::0;-1:-1:-1;27693:19:0::1;27715:44;27732:26;:19:::0;27756:1:::1;27732:23;:26::i;:::-;27715:12;::::0;;:16:::1;:44::i;:::-;27693:66;;27797:48;27843:1;27797:41;27826:11;27797:24;27811:9;;27797;:13;;:24;;;;:::i;:48::-;27776:69;;27881:45;27914:11;27881:28;27895:13;;27881:9;:13;;:28;;;;:::i;:45::-;27860:66;;26938:1005;;;;;26915:1028;27994:15;::::0;28043:26:::1;::::0;-1:-1:-1;;10196:2:1;10192:15;;;10188:24;;28043:26:0::1;::::0;::::1;10176:37:1::0;10247:15;;;10243:24;10229:12;;;10222:46;27966:15:0::1;::::0;-1:-1:-1;;;;;27994:15:0::1;::::0;28023:18;;10284:12:1;;28043:26:0::1;::::0;;-1:-1:-1;;28043:26:0;;::::1;::::0;;;;;;;27986:84:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27965:105;;;28089:10;28081:19;;;::::0;::::1;;-1:-1:-1::0;28156:5:0::1;28177:19:::0;;28174:370:::1;;28394:21;::::0;28212:252:::1;::::0;-1:-1:-1;;;28212:252:0;;28296:4:::1;28212:252;::::0;::::1;10940:34:1::0;10990:18;;;10983:34;;;28354:1:0::1;11033:18:1::0;;;11026:34;;;11076:18;;;11069:34;-1:-1:-1;;;;;28394:21:0;;::::1;11119:19:1::0;;;11112:44;28434:15:0::1;11172:19:1::0;;;11165:35;28212:14:0::1;:30:::0;;::::1;::::0;::::1;::::0;28250:18;;10874:19:1;;28212:252:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;28484:48:0::1;::::0;;11696:25:1;;;11752:2;11737:18;;11730:34;;;28484:48:0::1;::::0;-1:-1:-1;11669:18:1;28484:48:0::1;;;;;;;28174:370;-1:-1:-1::0;;18545:6:0;:14;;-1:-1:-1;;18545:14:0;;;-1:-1:-1;;;;;26676:1875:0:o;196:250:1:-;281:1;291:113;305:6;302:1;299:13;291:113;;;381:11;;;375:18;362:11;;;355:39;327:2;320:10;291:113;;;-1:-1:-1;;438:1:1;420:16;;413:27;196:250::o;451:396::-;600:2;589:9;582:21;563:4;632:6;626:13;675:6;670:2;659:9;655:18;648:34;691:79;763:6;758:2;747:9;743:18;738:2;730:6;726:15;691:79;:::i;:::-;831:2;810:15;-1:-1:-1;;806:29:1;791:45;;;;838:2;787:54;;451:396;-1:-1:-1;;451:396:1:o;852:131::-;-1:-1:-1;;;;;927:31:1;;917:42;;907:70;;973:1;970;963:12;988:315;1056:6;1064;1117:2;1105:9;1096:7;1092:23;1088:32;1085:52;;;1133:1;1130;1123:12;1085:52;1172:9;1159:23;1191:31;1216:5;1191:31;:::i;:::-;1241:5;1293:2;1278:18;;;;1265:32;;-1:-1:-1;;;988:315:1:o;1500:248::-;1568:6;1576;1629:2;1617:9;1608:7;1604:23;1600:32;1597:52;;;1645:1;1642;1635:12;1597:52;-1:-1:-1;;1668:23:1;;;1738:2;1723:18;;;1710:32;;-1:-1:-1;1500:248:1:o;1753:180::-;1812:6;1865:2;1853:9;1844:7;1840:23;1836:32;1833:52;;;1881:1;1878;1871:12;1833:52;-1:-1:-1;1904:23:1;;1753:180;-1:-1:-1;1753:180:1:o;1938:456::-;2015:6;2023;2031;2084:2;2072:9;2063:7;2059:23;2055:32;2052:52;;;2100:1;2097;2090:12;2052:52;2139:9;2126:23;2158:31;2183:5;2158:31;:::i;:::-;2208:5;-1:-1:-1;2265:2:1;2250:18;;2237:32;2278:33;2237:32;2278:33;:::i;:::-;1938:456;;2330:7;;-1:-1:-1;;;2384:2:1;2369:18;;;;2356:32;;1938:456::o;2796:416::-;2861:6;2869;2922:2;2910:9;2901:7;2897:23;2893:32;2890:52;;;2938:1;2935;2928:12;2890:52;2977:9;2964:23;2996:31;3021:5;2996:31;:::i;:::-;3046:5;-1:-1:-1;3103:2:1;3088:18;;3075:32;3145:15;;3138:23;3126:36;;3116:64;;3176:1;3173;3166:12;3116:64;3199:7;3189:17;;;2796:416;;;;;:::o;3217:247::-;3276:6;3329:2;3317:9;3308:7;3304:23;3300:32;3297:52;;;3345:1;3342;3335:12;3297:52;3384:9;3371:23;3403:31;3428:5;3403:31;:::i;3704:385::-;3790:6;3798;3806;3814;3867:3;3855:9;3846:7;3842:23;3838:33;3835:53;;;3884:1;3881;3874:12;3835:53;-1:-1:-1;;3907:23:1;;;3977:2;3962:18;;3949:32;;-1:-1:-1;4028:2:1;4013:18;;4000:32;;4079:2;4064:18;4051:32;;-1:-1:-1;3704:385:1;-1:-1:-1;3704:385:1:o;4094:529::-;4171:6;4179;4187;4240:2;4228:9;4219:7;4215:23;4211:32;4208:52;;;4256:1;4253;4246:12;4208:52;4295:9;4282:23;4314:31;4339:5;4314:31;:::i;:::-;4364:5;-1:-1:-1;4421:2:1;4406:18;;4393:32;4434:33;4393:32;4434:33;:::i;:::-;4486:7;-1:-1:-1;4545:2:1;4530:18;;4517:32;4558:33;4517:32;4558:33;:::i;:::-;4610:7;4600:17;;;4094:529;;;;;:::o;4628:388::-;4696:6;4704;4757:2;4745:9;4736:7;4732:23;4728:32;4725:52;;;4773:1;4770;4763:12;4725:52;4812:9;4799:23;4831:31;4856:5;4831:31;:::i;:::-;4881:5;-1:-1:-1;4938:2:1;4923:18;;4910:32;4951:33;4910:32;4951:33;:::i;5021:127::-;5082:10;5077:3;5073:20;5070:1;5063:31;5113:4;5110:1;5103:15;5137:4;5134:1;5127:15;5153:168;5226:9;;;5257;;5274:15;;;5268:22;;5254:37;5244:71;;5295:18;;:::i;5326:217::-;5366:1;5392;5382:132;;5436:10;5431:3;5427:20;5424:1;5417:31;5471:4;5468:1;5461:15;5499:4;5496:1;5489:15;5382:132;-1:-1:-1;5528:9:1;;5326:217::o;5548:356::-;5750:2;5732:21;;;5769:18;;;5762:30;5828:34;5823:2;5808:18;;5801:62;5895:2;5880:18;;5548:356::o;7018:125::-;7083:9;;;7104:10;;;7101:36;;;7117:18;;:::i;7985:128::-;8052:9;;;8073:11;;;8070:37;;;8087:18;;:::i;8596:127::-;8657:10;8652:3;8648:20;8645:1;8638:31;8688:4;8685:1;8678:15;8712:4;8709:1;8702:15;8728:251;8798:6;8851:2;8839:9;8830:7;8826:23;8822:32;8819:52;;;8867:1;8864;8857:12;8819:52;8899:9;8893:16;8918:31;8943:5;8918:31;:::i;8984:980::-;9246:4;9294:3;9283:9;9279:19;9325:6;9314:9;9307:25;9351:2;9389:6;9384:2;9373:9;9369:18;9362:34;9432:3;9427:2;9416:9;9412:18;9405:31;9456:6;9491;9485:13;9522:6;9514;9507:22;9560:3;9549:9;9545:19;9538:26;;9599:2;9591:6;9587:15;9573:29;;9620:1;9630:195;9644:6;9641:1;9638:13;9630:195;;;9709:13;;-1:-1:-1;;;;;9705:39:1;9693:52;;9800:15;;;;9765:12;;;;9741:1;9659:9;9630:195;;;-1:-1:-1;;;;;;;9881:32:1;;;;9876:2;9861:18;;9854:60;-1:-1:-1;;;9945:3:1;9930:19;9923:35;9842:3;8984:980;-1:-1:-1;;;8984:980:1:o;10307:287::-;10436:3;10474:6;10468:13;10490:66;10549:6;10544:3;10537:4;10529:6;10525:17;10490:66;:::i;:::-;10572:16;;;;;10307:287;-1:-1:-1;;10307:287:1:o;11211:306::-;11299:6;11307;11315;11368:2;11356:9;11347:7;11343:23;11339:32;11336:52;;;11384:1;11381;11374:12;11336:52;11413:9;11407:16;11397:26;;11463:2;11452:9;11448:18;11442:25;11432:35;;11507:2;11496:9;11492:18;11486:25;11476:35;;11211:306;;;;;:::o

Swarm Source

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