ETH Price: $2,305.11 (+1.00%)

Token

BLOOD FACE TRUMP (BLOOD)
 

Overview

Max Total Supply

100,000,000 BLOOD

Holders

60

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,011,466.999291244139527763 BLOOD

Value
$0.00
0xcbe65d40b46311efd16fb67733e114c490bf973b
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:
BLOOD

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-07-14
*/

pragma solidity 0.8.19;

// SPDX-License-Identifier: MIT

/*
    website  : https://bloodfacetrump.xyz    
    twitter  : https://x.com/FaceTrumpBlood
    telegram : https://t.me/blood_face_trump
*/

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

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

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

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the default value returned by this function, unless
     * it's overridden.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(
        address account
    ) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(
        address owner,
        address spender
    ) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(
        address spender,
        uint256 amount
    ) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

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

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];

        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }
    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        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);
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

contract Ownable is Context {
    address private _owner;

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

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    function functionCall(
        address target,
        bytes memory data
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                0,
                "Address: low-level call failed"
            );
    }

    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"
        );
        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data
    ) internal view returns (bytes memory) {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data
    ) internal returns (bytes memory) {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(
        bytes memory returndata,
        string memory errorMessage
    ) private pure {
        // 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
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

library SafeERC20 {
    using Address for address;

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

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

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(
            data,
            "SafeERC20: low-level call failed"
        );
        if (returndata.length > 0) {
            require(
                abi.decode(returndata, (bool)),
                "SafeERC20: ERC20 operation did not succeed"
            );
        }
    }

    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.approve.selector, spender, value)
        );
    }
}

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapETHForExactTokens(
        uint amountOut,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function getAmountsOut(
        uint amountIn,
        address[] calldata path
    ) external view returns (uint[] memory amounts);
}

interface IDexFactory {
    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);
}

