ETH Price: $2,941.21 (-0.56%)

Token

ANTSpace (ANT)

Overview

Max Total Supply

100,000,000,000,000 ANT

Holders

3,476

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
286.15 ANT

Value
$0.00
0xded14e3bcd5c629a173da23ba648e0d56e7a3d96
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
ANTSpace

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Arbiscan.io on 2023-05-13
*/

pragma solidity ^0.8.0;
pragma abicoder v2;

// SPDX-License-Identifier: Unlicensed
interface IERC20 {
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

abstract contract Ownable {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

    constructor ()  {
        address msgSender = msg.sender;
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == msg.sender, "Ownable: caller is not the owner");
        _;
    }

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

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

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

        return c;
    }

    /**
     * @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 sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @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) {
        // 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 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }
}

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

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

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

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

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

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

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

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

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

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

/**
 * @title SafeBEP20
 * @dev Wrappers around BEP20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeBEP20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        // solhint-disable-next-line max-line-length
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            'SafeBEP20: approve from non-zero to non-zero allowance'
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(
            value,
            'SafeBEP20: decreased allowance below zero'
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, 'SafeBEP20: low-level call failed');
        if (returndata.length > 0) {
            // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), 'SafeBEP20: BEP20 operation did not succeed');
        }
    }
}

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

    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 IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

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

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

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

interface IUniswapV2Router01 {
    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 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 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[] calldata path)
    external
    view
    returns (uint256[] memory amounts);

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

interface IUniswapV2Router02 is IUniswapV2Router01 {
    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 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 swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        address referrer,
        uint256 deadline
    ) external;
}

/**
 * @title ANTSpace
 * @dev In the world of the internet, each of us is as tiny as an ant,
 * with weak individual strength and small stature, and we are never
 * taken seriously in the crypto world. However, web3 users span the
 * globe, and while the power of a single ant is weak and its voice
 * goes unheard, our collective strength is invincible. We may be
 * ordinary, but we can still create miracles.
 **/

