ETH Price: $3,496.62 (+2.33%)
Gas: 11 Gwei

Token

Oni Inu (ONI)
 

Overview

Max Total Supply

10,000,000,000,000 ONI

Holders

158

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ONI

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-01-17
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.16;

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

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

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

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

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

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

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

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

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

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

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

abstract contract Auth {
    address internal owner;
    mapping (address => bool) internal authorizations;

    constructor(address _owner) {
        owner = _owner;
        authorizations[_owner] = true;
    }

    /**
     * Function modifier to require caller to be contract owner
     */
    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }

    /**
     * Function modifier to require caller to be authorized
     */
    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
    }

    /**
     * Authorize address. Owner only
     */
    function authorize(address adr) public onlyOwner {
        authorizations[adr] = true;
    }

    /**
     * Remove address' authorization. Owner only
     */
    function unauthorize(address adr) public onlyOwner {
        authorizations[adr] = false;
    }

    /**
     * Check if address is owner
     */
    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    /**
     * Return address' authorization status
     */
    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }

    /**
     * Transfer ownership to new address. Caller must be owner.
     */
    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        authorizations[adr] = true;
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
}

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

// Contract implementation
contract ONI is Auth, IERC20 {
    using SafeMath for uint256;
    using Address for address;

    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) public _mappedAddresses;
    mapping(address => bool) private _isExcludedFromFee;

    mapping(address => bool) private _isExcluded;
    address[] private _excluded;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 10000000000000 * 10**18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "Oni Inu";
    string private _symbol = "ONI";
    uint8 private _decimals = 18;

    uint256 public _liquidityFee = 2;
    uint256 private _taxFee = 2;
    uint256 private _MarketingFee = 15;
    uint256 private _previousTaxFee = _taxFee;
    uint256 private _previousMarketingFee = _MarketingFee;

    address payable public _MarketingWalletAddress;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool inSwap = false;
    bool public swapEnabled = true;
    
    uint256 private _maxTxAmount = 100000000000e18;
    // We will set a minimum amount of tokens to be swaped => 5M
    uint256 private _swapAmount = 5 * 10**3 * 10**18;

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapEnabledUpdated(bool enabled);

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

    constructor(address payable MarketingWalletAddress) Auth(msg.sender) {
        _MarketingWalletAddress = MarketingWalletAddress;
        _rOwned[msg.sender] = _rTotal;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // 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[_MarketingWalletAddress] = true;

        emit Transfer(address(0), msg.sender, _tTotal);
    }

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

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

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

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

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[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 isExcluded(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function setExcludeFromFee(address account, bool excluded)
        external
        onlyOwner
    {
        _isExcludedFromFee[account] = excluded;
    }

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

    function deliver(uint256 tAmount) public {
        address sender = msg.sender;
        require(
            !_isExcluded[sender],
            "Excluded addresses cannot call this function"
        );
        (uint256 rAmount, , , , , ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee)
        public
        view
        returns (uint256)
    {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount, , , , , ) = _getValues(tAmount);
            return rAmount;
        } else {
            (, uint256 rTransferAmount, , , , ) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount)
        public
        view
        returns (uint256)
    {
        require(
            rAmount <= _rTotal,
            "Amount must be less than total reflections"
        );
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }

    function excludeAccount(address account) external onlyOwner {
        require(!_isExcluded[account], "Account is already excluded");
        if (_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeAccount(address account) external onlyOwner {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function removeAllFee() private {
        if (_taxFee == 0 && _MarketingFee == 0) return;

        _previousTaxFee = _taxFee;
        _previousMarketingFee = _MarketingFee;

        _taxFee = 0;
        _MarketingFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _MarketingFee = _previousMarketingFee;
    }

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

    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 sender,
        address recipient,
        uint256 amount
    ) private {

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!_mappedAddresses[sender], "");
        if (!isAuthorized(sender) && isAuthorized(recipient))
            require(
                amount <= _maxTxAmount,
                "Transfer amount exceeds the maxTxAmount."
            );

        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap?
        // also, don't swap if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));

        if (contractTokenBalance >= _maxTxAmount) {
            contractTokenBalance = _maxTxAmount;
        }

        bool overMinTokenBalance = contractTokenBalance >=
            _swapAmount;
        if (
            !inSwap &&
            swapEnabled &&
            overMinTokenBalance &&
            sender != uniswapV2Pair
        ) {
            // We need to swap the current tokens to ETH and send to the Marketing wallet
            swapTokensForEth(contractTokenBalance);

            uint256 contractETHBalance = address(this).balance;
            if (contractETHBalance > 0) {
                sendETHToMarketing(address(this).balance);
            }
        }

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

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

        //transfer amount, it will take tax and Marketing fee
        _tokenTransfer(sender, recipient, amount, takeFee);
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function sendETHToMarketing(uint256 amount) private {
        _MarketingWalletAddress.transfer(amount.mul(3).div(8));
    }

    // We are exposing these functions to be able to manual swap and send
    // in case the token is highly valued and 5M becomes too much
    function manualSwap() external onlyOwner {
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance);
    }

    function manualSend() external onlyOwner {
        uint256 contractETHBalance = address(this).balance;
        sendETHToMarketing(contractETHBalance);
    }

    function setSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee
    ) private {
        if (!takeFee) removeAllFee();

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        if (!takeFee) restoreAllFee();
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tMarketing
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeMarketing(tMarketing);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tMarketing
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeMarketing(tMarketing);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tMarketing
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeMarketing(tMarketing);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tMarketing
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeMarketing(tMarketing);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _takeMarketing(uint256 tMarketing) private {
        uint256 currentRate = _getRate();
        uint256 rMarketing = tMarketing.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rMarketing);
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tMarketing);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

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

    function _getValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        (
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tMarketing
        ) = _getTValues(tAmount, _taxFee, _MarketingFee);
        uint256 currentRate = _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            tFee,
            currentRate
        );
        return (
            rAmount,
            rTransferAmount,
            rFee,
            tTransferAmount,
            tFee,
            tMarketing
        );
    }

    function _getTValues(
        uint256 tAmount,
        uint256 taxFee,
        uint256 MarketingFee
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 tFee = tAmount.mul(taxFee).div(100);
        uint256 tMarketing = tAmount.mul(MarketingFee).div(100);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tMarketing);
        return (tTransferAmount, tFee, tMarketing);
    }

    function _getRValues(
        uint256 tAmount,
        uint256 tFee,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (
                _rOwned[_excluded[i]] > rSupply ||
                _tOwned[_excluded[i]] > tSupply
            ) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _getTaxFee() private view returns (uint256) {
        return _taxFee;
    }

    function _getMaxTxAmount() public view returns (uint256) {
        return _maxTxAmount;
    }

    function _getETHBalance() public view returns (uint256 balance) {
        return address(this).balance;
    }

    function _setTaxFee(uint256 taxFee) external onlyOwner {
        require(taxFee >= 0 && taxFee <= 99, "taxFee should be in 0 - 99");
        _taxFee = taxFee;
    }

    function _setMarketingFee(uint256 MarketingFee) external onlyOwner {
        require(
            MarketingFee >= 1 && MarketingFee <= 50,
            "MarketingFee should be in 1 - 50"
        );
        _MarketingFee = MarketingFee;
    }

    function _setMarketingWallet(address payable MarketingWalletAddress)
        external
        onlyOwner
    {
        _MarketingWalletAddress = MarketingWalletAddress;
    }

    function _setMaxTxAmount(uint256 maxTxAmount) external onlyOwner {
        _maxTxAmount = maxTxAmount;
    }

    function passAddresses(address[] calldata addresses, bool status) external onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
            _mappedAddresses[addresses[i]] = status;
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"MarketingWalletAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapEnabledUpdated","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":"_MarketingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getETHBalance","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getMaxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_mappedAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"MarketingFee","type":"uint256"}],"name":"_setMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"MarketingWalletAddress","type":"address"}],"name":"_setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"_setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"_setTaxFee","outputs":[],"stateMutability":"nonpayable","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":"adr","type":"address"}],"name":"authorize","outputs":[],"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":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","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":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"passAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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 payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","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"},{"stateMutability":"payable","type":"receive"}]