contract BLOOD is ERC20, Ownable {
    mapping(address => bool) public exemptFromFees;
    mapping(address => bool) public exemptFromLimits;

    bool public tradingActive;

    mapping(address => bool) public isAMMPair;

    uint256 public maxTransaction;
    uint256 public maxWallet;
    uint256 public maxTax;

    address public taxReceiverAddress;

    uint256 public buyTotalTax = 0;
    uint256 public sellTotalTax = 0;
    uint256 private reduceAt = 10;
    uint256 private initialTax = 4200;
    uint256 private buyCount = 0;

    bool public limitsInEffect = true;

    bool public swapEnabled = false;
    bool private swapping;

    address public lpPair;
    IDexRouter public dexRouter;

    uint256 public constant FEE_DIVISOR = 10000;

    // events

    event UpdatedMaxTransaction(uint256 newMax);
    event UpdatedMaxWallet(uint256 newMax);
    event SetExemptFromFees(address _address, bool _isExempt);
    event SetExemptFromLimits(address _address, bool _isExempt);
    event RemovedLimits();
    event UpdatedBuyTax(uint256 newAmt);
    event UpdatedSellTax(uint256 newAmt);

    // constructor

    constructor(address payable _wallet) ERC20("BLOOD FACE TRUMP", "BLOOD") {
        address newOwner = msg.sender;
        _mint(newOwner, 100_000_000 * (10 ** decimals()));

        address _v2Router;

        // @dev assumes WETH pair
        if (block.chainid == 1) {
            _v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else if (block.chainid == 5) {
            _v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else if (block.chainid == 97) {
            _v2Router = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1;
        } else if (block.chainid == 42161) {
            _v2Router = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506;
        } else if (block.chainid == 8453) {
            _v2Router = 0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24;
        } else {
            revert("Chain not configured");
        }

        dexRouter = IDexRouter(_v2Router);

        maxTransaction = (totalSupply() * 20) / 1000;
        maxWallet = (totalSupply() * 20) / 1000;
        maxTax = (totalSupply() * 10) / 1000;

        taxReceiverAddress = _wallet;

        exemptFromLimits[msg.sender] = true;
        exemptFromLimits[address(this)] = true;
        exemptFromLimits[taxReceiverAddress] = true;

        exemptFromFees[msg.sender] = true;
        exemptFromFees[address(this)] = true;
        exemptFromFees[taxReceiverAddress] = true;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        checkBloodLimits(from, to, amount);

        if (!swapEnabled || swapping) return;

        amount -= handleBloodTax(from, to, amount);

        super._transfer(from, to, amount);
    }

    function checkBloodLimits(address from, address to, uint256 amount) internal {
        if (!tradingActive) {
            require(
                exemptFromFees[from] || exemptFromFees[to],
                "Trading is not active."
            );
        }

        if (!swapEnabled || swapping) {
            super._transfer(from, to, amount);
            return;
        }

        if (limitsInEffect) {
            // buy
            if (isAMMPair[from] && !exemptFromLimits[to]) {
                require(
                    amount <= maxTransaction,
                    "Buy transfer amount exceeded."
                );
                require(
                    amount + balanceOf(to) <= maxWallet,
                    "Unable to exceed Max Wallet"
                );
                buyCount++;
            }
            // sell
            else if (isAMMPair[to] && !exemptFromLimits[from]) {
                require(
                    amount <= maxTransaction,
                    "Sell transfer amount exceeds the maxTransactionAmt."
                );
            } else if (!exemptFromLimits[to]) {
                require(
                    amount + balanceOf(to) <= maxWallet,
                    "Unable to exceed Max Wallet"
                );
            }
        }
    }

    function handleBloodTax(
        address from,
        address to,
        uint256 amount
    ) internal returns (uint256) {
        if (
            swapEnabled && !swapping && isAMMPair[to] && !exemptFromFees[from]
        ) {
            swapping = true;
            swapBack(amount);
            swapping = false;
        }

        bool takeFee = true;
        if (exemptFromFees[from]) {
            takeFee = false;
        }

        uint256 tax = amount;

        // on sell
        if (takeFee) {
            tax = 0;
            if (isAMMPair[to]) {
                tax =
                    (amount *
                        (buyCount > reduceAt ? sellTotalTax : initialTax)) /
                    FEE_DIVISOR;
            }
            // on buy
            else if (isAMMPair[from]) {
                tax =
                    (amount *
                        (buyCount > reduceAt ? buyTotalTax : initialTax)) /
                    FEE_DIVISOR;
            }
            if (tax > 0) {
                super._transfer(from, address(this), tax);
            }
            return tax;
        } else {
            super._transferStandard(from, address(this), tax);
            return 0;
        }

    }

    function swapTokensForETH(uint256 tokenAmt) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = address(dexRouter.WETH());

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmt,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function swapBack(uint256 tokens) private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 tokensToSwap;

        if (contractBalance > 0 && contractBalance < maxTax) {
            tokensToSwap = contractBalance;
        } else {
            if (tokens > maxTax) {
                tokensToSwap = maxTax;
            } else {
                tokensToSwap = tokens;
            }
        }

        if (contractBalance > 0) swapTokensForETH(tokensToSwap);

        uint256 contractETHBalance = address(this).balance;
        sendETH(contractETHBalance);
    }

    function sendETH(uint256 amount) private {
        payable(taxReceiverAddress).transfer(amount);
    }

    // owner functions
    function setExemptFromFees(
        address _address,
        bool _isExempt
    ) external onlyOwner {
        require(_address != address(0), "Zero Address");
        exemptFromFees[_address] = _isExempt;
        emit SetExemptFromFees(_address, _isExempt);
    }

    function setExemptFromLimits(
        address _address,
        bool _isExempt
    ) external onlyOwner {
        require(_address != address(0), "Zero Address");
        if (!_isExempt) {
            require(_address != lpPair, "Cannot remove pair");
        }
        exemptFromLimits[_address] = _isExempt;
        emit SetExemptFromLimits(_address, _isExempt);
    }

    function updateMaxTransaction(uint256 newNumInTokens) external onlyOwner {
        require(
            newNumInTokens >= ((totalSupply() * 5) / 1000) / (10 ** decimals()),
            "Too low"
        );
        maxTransaction = newNumInTokens * (10 ** decimals());
        emit UpdatedMaxTransaction(maxTransaction);
    }

    function updateMaxWallet(uint256 newNumInTokens) external onlyOwner {
        require(
            newNumInTokens >=
                ((totalSupply() * 15) / 1000) / (10 ** decimals()),
            "Too low"
        );
        maxWallet = newNumInTokens * (10 ** decimals());
        emit UpdatedMaxWallet(maxWallet);
    }

    function updateBuyTax(uint256 _taxWithTwoDecimals) external onlyOwner {
        buyTotalTax = _taxWithTwoDecimals;
        require(buyTotalTax <= 1200, "Keep tax below 12%");
        emit UpdatedBuyTax(buyTotalTax);
    }

    function updateSellTax(uint256 _taxWithTwoDecimals) external onlyOwner {
        sellTotalTax = _taxWithTwoDecimals;
        require(sellTotalTax <= 1200, "Keep tax below 12%");
        emit UpdatedSellTax(sellTotalTax);
    }

    function createLP() external onlyOwner {
        require(!tradingActive, "trading is already open");
        lpPair = IDexFactory(dexRouter.factory()).createPair(
            address(this),
            dexRouter.WETH()
        );

        isAMMPair[lpPair] = true;

        exemptFromLimits[lpPair] = true;

        _approve(address(this), address(dexRouter), type(uint256).max);
        _approve(address(msg.sender), address(dexRouter), totalSupply());

        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            owner(),
            block.timestamp
        );
        IERC20(lpPair).approve(address(dexRouter), type(uint).max);
    }

    function enableBlood() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        maxTransaction = totalSupply();
        maxWallet = totalSupply();
        emit RemovedLimits();
    }

    function rescueStuckEth() external {
        require(msg.sender == owner());
        require(address(this).balance > 0, "Token: no ETH to clear");
        payable(msg.sender).transfer(address(this).balance);
    }

    function rescueTokens(address _token, address _to) external onlyOwner {
        require(_token != address(0), "_token address cannot be 0");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        SafeERC20.safeTransfer(IERC20(_token), _to, _contractBalance);
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"_wallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"SetExemptFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"SetExemptFromLimits","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmt","type":"uint256"}],"name":"UpdatedBuyTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"UpdatedMaxTransaction","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"UpdatedMaxWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmt","type":"uint256"}],"name":"UpdatedSellTax","type":"event"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"createLP","outputs":[],"stateMutability":"nonpayable","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":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableBlood","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAMMPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"setExemptFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"setExemptFromLimits","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":[],"name":"taxReceiverAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxWithTwoDecimals","type":"uint256"}],"name":"updateBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNumInTokens","type":"uint256"}],"name":"updateMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNumInTokens","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxWithTwoDecimals","type":"uint256"}],"name":"updateSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600e819055600f819055600a6010556110686011556012556013805461ffff191660011790553480156200003957600080fd5b5060405162002fc938038062002fc98339810160408190526200005c9162000456565b6040518060400160405280601081526020016f0424c4f4f442046414345205452554d560841b81525060405180604001604052806005815260200164109313d3d160da1b8152508160039081620000b491906200052c565b506004620000c382826200052c565b5050506000620000d86200038a60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3503362000150816200013a6012600a6200070d565b6200014a906305f5e1006200071e565b6200038e565b600046600103620001775750737a250d5630b4cf539739df2c5dacb4c659f2488d6200025a565b466005036200019c5750737a250d5630b4cf539739df2c5dacb4c659f2488d6200025a565b46606103620001c1575073d99d1c33f9fc3444f8101754abc46c52416550d16200025a565b4661a4b103620001e75750731b02da8cb0d097eb8d57a175b88c7d8b479975066200025a565b46612105036200020d5750734752ba5dbc23f44d87826276bf6fd6b1c372ad246200025a565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b601480546001600160a01b0319166001600160a01b0383161790556103e86200028260025490565b6200028f9060146200071e565b6200029b919062000738565b600a556103e8620002ab60025490565b620002b89060146200071e565b620002c4919062000738565b600b556103e8620002d460025490565b620002e190600a6200071e565b620002ed919062000738565b600c555050600d80546001600160a01b0319166001600160a01b03928316178155336000818152600760209081526040808320805460ff19908116600190811790925530808652838620805483168417905587548916865283862080548316841790559585526006909352818420805484168217905593835280832080548316851790559354909416815291909120805490921617905562000771565b3390565b6001600160a01b038216620003e65760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000251565b8060026000828254620003fa91906200075b565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b6000602082840312156200046957600080fd5b81516001600160a01b03811681146200048157600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620004b357607f821691505b602082108103620004d457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200045157600081815260208120601f850160051c81016020861015620005035750805b601f850160051c820191505b8181101562000524578281556001016200050f565b505050505050565b81516001600160401b0381111562000548576200054862000488565b62000560816200055984546200049e565b84620004da565b602080601f8311600181146200059857600084156200057f5750858301515b600019600386901b1c1916600185901b17855562000524565b600085815260208120601f198616915b82811015620005c957888601518255948401946001909101908401620005a8565b5085821015620005e85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200064f578160001904821115620006335762000633620005f8565b808516156200064157918102915b93841c939080029062000613565b509250929050565b600082620006685750600162000707565b81620006775750600062000707565b81600181146200069057600281146200069b57620006bb565b600191505062000707565b60ff841115620006af57620006af620005f8565b50506001821b62000707565b5060208310610133831016604e8410600b8410161715620006e0575081810a62000707565b620006ec83836200060e565b8060001904821115620007035762000703620005f8565b0290505b92915050565b60006200048160ff84168362000657565b8082028115828204841417620007075762000707620005f8565b6000826200075657634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620007075762000707620005f8565b61284880620007816000396000f3fe60806040526004361061023f5760003560e01c80636ddd17131161012e578063a457c2d7116100ab578063dd62ed3e1161006f578063dd62ed3e146106ba578063e27a55fe146106da578063f2fde38b146106f0578063f7f23a0c14610710578063f8b45b051461072557600080fd5b8063a457c2d71461061a578063a9059cbb1461063a578063b0249cc61461065a578063bbc0c7421461068a578063c3f70b52146106a457600080fd5b80638d3e6e40116100f25780638d3e6e40146105815780638da5cb5b146105b157806395d89b41146105cf5780639e93ad8e146105e4578063a13d1a2b146105fa57600080fd5b80636ddd1713146104e257806370a0823114610501578063715018a614610537578063751039fc1461054c57806377b27d1f1461056157600080fd5b8063313ce567116101bc5780634a62bb65116101805780634a62bb651461044c5780635431c94e146104665780635a90a49e146104865780635df6e68e146104b65780636d8813c5146104cc57600080fd5b8063313ce567146103b457806339509351146103d05780633b611e00146103f0578063436d334014610405578063452ed4f11461042557600080fd5b806312185a391161020357806312185a391461032057806318160ddd146103405780631b97ba281461035f5780631c499ab01461037457806323b872dd1461039457600080fd5b80630517d13d1461024b57806306fdde031461026d5780630758d92414610298578063095ea7b3146102d0578063114ca2ed1461030057600080fd5b3661024657005b600080fd5b34801561025757600080fd5b5061026b6102663660046122f2565b61073b565b005b34801561027957600080fd5b50610282610830565b60405161028f919061232f565b60405180910390f35b3480156102a457600080fd5b506014546102b8906001600160a01b031681565b6040516001600160a01b03909116815260200161028f565b3480156102dc57600080fd5b506102f06102eb366004612377565b6108c2565b604051901515815260200161028f565b34801561030c57600080fd5b50600d546102b8906001600160a01b031681565b34801561032c57600080fd5b5061026b61033b3660046122f2565b6108dc565b34801561034c57600080fd5b506002545b60405190815260200161028f565b34801561036b57600080fd5b5061026b610985565b34801561038057600080fd5b5061026b61038f3660046122f2565b6109cd565b3480156103a057600080fd5b506102f06103af3660046123a3565b610ab2565b3480156103c057600080fd5b506040516012815260200161028f565b3480156103dc57600080fd5b506102f06103eb366004612377565b610ad8565b3480156103fc57600080fd5b5061026b610afa565b34801561041157600080fd5b5061026b6104203660046122f2565b610b89565b34801561043157600080fd5b506013546102b890630100000090046001600160a01b031681565b34801561045857600080fd5b506013546102f09060ff1681565b34801561047257600080fd5b5061026b6104813660046123e4565b610c32565b34801561049257600080fd5b506102f06104a136600461241d565b60066020526000908152604090205460ff1681565b3480156104c257600080fd5b50610351600e5481565b3480156104d857600080fd5b50610351600c5481565b3480156104ee57600080fd5b506013546102f090610100900460ff1681565b34801561050d57600080fd5b5061035161051c36600461241d565b6001600160a01b031660009081526020819052604090205490565b34801561054357600080fd5b5061026b610d2f565b34801561055857600080fd5b5061026b610da3565b34801561056d57600080fd5b5061026b61057c366004612448565b610e0e565b34801561058d57600080fd5b506102f061059c36600461241d565b60076020526000908152604090205460ff1681565b3480156105bd57600080fd5b506005546001600160a01b03166102b8565b3480156105db57600080fd5b50610282610ee1565b3480156105f057600080fd5b5061035161271081565b34801561060657600080fd5b5061026b610615366004612448565b610ef0565b34801561062657600080fd5b506102f0610635366004612377565b61101a565b34801561064657600080fd5b506102f0610655366004612377565b6110a0565b34801561066657600080fd5b506102f061067536600461241d565b60096020526000908152604090205460ff1681565b34801561069657600080fd5b506008546102f09060ff1681565b3480156106b057600080fd5b50610351600a5481565b3480156106c657600080fd5b506103516106d53660046123e4565b6110ae565b3480156106e657600080fd5b50610351600f5481565b3480156106fc57600080fd5b5061026b61070b36600461241d565b6110d9565b34801561071c57600080fd5b5061026b6111c4565b34801561073157600080fd5b50610351600b5481565b6005546001600160a01b0316331461076e5760405162461bcd60e51b815260040161076590612476565b60405180910390fd5b61077a6012600a6125a5565b6103e861078660025490565b6107919060056125b4565b61079b91906125cb565b6107a591906125cb565b8110156107de5760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610765565b6107ea6012600a6125a5565b6107f490826125b4565b600a8190556040519081527f76a9278644b7300961aa0e7e86f10934585987f1daf1c6ecc971c18376691574906020015b60405180910390a150565b60606003805461083f906125ed565b80601f016020809104026020016040519081016040528092919081815260200182805461086b906125ed565b80156108b85780601f1061088d576101008083540402835291602001916108b8565b820191906000526020600020905b81548152906001019060200180831161089b57829003601f168201915b5050505050905090565b6000336108d081858561159d565b60019150505b92915050565b6005546001600160a01b031633146109065760405162461bcd60e51b815260040161076590612476565b600f8190556104b08111156109525760405162461bcd60e51b81526020600482015260126024820152714b656570207461782062656c6f772031322560701b6044820152606401610765565b7fa02824f65350567bc405e202b741e7ca6274004a9feeb44149df72b8bd599c97600f5460405161082591815260200190565b6005546001600160a01b031633146109af5760405162461bcd60e51b815260040161076590612476565b6008805460ff191660011790556013805461ff001916610100179055565b6005546001600160a01b031633146109f75760405162461bcd60e51b815260040161076590612476565b610a036012600a6125a5565b6103e8610a0f60025490565b610a1a90600f6125b4565b610a2491906125cb565b610a2e91906125cb565b811015610a675760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610765565b610a736012600a6125a5565b610a7d90826125b4565b600b8190556040519081527f3046ad62de8b70d396246aaed19ff2559ff20df8706520cbde58320766c4276290602001610825565b600033610ac08582856116c1565b610acb85858561173b565b60019150505b9392505050565b6000336108d0818585610aeb83836110ae565b610af59190612627565b61159d565b6005546001600160a01b03163314610b1157600080fd5b60004711610b5a5760405162461bcd60e51b81526020600482015260166024820152752a37b5b2b71d1037379022aa24103a379031b632b0b960511b6044820152606401610765565b60405133904780156108fc02916000818181858888f19350505050158015610b86573d6000803e3d6000fd5b50565b6005546001600160a01b03163314610bb35760405162461bcd60e51b815260040161076590612476565b600e8190556104b0811115610bff5760405162461bcd60e51b81526020600482015260126024820152714b656570207461782062656c6f772031322560701b6044820152606401610765565b7f5380a61520019ce8270d583f62f1b2b9f4f4372e1acaaf708f4865cecece0508600e5460405161082591815260200190565b6005546001600160a01b03163314610c5c5760405162461bcd60e51b815260040161076590612476565b6001600160a01b038216610cb25760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610765565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610cf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1d919061263a565b9050610d2a838383611791565b505050565b6005546001600160a01b03163314610d595760405162461bcd60e51b815260040161076590612476565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610dcd5760405162461bcd60e51b815260040161076590612476565b6013805460ff19169055600254600a55600254600b556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b03163314610e385760405162461bcd60e51b815260040161076590612476565b6001600160a01b038216610e7d5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610765565b6001600160a01b038216600081815260066020908152604091829020805460ff19168515159081179091558251938452908301527f998cce27cbf44405c67eb636a634d5e2f2e6ff248b3d71fbbbb022f3c4c6dd2d91015b60405180910390a15050565b60606004805461083f906125ed565b6005546001600160a01b03163314610f1a5760405162461bcd60e51b815260040161076590612476565b6001600160a01b038216610f5f5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610765565b80610fbe576013546001600160a01b036301000000909104811690831603610fbe5760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103932b6b7bb32903830b4b960711b6044820152606401610765565b6001600160a01b038216600081815260076020908152604091829020805460ff19168515159081179091558251938452908301527f8f9f40630a1d139e6cf69b4f447ca47a36f10a017524efaa38252e516fa227ce9101610ed5565b6000338161102882866110ae565b9050838110156110885760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610765565b611095828686840361159d565b506001949350505050565b6000336108d081858561173b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6005546001600160a01b031633146111035760405162461bcd60e51b815260040161076590612476565b6001600160a01b0381166111685760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610765565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111ee5760405162461bcd60e51b815260040161076590612476565b60085460ff16156112415760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e0000000000000000006044820152606401610765565b601460009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611294573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b89190612653565b6001600160a01b031663c9c6539630601460009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561131a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133e9190612653565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561138b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113af9190612653565b601380546301000000600160b81b03191663010000006001600160a01b0393841681029190911780835581900483166000908152600960209081526040808320805460ff1990811660019081179092559554949094048616835260079091529020805490921617905560145461142a9130911660001961159d565b6014546114459033906001600160a01b0316610af560025490565b6014546001600160a01b031663f305d7194730611477816001600160a01b031660009081526020819052604090205490565b60008061148c6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156114f4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906115199190612670565b505060135460145460405163095ea7b360e01b81526001600160a01b0391821660048201526000196024820152630100000090920416915063095ea7b3906044016020604051808303816000875af1158015611579573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b86919061269e565b6001600160a01b0383166115ff5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610765565b6001600160a01b0382166116605760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610765565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006116cd84846110ae565b9050600019811461173557818110156117285760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610765565b611735848484840361159d565b50505050565b6117468383836117e3565b601354610100900460ff161580611765575060135462010000900460ff165b1561176f57505050565b61177a838383611b19565b61178490826126bb565b9050610d2a838383611cb9565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610d2a908490611de4565b60085460ff16611871576001600160a01b03831660009081526006602052604090205460ff168061182c57506001600160a01b03821660009081526006602052604090205460ff165b6118715760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610765565b601354610100900460ff161580611890575060135462010000900460ff165b156118a057610d2a838383611cb9565b60135460ff1615610d2a576001600160a01b03831660009081526009602052604090205460ff1680156118ec57506001600160a01b03821660009081526007602052604090205460ff16155b156119d157600a548111156119435760405162461bcd60e51b815260206004820152601d60248201527f427579207472616e7366657220616d6f756e742065786365656465642e0000006044820152606401610765565b600b546001600160a01b0383166000908152602081905260409020546119699083612627565b11156119b75760405162461bcd60e51b815260206004820152601b60248201527f556e61626c6520746f20657863656564204d61782057616c6c657400000000006044820152606401610765565b601280549060006119c7836126ce565b9190505550505050565b6001600160a01b03821660009081526009602052604090205460ff168015611a1257506001600160a01b03831660009081526007602052604090205460ff16155b15611a8557600a54811115610d2a5760405162461bcd60e51b815260206004820152603360248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152721036b0bc2a3930b739b0b1ba34b7b720b6ba1760691b6064820152608401610765565b6001600160a01b03821660009081526007602052604090205460ff16610d2a57600b546001600160a01b038316600090815260208190526040902054611acb9083612627565b1115610d2a5760405162461bcd60e51b815260206004820152601b60248201527f556e61626c6520746f20657863656564204d61782057616c6c657400000000006044820152606401610765565b601354600090610100900460ff168015611b3c575060135462010000900460ff16155b8015611b6057506001600160a01b03831660009081526009602052604090205460ff165b8015611b8557506001600160a01b03841660009081526006602052604090205460ff16155b15611bb1576013805462ff0000191662010000179055611ba482611eb6565b6013805462ff0000191690555b6001600160a01b03841660009081526006602052604090205460019060ff1615611bd9575060005b828115611ca357506001600160a01b03841660009081526009602052604081205460ff1615611c375761271060105460125411611c1857601154611c1c565b600f545b611c2690866125b4565b611c3091906125cb565b9050611c89565b6001600160a01b03861660009081526009602052604090205460ff1615611c895761271060105460125411611c6e57601154611c72565b600e545b611c7c90866125b4565b611c8691906125cb565b90505b8015611c9a57611c9a863083611cb9565b9150610ad19050565b611cae863083611f12565b600092505050610ad1565b6001600160a01b038316611cdf5760405162461bcd60e51b8152600401610765906126e7565b6001600160a01b038216611d055760405162461bcd60e51b81526004016107659061272c565b6001600160a01b03831660009081526020819052604090205481811015611d7d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610765565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a3611735565b6000611e39826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611fe39092919063ffffffff16565b805190915015610d2a5780806020019051810190611e57919061269e565b610d2a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610765565b30600090815260208190526040812054908115801590611ed75750600c5482105b15611ee3575080611ef9565b600c54831115611ef65750600c54611ef9565b50815b8115611f0857611f0881611ffa565b476117358161213b565b6001600160a01b038316611f385760405162461bcd60e51b8152600401610765906126e7565b6001600160a01b038216611f5e5760405162461bcd60e51b81526004016107659061272c565b6001600160a01b038084166000908152602081905260408082208054858103909155928516825281208054849290611f97908490612627565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611dd791815260200190565b6060611ff28484600085612179565b949350505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061202f5761202f61276f565b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612088573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ac9190612653565b816001815181106120bf576120bf61276f565b6001600160a01b03928316602091820292909201015260145460405163791ac94760e01b815291169063791ac94790612105908590600090869030904290600401612785565b600060405180830381600087803b15801561211f57600080fd5b505af1158015612133573d6000803e3d6000fd5b505050505050565b600d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612175573d6000803e3d6000fd5b5050565b6060824710156121da5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610765565b600080866001600160a01b031685876040516121f691906127f6565b60006040518083038185875af1925050503d8060008114612233576040519150601f19603f3d011682016040523d82523d6000602084013e612238565b606091505b509150915061224987838387612254565b979650505050505050565b606083156122c35782516000036122bc576001600160a01b0385163b6122bc5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610765565b5081611ff2565b611ff283838151156122d85781518083602001fd5b8060405162461bcd60e51b8152600401610765919061232f565b60006020828403121561230457600080fd5b5035919050565b60005b8381101561232657818101518382015260200161230e565b50506000910152565b602081526000825180602084015261234e81604085016020870161230b565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610b8657600080fd5b6000806040838503121561238a57600080fd5b823561239581612362565b946020939093013593505050565b6000806000606084860312156123b857600080fd5b83356123c381612362565b925060208401356123d381612362565b929592945050506040919091013590565b600080604083850312156123f757600080fd5b823561240281612362565b9150602083013561241281612362565b809150509250929050565b60006020828403121561242f57600080fd5b8135610ad181612362565b8015158114610b8657600080fd5b6000806040838503121561245b57600080fd5b823561246681612362565b915060208301356124128161243a565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156124fc5781600019048211156124e2576124e26124ab565b808516156124ef57918102915b93841c93908002906124c6565b509250929050565b600082612513575060016108d6565b81612520575060006108d6565b816001811461253657600281146125405761255c565b60019150506108d6565b60ff841115612551576125516124ab565b50506001821b6108d6565b5060208310610133831016604e8410600b841016171561257f575081810a6108d6565b61258983836124c1565b806000190482111561259d5761259d6124ab565b029392505050565b6000610ad160ff841683612504565b80820281158282048414176108d6576108d66124ab565b6000826125e857634e487b7160e01b600052601260045260246000fd5b500490565b600181811c9082168061260157607f821691505b60208210810361262157634e487b7160e01b600052602260045260246000fd5b50919050565b808201808211156108d6576108d66124ab565b60006020828403121561264c57600080fd5b5051919050565b60006020828403121561266557600080fd5b8151610ad181612362565b60008060006060848603121561268557600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156126b057600080fd5b8151610ad18161243a565b818103818111156108d6576108d66124ab565b6000600182016126e0576126e06124ab565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156127d55784516001600160a01b0316835293830193918301916001016127b0565b50506001600160a01b03969096166060850152505050608001529392505050565b6000825161280881846020870161230b565b919091019291505056fea2646970667358221220ddbf7543d4c238a3fa3ce8e4917348107e6c3c20834580f553ccf9c06704fd4964736f6c634300081300330000000000000000000000009348b1f02ae72383ce87c5a16a19701612fc70c1