contract ANTSpace is IERC20, Ownable {
    using SafeMath for uint256;
    using SafeERC20 for IERC20;

    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;

    mapping(address => bool) private _isExcludedFromFee;

    uint256 private _tFeeTotal;

    string private _name = "ANTSpace";
    string private _symbol = "ANT";

    uint8 private _decimals = 9;

    uint256 public _burnFee = 100;
    uint256 private _previousBurnFee;

    uint256 public _LPFee = 200;
    uint256 private _previousLPFee;

    uint256 private _tTotal = 100 * 10 ** 12 * 10 ** _decimals;

    uint256 public minTokenNumberToSell = 100 * 10 ** 7 * 10 ** _decimals;

    address public uniswapV2RouterAddress = address(0xc873fEcbd354f5A56E00E710B90EF4201db2448d);

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public  uniswapV2Pair;

    address private _publicOfferingAddress;
    address private _createLiquidityAddress;
    address private  _lpAutoIncreaseAddress;
    address public WETH = 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1;
    address public FACTORY = 0x6EcCab422D763aC031210895C81787E87B43A652;
    IUniswapV2Factory factory = IUniswapV2Factory(address(FACTORY));

    bool public swapAndLiquifyEnabled = true;

    bool inSwapAndLiquify;

    bool initPair;

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    constructor(address publicOfferingAddress_, address createLiquidityAddress_, address lpAutoIncreaseAddress_) {
        _publicOfferingAddress = publicOfferingAddress_;
        _createLiquidityAddress = createLiquidityAddress_;
        _lpAutoIncreaseAddress = lpAutoIncreaseAddress_;
        _tOwned[_publicOfferingAddress] = _tTotal * 9 / 10;
        _tOwned[_createLiquidityAddress] = _tTotal - _tOwned[_publicOfferingAddress];

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(uniswapV2RouterAddress);

        // Create a uniswap pair for this new token
        _approve(address(this), address(_uniswapV2Router), 2 ** 256 - 1);
        IERC20(WETH).safeApprove(address(_uniswapV2Router), 2 ** 256 - 1);

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

        //exclude owner and this contract from fee
        _isExcludedFromFee[msg.sender] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_publicOfferingAddress] = true;
        _isExcludedFromFee[_createLiquidityAddress] = true;
	    _isExcludedFromFee[_lpAutoIncreaseAddress] = true;

        emit Transfer(address(0), _publicOfferingAddress, _tOwned[_publicOfferingAddress]);
        emit Transfer(address(0), _createLiquidityAddress, _tOwned[_createLiquidityAddress]);
    }

    function initPairOfETH() external onlyOwner {
        require(!initPair, "ANT Space Error: Pair already initted.");
        uniswapV2Pair = factory.createPair(address(WETH), address(this));
        initPair = true;
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint256) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return _tOwned[account];
    }

    function transfer(address recipient, uint256 amount)
    public
    override
    returns (bool)
    {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    function allowance(address owner, address spender)
    public
    view
    override
    returns (uint256)
    {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount)
    public
    override
    returns (bool)
    {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender,msg.sender, _allowances[sender][msg.sender].sub(amount,"ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue)
    public
    virtual
    returns (bool)
    {
        _approve(
            msg.sender,
            spender,
            _allowances[msg.sender][spender].add(addedValue)
        );
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
    public
    virtual
    returns (bool)
    {
        _approve(
            msg.sender,
            spender,
            _allowances[msg.sender][spender].sub(
                subtractedValue,
                "ERC20: decreased allowance below zero"
            )
        );
        return true;
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function isExcludedFromFee(address account) public view returns (bool) {
        return _isExcludedFromFee[account];
    }

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    function updatePublicOfferingAddress(address publicOfferingAddress_) external onlyOwner {
        require(publicOfferingAddress_ != address(0), "ANT Space error: publicOfferingAddress can not be address(0).");
        _publicOfferingAddress = publicOfferingAddress_;
    }

    function updatelpAutoIncreaseAddress(address lpAutoIncreaseAddress_) external onlyOwner {
        require(lpAutoIncreaseAddress_ != address(0), "ANT Space error: lpAutoIncreaseAddress can not be address(0).");
        _lpAutoIncreaseAddress = lpAutoIncreaseAddress_;
    }

    function updateCreateLiquidityAddress(address createLiquidityAddress_) external onlyOwner {
        require(createLiquidityAddress_ != address(0), "ANT Space error: createLiquidityAddress can not be address(0).");
        _createLiquidityAddress = createLiquidityAddress_;
    }

    function publicOfferingAddress() view external returns(address) {
        return _publicOfferingAddress;
    }

    function lpAutoIncreaseAddress() view external returns(address) {
        return _lpAutoIncreaseAddress;
    }

    function createLiquidityAddress() view external returns(address) {
        return _createLiquidityAddress;
    }

    //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

    function removeAllFee() private {
        _previousBurnFee = _burnFee;
        _previousLPFee = _LPFee;

        _burnFee = 0;
        _LPFee = 0;
    }

    function restoreAllFee() private {
        _burnFee = _previousBurnFee;
        _LPFee = _previousLPFee;
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");

        //swap and liquify
        uint256 contractTokenBalance = balanceOf(address(this));

        bool shouldSell = contractTokenBalance >= minTokenNumberToSell;

        if (
            shouldSell &&
            !inSwapAndLiquify &&
            swapAndLiquifyEnabled &&
            from != uniswapV2Pair &&
            to != _createLiquidityAddress &&
            to != _lpAutoIncreaseAddress &&
            !(from == address(this) && to == address(uniswapV2Pair)) // swap 1 time
        ) {
            contractTokenBalance = minTokenNumberToSell;
            swapAndLiquify(contractTokenBalance);
        }

        //indicates if fee should be deducted from transfer
        bool takeFee = true;

        //if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFee[from] || _isExcludedFromFee[to] ) {
            takeFee = false;
        }

        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from, to, amount, takeFee);
    }


    // swap and liquify
    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap{
        // split the contract balance into 2 pieces
        uint256 tokenPiece = contractTokenBalance.div(2);

        uint256 beforeSwapETH = address(this).balance;

        swapThisTokenForToken(tokenPiece);

        uint256 ETHToBeAddedToLiquidity = address(this).balance.sub(beforeSwapETH);

        addLiquidity(_lpAutoIncreaseAddress, contractTokenBalance, ETHToBeAddedToLiquidity);

        emit SwapAndLiquify(tokenPiece, ETHToBeAddedToLiquidity, tokenPiece);
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee
    ) private {
        if (!takeFee) removeAllFee();

        _transferStandard(sender, recipient, amount);

        if (!takeFee) restoreAllFee();
    }

    function _takeBurnFee(address sender, uint256 tAmount) private {
        if (_burnFee == 0) return;
        _tOwned[address(0)] = _tOwned[address(0)].add(tAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
        emit Transfer(sender, address(0), tAmount);
    }

    function _takeLPFee(address sender, uint256 tAmount) private {
        if (_LPFee == 0) return;
        _tOwned[address(this)] = _tOwned[address(this)].add(tAmount);
        emit Transfer(sender, address(this), tAmount);
    }


    function swapThisTokenForToken(uint256 thisTokenAmount) private{
        // generate the uniswap pair path of token -> ETH
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;
        // make the swap
        bool success = false;
        try uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            thisTokenAmount,
            0, 
            path,
            address(this),
            address(0),
            block.timestamp + 360
            ){
            success = true;
        } catch {
            try uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
                thisTokenAmount,
                0, 
                path,
                address(this),
                block.timestamp + 360
                ){
                success = true;
            } catch {}
        }
        if (!success) {
            return;
        }
    }

    function addLiquidity(address receiver, uint256 tokenAmount, uint256 tokenETHAmount) private {
        try uniswapV2Router.addLiquidityETH {value : tokenETHAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            receiver,
            block.timestamp + 360
        ) {
           return;
        } catch {}
    }

    function emergencyTokenWithdraw(uint256 _amount) public onlyOwner {
        require(_amount <= balanceOf(address(this)), 'not enough token');
        _tOwned[address(this)] = _tOwned[address(this)].sub(_amount);
        _tOwned[address(msg.sender)] = _tOwned[address(msg.sender)].add(_amount);
        emit Transfer(address(this), msg.sender, _amount);
    }

    function emergencyLPWithdraw(uint256 _amount) public onlyOwner {
        require(_amount <= IERC20(uniswapV2Pair).balanceOf(address(this)), 'not enough LP');
        IERC20(uniswapV2Pair).safeTransfer(address(msg.sender), _amount);
    }

    function emergencyARBWithdraw() public onlyOwner {
        (bool success, ) = address(msg.sender).call{ value: address(this).balance }("");
        require(success, "Address: unable to send value, may have reverted");
    }

    function emergencyETHWithdraw(uint256 _amount) public onlyOwner {

        (bool success, ) = msg.sender.call{ value: _amount }("");
        require(success, "Address: unable to send value, charity may have reverted");
    }

    function updateNumTokensSellToAddToLiquidity(uint256 _minTokenNumberToSell) external onlyOwner{
        minTokenNumberToSell = _minTokenNumberToSell;
    }

    function updateBurnFee(uint256 burnFee) external onlyOwner{
        _burnFee = burnFee;
    }

    function updateLPFee(uint256 LPFee) external onlyOwner{
        _LPFee = LPFee;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
    }

    function _transferStandard(address sender,address recipient, uint256 tAmount) private {
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        uint256 burnAmount = tAmount.mul(_burnFee).div(10000);
        uint256 lpAmount = tAmount.mul(_LPFee).div(10000);
        uint256 recipentAmount = tAmount.sub(burnAmount).sub(lpAmount);
        _takeBurnFee(sender, burnAmount);
        _takeLPFee(sender, lpAmount);

        _tOwned[recipient] = _tOwned[recipient].add(recipentAmount);
        emit Transfer(sender, recipient, recipentAmount);
    }

    function updateUniswapV2RouterAddress(address uniswapV2RouterAddress_) external onlyOwner {
        uniswapV2RouterAddress = uniswapV2RouterAddress_;
    }

    function updateUniswapV2Pair(address uniswapV2Pair_) external onlyOwner {
        uniswapV2Pair = uniswapV2Pair_;
    }

    function updateWETH(address WETH_) external onlyOwner {
        WETH = WETH_;
    }

    function updateFACTORY(address FACTORY_) external onlyOwner {
        FACTORY = FACTORY_;
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"publicOfferingAddress_","type":"address"},{"internalType":"address","name":"createLiquidityAddress_","type":"address"},{"internalType":"address","name":"lpAutoIncreaseAddress_","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":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"FACTORY","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_LPFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_burnFee","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":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"createLiquidityAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyARBWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"emergencyETHWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"emergencyLPWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"emergencyTokenWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","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":"initPairOfETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpAutoIncreaseAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTokenNumberToSell","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":[],"name":"publicOfferingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2RouterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"updateBurnFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"createLiquidityAddress_","type":"address"}],"name":"updateCreateLiquidityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"FACTORY_","type":"address"}],"name":"updateFACTORY","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"LPFee","type":"uint256"}],"name":"updateLPFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minTokenNumberToSell","type":"uint256"}],"name":"updateNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"publicOfferingAddress_","type":"address"}],"name":"updatePublicOfferingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"uniswapV2Pair_","type":"address"}],"name":"updateUniswapV2Pair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"uniswapV2RouterAddress_","type":"address"}],"name":"updateUniswapV2RouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"WETH_","type":"address"}],"name":"updateWETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"lpAutoIncreaseAddress_","type":"address"}],"name":"updatelpAutoIncreaseAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e0604052600860a081905267414e54537061636560c01b60c09081526200002b916007919062000752565b506040805180820190915260038082526210539560ea1b6020909201918252620000589160089162000752565b506009805460ff19168117908190556064600a90815560c8600c55620000829160ff169062000af5565b6200009490655af3107a400062000be0565b600e55600954620000aa9060ff16600a62000af5565b620000ba90633b9aca0062000be0565b600f556010805473c873fecbd354f5a56e00e710b90ef4201db2448d6001600160a01b031991821617909155601580547382af49447d8a07e3bd95bd0d56f35241523fbab190831617905560168054736eccab422d763ac031210895c81787e87b43a652908316179081905560178054600160a01b6001600160a01b0390931693169290921760ff60a01b19161790553480156200015757600080fd5b5060405162003667380380620036678339810160408190526200017a9162000810565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601280546001600160a01b038086166001600160a01b031992831617909255601380548584169083161790556014805492841692909116919091179055600e54600a906200020b90600962000be0565b62000217919062000a87565b601280546001600160a01b039081166000908152600360205260408082209490945591541681522054600e546200024f919062000c02565b6013546001600160a01b0390811660009081526003602052604090209190915560105416620002823082600019620003b0565b601554620002a9906001600160a01b03168260001962000475602090811b620013bf17901c565b606081901b6001600160601b0319166080523360009081526005602090815260408083208054600160ff1991821681179092553085528285208054821683179055601280546001600160a01b03908116875284872080548416851790556013548116875284872080548416851790556014548116875284872080549093169093179091555416808452600390925280832054905191929160008051602062003647833981519152916200035c9162000a7e565b60405180910390a36013546001600160a01b031660008181526003602052604080822054905160008051602062003647833981519152916200039e9162000a7e565b60405180910390a35050505062000ca2565b6001600160a01b038316620003e25760405162461bcd60e51b8152600401620003d99062000a03565b60405180910390fd5b6001600160a01b0382166200040b5760405162461bcd60e51b8152600401620003d99062000964565b6001600160a01b0380841660008181526004602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906200046890859062000a7e565b60405180910390a3505050565b801580620005045750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e90620004ae9030908690600401620008b2565b60206040518083038186803b158015620004c757600080fd5b505afa158015620004dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200050291906200087b565b155b620005235760405162461bcd60e51b8152600401620003d990620009a6565b6200057e8363095ea7b360e01b848460405160240162000545929190620008cc565b60408051808303601f190181529190526020810180516001600160e01b0319939093166001600160e01b03938416179052906200058316565b505050565b6000620005df826040518060400160405280602081526020017f5361666542455032303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166200061f60201b620014be179092919060201c565b8051909150156200057e578080602001905181019062000600919062000859565b6200057e5760405162461bcd60e51b8152600401620003d9906200091a565b60606200063084846000856200063a565b90505b9392505050565b6060620006478562000713565b620006665760405162461bcd60e51b8152600401620003d99062000a47565b600080866001600160a01b0316858760405162000684919062000894565b60006040518083038185875af1925050503d8060008114620006c3576040519150601f19603f3d011682016040523d82523d6000602084013e620006c8565b606091505b50915091508115620006de5791506200070b9050565b805115620006ef5780518082602001fd5b8360405162461bcd60e51b8152600401620003d99190620008e5565b949350505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708181148015906200074857508115155b925050505b919050565b828054620007609062000c4f565b90600052602060002090601f016020900481019282620007845760008555620007cf565b82601f106200079f57805160ff1916838001178555620007cf565b82800160010185558215620007cf579182015b82811115620007cf578251825591602001919060010190620007b2565b50620007dd929150620007e1565b5090565b5b80821115620007dd5760008155600101620007e2565b80516001600160a01b03811681146200074d57600080fd5b60008060006060848603121562000825578283fd5b6200083084620007f8565b92506200084060208501620007f8565b91506200085060408501620007f8565b90509250925092565b6000602082840312156200086b578081fd5b8151801515811462000633578182fd5b6000602082840312156200088d578081fd5b5051919050565b60008251620008a881846020870162000c1c565b9190910192915050565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b60006020825282518060208401526200090681604085016020870162000c1c565b601f01601f19169190910160400192915050565b6020808252602a908201527f5361666542455032303a204245503230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526036908201527f5361666542455032303a20617070726f76652066726f6d206e6f6e2d7a65726f60408201527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b90815260200190565b60008262000aa357634e487b7160e01b81526012600452602481fd5b500490565b80825b600180861162000abc575062000aec565b81870482111562000ad15762000ad162000c8c565b8086161562000adf57918102915b9490941c93800262000aab565b94509492505050565b60006200063360001960ff85168460008262000b145750600162000633565b8162000b235750600062000633565b816001811462000b3c576002811462000b475762000b7b565b600191505062000633565b60ff84111562000b5b5762000b5b62000c8c565b6001841b91508482111562000b745762000b7462000c8c565b5062000633565b5060208310610133831016604e8410600b841016171562000bb3575081810a8381111562000bad5762000bad62000c8c565b62000633565b62000bc2848484600162000aa8565b80860482111562000bd75762000bd762000c8c565b02949350505050565b600081600019048311821515161562000bfd5762000bfd62000c8c565b500290565b60008282101562000c175762000c1762000c8c565b500390565b60005b8381101562000c3957818101518382015260200162000c1f565b8381111562000c49576000848401525b50505050565b60028104600182168062000c6457607f821691505b6020821081141562000c8657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60805160601c61297162000cd66000396000818161086b01528181611ae401528181611b740152611c2101526129716000f3fe6080604052600436106102815760003560e01c80636c04d8d11161014f578063a654f7e3116100c1578063c9ed74431161007a578063c9ed7443146106e5578063dd62ed3e14610705578063ea2f0b3714610725578063f2fde38b14610745578063fb88afb514610765578063fe9440d71461078557610288565b8063a654f7e314610646578063a9059cbb14610666578063ad4d227c14610686578063ad5c46481461069b578063c0b0fda2146106b0578063c49b9a80146106c557610288565b8063891871981161011357806389187198146105a75780638c4cba5c146105c75780638da5cb5b146105dc57806391c1004a146105f157806395d89b4114610611578063a457c2d71461062657610288565b80636c04d8d11461051d57806370a082311461053d578063715018a61461055d57806371e36753146105725780637a0918491461059257610288565b8063313ce567116101f357806349bd5a5e116101ac57806349bd5a5e1461047e5780634a377e1d146104935780634a74bb02146104a85780634c354138146104bd5780635342acb4146104dd5780635893813e146104fd57610288565b8063313ce567146103d457806339509351146103e95780633a7c1771146104095780633b778bcb14610429578063407f3d0d1461043e578063437823ec1461045e57610288565b80631694505e116102455780631694505e1461033e57806318160ddd146103535780631855f4a01461036857806323b872dd1461037f5780632dd310001461039f5780632e63d758146103b457610288565b80630332f28f1461028d57806306fdde03146102b8578063095ea7b3146102da57806313114a9d1461030757806314bb84051461032957610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a26107a5565b6040516102af9190612171565b60405180910390f35b3480156102c457600080fd5b506102cd6107b4565b6040516102af91906121fe565b3480156102e657600080fd5b506102fa6102f536600461204f565b610846565b6040516102af91906121f3565b34801561031357600080fd5b5061031c61085d565b6040516102af9190612721565b34801561033557600080fd5b5061031c610863565b34801561034a57600080fd5b506102a2610869565b34801561035f57600080fd5b5061031c61088d565b34801561037457600080fd5b5061037d610893565b005b34801561038b57600080fd5b506102fa61039a36600461200f565b610945565b3480156103ab57600080fd5b506102a26109ae565b3480156103c057600080fd5b5061037d6103cf3660046120b2565b6109bd565b3480156103e057600080fd5b5061031c6109ec565b3480156103f557600080fd5b506102fa61040436600461204f565b6109f5565b34801561041557600080fd5b5061037d610424366004611f9f565b610a2b565b34801561043557600080fd5b506102a2610a9d565b34801561044a57600080fd5b5061037d610459366004611f9f565b610aac565b34801561046a57600080fd5b5061037d610479366004611f9f565b610b1e565b34801561048a57600080fd5b506102a2610b6c565b34801561049f57600080fd5b506102a2610b7b565b3480156104b457600080fd5b506102fa610b8a565b3480156104c957600080fd5b5061037d6104d83660046120b2565b610b9a565b3480156104e957600080fd5b506102fa6104f8366004611f9f565b610c7a565b34801561050957600080fd5b5061037d6105183660046120b2565b610c98565b34801561052957600080fd5b5061037d610538366004611f9f565b610d66565b34801561054957600080fd5b5061031c610558366004611f9f565b610dd8565b34801561056957600080fd5b5061037d610df3565b34801561057e57600080fd5b5061037d61058d3660046120b2565b610e67565b34801561059e57600080fd5b5061031c610e96565b3480156105b357600080fd5b5061037d6105c2366004611f9f565b610e9c565b3480156105d357600080fd5b506102a2610ee8565b3480156105e857600080fd5b506102a2610ef7565b3480156105fd57600080fd5b5061037d61060c366004611f9f565b610f06565b34801561061d57600080fd5b506102cd610f52565b34801561063257600080fd5b506102fa61064136600461204f565b610f61565b34801561065257600080fd5b5061037d610661366004611f9f565b610fb0565b34801561067257600080fd5b506102fa61068136600461204f565b610ffc565b34801561069257600080fd5b5061037d611009565b3480156106a757600080fd5b506102a261111c565b3480156106bc57600080fd5b5061031c61112b565b3480156106d157600080fd5b5061037d6106e036600461207a565b611131565b3480156106f157600080fd5b5061037d6107003660046120b2565b611179565b34801561071157600080fd5b5061031c610720366004611fd7565b6111a8565b34801561073157600080fd5b5061037d610740366004611f9f565b6111d3565b34801561075157600080fd5b5061037d610760366004611f9f565b61121e565b34801561077157600080fd5b5061037d6107803660046120b2565b6112c9565b34801561079157600080fd5b5061037d6107a0366004611f9f565b611373565b6012546001600160a01b031690565b6060600780546107c39061285a565b80601f01602080910402602001604051908101604052809291908181526020018280546107ef9061285a565b801561083c5780601f106108115761010080835404028352916020019161083c565b820191906000526020600020905b81548152906001019060200180831161081f57829003601f168201915b5050505050905090565b60006108533384846114d5565b5060015b92915050565b60065490565b600c5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600e5490565b6000546001600160a01b031633146108c65760405162461bcd60e51b81526004016108bd906124b5565b60405180910390fd5b6000336001600160a01b0316476040516108df9061216e565b60006040518083038185875af1925050503d806000811461091c576040519150601f19603f3d011682016040523d82523d6000602084013e610921565b606091505b50509050806109425760405162461bcd60e51b81526004016108bd90612547565b50565b6000610952848484611589565b6109a4843361099f856040518060600160405280602881526020016128cf602891396001600160a01b038a16600090815260046020908152604080832033845290915290205491906116de565b6114d5565b5060019392505050565b6016546001600160a01b031681565b6000546001600160a01b031633146109e75760405162461bcd60e51b81526004016108bd906124b5565b600c55565b60095460ff1690565b3360008181526004602090815260408083206001600160a01b0387168452909152812054909161085391859061099f9086611718565b6000546001600160a01b03163314610a555760405162461bcd60e51b81526004016108bd906124b5565b6001600160a01b038116610a7b5760405162461bcd60e51b81526004016108bd906123c1565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6013546001600160a01b031690565b6000546001600160a01b03163314610ad65760405162461bcd60e51b81526004016108bd906124b5565b6001600160a01b038116610afc5760405162461bcd60e51b81526004016108bd90612622565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610b485760405162461bcd60e51b81526004016108bd906124b5565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b6011546001600160a01b031681565b6010546001600160a01b031681565b601754600160a01b900460ff1681565b6000546001600160a01b03163314610bc45760405162461bcd60e51b81526004016108bd906124b5565b6011546040516370a0823160e01b81526001600160a01b03909116906370a0823190610bf4903090600401612171565b60206040518083038186803b158015610c0c57600080fd5b505afa158015610c20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4491906120ca565b811115610c635760405162461bcd60e51b81526004016108bd906126fa565b601154610942906001600160a01b0316338361174e565b6001600160a01b031660009081526005602052604090205460ff1690565b6000546001600160a01b03163314610cc25760405162461bcd60e51b81526004016108bd906124b5565b610ccb30610dd8565b811115610cea5760405162461bcd60e51b81526004016108bd90612397565b30600090815260036020526040902054610d04908261176d565b30600090815260036020526040808220929092553381522054610d279082611718565b336000818152600360205260409081902092909255905130906000805160206128f783398151915290610d5b908590612721565b60405180910390a350565b6000546001600160a01b03163314610d905760405162461bcd60e51b81526004016108bd906124b5565b6001600160a01b038116610db65760405162461bcd60e51b81526004016108bd906124ea565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526003602052604090205490565b6000546001600160a01b03163314610e1d5760405162461bcd60e51b81526004016108bd906124b5565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610e915760405162461bcd60e51b81526004016108bd906124b5565b600a55565b600f5481565b6000546001600160a01b03163314610ec65760405162461bcd60e51b81526004016108bd906124b5565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6014546001600160a01b031690565b6000546001600160a01b031690565b6000546001600160a01b03163314610f305760405162461bcd60e51b81526004016108bd906124b5565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6060600880546107c39061285a565b6000610853338461099f85604051806060016040528060258152602001612917602591393360009081526004602090815260408083206001600160a01b038d16845290915290205491906116de565b6000546001600160a01b03163314610fda5760405162461bcd60e51b81526004016108bd906124b5565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b6000610853338484611589565b6000546001600160a01b031633146110335760405162461bcd60e51b81526004016108bd906124b5565b601754600160b01b900460ff161561105d5760405162461bcd60e51b81526004016108bd90612597565b6017546015546040516364e329cb60e11b81526001600160a01b039283169263c9c6539692611093929116903090600401612185565b602060405180830381600087803b1580156110ad57600080fd5b505af11580156110c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e59190611fbb565b601180546001600160a01b03929092166001600160a01b03199092169190911790556017805460ff60b01b1916600160b01b179055565b6015546001600160a01b031681565b600a5481565b6000546001600160a01b0316331461115b5760405162461bcd60e51b81526004016108bd906124b5565b60178054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b031633146111a35760405162461bcd60e51b81526004016108bd906124b5565b600f55565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b6000546001600160a01b031633146111fd5760405162461bcd60e51b81526004016108bd906124b5565b6001600160a01b03166000908152600560205260409020805460ff19169055565b6000546001600160a01b031633146112485760405162461bcd60e51b81526004016108bd906124b5565b6001600160a01b03811661126e5760405162461bcd60e51b81526004016108bd906122d8565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146112f35760405162461bcd60e51b81526004016108bd906124b5565b6000336001600160a01b03168260405161130c9061216e565b60006040518083038185875af1925050503d8060008114611349576040519150601f19603f3d011682016040523d82523d6000602084013e61134e565b606091505b505090508061136f5760405162461bcd60e51b81526004016108bd90612231565b5050565b6000546001600160a01b0316331461139d5760405162461bcd60e51b81526004016108bd906124b5565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b8015806114475750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e906113f59030908690600401612185565b60206040518083038186803b15801561140d57600080fd5b505afa158015611421573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144591906120ca565b155b6114635760405162461bcd60e51b81526004016108bd9061245f565b6114b98363095ea7b360e01b848460405160240161148292919061219f565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526117af565b505050565b60606114cd848460008561183e565b949350505050565b6001600160a01b0383166114fb5760405162461bcd60e51b81526004016108bd9061267f565b6001600160a01b0382166115215760405162461bcd60e51b81526004016108bd9061231e565b6001600160a01b0380841660008181526004602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061157c908590612721565b60405180910390a3505050565b6001600160a01b0383166115af5760405162461bcd60e51b81526004016108bd906125dd565b60006115ba30610dd8565b600f54909150811080159081906115db5750601754600160a81b900460ff16155b80156115f05750601754600160a01b900460ff165b801561160a57506011546001600160a01b03868116911614155b801561162457506013546001600160a01b03858116911614155b801561163e57506014546001600160a01b03858116911614155b801561166c57506001600160a01b0385163014801561166a57506011546001600160a01b038581169116145b155b1561167f57600f54915061167f82611901565b6001600160a01b03851660009081526005602052604090205460019060ff16806116c157506001600160a01b03851660009081526005602052604090205460ff165b156116ca575060005b6116d6868686846119a1565b505050505050565b600081848411156117025760405162461bcd60e51b81526004016108bd91906121fe565b50600061170f8486612817565b95945050505050565b60008061172583856127c0565b9050838110156117475760405162461bcd60e51b81526004016108bd90612360565b9392505050565b6114b98363a9059cbb60e01b848460405160240161148292919061219f565b600061174783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506116de565b6000611804826040518060400160405280602081526020017f5361666542455032303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166114be9092919063ffffffff16565b8051909150156114b957808060200190518101906118229190612096565b6114b95760405162461bcd60e51b81526004016108bd9061228e565b6060611849856119cc565b6118655760405162461bcd60e51b81526004016108bd906126c3565b600080866001600160a01b031685876040516118819190612152565b60006040518083038185875af1925050503d80600081146118be576040519150601f19603f3d011682016040523d82523d6000602084013e6118c3565b606091505b509150915081156118d75791506114cd9050565b8051156118e75780518082602001fd5b8360405162461bcd60e51b81526004016108bd91906121fe565b6017805460ff60a81b1916600160a81b1790556000611921826002611a05565b90504761192d82611a47565b6000611939478361176d565b601454909150611953906001600160a01b03168583611c17565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561838285604051611986939291906127aa565b60405180910390a150506017805460ff60a81b191690555050565b806119ae576119ae611cd5565b6119b9848484611cec565b806119c6576119c6611e07565b50505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708181148015906114cd575050151592915050565b600061174783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611e15565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611a8a57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601554825191169082906001908110611ac957634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526000907f0000000000000000000000000000000000000000000000000000000000000000166352aa4c228483853082611b1a426101686127c0565b6040518763ffffffff1660e01b8152600401611b3b9695949392919061272a565b600060405180830381600087803b158015611b5557600080fd5b505af1925050508015611b66575060015b611c07576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663791ac9478460008530611baa426101686127c0565b6040518663ffffffff1660e01b8152600401611bca95949392919061276e565b600060405180830381600087803b158015611be457600080fd5b505af1925050508015611bf5575060015b611bfe57611c02565b5060015b611c0b565b5060015b806114b9575050610942565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663f305d71982308560008089611c59426101686127c0565b6040518863ffffffff1660e01b8152600401611c7a969594939291906121b8565b6060604051808303818588803b158015611c9357600080fd5b505af193505050508015611cc4575060408051601f3d908101601f19168201909252611cc1918101906120e2565b60015b611ccd576114b9565b5050506114b9565b600a8054600b55600c8054600d5560009182905555565b6001600160a01b038316600090815260036020526040902054611d0f908261176d565b6001600160a01b038416600090815260036020526040812091909155600a54611d479061271090611d41908590611e43565b90611a05565b90506000611d66612710611d41600c5486611e4390919063ffffffff16565b90506000611d7e82611d78868661176d565b9061176d565b9050611d8a8684611e88565b611d948683611f3c565b6001600160a01b038516600090815260036020526040902054611db79082611718565b6001600160a01b0380871660008181526003602052604090819020939093559151908816906000805160206128f783398151915290611df7908590612721565b60405180910390a3505050505050565b600b54600a55600d54600c55565b60008183611e365760405162461bcd60e51b81526004016108bd91906121fe565b50600061170f84866127d8565b600082611e5257506000610857565b6000611e5e83856127f8565b905082611e6b85836127d8565b146117475760405162461bcd60e51b81526004016108bd9061241e565b600a54611e945761136f565b6000805260036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff54611ec99082611718565b6000805260036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff55600654611f019082611718565b6006556040516000906001600160a01b038416906000805160206128f783398151915290611f30908590612721565b60405180910390a35050565b600c54611f485761136f565b30600090815260036020526040902054611f629082611718565b30600081815260036020526040908190209290925590516001600160a01b038416906000805160206128f783398151915290611f30908590612721565b600060208284031215611fb0578081fd5b8135611747816128ab565b600060208284031215611fcc578081fd5b8151611747816128ab565b60008060408385031215611fe9578081fd5b8235611ff4816128ab565b91506020830135612004816128ab565b809150509250929050565b600080600060608486031215612023578081fd5b833561202e816128ab565b9250602084013561203e816128ab565b929592945050506040919091013590565b60008060408385031215612061578182fd5b823561206c816128ab565b946020939093013593505050565b60006020828403121561208b578081fd5b8135611747816128c0565b6000602082840312156120a7578081fd5b8151611747816128c0565b6000602082840312156120c3578081fd5b5035919050565b6000602082840312156120db578081fd5b5051919050565b6000806000606084860312156120f6578283fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b838110156121475781516001600160a01b031687529582019590820190600101612122565b509495945050505050565b6000825161216481846020870161282e565b9190910192915050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b600060208252825180602084015261221d81604085016020870161282e565b601f01601f19169190910160400192915050565b60208082526038908201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c206360408201527f686172697479206d617920686176652072657665727465640000000000000000606082015260800190565b6020808252602a908201527f5361666542455032303a204245503230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526010908201526f3737ba1032b737bab3b4103a37b5b2b760811b604082015260600190565b6020808252603d908201527f414e54205370616365206572726f723a207075626c69634f66666572696e674160408201527f6464726573732063616e206e6f7420626520616464726573732830292e000000606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526036908201527f5361666542455032303a20617070726f76652066726f6d206e6f6e2d7a65726f60408201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252603e908201527f414e54205370616365206572726f723a206372656174654c697175696469747960408201527f416464726573732063616e206e6f7420626520616464726573732830292e0000606082015260800190565b60208082526030908201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c206d60408201526f185e481a185d99481c995d995c9d195960821b606082015260800190565b60208082526026908201527f414e54205370616365204572726f723a205061697220616c726561647920696e60408201526534ba3a32b21760d11b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252603d908201527f414e54205370616365206572726f723a206c704175746f496e6372656173654160408201527f6464726573732063616e206e6f7420626520616464726573732830292e000000606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252600d908201526c06e6f7420656e6f756768204c5609c1b604082015260600190565b90815260200190565b600087825286602083015260c0604083015261274960c083018761210f565b6001600160a01b03958616606084015293909416608082015260a00152949350505050565b600086825285602083015260a0604083015261278d60a083018661210f565b6001600160a01b0394909416606083015250608001529392505050565b9283526020830191909152604082015260600190565b600082198211156127d3576127d3612895565b500190565b6000826127f357634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561281257612812612895565b500290565b60008282101561282957612829612895565b500390565b60005b83811015612849578181015183820152602001612831565b838111156119c65750506000910152565b60028104600182168061286e57607f821691505b6020821081141561288f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461094257600080fd5b801515811461094257600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b2639cdeeba333e5e3ce6ce4c5c39b3ba4b5e5400f1cf403ec505124132adadc64736f6c63430008000033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef000000000000000000000000d30268393d7b0c625a880cc972c4f9674cbf211a000000000000000000000000ae75e3ae25bdb11f6a968b3ea9340f3ff6f56d5d00000000000000000000000086e5ff67a595f06632a67993772a8fa9559ae47d

