ETH Price: $2,735.60 (-4.11%)

Token

Mason Token (MASON)
 

Overview

Max Total Supply

148,500,000,000 MASON

Holders

117

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
Mason

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 9999 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-10-26
*/

// SPDX-License-Identifier: WTFPL
pragma solidity ^0.8.0;


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

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

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual 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 {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

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

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

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

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

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

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

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

// 
// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @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 IRebaser {
    function rebase() external;

    function ownerRebase(uint256 percent) external;

    function timeDelta() external view returns (uint256 _timeDelta);
}

// 
interface IV2Router {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] memory path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] memory path)
        external
        view
        returns (uint256[] memory amounts);
}

// 
interface IV2Factory {
    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

// 
interface IV2Pair {
    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 (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 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 (uint256);

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    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 (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

// 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        require(b != -1 || a != MIN_INT256);
        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
}

// 
// import "hardhat/console.sol";
contract Mason is Ownable, IERC20 {
    /////////////////// Dependencies ///////////////////

    using SafeMath for uint256;

    using SafeMathInt for int256;

    ////////////////////// Events //////////////////////

    event LogRebase(uint256 indexed epoch, uint256 totalSupply);

    ////////////////////// Storage /////////////////////

    string public name = "Mason Token";

    string public symbol = "MASON";

    uint8 public constant decimals = 18;

    IV2Router public router;

    IRebaser public rebaser;

    address payable public marketing;

    address public stakingRewardsAddr;

    address public stakingContract;

    uint256 public stakingFee = 1;

    uint256 public marketingFee = 5;

    uint256 public constant FEE_DIVISOR = 100;

    address public uniswapV2Pair;

    mapping(address => bool) public excludedSender;

    mapping(address => bool) public excludedRecipient;

    uint256 private constant MAX_uint = ~uint256(0);

    uint256 private constant INITIAL_FRAGMENTS_SUPPLY = 3300000000000 * 10**18;

    uint256 private constant TOTAL_GONS =
        MAX_uint - (MAX_uint % INITIAL_FRAGMENTS_SUPPLY);

    uint256 private constant MAX_SUPPLY = ~uint128(0); // (2^128) - 1

    uint256 private _totalSupply;

    uint256 private _gonsPerFragment;

    mapping(address => uint256) private _gonBalances;

    mapping(address => mapping(address => uint256)) private _allowedFragments;

    bool private inSwap = false;

    uint256 public walletCap = 33000000000 * 10**18;

    ///////////////////// Modifiers ////////////////////

    modifier lockSwap() {
        inSwap = true;
        _;
        inSwap = false;
    }

    modifier onlyRebaser() {
        require(msg.sender == address(rebaser));
        _;
    }

    modifier validRecipient(address to) {
        require(to != address(0x0));
        _;
    }

    /////////////////// Construction ///////////////////

    constructor(
        IV2Router router_,
        address payable marketing_,
        address staking_
    ) {
        router = router_;
        marketing = marketing_;
        stakingRewardsAddr = staking_;

        uniswapV2Pair = IV2Factory(router.factory()).createPair(
            address(this),
            router.WETH()
        );

        _totalSupply = INITIAL_FRAGMENTS_SUPPLY;
        _gonBalances[msg.sender] = TOTAL_GONS;
        _gonsPerFragment = TOTAL_GONS.div(_totalSupply);

        excludedSender[owner()] = true;
        excludedRecipient[owner()] = true;
        excludedSender[address(this)] = true;
        excludedRecipient[address(this)] = true;
        emit Transfer(address(0x0), msg.sender, _totalSupply);
    }

    /////////////////////  Rebase  /////////////////////

    /**
     * @dev Notifies Fragments contract about a new rebase cycle.
     * @param supplyDelta The number of new fragment tokens to add into circulation via expansion.
     * @return The total number of fragments after the supply adjustment.
     */
    function rebase(uint256 epoch, int256 supplyDelta)
        external
        onlyRebaser
        returns (uint256)
    {
        if (supplyDelta == 0) {
            emit LogRebase(epoch, _totalSupply);
            return _totalSupply;
        }
        if (supplyDelta < 0)
            _totalSupply = _totalSupply.sub(uint256(supplyDelta.abs()));
        else _totalSupply = _totalSupply.add(uint256(supplyDelta));
        if (_totalSupply > MAX_SUPPLY) _totalSupply = MAX_SUPPLY;
        _gonsPerFragment = TOTAL_GONS.div(_totalSupply);
        emit LogRebase(epoch, _totalSupply);

        IV2Pair(uniswapV2Pair).sync();

        return _totalSupply;
    }

    /////////////////////  Policy  /////////////////////

    function set_Excluded(
        address _who,
        bool _excludedRecipient,
        bool _excludedSender
    ) external onlyOwner {
        excludedSender[_who] = _excludedSender;
        excludedRecipient[_who] = _excludedRecipient;
    }

    function excludeMultipleAddresses(address[] memory _addresses)
        external
        onlyOwner
    {
        uint256 length = _addresses.length;

        for (uint256 i = 0; i < length; i++) {
            excludedSender[_addresses[i]] = true;
            excludedRecipient[_addresses[i]] = true;
        }
    }

    function set_Rebaser(IRebaser _rebaser) external onlyOwner {
        rebaser = _rebaser;
    }

    function set_Marketing(address payable _marketing) external onlyOwner {
        marketing = _marketing;
    }

    function set_StakingRewardsAddr(address _staking) external onlyOwner {
        stakingRewardsAddr = _staking;
    }

    function set_StakingContract(address _staking) external onlyOwner {
        stakingContract = _staking;
    }

    function set_WalletCap(uint256 _walletCap) external onlyOwner {
        walletCap = _walletCap;
    }

    function set_Fees(uint256 sFee, uint256 mFee) external onlyOwner {
        // alternative - require( stakingFee.add( marketingFee ) <= 4, "!fee" );
        require(stakingFee <= 5, "fee to high");
        require(marketingFee <= 10, "fee to high");
        stakingFee = sFee;
        marketingFee = mFee;
    }

    /////////////////////  ERC20  /////////////////////

    /**
     * @return The total number of fragments.
     */
    function totalSupply() external view override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @return The gons per fragment.
     */
    function gonsPerFragment() external view returns (uint256) {
        return _gonsPerFragment;
    }

    /**
     * @param who The address to query.
     * @return The balance of the specified address.
     */
    function balanceOf(address who) external view override returns (uint256) {
        return _gonBalances[who].div(_gonsPerFragment);
    }

    /**
     * @dev Function to check the amount of tokens that an owner has allowed to a spender.
     * @param owner_ The address which owns the funds.
     * @param spender The address which will spend the funds.
     * @return The number of tokens still available for the spender.
     */
    function allowance(address owner_, address spender)
        external
        view
        override
        returns (uint256)
    {
        return _allowedFragments[owner_][spender];
    }

    /**
     * @dev Transfer tokens to a specified address.
     * @param to The address to transfer to.
     * @param value The amount to be transferred.
     * @return True on success, false otherwise.
     */
    function transfer(address to, uint256 value)
        external
        override
        validRecipient(to)
        returns (bool)
    {
        _transfer(msg.sender, to, value);
        return true;
    }

    /**
     * @dev Transfer tokens from one address to another.
     * @param from The address you want to send tokens from.
     * @param to The address you want to transfer to.
     * @param value The amount of tokens to be transferred.
     */
    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external override validRecipient(to) returns (bool) {
        // make sure caller has allowance
        // require(_allowedFragments[from][msg.sender] >= value, "!allowance");
        // subtract used allowance
        _allowedFragments[from][msg.sender] = _allowedFragments[from][
            msg.sender
        ].sub(value);
        _transfer(from, to, value);

        return true;
    }

    /**
     * @dev Approve the passed address to spend the specified amount of tokens on behalf of
     * msg.sender. This method is included for ERC20 compatibility.
     * increaseAllowance and decreaseAllowance should be used instead.
     * Changing an allowance with this method brings the risk that someone may transfer both
     * the old and the new allowance - if they are both greater than zero - if a transfer
     * transaction is mined before the later approve() call is mined.
     *
     * @param spender The address which will spend the funds.
     * @param value The amount of tokens to be spent.
     */
    function approve(address spender, uint256 value)
        external
        override
        returns (bool)
    {
        _allowedFragments[msg.sender][spender] = value;

        return true;
    }

    /**
     * @dev Increase the amount of tokens that an owner has allowed to a spender.
     * This method should be used instead of approve() to avoid the double approval vulnerability
     * described above.
     * @param spender The address which will spend the funds.
     * @param addedValue The amount of tokens to increase the allowance by.
     */
    function increaseAllowance(address spender, uint256 addedValue)
        external
        returns (bool)
    {
        _allowedFragments[msg.sender][spender] = _allowedFragments[msg.sender][
            spender
        ].add(addedValue);
        emit Approval(
            msg.sender,
            spender,
            _allowedFragments[msg.sender][spender]
        );
        return true;
    }

    /**
     * @dev Decrease the amount of tokens that an owner has allowed to a spender.
     * @param spender The address which will spend the funds.
     * @param subtractedValue The amount of tokens to decrease the allowance by.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue)
        external
        returns (bool)
    {
        uint256 oldValue = _allowedFragments[msg.sender][spender];
        if (subtractedValue >= oldValue)
            _allowedFragments[msg.sender][spender] = 0;
        else
            _allowedFragments[msg.sender][spender] = oldValue.sub(
                subtractedValue
            );
        emit Approval(
            msg.sender,
            spender,
            _allowedFragments[msg.sender][spender]
        );
        return true;
    }

    /////////////////////  interal  /////////////////////

    /**
     * @dev tranfer helper
     * @param from The address you want to send tokens from.
     * @param to The address you want to transfer to.
     * @param value The amount of tokens to be transferred.
     */
    function _transfer(
        address from,
        address to,
        uint256 value
    ) internal {
        if (
            from != owner() &&
            to != owner() &&
            to != uniswapV2Pair &&
            to != stakingContract
        ) {
            require(
                _gonBalances[to].div(_gonsPerFragment) + value <= walletCap,
                "Wallet cap exceed"
            );
        }

        uint256 gonValue = value.mul(_gonsPerFragment);

        // if  from or to is excluded
        if (excludedSender[from] || excludedRecipient[to]) {
            // reduce senders balance
            _gonBalances[from] = _gonBalances[from].sub(gonValue);
            // increase recipients balance by value
            _gonBalances[to] = _gonBalances[to].add(gonValue);

            emit Transfer(from, to, value);
        } else {
            if (!inSwap && to == uniswapV2Pair) {
                uint256 wad = _gonBalances[address(this)].div(_gonsPerFragment);
                if (wad > 0) {
                    swapGons(wad);
                }
            }

            // reduce senders balance
            _gonBalances[from] = _gonBalances[from].sub(gonValue);
            // calculate fee numerator
            uint256 numerator = FEE_DIVISOR.sub(marketingFee).sub(stakingFee);
            // increase recipients balance by value - fees
            _gonBalances[to] = _gonBalances[to].add(
                gonValue.div(FEE_DIVISOR).mul(numerator)
            );

            // accumulate marketing fee
            _gonBalances[address(this)] = _gonBalances[address(this)].add(
                gonValue.div(FEE_DIVISOR).mul(marketingFee)
            );

            // send staking the staking fee

            _gonBalances[stakingRewardsAddr] = _gonBalances[stakingRewardsAddr]
                .add(gonValue.div(FEE_DIVISOR).mul(stakingFee));

            emit Transfer(from, to, value);
        }
    }

    receive() external payable {}

    /**
     * @dev marketing fee transfer helper
     */
    function swapGons(uint256 wad) private lockSwap {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        // approve token for spending
        // _approve(address(this), address(router), wad);
        _allowedFragments[address(this)][address(router)] = wad;

        // make the swap with ETH sent to marketing
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            wad,
            0, // no slippage control
            path,
            marketing,
            block.timestamp
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract IV2Router","name":"router_","type":"address"},{"internalType":"address payable","name":"marketing_","type":"address"},{"internalType":"address","name":"staking_","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":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"LogRebase","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":"FEE_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","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":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"excludeMultipleAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedRecipient","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedSender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gonsPerFragment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketing","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"int256","name":"supplyDelta","type":"int256"}],"name":"rebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rebaser","outputs":[{"internalType":"contract IRebaser","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_who","type":"address"},{"internalType":"bool","name":"_excludedRecipient","type":"bool"},{"internalType":"bool","name":"_excludedSender","type":"bool"}],"name":"set_Excluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sFee","type":"uint256"},{"internalType":"uint256","name":"mFee","type":"uint256"}],"name":"set_Fees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_marketing","type":"address"}],"name":"set_Marketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IRebaser","name":"_rebaser","type":"address"}],"name":"set_Rebaser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_staking","type":"address"}],"name":"set_StakingContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_staking","type":"address"}],"name":"set_StakingRewardsAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_walletCap","type":"uint256"}],"name":"set_WalletCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingRewardsAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","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"},{"inputs":[],"name":"walletCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600b60808190526a26b0b9b7b7102a37b5b2b760a91b60a09081526200002e916001919062000481565b506040805180820190915260058082526426a0a9a7a760d91b60209092019182526200005d9160029162000481565b50600160085560056009556011805460ff191690556b6aa0f5d099e087d9e80000006012553480156200008f57600080fd5b50604051620025d3380380620025d3833981016040819052620000b29162000547565b620000bd336200041c565b600380546001600160a01b038086166001600160a01b031992831681179093556005805486831690841617905560068054918516919092161790556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156200012f57600080fd5b505afa15801562000144573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200016a919062000527565b6001600160a01b031663c9c6539630600360009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620001c857600080fd5b505afa158015620001dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000203919062000527565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200024c57600080fd5b505af115801562000261573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000287919062000527565b600a80546001600160a01b0319166001600160a01b03929092169190911790556c29a6e0057c1bb5111ea0000000600d819055620002c89060001962000615565b620002d690600019620005b2565b336000908152600f6020526040902055600d546200032b90620003096c29a6e0057c1bb5111ea000000060001962000615565b6200031790600019620005b2565b6200046c60201b620013071790919060201c565b600e556001600b6000620003476000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805460ff191692151592909217909155600190600c906200038b6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600b8352818120805485166001908117909155600c8452828220805490951617909355600d5490519081523392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050506200065b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006200047a82846200059b565b9392505050565b8280546200048f90620005d8565b90600052602060002090601f016020900481019282620004b35760008555620004fe565b82601f10620004ce57805160ff1916838001178555620004fe565b82800160010185558215620004fe579182015b82811115620004fe578251825591602001919060010190620004e1565b506200050c92915062000510565b5090565b5b808211156200050c576000815560010162000511565b6000602082840312156200053a57600080fd5b81516200047a8162000642565b6000806000606084860312156200055d57600080fd5b83516200056a8162000642565b60208501519093506200057d8162000642565b6040850151909250620005908162000642565b809150509250925092565b600082620005ad57620005ad6200062c565b500490565b600082821015620005d357634e487b7160e01b600052601160045260246000fd5b500390565b600181811c90821680620005ed57607f821691505b602082108114156200060f57634e487b7160e01b600052602260045260246000fd5b50919050565b6000826200062757620006276200062c565b500690565b634e487b7160e01b600052601260045260246000fd5b6001600160a01b03811681146200065857600080fd5b50565b611f68806200066b6000396000f3fe6080604052600436106102535760003560e01c8063745c09fc11610138578063cee73fcb116100b0578063eb1d73031161007f578063eff9884311610064578063eff98843146106be578063f2fde38b146106d4578063f887ea40146106f457600080fd5b8063eb1d73031461067e578063ee99205c1461069e57600080fd5b8063cee73fcb146105d8578063d9e4da9f146105f8578063dd62ed3e14610618578063ea208a7b1461065e57600080fd5b806395d89b4111610107578063a457c2d7116100ec578063a457c2d714610578578063a9059cbb14610598578063b4f0930e146105b857600080fd5b806395d89b411461054e5780639e93ad8e1461056357600080fd5b8063745c09fc146104db5780637a43e23f146104fb5780637ed8f6531461051b5780638da5cb5b1461053057600080fd5b806347f6e107116101cb5780635becd3971161019a5780636b67c4df1161017f5780636b67c4df1461049057806370a08231146104a6578063715018a6146104c657600080fd5b80635becd3971461043057806366f9c7311461046057600080fd5b806347f6e107146103ba57806349bd5a5e146103da578063524ec1c0146103fa57806358950c221461041a57600080fd5b806323b872dd11610222578063313ce56711610207578063313ce567146103515780633774459e14610378578063395093511461039a57600080fd5b806323b872dd146103115780632d3e474a1461033157600080fd5b806306fdde031461025f578063095ea7b31461028a57806311fd8a83146102ba57806318160ddd146102f257600080fd5b3661025a57005b600080fd5b34801561026b57600080fd5b50610274610714565b6040516102819190611c23565b60405180910390f35b34801561029657600080fd5b506102aa6102a5366004611ad2565b6107a2565b6040519015158152602001610281565b3480156102c657600080fd5b506004546102da906001600160a01b031681565b6040516001600160a01b039091168152602001610281565b3480156102fe57600080fd5b50600d545b604051908152602001610281565b34801561031d57600080fd5b506102aa61032c366004611a4c565b6107d1565b34801561033d57600080fd5b506005546102da906001600160a01b031681565b34801561035d57600080fd5b50610366601281565b60405160ff9091168152602001610281565b34801561038457600080fd5b50610398610393366004611afe565b61084f565b005b3480156103a657600080fd5b506102aa6103b5366004611ad2565b610991565b3480156103c657600080fd5b506103986103d53660046119d9565b610a22565b3480156103e657600080fd5b50600a546102da906001600160a01b031681565b34801561040657600080fd5b50610398610415366004611be8565b610ab6565b34801561042657600080fd5b5061030360125481565b34801561043c57600080fd5b506102aa61044b3660046119d9565b600b6020526000908152604090205460ff1681565b34801561046c57600080fd5b506102aa61047b3660046119d9565b600c6020526000908152604090205460ff1681565b34801561049c57600080fd5b5061030360095481565b3480156104b257600080fd5b506103036104c13660046119d9565b610b15565b3480156104d257600080fd5b50610398610b3d565b3480156104e757600080fd5b506103986104f6366004611a8d565b610ba3565b34801561050757600080fd5b50610303610516366004611c01565b610c5a565b34801561052757600080fd5b50600e54610303565b34801561053c57600080fd5b506000546001600160a01b03166102da565b34801561055a57600080fd5b50610274610e3f565b34801561056f57600080fd5b50610303606481565b34801561058457600080fd5b506102aa610593366004611ad2565b610e4c565b3480156105a457600080fd5b506102aa6105b3366004611ad2565b610f33565b3480156105c457600080fd5b506103986105d3366004611c01565b610f5e565b3480156105e457600080fd5b506006546102da906001600160a01b031681565b34801561060457600080fd5b506103986106133660046119d9565b611069565b34801561062457600080fd5b50610303610633366004611a13565b6001600160a01b03918216600090815260106020908152604080832093909416825291909152205490565b34801561066a57600080fd5b506103986106793660046119d9565b6110fd565b34801561068a57600080fd5b506103986106993660046119d9565b611191565b3480156106aa57600080fd5b506007546102da906001600160a01b031681565b3480156106ca57600080fd5b5061030360085481565b3480156106e057600080fd5b506103986106ef3660046119d9565b611225565b34801561070057600080fd5b506003546102da906001600160a01b031681565b6001805461072190611d87565b80601f016020809104026020016040519081016040528092919081815260200182805461074d90611d87565b801561079a5780601f1061076f5761010080835404028352916020019161079a565b820191906000526020600020905b81548152906001019060200180831161077d57829003601f168201915b505050505081565b3360009081526010602090815260408083206001600160a01b0386168452909152902081905560015b92915050565b6000826001600160a01b0381166107e757600080fd5b6001600160a01b0385166000908152601060209081526040808320338452909152902054610815908461131a565b6001600160a01b0386166000908152601060209081526040808320338452909152902055610844858585611326565b506001949350505050565b6000546001600160a01b031633146108ae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b805160005b8181101561098c576001600b60008584815181106108d3576108d3611ebf565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c600085848151811061092a5761092a611ebf565b6020908102919091018101516001600160a01b0316825281019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790558061098481611ddb565b9150506108b3565b505050565b3360009081526010602090815260408083206001600160a01b03861684529091528120546109bf90836116fa565b3360008181526010602090815260408083206001600160a01b038916808552908352928190208590555193845290927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350600192915050565b6000546001600160a01b03163314610a7c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108a5565b600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610b105760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108a5565b601255565b600e546001600160a01b0382166000908152600f602052604081205490916107cb9190611307565b6000546001600160a01b03163314610b975760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108a5565b610ba16000611706565b565b6000546001600160a01b03163314610bfd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108a5565b6001600160a01b039092166000908152600b6020908152604080832080549515157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00968716179055600c9091529020805491151591909216179055565b6004546000906001600160a01b03163314610c7457600080fd5b81610cbe57827f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2600d54604051610cad91815260200190565b60405180910390a250600d546107cb565b6000821215610ce457610cdc610cd38361176e565b600d549061131a565b600d55610cf5565b600d54610cf190836116fa565b600d555b600d546fffffffffffffffffffffffffffffffff1015610d24576fffffffffffffffffffffffffffffffff600d555b600d54610d9290610d626c29a6e0057c1bb5111ea00000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611e14565b610d8c907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611d70565b90611307565b600e55600d5460405190815283907f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f29060200160405180910390a2600a60009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e1d57600080fd5b505af1158015610e31573d6000803e3d6000fd5b5050600d5495945050505050565b6002805461072190611d87565b3360009081526010602090815260408083206001600160a01b0386168452909152812054808310610ea0573360009081526010602090815260408083206001600160a01b0388168452909152812055610ecf565b610eaa818461131a565b3360009081526010602090815260408083206001600160a01b03891684529091529020555b3360008181526010602090815260408083206001600160a01b038916808552908352928190205490519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060019392505050565b6000826001600160a01b038116610f4957600080fd5b610f54338585611326565b5060019392505050565b6000546001600160a01b03163314610fb85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108a5565b6005600854111561100b5760405162461bcd60e51b815260206004820152600b60248201527f66656520746f206869676800000000000000000000000000000000000000000060448201526064016108a5565b600a600954111561105e5760405162461bcd60e51b815260206004820152600b60248201527f66656520746f206869676800000000000000000000000000000000000000000060448201526064016108a5565b600891909155600955565b6000546001600160a01b031633146110c35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108a5565b600680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000546001600160a01b031633146111575760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108a5565b600580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000546001600160a01b031633146111eb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108a5565b600780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461127f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108a5565b6001600160a01b0381166112fb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108a5565b61130481611706565b50565b60006113138284611d1f565b9392505050565b60006113138284611d70565b6000546001600160a01b0384811691161480159061135257506000546001600160a01b03838116911614155b801561136c5750600a546001600160a01b03838116911614155b801561138657506007546001600160a01b03838116911614155b1561140e57601254600e546001600160a01b0384166000908152600f602052604090205483916113b69190611307565b6113c09190611d07565b111561140e5760405162461bcd60e51b815260206004820152601160248201527f57616c6c6574206361702065786365656400000000000000000000000000000060448201526064016108a5565b6000611425600e54836117b490919063ffffffff16565b6001600160a01b0385166000908152600b602052604090205490915060ff168061146757506001600160a01b0383166000908152600c602052604090205460ff165b1561151f576001600160a01b0384166000908152600f602052604090205461148f908261131a565b6001600160a01b038086166000908152600f602052604080822093909355908516815220546114be90826116fa565b6001600160a01b038085166000818152600f602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906115129086815260200190565b60405180910390a36116f4565b60115460ff1615801561153f5750600a546001600160a01b038481169116145b1561157657600e54306000908152600f602052604081205490916115639190611307565b9050801561157457611574816117c0565b505b6001600160a01b0384166000908152600f6020526040902054611599908261131a565b6001600160a01b0385166000908152600f60205260408120919091556008546009546115d291906115cc9060649061131a565b9061131a565b905061160b6115ec826115e6856064611307565b906117b4565b6001600160a01b0386166000908152600f6020526040902054906116fa565b6001600160a01b0385166000908152600f60205260409020556009546116509061163a906115e6856064611307565b306000908152600f6020526040902054906116fa565b306000908152600f602052604090205560085461169790611676906115e6856064611307565b6006546001600160a01b03166000908152600f6020526040902054906116fa565b6006546001600160a01b039081166000908152600f6020908152604091829020939093555185815286821692918816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505b50505050565b60006113138284611d07565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60007f800000000000000000000000000000000000000000000000000000000000000082141561179d57600080fd5b600082126117ab57816107cb565b6107cb82611e28565b60006113138284611d33565b601180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055604080516002808252606082018352600092602083019080368337019050509050308160008151811061182057611820611ebf565b6001600160a01b03928316602091820292909201810191909152600354604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b15801561188d57600080fd5b505afa1580156118a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c591906119f6565b816001815181106118d8576118d8611ebf565b6001600160a01b0392831660209182029290920181019190915230600090815260108252604080822060038054861684529352808220869055915460055492517f791ac9470000000000000000000000000000000000000000000000000000000081529084169363791ac9479361195b9388939092889216904290600401611c96565b600060405180830381600087803b15801561197557600080fd5b505af1158015611989573d6000803e3d6000fd5b5050601180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905550505050565b80356119c481611f1d565b919050565b803580151581146119c457600080fd5b6000602082840312156119eb57600080fd5b813561131381611f1d565b600060208284031215611a0857600080fd5b815161131381611f1d565b60008060408385031215611a2657600080fd5b8235611a3181611f1d565b91506020830135611a4181611f1d565b809150509250929050565b600080600060608486031215611a6157600080fd5b8335611a6c81611f1d565b92506020840135611a7c81611f1d565b929592945050506040919091013590565b600080600060608486031215611aa257600080fd5b8335611aad81611f1d565b9250611abb602085016119c9565b9150611ac9604085016119c9565b90509250925092565b60008060408385031215611ae557600080fd5b8235611af081611f1d565b946020939093013593505050565b60006020808385031215611b1157600080fd5b823567ffffffffffffffff80821115611b2957600080fd5b818501915085601f830112611b3d57600080fd5b813581811115611b4f57611b4f611eee565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108582111715611b9257611b92611eee565b604052828152858101935084860182860187018a1015611bb157600080fd5b600095505b83861015611bdb57611bc7816119b9565b855260019590950194938601938601611bb6565b5098975050505050505050565b600060208284031215611bfa57600080fd5b5035919050565b60008060408385031215611c1457600080fd5b50508035926020909101359150565b600060208083528351808285015260005b81811015611c5057858101830151858201604001528201611c34565b81811115611c62576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611ce65784516001600160a01b031683529383019391830191600101611cc1565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115611d1a57611d1a611e61565b500190565b600082611d2e57611d2e611e90565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611d6b57611d6b611e61565b500290565b600082821015611d8257611d82611e61565b500390565b600181811c90821680611d9b57607f821691505b60208210811415611dd5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611e0d57611e0d611e61565b5060010190565b600082611e2357611e23611e90565b500690565b60007f8000000000000000000000000000000000000000000000000000000000000000821415611e5a57611e5a611e61565b5060000390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6001600160a01b038116811461130457600080fdfea26469706673582212201a462ca245c38fc2b4630dfcad2ba1fe0a7353c7967c41517f7cfa2d1319254a64736f6c634300080700330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000820a75b31312fa46291b5546b5335cd31d16275d000000000000000000000000820a75b31312fa46291b5546b5335cd31d16275d

Deployed Bytecode

0x6080604052600436106102535760003560e01c8063745c09fc11610138578063cee73fcb116100b0578063eb1d73031161007f578063eff9884311610064578063eff98843146106be578063f2fde38b146106d4578063f887ea40146106f457600080fd5b8063eb1d73031461067e578063ee99205c1461069e57600080fd5b8063cee73fcb146105d8578063d9e4da9f146105f8578063dd62ed3e14610618578063ea208a7b1461065e57600080fd5b806395d89b4111610107578063a457c2d7116100ec578063a457c2d714610578578063a9059cbb14610598578063b4f0930e146105b857600080fd5b806395d89b411461054e5780639e93ad8e1461056357600080fd5b8063745c09fc146104db5780637a43e23f146104fb5780637ed8f6531461051b5780638da5cb5b1461053057600080fd5b806347f6e107116101cb5780635becd3971161019a5780636b67c4df1161017f5780636b67c4df1461049057806370a08231146104a6578063715018a6146104c657600080fd5b80635becd3971461043057806366f9c7311461046057600080fd5b806347f6e107146103ba57806349bd5a5e146103da578063524ec1c0146103fa57806358950c221461041a57600080fd5b806323b872dd11610222578063313ce56711610207578063313ce567146103515780633774459e14610378578063395093511461039a57600080fd5b806323b872dd146103115780632d3e474a1461033157600080fd5b806306fdde031461025f578063095ea7b31461028a57806311fd8a83146102ba57806318160ddd146102f257600080fd5b3661025a57005b600080fd5b34801561026b57600080fd5b50610274610714565b6040516102819190611c23565b60405180910390f35b34801561029657600080fd5b506102aa6102a5366004611ad2565b6107a2565b6040519015158152602001610281565b3480156102c657600080fd5b506004546102da906001600160a01b031681565b6040516001600160a01b039091168152602001610281565b3480156102fe57600080fd5b50600d545b604051908152602001610281565b34801561031d57600080fd5b506102aa61032c366004611a4c565b6107d1565b34801561033d57600080fd5b506005546102da906001600160a01b031681565b34801561035d57600080fd5b50610366601281565b60405160ff9091168152602001610281565b34801561038457600080fd5b50610398610393366004611afe565b61084f565b005b3480156103a657600080fd5b506102aa6103b5366004611ad2565b610991565b3480156103c657600080fd5b506103986103d53660046119d9565b610a22565b3480156103e657600080fd5b50600a546102da906001600160a01b031681565b34801561040657600080fd5b50610398610415366004611be8565b610ab6565b34801561042657600080fd5b5061030360125481565b34801561043c57600080fd5b506102aa61044b3660046119d9565b600b6020526000908152604090205460ff1681565b34801561046c57600080fd5b506102aa61047b3660046119d9565b600c6020526000908152604090205460ff1681565b34801561049c57600080fd5b5061030360095481565b3480156104b257600080fd5b506103036104c13660046119d9565b610b15565b3480156104d257600080fd5b50610398610b3d565b3480156104e757600080fd5b506103986104f6366004611a8d565b610ba3565b34801561050757600080fd5b50610303610516366004611c01565b610c5a565b34801561052757600080fd5b50600e54610303565b34801561053c57600080fd5b506000546001600160a01b03166102da565b34801561055a57600080fd5b50610274610e3f565b34801561056f57600080fd5b50610303606481565b34801561058457600080fd5b506102aa610593366004611ad2565b610e4c565b3480156105a457600080fd5b506102aa6105b3366004611ad2565b610f33565b3480156105c457600080fd5b506103986105d3366004611c01565b610f5e565b3480156105e457600080fd5b506006546102da906001600160a01b031681565b34801561060457600080fd5b506103986106133660046119d9565b611069565b34801561062457600080fd5b50610303610633366004611a13565b6001600160a01b03918216600090815260106020908152604080832093909416825291909152205490565b34801561066a57600080fd5b506103986106793660046119d9565b6110fd565b34801561068a57600080fd5b506103986106993660046119d9565b611191565b3480156106aa57600080fd5b506007546102da906001600160a01b031681565b3480156106ca57600080fd5b5061030360085481565b3480156106e057600080fd5b506103986106ef3660046119d9565b611225565b34801561070057600080fd5b506003546102da906001600160a01b031681565b6001805461072190611d87565b80601f016020809104026020016040519081016040528092919081815260200182805461074d90611d87565b801561079a5780601f1061076f5761010080835404028352916020019161079a565b820191906000526020600020905b81548152906001019060200180831161077d57829003601f168201915b505050505081565b3360009081526010602090815260408083206001600160a01b0386168452909152902081905560015b92915050565b6000826001600160a01b0381166107e757600080fd5b6001600160a01b0385166000908152601060209081526040808320338452909152902054610815908461131a565b6001600160a01b0386166000908152601060209081526040808320338452909152902055610844858585611326565b506001949350505050565b6000546001600160a01b031633146108ae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b805160005b8181101561098c576001600b60008584815181106108d3576108d3611ebf565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c600085848151811061092a5761092a611ebf565b6020908102919091018101516001600160a01b0316825281019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790558061098481611ddb565b9150506108b3565b505050565b3360009081526010602090815260408083206001600160a01b03861684529091528120546109bf90836116fa565b3360008181526010602090815260408083206001600160a01b038916808552908352928190208590555193845290927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350600192915050565b6000546001600160a01b03163314610a7c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108a5565b600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610b105760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108a5565b601255565b600e546001600160a01b0382166000908152600f602052604081205490916107cb9190611307565b6000546001600160a01b03163314610b975760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108a5565b610ba16000611706565b565b6000546001600160a01b03163314610bfd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108a5565b6001600160a01b039092166000908152600b6020908152604080832080549515157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00968716179055600c9091529020805491151591909216179055565b6004546000906001600160a01b03163314610c7457600080fd5b81610cbe57827f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2600d54604051610cad91815260200190565b60405180910390a250600d546107cb565b6000821215610ce457610cdc610cd38361176e565b600d549061131a565b600d55610cf5565b600d54610cf190836116fa565b600d555b600d546fffffffffffffffffffffffffffffffff1015610d24576fffffffffffffffffffffffffffffffff600d555b600d54610d9290610d626c29a6e0057c1bb5111ea00000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611e14565b610d8c907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611d70565b90611307565b600e55600d5460405190815283907f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f29060200160405180910390a2600a60009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e1d57600080fd5b505af1158015610e31573d6000803e3d6000fd5b5050600d5495945050505050565b6002805461072190611d87565b3360009081526010602090815260408083206001600160a01b0386168452909152812054808310610ea0573360009081526010602090815260408083206001600160a01b0388168452909152812055610ecf565b610eaa818461131a565b3360009081526010602090815260408083206001600160a01b03891684529091529020555b3360008181526010602090815260408083206001600160a01b038916808552908352928190205490519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060019392505050565b6000826001600160a01b038116610f4957600080fd5b610f54338585611326565b5060019392505050565b6000546001600160a01b03163314610fb85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108a5565b6005600854111561100b5760405162461bcd60e51b815260206004820152600b60248201527f66656520746f206869676800000000000000000000000000000000000000000060448201526064016108a5565b600a600954111561105e5760405162461bcd60e51b815260206004820152600b60248201527f66656520746f206869676800000000000000000000000000000000000000000060448201526064016108a5565b600891909155600955565b6000546001600160a01b031633146110c35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108a5565b600680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000546001600160a01b031633146111575760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108a5565b600580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000546001600160a01b031633146111eb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108a5565b600780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461127f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108a5565b6001600160a01b0381166112fb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108a5565b61130481611706565b50565b60006113138284611d1f565b9392505050565b60006113138284611d70565b6000546001600160a01b0384811691161480159061135257506000546001600160a01b03838116911614155b801561136c5750600a546001600160a01b03838116911614155b801561138657506007546001600160a01b03838116911614155b1561140e57601254600e546001600160a01b0384166000908152600f602052604090205483916113b69190611307565b6113c09190611d07565b111561140e5760405162461bcd60e51b815260206004820152601160248201527f57616c6c6574206361702065786365656400000000000000000000000000000060448201526064016108a5565b6000611425600e54836117b490919063ffffffff16565b6001600160a01b0385166000908152600b602052604090205490915060ff168061146757506001600160a01b0383166000908152600c602052604090205460ff165b1561151f576001600160a01b0384166000908152600f602052604090205461148f908261131a565b6001600160a01b038086166000908152600f602052604080822093909355908516815220546114be90826116fa565b6001600160a01b038085166000818152600f602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906115129086815260200190565b60405180910390a36116f4565b60115460ff1615801561153f5750600a546001600160a01b038481169116145b1561157657600e54306000908152600f602052604081205490916115639190611307565b9050801561157457611574816117c0565b505b6001600160a01b0384166000908152600f6020526040902054611599908261131a565b6001600160a01b0385166000908152600f60205260408120919091556008546009546115d291906115cc9060649061131a565b9061131a565b905061160b6115ec826115e6856064611307565b906117b4565b6001600160a01b0386166000908152600f6020526040902054906116fa565b6001600160a01b0385166000908152600f60205260409020556009546116509061163a906115e6856064611307565b306000908152600f6020526040902054906116fa565b306000908152600f602052604090205560085461169790611676906115e6856064611307565b6006546001600160a01b03166000908152600f6020526040902054906116fa565b6006546001600160a01b039081166000908152600f6020908152604091829020939093555185815286821692918816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505b50505050565b60006113138284611d07565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60007f800000000000000000000000000000000000000000000000000000000000000082141561179d57600080fd5b600082126117ab57816107cb565b6107cb82611e28565b60006113138284611d33565b601180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055604080516002808252606082018352600092602083019080368337019050509050308160008151811061182057611820611ebf565b6001600160a01b03928316602091820292909201810191909152600354604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b15801561188d57600080fd5b505afa1580156118a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c591906119f6565b816001815181106118d8576118d8611ebf565b6001600160a01b0392831660209182029290920181019190915230600090815260108252604080822060038054861684529352808220869055915460055492517f791ac9470000000000000000000000000000000000000000000000000000000081529084169363791ac9479361195b9388939092889216904290600401611c96565b600060405180830381600087803b15801561197557600080fd5b505af1158015611989573d6000803e3d6000fd5b5050601180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905550505050565b80356119c481611f1d565b919050565b803580151581146119c457600080fd5b6000602082840312156119eb57600080fd5b813561131381611f1d565b600060208284031215611a0857600080fd5b815161131381611f1d565b60008060408385031215611a2657600080fd5b8235611a3181611f1d565b91506020830135611a4181611f1d565b809150509250929050565b600080600060608486031215611a6157600080fd5b8335611a6c81611f1d565b92506020840135611a7c81611f1d565b929592945050506040919091013590565b600080600060608486031215611aa257600080fd5b8335611aad81611f1d565b9250611abb602085016119c9565b9150611ac9604085016119c9565b90509250925092565b60008060408385031215611ae557600080fd5b8235611af081611f1d565b946020939093013593505050565b60006020808385031215611b1157600080fd5b823567ffffffffffffffff80821115611b2957600080fd5b818501915085601f830112611b3d57600080fd5b813581811115611b4f57611b4f611eee565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108582111715611b9257611b92611eee565b604052828152858101935084860182860187018a1015611bb157600080fd5b600095505b83861015611bdb57611bc7816119b9565b855260019590950194938601938601611bb6565b5098975050505050505050565b600060208284031215611bfa57600080fd5b5035919050565b60008060408385031215611c1457600080fd5b50508035926020909101359150565b600060208083528351808285015260005b81811015611c5057858101830151858201604001528201611c34565b81811115611c62576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611ce65784516001600160a01b031683529383019391830191600101611cc1565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115611d1a57611d1a611e61565b500190565b600082611d2e57611d2e611e90565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611d6b57611d6b611e61565b500290565b600082821015611d8257611d82611e61565b500390565b600181811c90821680611d9b57607f821691505b60208210811415611dd5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611e0d57611e0d611e61565b5060010190565b600082611e2357611e23611e90565b500690565b60007f8000000000000000000000000000000000000000000000000000000000000000821415611e5a57611e5a611e61565b5060000390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6001600160a01b038116811461130457600080fdfea26469706673582212201a462ca245c38fc2b4630dfcad2ba1fe0a7353c7967c41517f7cfa2d1319254a64736f6c63430008070033

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

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000820a75b31312fa46291b5546b5335cd31d16275d000000000000000000000000820a75b31312fa46291b5546b5335cd31d16275d

-----Decoded View---------------
Arg [0] : router_ (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : marketing_ (address): 0x820A75b31312fA46291B5546B5335cd31d16275D
Arg [2] : staking_ (address): 0x820A75b31312fA46291B5546B5335cd31d16275D

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 000000000000000000000000820a75b31312fa46291b5546b5335cd31d16275d
Arg [2] : 000000000000000000000000820a75b31312fa46291b5546b5335cd31d16275d


Deployed Bytecode Sourcemap

22393:13178:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22754:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30701:203;;;;;;;;;;-1:-1:-1;30701:203:0;;;;;:::i;:::-;;:::i;:::-;;;5445:14:1;;5438:22;5420:41;;5408:2;5393:18;30701:203:0;5280:187:1;22912:23:0;;;;;;;;;;-1:-1:-1;22912:23:0;;;;-1:-1:-1;;;;;22912:23:0;;;;;;-1:-1:-1;;;;;4966:55:1;;;4948:74;;4936:2;4921:18;22912:23:0;4802:226:1;27835:102:0;;;;;;;;;;-1:-1:-1;27917:12:0;;27835:102;;;8228:25:1;;;8216:2;8201:18;27835:102:0;8082:177:1;29562:497:0;;;;;;;;;;-1:-1:-1;29562:497:0;;;;;:::i;:::-;;:::i;22944:32::-;;;;;;;;;;-1:-1:-1;22944:32:0;;;;-1:-1:-1;;;;;22944:32:0;;;22836:35;;;;;;;;;;;;22869:2;22836:35;;;;;9475:4:1;9463:17;;;9445:36;;9433:2;9418:18;22836:35:0;9303:184:1;26477:324:0;;;;;;;;;;-1:-1:-1;26477:324:0;;;;;:::i;:::-;;:::i;:::-;;31277:406;;;;;;;;;;-1:-1:-1;31277:406:0;;;;;:::i;:::-;;:::i;26809:96::-;;;;;;;;;;-1:-1:-1;26809:96:0;;;;;:::i;:::-;;:::i;23194:28::-;;;;;;;;;;-1:-1:-1;23194:28:0;;;;-1:-1:-1;;;;;23194:28:0;;;27276:103;;;;;;;;;;-1:-1:-1;27276:103:0;;;;;:::i;:::-;;:::i;23913:47::-;;;;;;;;;;;;;;;;23231:46;;;;;;;;;;-1:-1:-1;23231:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23286:49;;;;;;;;;;-1:-1:-1;23286:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23104:31;;;;;;;;;;;;;;;;28224:138;;;;;;;;;;-1:-1:-1;28224:138:0;;;;;:::i;:::-;;:::i;2389:94::-;;;;;;;;;;;;;:::i;26221:248::-;;;;;;;;;;-1:-1:-1;26221:248:0;;;;;:::i;:::-;;:::i;25477:676::-;;;;;;;;;;-1:-1:-1;25477:676:0;;;;;:::i;:::-;;:::i;28002:101::-;;;;;;;;;;-1:-1:-1;28079:16:0;;28002:101;;1738:87;;;;;;;;;;-1:-1:-1;1784:7:0;1811:6;-1:-1:-1;;;;;1811:6:0;1738:87;;22797:30;;;;;;;;;;;;;:::i;23144:41::-;;;;;;;;;;;;23182:3;23144:41;;31937:579;;;;;;;;;;-1:-1:-1;31937:579:0;;;;;:::i;:::-;;:::i;29089:211::-;;;;;;;;;;-1:-1:-1;29089:211:0;;;;;:::i;:::-;;:::i;27387:316::-;;;;;;;;;;-1:-1:-1;27387:316:0;;;;;:::i;:::-;;:::i;22985:33::-;;;;;;;;;;-1:-1:-1;22985:33:0;;;;-1:-1:-1;;;;;22985:33:0;;;27032:117;;;;;;;;;;-1:-1:-1;27032:117:0;;;;;:::i;:::-;;:::i;28669:194::-;;;;;;;;;;-1:-1:-1;28669:194:0;;;;;:::i;:::-;-1:-1:-1;;;;;28821:25:0;;;28789:7;28821:25;;;:17;:25;;;;;;;;:34;;;;;;;;;;;;;28669:194;26913:111;;;;;;;;;;-1:-1:-1;26913:111:0;;;;;:::i;:::-;;:::i;27157:::-;;;;;;;;;;-1:-1:-1;27157:111:0;;;;;:::i;:::-;;:::i;23027:30::-;;;;;;;;;;-1:-1:-1;23027:30:0;;;;-1:-1:-1;;;;;23027:30:0;;;23066:29;;;;;;;;;;;;;;;;2638:192;;;;;;;;;;-1:-1:-1;2638:192:0;;;;;:::i;:::-;;:::i;22880:23::-;;;;;;;;;;-1:-1:-1;22880:23:0;;;;-1:-1:-1;;;;;22880:23:0;;;22754:34;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30701:203::-;30844:10;30804:4;30826:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;30826:38:0;;;;;;;;;:46;;;30892:4;30701:203;;;;;:::o;29562:497::-;29705:4;29692:2;-1:-1:-1;;;;;24282:18:0;;24274:27;;;;;;-1:-1:-1;;;;;29920:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;29958:10:::1;29920:59:::0;;;;;;;;:70:::1;::::0;29984:5;29920:63:::1;:70::i;:::-;-1:-1:-1::0;;;;;29882:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;29906:10:::1;29882:35:::0;;;;;;;:108;30001:26:::1;29900:4:::0;30017:2;30021:5;30001:9:::1;:26::i;:::-;-1:-1:-1::0;30047:4:0::1;::::0;29562:497;-1:-1:-1;;;;29562:497:0:o;26477:324::-;1784:7;1811:6;-1:-1:-1;;;;;1811:6:0;689:10;1958:23;1950:68;;;;-1:-1:-1;;;1950:68:0;;7583:2:1;1950:68:0;;;7565:21:1;;;7602:18;;;7595:30;7661:34;7641:18;;;7634:62;7713:18;;1950:68:0;;;;;;;;;26610:17;;26593:14:::1;26640:154;26664:6;26660:1;:10;26640:154;;;26724:4;26692:14;:29;26707:10;26718:1;26707:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;26692:29:0::1;-1:-1:-1::0;;;;;26692:29:0::1;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;26778:4;26743:17;:32;26761:10;26772:1;26761:13;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;26743:32:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;26743:32:0;:39;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;26672:3;::::1;::::0;::::1;:::i;:::-;;;;26640:154;;;;26582:219;26477:324:::0;:::o;31277:406::-;31458:10;31377:4;31440:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;31440:62:0;;;;;;;;;;:78;;31507:10;31440:66;:78::i;:::-;31417:10;31399:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;31399:38:0;;;;;;;;;;;;:119;;;31534;8228:25:1;;;31399:38:0;;31534:119;;8201:18:1;31534:119:0;;;;;;;-1:-1:-1;31671:4:0;31277:406;;;;:::o;26809:96::-;1784:7;1811:6;-1:-1:-1;;;;;1811:6:0;689:10;1958:23;1950:68;;;;-1:-1:-1;;;1950:68:0;;7583:2:1;1950:68:0;;;7565:21:1;;;7602:18;;;7595:30;7661:34;7641:18;;;7634:62;7713:18;;1950:68:0;7381:356:1;1950:68:0;26879:7:::1;:18:::0;;;::::1;-1:-1:-1::0;;;;;26879:18:0;;;::::1;::::0;;;::::1;::::0;;26809:96::o;27276:103::-;1784:7;1811:6;-1:-1:-1;;;;;1811:6:0;689:10;1958:23;1950:68;;;;-1:-1:-1;;;1950:68:0;;7583:2:1;1950:68:0;;;7565:21:1;;;7602:18;;;7595:30;7661:34;7641:18;;;7634:62;7713:18;;1950:68:0;7381:356:1;1950:68:0;27349:9:::1;:22:::0;27276:103::o;28224:138::-;28337:16;;-1:-1:-1;;;;;28315:17:0;;28288:7;28315:17;;;:12;:17;;;;;;28288:7;;28315:39;;:17;:21;:39::i;2389:94::-;1784:7;1811:6;-1:-1:-1;;;;;1811:6:0;689:10;1958:23;1950:68;;;;-1:-1:-1;;;1950:68:0;;7583:2:1;1950:68:0;;;7565:21:1;;;7602:18;;;7595:30;7661:34;7641:18;;;7634:62;7713:18;;1950:68:0;7381:356:1;1950:68:0;2454:21:::1;2472:1;2454:9;:21::i;:::-;2389:94::o:0;26221:248::-;1784:7;1811:6;-1:-1:-1;;;;;1811:6:0;689:10;1958:23;1950:68;;;;-1:-1:-1;;;1950:68:0;;7583:2:1;1950:68:0;;;7565:21:1;;;7602:18;;;7595:30;7661:34;7641:18;;;7634:62;7713:18;;1950:68:0;7381:356:1;1950:68:0;-1:-1:-1;;;;;26368:20:0;;::::1;;::::0;;;:14:::1;:20;::::0;;;;;;;:38;;;::::1;;::::0;;;::::1;;::::0;;26417:17:::1;:23:::0;;;;;:44;;;::::1;;::::0;;;::::1;;::::0;;26221:248::o;25477:676::-;24190:7;;25585;;-1:-1:-1;;;;;24190:7:0;24168:10;:30;24160:39;;;;;;25614:16;25610:118:::1;;25662:5;25652:30;25669:12;;25652:30;;;;8228:25:1::0;;8216:2;8201:18;;8082:177;25652:30:0::1;;;;;;;;-1:-1:-1::0;25704:12:0::1;::::0;25697:19:::1;;25610:118;25756:1;25742:11;:15;25738:162;;;25787:44;25812:17;:11;:15;:17::i;:::-;25787:12;::::0;;:16:::1;:44::i;:::-;25772:12;:59:::0;25738:162:::1;;;25862:12;::::0;:38:::1;::::0;25887:11;25862:16:::1;:38::i;:::-;25847:12;:53:::0;25738:162:::1;25915:12;::::0;25930:10:::1;-1:-1:-1::0;25911:56:0::1;;;25957:10;25942:12;:25:::0;25911:56:::1;26012:12;::::0;25997:28:::1;::::0;23542:35:::1;23452:22;23380:11:::0;23542:35:::1;:::i;:::-;23530:48;::::0;23380:11;23530:48:::1;:::i;:::-;25997:14:::0;::::1;:28::i;:::-;25978:16;:47:::0;26058:12:::1;::::0;26041:30:::1;::::0;8228:25:1;;;26051:5:0;;26041:30:::1;::::0;8216:2:1;8201:18;26041:30:0::1;;;;;;;26092:13;;;;;;;;;-1:-1:-1::0;;;;;26092:13:0::1;-1:-1:-1::0;;;;;26084:27:0::1;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;26133:12:0::1;::::0;;25477:676;-1:-1:-1;;;;;25477:676:0:o;22797:30::-;;;;;;;:::i;31937:579::-;32101:10;32042:4;32083:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;32083:38:0;;;;;;;;;;32136:27;;;32132:219;;32196:10;32219:1;32178:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;32178:38:0;;;;;;;;;:42;32132:219;;;32290:61;:8;32321:15;32290:12;:61::i;:::-;32267:10;32249:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;32249:38:0;;;;;;;;;:102;32132:219;32390:10;32437:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;32367:119:0;;32437:38;;;;;;;;;;;32367:119;;8228:25:1;;;32367:119:0;;32390:10;32367:119;;8201:18:1;32367:119:0;;;;;;;-1:-1:-1;32504:4:0;;31937:579;-1:-1:-1;;;31937:579:0:o;29089:211::-;29216:4;29194:2;-1:-1:-1;;;;;24282:18:0;;24274:27;;;;;;29238:32:::1;29248:10;29260:2;29264:5;29238:9;:32::i;:::-;-1:-1:-1::0;29288:4:0::1;::::0;29089:211;-1:-1:-1;;;29089:211:0:o;27387:316::-;1784:7;1811:6;-1:-1:-1;;;;;1811:6:0;689:10;1958:23;1950:68;;;;-1:-1:-1;;;1950:68:0;;7583:2:1;1950:68:0;;;7565:21:1;;;7602:18;;;7595:30;7661:34;7641:18;;;7634:62;7713:18;;1950:68:0;7381:356:1;1950:68:0;27567:1:::1;27553:10;;:15;;27545:39;;;::::0;-1:-1:-1;;;27545:39:0;;7944:2:1;27545:39:0::1;::::0;::::1;7926:21:1::0;7983:2;7963:18;;;7956:30;8022:13;8002:18;;;7995:41;8053:18;;27545:39:0::1;7742:335:1::0;27545:39:0::1;27619:2;27603:12;;:18;;27595:42;;;::::0;-1:-1:-1;;;27595:42:0;;7944:2:1;27595:42:0::1;::::0;::::1;7926:21:1::0;7983:2;7963:18;;;7956:30;8022:13;8002:18;;;7995:41;8053:18;;27595:42:0::1;7742:335:1::0;27595:42:0::1;27648:10;:17:::0;;;;27676:12:::1;:19:::0;27387:316::o;27032:117::-;1784:7;1811:6;-1:-1:-1;;;;;1811:6:0;689:10;1958:23;1950:68;;;;-1:-1:-1;;;1950:68:0;;7583:2:1;1950:68:0;;;7565:21:1;;;7602:18;;;7595:30;7661:34;7641:18;;;7634:62;7713:18;;1950:68:0;7381:356:1;1950:68:0;27112:18:::1;:29:::0;;;::::1;-1:-1:-1::0;;;;;27112:29:0;;;::::1;::::0;;;::::1;::::0;;27032:117::o;26913:111::-;1784:7;1811:6;-1:-1:-1;;;;;1811:6:0;689:10;1958:23;1950:68;;;;-1:-1:-1;;;1950:68:0;;7583:2:1;1950:68:0;;;7565:21:1;;;7602:18;;;7595:30;7661:34;7641:18;;;7634:62;7713:18;;1950:68:0;7381:356:1;1950:68:0;26994:9:::1;:22:::0;;;::::1;-1:-1:-1::0;;;;;26994:22:0;;;::::1;::::0;;;::::1;::::0;;26913:111::o;27157:::-;1784:7;1811:6;-1:-1:-1;;;;;1811:6:0;689:10;1958:23;1950:68;;;;-1:-1:-1;;;1950:68:0;;7583:2:1;1950:68:0;;;7565:21:1;;;7602:18;;;7595:30;7661:34;7641:18;;;7634:62;7713:18;;1950:68:0;7381:356:1;1950:68:0;27234:15:::1;:26:::0;;;::::1;-1:-1:-1::0;;;;;27234:26:0;;;::::1;::::0;;;::::1;::::0;;27157:111::o;2638:192::-;1784:7;1811:6;-1:-1:-1;;;;;1811:6:0;689:10;1958:23;1950:68;;;;-1:-1:-1;;;1950:68:0;;7583:2:1;1950:68:0;;;7565:21:1;;;7602:18;;;7595:30;7661:34;7641:18;;;7634:62;7713:18;;1950:68:0;7381:356:1;1950:68:0;-1:-1:-1;;;;;2727:22:0;::::1;2719:73;;;::::0;-1:-1:-1;;;2719:73:0;;6830:2:1;2719:73:0::1;::::0;::::1;6812:21:1::0;6869:2;6849:18;;;6842:30;6908:34;6888:18;;;6881:62;6979:8;6959:18;;;6952:36;7005:19;;2719:73:0::1;6628:402:1::0;2719:73:0::1;2803:19;2813:8;2803:9;:19::i;:::-;2638:192:::0;:::o;9611:98::-;9669:7;9696:5;9700:1;9696;:5;:::i;:::-;9689:12;9611:98;-1:-1:-1;;;9611:98:0:o;8855:::-;8913:7;8940:5;8944:1;8940;:5;:::i;32809:1988::-;1784:7;1811:6;-1:-1:-1;;;;;32941:15:0;;;1811:6;;32941:15;;;;:45;;-1:-1:-1;1784:7:0;1811:6;-1:-1:-1;;;;;32973:13:0;;;1811:6;;32973:13;;32941:45;:81;;;;-1:-1:-1;33009:13:0;;-1:-1:-1;;;;;33003:19:0;;;33009:13;;33003:19;;32941:81;:119;;;;-1:-1:-1;33045:15:0;;-1:-1:-1;;;;;33039:21:0;;;33045:15;;33039:21;;32941:119;32923:314;;;33163:9;;33134:16;;-1:-1:-1;;;;;33113:16:0;;;;;;:12;:16;;;;;;33154:5;;33113:38;;:16;:20;:38::i;:::-;:46;;;;:::i;:::-;:59;;33087:138;;;;-1:-1:-1;;;33087:138:0;;7237:2:1;33087:138:0;;;7219:21:1;7276:2;7256:18;;;7249:30;7315:19;7295:18;;;7288:47;7352:18;;33087:138:0;7035:341:1;33087:138:0;33249:16;33268:27;33278:16;;33268:5;:9;;:27;;;;:::i;:::-;-1:-1:-1;;;;;33351:20:0;;;;;;:14;:20;;;;;;33249:46;;-1:-1:-1;33351:20:0;;;:45;;-1:-1:-1;;;;;;33375:21:0;;;;;;:17;:21;;;;;;;;33351:45;33347:1443;;;-1:-1:-1;;;;;33473:18:0;;;;;;:12;:18;;;;;;:32;;33496:8;33473:22;:32::i;:::-;-1:-1:-1;;;;;33452:18:0;;;;;;;:12;:18;;;;;;:53;;;;33592:16;;;;;;;:30;;33613:8;33592:20;:30::i;:::-;-1:-1:-1;;;;;33573:16:0;;;;;;;:12;:16;;;;;;;:49;;;;33644:25;;;;;;;;;;33663:5;8228:25:1;;8216:2;8201:18;;8082:177;33644:25:0;;;;;;;;33347:1443;;;33707:6;;;;33706:7;:30;;;;-1:-1:-1;33723:13:0;;-1:-1:-1;;;;;33717:19:0;;;33723:13;;33717:19;33706:30;33702:221;;;33803:16;;33792:4;33757:11;33771:27;;;:12;:27;;;;;;33757:11;;33771:49;;:27;:31;:49::i;:::-;33757:63;-1:-1:-1;33843:7:0;;33839:69;;33875:13;33884:3;33875:8;:13::i;:::-;33738:185;33702:221;-1:-1:-1;;;;;33999:18:0;;;;;;:12;:18;;;;;;:32;;34022:8;33999:22;:32::i;:::-;-1:-1:-1;;;;;33978:18:0;;;;;;:12;:18;;;;;:53;;;;34140:10;;34122:12;;34106:45;;34140:10;34106:29;;23182:3;;34106:15;:29::i;:::-;:33;;:45::i;:::-;34086:65;-1:-1:-1;34245:94:0;34284:40;34086:65;34284:25;:8;23182:3;34284:12;:25::i;:::-;:29;;:40::i;:::-;-1:-1:-1;;;;;34245:16:0;;;;;;:12;:16;;;;;;;:20;:94::i;:::-;-1:-1:-1;;;;;34226:16:0;;;;;;:12;:16;;;;;:113;34507:12;;34427:108;;34477:43;;:25;:8;23182:3;34477:12;:25::i;:43::-;34448:4;34427:27;;;;:12;:27;;;;;;;:31;:108::i;:::-;34418:4;34397:27;;;;:12;:27;;;;;:138;34719:10;;34634:97;;34689:41;;:25;:8;23182:3;34689:12;:25::i;:41::-;34647:18;;-1:-1:-1;;;;;34647:18:0;34634:32;;;;:12;:32;;;;;;;:54;:97::i;:::-;34612:18;;-1:-1:-1;;;;;34612:18:0;;;34599:32;;;;:12;:32;;;;;;;;;:132;;;;34753:25;8228::1;;;34753::0;;;;;;;;;;8201:18:1;34753:25:0;;;;;;;33687:1103;33347:1443;32912:1885;32809:1988;;;:::o;8474:98::-;8532:7;8559:5;8563:1;8559;:5;:::i;2838:173::-;2894:16;2913:6;;-1:-1:-1;;;;;2930:17:0;;;;;;;;;;2963:40;;2913:6;;;;;;;2963:40;;2894:16;2963:40;2883:128;2838:173;:::o;22218:129::-;22264:6;21368:16;22291:15;;;22283:24;;;;;;22329:1;22325;:5;:14;;22338:1;22325:14;;;22333:2;22334:1;22333:2;:::i;9212:98::-;9270:7;9297:5;9301:1;9297;:5;:::i;34903:665::-;24060:6;:13;;;;24069:4;24060:13;;;35046:16:::1;::::0;;35060:1:::1;35046:16:::0;;;;;::::1;::::0;;-1:-1:-1;;35046:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;35046:16:0::1;35022:40;;35091:4;35073;35078:1;35073:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35073:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;35117:6:::1;::::0;:13:::1;::::0;;;;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;35073:7;;35117:13;;;;;:6;:13;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35107:4;35112:1;35107:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35107:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;35267:4:::1;35241:32;::::0;;;:17:::1;:32:::0;;;;;;35282:6:::1;::::0;;;::::1;35241:49:::0;;;;;;;:55;;;35362:6;;35510:9:::1;::::0;35362:198;;;;;:6;;::::1;::::0;:57:::1;::::0;:198:::1;::::0;35293:3;;35241:32;;35491:4;;35510:9:::1;::::0;35534:15:::1;::::0;35362:198:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;24096:6:0;:14;;;;;;-1:-1:-1;;;;34903:665:0:o;14:134:1:-;82:20;;111:31;82:20;111:31;:::i;:::-;14:134;;;:::o;153:160::-;218:20;;274:13;;267:21;257:32;;247:60;;303:1;300;293:12;318:247;377:6;430:2;418:9;409:7;405:23;401:32;398:52;;;446:1;443;436:12;398:52;485:9;472:23;504:31;529:5;504:31;:::i;570:251::-;640:6;693:2;681:9;672:7;668:23;664:32;661:52;;;709:1;706;699:12;661:52;741:9;735:16;760:31;785:5;760:31;:::i;1086:388::-;1154:6;1162;1215:2;1203:9;1194:7;1190:23;1186:32;1183:52;;;1231:1;1228;1221:12;1183:52;1270:9;1257:23;1289:31;1314:5;1289:31;:::i;:::-;1339:5;-1:-1:-1;1396:2:1;1381:18;;1368:32;1409:33;1368:32;1409:33;:::i;:::-;1461:7;1451:17;;;1086:388;;;;;:::o;1479:456::-;1556:6;1564;1572;1625:2;1613:9;1604:7;1600:23;1596:32;1593:52;;;1641:1;1638;1631:12;1593:52;1680:9;1667:23;1699:31;1724:5;1699:31;:::i;:::-;1749:5;-1:-1:-1;1806:2:1;1791:18;;1778:32;1819:33;1778:32;1819:33;:::i;:::-;1479:456;;1871:7;;-1:-1:-1;;;1925:2:1;1910:18;;;;1897:32;;1479:456::o;1940:383::-;2011:6;2019;2027;2080:2;2068:9;2059:7;2055:23;2051:32;2048:52;;;2096:1;2093;2086:12;2048:52;2135:9;2122:23;2154:31;2179:5;2154:31;:::i;:::-;2204:5;-1:-1:-1;2228:35:1;2259:2;2244:18;;2228:35;:::i;:::-;2218:45;;2282:35;2313:2;2302:9;2298:18;2282:35;:::i;:::-;2272:45;;1940:383;;;;;:::o;2328:315::-;2396:6;2404;2457:2;2445:9;2436:7;2432:23;2428:32;2425:52;;;2473:1;2470;2463:12;2425:52;2512:9;2499:23;2531:31;2556:5;2531:31;:::i;:::-;2581:5;2633:2;2618:18;;;;2605:32;;-1:-1:-1;;;2328:315:1:o;2648:1191::-;2732:6;2763:2;2806;2794:9;2785:7;2781:23;2777:32;2774:52;;;2822:1;2819;2812:12;2774:52;2862:9;2849:23;2891:18;2932:2;2924:6;2921:14;2918:34;;;2948:1;2945;2938:12;2918:34;2986:6;2975:9;2971:22;2961:32;;3031:7;3024:4;3020:2;3016:13;3012:27;3002:55;;3053:1;3050;3043:12;3002:55;3089:2;3076:16;3111:2;3107;3104:10;3101:36;;;3117:18;;:::i;:::-;3163:2;3160:1;3156:10;3195:2;3189:9;3254:66;3249:2;3245;3241:11;3237:84;3229:6;3225:97;3372:6;3360:10;3357:22;3352:2;3340:10;3337:18;3334:46;3331:72;;;3383:18;;:::i;:::-;3419:2;3412:22;3469:18;;;3503:15;;;;-1:-1:-1;3538:11:1;;;3568;;;3564:20;;3561:33;-1:-1:-1;3558:53:1;;;3607:1;3604;3597:12;3558:53;3629:1;3620:10;;3639:169;3653:2;3650:1;3647:9;3639:169;;;3710:23;3729:3;3710:23;:::i;:::-;3698:36;;3671:1;3664:9;;;;;3754:12;;;;3786;;3639:169;;;-1:-1:-1;3827:6:1;2648:1191;-1:-1:-1;;;;;;;;2648:1191:1:o;4112:180::-;4171:6;4224:2;4212:9;4203:7;4199:23;4195:32;4192:52;;;4240:1;4237;4230:12;4192:52;-1:-1:-1;4263:23:1;;4112:180;-1:-1:-1;4112:180:1:o;4297:247::-;4364:6;4372;4425:2;4413:9;4404:7;4400:23;4396:32;4393:52;;;4441:1;4438;4431:12;4393:52;-1:-1:-1;;4464:23:1;;;4534:2;4519:18;;;4506:32;;-1:-1:-1;4297:247:1:o;5967:656::-;6079:4;6108:2;6137;6126:9;6119:21;6169:6;6163:13;6212:6;6207:2;6196:9;6192:18;6185:34;6237:1;6247:140;6261:6;6258:1;6255:13;6247:140;;;6356:14;;;6352:23;;6346:30;6322:17;;;6341:2;6318:26;6311:66;6276:10;;6247:140;;;6405:6;6402:1;6399:13;6396:91;;;6475:1;6470:2;6461:6;6450:9;6446:22;6442:31;6435:42;6396:91;-1:-1:-1;6539:2:1;6527:15;6544:66;6523:88;6508:104;;;;6614:2;6504:113;;5967:656;-1:-1:-1;;;5967:656:1:o;8264:1034::-;8534:4;8582:3;8571:9;8567:19;8613:6;8602:9;8595:25;8639:2;8677:6;8672:2;8661:9;8657:18;8650:34;8720:3;8715:2;8704:9;8700:18;8693:31;8744:6;8779;8773:13;8810:6;8802;8795:22;8848:3;8837:9;8833:19;8826:26;;8887:2;8879:6;8875:15;8861:29;;8908:1;8918:218;8932:6;8929:1;8926:13;8918:218;;;8997:13;;-1:-1:-1;;;;;8993:62:1;8981:75;;9111:15;;;;9076:12;;;;8954:1;8947:9;8918:218;;;-1:-1:-1;;;;;;;9192:55:1;;;;9187:2;9172:18;;9165:83;-1:-1:-1;;;9279:3:1;9264:19;9257:35;9153:3;8264:1034;-1:-1:-1;;;8264:1034:1:o;9492:128::-;9532:3;9563:1;9559:6;9556:1;9553:13;9550:39;;;9569:18;;:::i;:::-;-1:-1:-1;9605:9:1;;9492:128::o;9625:120::-;9665:1;9691;9681:35;;9696:18;;:::i;:::-;-1:-1:-1;9730:9:1;;9625:120::o;9750:228::-;9790:7;9916:1;9848:66;9844:74;9841:1;9838:81;9833:1;9826:9;9819:17;9815:105;9812:131;;;9923:18;;:::i;:::-;-1:-1:-1;9963:9:1;;9750:228::o;9983:125::-;10023:4;10051:1;10048;10045:8;10042:34;;;10056:18;;:::i;:::-;-1:-1:-1;10093:9:1;;9983:125::o;10113:437::-;10192:1;10188:12;;;;10235;;;10256:61;;10310:4;10302:6;10298:17;10288:27;;10256:61;10363:2;10355:6;10352:14;10332:18;10329:38;10326:218;;;10400:77;10397:1;10390:88;10501:4;10498:1;10491:15;10529:4;10526:1;10519:15;10326:218;;10113:437;;;:::o;10555:195::-;10594:3;10625:66;10618:5;10615:77;10612:103;;;10695:18;;:::i;:::-;-1:-1:-1;10742:1:1;10731:13;;10555:195::o;10755:112::-;10787:1;10813;10803:35;;10818:18;;:::i;:::-;-1:-1:-1;10852:9:1;;10755:112::o;10872:191::-;10907:3;10938:66;10931:5;10928:77;10925:103;;;11008:18;;:::i;:::-;-1:-1:-1;11048:1:1;11044:13;;10872:191::o;11068:184::-;11120:77;11117:1;11110:88;11217:4;11214:1;11207:15;11241:4;11238:1;11231:15;11257:184;11309:77;11306:1;11299:88;11406:4;11403:1;11396:15;11430:4;11427:1;11420:15;11446:184;11498:77;11495:1;11488:88;11595:4;11592:1;11585:15;11619:4;11616:1;11609:15;11635:184;11687:77;11684:1;11677:88;11784:4;11781:1;11774:15;11808:4;11805:1;11798:15;11824:154;-1:-1:-1;;;;;11903:5:1;11899:54;11892:5;11889:65;11879:93;;11968:1;11965;11958:12

Swarm Source

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