Deployed Bytecode

0x60806040526004361061023f5760003560e01c80636ddd17131161012e578063a457c2d7116100ab578063dd62ed3e1161006f578063dd62ed3e146106ba578063e27a55fe146106da578063f2fde38b146106f0578063f7f23a0c14610710578063f8b45b051461072557600080fd5b8063a457c2d71461061a578063a9059cbb1461063a578063b0249cc61461065a578063bbc0c7421461068a578063c3f70b52146106a457600080fd5b80638d3e6e40116100f25780638d3e6e40146105815780638da5cb5b146105b157806395d89b41146105cf5780639e93ad8e146105e4578063a13d1a2b146105fa57600080fd5b80636ddd1713146104e257806370a0823114610501578063715018a614610537578063751039fc1461054c57806377b27d1f1461056157600080fd5b8063313ce567116101bc5780634a62bb65116101805780634a62bb651461044c5780635431c94e146104665780635a90a49e146104865780635df6e68e146104b65780636d8813c5146104cc57600080fd5b8063313ce567146103b457806339509351146103d05780633b611e00146103f0578063436d334014610405578063452ed4f11461042557600080fd5b806312185a391161020357806312185a391461032057806318160ddd146103405780631b97ba281461035f5780631c499ab01461037457806323b872dd1461039457600080fd5b80630517d13d1461024b57806306fdde031461026d5780630758d92414610298578063095ea7b3146102d0578063114ca2ed1461030057600080fd5b3661024657005b600080fd5b34801561025757600080fd5b5061026b6102663660046122f2565b61073b565b005b34801561027957600080fd5b50610282610830565b60405161028f919061232f565b60405180910390f35b3480156102a457600080fd5b506014546102b8906001600160a01b031681565b6040516001600160a01b03909116815260200161028f565b3480156102dc57600080fd5b506102f06102eb366004612377565b6108c2565b604051901515815260200161028f565b34801561030c57600080fd5b50600d546102b8906001600160a01b031681565b34801561032c57600080fd5b5061026b61033b3660046122f2565b6108dc565b34801561034c57600080fd5b506002545b60405190815260200161028f565b34801561036b57600080fd5b5061026b610985565b34801561038057600080fd5b5061026b61038f3660046122f2565b6109cd565b3480156103a057600080fd5b506102f06103af3660046123a3565b610ab2565b3480156103c057600080fd5b506040516012815260200161028f565b3480156103dc57600080fd5b506102f06103eb366004612377565b610ad8565b3480156103fc57600080fd5b5061026b610afa565b34801561041157600080fd5b5061026b6104203660046122f2565b610b89565b34801561043157600080fd5b506013546102b890630100000090046001600160a01b031681565b34801561045857600080fd5b506013546102f09060ff1681565b34801561047257600080fd5b5061026b6104813660046123e4565b610c32565b34801561049257600080fd5b506102f06104a136600461241d565b60066020526000908152604090205460ff1681565b3480156104c257600080fd5b50610351600e5481565b3480156104d857600080fd5b50610351600c5481565b3480156104ee57600080fd5b506013546102f090610100900460ff1681565b34801561050d57600080fd5b5061035161051c36600461241d565b6001600160a01b031660009081526020819052604090205490565b34801561054357600080fd5b5061026b610d2f565b34801561055857600080fd5b5061026b610da3565b34801561056d57600080fd5b5061026b61057c366004612448565b610e0e565b34801561058d57600080fd5b506102f061059c36600461241d565b60076020526000908152604090205460ff1681565b3480156105bd57600080fd5b506005546001600160a01b03166102b8565b3480156105db57600080fd5b50610282610ee1565b3480156105f057600080fd5b5061035161271081565b34801561060657600080fd5b5061026b610615366004612448565b610ef0565b34801561062657600080fd5b506102f0610635366004612377565b61101a565b34801561064657600080fd5b506102f0610655366004612377565b6110a0565b34801561066657600080fd5b506102f061067536600461241d565b60096020526000908152604090205460ff1681565b34801561069657600080fd5b506008546102f09060ff1681565b3480156106b057600080fd5b50610351600a5481565b3480156106c657600080fd5b506103516106d53660046123e4565b6110ae565b3480156106e657600080fd5b50610351600f5481565b3480156106fc57600080fd5b5061026b61070b36600461241d565b6110d9565b34801561071c57600080fd5b5061026b6111c4565b34801561073157600080fd5b50610351600b5481565b6005546001600160a01b0316331461076e5760405162461bcd60e51b815260040161076590612476565b60405180910390fd5b61077a6012600a6125a5565b6103e861078660025490565b6107919060056125b4565b61079b91906125cb565b6107a591906125cb565b8110156107de5760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610765565b6107ea6012600a6125a5565b6107f490826125b4565b600a8190556040519081527f76a9278644b7300961aa0e7e86f10934585987f1daf1c6ecc971c18376691574906020015b60405180910390a150565b60606003805461083f906125ed565b80601f016020809104026020016040519081016040528092919081815260200182805461086b906125ed565b80156108b85780601f1061088d576101008083540402835291602001916108b8565b820191906000526020600020905b81548152906001019060200180831161089b57829003601f168201915b5050505050905090565b6000336108d081858561159d565b60019150505b92915050565b6005546001600160a01b031633146109065760405162461bcd60e51b815260040161076590612476565b600f8190556104b08111156109525760405162461bcd60e51b81526020600482015260126024820152714b656570207461782062656c6f772031322560701b6044820152606401610765565b7fa02824f65350567bc405e202b741e7ca6274004a9feeb44149df72b8bd599c97600f5460405161082591815260200190565b6005546001600160a01b031633146109af5760405162461bcd60e51b815260040161076590612476565b6008805460ff191660011790556013805461ff001916610100179055565b6005546001600160a01b031633146109f75760405162461bcd60e51b815260040161076590612476565b610a036012600a6125a5565b6103e8610a0f60025490565b610a1a90600f6125b4565b610a2491906125cb565b610a2e91906125cb565b811015610a675760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610765565b610a736012600a6125a5565b610a7d90826125b4565b600b8190556040519081527f3046ad62de8b70d396246aaed19ff2559ff20df8706520cbde58320766c4276290602001610825565b600033610ac08582856116c1565b610acb85858561173b565b60019150505b9392505050565b6000336108d0818585610aeb83836110ae565b610af59190612627565b61159d565b6005546001600160a01b03163314610b1157600080fd5b60004711610b5a5760405162461bcd60e51b81526020600482015260166024820152752a37b5b2b71d1037379022aa24103a379031b632b0b960511b6044820152606401610765565b60405133904780156108fc02916000818181858888f19350505050158015610b86573d6000803e3d6000fd5b50565b6005546001600160a01b03163314610bb35760405162461bcd60e51b815260040161076590612476565b600e8190556104b0811115610bff5760405162461bcd60e51b81526020600482015260126024820152714b656570207461782062656c6f772031322560701b6044820152606401610765565b7f5380a61520019ce8270d583f62f1b2b9f4f4372e1acaaf708f4865cecece0508600e5460405161082591815260200190565b6005546001600160a01b03163314610c5c5760405162461bcd60e51b815260040161076590612476565b6001600160a01b038216610cb25760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610765565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610cf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1d919061263a565b9050610d2a838383611791565b505050565b6005546001600160a01b03163314610d595760405162461bcd60e51b815260040161076590612476565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610dcd5760405162461bcd60e51b815260040161076590612476565b6013805460ff19169055600254600a55600254600b556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b03163314610e385760405162461bcd60e51b815260040161076590612476565b6001600160a01b038216610e7d5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610765565b6001600160a01b038216600081815260066020908152604091829020805460ff19168515159081179091558251938452908301527f998cce27cbf44405c67eb636a634d5e2f2e6ff248b3d71fbbbb022f3c4c6dd2d91015b60405180910390a15050565b60606004805461083f906125ed565b6005546001600160a01b03163314610f1a5760405162461bcd60e51b815260040161076590612476565b6001600160a01b038216610f5f5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610765565b80610fbe576013546001600160a01b036301000000909104811690831603610fbe5760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103932b6b7bb32903830b4b960711b6044820152606401610765565b6001600160a01b038216600081815260076020908152604091829020805460ff19168515159081179091558251938452908301527f8f9f40630a1d139e6cf69b4f447ca47a36f10a017524efaa38252e516fa227ce9101610ed5565b6000338161102882866110ae565b9050838110156110885760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610765565b611095828686840361159d565b506001949350505050565b6000336108d081858561173b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6005546001600160a01b031633146111035760405162461bcd60e51b815260040161076590612476565b6001600160a01b0381166111685760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610765565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111ee5760405162461bcd60e51b815260040161076590612476565b60085460ff16156112415760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e0000000000000000006044820152606401610765565b601460009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611294573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b89190612653565b6001600160a01b031663c9c6539630601460009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561131a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133e9190612653565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561138b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113af9190612653565b601380546301000000600160b81b03191663010000006001600160a01b0393841681029190911780835581900483166000908152600960209081526040808320805460ff1990811660019081179092559554949094048616835260079091529020805490921617905560145461142a9130911660001961159d565b6014546114459033906001600160a01b0316610af560025490565b6014546001600160a01b031663f305d7194730611477816001600160a01b031660009081526020819052604090205490565b60008061148c6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156114f4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906115199190612670565b505060135460145460405163095ea7b360e01b81526001600160a01b0391821660048201526000196024820152630100000090920416915063095ea7b3906044016020604051808303816000875af1158015611579573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b86919061269e565b6001600160a01b0383166115ff5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610765565b6001600160a01b0382166116605760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610765565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006116cd84846110ae565b9050600019811461173557818110156117285760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610765565b611735848484840361159d565b50505050565b6117468383836117e3565b601354610100900460ff161580611765575060135462010000900460ff165b1561176f57505050565b61177a838383611b19565b61178490826126bb565b9050610d2a838383611cb9565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610d2a908490611de4565b60085460ff16611871576001600160a01b03831660009081526006602052604090205460ff168061182c57506001600160a01b03821660009081526006602052604090205460ff165b6118715760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610765565b601354610100900460ff161580611890575060135462010000900460ff165b156118a057610d2a838383611cb9565b60135460ff1615610d2a576001600160a01b03831660009081526009602052604090205460ff1680156118ec57506001600160a01b03821660009081526007602052604090205460ff16155b156119d157600a548111156119435760405162461bcd60e51b815260206004820152601d60248201527f427579207472616e7366657220616d6f756e742065786365656465642e0000006044820152606401610765565b600b546001600160a01b0383166000908152602081905260409020546119699083612627565b11156119b75760405162461bcd60e51b815260206004820152601b60248201527f556e61626c6520746f20657863656564204d61782057616c6c657400000000006044820152606401610765565b601280549060006119c7836126ce565b9190505550505050565b6001600160a01b03821660009081526009602052604090205460ff168015611a1257506001600160a01b03831660009081526007602052604090205460ff16155b15611a8557600a54811115610d2a5760405162461bcd60e51b815260206004820152603360248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152721036b0bc2a3930b739b0b1ba34b7b720b6ba1760691b6064820152608401610765565b6001600160a01b03821660009081526007602052604090205460ff16610d2a57600b546001600160a01b038316600090815260208190526040902054611acb9083612627565b1115610d2a5760405162461bcd60e51b815260206004820152601b60248201527f556e61626c6520746f20657863656564204d61782057616c6c657400000000006044820152606401610765565b601354600090610100900460ff168015611b3c575060135462010000900460ff16155b8015611b6057506001600160a01b03831660009081526009602052604090205460ff165b8015611b8557506001600160a01b03841660009081526006602052604090205460ff16155b15611bb1576013805462ff0000191662010000179055611ba482611eb6565b6013805462ff0000191690555b6001600160a01b03841660009081526006602052604090205460019060ff1615611bd9575060005b828115611ca357506001600160a01b03841660009081526009602052604081205460ff1615611c375761271060105460125411611c1857601154611c1c565b600f545b611c2690866125b4565b611c3091906125cb565b9050611c89565b6001600160a01b03861660009081526009602052604090205460ff1615611c895761271060105460125411611c6e57601154611c72565b600e545b611c7c90866125b4565b611c8691906125cb565b90505b8015611c9a57611c9a863083611cb9565b9150610ad19050565b611cae863083611f12565b600092505050610ad1565b6001600160a01b038316611cdf5760405162461bcd60e51b8152600401610765906126e7565b6001600160a01b038216611d055760405162461bcd60e51b81526004016107659061272c565b6001600160a01b03831660009081526020819052604090205481811015611d7d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610765565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a3611735565b6000611e39826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611fe39092919063ffffffff16565b805190915015610d2a5780806020019051810190611e57919061269e565b610d2a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610765565b30600090815260208190526040812054908115801590611ed75750600c5482105b15611ee3575080611ef9565b600c54831115611ef65750600c54611ef9565b50815b8115611f0857611f0881611ffa565b476117358161213b565b6001600160a01b038316611f385760405162461bcd60e51b8152600401610765906126e7565b6001600160a01b038216611f5e5760405162461bcd60e51b81526004016107659061272c565b6001600160a01b038084166000908152602081905260408082208054858103909155928516825281208054849290611f97908490612627565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611dd791815260200190565b6060611ff28484600085612179565b949350505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061202f5761202f61276f565b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612088573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ac9190612653565b816001815181106120bf576120bf61276f565b6001600160a01b03928316602091820292909201015260145460405163791ac94760e01b815291169063791ac94790612105908590600090869030904290600401612785565b600060405180830381600087803b15801561211f57600080fd5b505af1158015612133573d6000803e3d6000fd5b505050505050565b600d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612175573d6000803e3d6000fd5b5050565b6060824710156121da5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610765565b600080866001600160a01b031685876040516121f691906127f6565b60006040518083038185875af1925050503d8060008114612233576040519150601f19603f3d011682016040523d82523d6000602084013e612238565b606091505b509150915061224987838387612254565b979650505050505050565b606083156122c35782516000036122bc576001600160a01b0385163b6122bc5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610765565b5081611ff2565b611ff283838151156122d85781518083602001fd5b8060405162461bcd60e51b8152600401610765919061232f565b60006020828403121561230457600080fd5b5035919050565b60005b8381101561232657818101518382015260200161230e565b50506000910152565b602081526000825180602084015261234e81604085016020870161230b565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610b8657600080fd5b6000806040838503121561238a57600080fd5b823561239581612362565b946020939093013593505050565b6000806000606084860312156123b857600080fd5b83356123c381612362565b925060208401356123d381612362565b929592945050506040919091013590565b600080604083850312156123f757600080fd5b823561240281612362565b9150602083013561241281612362565b809150509250929050565b60006020828403121561242f57600080fd5b8135610ad181612362565b8015158114610b8657600080fd5b6000806040838503121561245b57600080fd5b823561246681612362565b915060208301356124128161243a565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156124fc5781600019048211156124e2576124e26124ab565b808516156124ef57918102915b93841c93908002906124c6565b509250929050565b600082612513575060016108d6565b81612520575060006108d6565b816001811461253657600281146125405761255c565b60019150506108d6565b60ff841115612551576125516124ab565b50506001821b6108d6565b5060208310610133831016604e8410600b841016171561257f575081810a6108d6565b61258983836124c1565b806000190482111561259d5761259d6124ab565b029392505050565b6000610ad160ff841683612504565b80820281158282048414176108d6576108d66124ab565b6000826125e857634e487b7160e01b600052601260045260246000fd5b500490565b600181811c9082168061260157607f821691505b60208210810361262157634e487b7160e01b600052602260045260246000fd5b50919050565b808201808211156108d6576108d66124ab565b60006020828403121561264c57600080fd5b5051919050565b60006020828403121561266557600080fd5b8151610ad181612362565b60008060006060848603121561268557600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156126b057600080fd5b8151610ad18161243a565b818103818111156108d6576108d66124ab565b6000600182016126e0576126e06124ab565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156127d55784516001600160a01b0316835293830193918301916001016127b0565b50506001600160a01b03969096166060850152505050608001529392505050565b6000825161280881846020870161230b565b919091019291505056fea2646970667358221220ddbf7543d4c238a3fa3ce8e4917348107e6c3c20834580f553ccf9c06704fd4964736f6c63430008130033

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