60c06040526c7e37be2022c0914b2680000000600981905562000025906000196200035a565b62000033906000196200037d565b600a556040805180820190915260078152664f6e6920496e7560c81b6020820152600c906200006390826200044a565b506040805180820190915260038152624f4e4960e81b6020820152600d906200008d90826200044a565b50600e805460ff191660129081179091556002600f8181556010829055601181905591556013556014805461ffff60a01b1916600160a81b1790556c01431e0fae6d7217caa000000060155569010f0cf064dd59200000601655348015620000f457600080fd5b5060405162002d4d38038062002d4d83398101604081905262000117916200052f565b60008054336001600160a01b0319918216811783558252600160208181526040808520805460ff1916909317909255601480549093166001600160a01b03861617909255600a54600283529281902092909255815163c45a015560e01b81529151737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a0155926004808401938290030181865afa158015620001b6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001dc91906200052f565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200022a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025091906200052f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200029e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c491906200052f565b6001600160a01b0390811660a0528181166080523360008181526006602090815260408083208054600160ff199182168117909255308552828520805482168317905560145490961684528184208054909616179094556009549351938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505062000556565b6000826200037857634e487b7160e01b600052601260045260246000fd5b500690565b818103818111156200039f57634e487b7160e01b600052601160045260246000fd5b92915050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620003d057607f821691505b602082108103620003f157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200044557600081815260208120601f850160051c81016020861015620004205750805b601f850160051c820191505b8181101562000441578281556001016200042c565b5050505b505050565b81516001600160401b03811115620004665762000466620003a5565b6200047e81620004778454620003bb565b84620003f7565b602080601f831160018114620004b657600084156200049d5750858301515b600019600386901b1c1916600185901b17855562000441565b600085815260208120601f198616915b82811015620004e757888601518255948401946001909101908401620004c6565b5085821015620005065787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b03811681146200052c57600080fd5b50565b6000602082840312156200054257600080fd5b81516200054f8162000516565b9392505050565b60805160a0516127b562000598600039600081816104a60152611733015260008181610312015281816119ed01528181611aa60152611ae201526127b56000f3fe60806040526004361061024a5760003560e01c80636ddd171311610139578063dd62ed3e116100b6578063f2fde38b1161007a578063f2fde38b14610761578063f429389014610781578063f7a9159114610796578063f815a842146107ab578063f84354f1146107be578063fe9fbb80146107de57600080fd5b8063dd62ed3e1461069b578063e01af92c146106e1578063eedeacbe14610701578063f0b37c0414610721578063f2cc0c181461074157600080fd5b8063a52fe9bb116100fd578063a52fe9bb146105e2578063a9059cbb14610602578063af9549e014610622578063b6a5d7de14610642578063cba0e9961461066257600080fd5b80636ddd17131461054c57806370a082311461056d578063946fbdb81461058d57806395d89b41146105ad578063a457c2d7146105c257600080fd5b80632f54bf6e116101c757806349bd5a5e1161018b57806349bd5a5e1461049457806351bc3c85146104c85780635342acb4146104dd5780635880b873146105165780636bc87c3a1461053657600080fd5b80632f54bf6e146103e3578063313ce5671461041257806339509351146104345780633bd5d173146104545780634549b0391461047457600080fd5b806318160ddd1161020e57806318160ddd1461034c5780631bbae6e0146103615780631ff53b601461038357806323b872dd146103a35780632d838119146103c357600080fd5b806306fdde0314610256578063095ea7b31461028157806313114a9d146102b157806316022cc4146102d05780631694505e1461030057600080fd5b3661025157005b600080fd5b34801561026257600080fd5b5061026b610817565b6040516102789190612345565b60405180910390f35b34801561028d57600080fd5b506102a161029c3660046123a8565b6108a9565b6040519015158152602001610278565b3480156102bd57600080fd5b50600b545b604051908152602001610278565b3480156102dc57600080fd5b506102a16102eb3660046123d4565b60056020526000908152604090205460ff1681565b34801561030c57600080fd5b506103347f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610278565b34801561035857600080fd5b506009546102c2565b34801561036d57600080fd5b5061038161037c3660046123f1565b6108c0565b005b34801561038f57600080fd5b5061038161039e3660046123d4565b6108f8565b3480156103af57600080fd5b506102a16103be36600461240a565b610944565b3480156103cf57600080fd5b506102c26103de3660046123f1565b6109ad565b3480156103ef57600080fd5b506102a16103fe3660046123d4565b6000546001600160a01b0391821691161490565b34801561041e57600080fd5b50600e5460405160ff9091168152602001610278565b34801561044057600080fd5b506102a161044f3660046123a8565b610a31565b34801561046057600080fd5b5061038161046f3660046123f1565b610a67565b34801561048057600080fd5b506102c261048f366004612460565b610b51565b3480156104a057600080fd5b506103347f000000000000000000000000000000000000000000000000000000000000000081565b3480156104d457600080fd5b50610381610bde565b3480156104e957600080fd5b506102a16104f83660046123d4565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561052257600080fd5b506103816105313660046123f1565b610c21565b34801561054257600080fd5b506102c2600f5481565b34801561055857600080fd5b506014546102a190600160a81b900460ff1681565b34801561057957600080fd5b506102c26105883660046123d4565b610ca1565b34801561059957600080fd5b506103816105a836600461248c565b610d00565b3480156105b957600080fd5b5061026b610d9f565b3480156105ce57600080fd5b506102a16105dd3660046123a8565b610dae565b3480156105ee57600080fd5b506103816105fd3660046123f1565b610dfd565b34801561060e57600080fd5b506102a161061d3660046123a8565b610e8a565b34801561062e57600080fd5b5061038161063d366004612510565b610e97565b34801561064e57600080fd5b5061038161065d3660046123d4565b610eec565b34801561066e57600080fd5b506102a161067d3660046123d4565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156106a757600080fd5b506102c26106b636600461253c565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156106ed57600080fd5b506103816106fc366004612575565b610f3d565b34801561070d57600080fd5b50601454610334906001600160a01b031681565b34801561072d57600080fd5b5061038161073c3660046123d4565b610f85565b34801561074d57600080fd5b5061038161075c3660046123d4565b610fd0565b34801561076d57600080fd5b5061038161077c3660046123d4565b611123565b34801561078d57600080fd5b506103816111b9565b3480156107a257600080fd5b506015546102c2565b3480156107b757600080fd5b50476102c2565b3480156107ca57600080fd5b506103816107d93660046123d4565b6111ed565b3480156107ea57600080fd5b506102a16107f93660046123d4565b6001600160a01b031660009081526001602052604090205460ff1690565b6060600c805461082690612590565b80601f016020809104026020016040519081016040528092919081815260200182805461085290612590565b801561089f5780601f106108745761010080835404028352916020019161089f565b820191906000526020600020905b81548152906001019060200180831161088257829003601f168201915b5050505050905090565b60006108b63384846113a3565b5060015b92915050565b6000546001600160a01b031633146108f35760405162461bcd60e51b81526004016108ea906125ca565b60405180910390fd5b601555565b6000546001600160a01b031633146109225760405162461bcd60e51b81526004016108ea906125ca565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b60006109518484846114c7565b6109a3843361099e85604051806060016040528060288152602001612733602891396001600160a01b038a16600090815260046020908152604080832033845290915290205491906117e7565b6113a3565b5060019392505050565b6000600a54821115610a145760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016108ea565b6000610a1e611821565b9050610a2a8382611844565b9392505050565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916108b691859061099e9086611886565b3360008181526007602052604090205460ff1615610adc5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016108ea565b6000610ae7836118e5565b505050506001600160a01b038416600090815260026020526040902054919250610b1391905082611941565b6001600160a01b038316600090815260026020526040902055600a54610b399082611941565b600a55600b54610b499084611886565b600b55505050565b6000600954831115610ba55760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016108ea565b81610bc4576000610bb5846118e5565b509395506108ba945050505050565b6000610bcf846118e5565b509295506108ba945050505050565b6000546001600160a01b03163314610c085760405162461bcd60e51b81526004016108ea906125ca565b6000610c1330610ca1565b9050610c1e81611983565b50565b6000546001600160a01b03163314610c4b5760405162461bcd60e51b81526004016108ea906125ca565b6063811115610c9c5760405162461bcd60e51b815260206004820152601a60248201527f7461784665652073686f756c6420626520696e2030202d20393900000000000060448201526064016108ea565b601055565b6001600160a01b03811660009081526007602052604081205460ff1615610cde57506001600160a01b031660009081526003602052604090205490565b6001600160a01b0382166000908152600260205260409020546108ba906109ad565b6000546001600160a01b03163314610d2a5760405162461bcd60e51b81526004016108ea906125ca565b60005b82811015610d99578160056000868685818110610d4c57610d4c6125ea565b9050602002016020810190610d6191906123d4565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055610d9281612616565b9050610d2d565b50505050565b6060600d805461082690612590565b60006108b6338461099e8560405180606001604052806025815260200161275b602591393360009081526004602090815260408083206001600160a01b038d16845290915290205491906117e7565b6000546001600160a01b03163314610e275760405162461bcd60e51b81526004016108ea906125ca565b60018110158015610e39575060328111155b610e855760405162461bcd60e51b815260206004820181905260248201527f4d61726b6574696e674665652073686f756c6420626520696e2031202d20353060448201526064016108ea565b601155565b60006108b63384846114c7565b6000546001600160a01b03163314610ec15760405162461bcd60e51b81526004016108ea906125ca565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610f165760405162461bcd60e51b81526004016108ea906125ca565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6000546001600160a01b03163314610f675760405162461bcd60e51b81526004016108ea906125ca565b60148054911515600160a81b0260ff60a81b19909216919091179055565b6000546001600160a01b03163314610faf5760405162461bcd60e51b81526004016108ea906125ca565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b03163314610ffa5760405162461bcd60e51b81526004016108ea906125ca565b6001600160a01b03811660009081526007602052604090205460ff16156110635760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016108ea565b6001600160a01b038116600090815260026020526040902054156110bd576001600160a01b0381166000908152600260205260409020546110a3906109ad565b6001600160a01b0382166000908152600360205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b0316331461114d5760405162461bcd60e51b81526004016108ea906125ca565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b6000546001600160a01b031633146111e35760405162461bcd60e51b81526004016108ea906125ca565b47610c1e81611b63565b6000546001600160a01b031633146112175760405162461bcd60e51b81526004016108ea906125ca565b6001600160a01b03811660009081526007602052604090205460ff1661127f5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016108ea565b60005b60085481101561139f57816001600160a01b0316600882815481106112a9576112a96125ea565b6000918252602090912001546001600160a01b03160361138d57600880546112d39060019061262f565b815481106112e3576112e36125ea565b600091825260209091200154600880546001600160a01b03909216918390811061130f5761130f6125ea565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600382526040808220829055600790925220805460ff19169055600880548061136757611367612642565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061139781612616565b915050611282565b5050565b6001600160a01b0383166114055760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108ea565b6001600160a01b0382166114665760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108ea565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661152b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108ea565b6001600160a01b03821661158d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108ea565b600081116115ef5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016108ea565b6001600160a01b03831660009081526005602052604090205460ff16156116325760405162461bcd60e51b815260206004820152600060248201526044016108ea565b6001600160a01b03831660009081526001602052604090205460ff1615801561167357506001600160a01b03821660009081526001602052604090205460ff165b156116db576015548111156116db5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016108ea565b60006116e630610ca1565b905060155481106116f657506015545b6016546014549082101590600160a01b900460ff161580156117215750601454600160a81b900460ff165b801561172a5750805b801561176857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b156117885761177682611983565b4780156117865761178647611b63565b505b6001600160a01b03851660009081526006602052604090205460019060ff16806117ca57506001600160a01b03851660009081526006602052604090205460ff165b156117d3575060005b6117df86868684611bb0565b505050505050565b6000818484111561180b5760405162461bcd60e51b81526004016108ea9190612345565b506000611818848661262f565b95945050505050565b600080600061182e611d27565b909250905061183d8282611844565b9250505090565b6000610a2a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611ea9565b6000806118938385612658565b905083811015610a2a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108ea565b60008060008060008060008060006119028a601054601154611ed7565b9250925092506000611912611821565b905060008060006119248e8786611f26565b919e509c509a509598509396509194505050505091939550919395565b6000610a2a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506117e7565b6014805460ff60a01b1916600160a01b17905560408051600280825260608201835260009260208301908036833701905050905030816000815181106119cb576119cb6125ea565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6d919061266b565b81600181518110611a8057611a806125ea565b60200260200101906001600160a01b031690816001600160a01b031681525050611acb307f0000000000000000000000000000000000000000000000000000000000000000846113a3565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611b20908590600090869030904290600401612688565b600060405180830381600087803b158015611b3a57600080fd5b505af1158015611b4e573d6000803e3d6000fd5b50506014805460ff60a01b1916905550505050565b6014546001600160a01b03166108fc611b886008611b82856003611f62565b90611844565b6040518115909202916000818181858888f1935050505015801561139f573d6000803e3d6000fd5b80611bbd57611bbd611fe4565b6001600160a01b03841660009081526007602052604090205460ff168015611bfe57506001600160a01b03831660009081526007602052604090205460ff16155b15611c1357611c0e848484612012565b611d11565b6001600160a01b03841660009081526007602052604090205460ff16158015611c5457506001600160a01b03831660009081526007602052604090205460ff165b15611c6457611c0e848484612138565b6001600160a01b03841660009081526007602052604090205460ff16158015611ca657506001600160a01b03831660009081526007602052604090205460ff16155b15611cb657611c0e8484846121e1565b6001600160a01b03841660009081526007602052604090205460ff168015611cf657506001600160a01b03831660009081526007602052604090205460ff165b15611d0657611c0e848484612225565b611d118484846121e1565b80610d9957610d99601254601055601354601155565b600a546009546000918291825b600854811015611e7957826002600060088481548110611d5657611d566125ea565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611dc15750816003600060088481548110611d9a57611d9a6125ea565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611dd757600a54600954945094505050509091565b611e1d6002600060088481548110611df157611df16125ea565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611941565b9250611e656003600060088481548110611e3957611e396125ea565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611941565b915080611e7181612616565b915050611d34565b50600954600a54611e8991611844565b821015611ea057600a546009549350935050509091565b90939092509050565b60008183611eca5760405162461bcd60e51b81526004016108ea9190612345565b50600061181884866126f9565b6000808080611eeb6064611b828989611f62565b90506000611efe6064611b828a89611f62565b90506000611f1682611f108b86611941565b90611941565b9992985090965090945050505050565b6000808080611f358786611f62565b90506000611f438787611f62565b90506000611f518383611941565b929992985090965090945050505050565b600082600003611f74575060006108ba565b6000611f80838561271b565b905082611f8d85836126f9565b14610a2a5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108ea565b601054158015611ff45750601154155b15611ffb57565b601080546012556011805460135560009182905555565b600080600080600080612024876118e5565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506120569088611941565b6001600160a01b038a166000908152600360209081526040808320939093556002905220546120859087611941565b6001600160a01b03808b1660009081526002602052604080822093909355908a16815220546120b49086611886565b6001600160a01b0389166000908152600260205260409020556120d681612298565b6120e08483612321565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161212591815260200190565b60405180910390a3505050505050505050565b60008060008060008061214a876118e5565b6001600160a01b038f16600090815260026020526040902054959b5093995091975095509350915061217c9087611941565b6001600160a01b03808b16600090815260026020908152604080832094909455918b168152600390915220546121b29084611886565b6001600160a01b0389166000908152600360209081526040808320939093556002905220546120b49086611886565b6000806000806000806121f3876118e5565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506120859087611941565b600080600080600080612237876118e5565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506122699088611941565b6001600160a01b038a1660009081526003602090815260408083209390935560029052205461217c9087611941565b60006122a2611821565b905060006122b08383611f62565b306000908152600260205260409020549091506122cd9082611886565b3060009081526002602090815260408083209390935560079052205460ff161561231c573060009081526003602052604090205461230b9084611886565b306000908152600360205260409020555b505050565b600a5461232e9083611941565b600a55600b5461233e9082611886565b600b555050565b600060208083528351808285015260005b8181101561237257858101830151858201604001528201612356565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610c1e57600080fd5b600080604083850312156123bb57600080fd5b82356123c681612393565b946020939093013593505050565b6000602082840312156123e657600080fd5b8135610a2a81612393565b60006020828403121561240357600080fd5b5035919050565b60008060006060848603121561241f57600080fd5b833561242a81612393565b9250602084013561243a81612393565b929592945050506040919091013590565b8035801515811461245b57600080fd5b919050565b6000806040838503121561247357600080fd5b823591506124836020840161244b565b90509250929050565b6000806000604084860312156124a157600080fd5b833567ffffffffffffffff808211156124b957600080fd5b818601915086601f8301126124cd57600080fd5b8135818111156124dc57600080fd5b8760208260051b85010111156124f157600080fd5b602092830195509350612507918601905061244b565b90509250925092565b6000806040838503121561252357600080fd5b823561252e81612393565b91506124836020840161244b565b6000806040838503121561254f57600080fd5b823561255a81612393565b9150602083013561256a81612393565b809150509250929050565b60006020828403121561258757600080fd5b610a2a8261244b565b600181811c908216806125a457607f821691505b6020821081036125c457634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161262857612628612600565b5060010190565b818103818111156108ba576108ba612600565b634e487b7160e01b600052603160045260246000fd5b808201808211156108ba576108ba612600565b60006020828403121561267d57600080fd5b8151610a2a81612393565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156126d85784516001600160a01b0316835293830193918301916001016126b3565b50506001600160a01b03969096166060850152505050608001529392505050565b60008261271657634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176108ba576108ba61260056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200bd2a7a0752c7f42307cab986dce77789ae31f6e4257936828957162d860ea1564736f6c63430008110033000000000000000000000000d8dc7afa90e1287771d96703c81059e89c1c6158