Deployed Bytecode

0x6080604052600436106102815760003560e01c80636c04d8d11161014f578063a654f7e3116100c1578063c9ed74431161007a578063c9ed7443146106e5578063dd62ed3e14610705578063ea2f0b3714610725578063f2fde38b14610745578063fb88afb514610765578063fe9440d71461078557610288565b8063a654f7e314610646578063a9059cbb14610666578063ad4d227c14610686578063ad5c46481461069b578063c0b0fda2146106b0578063c49b9a80146106c557610288565b8063891871981161011357806389187198146105a75780638c4cba5c146105c75780638da5cb5b146105dc57806391c1004a146105f157806395d89b4114610611578063a457c2d71461062657610288565b80636c04d8d11461051d57806370a082311461053d578063715018a61461055d57806371e36753146105725780637a0918491461059257610288565b8063313ce567116101f357806349bd5a5e116101ac57806349bd5a5e1461047e5780634a377e1d146104935780634a74bb02146104a85780634c354138146104bd5780635342acb4146104dd5780635893813e146104fd57610288565b8063313ce567146103d457806339509351146103e95780633a7c1771146104095780633b778bcb14610429578063407f3d0d1461043e578063437823ec1461045e57610288565b80631694505e116102455780631694505e1461033e57806318160ddd146103535780631855f4a01461036857806323b872dd1461037f5780632dd310001461039f5780632e63d758146103b457610288565b80630332f28f1461028d57806306fdde03146102b8578063095ea7b3146102da57806313114a9d1461030757806314bb84051461032957610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a26107a5565b6040516102af9190612171565b60405180910390f35b3480156102c457600080fd5b506102cd6107b4565b6040516102af91906121fe565b3480156102e657600080fd5b506102fa6102f536600461204f565b610846565b6040516102af91906121f3565b34801561031357600080fd5b5061031c61085d565b6040516102af9190612721565b34801561033557600080fd5b5061031c610863565b34801561034a57600080fd5b506102a2610869565b34801561035f57600080fd5b5061031c61088d565b34801561037457600080fd5b5061037d610893565b005b34801561038b57600080fd5b506102fa61039a36600461200f565b610945565b3480156103ab57600080fd5b506102a26109ae565b3480156103c057600080fd5b5061037d6103cf3660046120b2565b6109bd565b3480156103e057600080fd5b5061031c6109ec565b3480156103f557600080fd5b506102fa61040436600461204f565b6109f5565b34801561041557600080fd5b5061037d610424366004611f9f565b610a2b565b34801561043557600080fd5b506102a2610a9d565b34801561044a57600080fd5b5061037d610459366004611f9f565b610aac565b34801561046a57600080fd5b5061037d610479366004611f9f565b610b1e565b34801561048a57600080fd5b506102a2610b6c565b34801561049f57600080fd5b506102a2610b7b565b3480156104b457600080fd5b506102fa610b8a565b3480156104c957600080fd5b5061037d6104d83660046120b2565b610b9a565b3480156104e957600080fd5b506102fa6104f8366004611f9f565b610c7a565b34801561050957600080fd5b5061037d6105183660046120b2565b610c98565b34801561052957600080fd5b5061037d610538366004611f9f565b610d66565b34801561054957600080fd5b5061031c610558366004611f9f565b610dd8565b34801561056957600080fd5b5061037d610df3565b34801561057e57600080fd5b5061037d61058d3660046120b2565b610e67565b34801561059e57600080fd5b5061031c610e96565b3480156105b357600080fd5b5061037d6105c2366004611f9f565b610e9c565b3480156105d357600080fd5b506102a2610ee8565b3480156105e857600080fd5b506102a2610ef7565b3480156105fd57600080fd5b5061037d61060c366004611f9f565b610f06565b34801561061d57600080fd5b506102cd610f52565b34801561063257600080fd5b506102fa61064136600461204f565b610f61565b34801561065257600080fd5b5061037d610661366004611f9f565b610fb0565b34801561067257600080fd5b506102fa61068136600461204f565b610ffc565b34801561069257600080fd5b5061037d611009565b3480156106a757600080fd5b506102a261111c565b3480156106bc57600080fd5b5061031c61112b565b3480156106d157600080fd5b5061037d6106e036600461207a565b611131565b3480156106f157600080fd5b5061037d6107003660046120b2565b611179565b34801561071157600080fd5b5061031c610720366004611fd7565b6111a8565b34801561073157600080fd5b5061037d610740366004611f9f565b6111d3565b34801561075157600080fd5b5061037d610760366004611f9f565b61121e565b34801561077157600080fd5b5061037d6107803660046120b2565b6112c9565b34801561079157600080fd5b5061037d6107a0366004611f9f565b611373565b6012546001600160a01b031690565b6060600780546107c39061285a565b80601f01602080910402602001604051908101604052809291908181526020018280546107ef9061285a565b801561083c5780601f106108115761010080835404028352916020019161083c565b820191906000526020600020905b81548152906001019060200180831161081f57829003601f168201915b5050505050905090565b60006108533384846114d5565b5060015b92915050565b60065490565b600c5481565b7f000000000000000000000000c873fecbd354f5a56e00e710b90ef4201db2448d81565b600e5490565b6000546001600160a01b031633146108c65760405162461bcd60e51b81526004016108bd906124b5565b60405180910390fd5b6000336001600160a01b0316476040516108df9061216e565b60006040518083038185875af1925050503d806000811461091c576040519150601f19603f3d011682016040523d82523d6000602084013e610921565b606091505b50509050806109425760405162461bcd60e51b81526004016108bd90612547565b50565b6000610952848484611589565b6109a4843361099f856040518060600160405280602881526020016128cf602891396001600160a01b038a16600090815260046020908152604080832033845290915290205491906116de565b6114d5565b5060019392505050565b6016546001600160a01b031681565b6000546001600160a01b031633146109e75760405162461bcd60e51b81526004016108bd906124b5565b600c55565b60095460ff1690565b3360008181526004602090815260408083206001600160a01b0387168452909152812054909161085391859061099f9086611718565b6000546001600160a01b03163314610a555760405162461bcd60e51b81526004016108bd906124b5565b6001600160a01b038116610a7b5760405162461bcd60e51b81526004016108bd906123c1565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6013546001600160a01b031690565b6000546001600160a01b03163314610ad65760405162461bcd60e51b81526004016108bd906124b5565b6001600160a01b038116610afc5760405162461bcd60e51b81526004016108bd90612622565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610b485760405162461bcd60e51b81526004016108bd906124b5565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b6011546001600160a01b031681565b6010546001600160a01b031681565b601754600160a01b900460ff1681565b6000546001600160a01b03163314610bc45760405162461bcd60e51b81526004016108bd906124b5565b6011546040516370a0823160e01b81526001600160a01b03909116906370a0823190610bf4903090600401612171565b60206040518083038186803b158015610c0c57600080fd5b505afa158015610c20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4491906120ca565b811115610c635760405162461bcd60e51b81526004016108bd906126fa565b601154610942906001600160a01b0316338361174e565b6001600160a01b031660009081526005602052604090205460ff1690565b6000546001600160a01b03163314610cc25760405162461bcd60e51b81526004016108bd906124b5565b610ccb30610dd8565b811115610cea5760405162461bcd60e51b81526004016108bd90612397565b30600090815260036020526040902054610d04908261176d565b30600090815260036020526040808220929092553381522054610d279082611718565b336000818152600360205260409081902092909255905130906000805160206128f783398151915290610d5b908590612721565b60405180910390a350565b6000546001600160a01b03163314610d905760405162461bcd60e51b81526004016108bd906124b5565b6001600160a01b038116610db65760405162461bcd60e51b81526004016108bd906124ea565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526003602052604090205490565b6000546001600160a01b03163314610e1d5760405162461bcd60e51b81526004016108bd906124b5565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610e915760405162461bcd60e51b81526004016108bd906124b5565b600a55565b600f5481565b6000546001600160a01b03163314610ec65760405162461bcd60e51b81526004016108bd906124b5565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6014546001600160a01b031690565b6000546001600160a01b031690565b6000546001600160a01b03163314610f305760405162461bcd60e51b81526004016108bd906124b5565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6060600880546107c39061285a565b6000610853338461099f85604051806060016040528060258152602001612917602591393360009081526004602090815260408083206001600160a01b038d16845290915290205491906116de565b6000546001600160a01b03163314610fda5760405162461bcd60e51b81526004016108bd906124b5565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b6000610853338484611589565b6000546001600160a01b031633146110335760405162461bcd60e51b81526004016108bd906124b5565b601754600160b01b900460ff161561105d5760405162461bcd60e51b81526004016108bd90612597565b6017546015546040516364e329cb60e11b81526001600160a01b039283169263c9c6539692611093929116903090600401612185565b602060405180830381600087803b1580156110ad57600080fd5b505af11580156110c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e59190611fbb565b601180546001600160a01b03929092166001600160a01b03199092169190911790556017805460ff60b01b1916600160b01b179055565b6015546001600160a01b031681565b600a5481565b6000546001600160a01b0316331461115b5760405162461bcd60e51b81526004016108bd906124b5565b60178054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b031633146111a35760405162461bcd60e51b81526004016108bd906124b5565b600f55565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b6000546001600160a01b031633146111fd5760405162461bcd60e51b81526004016108bd906124b5565b6001600160a01b03166000908152600560205260409020805460ff19169055565b6000546001600160a01b031633146112485760405162461bcd60e51b81526004016108bd906124b5565b6001600160a01b03811661126e5760405162461bcd60e51b81526004016108bd906122d8565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146112f35760405162461bcd60e51b81526004016108bd906124b5565b6000336001600160a01b03168260405161130c9061216e565b60006040518083038185875af1925050503d8060008114611349576040519150601f19603f3d011682016040523d82523d6000602084013e61134e565b606091505b505090508061136f5760405162461bcd60e51b81526004016108bd90612231565b5050565b6000546001600160a01b0316331461139d5760405162461bcd60e51b81526004016108bd906124b5565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b8015806114475750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e906113f59030908690600401612185565b60206040518083038186803b15801561140d57600080fd5b505afa158015611421573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144591906120ca565b155b6114635760405162461bcd60e51b81526004016108bd9061245f565b6114b98363095ea7b360e01b848460405160240161148292919061219f565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526117af565b505050565b60606114cd848460008561183e565b949350505050565b6001600160a01b0383166114fb5760405162461bcd60e51b81526004016108bd9061267f565b6001600160a01b0382166115215760405162461bcd60e51b81526004016108bd9061231e565b6001600160a01b0380841660008181526004602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061157c908590612721565b60405180910390a3505050565b6001600160a01b0383166115af5760405162461bcd60e51b81526004016108bd906125dd565b60006115ba30610dd8565b600f54909150811080159081906115db5750601754600160a81b900460ff16155b80156115f05750601754600160a01b900460ff165b801561160a57506011546001600160a01b03868116911614155b801561162457506013546001600160a01b03858116911614155b801561163e57506014546001600160a01b03858116911614155b801561166c57506001600160a01b0385163014801561166a57506011546001600160a01b038581169116145b155b1561167f57600f54915061167f82611901565b6001600160a01b03851660009081526005602052604090205460019060ff16806116c157506001600160a01b03851660009081526005602052604090205460ff165b156116ca575060005b6116d6868686846119a1565b505050505050565b600081848411156117025760405162461bcd60e51b81526004016108bd91906121fe565b50600061170f8486612817565b95945050505050565b60008061172583856127c0565b9050838110156117475760405162461bcd60e51b81526004016108bd90612360565b9392505050565b6114b98363a9059cbb60e01b848460405160240161148292919061219f565b600061174783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506116de565b6000611804826040518060400160405280602081526020017f5361666542455032303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166114be9092919063ffffffff16565b8051909150156114b957808060200190518101906118229190612096565b6114b95760405162461bcd60e51b81526004016108bd9061228e565b6060611849856119cc565b6118655760405162461bcd60e51b81526004016108bd906126c3565b600080866001600160a01b031685876040516118819190612152565b60006040518083038185875af1925050503d80600081146118be576040519150601f19603f3d011682016040523d82523d6000602084013e6118c3565b606091505b509150915081156118d75791506114cd9050565b8051156118e75780518082602001fd5b8360405162461bcd60e51b81526004016108bd91906121fe565b6017805460ff60a81b1916600160a81b1790556000611921826002611a05565b90504761192d82611a47565b6000611939478361176d565b601454909150611953906001600160a01b03168583611c17565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561838285604051611986939291906127aa565b60405180910390a150506017805460ff60a81b191690555050565b806119ae576119ae611cd5565b6119b9848484611cec565b806119c6576119c6611e07565b50505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708181148015906114cd575050151592915050565b600061174783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611e15565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611a8a57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601554825191169082906001908110611ac957634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526000907f000000000000000000000000c873fecbd354f5a56e00e710b90ef4201db2448d166352aa4c228483853082611b1a426101686127c0565b6040518763ffffffff1660e01b8152600401611b3b9695949392919061272a565b600060405180830381600087803b158015611b5557600080fd5b505af1925050508015611b66575060015b611c07576001600160a01b037f000000000000000000000000c873fecbd354f5a56e00e710b90ef4201db2448d1663791ac9478460008530611baa426101686127c0565b6040518663ffffffff1660e01b8152600401611bca95949392919061276e565b600060405180830381600087803b158015611be457600080fd5b505af1925050508015611bf5575060015b611bfe57611c02565b5060015b611c0b565b5060015b806114b9575050610942565b6001600160a01b037f000000000000000000000000c873fecbd354f5a56e00e710b90ef4201db2448d1663f305d71982308560008089611c59426101686127c0565b6040518863ffffffff1660e01b8152600401611c7a969594939291906121b8565b6060604051808303818588803b158015611c9357600080fd5b505af193505050508015611cc4575060408051601f3d908101601f19168201909252611cc1918101906120e2565b60015b611ccd576114b9565b5050506114b9565b600a8054600b55600c8054600d5560009182905555565b6001600160a01b038316600090815260036020526040902054611d0f908261176d565b6001600160a01b038416600090815260036020526040812091909155600a54611d479061271090611d41908590611e43565b90611a05565b90506000611d66612710611d41600c5486611e4390919063ffffffff16565b90506000611d7e82611d78868661176d565b9061176d565b9050611d8a8684611e88565b611d948683611f3c565b6001600160a01b038516600090815260036020526040902054611db79082611718565b6001600160a01b0380871660008181526003602052604090819020939093559151908816906000805160206128f783398151915290611df7908590612721565b60405180910390a3505050505050565b600b54600a55600d54600c55565b60008183611e365760405162461bcd60e51b81526004016108bd91906121fe565b50600061170f84866127d8565b600082611e5257506000610857565b6000611e5e83856127f8565b905082611e6b85836127d8565b146117475760405162461bcd60e51b81526004016108bd9061241e565b600a54611e945761136f565b6000805260036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff54611ec99082611718565b6000805260036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff55600654611f019082611718565b6006556040516000906001600160a01b038416906000805160206128f783398151915290611f30908590612721565b60405180910390a35050565b600c54611f485761136f565b30600090815260036020526040902054611f629082611718565b30600081815260036020526040908190209290925590516001600160a01b038416906000805160206128f783398151915290611f30908590612721565b600060208284031215611fb0578081fd5b8135611747816128ab565b600060208284031215611fcc578081fd5b8151611747816128ab565b60008060408385031215611fe9578081fd5b8235611ff4816128ab565b91506020830135612004816128ab565b809150509250929050565b600080600060608486031215612023578081fd5b833561202e816128ab565b9250602084013561203e816128ab565b929592945050506040919091013590565b60008060408385031215612061578182fd5b823561206c816128ab565b946020939093013593505050565b60006020828403121561208b578081fd5b8135611747816128c0565b6000602082840312156120a7578081fd5b8151611747816128c0565b6000602082840312156120c3578081fd5b5035919050565b6000602082840312156120db578081fd5b5051919050565b6000806000606084860312156120f6578283fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b838110156121475781516001600160a01b031687529582019590820190600101612122565b509495945050505050565b6000825161216481846020870161282e565b9190910192915050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b600060208252825180602084015261221d81604085016020870161282e565b601f01601f19169190910160400192915050565b60208082526038908201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c206360408201527f686172697479206d617920686176652072657665727465640000000000000000606082015260800190565b6020808252602a908201527f5361666542455032303a204245503230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526010908201526f3737ba1032b737bab3b4103a37b5b2b760811b604082015260600190565b6020808252603d908201527f414e54205370616365206572726f723a207075626c69634f66666572696e674160408201527f6464726573732063616e206e6f7420626520616464726573732830292e000000606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526036908201527f5361666542455032303a20617070726f76652066726f6d206e6f6e2d7a65726f60408201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252603e908201527f414e54205370616365206572726f723a206372656174654c697175696469747960408201527f416464726573732063616e206e6f7420626520616464726573732830292e0000606082015260800190565b60208082526030908201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c206d60408201526f185e481a185d99481c995d995c9d195960821b606082015260800190565b60208082526026908201527f414e54205370616365204572726f723a205061697220616c726561647920696e60408201526534ba3a32b21760d11b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252603d908201527f414e54205370616365206572726f723a206c704175746f496e6372656173654160408201527f6464726573732063616e206e6f7420626520616464726573732830292e000000606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252600d908201526c06e6f7420656e6f756768204c5609c1b604082015260600190565b90815260200190565b600087825286602083015260c0604083015261274960c083018761210f565b6001600160a01b03958616606084015293909416608082015260a00152949350505050565b600086825285602083015260a0604083015261278d60a083018661210f565b6001600160a01b0394909416606083015250608001529392505050565b9283526020830191909152604082015260600190565b600082198211156127d3576127d3612895565b500190565b6000826127f357634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561281257612812612895565b500290565b60008282101561282957612829612895565b500390565b60005b83811015612849578181015183820152602001612831565b838111156119c65750506000910152565b60028104600182168061286e57607f821691505b6020821081141561288f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461094257600080fd5b801515811461094257600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b2639cdeeba333e5e3ce6ce4c5c39b3ba4b5e5400f1cf403ec505124132adadc64736f6c63430008000033

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