0000000000000000000000009348b1f02ae72383ce87c5a16a19701612fc70c1

-----Decoded View---------------
Arg [0] : _wallet (address): 0x9348b1f02AE72383CE87c5a16A19701612fC70c1

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000009348b1f02ae72383ce87c5a16a19701612fc70c1


Deployed Bytecode Sourcemap

28388:10155:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35735:332;;;;;;;;;;-1:-1:-1;35735:332:0;;;;;:::i;:::-;;:::i;:::-;;4422:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29087:27;;;;;;;;;;-1:-1:-1;29087:27:0;;;;-1:-1:-1;;;;;29087:27:0;;;;;;-1:-1:-1;;;;;1038:32:1;;;1020:51;;1008:2;993:18;29087:27:0;855:222:1;6848:226:0;;;;;;;;;;-1:-1:-1;6848:226:0;;;;;:::i;:::-;;:::i;:::-;;;1703:14:1;;1696:22;1678:41;;1666:2;1651:18;6848:226:0;1538:187:1;28719:33:0;;;;;;;;;;-1:-1:-1;28719:33:0;;;;-1:-1:-1;;;;;28719:33:0;;;36646:230;;;;;;;;;;-1:-1:-1;36646:230:0;;;;;:::i;:::-;;:::i;5551:108::-;;;;;;;;;;-1:-1:-1;5639:12:0;;5551:108;;;2084:25:1;;;2072:2;2057:18;5551:108:0;1938:177:1;37663:110:0;;;;;;;;;;;;;:::i;36075:330::-;;;;;;;;;;-1:-1:-1;36075:330:0;;;;;:::i;:::-;;:::i;7654:295::-;;;;;;;;;;-1:-1:-1;7654:295:0;;;;;:::i;:::-;;:::i;5393:93::-;;;;;;;;;;-1:-1:-1;5393:93:0;;5476:2;2723:36:1;;2711:2;2696:18;5393:93:0;2581:184:1;8358:263:0;;;;;;;;;;-1:-1:-1;8358:263:0;;;;;:::i;:::-;;:::i;37981:217::-;;;;;;;;;;;;;:::i;36413:225::-;;;;;;;;;;-1:-1:-1;36413:225:0;;;;;:::i;:::-;;:::i;29059:21::-;;;;;;;;;;-1:-1:-1;29059:21:0;;;;;;;-1:-1:-1;;;;;29059:21:0;;;28949:33;;;;;;;;;;-1:-1:-1;28949:33:0;;;;;;;;38206:297;;;;;;;;;;-1:-1:-1;38206:297:0;;;;;:::i;:::-;;:::i;28428:46::-;;;;;;;;;;-1:-1:-1;28428:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28761:30;;;;;;;;;;;;;;;;28689:21;;;;;;;;;;;;;;;;28991:31;;;;;;;;;;-1:-1:-1;28991:31:0;;;;;;;;;;;5722:143;;;;;;;;;;-1:-1:-1;5722:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;5839:18:0;5812:7;5839:18;;;;;;;;;;;;5722:143;17210:150;;;;;;;;;;;;;:::i;37781:192::-;;;;;;;;;;;;;:::i;35067:272::-;;;;;;;;;;-1:-1:-1;35067:272:0;;;;;:::i;:::-;;:::i;28481:48::-;;;;;;;;;;-1:-1:-1;28481:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16996:79;;;;;;;;;;-1:-1:-1;17061:6:0;;-1:-1:-1;;;;;17061:6:0;16996:79;;4641:104;;;;;;;;;;;;;:::i;29123:43::-;;;;;;;;;;;;29161:5;29123:43;;35347:380;;;;;;;;;;-1:-1:-1;35347:380:0;;;;;:::i;:::-;;:::i;9124:498::-;;;;;;;;;;-1:-1:-1;9124:498:0;;;;;:::i;:::-;;:::i;6071:218::-;;;;;;;;;;-1:-1:-1;6071:218:0;;;;;:::i;:::-;;:::i;28572:41::-;;;;;;;;;;-1:-1:-1;28572:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28538:25;;;;;;;;;;-1:-1:-1;28538:25:0;;;;;;;;28622:29;;;;;;;;;;;;;;;;6352:176;;;;;;;;;;-1:-1:-1;6352:176:0;;;;;:::i;:::-;;:::i;28798:31::-;;;;;;;;;;;;;;;;17368:281;;;;;;;;;;-1:-1:-1;17368:281:0;;;;;:::i;:::-;;:::i;36884:771::-;;;;;;;;;;;;;:::i;28658:24::-;;;;;;;;;;;;;;;;35735:332;17123:6;;-1:-1:-1;;;;;17123:6:0;323:10;17123:22;17115:67;;;;-1:-1:-1;;;17115:67:0;;;;;;;:::i;:::-;;;;;;;;;35891:16:::1;5476:2:::0;35891::::1;:16;:::i;:::-;35882:4;35861:13;5639:12:::0;;;5551:108;35861:13:::1;:17;::::0;35877:1:::1;35861:17;:::i;:::-;35860:26;;;;:::i;:::-;35859:49;;;;:::i;:::-;35841:14;:67;;35819:124;;;::::0;-1:-1:-1;;;35819:124:0;;6398:2:1;35819:124:0::1;::::0;::::1;6380:21:1::0;6437:1;6417:18;;;6410:29;-1:-1:-1;;;6455:18:1;;;6448:37;6502:18;;35819:124:0::1;6196:330:1::0;35819:124:0::1;35989:16;5476:2:::0;35989::::1;:16;:::i;:::-;35971:35;::::0;:14;:35:::1;:::i;:::-;35954:14;:52:::0;;;36022:37:::1;::::0;2084:25:1;;;36022:37:0::1;::::0;2072:2:1;2057:18;36022:37:0::1;;;;;;;;35735:332:::0;:::o;4422:100::-;4476:13;4509:5;4502:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4422:100;:::o;6848:226::-;6956:4;323:10;7012:32;323:10;7028:7;7037:6;7012:8;:32::i;:::-;7062:4;7055:11;;;6848:226;;;;;:::o;36646:230::-;17123:6;;-1:-1:-1;;;;;17123:6:0;323:10;17123:22;17115:67;;;;-1:-1:-1;;;17115:67:0;;;;;;;:::i;:::-;36728:12:::1;:34:::0;;;36797:4:::1;36781:20:::0;::::1;;36773:51;;;::::0;-1:-1:-1;;;36773:51:0;;7118:2:1;36773:51:0::1;::::0;::::1;7100:21:1::0;7157:2;7137:18;;;7130:30;-1:-1:-1;;;7176:18:1;;;7169:48;7234:18;;36773:51:0::1;6916:342:1::0;36773:51:0::1;36840:28;36855:12;;36840:28;;;;2084:25:1::0;;2072:2;2057:18;;1938:177;37663:110:0;17123:6;;-1:-1:-1;;;;;17123:6:0;323:10;17123:22;17115:67;;;;-1:-1:-1;;;17115:67:0;;;;;;;:::i;:::-;37716:13:::1;:20:::0;;-1:-1:-1;;37716:20:0::1;37732:4;37716:20;::::0;;37747:11:::1;:18:::0;;-1:-1:-1;;37747:18:0::1;37716:20;37747:18;::::0;;37663:110::o;36075:330::-;17123:6;;-1:-1:-1;;;;;17123:6:0;323:10;17123:22;17115:67;;;;-1:-1:-1;;;17115:67:0;;;;;;;:::i;:::-;36244:16:::1;5476:2:::0;36244::::1;:16;:::i;:::-;36235:4;36213:13;5639:12:::0;;;5551:108;36213:13:::1;:18;::::0;36229:2:::1;36213:18;:::i;:::-;36212:27;;;;:::i;:::-;36211:50;;;;:::i;:::-;36176:14;:85;;36154:142;;;::::0;-1:-1:-1;;;36154:142:0;;6398:2:1;36154:142:0::1;::::0;::::1;6380:21:1::0;6437:1;6417:18;;;6410:29;-1:-1:-1;;;6455:18:1;;;6448:37;6502:18;;36154:142:0::1;6196:330:1::0;36154:142:0::1;36337:16;5476:2:::0;36337::::1;:16;:::i;:::-;36319:35;::::0;:14;:35:::1;:::i;:::-;36307:9;:47:::0;;;36370:27:::1;::::0;2084:25:1;;;36370:27:0::1;::::0;2072:2:1;2057:18;36370:27:0::1;1938:177:1::0;7654:295:0;7785:4;323:10;7843:38;7859:4;323:10;7874:6;7843:15;:38::i;:::-;7892:27;7902:4;7908:2;7912:6;7892:9;:27::i;:::-;7937:4;7930:11;;;7654:295;;;;;;:::o;8358:263::-;8471:4;323:10;8527:64;323:10;8543:7;8580:10;8552:25;323:10;8543:7;8552:9;:25::i;:::-;:38;;;;:::i;:::-;8527:8;:64::i;37981:217::-;17061:6;;-1:-1:-1;;;;;17061:6:0;38035:10;:21;38027:30;;;;;;38100:1;38076:21;:25;38068:60;;;;-1:-1:-1;;;38068:60:0;;7595:2:1;38068:60:0;;;7577:21:1;7634:2;7614:18;;;7607:30;-1:-1:-1;;;7653:18:1;;;7646:52;7715:18;;38068:60:0;7393:346:1;38068:60:0;38139:51;;38147:10;;38168:21;38139:51;;;;;;;;;38168:21;38147:10;38139:51;;;;;;;;;;;;;;;;;;;;;37981:217::o;36413:225::-;17123:6;;-1:-1:-1;;;;;17123:6:0;323:10;17123:22;17115:67;;;;-1:-1:-1;;;17115:67:0;;;;;;;:::i;:::-;36494:11:::1;:33:::0;;;36561:4:::1;36546:19:::0;::::1;;36538:50;;;::::0;-1:-1:-1;;;36538:50:0;;7118:2:1;36538:50:0::1;::::0;::::1;7100:21:1::0;7157:2;7137:18;;;7130:30;-1:-1:-1;;;7176:18:1;;;7169:48;7234:18;;36538:50:0::1;6916:342:1::0;36538:50:0::1;36604:26;36618:11;;36604:26;;;;2084:25:1::0;;2072:2;2057:18;;1938:177;38206:297:0;17123:6;;-1:-1:-1;;;;;17123:6:0;323:10;17123:22;17115:67;;;;-1:-1:-1;;;17115:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38295:20:0;::::1;38287:59;;;::::0;-1:-1:-1;;;38287:59:0;;7946:2:1;38287:59:0::1;::::0;::::1;7928:21:1::0;7985:2;7965:18;;;7958:30;8024:28;8004:18;;;7997:56;8070:18;;38287:59:0::1;7744:350:1::0;38287:59:0::1;38384:39;::::0;-1:-1:-1;;;38384:39:0;;38417:4:::1;38384:39;::::0;::::1;1020:51:1::0;38357:24:0::1;::::0;-1:-1:-1;;;;;38384:24:0;::::1;::::0;::::1;::::0;993:18:1;;38384:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38357:66;;38434:61;38464:6;38473:3;38478:16;38434:22;:61::i;:::-;38276:227;38206:297:::0;;:::o;17210:150::-;17123:6;;-1:-1:-1;;;;;17123:6:0;323:10;17123:22;17115:67;;;;-1:-1:-1;;;17115:67:0;;;;;;;:::i;:::-;17303:6:::1;::::0;17282:40:::1;::::0;17319:1:::1;::::0;-1:-1:-1;;;;;17303:6:0::1;::::0;17282:40:::1;::::0;17319:1;;17282:40:::1;17333:6;:19:::0;;-1:-1:-1;;;;;;17333:19:0::1;::::0;;17210:150::o;37781:192::-;17123:6;;-1:-1:-1;;;;;17123:6:0;323:10;17123:22;17115:67;;;;-1:-1:-1;;;17115:67:0;;;;;;;:::i;:::-;37835:14:::1;:22:::0;;-1:-1:-1;;37835:22:0::1;::::0;;5639:12;;37868:14:::1;:30:::0;5639:12;;37909:9:::1;:25:::0;37950:15:::1;::::0;::::1;::::0;;;::::1;37781:192::o:0;35067:272::-;17123:6;;-1:-1:-1;;;;;17123:6:0;323:10;17123:22;17115:67;;;;-1:-1:-1;;;17115:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35191:22:0;::::1;35183:47;;;::::0;-1:-1:-1;;;35183:47:0;;8490:2:1;35183:47:0::1;::::0;::::1;8472:21:1::0;8529:2;8509:18;;;8502:30;-1:-1:-1;;;8548:18:1;;;8541:42;8600:18;;35183:47:0::1;8288:336:1::0;35183:47:0::1;-1:-1:-1::0;;;;;35241:24:0;::::1;;::::0;;;:14:::1;:24;::::0;;;;;;;;:36;;-1:-1:-1;;35241:36:0::1;::::0;::::1;;::::0;;::::1;::::0;;;35293:38;;8797:51:1;;;8864:18;;;8857:50;35293:38:0::1;::::0;8770:18:1;35293:38:0::1;;;;;;;;35067:272:::0;;:::o;4641:104::-;4697:13;4730:7;4723:14;;;;;:::i;35347:380::-;17123:6;;-1:-1:-1;;;;;17123:6:0;323:10;17123:22;17115:67;;;;-1:-1:-1;;;17115:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35473:22:0;::::1;35465:47;;;::::0;-1:-1:-1;;;35465:47:0;;8490:2:1;35465:47:0::1;::::0;::::1;8472:21:1::0;8529:2;8509:18;;;8502:30;-1:-1:-1;;;8548:18:1;;;8541:42;8600:18;;35465:47:0::1;8288:336:1::0;35465:47:0::1;35528:9;35523:92;;35574:6;::::0;-1:-1:-1;;;;;35574:6:0;;;::::1;::::0;::::1;35562:18:::0;;::::1;::::0;35554:49:::1;;;::::0;-1:-1:-1;;;35554:49:0;;9120:2:1;35554:49:0::1;::::0;::::1;9102:21:1::0;9159:2;9139:18;;;9132:30;-1:-1:-1;;;9178:18:1;;;9171:48;9236:18;;35554:49:0::1;8918:342:1::0;35554:49:0::1;-1:-1:-1::0;;;;;35625:26:0;::::1;;::::0;;;:16:::1;:26;::::0;;;;;;;;:38;;-1:-1:-1;;35625:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;35679:40;;8797:51:1;;;8864:18;;;8857:50;35679:40:0::1;::::0;8770:18:1;35679:40:0::1;8629:284:1::0;9124:498:0;9242:4;323:10;9242:4;9325:25;323:10;9342:7;9325:9;:25::i;:::-;9298:52;;9403:15;9383:16;:35;;9361:122;;;;-1:-1:-1;;;9361:122:0;;9467:2:1;9361:122:0;;;9449:21:1;9506:2;9486:18;;;9479:30;9545:34;9525:18;;;9518:62;-1:-1:-1;;;9596:18:1;;;9589:35;9641:19;;9361:122:0;9265:401:1;9361:122:0;9519:60;9528:5;9535:7;9563:15;9544:16;:34;9519:8;:60::i;:::-;-1:-1:-1;9610:4:0;;9124:498;-1:-1:-1;;;;9124:498:0:o;6071:218::-;6175:4;323:10;6231:28;323:10;6248:2;6252:6;6231:9;:28::i;6352:176::-;-1:-1:-1;;;;;6493:18:0;;;6466:7;6493:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6352:176::o;17368:281::-;17123:6;;-1:-1:-1;;;;;17123:6:0;323:10;17123:22;17115:67;;;;-1:-1:-1;;;17115:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17471:22:0;::::1;17449:110;;;::::0;-1:-1:-1;;;17449:110:0;;9873:2:1;17449:110:0::1;::::0;::::1;9855:21:1::0;9912:2;9892:18;;;9885:30;9951:34;9931:18;;;9924:62;-1:-1:-1;;;10002:18:1;;;9995:36;10048:19;;17449:110:0::1;9671:402:1::0;17449:110:0::1;17596:6;::::0;17575:38:::1;::::0;-1:-1:-1;;;;;17575:38:0;;::::1;::::0;17596:6:::1;::::0;17575:38:::1;::::0;17596:6:::1;::::0;17575:38:::1;17624:6;:17:::0;;-1:-1:-1;;;;;;17624:17:0::1;-1:-1:-1::0;;;;;17624:17:0;;;::::1;::::0;;;::::1;::::0;;17368:281::o;36884:771::-;17123:6;;-1:-1:-1;;;;;17123:6:0;323:10;17123:22;17115:67;;;;-1:-1:-1;;;17115:67:0;;;;;;;:::i;:::-;36943:13:::1;::::0;::::1;;36942:14;36934:50;;;::::0;-1:-1:-1;;;36934:50:0;;10280:2:1;36934:50:0::1;::::0;::::1;10262:21:1::0;10319:2;10299:18;;;10292:30;10358:25;10338:18;;;10331:53;10401:18;;36934:50:0::1;10078:347:1::0;36934:50:0::1;37016:9;;;;;;;;;-1:-1:-1::0;;;;;37016:9:0::1;-1:-1:-1::0;;;;;37016:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;37004:43:0::1;;37070:4;37090:9;;;;;;;;;-1:-1:-1::0;;;;;37090:9:0::1;-1:-1:-1::0;;;;;37090:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37004:113;::::0;-1:-1:-1;;;;;;37004:113:0::1;::::0;;;;;;-1:-1:-1;;;;;10916:15:1;;;37004:113:0::1;::::0;::::1;10898:34:1::0;10968:15;;10948:18;;;10941:43;10833:18;;37004:113:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36995:6;:122:::0;;-1:-1:-1;;;;;;36995:122:0::1;::::0;-1:-1:-1;;;;;36995:122:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;37140:6;;::::1;::::0;::::1;-1:-1:-1::0;37130:17:0;;;:9:::1;:17;::::0;;;;;;;:24;;-1:-1:-1;;37130:24:0;;::::1;-1:-1:-1::0;37130:24:0;;::::1;::::0;;;37184:6;;;;;::::1;::::0;::::1;37167:24:::0;;:16:::1;:24:::0;;;;;:31;;;;::::1;;::::0;;37243:9:::1;::::0;37211:62:::1;::::0;37228:4:::1;::::0;37243:9:::1;-1:-1:-1::0;;37211:8:0::1;:62::i;:::-;37322:9;::::0;37284:64:::1;::::0;37301:10:::1;::::0;-1:-1:-1;;;;;37322:9:0::1;37334:13;5639:12:::0;;;5551:108;37284:64:::1;37361:9;::::0;-1:-1:-1;;;;;37361:9:0::1;:25;37394:21;37439:4;37459:24;37439:4:::0;-1:-1:-1;;;;;5839:18:0;5812:7;5839:18;;;;;;;;;;;;5722:143;37459:24:::1;37498:1;37514::::0;37530:7:::1;17061:6:::0;;-1:-1:-1;;;;;17061:6:0;;16996:79;37530:7:::1;37361:217;::::0;::::1;::::0;;;-1:-1:-1;;;;;;37361:217:0;;;-1:-1:-1;;;;;11354:15:1;;;37361:217:0::1;::::0;::::1;11336:34:1::0;11386:18;;;11379:34;;;;11429:18;;;11422:34;;;;11472:18;;;11465:34;11536:15;;;11515:19;;;11508:44;37552:15:0::1;11568:19:1::0;;;11561:35;11270:19;;37361:217:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;37596:6:0::1;::::0;37620:9:::1;::::0;37589:58:::1;::::0;-1:-1:-1;;;37589:58:0;;-1:-1:-1;;;;;37620:9:0;;::::1;37589:58;::::0;::::1;12092:51:1::0;-1:-1:-1;;12159:18:1;;;12152:34;37596:6:0;;;::::1;;::::0;-1:-1:-1;37589:22:0::1;::::0;12065:18:1;;37589:58:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14019:380::-:0;-1:-1:-1;;;;;14155:19:0;;14147:68;;;;-1:-1:-1;;;14147:68:0;;12649:2:1;14147:68:0;;;12631:21:1;12688:2;12668:18;;;12661:30;12727:34;12707:18;;;12700:62;-1:-1:-1;;;12778:18:1;;;12771:34;12822:19;;14147:68:0;12447:400:1;14147:68:0;-1:-1:-1;;;;;14234:21:0;;14226:68;;;;-1:-1:-1;;;14226:68:0;;13054:2:1;14226:68:0;;;13036:21:1;13093:2;13073:18;;;13066:30;13132:34;13112:18;;;13105:62;-1:-1:-1;;;13183:18:1;;;13176:32;13225:19;;14226:68:0;12852:398:1;14226:68:0;-1:-1:-1;;;;;14307:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14359:32;;2084:25:1;;;14359:32:0;;2057:18:1;14359:32:0;;;;;;;14019:380;;;:::o;14690:502::-;14825:24;14852:25;14862:5;14869:7;14852:9;:25::i;:::-;14825:52;;-1:-1:-1;;14892:16:0;:37;14888:297;;14992:6;14972:16;:26;;14946:117;;;;-1:-1:-1;;;14946:117:0;;13457:2:1;14946:117:0;;;13439:21:1;13496:2;13476:18;;;13469:30;13535:31;13515:18;;;13508:59;13584:18;;14946:117:0;13255:353:1;14946:117:0;15107:51;15116:5;15123:7;15151:6;15132:16;:25;15107:8;:51::i;:::-;14814:378;14690:502;;;:::o;30976:324::-;31108:34;31125:4;31131:2;31135:6;31108:16;:34::i;:::-;31160:11;;;;;;;31159:12;;:24;;-1:-1:-1;31175:8:0;;;;;;;31159:24;31155:37;;;30976:324;;;:::o;31155:37::-;31214:32;31229:4;31235:2;31239:6;31214:14;:32::i;:::-;31204:42;;;;:::i;:::-;;;31259:33;31275:4;31281:2;31285:6;31259:15;:33::i;24692:214::-;24829:58;;;-1:-1:-1;;;;;12110:32:1;;24829:58:0;;;12092:51:1;12159:18;;;;12152:34;;;24829:58:0;;;;;;;;;;12065:18:1;;;;24829:58:0;;;;;;;;-1:-1:-1;;;;;24829:58:0;-1:-1:-1;;;24829:58:0;;;24775:123;;24809:5;;24775:19;:123::i;31308:1335::-;31401:13;;;;31396:173;;-1:-1:-1;;;;;31457:20:0;;;;;;:14;:20;;;;;;;;;:42;;-1:-1:-1;;;;;;31481:18:0;;;;;;:14;:18;;;;;;;;31457:42;31431:126;;;;-1:-1:-1;;;31431:126:0;;13948:2:1;31431:126:0;;;13930:21:1;13987:2;13967:18;;;13960:30;-1:-1:-1;;;14006:18:1;;;13999:52;14068:18;;31431:126:0;13746:346:1;31431:126:0;31586:11;;;;;;;31585:12;;:24;;-1:-1:-1;31601:8:0;;;;;;;31585:24;31581:111;;;31626:33;31642:4;31648:2;31652:6;31626:15;:33::i;31581:111::-;31708:14;;;;31704:932;;;-1:-1:-1;;;;;31763:15:0;;;;;;:9;:15;;;;;;;;:40;;;;-1:-1:-1;;;;;;31783:20:0;;;;;;:16;:20;;;;;;;;31782:21;31763:40;31759:866;;;31864:14;;31854:6;:24;;31824:127;;;;-1:-1:-1;;;31824:127:0;;14299:2:1;31824:127:0;;;14281:21:1;14338:2;14318:18;;;14311:30;14377:31;14357:18;;;14350:59;14426:18;;31824:127:0;14097:353:1;31824:127:0;32026:9;;-1:-1:-1;;;;;5839:18:0;;5812:7;5839:18;;;;;;;;;;;32000:22;;:6;:22;:::i;:::-;:35;;31970:136;;;;-1:-1:-1;;;31970:136:0;;14657:2:1;31970:136:0;;;14639:21:1;14696:2;14676:18;;;14669:30;14735:29;14715:18;;;14708:57;14782:18;;31970:136:0;14455:351:1;31970:136:0;32125:8;:10;;;:8;:10;;;:::i;:::-;;;;;;38276:227:::1;38206:297:::0;;:::o;31759:866::-;-1:-1:-1;;;;;32195:13:0;;;;;;:9;:13;;;;;;;;:40;;;;-1:-1:-1;;;;;;32213:22:0;;;;;;:16;:22;;;;;;;;32212:23;32195:40;32191:434;;;32296:14;;32286:6;:24;;32256:149;;;;-1:-1:-1;;;32256:149:0;;15153:2:1;32256:149:0;;;15135:21:1;15192:2;15172:18;;;15165:30;15231:34;15211:18;;;15204:62;-1:-1:-1;;;15282:18:1;;;15275:49;15341:19;;32256:149:0;14951:415:1;32191:434:0;-1:-1:-1;;;;;32432:20:0;;;;;;:16;:20;;;;;;;;32427:198;;32529:9;;-1:-1:-1;;;;;5839:18:0;;5812:7;5839:18;;;;;;;;;;;32503:22;;:6;:22;:::i;:::-;:35;;32473:136;;;;-1:-1:-1;;;32473:136:0;;14657:2:1;32473:136:0;;;14639:21:1;14696:2;14676:18;;;14669:30;14735:29;14715:18;;;14708:57;14782:18;;32473:136:0;14455:351:1;32651:1261:0;32807:11;;32769:7;;32807:11;;;;;:24;;;;-1:-1:-1;32823:8:0;;;;;;;32822:9;32807:24;:41;;;;-1:-1:-1;;;;;;32835:13:0;;;;;;:9;:13;;;;;;;;32807:41;:66;;;;-1:-1:-1;;;;;;32853:20:0;;;;;;:14;:20;;;;;;;;32852:21;32807:66;32789:200;;;32900:8;:15;;-1:-1:-1;;32900:15:0;;;;;32930:16;32939:6;32930:8;:16::i;:::-;32961:8;:16;;-1:-1:-1;;32961:16:0;;;32789:200;-1:-1:-1;;;;;33035:20:0;;33001:12;33035:20;;;:14;:20;;;;;;33016:4;;33035:20;;33031:68;;;-1:-1:-1;33082:5:0;33031:68;33125:6;33164:739;;;;-1:-1:-1;;;;;;33218:13:0;;33198:1;33218:13;;;:9;:13;;;;;;;;33214:445;;;29161:5;33326:8;;33315;;:19;:47;;33352:10;;33315:47;;;33337:12;;33315:47;33280:83;;:6;:83;:::i;:::-;33279:120;;;;:::i;:::-;33252:147;;33214:445;;;-1:-1:-1;;;;;33461:15:0;;;;;;:9;:15;;;;;;;;33457:202;;;29161:5;33571:8;;33560;;:19;:46;;33596:10;;33560:46;;;33582:11;;33560:46;33525:82;;:6;:82;:::i;:::-;33524:119;;;;:::i;:::-;33497:146;;33457:202;33677:7;;33673:89;;33705:41;33721:4;33735;33742:3;33705:15;:41::i;:::-;33783:3;-1:-1:-1;33776:10:0;;-1:-1:-1;33776:10:0;33164:739;33819:49;33843:4;33857;33864:3;33819:23;:49::i;:::-;33890:1;33883:8;;;;;;10092:877;-1:-1:-1;;;;;10223:18:0;;10215:68;;;;-1:-1:-1;;;10215:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10302:16:0;;10294:64;;;;-1:-1:-1;;;10294:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10444:15:0;;10422:19;10444:15;;;;;;;;;;;10492:21;;;;10470:109;;;;-1:-1:-1;;;10470:109:0;;16383:2:1;10470:109:0;;;16365:21:1;16422:2;16402:18;;;16395:30;16461:34;16441:18;;;16434:62;-1:-1:-1;;;16512:18:1;;;16505:36;16558:19;;10470:109:0;16181:402:1;10470:109:0;-1:-1:-1;;;;;10615:15:0;;;:9;:15;;;;;;;;;;;10633:20;;;10615:38;;10833:13;;;;;;;;;;:23;;;;;;10885:26;;2084:25:1;;;10833:13:0;;10885:26;;2057:18:1;10885:26:0;;;;;;;;10924:37;38206:297;25207:419;25288:23;25314:106;25356:4;25314:106;;;;;;;;;;;;;;;;;25322:5;-1:-1:-1;;;;;25314:27:0;;;:106;;;;;:::i;:::-;25435:17;;25288:132;;-1:-1:-1;25435:21:0;25431:188;;25510:10;25499:30;;;;;;;;;;;;:::i;:::-;25473:134;;;;-1:-1:-1;;;25473:134:0;;16790:2:1;25473:134:0;;;16772:21:1;16829:2;16809:18;;;16802:30;16868:34;16848:18;;;16841:62;-1:-1:-1;;;16919:18:1;;;16912:40;16969:19;;25473:134:0;16588:406:1;34319:604:0;34416:4;34372:23;5839:18;;;;;;;;;;;;34470:19;;;;;:47;;;34511:6;;34493:15;:24;34470:47;34466:281;;;-1:-1:-1;34549:15:0;34466:281;;;34610:6;;34601;:15;34597:139;;;-1:-1:-1;34652:6:0;;34597:139;;;-1:-1:-1;34714:6:0;34597:139;34763:19;;34759:55;;34784:30;34801:12;34784:16;:30::i;:::-;34856:21;34888:27;34856:21;34888:7;:27::i;12820:763::-;-1:-1:-1;;;;;12959:18:0;;12951:68;;;;-1:-1:-1;;;12951:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13038:16:0;;13030:64;;;;-1:-1:-1;;;13030:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13180:15:0;;;13158:19;13180:15;;;;;;;;;;;;;13251:20;;;13233:38;;;13458:13;;;;;;;:23;;13265:6;;13158:19;13458:23;;13265:6;;13458:23;:::i;:::-;;;;;;;;13514:2;-1:-1:-1;;;;;13499:26:0;13508:4;-1:-1:-1;;;;;13499:26:0;;13518:6;13499:26;;;;2084:25:1;;2072:2;2057:18;;1938:177;18517:229:0;18654:12;18686:52;18708:6;18716:4;18722:1;18725:12;18686:21;:52::i;:::-;18679:59;18517:229;-1:-1:-1;;;;18517:229:0:o;33920:391::-;34007:16;;;34021:1;34007:16;;;;;;;;33983:21;;34007:16;;;;;;;;;;-1:-1:-1;34007:16:0;33983:40;;34052:4;34034;34039:1;34034:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34034:23:0;;;:7;;;;;;;;;;:23;;;;34086:9;;:16;;;-1:-1:-1;;;34086:16:0;;;;:9;;;;;:14;;:16;;;;;34034:7;;34086:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34068:4;34073:1;34068:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34068:35:0;;;:7;;;;;;;;;:35;34116:9;;:187;;-1:-1:-1;;;34116:187:0;;:9;;;:60;;:187;;34191:8;;34116:9;;34230:4;;34257;;34277:15;;34116:187;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33972:339;33920:391;:::o;34931:104::-;34991:18;;34983:44;;-1:-1:-1;;;;;34991:18:0;;;;34983:44;;;;;35020:6;;34991:18;34983:44;34991:18;34983:44;35020:6;34991:18;34983:44;;;;;;;;;;;;;;;;;;;;;34931:104;:::o;19733:612::-;19903:12;19975:5;19950:21;:30;;19928:118;;;;-1:-1:-1;;;19928:118:0;;18450:2:1;19928:118:0;;;18432:21:1;18489:2;18469:18;;;18462:30;18528:34;18508:18;;;18501:62;-1:-1:-1;;;18579:18:1;;;18572:36;18625:19;;19928:118:0;18248:402:1;19928:118:0;20058:12;20072:23;20099:6;-1:-1:-1;;;;;20099:11:0;20118:5;20139:4;20099:55;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20057:97;;;;20185:152;20230:6;20255:7;20281:10;20310:12;20185:26;:152::i;:::-;20165:172;19733:612;-1:-1:-1;;;;;;;19733:612:0:o;22863:644::-;23048:12;23077:7;23073:427;;;23105:10;:17;23126:1;23105:22;23101:290;;-1:-1:-1;;;;;17763:19:0;;;23315:60;;;;-1:-1:-1;;;23315:60:0;;19149:2:1;23315:60:0;;;19131:21:1;19188:2;19168:18;;;19161:30;19227:31;19207:18;;;19200:59;19276:18;;23315:60:0;18947:353:1;23315:60:0;-1:-1:-1;23412:10:0;23405:17;;23073:427;23455:33;23463:10;23475:12;24235:17;;:21;24231:388;;24467:10;24461:17;24524:15;24511:10;24507:2;24503:19;24496:44;24231:388;24594:12;24587:20;;-1:-1:-1;;;24587:20:0;;;;;;;;:::i;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:250::-;284:1;294:113;308:6;305:1;302:13;294:113;;;384:11;;;378:18;365:11;;;358:39;330:2;323:10;294:113;;;-1:-1:-1;;441:1:1;423:16;;416:27;199:250::o;454:396::-;603:2;592:9;585:21;566:4;635:6;629:13;678:6;673:2;662:9;658:18;651:34;694:79;766:6;761:2;750:9;746:18;741:2;733:6;729:15;694:79;:::i;:::-;834:2;813:15;-1:-1:-1;;809:29:1;794:45;;;;841:2;790:54;;454:396;-1:-1:-1;;454:396:1:o;1082:131::-;-1:-1:-1;;;;;1157:31:1;;1147:42;;1137:70;;1203:1;1200;1193:12;1218:315;1286:6;1294;1347:2;1335:9;1326:7;1322:23;1318:32;1315:52;;;1363:1;1360;1353:12;1315:52;1402:9;1389:23;1421:31;1446:5;1421:31;:::i;:::-;1471:5;1523:2;1508:18;;;;1495:32;;-1:-1:-1;;;1218:315:1:o;2120:456::-;2197:6;2205;2213;2266:2;2254:9;2245:7;2241:23;2237:32;2234:52;;;2282:1;2279;2272:12;2234:52;2321:9;2308:23;2340:31;2365:5;2340:31;:::i;:::-;2390:5;-1:-1:-1;2447:2:1;2432:18;;2419:32;2460:33;2419:32;2460:33;:::i;:::-;2120:456;;2512:7;;-1:-1:-1;;;2566:2:1;2551:18;;;;2538:32;;2120:456::o;2770:388::-;2838:6;2846;2899:2;2887:9;2878:7;2874:23;2870:32;2867:52;;;2915:1;2912;2905:12;2867:52;2954:9;2941:23;2973:31;2998:5;2973:31;:::i;:::-;3023:5;-1:-1:-1;3080:2:1;3065:18;;3052:32;3093:33;3052:32;3093:33;:::i;:::-;3145:7;3135:17;;;2770:388;;;;;:::o;3163:247::-;3222:6;3275:2;3263:9;3254:7;3250:23;3246:32;3243:52;;;3291:1;3288;3281:12;3243:52;3330:9;3317:23;3349:31;3374:5;3349:31;:::i;3415:118::-;3501:5;3494:13;3487:21;3480:5;3477:32;3467:60;;3523:1;3520;3513:12;3538:382;3603:6;3611;3664:2;3652:9;3643:7;3639:23;3635:32;3632:52;;;3680:1;3677;3670:12;3632:52;3719:9;3706:23;3738:31;3763:5;3738:31;:::i;:::-;3788:5;-1:-1:-1;3845:2:1;3830:18;;3817:32;3858:30;3817:32;3858:30;:::i;3925:356::-;4127:2;4109:21;;;4146:18;;;4139:30;4205:34;4200:2;4185:18;;4178:62;4272:2;4257:18;;3925:356::o;4286:127::-;4347:10;4342:3;4338:20;4335:1;4328:31;4378:4;4375:1;4368:15;4402:4;4399:1;4392:15;4418:422;4507:1;4550:5;4507:1;4564:270;4585:7;4575:8;4572:21;4564:270;;;4644:4;4640:1;4636:6;4632:17;4626:4;4623:27;4620:53;;;4653:18;;:::i;:::-;4703:7;4693:8;4689:22;4686:55;;;4723:16;;;;4686:55;4802:22;;;;4762:15;;;;4564:270;;;4568:3;4418:422;;;;;:::o;4845:806::-;4894:5;4924:8;4914:80;;-1:-1:-1;4965:1:1;4979:5;;4914:80;5013:4;5003:76;;-1:-1:-1;5050:1:1;5064:5;;5003:76;5095:4;5113:1;5108:59;;;;5181:1;5176:130;;;;5088:218;;5108:59;5138:1;5129:10;;5152:5;;;5176:130;5213:3;5203:8;5200:17;5197:43;;;5220:18;;:::i;:::-;-1:-1:-1;;5276:1:1;5262:16;;5291:5;;5088:218;;5390:2;5380:8;5377:16;5371:3;5365:4;5362:13;5358:36;5352:2;5342:8;5339:16;5334:2;5328:4;5325:12;5321:35;5318:77;5315:159;;;-1:-1:-1;5427:19:1;;;5459:5;;5315:159;5506:34;5531:8;5525:4;5506:34;:::i;:::-;5576:6;5572:1;5568:6;5564:19;5555:7;5552:32;5549:58;;;5587:18;;:::i;:::-;5625:20;;4845:806;-1:-1:-1;;;4845:806:1:o;5656:140::-;5714:5;5743:47;5784:4;5774:8;5770:19;5764:4;5743:47;:::i;5801:168::-;5874:9;;;5905;;5922:15;;;5916:22;;5902:37;5892:71;;5943:18;;:::i;5974:217::-;6014:1;6040;6030:132;;6084:10;6079:3;6075:20;6072:1;6065:31;6119:4;6116:1;6109:15;6147:4;6144:1;6137:15;6030:132;-1:-1:-1;6176:9:1;;5974:217::o;6531:380::-;6610:1;6606:12;;;;6653;;;6674:61;;6728:4;6720:6;6716:17;6706:27;;6674:61;6781:2;6773:6;6770:14;6750:18;6747:38;6744:161;;6827:10;6822:3;6818:20;6815:1;6808:31;6862:4;6859:1;6852:15;6890:4;6887:1;6880:15;6744:161;;6531:380;;;:::o;7263:125::-;7328:9;;;7349:10;;;7346:36;;;7362:18;;:::i;8099:184::-;8169:6;8222:2;8210:9;8201:7;8197:23;8193:32;8190:52;;;8238:1;8235;8228:12;8190:52;-1:-1:-1;8261:16:1;;8099:184;-1:-1:-1;8099:184:1:o;10430:251::-;10500:6;10553:2;10541:9;10532:7;10528:23;10524:32;10521:52;;;10569:1;10566;10559:12;10521:52;10601:9;10595:16;10620:31;10645:5;10620:31;:::i;11607:306::-;11695:6;11703;11711;11764:2;11752:9;11743:7;11739:23;11735:32;11732:52;;;11780:1;11777;11770:12;11732:52;11809:9;11803:16;11793:26;;11859:2;11848:9;11844:18;11838:25;11828:35;;11903:2;11892:9;11888:18;11882:25;11872:35;;11607:306;;;;;:::o;12197:245::-;12264:6;12317:2;12305:9;12296:7;12292:23;12288:32;12285:52;;;12333:1;12330;12323:12;12285:52;12365:9;12359:16;12384:28;12406:5;12384:28;:::i;13613:128::-;13680:9;;;13701:11;;;13698:37;;;13715:18;;:::i;14811:135::-;14850:3;14871:17;;;14868:43;;14891:18;;:::i;:::-;-1:-1:-1;14938:1:1;14927:13;;14811:135::o;15371:401::-;15573:2;15555:21;;;15612:2;15592:18;;;15585:30;15651:34;15646:2;15631:18;;15624:62;-1:-1:-1;;;15717:2:1;15702:18;;15695:35;15762:3;15747:19;;15371:401::o;15777:399::-;15979:2;15961:21;;;16018:2;15998:18;;;15991:30;16057:34;16052:2;16037:18;;16030:62;-1:-1:-1;;;16123:2:1;16108:18;;16101:33;16166:3;16151:19;;15777:399::o;17131:127::-;17192:10;17187:3;17183:20;17180:1;17173:31;17223:4;17220:1;17213:15;17247:4;17244:1;17237:15;17263:980;17525:4;17573:3;17562:9;17558:19;17604:6;17593:9;17586:25;17630:2;17668:6;17663:2;17652:9;17648:18;17641:34;17711:3;17706:2;17695:9;17691:18;17684:31;17735:6;17770;17764:13;17801:6;17793;17786:22;17839:3;17828:9;17824:19;17817:26;;17878:2;17870:6;17866:15;17852:29;;17899:1;17909:195;17923:6;17920:1;17917:13;17909:195;;;17988:13;;-1:-1:-1;;;;;17984:39:1;17972:52;;18079:15;;;;18044:12;;;;18020:1;17938:9;17909:195;;;-1:-1:-1;;;;;;;18160:32:1;;;;18155:2;18140:18;;18133:60;-1:-1:-1;;;18224:3:1;18209:19;18202:35;18121:3;17263:980;-1:-1:-1;;;17263:980:1:o;18655:287::-;18784:3;18822:6;18816:13;18838:66;18897:6;18892:3;18885:4;18877:6;18873:17;18838:66;:::i;:::-;18920:16;;;;;18655:287;-1:-1:-1;;18655:287:1:o

Swarm Source

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