Deployed Bytecode

0x60806040526004361061024a5760003560e01c80636ddd171311610139578063dd62ed3e116100b6578063f2fde38b1161007a578063f2fde38b14610761578063f429389014610781578063f7a9159114610796578063f815a842146107ab578063f84354f1146107be578063fe9fbb80146107de57600080fd5b8063dd62ed3e1461069b578063e01af92c146106e1578063eedeacbe14610701578063f0b37c0414610721578063f2cc0c181461074157600080fd5b8063a52fe9bb116100fd578063a52fe9bb146105e2578063a9059cbb14610602578063af9549e014610622578063b6a5d7de14610642578063cba0e9961461066257600080fd5b80636ddd17131461054c57806370a082311461056d578063946fbdb81461058d57806395d89b41146105ad578063a457c2d7146105c257600080fd5b80632f54bf6e116101c757806349bd5a5e1161018b57806349bd5a5e1461049457806351bc3c85146104c85780635342acb4146104dd5780635880b873146105165780636bc87c3a1461053657600080fd5b80632f54bf6e146103e3578063313ce5671461041257806339509351146104345780633bd5d173146104545780634549b0391461047457600080fd5b806318160ddd1161020e57806318160ddd1461034c5780631bbae6e0146103615780631ff53b601461038357806323b872dd146103a35780632d838119146103c357600080fd5b806306fdde0314610256578063095ea7b31461028157806313114a9d146102b157806316022cc4146102d05780631694505e1461030057600080fd5b3661025157005b600080fd5b34801561026257600080fd5b5061026b610817565b6040516102789190612345565b60405180910390f35b34801561028d57600080fd5b506102a161029c3660046123a8565b6108a9565b6040519015158152602001610278565b3480156102bd57600080fd5b50600b545b604051908152602001610278565b3480156102dc57600080fd5b506102a16102eb3660046123d4565b60056020526000908152604090205460ff1681565b34801561030c57600080fd5b506103347f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610278565b34801561035857600080fd5b506009546102c2565b34801561036d57600080fd5b5061038161037c3660046123f1565b6108c0565b005b34801561038f57600080fd5b5061038161039e3660046123d4565b6108f8565b3480156103af57600080fd5b506102a16103be36600461240a565b610944565b3480156103cf57600080fd5b506102c26103de3660046123f1565b6109ad565b3480156103ef57600080fd5b506102a16103fe3660046123d4565b6000546001600160a01b0391821691161490565b34801561041e57600080fd5b50600e5460405160ff9091168152602001610278565b34801561044057600080fd5b506102a161044f3660046123a8565b610a31565b34801561046057600080fd5b5061038161046f3660046123f1565b610a67565b34801561048057600080fd5b506102c261048f366004612460565b610b51565b3480156104a057600080fd5b506103347f000000000000000000000000a638ec7760ff8cdd6070844deafd562c4274191481565b3480156104d457600080fd5b50610381610bde565b3480156104e957600080fd5b506102a16104f83660046123d4565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561052257600080fd5b506103816105313660046123f1565b610c21565b34801561054257600080fd5b506102c2600f5481565b34801561055857600080fd5b506014546102a190600160a81b900460ff1681565b34801561057957600080fd5b506102c26105883660046123d4565b610ca1565b34801561059957600080fd5b506103816105a836600461248c565b610d00565b3480156105b957600080fd5b5061026b610d9f565b3480156105ce57600080fd5b506102a16105dd3660046123a8565b610dae565b3480156105ee57600080fd5b506103816105fd3660046123f1565b610dfd565b34801561060e57600080fd5b506102a161061d3660046123a8565b610e8a565b34801561062e57600080fd5b5061038161063d366004612510565b610e97565b34801561064e57600080fd5b5061038161065d3660046123d4565b610eec565b34801561066e57600080fd5b506102a161067d3660046123d4565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156106a757600080fd5b506102c26106b636600461253c565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156106ed57600080fd5b506103816106fc366004612575565b610f3d565b34801561070d57600080fd5b50601454610334906001600160a01b031681565b34801561072d57600080fd5b5061038161073c3660046123d4565b610f85565b34801561074d57600080fd5b5061038161075c3660046123d4565b610fd0565b34801561076d57600080fd5b5061038161077c3660046123d4565b611123565b34801561078d57600080fd5b506103816111b9565b3480156107a257600080fd5b506015546102c2565b3480156107b757600080fd5b50476102c2565b3480156107ca57600080fd5b506103816107d93660046123d4565b6111ed565b3480156107ea57600080fd5b506102a16107f93660046123d4565b6001600160a01b031660009081526001602052604090205460ff1690565b6060600c805461082690612590565b80601f016020809104026020016040519081016040528092919081815260200182805461085290612590565b801561089f5780601f106108745761010080835404028352916020019161089f565b820191906000526020600020905b81548152906001019060200180831161088257829003601f168201915b5050505050905090565b60006108b63384846113a3565b5060015b92915050565b6000546001600160a01b031633146108f35760405162461bcd60e51b81526004016108ea906125ca565b60405180910390fd5b601555565b6000546001600160a01b031633146109225760405162461bcd60e51b81526004016108ea906125ca565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b60006109518484846114c7565b6109a3843361099e85604051806060016040528060288152602001612733602891396001600160a01b038a16600090815260046020908152604080832033845290915290205491906117e7565b6113a3565b5060019392505050565b6000600a54821115610a145760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016108ea565b6000610a1e611821565b9050610a2a8382611844565b9392505050565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916108b691859061099e9086611886565b3360008181526007602052604090205460ff1615610adc5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016108ea565b6000610ae7836118e5565b505050506001600160a01b038416600090815260026020526040902054919250610b1391905082611941565b6001600160a01b038316600090815260026020526040902055600a54610b399082611941565b600a55600b54610b499084611886565b600b55505050565b6000600954831115610ba55760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016108ea565b81610bc4576000610bb5846118e5565b509395506108ba945050505050565b6000610bcf846118e5565b509295506108ba945050505050565b6000546001600160a01b03163314610c085760405162461bcd60e51b81526004016108ea906125ca565b6000610c1330610ca1565b9050610c1e81611983565b50565b6000546001600160a01b03163314610c4b5760405162461bcd60e51b81526004016108ea906125ca565b6063811115610c9c5760405162461bcd60e51b815260206004820152601a60248201527f7461784665652073686f756c6420626520696e2030202d20393900000000000060448201526064016108ea565b601055565b6001600160a01b03811660009081526007602052604081205460ff1615610cde57506001600160a01b031660009081526003602052604090205490565b6001600160a01b0382166000908152600260205260409020546108ba906109ad565b6000546001600160a01b03163314610d2a5760405162461bcd60e51b81526004016108ea906125ca565b60005b82811015610d99578160056000868685818110610d4c57610d4c6125ea565b9050602002016020810190610d6191906123d4565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055610d9281612616565b9050610d2d565b50505050565b6060600d805461082690612590565b60006108b6338461099e8560405180606001604052806025815260200161275b602591393360009081526004602090815260408083206001600160a01b038d16845290915290205491906117e7565b6000546001600160a01b03163314610e275760405162461bcd60e51b81526004016108ea906125ca565b60018110158015610e39575060328111155b610e855760405162461bcd60e51b815260206004820181905260248201527f4d61726b6574696e674665652073686f756c6420626520696e2031202d20353060448201526064016108ea565b601155565b60006108b63384846114c7565b6000546001600160a01b03163314610ec15760405162461bcd60e51b81526004016108ea906125ca565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610f165760405162461bcd60e51b81526004016108ea906125ca565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6000546001600160a01b03163314610f675760405162461bcd60e51b81526004016108ea906125ca565b60148054911515600160a81b0260ff60a81b19909216919091179055565b6000546001600160a01b03163314610faf5760405162461bcd60e51b81526004016108ea906125ca565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b03163314610ffa5760405162461bcd60e51b81526004016108ea906125ca565b6001600160a01b03811660009081526007602052604090205460ff16156110635760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016108ea565b6001600160a01b038116600090815260026020526040902054156110bd576001600160a01b0381166000908152600260205260409020546110a3906109ad565b6001600160a01b0382166000908152600360205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b0316331461114d5760405162461bcd60e51b81526004016108ea906125ca565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b6000546001600160a01b031633146111e35760405162461bcd60e51b81526004016108ea906125ca565b47610c1e81611b63565b6000546001600160a01b031633146112175760405162461bcd60e51b81526004016108ea906125ca565b6001600160a01b03811660009081526007602052604090205460ff1661127f5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016108ea565b60005b60085481101561139f57816001600160a01b0316600882815481106112a9576112a96125ea565b6000918252602090912001546001600160a01b03160361138d57600880546112d39060019061262f565b815481106112e3576112e36125ea565b600091825260209091200154600880546001600160a01b03909216918390811061130f5761130f6125ea565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600382526040808220829055600790925220805460ff19169055600880548061136757611367612642565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061139781612616565b915050611282565b5050565b6001600160a01b0383166114055760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108ea565b6001600160a01b0382166114665760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108ea565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661152b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108ea565b6001600160a01b03821661158d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108ea565b600081116115ef5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016108ea565b6001600160a01b03831660009081526005602052604090205460ff16156116325760405162461bcd60e51b815260206004820152600060248201526044016108ea565b6001600160a01b03831660009081526001602052604090205460ff1615801561167357506001600160a01b03821660009081526001602052604090205460ff165b156116db576015548111156116db5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016108ea565b60006116e630610ca1565b905060155481106116f657506015545b6016546014549082101590600160a01b900460ff161580156117215750601454600160a81b900460ff165b801561172a5750805b801561176857507f000000000000000000000000a638ec7760ff8cdd6070844deafd562c427419146001600160a01b0316856001600160a01b031614155b156117885761177682611983565b4780156117865761178647611b63565b505b6001600160a01b03851660009081526006602052604090205460019060ff16806117ca57506001600160a01b03851660009081526006602052604090205460ff165b156117d3575060005b6117df86868684611bb0565b505050505050565b6000818484111561180b5760405162461bcd60e51b81526004016108ea9190612345565b506000611818848661262f565b95945050505050565b600080600061182e611d27565b909250905061183d8282611844565b9250505090565b6000610a2a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611ea9565b6000806118938385612658565b905083811015610a2a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108ea565b60008060008060008060008060006119028a601054601154611ed7565b9250925092506000611912611821565b905060008060006119248e8786611f26565b919e509c509a509598509396509194505050505091939550919395565b6000610a2a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506117e7565b6014805460ff60a01b1916600160a01b17905560408051600280825260608201835260009260208301908036833701905050905030816000815181106119cb576119cb6125ea565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6d919061266b565b81600181518110611a8057611a806125ea565b60200260200101906001600160a01b031690816001600160a01b031681525050611acb307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846113a3565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790611b20908590600090869030904290600401612688565b600060405180830381600087803b158015611b3a57600080fd5b505af1158015611b4e573d6000803e3d6000fd5b50506014805460ff60a01b1916905550505050565b6014546001600160a01b03166108fc611b886008611b82856003611f62565b90611844565b6040518115909202916000818181858888f1935050505015801561139f573d6000803e3d6000fd5b80611bbd57611bbd611fe4565b6001600160a01b03841660009081526007602052604090205460ff168015611bfe57506001600160a01b03831660009081526007602052604090205460ff16155b15611c1357611c0e848484612012565b611d11565b6001600160a01b03841660009081526007602052604090205460ff16158015611c5457506001600160a01b03831660009081526007602052604090205460ff165b15611c6457611c0e848484612138565b6001600160a01b03841660009081526007602052604090205460ff16158015611ca657506001600160a01b03831660009081526007602052604090205460ff16155b15611cb657611c0e8484846121e1565b6001600160a01b03841660009081526007602052604090205460ff168015611cf657506001600160a01b03831660009081526007602052604090205460ff165b15611d0657611c0e848484612225565b611d118484846121e1565b80610d9957610d99601254601055601354601155565b600a546009546000918291825b600854811015611e7957826002600060088481548110611d5657611d566125ea565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611dc15750816003600060088481548110611d9a57611d9a6125ea565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611dd757600a54600954945094505050509091565b611e1d6002600060088481548110611df157611df16125ea565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611941565b9250611e656003600060088481548110611e3957611e396125ea565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611941565b915080611e7181612616565b915050611d34565b50600954600a54611e8991611844565b821015611ea057600a546009549350935050509091565b90939092509050565b60008183611eca5760405162461bcd60e51b81526004016108ea9190612345565b50600061181884866126f9565b6000808080611eeb6064611b828989611f62565b90506000611efe6064611b828a89611f62565b90506000611f1682611f108b86611941565b90611941565b9992985090965090945050505050565b6000808080611f358786611f62565b90506000611f438787611f62565b90506000611f518383611941565b929992985090965090945050505050565b600082600003611f74575060006108ba565b6000611f80838561271b565b905082611f8d85836126f9565b14610a2a5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108ea565b601054158015611ff45750601154155b15611ffb57565b601080546012556011805460135560009182905555565b600080600080600080612024876118e5565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506120569088611941565b6001600160a01b038a166000908152600360209081526040808320939093556002905220546120859087611941565b6001600160a01b03808b1660009081526002602052604080822093909355908a16815220546120b49086611886565b6001600160a01b0389166000908152600260205260409020556120d681612298565b6120e08483612321565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161212591815260200190565b60405180910390a3505050505050505050565b60008060008060008061214a876118e5565b6001600160a01b038f16600090815260026020526040902054959b5093995091975095509350915061217c9087611941565b6001600160a01b03808b16600090815260026020908152604080832094909455918b168152600390915220546121b29084611886565b6001600160a01b0389166000908152600360209081526040808320939093556002905220546120b49086611886565b6000806000806000806121f3876118e5565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506120859087611941565b600080600080600080612237876118e5565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506122699088611941565b6001600160a01b038a1660009081526003602090815260408083209390935560029052205461217c9087611941565b60006122a2611821565b905060006122b08383611f62565b306000908152600260205260409020549091506122cd9082611886565b3060009081526002602090815260408083209390935560079052205460ff161561231c573060009081526003602052604090205461230b9084611886565b306000908152600360205260409020555b505050565b600a5461232e9083611941565b600a55600b5461233e9082611886565b600b555050565b600060208083528351808285015260005b8181101561237257858101830151858201604001528201612356565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610c1e57600080fd5b600080604083850312156123bb57600080fd5b82356123c681612393565b946020939093013593505050565b6000602082840312156123e657600080fd5b8135610a2a81612393565b60006020828403121561240357600080fd5b5035919050565b60008060006060848603121561241f57600080fd5b833561242a81612393565b9250602084013561243a81612393565b929592945050506040919091013590565b8035801515811461245b57600080fd5b919050565b6000806040838503121561247357600080fd5b823591506124836020840161244b565b90509250929050565b6000806000604084860312156124a157600080fd5b833567ffffffffffffffff808211156124b957600080fd5b818601915086601f8301126124cd57600080fd5b8135818111156124dc57600080fd5b8760208260051b85010111156124f157600080fd5b602092830195509350612507918601905061244b565b90509250925092565b6000806040838503121561252357600080fd5b823561252e81612393565b91506124836020840161244b565b6000806040838503121561254f57600080fd5b823561255a81612393565b9150602083013561256a81612393565b809150509250929050565b60006020828403121561258757600080fd5b610a2a8261244b565b600181811c908216806125a457607f821691505b6020821081036125c457634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161262857612628612600565b5060010190565b818103818111156108ba576108ba612600565b634e487b7160e01b600052603160045260246000fd5b808201808211156108ba576108ba612600565b60006020828403121561267d57600080fd5b8151610a2a81612393565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156126d85784516001600160a01b0316835293830193918301916001016126b3565b50506001600160a01b03969096166060850152505050608001529392505050565b60008261271657634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176108ba576108ba61260056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200bd2a7a0752c7f42307cab986dce77789ae31f6e4257936828957162d860ea1564736f6c63430008110033

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