000000000000000000000000d30268393d7b0c625a880cc972c4f9674cbf211a000000000000000000000000ae75e3ae25bdb11f6a968b3ea9340f3ff6f56d5d00000000000000000000000086e5ff67a595f06632a67993772a8fa9559ae47d

-----Decoded View---------------
Arg [0] : publicOfferingAddress_ (address): 0xD30268393D7b0c625a880cc972C4F9674cbf211a
Arg [1] : createLiquidityAddress_ (address): 0xae75E3Ae25BDb11F6A968b3eA9340F3FF6f56d5d
Arg [2] : lpAutoIncreaseAddress_ (address): 0x86e5Ff67A595f06632A67993772a8Fa9559ae47D

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000d30268393d7b0c625a880cc972c4f9674cbf211a
Arg [1] : 000000000000000000000000ae75e3ae25bdb11f6a968b3ea9340f3ff6f56d5d
Arg [2] : 00000000000000000000000086e5ff67a595f06632a67993772a8fa9559ae47d


Deployed Bytecode Sourcemap

27384:14551:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34045:112;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30632:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;31508:179::-;;;;;;;;;;-1:-1:-1;31508:179:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;32728:87::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;27909:27::-;;;;;;;;;;;;;:::i;28227:51::-;;;;;;;;;;;;;:::i;30911:95::-;;;;;;;;;;;;;:::i;39921:226::-;;;;;;;;;;;;;:::i;:::-;;31695:341;;;;;;;;;;-1:-1:-1;31695:341:0;;;;;:::i;:::-;;:::i;28531:67::-;;;;;;;;;;;;;:::i;40659:87::-;;;;;;;;;;-1:-1:-1;40659:87:0;;;;;:::i;:::-;;:::i;30818:85::-;;;;;;;;;;;;;:::i;32044:284::-;;;;;;;;;;-1:-1:-1;32044:284:0;;;;;:::i;:::-;;:::i;33190:275::-;;;;;;;;;;-1:-1:-1;33190:275:0;;;;;:::i;:::-;;:::i;34285:114::-;;;;;;;;;;;;;:::i;33473:275::-;;;;;;;;;;-1:-1:-1;33473:275:0;;;;;:::i;:::-;;:::i;32955:111::-;;;;;;;;;;-1:-1:-1;32955:111:0;;;;;:::i;:::-;;:::i;28285:29::-;;;;;;;;;;;;;:::i;28127:91::-;;;;;;;;;;;;;:::i;28677:40::-;;;;;;;;;;;;;:::i;39673:240::-;;;;;;;;;;-1:-1:-1;39673:240:0;;;;;:::i;:::-;;:::i;32823:124::-;;;;;;;;;;-1:-1:-1;32823:124:0;;;;;:::i;:::-;;:::i;39302:363::-;;;;;;;;;;-1:-1:-1;39302:363:0;;;;;:::i;:::-;;:::i;33756:281::-;;;;;;;;;;-1:-1:-1;33756:281:0;;;;;:::i;:::-;;:::i;31014:117::-;;;;;;;;;;-1:-1:-1;31014:117:0;;;;;:::i;:::-;;:::i;3344:148::-;;;;;;;;;;;;;:::i;40556:95::-;;;;;;;;;;-1:-1:-1;40556:95:0;;;;;:::i;:::-;;:::i;28049:69::-;;;;;;;;;;;;;:::i;41448:157::-;;;;;;;;;;-1:-1:-1;41448:157:0;;;;;:::i;:::-;;:::i;34165:112::-;;;;;;;;;;;;;:::i;3132:79::-;;;;;;;;;;;;;:::i;41613:121::-;;;;;;;;;;-1:-1:-1;41613:121:0;;;;;:::i;:::-;;:::i;30723:87::-;;;;;;;;;;;;;:::i;32336:384::-;;;;;;;;;;-1:-1:-1;32336:384:0;;;;;:::i;:::-;;:::i;41835:97::-;;;;;;;;;;-1:-1:-1;41835:97:0;;;;;:::i;:::-;;:::i;31139:185::-;;;;;;;;;;-1:-1:-1;31139:185:0;;;;;:::i;:::-;;:::i;30400:224::-;;;;;;;;;;;;;:::i;28460:64::-;;;;;;;;;;;;;:::i;27832:29::-;;;;;;;;;;;;;:::i;40754:117::-;;;;;;;;;;-1:-1:-1;40754:117:0;;;;;:::i;:::-;;:::i;40391:157::-;;;;;;;;;;-1:-1:-1;40391:157:0;;;;;:::i;:::-;;:::i;31332:168::-;;;;;;;;;;-1:-1:-1;31332:168:0;;;;;:::i;:::-;;:::i;33074:110::-;;;;;;;;;;-1:-1:-1;33074:110:0;;;;;:::i;:::-;;:::i;3500:244::-;;;;;;;;;;-1:-1:-1;3500:244:0;;;;;:::i;:::-;;:::i;40155:228::-;;;;;;;;;;-1:-1:-1;40155:228:0;;;;;:::i;:::-;;:::i;41742:85::-;;;;;;;;;;-1:-1:-1;41742:85:0;;;;;:::i;:::-;;:::i;34045:112::-;34127:22;;-1:-1:-1;;;;;34127:22:0;34045:112;:::o;30632:83::-;30669:13;30702:5;30695:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30632:83;:::o;31508:179::-;31598:4;31620:37;31629:10;31641:7;31650:6;31620:8;:37::i;:::-;-1:-1:-1;31675:4:0;31508:179;;;;;:::o;32728:87::-;32797:10;;32728:87;:::o;27909:27::-;;;;:::o;28227:51::-;;;:::o;30911:95::-;30991:7;;30911:95;:::o;39921:226::-;3259:6;;-1:-1:-1;;;;;3259:6:0;3269:10;3259:20;3251:65;;;;-1:-1:-1;;;3251:65:0;;;;;;;:::i;:::-;;;;;;;;;39982:12:::1;40008:10;-1:-1:-1::0;;;;;40000:24:0::1;40033:21;40000:60;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39981:79;;;40079:7;40071:68;;;;-1:-1:-1::0;;;40071:68:0::1;;;;;;;:::i;:::-;3327:1;39921:226::o:0;31695:341::-;31827:4;31844:36;31854:6;31862:9;31873:6;31844:9;:36::i;:::-;31891:115;31900:6;31907:10;31919:86;31955:6;31919:86;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31919:19:0;;;;;;:11;:19;;;;;;;;31939:10;31919:31;;;;;;;;;:86;:35;:86::i;:::-;31891:8;:115::i;:::-;-1:-1:-1;32024:4:0;31695:341;;;;;:::o;28531:67::-;;;-1:-1:-1;;;;;28531:67:0;;:::o;40659:87::-;3259:6;;-1:-1:-1;;;;;3259:6:0;3269:10;3259:20;3251:65;;;;-1:-1:-1;;;3251:65:0;;;;;;;:::i;:::-;40724:6:::1;:14:::0;40659:87::o;30818:85::-;30886:9;;;;30818:85;:::o;32044:284::-;32192:10;32147:4;32239:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;32239:32:0;;;;;;;;;;32147:4;;32169:129;;32217:7;;32239:48;;32276:10;32239:36;:48::i;33190:275::-;3259:6;;-1:-1:-1;;;;;3259:6:0;3269:10;3259:20;3251:65;;;;-1:-1:-1;;;3251:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33297:36:0;::::1;33289:110;;;;-1:-1:-1::0;;;33289:110:0::1;;;;;;;:::i;:::-;33410:22;:47:::0;;-1:-1:-1;;;;;;33410:47:0::1;-1:-1:-1::0;;;;;33410:47:0;;;::::1;::::0;;;::::1;::::0;;33190:275::o;34285:114::-;34368:23;;-1:-1:-1;;;;;34368:23:0;34285:114;:::o;33473:275::-;3259:6;;-1:-1:-1;;;;;3259:6:0;3269:10;3259:20;3251:65;;;;-1:-1:-1;;;3251:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33580:36:0;::::1;33572:110;;;;-1:-1:-1::0;;;33572:110:0::1;;;;;;;:::i;:::-;33693:22;:47:::0;;-1:-1:-1;;;;;;33693:47:0::1;-1:-1:-1::0;;;;;33693:47:0;;;::::1;::::0;;;::::1;::::0;;33473:275::o;32955:111::-;3259:6;;-1:-1:-1;;;;;3259:6:0;3269:10;3259:20;3251:65;;;;-1:-1:-1;;;3251:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33024:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;33024:34:0::1;33054:4;33024:34;::::0;;32955:111::o;28285:29::-;;;-1:-1:-1;;;;;28285:29:0;;:::o;28127:91::-;;;-1:-1:-1;;;;;28127:91:0;;:::o;28677:40::-;;;-1:-1:-1;;;28677:40:0;;;;;:::o;39673:240::-;3259:6;;-1:-1:-1;;;;;3259:6:0;3269:10;3259:20;3251:65;;;;-1:-1:-1;;;3251:65:0;;;;;;;:::i;:::-;39773:13:::1;::::0;39766:46:::1;::::0;-1:-1:-1;;;39766:46:0;;-1:-1:-1;;;;;39773:13:0;;::::1;::::0;39766:31:::1;::::0;:46:::1;::::0;39806:4:::1;::::0;39766:46:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39755:7;:57;;39747:83;;;;-1:-1:-1::0;;;39747:83:0::1;;;;;;;:::i;:::-;39848:13;::::0;39841:64:::1;::::0;-1:-1:-1;;;;;39848:13:0::1;39884:10;39897:7:::0;39841:34:::1;:64::i;32823:124::-:0;-1:-1:-1;;;;;32912:27:0;32888:4;32912:27;;;:18;:27;;;;;;;;;32823:124::o;39302:363::-;3259:6;;-1:-1:-1;;;;;3259:6:0;3269:10;3259:20;3251:65;;;;-1:-1:-1;;;3251:65:0;;;;;;;:::i;:::-;39398:24:::1;39416:4;39398:9;:24::i;:::-;39387:7;:35;;39379:64;;;;-1:-1:-1::0;;;39379:64:0::1;;;;;;;:::i;:::-;39495:4;39479:22;::::0;;;:7:::1;:22;::::0;;;;;:35:::1;::::0;39506:7;39479:26:::1;:35::i;:::-;39470:4;39454:22;::::0;;;:7:::1;:22;::::0;;;;;:60;;;;39572:10:::1;39556:28:::0;;;;:41:::1;::::0;39589:7;39556:32:::1;:41::i;:::-;39541:10;39525:28;::::0;;;:7:::1;:28;::::0;;;;;;:72;;;;39613:44;;39630:4:::1;::::0;-1:-1:-1;;;;;;;;;;;39613:44:0;::::1;::::0;39649:7;;39613:44:::1;:::i;:::-;;;;;;;;39302:363:::0;:::o;33756:281::-;3259:6;;-1:-1:-1;;;;;3259:6:0;3269:10;3259:20;3251:65;;;;-1:-1:-1;;;3251:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33865:37:0;::::1;33857:112;;;;-1:-1:-1::0;;;33857:112:0::1;;;;;;;:::i;:::-;33980:23;:49:::0;;-1:-1:-1;;;;;;33980:49:0::1;-1:-1:-1::0;;;;;33980:49:0;;;::::1;::::0;;;::::1;::::0;;33756:281::o;31014:117::-;-1:-1:-1;;;;;31107:16:0;31080:7;31107:16;;;:7;:16;;;;;;;31014:117::o;3344:148::-;3259:6;;-1:-1:-1;;;;;3259:6:0;3269:10;3259:20;3251:65;;;;-1:-1:-1;;;3251:65:0;;;;;;;:::i;:::-;3451:1:::1;3435:6:::0;;3414:40:::1;::::0;-1:-1:-1;;;;;3435:6:0;;::::1;::::0;3414:40:::1;::::0;3451:1;;3414:40:::1;3482:1;3465:19:::0;;-1:-1:-1;;;;;;3465:19:0::1;::::0;;3344:148::o;40556:95::-;3259:6;;-1:-1:-1;;;;;3259:6:0;3269:10;3259:20;3251:65;;;;-1:-1:-1;;;3251:65:0;;;;;;;:::i;:::-;40625:8:::1;:18:::0;40556:95::o;28049:69::-;;;;:::o;41448:157::-;3259:6;;-1:-1:-1;;;;;3259:6:0;3269:10;3259:20;3251:65;;;;-1:-1:-1;;;3251:65:0;;;;;;;:::i;:::-;41549:22:::1;:48:::0;;-1:-1:-1;;;;;;41549:48:0::1;-1:-1:-1::0;;;;;41549:48:0;;;::::1;::::0;;;::::1;::::0;;41448:157::o;34165:112::-;34247:22;;-1:-1:-1;;;;;34247:22:0;34165:112;:::o;3132:79::-;3170:7;3197:6;-1:-1:-1;;;;;3197:6:0;3132:79;:::o;41613:121::-;3259:6;;-1:-1:-1;;;;;3259:6:0;3269:10;3259:20;3251:65;;;;-1:-1:-1;;;3251:65:0;;;;;;;:::i;:::-;41696:13:::1;:30:::0;;-1:-1:-1;;;;;;41696:30:0::1;-1:-1:-1::0;;;;;41696:30:0;;;::::1;::::0;;;::::1;::::0;;41613:121::o;30723:87::-;30762:13;30795:7;30788:14;;;;;:::i;32336:384::-;32444:4;32466:224;32489:10;32514:7;32536:143;32591:15;32536:143;;;;;;;;;;;;;;;;;32548:10;32536:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;32536:32:0;;;;;;;;;;;:143;:36;:143::i;41835:97::-;3259:6;;-1:-1:-1;;;;;3259:6:0;3269:10;3259:20;3251:65;;;;-1:-1:-1;;;3251:65:0;;;;;;;:::i;:::-;41906:7:::1;:18:::0;;-1:-1:-1;;;;;;41906:18:0::1;-1:-1:-1::0;;;;;41906:18:0;;;::::1;::::0;;;::::1;::::0;;41835:97::o;31139:185::-;31232:4;31254:40;31264:10;31276:9;31287:6;31254:9;:40::i;30400:224::-;3259:6;;-1:-1:-1;;;;;3259:6:0;3269:10;3259:20;3251:65;;;;-1:-1:-1;;;3251:65:0;;;;;;;:::i;:::-;30464:8:::1;::::0;-1:-1:-1;;;30464:8:0;::::1;;;30463:9;30455:60;;;;-1:-1:-1::0;;;30455:60:0::1;;;;;;;:::i;:::-;30542:7;::::0;30569:4:::1;::::0;30542:48:::1;::::0;-1:-1:-1;;;30542:48:0;;-1:-1:-1;;;;;30542:7:0;;::::1;::::0;:18:::1;::::0;:48:::1;::::0;30569:4;::::1;::::0;30584::::1;::::0;30542:48:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30526:13;:64:::0;;-1:-1:-1;;;;;30526:64:0;;;::::1;-1:-1:-1::0;;;;;;30526:64:0;;::::1;::::0;;;::::1;::::0;;30601:8:::1;:15:::0;;-1:-1:-1;;;;30601:15:0::1;-1:-1:-1::0;;;30601:15:0::1;::::0;;30400:224::o;28460:64::-;;;-1:-1:-1;;;;;28460:64:0;;:::o;27832:29::-;;;;:::o;40754:117::-;3259:6;;-1:-1:-1;;;;;3259:6:0;3269:10;3259:20;3251:65;;;;-1:-1:-1;;;3251:65:0;;;;;;;:::i;:::-;40831:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;40831:32:0::1;-1:-1:-1::0;;;;40831:32:0;;::::1;::::0;;;::::1;::::0;;40754:117::o;40391:157::-;3259:6;;-1:-1:-1;;;;;3259:6:0;3269:10;3259:20;3251:65;;;;-1:-1:-1;;;3251:65:0;;;;;;;:::i;:::-;40496:20:::1;:44:::0;40391:157::o;31332:168::-;-1:-1:-1;;;;;31465:18:0;;;31433:7;31465:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;31332:168::o;33074:110::-;3259:6;;-1:-1:-1;;;;;3259:6:0;3269:10;3259:20;3251:65;;;;-1:-1:-1;;;3251:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33141:27:0::1;33171:5;33141:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;33141:35:0::1;::::0;;33074:110::o;3500:244::-;3259:6;;-1:-1:-1;;;;;3259:6:0;3269:10;3259:20;3251:65;;;;-1:-1:-1;;;3251:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3589:22:0;::::1;3581:73;;;;-1:-1:-1::0;;;3581:73:0::1;;;;;;;:::i;:::-;3691:6;::::0;;3670:38:::1;::::0;-1:-1:-1;;;;;3670:38:0;;::::1;::::0;3691:6;::::1;::::0;3670:38:::1;::::0;::::1;3719:6;:17:::0;;-1:-1:-1;;;;;;3719:17:0::1;-1:-1:-1::0;;;;;3719:17:0;;;::::1;::::0;;;::::1;::::0;;3500:244::o;40155:228::-;3259:6;;-1:-1:-1;;;;;3259:6:0;3269:10;3259:20;3251:65;;;;-1:-1:-1;;;3251:65:0;;;;;;;:::i;:::-;40233:12:::1;40251:10;-1:-1:-1::0;;;;;40251:15:0::1;40275:7;40251:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40232:56;;;40307:7;40299:76;;;;-1:-1:-1::0;;;40299:76:0::1;;;;;;;:::i;:::-;3327:1;40155:228:::0;:::o;41742:85::-;3259:6;;-1:-1:-1;;;;;3259:6:0;3269:10;3259:20;3251:65;;;;-1:-1:-1;;;3251:65:0;;;;;;;:::i;:::-;41807:4:::1;:12:::0;;-1:-1:-1;;;;;;41807:12:0::1;-1:-1:-1::0;;;;;41807:12:0;;;::::1;::::0;;;::::1;::::0;;41742:85::o;14925:670::-;15343:10;;;15342:62;;-1:-1:-1;15359:39:0;;-1:-1:-1;;;15359:39:0;;-1:-1:-1;;;;;15359:15:0;;;;;:39;;15383:4;;15390:7;;15359:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;15342:62;15320:166;;;;-1:-1:-1;;;15320:166:0;;;;;;;:::i;:::-;15497:90;15517:5;15547:22;;;15571:7;15580:5;15524:62;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;15524:62:0;;;;;;;;;;;;;;-1:-1:-1;;;;;15524:62:0;-1:-1:-1;;;;;;15524:62:0;;;;;;;;;;15497:19;:90::i;:::-;14925:670;;;:::o;11114:230::-;11251:12;11283:53;11306:6;11314:4;11320:1;11323:12;11283:22;:53::i;:::-;11276:60;11114:230;-1:-1:-1;;;;11114:230:0:o;34787:371::-;-1:-1:-1;;;;;34914:19:0;;34906:68;;;;-1:-1:-1;;;34906:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34993:21:0;;34985:68;;;;-1:-1:-1;;;34985:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35066:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;35118:32;;;;;35096:6;;35118:32;:::i;:::-;;;;;;;;34787:371;;;:::o;35166:1231::-;-1:-1:-1;;;;;35288:18:0;;35280:68;;;;-1:-1:-1;;;35280:68:0;;;;;;;:::i;:::-;35389:28;35420:24;35438:4;35420:9;:24::i;:::-;35499:20;;35389:55;;-1:-1:-1;35475:44:0;;;;;;;35550;;-1:-1:-1;35578:16:0;;-1:-1:-1;;;35578:16:0;;;;35577:17;35550:44;:82;;;;-1:-1:-1;35611:21:0;;-1:-1:-1;;;35611:21:0;;;;35550:82;:120;;;;-1:-1:-1;35657:13:0;;-1:-1:-1;;;;;35649:21:0;;;35657:13;;35649:21;;35550:120;:166;;;;-1:-1:-1;35693:23:0;;-1:-1:-1;;;;;35687:29:0;;;35693:23;;35687:29;;35550:166;:211;;;;-1:-1:-1;35739:22:0;;-1:-1:-1;;;;;35733:28:0;;;35739:22;;35733:28;;35550:211;:284;;;;-1:-1:-1;;;;;;35780:21:0;;35796:4;35780:21;:53;;;;-1:-1:-1;35819:13:0;;-1:-1:-1;;;;;35805:28:0;;;35819:13;;35805:28;35780:53;35778:56;35550:284;35532:450;;;35899:20;;35876:43;;35934:36;35949:20;35934:14;:36::i;:::-;-1:-1:-1;;;;;36175:24:0;;36055:12;36175:24;;;:18;:24;;;;;;36070:4;;36175:24;;;:50;;-1:-1:-1;;;;;;36203:22:0;;;;;;:18;:22;;;;;;;;36175:50;36171:99;;;-1:-1:-1;36253:5:0;36171:99;36348:41;36363:4;36369:2;36373:6;36381:7;36348:14;:41::i;:::-;35166:1231;;;;;;:::o;4917:226::-;5037:7;5073:12;5065:6;;;;5057:29;;;;-1:-1:-1;;;5057:29:0;;;;;;;;:::i;:::-;-1:-1:-1;5097:9:0;5109:5;5113:1;5109;:5;:::i;:::-;5097:17;4917:226;-1:-1:-1;;;;;4917:226:0:o;4014:181::-;4072:7;;4104:5;4108:1;4104;:5;:::i;:::-;4092:17;;4133:1;4128;:6;;4120:46;;;;-1:-1:-1;;;4120:46:0;;;;;;;:::i;:::-;4186:1;4014:181;-1:-1:-1;;;4014:181:0:o;14189:211::-;14306:86;14326:5;14356:23;;;14381:2;14385:5;14333:58;;;;;;;;;:::i;4478:136::-;4536:7;4563:43;4567:1;4570;4563:43;;;;;;;;;;;;;;;;;:3;:43::i;16724:774::-;17148:23;17174:69;17202:4;17174:69;;;;;;;;;;;;;;;;;17182:5;-1:-1:-1;;;;;17174:27:0;;;:69;;;;;:::i;:::-;17258:17;;17148:95;;-1:-1:-1;17258:21:0;17254:237;;17413:10;17402:30;;;;;;;;;;;;:::i;:::-;17394:85;;;;-1:-1:-1;;;17394:85:0;;;;;;;:::i;12602:1021::-;12775:12;12808:18;12819:6;12808:10;:18::i;:::-;12800:60;;;;-1:-1:-1;;;12800:60:0;;;;;;;:::i;:::-;12934:12;12948:23;12975:6;-1:-1:-1;;;;;12975:11:0;12995:8;13005:4;12975:35;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12933:77;;;;13025:7;13021:595;;;13056:10;-1:-1:-1;13049:17:0;;-1:-1:-1;13049:17:0;13021:595;13170:17;;:21;13166:439;;13433:10;13427:17;13494:15;13481:10;13477:2;13473:19;13466:44;13381:148;13576:12;13569:20;;-1:-1:-1;;;13569:20:0;;;;;;;;:::i;36432:561::-;28812:16;:23;;-1:-1:-1;;;;28812:23:0;-1:-1:-1;;;28812:23:0;;;;36590:27:::1;:20:::0;36615:1:::1;36590:24;:27::i;:::-;36569:48:::0;-1:-1:-1;36654:21:0::1;36688:33;36569:48:::0;36688:21:::1;:33::i;:::-;36734:31;36768:40;:21;36794:13:::0;36768:25:::1;:40::i;:::-;36834:22;::::0;36734:74;;-1:-1:-1;36821:83:0::1;::::0;-1:-1:-1;;;;;36834:22:0::1;36858:20:::0;36734:74;36821:12:::1;:83::i;:::-;36922:63;36937:10;36949:23;36974:10;36922:63;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;28858:16:0;:24;;-1:-1:-1;;;;28858:24:0;;;-1:-1:-1;;36432:561:0:o;37074:286::-;37230:7;37225:28;;37239:14;:12;:14::i;:::-;37266:44;37284:6;37292:9;37303:6;37266:17;:44::i;:::-;37328:7;37323:29;;37337:15;:13;:15::i;:::-;37074:286;;;;:::o;7977:641::-;8037:4;8518:20;;8348:66;8567:23;;;;;;:42;;-1:-1:-1;;8594:15:0;;;8559:51;-1:-1:-1;;7977:641:0:o;6349:132::-;6407:7;6434:39;6438:1;6441;6434:39;;;;;;;;;;;;;;;;;:3;:39::i;37888:975::-;38045:16;;;38059:1;38045:16;;;;;;;;38021:21;;38045:16;;;;;;;;;;-1:-1:-1;38045:16:0;38021:40;;38090:4;38072;38077:1;38072:7;;;;;;-1:-1:-1;;;38072:7:0;;;;;;;;;-1:-1:-1;;;;;38072:23:0;;;:7;;;;;;;;;:23;38116:4;;38106:7;;38116:4;;;38106;;38116;;38106:7;;;;-1:-1:-1;;;38106:7:0;;;;;;;;;-1:-1:-1;;;;;38106:14:0;;;:7;;;;;;;;;:14;38157:12;;38192:15;:66;;38273:15;38157:12;38320:4;38347;38157:12;38392:21;:15;38410:3;38392:21;:::i;:::-;38192:236;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38188:611;;-1:-1:-1;;;;;38495:15:0;:66;;38580:15;38614:1;38635:4;38666;38690:21;:15;38708:3;38690:21;:::i;:::-;38495:235;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38491:297;;;;;-1:-1:-1;38759:4:0;38491:297;38188:611;;;-1:-1:-1;38453:4:0;38188:611;38814:7;38809:47;;38838:7;;;;38871:423;-1:-1:-1;;;;;38979:15:0;:31;;39020:14;39058:4;39078:11;39104:1;;39190:8;39213:21;:15;39231:3;39213:21;:::i;:::-;38979:266;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38979:266:0;;;;;;;;-1:-1:-1;;38979:266:0;;;;;;;;;;;;:::i;:::-;;;38975:312;;;;;;;;39260:7;;34500:158;34562:8;;;34543:16;:27;34598:6;;;34581:14;:23;-1:-1:-1;34617:12:0;;;;34640:10;34500:158::o;40879:561::-;-1:-1:-1;;;;;40994:15:0;;;;;;:7;:15;;;;;;:28;;41014:7;40994:19;:28::i;:::-;-1:-1:-1;;;;;40976:15:0;;;;;;:7;:15;;;;;:46;;;;41066:8;;41054:32;;41080:5;;41054:21;;:7;;:11;:21::i;:::-;:25;;:32::i;:::-;41033:53;;41097:16;41116:30;41140:5;41116:19;41128:6;;41116:7;:11;;:19;;;;:::i;:30::-;41097:49;-1:-1:-1;41157:22:0;41182:37;41097:49;41182:23;:7;41194:10;41182:11;:23::i;:::-;:27;;:37::i;:::-;41157:62;;41230:32;41243:6;41251:10;41230:12;:32::i;:::-;41273:28;41284:6;41292:8;41273:10;:28::i;:::-;-1:-1:-1;;;;;41335:18:0;;;;;;:7;:18;;;;;;:38;;41358:14;41335:22;:38::i;:::-;-1:-1:-1;;;;;41314:18:0;;;;;;;:7;:18;;;;;;;:59;;;;41389:43;;;;;;-1:-1:-1;;;;;;;;;;;41389:43:0;;;41417:14;;41389:43;:::i;:::-;;;;;;;;40879:561;;;;;;:::o;34666:113::-;34721:16;;34710:8;:27;34757:14;;34748:6;:23;34666:113::o;6977:312::-;7097:7;7132:12;7125:5;7117:28;;;;-1:-1:-1;;;7117:28:0;;;;;;;;:::i;:::-;-1:-1:-1;7156:9:0;7168:5;7172:1;7168;:5;:::i;5402:471::-;5460:7;5705:6;5701:47;;-1:-1:-1;5735:1:0;5728:8;;5701:47;5760:9;5772:5;5776:1;5772;:5;:::i;:::-;5760:17;-1:-1:-1;5805:1:0;5796:5;5800:1;5760:17;5796:5;:::i;:::-;:10;5788:56;;;;-1:-1:-1;;;5788:56:0;;;;;;;:::i;37368:272::-;37446:8;;37442:26;;37461:7;;37442:26;37500:19;;;:7;:19;;;;:32;;37524:7;37500:23;:32::i;:::-;37478:19;;;:7;:19;;;:54;37556:10;;:23;;37571:7;37556:14;:23::i;:::-;37543:10;:36;37595:37;;37620:1;;-1:-1:-1;;;;;37595:37:0;;;-1:-1:-1;;;;;;;;;;;37595:37:0;;;37624:7;;37595:37;:::i;:::-;;;;;;;;37368:272;;:::o;37648:230::-;37724:6;;37720:24;;37737:7;;37720:24;37795:4;37779:22;;;;:7;:22;;;;;;:35;;37806:7;37779:26;:35::i;:::-;37770:4;37754:22;;;;:7;:22;;;;;;;:60;;;;37830:40;;-1:-1:-1;;;;;37830:40:0;;;-1:-1:-1;;;;;;;;;;;37830:40:0;;;37862:7;;37830:40;:::i;14:259:1:-;;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:33;237:5;210:33;:::i;278:263::-;;401:2;389:9;380:7;376:23;372:32;369:2;;;422:6;414;407:22;369:2;459:9;453:16;478:33;505:5;478:33;:::i;546:402::-;;;675:2;663:9;654:7;650:23;646:32;643:2;;;696:6;688;681:22;643:2;740:9;727:23;759:33;786:5;759:33;:::i;:::-;811:5;-1:-1:-1;868:2:1;853:18;;840:32;881:35;840:32;881:35;:::i;:::-;935:7;925:17;;;633:315;;;;;:::o;953:470::-;;;;1099:2;1087:9;1078:7;1074:23;1070:32;1067:2;;;1120:6;1112;1105:22;1067:2;1164:9;1151:23;1183:33;1210:5;1183:33;:::i;:::-;1235:5;-1:-1:-1;1292:2:1;1277:18;;1264:32;1305:35;1264:32;1305:35;:::i;:::-;1057:366;;1359:7;;-1:-1:-1;;;1413:2:1;1398:18;;;;1385:32;;1057:366::o;1428:327::-;;;1557:2;1545:9;1536:7;1532:23;1528:32;1525:2;;;1578:6;1570;1563:22;1525:2;1622:9;1609:23;1641:33;1668:5;1641:33;:::i;:::-;1693:5;1745:2;1730:18;;;;1717:32;;-1:-1:-1;;;1515:240:1:o;1760:253::-;;1869:2;1857:9;1848:7;1844:23;1840:32;1837:2;;;1890:6;1882;1875:22;1837:2;1934:9;1921:23;1953:30;1977:5;1953:30;:::i;2018:257::-;;2138:2;2126:9;2117:7;2113:23;2109:32;2106:2;;;2159:6;2151;2144:22;2106:2;2196:9;2190:16;2215:30;2239:5;2215:30;:::i;2280:190::-;;2392:2;2380:9;2371:7;2367:23;2363:32;2360:2;;;2413:6;2405;2398:22;2360:2;-1:-1:-1;2441:23:1;;2350:120;-1:-1:-1;2350:120:1:o;2475:194::-;;2598:2;2586:9;2577:7;2573:23;2569:32;2566:2;;;2619:6;2611;2604:22;2566:2;-1:-1:-1;2647:16:1;;2556:113;-1:-1:-1;2556:113:1:o;2674:316::-;;;;2831:2;2819:9;2810:7;2806:23;2802:32;2799:2;;;2852:6;2844;2837:22;2799:2;2886:9;2880:16;2870:26;;2936:2;2925:9;2921:18;2915:25;2905:35;;2980:2;2969:9;2965:18;2959:25;2949:35;;2789:201;;;;;:::o;2995:469::-;;3092:5;3086:12;3119:6;3114:3;3107:19;3145:4;3174:2;3169:3;3165:12;3158:19;;3211:2;3204:5;3200:14;3232:3;3244:195;3258:6;3255:1;3252:13;3244:195;;;3323:13;;-1:-1:-1;;;;;3319:39:1;3307:52;;3379:12;;;;3414:15;;;;3355:1;3273:9;3244:195;;;-1:-1:-1;3455:3:1;;3062:402;-1:-1:-1;;;;;3062:402:1:o;3469:274::-;;3636:6;3630:13;3652:53;3698:6;3693:3;3686:4;3678:6;3674:17;3652:53;:::i;:::-;3721:16;;;;;3606:137;-1:-1:-1;;3606:137:1:o;3748:205::-;3948:3;3939:14::o;3958:203::-;-1:-1:-1;;;;;4122:32:1;;;;4104:51;;4092:2;4077:18;;4059:102::o;4166:304::-;-1:-1:-1;;;;;4396:15:1;;;4378:34;;4448:15;;4443:2;4428:18;;4421:43;4328:2;4313:18;;4295:175::o;4475:274::-;-1:-1:-1;;;;;4667:32:1;;;;4649:51;;4731:2;4716:18;;4709:34;4637:2;4622:18;;4604:145::o;4754:607::-;-1:-1:-1;;;;;5113:15:1;;;5095:34;;5160:2;5145:18;;5138:34;;;;5203:2;5188:18;;5181:34;;;;5246:2;5231:18;;5224:34;;;;5295:15;;;5289:3;5274:19;;5267:44;5075:3;5327:19;;5320:35;;;;5044:3;5029:19;;5011:350::o;5366:187::-;5531:14;;5524:22;5506:41;;5494:2;5479:18;;5461:92::o;5793:383::-;;5942:2;5931:9;5924:21;5974:6;5968:13;6017:6;6012:2;6001:9;5997:18;5990:34;6033:66;6092:6;6087:2;6076:9;6072:18;6067:2;6059:6;6055:15;6033:66;:::i;:::-;6160:2;6139:15;-1:-1:-1;;6135:29:1;6120:45;;;;6167:2;6116:54;;5914:262;-1:-1:-1;;5914:262:1:o;6181:420::-;6383:2;6365:21;;;6422:2;6402:18;;;6395:30;6461:34;6456:2;6441:18;;6434:62;6532:26;6527:2;6512:18;;6505:54;6591:3;6576:19;;6355:246::o;6606:406::-;6808:2;6790:21;;;6847:2;6827:18;;;6820:30;6886:34;6881:2;6866:18;;6859:62;-1:-1:-1;;;6952:2:1;6937:18;;6930:40;7002:3;6987:19;;6780:232::o;7017:402::-;7219:2;7201:21;;;7258:2;7238:18;;;7231:30;7297:34;7292:2;7277:18;;7270:62;-1:-1:-1;;;7363:2:1;7348:18;;7341:36;7409:3;7394:19;;7191:228::o;7424:398::-;7626:2;7608:21;;;7665:2;7645:18;;;7638:30;7704:34;7699:2;7684:18;;7677:62;-1:-1:-1;;;7770:2:1;7755:18;;7748:32;7812:3;7797:19;;7598:224::o;7827:351::-;8029:2;8011:21;;;8068:2;8048:18;;;8041:30;8107:29;8102:2;8087:18;;8080:57;8169:2;8154:18;;8001:177::o;8183:340::-;8385:2;8367:21;;;8424:2;8404:18;;;8397:30;-1:-1:-1;;;8458:2:1;8443:18;;8436:46;8514:2;8499:18;;8357:166::o;8528:425::-;8730:2;8712:21;;;8769:2;8749:18;;;8742:30;8808:34;8803:2;8788:18;;8781:62;8879:31;8874:2;8859:18;;8852:59;8943:3;8928:19;;8702:251::o;8958:397::-;9160:2;9142:21;;;9199:2;9179:18;;;9172:30;9238:34;9233:2;9218:18;;9211:62;-1:-1:-1;;;9304:2:1;9289:18;;9282:31;9345:3;9330:19;;9132:223::o;9360:418::-;9562:2;9544:21;;;9601:2;9581:18;;;9574:30;9640:34;9635:2;9620:18;;9613:62;-1:-1:-1;;;9706:2:1;9691:18;;9684:52;9768:3;9753:19;;9534:244::o;9783:356::-;9985:2;9967:21;;;10004:18;;;9997:30;10063:34;10058:2;10043:18;;10036:62;10130:2;10115:18;;9957:182::o;10144:426::-;10346:2;10328:21;;;10385:2;10365:18;;;10358:30;10424:34;10419:2;10404:18;;10397:62;10495:32;10490:2;10475:18;;10468:60;10560:3;10545:19;;10318:252::o;10575:412::-;10777:2;10759:21;;;10816:2;10796:18;;;10789:30;10855:34;10850:2;10835:18;;10828:62;-1:-1:-1;;;10921:2:1;10906:18;;10899:46;10977:3;10962:19;;10749:238::o;10992:402::-;11194:2;11176:21;;;11233:2;11213:18;;;11206:30;11272:34;11267:2;11252:18;;11245:62;-1:-1:-1;;;11338:2:1;11323:18;;11316:36;11384:3;11369:19;;11166:228::o;11399:401::-;11601:2;11583:21;;;11640:2;11620:18;;;11613:30;11679:34;11674:2;11659:18;;11652:62;-1:-1:-1;;;11745:2:1;11730:18;;11723:35;11790:3;11775:19;;11573:227::o;11805:425::-;12007:2;11989:21;;;12046:2;12026:18;;;12019:30;12085:34;12080:2;12065:18;;12058:62;12156:31;12151:2;12136:18;;12129:59;12220:3;12205:19;;11979:251::o;12235:400::-;12437:2;12419:21;;;12476:2;12456:18;;;12449:30;12515:34;12510:2;12495:18;;12488:62;-1:-1:-1;;;12581:2:1;12566:18;;12559:34;12625:3;12610:19;;12409:226::o;12640:353::-;12842:2;12824:21;;;12881:2;12861:18;;;12854:30;12920:31;12915:2;12900:18;;12893:59;12984:2;12969:18;;12814:179::o;12998:337::-;13200:2;13182:21;;;13239:2;13219:18;;;13212:30;-1:-1:-1;;;13273:2:1;13258:18;;13251:43;13326:2;13311:18;;13172:163::o;13340:177::-;13486:25;;;13474:2;13459:18;;13441:76::o;13522:690::-;;13849:6;13838:9;13831:25;13892:6;13887:2;13876:9;13872:18;13865:34;13935:3;13930:2;13919:9;13915:18;13908:31;13956:63;14014:3;14003:9;13999:19;13991:6;13956:63;:::i;:::-;-1:-1:-1;;;;;14093:15:1;;;14088:2;14073:18;;14066:43;14146:15;;;;14140:3;14125:19;;14118:44;14046:3;14178:19;14171:35;13948:71;13821:391;-1:-1:-1;;;;13821:391:1:o;14217:588::-;;14516:6;14505:9;14498:25;14559:6;14554:2;14543:9;14539:18;14532:34;14602:3;14597:2;14586:9;14582:18;14575:31;14623:63;14681:3;14670:9;14666:19;14658:6;14623:63;:::i;:::-;-1:-1:-1;;;;;14722:32:1;;;;14717:2;14702:18;;14695:60;-1:-1:-1;14786:3:1;14771:19;14764:35;14615:71;14488:317;-1:-1:-1;;;14488:317:1:o;14810:319::-;15012:25;;;15068:2;15053:18;;15046:34;;;;15111:2;15096:18;;15089:34;15000:2;14985:18;;14967:162::o;15134:128::-;;15205:1;15201:6;15198:1;15195:13;15192:2;;;15211:18;;:::i;:::-;-1:-1:-1;15247:9:1;;15182:80::o;15267:217::-;;15333:1;15323:2;;-1:-1:-1;;;15358:31:1;;15412:4;15409:1;15402:15;15440:4;15365:1;15430:15;15323:2;-1:-1:-1;15469:9:1;;15313:171::o;15489:168::-;;15595:1;15591;15587:6;15583:14;15580:1;15577:21;15572:1;15565:9;15558:17;15554:45;15551:2;;;15602:18;;:::i;:::-;-1:-1:-1;15642:9:1;;15541:116::o;15662:125::-;;15730:1;15727;15724:8;15721:2;;;15735:18;;:::i;:::-;-1:-1:-1;15772:9:1;;15711:76::o;15792:258::-;15864:1;15874:113;15888:6;15885:1;15882:13;15874:113;;;15964:11;;;15958:18;15945:11;;;15938:39;15910:2;15903:10;15874:113;;;16005:6;16002:1;15999:13;15996:2;;;-1:-1:-1;;16040:1:1;16022:16;;16015:27;15845:205::o;16055:380::-;16140:1;16130:12;;16187:1;16177:12;;;16198:2;;16252:4;16244:6;16240:17;16230:27;;16198:2;16305;16297:6;16294:14;16274:18;16271:38;16268:2;;;16351:10;16346:3;16342:20;16339:1;16332:31;16386:4;16383:1;16376:15;16414:4;16411:1;16404:15;16268:2;;16110:325;;;:::o;16440:127::-;16501:10;16496:3;16492:20;16489:1;16482:31;16532:4;16529:1;16522:15;16556:4;16553:1;16546:15;16572:133;-1:-1:-1;;;;;16649:31:1;;16639:42;;16629:2;;16695:1;16692;16685:12;16710:120;16798:5;16791:13;16784:21;16777:5;16774:32;16764:2;;16820:1;16817;16810:12

Swarm Source

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