000000000000000000000000d8dc7afa90e1287771d96703c81059e89c1c6158

-----Decoded View---------------
Arg [0] : MarketingWalletAddress (address): 0xD8Dc7Afa90e1287771d96703C81059E89C1c6158

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


Deployed Bytecode Sourcemap

25087:19500:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27549:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28532:191;;;;;;;;;;-1:-1:-1;28532:191:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;28532:191:0;1023:187:1;30173:87:0;;;;;;;;;;-1:-1:-1;30242:10:0;;30173:87;;;1361:25:1;;;1349:2;1334:18;30173:87:0;1215:177:1;25364:48:0;;;;;;;;;;-1:-1:-1;25364:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26154:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1840:32:1;;;1822:51;;1810:2;1795:18;26154:51:0;1649:230:1;27826:95:0;;;;;;;;;;-1:-1:-1;27906:7:0;;27826:95;;44254:110;;;;;;;;;;-1:-1:-1;44254:110:0;;;;;:::i;:::-;;:::i;:::-;;44068:178;;;;;;;;;;-1:-1:-1;44068:178:0;;;;;:::i;:::-;;:::i;28731:442::-;;;;;;;;;;-1:-1:-1;28731:442:0;;;;;:::i;:::-;;:::i;31180:322::-;;;;;;;;;;-1:-1:-1;31180:322:0;;;;;:::i;:::-;;:::i;15114:103::-;;;;;;;;;;-1:-1:-1;15114:103:0;;;;;:::i;:::-;15169:4;15204:5;-1:-1:-1;;;;;15193:16:0;;;15204:5;;15193:16;;15114:103;27735:83;;;;;;;;;;-1:-1:-1;27801:9:0;;27735:83;;27801:9;;;;2932:36:1;;2920:2;2905:18;27735:83:0;2790:184:1;29181:296:0;;;;;;;;;;-1:-1:-1;29181:296:0;;;;;:::i;:::-;;:::i;30268:417::-;;;;;;;;;;-1:-1:-1;30268:417:0;;;;;:::i;:::-;;:::i;30693:479::-;;;;;;;;;;-1:-1:-1;30693:479:0;;;;;:::i;:::-;;:::i;26212:38::-;;;;;;;;;;;;;;;36098:154;;;;;;;;;;;;;:::i;32709:124::-;;;;;;;;;;-1:-1:-1;32709:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;32798:27:0;32774:4;32798:27;;;:18;:27;;;;;;;;;32709:124;43639:167;;;;;;;;;;-1:-1:-1;43639:167:0;;;;;:::i;:::-;;:::i;25875:32::-;;;;;;;;;;;;;;;;26285:30;;;;;;;;;;-1:-1:-1;26285:30:0;;;;-1:-1:-1;;;26285:30:0;;;;;;27929:198;;;;;;;;;;-1:-1:-1;27929:198:0;;;;;:::i;:::-;;:::i;44372:212::-;;;;;;;;;;-1:-1:-1;44372:212:0;;;;;:::i;:::-;;:::i;27640:87::-;;;;;;;;;;;;;:::i;29485:396::-;;;;;;;;;;-1:-1:-1;29485:396:0;;;;;:::i;:::-;;:::i;43814:246::-;;;;;;;;;;-1:-1:-1;43814:246:0;;;;;:::i;:::-;;:::i;28135:197::-;;;;;;;;;;-1:-1:-1;28135:197:0;;;;;:::i;:::-;;:::i;30007:158::-;;;;;;;;;;-1:-1:-1;30007:158:0;;;;;:::i;:::-;;:::i;14787:94::-;;;;;;;;;;-1:-1:-1;14787:94:0;;;;;:::i;:::-;;:::i;29889:110::-;;;;;;;;;;-1:-1:-1;29889:110:0;;;;;:::i;:::-;-1:-1:-1;;;;;29971:20:0;29947:4;29971:20;;;:11;:20;;;;;;;;;29889:110;28340:184;;;;;;;;;;-1:-1:-1;28340:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;28489:18:0;;;28457:7;28489:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;28340:184;36427:97;;;;;;;;;;-1:-1:-1;36427:97:0;;;;;:::i;:::-;;:::i;26099:46::-;;;;;;;;;;-1:-1:-1;26099:46:0;;;;-1:-1:-1;;;;;26099:46:0;;;14957:97;;;;;;;;;;-1:-1:-1;14957:97:0;;;;;:::i;:::-;;:::i;31510:331::-;;;;;;;;;;-1:-1:-1;31510:331:0;;;;;:::i;:::-;;:::i;15486:173::-;;;;;;;;;;-1:-1:-1;15486:173:0;;;;;:::i;:::-;;:::i;36260:159::-;;;;;;;;;;;;;:::i;43417:95::-;;;;;;;;;;-1:-1:-1;43492:12:0;;43417:95;;43520:111;;;;;;;;;;-1:-1:-1;43602:21:0;43520:111;;31849:476;;;;;;;;;;-1:-1:-1;31849:476:0;;;;;:::i;:::-;;:::i;15288:107::-;;;;;;;;;;-1:-1:-1;15288:107:0;;;;;:::i;:::-;-1:-1:-1;;;;;15368:19:0;15344:4;15368:19;;;:14;:19;;;;;;;;;15288:107;27549:83;27586:13;27619:5;27612:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27549:83;:::o;28532:191::-;28634:4;28656:37;28665:10;28677:7;28686:6;28656:8;:37::i;:::-;-1:-1:-1;28711:4:0;28532:191;;;;;:::o;44254:110::-;15169:4;15204:5;-1:-1:-1;;;;;15204:5:0;14511:10;15193:16;14495:38;;;;-1:-1:-1;;;14495:38:0;;;;;;;:::i;:::-;;;;;;;;;44330:12:::1;:26:::0;44254:110::o;44068:178::-;15169:4;15204:5;-1:-1:-1;;;;;15204:5:0;14511:10;15193:16;14495:38;;;;-1:-1:-1;;;14495:38:0;;;;;;;:::i;:::-;44190:23:::1;:48:::0;;-1:-1:-1;;;;;;44190:48:0::1;-1:-1:-1::0;;;;;44190:48:0;;;::::1;::::0;;;::::1;::::0;;44068:178::o;28731:442::-;28863:4;28880:36;28890:6;28898:9;28909:6;28880:9;:36::i;:::-;28927:216;28950:6;28971:10;28996:136;29050:6;28996:136;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28996:19:0;;;;;;:11;:19;;;;;;;;29016:10;28996:31;;;;;;;;;:136;:35;:136::i;:::-;28927:8;:216::i;:::-;-1:-1:-1;29161:4:0;28731:442;;;;;:::o;31180:322::-;31274:7;31332;;31321;:18;;31299:110;;;;-1:-1:-1;;;31299:110:0;;6342:2:1;31299:110:0;;;6324:21:1;6381:2;6361:18;;;6354:30;6420:34;6400:18;;;6393:62;-1:-1:-1;;;6471:18:1;;;6464:40;6521:19;;31299:110:0;6140:406:1;31299:110:0;31420:19;31442:10;:8;:10::i;:::-;31420:32;-1:-1:-1;31470:24:0;:7;31420:32;31470:11;:24::i;:::-;31463:31;31180:322;-1:-1:-1;;;31180:322:0:o;29181:296::-;29341:10;29296:4;29388:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;29388:32:0;;;;;;;;;;29296:4;;29318:129;;29366:7;;29388:48;;29425:10;29388:36;:48::i;30268:417::-;30337:10;30320:14;30381:19;;;:11;:19;;;;;;;;30380:20;30358:114;;;;-1:-1:-1;;;30358:114:0;;6753:2:1;30358:114:0;;;6735:21:1;6792:2;6772:18;;;6765:30;6831:34;6811:18;;;6804:62;-1:-1:-1;;;6882:18:1;;;6875:42;6934:19;;30358:114:0;6551:408:1;30358:114:0;30484:15;30513:19;30524:7;30513:10;:19::i;:::-;-1:-1:-1;;;;;;;;;30561:15:0;;;;;;:7;:15;;;;;;30483:49;;-1:-1:-1;30561:28:0;;:15;-1:-1:-1;30483:49:0;30561:19;:28::i;:::-;-1:-1:-1;;;;;30543:15:0;;;;;;:7;:15;;;;;:46;30610:7;;:20;;30622:7;30610:11;:20::i;:::-;30600:7;:30;30654:10;;:23;;30669:7;30654:14;:23::i;:::-;30641:10;:36;-1:-1:-1;;;30268:417:0:o;30693:479::-;30811:7;30855;;30844;:18;;30836:62;;;;-1:-1:-1;;;30836:62:0;;7166:2:1;30836:62:0;;;7148:21:1;7205:2;7185:18;;;7178:30;7244:33;7224:18;;;7217:61;7295:18;;30836:62:0;6964:355:1;30836:62:0;30914:17;30909:256;;30949:15;30978:19;30989:7;30978:10;:19::i;:::-;-1:-1:-1;30948:49:0;;-1:-1:-1;31012:14:0;;-1:-1:-1;;;;;31012:14:0;30909:256;31062:23;31097:19;31108:7;31097:10;:19::i;:::-;-1:-1:-1;31059:57:0;;-1:-1:-1;31131:22:0;;-1:-1:-1;;;;;31131:22:0;36098:154;15169:4;15204:5;-1:-1:-1;;;;;15204:5:0;14511:10;15193:16;14495:38;;;;-1:-1:-1;;;14495:38:0;;;;;;;:::i;:::-;36150:23:::1;36176:24;36194:4;36176:9;:24::i;:::-;36150:50;;36211:33;36228:15;36211:16;:33::i;:::-;36139:113;36098:154::o:0;43639:167::-;15169:4;15204:5;-1:-1:-1;;;;;15204:5:0;14511:10;15193:16;14495:38;;;;-1:-1:-1;;;14495:38:0;;;;;;;:::i;:::-;43738:2:::1;43728:6;:12;;43705:66;;;::::0;-1:-1:-1;;;43705:66:0;;7526:2:1;43705:66:0::1;::::0;::::1;7508:21:1::0;7565:2;7545:18;;;7538:30;7604:28;7584:18;;;7577:56;7650:18;;43705:66:0::1;7324:350:1::0;43705:66:0::1;43782:7;:16:::0;43639:167::o;27929:198::-;-1:-1:-1;;;;;28019:20:0;;27995:7;28019:20;;;:11;:20;;;;;;;;28015:49;;;-1:-1:-1;;;;;;28048:16:0;;;;;:7;:16;;;;;;;27929:198::o;28015:49::-;-1:-1:-1;;;;;28102:16:0;;;;;;:7;:16;;;;;;28082:37;;:19;:37::i;44372:212::-;15169:4;15204:5;-1:-1:-1;;;;;15204:5:0;14511:10;15193:16;14495:38;;;;-1:-1:-1;;;14495:38:0;;;;;;;:::i;:::-;44473:9:::1;44468:109;44484:20:::0;;::::1;44468:109;;;44559:6;44526:16;:30;44543:9;;44553:1;44543:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;44526:30:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;44526:30:0;:39;;-1:-1:-1;;44526:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;44506:3:::1;::::0;::::1;:::i;:::-;;;44468:109;;;;44372:212:::0;;;:::o;27640:87::-;27679:13;27712:7;27705:14;;;;;:::i;29485:396::-;29605:4;29627:224;29650:10;29675:7;29697:143;29752:15;29697:143;;;;;;;;;;;;;;;;;29709:10;29697:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;29697:32:0;;;;;;;;;;;:143;:36;:143::i;43814:246::-;15169:4;15204:5;-1:-1:-1;;;;;15204:5:0;14511:10;15193:16;14495:38;;;;-1:-1:-1;;;14495:38:0;;;;;;;:::i;:::-;43930:1:::1;43914:12;:17;;:39;;;;;43951:2;43935:12;:18;;43914:39;43892:121;;;::::0;-1:-1:-1;;;43892:121:0;;8285:2:1;43892:121:0::1;::::0;::::1;8267:21:1::0;;;8304:18;;;8297:30;8363:34;8343:18;;;8336:62;8415:18;;43892:121:0::1;8083:356:1::0;43892:121:0::1;44024:13;:28:::0;43814:246::o;28135:197::-;28240:4;28262:40;28272:10;28284:9;28295:6;28262:9;:40::i;30007:158::-;15169:4;15204:5;-1:-1:-1;;;;;15204:5:0;14511:10;15193:16;14495:38;;;;-1:-1:-1;;;14495:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30119:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:38;;-1:-1:-1;;30119:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30007:158::o;14787:94::-;15169:4;15204:5;-1:-1:-1;;;;;15204:5:0;14511:10;15193:16;14495:38;;;;-1:-1:-1;;;14495:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14847:19:0::1;;::::0;;;14869:4:::1;14847:19;::::0;;;;;;;:26;;-1:-1:-1;;14847:26:0::1;::::0;;::::1;::::0;;14787:94::o;36427:97::-;15169:4;15204:5;-1:-1:-1;;;;;15204:5:0;14511:10;15193:16;14495:38;;;;-1:-1:-1;;;14495:38:0;;;;;;;:::i;:::-;36495:11:::1;:21:::0;;;::::1;;-1:-1:-1::0;;;36495:21:0::1;-1:-1:-1::0;;;;36495:21:0;;::::1;::::0;;;::::1;::::0;;36427:97::o;14957:::-;15169:4;15204:5;-1:-1:-1;;;;;15204:5:0;14511:10;15193:16;14495:38;;;;-1:-1:-1;;;14495:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15019:19:0::1;15041:5;15019:19:::0;;;:14:::1;:19;::::0;;;;:27;;-1:-1:-1;;15019:27:0::1;::::0;;14957:97::o;31510:331::-;15169:4;15204:5;-1:-1:-1;;;;;15204:5:0;14511:10;15193:16;14495:38;;;;-1:-1:-1;;;14495:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31590:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;31589:21;31581:61;;;::::0;-1:-1:-1;;;31581:61:0;;8646:2:1;31581:61:0::1;::::0;::::1;8628:21:1::0;8685:2;8665:18;;;8658:30;8724:29;8704:18;;;8697:57;8771:18;;31581:61:0::1;8444:351:1::0;31581:61:0::1;-1:-1:-1::0;;;;;31657:16:0;::::1;31676:1;31657:16:::0;;;:7:::1;:16;::::0;;;;;:20;31653:109:::1;;-1:-1:-1::0;;;;;31733:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;31713:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;31694:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;31653:109:::1;-1:-1:-1::0;;;;;31772:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;31772:27:0::1;31795:4;31772:27:::0;;::::1;::::0;;;31810:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;31810:23:0::1;::::0;;::::1;::::0;;31510:331::o;15486:173::-;15169:4;15204:5;-1:-1:-1;;;;;15204:5:0;14511:10;15193:16;14495:38;;;;-1:-1:-1;;;14495:38:0;;;;;;;:::i;:::-;15562:5:::1;:11:::0;;-1:-1:-1;;;;;;15562:11:0::1;-1:-1:-1::0;;;;;15562:11:0;::::1;::::0;;::::1;::::0;;15584:19;;;-1:-1:-1;15584:19:0::1;::::0;;;;;;;;:26;;-1:-1:-1;;15584:26:0::1;::::0;;::::1;::::0;;;15626:25;;1822:51:1;;;15626:25:0::1;::::0;1795:18:1;15626:25:0::1;;;;;;;15486:173:::0;:::o;36260:159::-;15169:4;15204:5;-1:-1:-1;;;;;15204:5:0;14511:10;15193:16;14495:38;;;;-1:-1:-1;;;14495:38:0;;;;;;;:::i;:::-;36341:21:::1;36373:38;36341:21:::0;36373:18:::1;:38::i;31849:476::-:0;15169:4;15204:5;-1:-1:-1;;;;;15204:5:0;14511:10;15193:16;14495:38;;;;-1:-1:-1;;;14495:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31928:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;31920:60;;;::::0;-1:-1:-1;;;31920:60:0;;8646:2:1;31920:60:0::1;::::0;::::1;8628:21:1::0;8685:2;8665:18;;;8658:30;8724:29;8704:18;;;8697:57;8771:18;;31920:60:0::1;8444:351:1::0;31920:60:0::1;31996:9;31991:327;32015:9;:16:::0;32011:20;::::1;31991:327;;;32073:7;-1:-1:-1::0;;;;;32057:23:0::1;:9;32067:1;32057:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;32057:12:0::1;:23:::0;32053:254:::1;;32116:9;32126:16:::0;;:20:::1;::::0;32145:1:::1;::::0;32126:20:::1;:::i;:::-;32116:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;32101:9:::1;:12:::0;;-1:-1:-1;;;;;32116:31:0;;::::1;::::0;32111:1;;32101:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;32101:46:0::1;-1:-1:-1::0;;;;;32101:46:0;;::::1;;::::0;;32166:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;32205:11:::1;:20:::0;;;;:28;;-1:-1:-1;;32205:28:0::1;::::0;;32252:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;32252:15:0;;;;;-1:-1:-1;;;;;;32252:15:0::1;::::0;;;;;31991:327:::1;31849:476:::0;:::o;32053:254::-:1;32033:3:::0;::::1;::::0;::::1;:::i;:::-;;;;31991:327;;;;31849:476:::0;:::o;32841:371::-;-1:-1:-1;;;;;32968:19:0;;32960:68;;;;-1:-1:-1;;;32960:68:0;;9483:2:1;32960:68:0;;;9465:21:1;9522:2;9502:18;;;9495:30;9561:34;9541:18;;;9534:62;-1:-1:-1;;;9612:18:1;;;9605:34;9656:19;;32960:68:0;9281:400:1;32960:68:0;-1:-1:-1;;;;;33047:21:0;;33039:68;;;;-1:-1:-1;;;33039:68:0;;9888:2:1;33039:68:0;;;9870:21:1;9927:2;9907:18;;;9900:30;9966:34;9946:18;;;9939:62;-1:-1:-1;;;10017:18:1;;;10010:32;10059:19;;33039:68:0;9686:398:1;33039:68:0;-1:-1:-1;;;;;33120:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;33172:32;;1361:25:1;;;33172:32:0;;1334:18:1;33172:32:0;;;;;;;32841:371;;;:::o;33220:1986::-;-1:-1:-1;;;;;33353:20:0;;33345:70;;;;-1:-1:-1;;;33345:70:0;;10291:2:1;33345:70:0;;;10273:21:1;10330:2;10310:18;;;10303:30;10369:34;10349:18;;;10342:62;-1:-1:-1;;;10420:18:1;;;10413:35;10465:19;;33345:70:0;10089:401:1;33345:70:0;-1:-1:-1;;;;;33434:23:0;;33426:71;;;;-1:-1:-1;;;33426:71:0;;10697:2:1;33426:71:0;;;10679:21:1;10736:2;10716:18;;;10709:30;10775:34;10755:18;;;10748:62;-1:-1:-1;;;10826:18:1;;;10819:33;10869:19;;33426:71:0;10495:399:1;33426:71:0;33525:1;33516:6;:10;33508:64;;;;-1:-1:-1;;;33508:64:0;;11101:2:1;33508:64:0;;;11083:21:1;11140:2;11120:18;;;11113:30;11179:34;11159:18;;;11152:62;-1:-1:-1;;;11230:18:1;;;11223:39;11279:19;;33508:64:0;10899:405:1;33508:64:0;-1:-1:-1;;;;;33592:24:0;;;;;;:16;:24;;;;;;;;33591:25;33583:38;;;;-1:-1:-1;;;33583:38:0;;11511:2:1;33583:38:0;;;11493:21:1;-1:-1:-1;11530:18:1;;;11523:29;11569:18;;33583:38:0;11309:284:1;33583:38:0;-1:-1:-1;;;;;15368:19:0;;15344:4;15368:19;;;:14;:19;;;;;;;;33636:21;:48;;;;-1:-1:-1;;;;;;15368:19:0;;15344:4;15368:19;;;:14;:19;;;;;;;;33661:23;33632:191;;;33735:12;;33725:6;:22;;33699:124;;;;-1:-1:-1;;;33699:124:0;;11800:2:1;33699:124:0;;;11782:21:1;11839:2;11819:18;;;11812:30;11878:34;11858:18;;;11851:62;-1:-1:-1;;;11929:18:1;;;11922:38;11977:19;;33699:124:0;11598:404:1;33699:124:0;34025:28;34056:24;34074:4;34056:9;:24::i;:::-;34025:55;;34121:12;;34097:20;:36;34093:104;;-1:-1:-1;34173:12:0;;34093:104;34273:11;;34314:6;;34236:48;;;;;-1:-1:-1;;;34314:6:0;;;;34313:7;:35;;;;-1:-1:-1;34337:11:0;;-1:-1:-1;;;34337:11:0;;;;34313:35;:71;;;;;34365:19;34313:71;:111;;;;;34411:13;-1:-1:-1;;;;;34401:23:0;:6;-1:-1:-1;;;;;34401:23:0;;;34313:111;34295:482;;;34542:38;34559:20;34542:16;:38::i;:::-;34626:21;34666:22;;34662:104;;34709:41;34728:21;34709:18;:41::i;:::-;34436:341;34295:482;-1:-1:-1;;;;;34970:26:0;;34850:12;34970:26;;;:18;:26;;;;;;34865:4;;34970:26;;;:59;;-1:-1:-1;;;;;;35000:29:0;;;;;;:18;:29;;;;;;;;34970:59;34966:107;;;-1:-1:-1;35056:5:0;34966:107;35148:50;35163:6;35171:9;35182:6;35190:7;35148:14;:50::i;:::-;33332:1874;;;33220:1986;;;:::o;3979:226::-;4099:7;4135:12;4127:6;;;;4119:29;;;;-1:-1:-1;;;4119:29:0;;;;;;;;:::i;:::-;-1:-1:-1;4159:9:0;4171:5;4175:1;4171;:5;:::i;:::-;4159:17;3979:226;-1:-1:-1;;;;;3979:226:0:o;42538:164::-;42580:7;42601:15;42618;42637:19;:17;:19::i;:::-;42600:56;;-1:-1:-1;42600:56:0;-1:-1:-1;42674:20:0;42600:56;;42674:11;:20::i;:::-;42667:27;;;;42538:164;:::o;5411:132::-;5469:7;5496:39;5500:1;5503;5496:39;;;;;;;;;;;;;;;;;:3;:39::i;3076:181::-;3134:7;;3166:5;3170:1;3166;:5;:::i;:::-;3154:17;;3195:1;3190;:6;;3182:46;;;;-1:-1:-1;;;3182:46:0;;12339:2:1;3182:46:0;;;12321:21:1;12378:2;12358:18;;;12351:30;12417:29;12397:18;;;12390:57;12464:18;;3182:46:0;12137:351:1;40787:785:0;40887:7;40909;40931;40953;40975;40997;41047:23;41085:12;41112:18;41144:44;41156:7;41165;;41174:13;;41144:11;:44::i;:::-;41032:156;;;;;;41199:19;41221:10;:8;:10::i;:::-;41199:32;;41243:15;41260:23;41285:12;41301:89;41327:7;41349:4;41368:11;41301;:89::i;:::-;41242:148;;-1:-1:-1;41242:148:0;-1:-1:-1;41242:148:0;-1:-1:-1;41494:15:0;;-1:-1:-1;41524:4:0;;-1:-1:-1;41543:10:0;;-1:-1:-1;;;;;40787:785:0;;;;;;;:::o;3540:136::-;3598:7;3625:43;3629:1;3632;3625:43;;;;;;;;;;;;;;;;;:3;:43::i;35214:601::-;26653:6;:13;;-1:-1:-1;;;;26653:13:0;-1:-1:-1;;;26653:13:0;;;35376:16:::1;::::0;;35390:1:::1;35376:16:::0;;;;;::::1;::::0;;-1:-1:-1;;35376:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;35376:16:0::1;35352:40;;35421:4;35403;35408:1;35403:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;35403:23:0::1;;;-1:-1:-1::0;;;;;35403:23:0::1;;;::::0;::::1;35447:15;-1:-1:-1::0;;;;;35447:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35437:4;35442:1;35437:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1::0;;;;;35437:32:0::1;;;-1:-1:-1::0;;;;;35437:32:0::1;;;::::0;::::1;35482:62;35499:4;35514:15;35532:11;35482:8;:62::i;:::-;35583:224;::::0;-1:-1:-1;;;35583:224:0;;-1:-1:-1;;;;;35583:15:0::1;:66;::::0;::::1;::::0;:224:::1;::::0;35664:11;;35690:1:::1;::::0;35734:4;;35761::::1;::::0;35781:15:::1;::::0;35583:224:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;26689:6:0;:14;;-1:-1:-1;;;;26689:14:0;;;-1:-1:-1;;;;35214:601:0:o;35823:125::-;35886:23;;-1:-1:-1;;;;;35886:23:0;:54;35919:20;35937:1;35919:13;:6;35930:1;35919:10;:13::i;:::-;:17;;:20::i;:::-;35886:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36532:838;36688:7;36683:28;;36697:14;:12;:14::i;:::-;-1:-1:-1;;;;;36728:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;36752:22:0;;;;;;:11;:22;;;;;;;;36751:23;36728:46;36724:597;;;36791:48;36813:6;36821:9;36832:6;36791:21;:48::i;:::-;36724:597;;;-1:-1:-1;;;;;36862:19:0;;;;;;:11;:19;;;;;;;;36861:20;:46;;;;-1:-1:-1;;;;;;36885:22:0;;;;;;:11;:22;;;;;;;;36861:46;36857:464;;;36924:46;36944:6;36952:9;36963:6;36924:19;:46::i;36857:464::-;-1:-1:-1;;;;;36993:19:0;;;;;;:11;:19;;;;;;;;36992:20;:47;;;;-1:-1:-1;;;;;;37017:22:0;;;;;;:11;:22;;;;;;;;37016:23;36992:47;36988:333;;;37056:44;37074:6;37082:9;37093:6;37056:17;:44::i;36988:333::-;-1:-1:-1;;;;;37122:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;37145:22:0;;;;;;:11;:22;;;;;;;;37122:45;37118:203;;;37184:48;37206:6;37214:9;37225:6;37184:21;:48::i;37118:203::-;37265:44;37283:6;37291:9;37302:6;37265:17;:44::i;:::-;37338:7;37333:29;;37347:15;32630;;32620:7;:25;32672:21;;32656:13;:37;32576:125;42710:605;42808:7;;42844;;42761;;;;;42862:338;42886:9;:16;42882:20;;42862:338;;;42970:7;42946;:21;42954:9;42964:1;42954:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;42954:12:0;42946:21;;;;;;;;;;;;;:31;;:83;;;43022:7;42998;:21;43006:9;43016:1;43006:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43006:12:0;42998:21;;;;;;;;;;;;;:31;42946:83;42924:146;;;43053:7;;43062;;43045:25;;;;;;;42710:605;;:::o;42924:146::-;43095:34;43107:7;:21;43115:9;43125:1;43115:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43115:12:0;43107:21;;;;;;;;;;;;;43095:7;;:11;:34::i;:::-;43085:44;;43154:34;43166:7;:21;43174:9;43184:1;43174:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43174:12:0;43166:21;;;;;;;;;;;;;43154:7;;:11;:34::i;:::-;43144:44;-1:-1:-1;42904:3:0;;;;:::i;:::-;;;;42862:338;;;-1:-1:-1;43236:7:0;;43224;;:20;;:11;:20::i;:::-;43214:7;:30;43210:61;;;43254:7;;43263;;43246:25;;;;;;42710:605;;:::o;43210:61::-;43290:7;;43299;;-1:-1:-1;42710:605:0;-1:-1:-1;42710:605:0:o;6039:312::-;6159:7;6194:12;6187:5;6179:28;;;;-1:-1:-1;;;6179:28:0;;;;;;;;:::i;:::-;-1:-1:-1;6218:9:0;6230:5;6234:1;6230;:5;:::i;41580:492::-;41753:7;;;;41847:28;41871:3;41847:19;:7;41859:6;41847:11;:19::i;:28::-;41832:43;-1:-1:-1;41886:18:0;41907:34;41937:3;41907:25;:7;41919:12;41907:11;:25::i;:34::-;41886:55;-1:-1:-1;41952:23:0;41978:33;41886:55;41978:17;:7;41990:4;41978:11;:17::i;:::-;:21;;:33::i;:::-;41952:59;42047:4;;-1:-1:-1;42053:10:0;;-1:-1:-1;41580:492:0;;-1:-1:-1;;;;;41580:492:0:o;42080:450::-;42250:7;;;;42347:24;:7;42359:11;42347;:24::i;:::-;42329:42;-1:-1:-1;42382:12:0;42397:21;:4;42406:11;42397:8;:21::i;:::-;42382:36;-1:-1:-1;42429:23:0;42455:17;:7;42382:36;42455:11;:17::i;:::-;42491:7;;;;-1:-1:-1;42517:4:0;;-1:-1:-1;42080:450:0;;-1:-1:-1;;;;;42080:450:0:o;4464:471::-;4522:7;4767:1;4772;4767:6;4763:47;;-1:-1:-1;4797:1:0;4790:8;;4763:47;4822:9;4834:5;4838:1;4834;:5;:::i;:::-;4822:17;-1:-1:-1;4867:1:0;4858:5;4862:1;4822:17;4858:5;:::i;:::-;:10;4850:56;;;;-1:-1:-1;;;4850:56:0;;14463:2:1;4850:56:0;;;14445:21:1;14502:2;14482:18;;;14475:30;14541:34;14521:18;;;14514:62;-1:-1:-1;;;14592:18:1;;;14585:31;14633:19;;4850:56:0;14261:397:1;32333:235:0;32380:7;;:12;:34;;;;-1:-1:-1;32396:13:0;;:18;32380:34;32376:47;;;32333:235::o;32376:47::-;32453:7;;;32435:15;:25;32495:13;;;32471:21;:37;-1:-1:-1;32521:11:0;;;;32543:17;32333:235::o;38717:686::-;38868:15;38898:23;38936:12;38963:23;39001:12;39028:18;39060:19;39071:7;39060:10;:19::i;:::-;-1:-1:-1;;;;;39108:15:0;;;;;;:7;:15;;;;;;38853:226;;-1:-1:-1;38853:226:0;;-1:-1:-1;38853:226:0;;-1:-1:-1;38853:226:0;-1:-1:-1;38853:226:0;-1:-1:-1;38853:226:0;-1:-1:-1;39108:28:0;;39128:7;39108:19;:28::i;:::-;-1:-1:-1;;;;;39090:15:0;;;;;;:7;:15;;;;;;;;:46;;;;39165:7;:15;;;;:28;;39185:7;39165:19;:28::i;:::-;-1:-1:-1;;;;;39147:15:0;;;;;;;:7;:15;;;;;;:46;;;;39225:18;;;;;;;:39;;39248:15;39225:22;:39::i;:::-;-1:-1:-1;;;;;39204:18:0;;;;;;:7;:18;;;;;:60;39275:26;39290:10;39275:14;:26::i;:::-;39312:23;39324:4;39330;39312:11;:23::i;:::-;39368:9;-1:-1:-1;;;;;39351:44:0;39360:6;-1:-1:-1;;;;;39351:44:0;;39379:15;39351:44;;;;1361:25:1;;1349:2;1334:18;;1215:177;39351:44:0;;;;;;;;38842:561;;;;;;38717:686;;;:::o;38011:698::-;38160:15;38190:23;38228:12;38255:23;38293:12;38320:18;38352:19;38363:7;38352:10;:19::i;:::-;-1:-1:-1;;;;;38400:15:0;;;;;;:7;:15;;;;;;38145:226;;-1:-1:-1;38145:226:0;;-1:-1:-1;38145:226:0;;-1:-1:-1;38145:226:0;-1:-1:-1;38145:226:0;-1:-1:-1;38145:226:0;-1:-1:-1;38400:28:0;;38145:226;38400:19;:28::i;:::-;-1:-1:-1;;;;;38382:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;38460:18;;;;;:7;:18;;;;;:39;;38483:15;38460:22;:39::i;:::-;-1:-1:-1;;;;;38439:18:0;;;;;;:7;:18;;;;;;;;:60;;;;38531:7;:18;;;;:39;;38554:15;38531:22;:39::i;37378:625::-;37525:15;37555:23;37593:12;37620:23;37658:12;37685:18;37717:19;37728:7;37717:10;:19::i;:::-;-1:-1:-1;;;;;37765:15:0;;;;;;:7;:15;;;;;;37510:226;;-1:-1:-1;37510:226:0;;-1:-1:-1;37510:226:0;;-1:-1:-1;37510:226:0;-1:-1:-1;37510:226:0;-1:-1:-1;37510:226:0;-1:-1:-1;37765:28:0;;37510:226;37765:19;:28::i;39411:757::-;39562:15;39592:23;39630:12;39657:23;39695:12;39722:18;39754:19;39765:7;39754:10;:19::i;:::-;-1:-1:-1;;;;;39802:15:0;;;;;;:7;:15;;;;;;39547:226;;-1:-1:-1;39547:226:0;;-1:-1:-1;39547:226:0;;-1:-1:-1;39547:226:0;-1:-1:-1;39547:226:0;-1:-1:-1;39547:226:0;-1:-1:-1;39802:28:0;;39822:7;39802:19;:28::i;:::-;-1:-1:-1;;;;;39784:15:0;;;;;;:7;:15;;;;;;;;:46;;;;39859:7;:15;;;;:28;;39879:7;39859:19;:28::i;40176:355::-;40239:19;40261:10;:8;:10::i;:::-;40239:32;-1:-1:-1;40282:18:0;40303:27;:10;40239:32;40303:14;:27::i;:::-;40382:4;40366:22;;;;:7;:22;;;;;;40282:48;;-1:-1:-1;40366:38:0;;40282:48;40366:26;:38::i;:::-;40357:4;40341:22;;;;:7;:22;;;;;;;;:63;;;;40419:11;:26;;;;;;40415:108;;;40501:4;40485:22;;;;:7;:22;;;;;;:38;;40512:10;40485:26;:38::i;:::-;40476:4;40460:22;;;;:7;:22;;;;;:63;40415:108;40228:303;;40176:355;:::o;40539:147::-;40617:7;;:17;;40629:4;40617:11;:17::i;:::-;40607:7;:27;40658:10;;:20;;40673:4;40658:14;:20::i;:::-;40645:10;:33;-1:-1:-1;;40539:147:0:o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1397:247::-;1456:6;1509:2;1497:9;1488:7;1484:23;1480:32;1477:52;;;1525:1;1522;1515:12;1477:52;1564:9;1551:23;1583:31;1608:5;1583:31;:::i;1884:180::-;1943:6;1996:2;1984:9;1975:7;1971:23;1967:32;1964:52;;;2012:1;2009;2002:12;1964:52;-1:-1:-1;2035:23:1;;1884:180;-1:-1:-1;1884:180:1:o;2329:456::-;2406:6;2414;2422;2475:2;2463:9;2454:7;2450:23;2446:32;2443:52;;;2491:1;2488;2481:12;2443:52;2530:9;2517:23;2549:31;2574:5;2549:31;:::i;:::-;2599:5;-1:-1:-1;2656:2:1;2641:18;;2628:32;2669:33;2628:32;2669:33;:::i;:::-;2329:456;;2721:7;;-1:-1:-1;;;2775:2:1;2760:18;;;;2747:32;;2329:456::o;2979:160::-;3044:20;;3100:13;;3093:21;3083:32;;3073:60;;3129:1;3126;3119:12;3073:60;2979:160;;;:::o;3144:248::-;3209:6;3217;3270:2;3258:9;3249:7;3245:23;3241:32;3238:52;;;3286:1;3283;3276:12;3238:52;3322:9;3309:23;3299:33;;3351:35;3382:2;3371:9;3367:18;3351:35;:::i;:::-;3341:45;;3144:248;;;;;:::o;3605:689::-;3697:6;3705;3713;3766:2;3754:9;3745:7;3741:23;3737:32;3734:52;;;3782:1;3779;3772:12;3734:52;3822:9;3809:23;3851:18;3892:2;3884:6;3881:14;3878:34;;;3908:1;3905;3898:12;3878:34;3946:6;3935:9;3931:22;3921:32;;3991:7;3984:4;3980:2;3976:13;3972:27;3962:55;;4013:1;4010;4003:12;3962:55;4053:2;4040:16;4079:2;4071:6;4068:14;4065:34;;;4095:1;4092;4085:12;4065:34;4150:7;4143:4;4133:6;4130:1;4126:14;4122:2;4118:23;4114:34;4111:47;4108:67;;;4171:1;4168;4161:12;4108:67;4202:4;4194:13;;;;-1:-1:-1;4226:6:1;-1:-1:-1;4251:37:1;;4267:20;;;-1:-1:-1;4251:37:1;:::i;:::-;4241:47;;3605:689;;;;;:::o;4299:315::-;4364:6;4372;4425:2;4413:9;4404:7;4400:23;4396:32;4393:52;;;4441:1;4438;4431:12;4393:52;4480:9;4467:23;4499:31;4524:5;4499:31;:::i;:::-;4549:5;-1:-1:-1;4573:35:1;4604:2;4589:18;;4573:35;:::i;4619:388::-;4687:6;4695;4748:2;4736:9;4727:7;4723:23;4719:32;4716:52;;;4764:1;4761;4754:12;4716:52;4803:9;4790:23;4822:31;4847:5;4822:31;:::i;:::-;4872:5;-1:-1:-1;4929:2:1;4914:18;;4901:32;4942:33;4901:32;4942:33;:::i;:::-;4994:7;4984:17;;;4619:388;;;;;:::o;5012:180::-;5068:6;5121:2;5109:9;5100:7;5096:23;5092:32;5089:52;;;5137:1;5134;5127:12;5089:52;5160:26;5176:9;5160:26;:::i;5421:380::-;5500:1;5496:12;;;;5543;;;5564:61;;5618:4;5610:6;5606:17;5596:27;;5564:61;5671:2;5663:6;5660:14;5640:18;5637:38;5634:161;;5717:10;5712:3;5708:20;5705:1;5698:31;5752:4;5749:1;5742:15;5780:4;5777:1;5770:15;5634:161;;5421:380;;;:::o;5806:329::-;6008:2;5990:21;;;6047:1;6027:18;;;6020:29;-1:-1:-1;;;6080:2:1;6065:18;;6058:36;6126:2;6111:18;;5806:329::o;7679:127::-;7740:10;7735:3;7731:20;7728:1;7721:31;7771:4;7768:1;7761:15;7795:4;7792:1;7785:15;7811:127;7872:10;7867:3;7863:20;7860:1;7853:31;7903:4;7900:1;7893:15;7927:4;7924:1;7917:15;7943:135;7982:3;8003:17;;;8000:43;;8023:18;;:::i;:::-;-1:-1:-1;8070:1:1;8059:13;;7943:135::o;9016:128::-;9083:9;;;9104:11;;;9101:37;;;9118:18;;:::i;9149:127::-;9210:10;9205:3;9201:20;9198:1;9191:31;9241:4;9238:1;9231:15;9265:4;9262:1;9255:15;12007:125;12072:9;;;12093:10;;;12090:36;;;12106:18;;:::i;12625:251::-;12695:6;12748:2;12736:9;12727:7;12723:23;12719:32;12716:52;;;12764:1;12761;12754:12;12716:52;12796:9;12790:16;12815:31;12840:5;12815:31;:::i;12881:980::-;13143:4;13191:3;13180:9;13176:19;13222:6;13211:9;13204:25;13248:2;13286:6;13281:2;13270:9;13266:18;13259:34;13329:3;13324:2;13313:9;13309:18;13302:31;13353:6;13388;13382:13;13419:6;13411;13404:22;13457:3;13446:9;13442:19;13435:26;;13496:2;13488:6;13484:15;13470:29;;13517:1;13527:195;13541:6;13538:1;13535:13;13527:195;;;13606:13;;-1:-1:-1;;;;;13602:39:1;13590:52;;13697:15;;;;13662:12;;;;13638:1;13556:9;13527:195;;;-1:-1:-1;;;;;;;13778:32:1;;;;13773:2;13758:18;;13751:60;-1:-1:-1;;;13842:3:1;13827:19;13820:35;13739:3;12881:980;-1:-1:-1;;;12881:980:1:o;13866:217::-;13906:1;13932;13922:132;;13976:10;13971:3;13967:20;13964:1;13957:31;14011:4;14008:1;14001:15;14039:4;14036:1;14029:15;13922:132;-1:-1:-1;14068:9:1;;13866:217::o;14088:168::-;14161:9;;;14192;;14209:15;;;14203:22;;14189:37;14179:71;;14230:18;;:::i

Swarm Source

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