ETH Price: $2,415.89 (-0.09%)
 

Overview

Max Total Supply

1,000,000,000,000 MOCHI

Holders

76,414

Total Transfers

-

Market

Price

$0.00 @ 0.000000 ETH (-5.91%)

Onchain Market Cap

$9,040,000.00

Circulating Supply Market Cap

$9,041,823.00

Other Info

Token Contract (WITH 18 Decimals)

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

OVERVIEW

The cutest cat in crypto. Named after the CEO of Coinbase's cat.

Market

Volume (24H):$400,041.00
Market Capitalization:$9,041,823.00
Circulating Supply:1,000,000,000,000.00 MOCHI
Market Data Source: Coinmarketcap

Contract Source Code Verified (Exact Match)

Contract Name:
MOCHI

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
No with 200 runs

Other Settings:
paris EvmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at basescan.org on 2023-11-09
*/

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


// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol)
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)
/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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);

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

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

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

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


// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)





/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 */
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);
}


// OpenZeppelin Contracts (last updated v5.0.0) (utils/Context.sol)



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

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


// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)


/**
 * @dev Standard ERC20 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens.
 */
interface IERC20Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC20InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC20InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     * @param allowance Amount of tokens a `spender` is allowed to operate with.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC20InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC20InvalidSpender(address spender);
}

/**
 * @dev Standard ERC721 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens.
 */
interface IERC721Errors {
    /**
     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20.
     * Used in balance queries.
     * @param owner Address of the current owner of a token.
     */
    error ERC721InvalidOwner(address owner);

    /**
     * @dev Indicates a `tokenId` whose `owner` is the zero address.
     * @param tokenId Identifier number of a token.
     */
    error ERC721NonexistentToken(uint256 tokenId);

    /**
     * @dev Indicates an error related to the ownership over a particular token. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param tokenId Identifier number of a token.
     * @param owner Address of the current owner of a token.
     */
    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC721InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC721InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param tokenId Identifier number of a token.
     */
    error ERC721InsufficientApproval(address operator, uint256 tokenId);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC721InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC721InvalidOperator(address operator);
}

/**
 * @dev Standard ERC1155 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens.
 */
interface IERC1155Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     * @param tokenId Identifier number of a token.
     */
    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC1155InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC1155InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param owner Address of the current owner of a token.
     */
    error ERC1155MissingApprovalForAll(address operator, address owner);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC1155InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC1155InvalidOperator(address operator);

    /**
     * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.
     * Used in batch transfers.
     * @param idsLength Length of the array of token identifiers
     * @param valuesLength Length of the array of token amounts
     */
    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}


/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 */
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
    mapping(address account => uint256) private _balances;

    mapping(address account => mapping(address spender => 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 returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual 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 returns (uint8) {
        return 18;
    }

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

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual 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 `value`.
     */
    function transfer(address to, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, value);
        return true;
    }

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `value` 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 value) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, value);
        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 `value`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `value`.
     */
    function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, value);
        _transfer(from, to, value);
        return true;
    }

    /**
     * @dev Moves a `value` 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.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _transfer(address from, address to, uint256 value) internal {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(from, to, value);
    }

    /**
     * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`
     * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
     * this function.
     *
     * Emits a {Transfer} event.
     */
    function _update(address from, address to, uint256 value) internal virtual {
        if (from == address(0)) {
            // Overflow check required: The rest of the code assumes that totalSupply never overflows
            _totalSupply += value;
        } else {
            uint256 fromBalance = _balances[from];
            if (fromBalance < value) {
                revert ERC20InsufficientBalance(from, fromBalance, value);
            }
            unchecked {
                // Overflow not possible: value <= fromBalance <= totalSupply.
                _balances[from] = fromBalance - value;
            }
        }

        if (to == address(0)) {
            unchecked {
                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
                _totalSupply -= value;
            }
        } else {
            unchecked {
                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }

    /**
     * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
     * Relies on the `_update` mechanism
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _mint(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(address(0), account, value);
    }

    /**
     * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.
     * Relies on the `_update` mechanism.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead
     */
    function _burn(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        _update(account, address(0), value);
    }

    /**
     * @dev Sets `value` 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.
     *
     * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
     */
    function _approve(address owner, address spender, uint256 value) internal {
        _approve(owner, spender, value, true);
    }

    /**
     * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.
     *
     * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by
     * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any
     * `Approval` event during `transferFrom` operations.
     *
     * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to
     * true using the following override:
     * ```
     * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {
     *     super._approve(owner, spender, value, true);
     * }
     * ```
     *
     * Requirements are the same as {_approve}.
     */
    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
        if (owner == address(0)) {
            revert ERC20InvalidApprover(address(0));
        }
        if (spender == address(0)) {
            revert ERC20InvalidSpender(address(0));
        }
        _allowances[owner][spender] = value;
        if (emitEvent) {
            emit Approval(owner, spender, value);
        }
    }

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


// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)





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

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

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

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

interface IUniswapV2Router {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

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

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

contract MOCHI is Ownable, ERC20 {
    uint256 public constant MAX_FEE = 0.03e18;

    IUniswapV2Router public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool public initialized;
    bool public taxEnabled = true;
    bool private isSwappingBack;

    uint256 public swapTokensAtAmount;
    uint256 public buyTotalFees = 0.03e18;
    uint256 public sellTotalFees = 0.03e18;

    mapping(address => bool) public isExcludedFromFees;
    mapping(address => bool) public automatedMarketMakerPairs;

    event ExcludeFromFees(address account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address pair, bool value);

    constructor(address multisig, IUniswapV2Router _router) Ownable(multisig) ERC20("Mochi", "MOCHI") {
        _mint(multisig, 1_000_000_000_000 ether);

        swapTokensAtAmount = totalSupply() / 1000;

        uniswapV2Router = _router;

        uniswapV2Pair = IUniswapV2Factory(_router.factory()).createPair(address(this), _router.WETH());

        _setAutomatedMarketMakerPair(uniswapV2Pair, true);
        _approve(address(this), address(uniswapV2Router), type(uint256).max);
        _excludeFromFees(address(this), true);
    }

    function _transferOwnership(address newOwner) internal override {
        if (newOwner == address(0)) require(!taxEnabled, "tax is enabled");

        address oldOwner = owner();
        if (oldOwner != address(0)) {
            _excludeFromFees(oldOwner, false);
        }
        _excludeFromFees(newOwner, true);
        super._transferOwnership(newOwner);
    }

    function addLiquidity(uint256 amountTokenMin, uint256 amountETHMin, uint256 deadline) external payable onlyOwner {
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this), balanceOf(address(this)), amountTokenMin, amountETHMin, owner(), deadline
        );
    }

    function setTaxEnabled(bool value) external onlyOwner {
        taxEnabled = value;
    }

    function setSwapTokensAtAmount(uint256 amount) external onlyOwner {
        uint256 _totalSupply = totalSupply();
        require(amount >= (_totalSupply * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(amount <= (_totalSupply * 5) / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        swapTokensAtAmount = amount;
    }

    function setBuyFees(uint256 _buyFee) external onlyOwner {
        require(_buyFee <= MAX_FEE, "Must keep fees at 3% or less");
        buyTotalFees = _buyFee;
    }

    function setSellFees(uint256 _sellFee) external onlyOwner {
        require(_sellFee <= MAX_FEE, "Must keep fees at 3% or less");
        sellTotalFees = _sellFee;
    }

    function _excludeFromFees(address account, bool value) internal {
        isExcludedFromFees[account] = value;
        emit ExcludeFromFees(account, value);
    }

    function excludeFromFees(address account, bool value) external onlyOwner {
        _excludeFromFees(account, value);
    }

    function bulkExcludeFromFees(address[] calldata accounts, bool value) external onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            _excludeFromFees(accounts[i], value);
        }
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) internal {
        automatedMarketMakerPairs[pair] = value;
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        _setAutomatedMarketMakerPair(pair, value);
    }

    function _update(address from, address to, uint256 amount) internal override {
        bool takeFee = taxEnabled && !isSwappingBack && !(isExcludedFromFees[from] || isExcludedFromFees[to]);

        if (takeFee) {
            uint256 fees = 0;
            // on sell
            if (automatedMarketMakerPairs[to]) {
                fees = amount * sellTotalFees / 1e18;
            }
            // on buy
            else if (automatedMarketMakerPairs[from]) {
                fees = amount * buyTotalFees / 1e18;
            }

            if (fees > 0) {
                amount -= fees;
                super._update(from, address(this), fees);
            }
        }

        if (takeFee && !automatedMarketMakerPairs[from] && balanceOf(address(this)) >= swapTokensAtAmount) {
            isSwappingBack = true;
            _swapBack();
            isSwappingBack = false;
        }

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

    function _swapBack() internal {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        uint256 maxSwapAmount = swapTokensAtAmount * 10;
        uint256 swapAmount = balanceOf(address(this));

        if (swapAmount > maxSwapAmount) {
            swapAmount = maxSwapAmount;
        }

        uniswapV2Router.swapExactTokensForETH(swapAmount, 0, path, owner(), block.timestamp);
    }

    function withdrawStuckTokens(address tkn) external onlyOwner {
        if (tkn == address(0)) {
            (bool success,) = address(msg.sender).call{value: address(this).balance}("");
            require(success, "transfer failed");
        } else {
            require(IERC20(tkn).balanceOf(address(this)) > 0, "No tokens");
            uint256 amount = IERC20(tkn).balanceOf(address(this));
            IERC20(tkn).transfer(msg.sender, amount);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"multisig","type":"address"},{"internalType":"contract IUniswapV2Router","name":"_router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"bulkExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellFee","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setTaxEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tkn","type":"address"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c06040526001600660016101000a81548160ff021916908315150217905550666a94d74f430000600855666a94d74f4300006009553480156200004257600080fd5b5060405162004b1138038062004b1183398181016040528101906200006891906200121b565b6040518060400160405280600581526020017f4d6f6368690000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4d4f43484900000000000000000000000000000000000000000000000000000081525083600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200014a5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040162000141919062001273565b60405180910390fd5b6200015b81620003f760201b60201c565b5081600490816200016d91906200150a565b5080600590816200017f91906200150a565b505050620001a1826c0c9f2c9cd04674edea400000006200050560201b60201c565b6103e8620001b46200059260201b60201c565b620001c091906200164f565b6007819055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000246573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026c919062001687565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002d4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002fa919062001687565b6040518363ffffffff1660e01b815260040162000319929190620016b9565b6020604051808303816000875af115801562000339573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035f919062001687565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003a760a05160016200059c60201b60201c565b620003dc306080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200063260201b60201c565b620003ef3060016200064c60201b60201c565b505062001c4b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200048057600660019054906101000a900460ff16156200047f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004769062001747565b60405180910390fd5b5b600062000492620006e260201b60201c565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614620004dd57620004dc8160006200064c60201b60201c565b5b620004f08260016200064c60201b60201c565b62000501826200070b60201b60201c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200057a5760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040162000571919062001273565b60405180910390fd5b6200058e60008383620007cf60201b60201c565b5050565b6000600354905090565b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab82826040516200062692919062001786565b60405180910390a15050565b62000647838383600162000abb60201b60201c565b505050565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78282604051620006d692919062001786565b60405180910390a15050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600660019054906101000a900460ff168015620007fb5750600660029054906101000a900460ff16155b8015620008a75750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680620008a55750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b155b90508015620009de576000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156200093257670de0b6b3a7640000600954846200091e9190620017b3565b6200092a91906200164f565b9050620009ae565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615620009ad57670de0b6b3a7640000600854846200099e9190620017b3565b620009aa91906200164f565b90505b5b6000811115620009dc578083620009c69190620017fe565b9250620009db85308362000c9b60201b60201c565b5b505b80801562000a365750600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801562000a55575060075462000a523062000ece60201b60201c565b10155b1562000aa2576001600660026101000a81548160ff02191690831515021790555062000a8662000f1760201b60201c565b6000600660026101000a81548160ff0219169083151502179055505b62000ab584848462000c9b60201b60201c565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160362000b305760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040162000b27919062001273565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000ba55760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040162000b9c919062001273565b60405180910390fd5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550801562000c95578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405162000c8c91906200184a565b60405180910390a35b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000cf157806003600082825462000ce4919062001867565b9250508190555062000dc9565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101562000d81578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040162000d7893929190620018a2565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000e14578060036000828254039250508190555062000e62565b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000ec191906200184a565b60405180910390a3505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600267ffffffffffffffff81111562000f375762000f366200129b565b5b60405190808252806020026020018201604052801562000f665781602001602082028036833780820191505090505b509050308160008151811062000f815762000f80620018df565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001009573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200102f919062001687565b81600181518110620010465762001045620018df565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000600a600754620010939190620017b3565b90506000620010a83062000ece60201b60201c565b905081811115620010b7578190505b60805173ffffffffffffffffffffffffffffffffffffffff166318cbafe582600086620010e9620006e260201b60201c565b426040518663ffffffff1660e01b81526004016200110c95949392919062001a1f565b6000604051808303816000875af11580156200112c573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019062001157919062001bfa565b50505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200119e8262001171565b9050919050565b620011b08162001191565b8114620011bc57600080fd5b50565b600081519050620011d081620011a5565b92915050565b6000620011e38262001191565b9050919050565b620011f581620011d6565b81146200120157600080fd5b50565b6000815190506200121581620011ea565b92915050565b6000806040838503121562001235576200123462001167565b5b60006200124585828601620011bf565b9250506020620012588582860162001204565b9150509250929050565b6200126d8162001191565b82525050565b60006020820190506200128a600083018462001262565b92915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200131257607f821691505b602082108103620013285762001327620012ca565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620013927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262001353565b6200139e868362001353565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620013eb620013e5620013df84620013b6565b620013c0565b620013b6565b9050919050565b6000819050919050565b6200140783620013ca565b6200141f6200141682620013f2565b84845462001360565b825550505050565b600090565b6200143662001427565b62001443818484620013fc565b505050565b5b818110156200146b576200145f6000826200142c565b60018101905062001449565b5050565b601f821115620014ba5762001484816200132e565b6200148f8462001343565b810160208510156200149f578190505b620014b7620014ae8562001343565b83018262001448565b50505b505050565b600082821c905092915050565b6000620014df60001984600802620014bf565b1980831691505092915050565b6000620014fa8383620014cc565b9150826002028217905092915050565b620015158262001290565b67ffffffffffffffff8111156200153157620015306200129b565b5b6200153d8254620012f9565b6200154a8282856200146f565b600060209050601f8311600181146200158257600084156200156d578287015190505b620015798582620014ec565b865550620015e9565b601f19841662001592866200132e565b60005b82811015620015bc5784890151825560018201915060208501945060208101905062001595565b86831015620015dc5784890151620015d8601f891682620014cc565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200165c82620013b6565b91506200166983620013b6565b9250826200167c576200167b620015f1565b5b828204905092915050565b600060208284031215620016a0576200169f62001167565b5b6000620016b084828501620011bf565b91505092915050565b6000604082019050620016d0600083018562001262565b620016df602083018462001262565b9392505050565b600082825260208201905092915050565b7f74617820697320656e61626c6564000000000000000000000000000000000000600082015250565b60006200172f600e83620016e6565b91506200173c82620016f7565b602082019050919050565b60006020820190508181036000830152620017628162001720565b9050919050565b60008115159050919050565b620017808162001769565b82525050565b60006040820190506200179d600083018562001262565b620017ac602083018462001775565b9392505050565b6000620017c082620013b6565b9150620017cd83620013b6565b9250828202620017dd81620013b6565b91508282048414831517620017f757620017f662001620565b5b5092915050565b60006200180b82620013b6565b91506200181883620013b6565b925082820390508181111562001833576200183262001620565b5b92915050565b6200184481620013b6565b82525050565b600060208201905062001861600083018462001839565b92915050565b60006200187482620013b6565b91506200188183620013b6565b92508282019050808211156200189c576200189b62001620565b5b92915050565b6000606082019050620018b9600083018662001262565b620018c8602083018562001839565b620018d7604083018462001839565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600062001939620019336200192d846200190e565b620013c0565b620013b6565b9050919050565b6200194b8162001918565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b620019888162001191565b82525050565b60006200199c83836200197d565b60208301905092915050565b6000602082019050919050565b6000620019c28262001951565b620019ce81856200195c565b9350620019db836200196d565b8060005b8381101562001a12578151620019f688826200198e565b975062001a0383620019a8565b925050600181019050620019df565b5085935050505092915050565b600060a08201905062001a36600083018862001839565b62001a45602083018762001940565b818103604083015262001a598186620019b5565b905062001a6a606083018562001262565b62001a79608083018462001839565b9695505050505050565b600080fd5b6000601f19601f8301169050919050565b62001aa48262001a88565b810181811067ffffffffffffffff8211171562001ac65762001ac56200129b565b5b80604052505050565b600062001adb6200115d565b905062001ae9828262001a99565b919050565b600067ffffffffffffffff82111562001b0c5762001b0b6200129b565b5b602082029050602081019050919050565b600080fd5b62001b2d81620013b6565b811462001b3957600080fd5b50565b60008151905062001b4d8162001b22565b92915050565b600062001b6a62001b648462001aee565b62001acf565b9050808382526020820190506020840283018581111562001b905762001b8f62001b1d565b5b835b8181101562001bbd578062001ba8888262001b3c565b84526020840193505060208101905062001b92565b5050509392505050565b600082601f83011262001bdf5762001bde62001a83565b5b815162001bf184826020860162001b53565b91505092915050565b60006020828403121562001c135762001c1262001167565b5b600082015167ffffffffffffffff81111562001c345762001c336200116c565b5b62001c428482850162001bc7565b91505092915050565b60805160a051612e8b62001c8660003960006109ab01526000818161087f015281816108ed01528181611d650152611e6e0152612e8b6000f3fe6080604052600436106101d85760003560e01c80638da5cb5b11610102578063c024666811610095578063dcf7aef311610064578063dcf7aef3146106a1578063dd62ed3e146106ca578063e2f4560514610707578063f2fde38b14610732576101d8565b8063c0246668146105fb578063c6af580b14610624578063cb9637281461064d578063d85ba06314610676576101d8565b8063a9059cbb116100d1578063a9059cbb1461052d578063afa4f3b21461056a578063b62496f514610593578063bc063e1a146105d0576101d8565b80638da5cb5b1461048557806395927c25146104b057806395d89b41146104d95780639a7a23d614610504576101d8565b8063313ce5671161017a5780636a486a8e116101495780636a486a8e146103db57806370a0823114610406578063715018a614610443578063870bd30b1461045a576101d8565b8063313ce5671461032c578063422f10431461035757806349bd5a5e146103735780634fbee1931461039e576101d8565b8063158ef93e116101b6578063158ef93e1461026e5780631694505e1461029957806318160ddd146102c457806323b872dd146102ef576101d8565b806306fdde03146101dd578063095ea7b314610208578063155ca7c114610245575b600080fd5b3480156101e957600080fd5b506101f261075b565b6040516101ff9190611fb3565b60405180910390f35b34801561021457600080fd5b5061022f600480360381019061022a919061207d565b6107ed565b60405161023c91906120d8565b60405180910390f35b34801561025157600080fd5b5061026c60048036038101906102679190612184565b610810565b005b34801561027a57600080fd5b5061028361086a565b60405161029091906120d8565b60405180910390f35b3480156102a557600080fd5b506102ae61087d565b6040516102bb9190612243565b60405180910390f35b3480156102d057600080fd5b506102d96108a1565b6040516102e6919061226d565b60405180910390f35b3480156102fb57600080fd5b5061031660048036038101906103119190612288565b6108ab565b60405161032391906120d8565b60405180910390f35b34801561033857600080fd5b506103416108da565b60405161034e91906122f7565b60405180910390f35b610371600480360381019061036c9190612312565b6108e3565b005b34801561037f57600080fd5b506103886109a9565b6040516103959190612374565b60405180910390f35b3480156103aa57600080fd5b506103c560048036038101906103c0919061238f565b6109cd565b6040516103d291906120d8565b60405180910390f35b3480156103e757600080fd5b506103f06109ed565b6040516103fd919061226d565b60405180910390f35b34801561041257600080fd5b5061042d6004803603810190610428919061238f565b6109f3565b60405161043a919061226d565b60405180910390f35b34801561044f57600080fd5b50610458610a3c565b005b34801561046657600080fd5b5061046f610a50565b60405161047c91906120d8565b60405180910390f35b34801561049157600080fd5b5061049a610a63565b6040516104a79190612374565b60405180910390f35b3480156104bc57600080fd5b506104d760048036038101906104d291906123bc565b610a8c565b005b3480156104e557600080fd5b506104ee610ae8565b6040516104fb9190611fb3565b60405180910390f35b34801561051057600080fd5b5061052b600480360381019061052691906123e9565b610b7a565b005b34801561053957600080fd5b50610554600480360381019061054f919061207d565b610b90565b60405161056191906120d8565b60405180910390f35b34801561057657600080fd5b50610591600480360381019061058c91906123bc565b610bb3565b005b34801561059f57600080fd5b506105ba60048036038101906105b5919061238f565b610c8b565b6040516105c791906120d8565b60405180910390f35b3480156105dc57600080fd5b506105e5610cab565b6040516105f2919061226d565b60405180910390f35b34801561060757600080fd5b50610622600480360381019061061d91906123e9565b610cb6565b005b34801561063057600080fd5b5061064b60048036038101906106469190612429565b610ccc565b005b34801561065957600080fd5b50610674600480360381019061066f919061238f565b610cf1565b005b34801561068257600080fd5b5061068b610f9d565b604051610698919061226d565b60405180910390f35b3480156106ad57600080fd5b506106c860048036038101906106c391906123bc565b610fa3565b005b3480156106d657600080fd5b506106f160048036038101906106ec9190612456565b610fff565b6040516106fe919061226d565b60405180910390f35b34801561071357600080fd5b5061071c611086565b604051610729919061226d565b60405180910390f35b34801561073e57600080fd5b506107596004803603810190610754919061238f565b61108c565b005b60606004805461076a906124c5565b80601f0160208091040260200160405190810160405280929190818152602001828054610796906124c5565b80156107e35780601f106107b8576101008083540402835291602001916107e3565b820191906000526020600020905b8154815290600101906020018083116107c657829003601f168201915b5050505050905090565b6000806107f8611112565b905061080581858561111a565b600191505092915050565b61081861112c565b60005b838390508110156108645761085784848381811061083c5761083b6124f6565b5b9050602002016020810190610851919061238f565b836111b3565b808060010191505061081b565b50505050565b600660009054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600354905090565b6000806108b6611112565b90506108c3858285611247565b6108ce8585856112db565b60019150509392505050565b60006012905090565b6108eb61112c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7194730610932306109f3565b878761093c610a63565b886040518863ffffffff1660e01b815260040161095e96959493929190612525565b60606040518083038185885af115801561097c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906109a1919061259b565b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a6020528060005260406000206000915054906101000a900460ff1681565b60095481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a4461112c565b610a4e60006113cf565b565b600660019054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610a9461112c565b666a94d74f430000811115610ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad59061263a565b60405180910390fd5b8060098190555050565b606060058054610af7906124c5565b80601f0160208091040260200160405190810160405280929190818152602001828054610b23906124c5565b8015610b705780601f10610b4557610100808354040283529160200191610b70565b820191906000526020600020905b815481529060010190602001808311610b5357829003601f168201915b5050505050905090565b610b8261112c565b610b8c82826114b8565b5050565b600080610b9b611112565b9050610ba88185856112db565b600191505092915050565b610bbb61112c565b6000610bc56108a1565b9050620186a0600182610bd89190612689565b610be291906126fa565b821015610c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1b9061279d565b60405180910390fd5b6103e8600582610c349190612689565b610c3e91906126fa565b821115610c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c779061282f565b60405180910390fd5b816007819055505050565b600b6020528060005260406000206000915054906101000a900460ff1681565b666a94d74f43000081565b610cbe61112c565b610cc882826111b3565b5050565b610cd461112c565b80600660016101000a81548160ff02191690831515021790555050565b610cf961112c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ddf5760003373ffffffffffffffffffffffffffffffffffffffff1647604051610d5390612880565b60006040518083038185875af1925050503d8060008114610d90576040519150601f19603f3d011682016040523d82523d6000602084013e610d95565b606091505b5050905080610dd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd0906128e1565b60405180910390fd5b50610f9a565b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e1a9190612374565b602060405180830381865afa158015610e37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5b9190612901565b11610e9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e929061297a565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610ed69190612374565b602060405180830381865afa158015610ef3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f179190612901565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610f5492919061299a565b6020604051808303816000875af1158015610f73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9791906129d8565b50505b50565b60085481565b610fab61112c565b666a94d74f430000811115610ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fec9061263a565b60405180910390fd5b8060088190555050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60075481565b61109461112c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111065760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016110fd9190612374565b60405180910390fd5b61110f816113cf565b50565b600033905090565b611127838383600161154c565b505050565b611134611112565b73ffffffffffffffffffffffffffffffffffffffff16611152610a63565b73ffffffffffffffffffffffffffffffffffffffff16146111b157611175611112565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016111a89190612374565b60405180910390fd5b565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7828260405161123b929190612a05565b60405180910390a15050565b60006112538484610fff565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146112d557818110156112c5578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016112bc93929190612a2e565b60405180910390fd5b6112d48484848403600061154c565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361134d5760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016113449190612374565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113bf5760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016113b69190612374565b60405180910390fd5b6113ca838383611723565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361145457600660019054906101000a900460ff1615611453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144a90612ab1565b60405180910390fd5b5b600061145e610a63565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146114a05761149f8160006111b3565b5b6114ab8260016111b3565b6114b4826119da565b5050565b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab8282604051611540929190612a05565b60405180910390a15050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036115be5760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016115b59190612374565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036116305760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016116279190612374565b60405180910390fd5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550801561171d578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611714919061226d565b60405180910390a35b50505050565b6000600660019054906101000a900460ff16801561174e5750600660029054906101000a900460ff16155b80156117f85750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806117f65750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b155b90508015611918576000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561187c57670de0b6b3a76400006009548461186b9190612689565b61187591906126fa565b90506118f3565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156118f257670de0b6b3a7640000600854846118e59190612689565b6118ef91906126fa565b90505b5b60008111156119165780836119089190612ad1565b9250611915853083611a9e565b5b505b80801561196f5750600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156119855750600754611982306109f3565b10155b156119c9576001600660026101000a81548160ff0219169083151502179055506119ad611cc6565b6000600660026101000a81548160ff0219169083151502179055505b6119d4848484611a9e565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611af0578060036000828254611ae49190612b05565b92505081905550611bc5565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611b7d578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401611b7493929190612a2e565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c0e5780600360008282540392505081905550611c5c565b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611cb9919061226d565b60405180910390a3505050565b6000600267ffffffffffffffff811115611ce357611ce2612b39565b5b604051908082528060200260200182016040528015611d115781602001602082028036833780820191505090505b5090503081600081518110611d2957611d286124f6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df29190612b7d565b81600181518110611e0657611e056124f6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000600a600754611e519190612689565b90506000611e5e306109f3565b905081811115611e6c578190505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318cbafe582600086611eb4610a63565b426040518663ffffffff1660e01b8152600401611ed5959493929190612ca3565b6000604051808303816000875af1158015611ef4573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611f1d9190612e0c565b50505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611f5d578082015181840152602081019050611f42565b60008484015250505050565b6000601f19601f8301169050919050565b6000611f8582611f23565b611f8f8185611f2e565b9350611f9f818560208601611f3f565b611fa881611f69565b840191505092915050565b60006020820190508181036000830152611fcd8184611f7a565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061201482611fe9565b9050919050565b61202481612009565b811461202f57600080fd5b50565b6000813590506120418161201b565b92915050565b6000819050919050565b61205a81612047565b811461206557600080fd5b50565b60008135905061207781612051565b92915050565b6000806040838503121561209457612093611fdf565b5b60006120a285828601612032565b92505060206120b385828601612068565b9150509250929050565b60008115159050919050565b6120d2816120bd565b82525050565b60006020820190506120ed60008301846120c9565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612118576121176120f3565b5b8235905067ffffffffffffffff811115612135576121346120f8565b5b602083019150836020820283011115612151576121506120fd565b5b9250929050565b612161816120bd565b811461216c57600080fd5b50565b60008135905061217e81612158565b92915050565b60008060006040848603121561219d5761219c611fdf565b5b600084013567ffffffffffffffff8111156121bb576121ba611fe4565b5b6121c786828701612102565b935093505060206121da8682870161216f565b9150509250925092565b6000819050919050565b60006122096122046121ff84611fe9565b6121e4565b611fe9565b9050919050565b600061221b826121ee565b9050919050565b600061222d82612210565b9050919050565b61223d81612222565b82525050565b60006020820190506122586000830184612234565b92915050565b61226781612047565b82525050565b6000602082019050612282600083018461225e565b92915050565b6000806000606084860312156122a1576122a0611fdf565b5b60006122af86828701612032565b93505060206122c086828701612032565b92505060406122d186828701612068565b9150509250925092565b600060ff82169050919050565b6122f1816122db565b82525050565b600060208201905061230c60008301846122e8565b92915050565b60008060006060848603121561232b5761232a611fdf565b5b600061233986828701612068565b935050602061234a86828701612068565b925050604061235b86828701612068565b9150509250925092565b61236e81612009565b82525050565b60006020820190506123896000830184612365565b92915050565b6000602082840312156123a5576123a4611fdf565b5b60006123b384828501612032565b91505092915050565b6000602082840312156123d2576123d1611fdf565b5b60006123e084828501612068565b91505092915050565b60008060408385031215612400576123ff611fdf565b5b600061240e85828601612032565b925050602061241f8582860161216f565b9150509250929050565b60006020828403121561243f5761243e611fdf565b5b600061244d8482850161216f565b91505092915050565b6000806040838503121561246d5761246c611fdf565b5b600061247b85828601612032565b925050602061248c85828601612032565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806124dd57607f821691505b6020821081036124f0576124ef612496565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060c08201905061253a6000830189612365565b612547602083018861225e565b612554604083018761225e565b612561606083018661225e565b61256e6080830185612365565b61257b60a083018461225e565b979650505050505050565b60008151905061259581612051565b92915050565b6000806000606084860312156125b4576125b3611fdf565b5b60006125c286828701612586565b93505060206125d386828701612586565b92505060406125e486828701612586565b9150509250925092565b7f4d757374206b6565702066656573206174203325206f72206c65737300000000600082015250565b6000612624601c83611f2e565b915061262f826125ee565b602082019050919050565b6000602082019050818103600083015261265381612617565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061269482612047565b915061269f83612047565b92508282026126ad81612047565b915082820484148315176126c4576126c361265a565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061270582612047565b915061271083612047565b9250826127205761271f6126cb565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000612787603583611f2e565b91506127928261272b565b604082019050919050565b600060208201905081810360008301526127b68161277a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000612819603483611f2e565b9150612824826127bd565b604082019050919050565b600060208201905081810360008301526128488161280c565b9050919050565b600081905092915050565b50565b600061286a60008361284f565b91506128758261285a565b600082019050919050565b600061288b8261285d565b9150819050919050565b7f7472616e73666572206661696c65640000000000000000000000000000000000600082015250565b60006128cb600f83611f2e565b91506128d682612895565b602082019050919050565b600060208201905081810360008301526128fa816128be565b9050919050565b60006020828403121561291757612916611fdf565b5b600061292584828501612586565b91505092915050565b7f4e6f20746f6b656e730000000000000000000000000000000000000000000000600082015250565b6000612964600983611f2e565b915061296f8261292e565b602082019050919050565b6000602082019050818103600083015261299381612957565b9050919050565b60006040820190506129af6000830185612365565b6129bc602083018461225e565b9392505050565b6000815190506129d281612158565b92915050565b6000602082840312156129ee576129ed611fdf565b5b60006129fc848285016129c3565b91505092915050565b6000604082019050612a1a6000830185612365565b612a2760208301846120c9565b9392505050565b6000606082019050612a436000830186612365565b612a50602083018561225e565b612a5d604083018461225e565b949350505050565b7f74617820697320656e61626c6564000000000000000000000000000000000000600082015250565b6000612a9b600e83611f2e565b9150612aa682612a65565b602082019050919050565b60006020820190508181036000830152612aca81612a8e565b9050919050565b6000612adc82612047565b9150612ae783612047565b9250828203905081811115612aff57612afe61265a565b5b92915050565b6000612b1082612047565b9150612b1b83612047565b9250828201905080821115612b3357612b3261265a565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050612b778161201b565b92915050565b600060208284031215612b9357612b92611fdf565b5b6000612ba184828501612b68565b91505092915050565b6000819050919050565b6000612bcf612bca612bc584612baa565b6121e4565b612047565b9050919050565b612bdf81612bb4565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612c1a81612009565b82525050565b6000612c2c8383612c11565b60208301905092915050565b6000602082019050919050565b6000612c5082612be5565b612c5a8185612bf0565b9350612c6583612c01565b8060005b83811015612c96578151612c7d8882612c20565b9750612c8883612c38565b925050600181019050612c69565b5085935050505092915050565b600060a082019050612cb8600083018861225e565b612cc56020830187612bd6565b8181036040830152612cd78186612c45565b9050612ce66060830185612365565b612cf3608083018461225e565b9695505050505050565b612d0682611f69565b810181811067ffffffffffffffff82111715612d2557612d24612b39565b5b80604052505050565b6000612d38611fd5565b9050612d448282612cfd565b919050565b600067ffffffffffffffff821115612d6457612d63612b39565b5b602082029050602081019050919050565b6000612d88612d8384612d49565b612d2e565b90508083825260208201905060208402830185811115612dab57612daa6120fd565b5b835b81811015612dd45780612dc08882612586565b845260208401935050602081019050612dad565b5050509392505050565b600082601f830112612df357612df26120f3565b5b8151612e03848260208601612d75565b91505092915050565b600060208284031215612e2257612e21611fdf565b5b600082015167ffffffffffffffff811115612e4057612e3f611fe4565b5b612e4c84828501612dde565b9150509291505056fea264697066735822122053d0726db61be3b614f7c1de652b500ba8a8c3df8d57c49b33bbc8db79911e0464736f6c63430008160033000000000000000000000000d9a59239bb964a57454f4584f841b85e6ca3c5860000000000000000000000006bded42c6da8fbf0d2ba55b2fa120c5e0c8d7891

Deployed Bytecode

0x6080604052600436106101d85760003560e01c80638da5cb5b11610102578063c024666811610095578063dcf7aef311610064578063dcf7aef3146106a1578063dd62ed3e146106ca578063e2f4560514610707578063f2fde38b14610732576101d8565b8063c0246668146105fb578063c6af580b14610624578063cb9637281461064d578063d85ba06314610676576101d8565b8063a9059cbb116100d1578063a9059cbb1461052d578063afa4f3b21461056a578063b62496f514610593578063bc063e1a146105d0576101d8565b80638da5cb5b1461048557806395927c25146104b057806395d89b41146104d95780639a7a23d614610504576101d8565b8063313ce5671161017a5780636a486a8e116101495780636a486a8e146103db57806370a0823114610406578063715018a614610443578063870bd30b1461045a576101d8565b8063313ce5671461032c578063422f10431461035757806349bd5a5e146103735780634fbee1931461039e576101d8565b8063158ef93e116101b6578063158ef93e1461026e5780631694505e1461029957806318160ddd146102c457806323b872dd146102ef576101d8565b806306fdde03146101dd578063095ea7b314610208578063155ca7c114610245575b600080fd5b3480156101e957600080fd5b506101f261075b565b6040516101ff9190611fb3565b60405180910390f35b34801561021457600080fd5b5061022f600480360381019061022a919061207d565b6107ed565b60405161023c91906120d8565b60405180910390f35b34801561025157600080fd5b5061026c60048036038101906102679190612184565b610810565b005b34801561027a57600080fd5b5061028361086a565b60405161029091906120d8565b60405180910390f35b3480156102a557600080fd5b506102ae61087d565b6040516102bb9190612243565b60405180910390f35b3480156102d057600080fd5b506102d96108a1565b6040516102e6919061226d565b60405180910390f35b3480156102fb57600080fd5b5061031660048036038101906103119190612288565b6108ab565b60405161032391906120d8565b60405180910390f35b34801561033857600080fd5b506103416108da565b60405161034e91906122f7565b60405180910390f35b610371600480360381019061036c9190612312565b6108e3565b005b34801561037f57600080fd5b506103886109a9565b6040516103959190612374565b60405180910390f35b3480156103aa57600080fd5b506103c560048036038101906103c0919061238f565b6109cd565b6040516103d291906120d8565b60405180910390f35b3480156103e757600080fd5b506103f06109ed565b6040516103fd919061226d565b60405180910390f35b34801561041257600080fd5b5061042d6004803603810190610428919061238f565b6109f3565b60405161043a919061226d565b60405180910390f35b34801561044f57600080fd5b50610458610a3c565b005b34801561046657600080fd5b5061046f610a50565b60405161047c91906120d8565b60405180910390f35b34801561049157600080fd5b5061049a610a63565b6040516104a79190612374565b60405180910390f35b3480156104bc57600080fd5b506104d760048036038101906104d291906123bc565b610a8c565b005b3480156104e557600080fd5b506104ee610ae8565b6040516104fb9190611fb3565b60405180910390f35b34801561051057600080fd5b5061052b600480360381019061052691906123e9565b610b7a565b005b34801561053957600080fd5b50610554600480360381019061054f919061207d565b610b90565b60405161056191906120d8565b60405180910390f35b34801561057657600080fd5b50610591600480360381019061058c91906123bc565b610bb3565b005b34801561059f57600080fd5b506105ba60048036038101906105b5919061238f565b610c8b565b6040516105c791906120d8565b60405180910390f35b3480156105dc57600080fd5b506105e5610cab565b6040516105f2919061226d565b60405180910390f35b34801561060757600080fd5b50610622600480360381019061061d91906123e9565b610cb6565b005b34801561063057600080fd5b5061064b60048036038101906106469190612429565b610ccc565b005b34801561065957600080fd5b50610674600480360381019061066f919061238f565b610cf1565b005b34801561068257600080fd5b5061068b610f9d565b604051610698919061226d565b60405180910390f35b3480156106ad57600080fd5b506106c860048036038101906106c391906123bc565b610fa3565b005b3480156106d657600080fd5b506106f160048036038101906106ec9190612456565b610fff565b6040516106fe919061226d565b60405180910390f35b34801561071357600080fd5b5061071c611086565b604051610729919061226d565b60405180910390f35b34801561073e57600080fd5b506107596004803603810190610754919061238f565b61108c565b005b60606004805461076a906124c5565b80601f0160208091040260200160405190810160405280929190818152602001828054610796906124c5565b80156107e35780601f106107b8576101008083540402835291602001916107e3565b820191906000526020600020905b8154815290600101906020018083116107c657829003601f168201915b5050505050905090565b6000806107f8611112565b905061080581858561111a565b600191505092915050565b61081861112c565b60005b838390508110156108645761085784848381811061083c5761083b6124f6565b5b9050602002016020810190610851919061238f565b836111b3565b808060010191505061081b565b50505050565b600660009054906101000a900460ff1681565b7f0000000000000000000000006bded42c6da8fbf0d2ba55b2fa120c5e0c8d789181565b6000600354905090565b6000806108b6611112565b90506108c3858285611247565b6108ce8585856112db565b60019150509392505050565b60006012905090565b6108eb61112c565b7f0000000000000000000000006bded42c6da8fbf0d2ba55b2fa120c5e0c8d789173ffffffffffffffffffffffffffffffffffffffff1663f305d7194730610932306109f3565b878761093c610a63565b886040518863ffffffff1660e01b815260040161095e96959493929190612525565b60606040518083038185885af115801561097c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906109a1919061259b565b505050505050565b7f000000000000000000000000be09692245268b607c3029469d14be06191a056681565b600a6020528060005260406000206000915054906101000a900460ff1681565b60095481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a4461112c565b610a4e60006113cf565b565b600660019054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610a9461112c565b666a94d74f430000811115610ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad59061263a565b60405180910390fd5b8060098190555050565b606060058054610af7906124c5565b80601f0160208091040260200160405190810160405280929190818152602001828054610b23906124c5565b8015610b705780601f10610b4557610100808354040283529160200191610b70565b820191906000526020600020905b815481529060010190602001808311610b5357829003601f168201915b5050505050905090565b610b8261112c565b610b8c82826114b8565b5050565b600080610b9b611112565b9050610ba88185856112db565b600191505092915050565b610bbb61112c565b6000610bc56108a1565b9050620186a0600182610bd89190612689565b610be291906126fa565b821015610c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1b9061279d565b60405180910390fd5b6103e8600582610c349190612689565b610c3e91906126fa565b821115610c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c779061282f565b60405180910390fd5b816007819055505050565b600b6020528060005260406000206000915054906101000a900460ff1681565b666a94d74f43000081565b610cbe61112c565b610cc882826111b3565b5050565b610cd461112c565b80600660016101000a81548160ff02191690831515021790555050565b610cf961112c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ddf5760003373ffffffffffffffffffffffffffffffffffffffff1647604051610d5390612880565b60006040518083038185875af1925050503d8060008114610d90576040519150601f19603f3d011682016040523d82523d6000602084013e610d95565b606091505b5050905080610dd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd0906128e1565b60405180910390fd5b50610f9a565b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e1a9190612374565b602060405180830381865afa158015610e37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5b9190612901565b11610e9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e929061297a565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610ed69190612374565b602060405180830381865afa158015610ef3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f179190612901565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610f5492919061299a565b6020604051808303816000875af1158015610f73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9791906129d8565b50505b50565b60085481565b610fab61112c565b666a94d74f430000811115610ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fec9061263a565b60405180910390fd5b8060088190555050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60075481565b61109461112c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111065760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016110fd9190612374565b60405180910390fd5b61110f816113cf565b50565b600033905090565b611127838383600161154c565b505050565b611134611112565b73ffffffffffffffffffffffffffffffffffffffff16611152610a63565b73ffffffffffffffffffffffffffffffffffffffff16146111b157611175611112565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016111a89190612374565b60405180910390fd5b565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7828260405161123b929190612a05565b60405180910390a15050565b60006112538484610fff565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146112d557818110156112c5578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016112bc93929190612a2e565b60405180910390fd5b6112d48484848403600061154c565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361134d5760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016113449190612374565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113bf5760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016113b69190612374565b60405180910390fd5b6113ca838383611723565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361145457600660019054906101000a900460ff1615611453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144a90612ab1565b60405180910390fd5b5b600061145e610a63565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146114a05761149f8160006111b3565b5b6114ab8260016111b3565b6114b4826119da565b5050565b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab8282604051611540929190612a05565b60405180910390a15050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036115be5760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016115b59190612374565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036116305760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016116279190612374565b60405180910390fd5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550801561171d578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611714919061226d565b60405180910390a35b50505050565b6000600660019054906101000a900460ff16801561174e5750600660029054906101000a900460ff16155b80156117f85750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806117f65750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b155b90508015611918576000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561187c57670de0b6b3a76400006009548461186b9190612689565b61187591906126fa565b90506118f3565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156118f257670de0b6b3a7640000600854846118e59190612689565b6118ef91906126fa565b90505b5b60008111156119165780836119089190612ad1565b9250611915853083611a9e565b5b505b80801561196f5750600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156119855750600754611982306109f3565b10155b156119c9576001600660026101000a81548160ff0219169083151502179055506119ad611cc6565b6000600660026101000a81548160ff0219169083151502179055505b6119d4848484611a9e565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611af0578060036000828254611ae49190612b05565b92505081905550611bc5565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611b7d578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401611b7493929190612a2e565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c0e5780600360008282540392505081905550611c5c565b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611cb9919061226d565b60405180910390a3505050565b6000600267ffffffffffffffff811115611ce357611ce2612b39565b5b604051908082528060200260200182016040528015611d115781602001602082028036833780820191505090505b5090503081600081518110611d2957611d286124f6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000006bded42c6da8fbf0d2ba55b2fa120c5e0c8d789173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df29190612b7d565b81600181518110611e0657611e056124f6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000600a600754611e519190612689565b90506000611e5e306109f3565b905081811115611e6c578190505b7f0000000000000000000000006bded42c6da8fbf0d2ba55b2fa120c5e0c8d789173ffffffffffffffffffffffffffffffffffffffff166318cbafe582600086611eb4610a63565b426040518663ffffffff1660e01b8152600401611ed5959493929190612ca3565b6000604051808303816000875af1158015611ef4573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611f1d9190612e0c565b50505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611f5d578082015181840152602081019050611f42565b60008484015250505050565b6000601f19601f8301169050919050565b6000611f8582611f23565b611f8f8185611f2e565b9350611f9f818560208601611f3f565b611fa881611f69565b840191505092915050565b60006020820190508181036000830152611fcd8184611f7a565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061201482611fe9565b9050919050565b61202481612009565b811461202f57600080fd5b50565b6000813590506120418161201b565b92915050565b6000819050919050565b61205a81612047565b811461206557600080fd5b50565b60008135905061207781612051565b92915050565b6000806040838503121561209457612093611fdf565b5b60006120a285828601612032565b92505060206120b385828601612068565b9150509250929050565b60008115159050919050565b6120d2816120bd565b82525050565b60006020820190506120ed60008301846120c9565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612118576121176120f3565b5b8235905067ffffffffffffffff811115612135576121346120f8565b5b602083019150836020820283011115612151576121506120fd565b5b9250929050565b612161816120bd565b811461216c57600080fd5b50565b60008135905061217e81612158565b92915050565b60008060006040848603121561219d5761219c611fdf565b5b600084013567ffffffffffffffff8111156121bb576121ba611fe4565b5b6121c786828701612102565b935093505060206121da8682870161216f565b9150509250925092565b6000819050919050565b60006122096122046121ff84611fe9565b6121e4565b611fe9565b9050919050565b600061221b826121ee565b9050919050565b600061222d82612210565b9050919050565b61223d81612222565b82525050565b60006020820190506122586000830184612234565b92915050565b61226781612047565b82525050565b6000602082019050612282600083018461225e565b92915050565b6000806000606084860312156122a1576122a0611fdf565b5b60006122af86828701612032565b93505060206122c086828701612032565b92505060406122d186828701612068565b9150509250925092565b600060ff82169050919050565b6122f1816122db565b82525050565b600060208201905061230c60008301846122e8565b92915050565b60008060006060848603121561232b5761232a611fdf565b5b600061233986828701612068565b935050602061234a86828701612068565b925050604061235b86828701612068565b9150509250925092565b61236e81612009565b82525050565b60006020820190506123896000830184612365565b92915050565b6000602082840312156123a5576123a4611fdf565b5b60006123b384828501612032565b91505092915050565b6000602082840312156123d2576123d1611fdf565b5b60006123e084828501612068565b91505092915050565b60008060408385031215612400576123ff611fdf565b5b600061240e85828601612032565b925050602061241f8582860161216f565b9150509250929050565b60006020828403121561243f5761243e611fdf565b5b600061244d8482850161216f565b91505092915050565b6000806040838503121561246d5761246c611fdf565b5b600061247b85828601612032565b925050602061248c85828601612032565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806124dd57607f821691505b6020821081036124f0576124ef612496565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060c08201905061253a6000830189612365565b612547602083018861225e565b612554604083018761225e565b612561606083018661225e565b61256e6080830185612365565b61257b60a083018461225e565b979650505050505050565b60008151905061259581612051565b92915050565b6000806000606084860312156125b4576125b3611fdf565b5b60006125c286828701612586565b93505060206125d386828701612586565b92505060406125e486828701612586565b9150509250925092565b7f4d757374206b6565702066656573206174203325206f72206c65737300000000600082015250565b6000612624601c83611f2e565b915061262f826125ee565b602082019050919050565b6000602082019050818103600083015261265381612617565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061269482612047565b915061269f83612047565b92508282026126ad81612047565b915082820484148315176126c4576126c361265a565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061270582612047565b915061271083612047565b9250826127205761271f6126cb565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000612787603583611f2e565b91506127928261272b565b604082019050919050565b600060208201905081810360008301526127b68161277a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000612819603483611f2e565b9150612824826127bd565b604082019050919050565b600060208201905081810360008301526128488161280c565b9050919050565b600081905092915050565b50565b600061286a60008361284f565b91506128758261285a565b600082019050919050565b600061288b8261285d565b9150819050919050565b7f7472616e73666572206661696c65640000000000000000000000000000000000600082015250565b60006128cb600f83611f2e565b91506128d682612895565b602082019050919050565b600060208201905081810360008301526128fa816128be565b9050919050565b60006020828403121561291757612916611fdf565b5b600061292584828501612586565b91505092915050565b7f4e6f20746f6b656e730000000000000000000000000000000000000000000000600082015250565b6000612964600983611f2e565b915061296f8261292e565b602082019050919050565b6000602082019050818103600083015261299381612957565b9050919050565b60006040820190506129af6000830185612365565b6129bc602083018461225e565b9392505050565b6000815190506129d281612158565b92915050565b6000602082840312156129ee576129ed611fdf565b5b60006129fc848285016129c3565b91505092915050565b6000604082019050612a1a6000830185612365565b612a2760208301846120c9565b9392505050565b6000606082019050612a436000830186612365565b612a50602083018561225e565b612a5d604083018461225e565b949350505050565b7f74617820697320656e61626c6564000000000000000000000000000000000000600082015250565b6000612a9b600e83611f2e565b9150612aa682612a65565b602082019050919050565b60006020820190508181036000830152612aca81612a8e565b9050919050565b6000612adc82612047565b9150612ae783612047565b9250828203905081811115612aff57612afe61265a565b5b92915050565b6000612b1082612047565b9150612b1b83612047565b9250828201905080821115612b3357612b3261265a565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050612b778161201b565b92915050565b600060208284031215612b9357612b92611fdf565b5b6000612ba184828501612b68565b91505092915050565b6000819050919050565b6000612bcf612bca612bc584612baa565b6121e4565b612047565b9050919050565b612bdf81612bb4565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612c1a81612009565b82525050565b6000612c2c8383612c11565b60208301905092915050565b6000602082019050919050565b6000612c5082612be5565b612c5a8185612bf0565b9350612c6583612c01565b8060005b83811015612c96578151612c7d8882612c20565b9750612c8883612c38565b925050600181019050612c69565b5085935050505092915050565b600060a082019050612cb8600083018861225e565b612cc56020830187612bd6565b8181036040830152612cd78186612c45565b9050612ce66060830185612365565b612cf3608083018461225e565b9695505050505050565b612d0682611f69565b810181811067ffffffffffffffff82111715612d2557612d24612b39565b5b80604052505050565b6000612d38611fd5565b9050612d448282612cfd565b919050565b600067ffffffffffffffff821115612d6457612d63612b39565b5b602082029050602081019050919050565b6000612d88612d8384612d49565b612d2e565b90508083825260208201905060208402830185811115612dab57612daa6120fd565b5b835b81811015612dd45780612dc08882612586565b845260208401935050602081019050612dad565b5050509392505050565b600082601f830112612df357612df26120f3565b5b8151612e03848260208601612d75565b91505092915050565b600060208284031215612e2257612e21611fdf565b5b600082015167ffffffffffffffff811115612e4057612e3f611fe4565b5b612e4c84828501612dde565b9150509291505056fea264697066735822122053d0726db61be3b614f7c1de652b500ba8a8c3df8d57c49b33bbc8db79911e0464736f6c63430008160033

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

000000000000000000000000d9a59239bb964a57454f4584f841b85e6ca3c5860000000000000000000000006bded42c6da8fbf0d2ba55b2fa120c5e0c8d7891

-----Decoded View---------------
Arg [0] : multisig (address): 0xD9a59239bb964A57454f4584F841b85e6Ca3c586
Arg [1] : _router (address): 0x6BDED42c6DA8FBf0d2bA55B2fa120C5e0c8D7891

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000d9a59239bb964a57454f4584f841b85e6ca3c586
Arg [1] : 0000000000000000000000006bded42c6da8fbf0d2ba55b2fa120c5e0c8d7891


Deployed Bytecode Sourcemap

26034:5581:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12798:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15091:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29116:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26227:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26124:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13900:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15859:249;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13751:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27650:307;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26180:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26460:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26413:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14062:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24396:103;;;;;;;;;;;;;:::i;:::-;;26257:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23721:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28631:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13008:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29535:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14385:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28064:384;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26517:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26074:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28984:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27965:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31139:473;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26369:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28456:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14630:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26329:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24654:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12798:91;12843:13;12876:5;12869:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12798:91;:::o;15091:190::-;15164:4;15181:13;15197:12;:10;:12::i;:::-;15181:28;;15220:31;15229:5;15236:7;15245:5;15220:8;:31::i;:::-;15269:4;15262:11;;;15091:190;;;;:::o;29116:216::-;23607:13;:11;:13::i;:::-;29221:9:::1;29216:109;29240:8;;:15;;29236:1;:19;29216:109;;;29277:36;29294:8;;29303:1;29294:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;29307:5;29277:16;:36::i;:::-;29257:3;;;;;;;29216:109;;;;29116:216:::0;;;:::o;26227:23::-;;;;;;;;;;;;;:::o;26124:49::-;;;:::o;13900:99::-;13952:7;13979:12;;13972:19;;13900:99;:::o;15859:249::-;15946:4;15963:15;15981:12;:10;:12::i;:::-;15963:30;;16004:37;16020:4;16026:7;16035:5;16004:15;:37::i;:::-;16052:26;16062:4;16068:2;16072:5;16052:9;:26::i;:::-;16096:4;16089:11;;;15859:249;;;;;:::o;13751:84::-;13800:5;13825:2;13818:9;;13751:84;:::o;27650:307::-;23607:13;:11;:13::i;:::-;27774:15:::1;:31;;;27813:21;27858:4;27865:24;27883:4;27865:9;:24::i;:::-;27891:14;27907:12;27921:7;:5;:7::i;:::-;27930:8;27774:175;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27650:307:::0;;;:::o;26180:38::-;;;:::o;26460:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;26413:38::-;;;;:::o;14062:118::-;14127:7;14154:9;:18;14164:7;14154:18;;;;;;;;;;;;;;;;14147:25;;14062:118;;;:::o;24396:103::-;23607:13;:11;:13::i;:::-;24461:30:::1;24488:1;24461:18;:30::i;:::-;24396:103::o:0;26257:29::-;;;;;;;;;;;;;:::o;23721:87::-;23767:7;23794:6;;;;;;;;;;;23787:13;;23721:87;:::o;28631:172::-;23607:13;:11;:13::i;:::-;26108:7:::1;28708:8;:19;;28700:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;28787:8;28771:13;:24;;;;28631:172:::0;:::o;13008:95::-;13055:13;13088:7;13081:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13008:95;:::o;29535:142::-;23607:13;:11;:13::i;:::-;29628:41:::1;29657:4;29663:5;29628:28;:41::i;:::-;29535:142:::0;;:::o;14385:182::-;14454:4;14471:13;14487:12;:10;:12::i;:::-;14471:28;;14510:27;14520:5;14527:2;14531:5;14510:9;:27::i;:::-;14555:4;14548:11;;;14385:182;;;;:::o;28064:384::-;23607:13;:11;:13::i;:::-;28141:20:::1;28164:13;:11;:13::i;:::-;28141:36;;28227:6;28222:1;28207:12;:16;;;;:::i;:::-;28206:27;;;;:::i;:::-;28196:6;:37;;28188:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28341:4;28336:1;28321:12;:16;;;;:::i;:::-;28320:25;;;;:::i;:::-;28310:6;:35;;28302:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;28434:6;28413:18;:27;;;;28130:318;28064:384:::0;:::o;26517:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;26074:41::-;26108:7;26074:41;:::o;28984:124::-;23607:13;:11;:13::i;:::-;29068:32:::1;29085:7;29094:5;29068:16;:32::i;:::-;28984:124:::0;;:::o;27965:91::-;23607:13;:11;:13::i;:::-;28043:5:::1;28030:10;;:18;;;;;;;;;;;;;;;;;;27965:91:::0;:::o;31139:473::-;23607:13;:11;:13::i;:::-;31230:1:::1;31215:17;;:3;:17;;::::0;31211:394:::1;;31250:12;31275:10;31267:24;;31299:21;31267:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31249:76;;;31348:7;31340:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;31234:153;31211:394;;;31455:1;31423:3;31416:21;;;31446:4;31416:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;31408:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31485:14;31509:3;31502:21;;;31532:4;31502:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31485:53;;31560:3;31553:20;;;31574:10;31586:6;31553:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31393:212;31211:394;31139:473:::0;:::o;26369:37::-;;;;:::o;28456:167::-;23607:13;:11;:13::i;:::-;26108:7:::1;28531;:18;;28523:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;28608:7;28593:12;:22;;;;28456:167:::0;:::o;14630:142::-;14710:7;14737:11;:18;14749:5;14737:18;;;;;;;;;;;;;;;:27;14756:7;14737:27;;;;;;;;;;;;;;;;14730:34;;14630:142;;;;:::o;26329:33::-;;;;:::o;24654:220::-;23607:13;:11;:13::i;:::-;24759:1:::1;24739:22;;:8;:22;;::::0;24735:93:::1;;24813:1;24785:31;;;;;;;;;;;:::i;:::-;;;;;;;;24735:93;24838:28;24857:8;24838:18;:28::i;:::-;24654:220:::0;:::o;4169:98::-;4222:7;4249:10;4242:17;;4169:98;:::o;19918:130::-;20003:37;20012:5;20019:7;20028:5;20035:4;20003:8;:37::i;:::-;19918:130;;;:::o;23886:166::-;23957:12;:10;:12::i;:::-;23946:23;;:7;:5;:7::i;:::-;:23;;;23942:103;;24020:12;:10;:12::i;:::-;23993:40;;;;;;;;;;;:::i;:::-;;;;;;;;23942:103;23886:166::o;28811:165::-;28916:5;28886:18;:27;28905:7;28886:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;28937:31;28953:7;28962:5;28937:31;;;;;;;:::i;:::-;;;;;;;;28811:165;;:::o;21634:487::-;21734:24;21761:25;21771:5;21778:7;21761:9;:25::i;:::-;21734:52;;21821:17;21801:16;:37;21797:317;;21878:5;21859:16;:24;21855:132;;;21938:7;21947:16;21965:5;21911:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;21855:132;22030:57;22039:5;22046:7;22074:5;22055:16;:24;22081:5;22030:8;:57::i;:::-;21797:317;21723:398;21634:487;;;:::o;16493:308::-;16593:1;16577:18;;:4;:18;;;16573:88;;16646:1;16619:30;;;;;;;;;;;:::i;:::-;;;;;;;;16573:88;16689:1;16675:16;;:2;:16;;;16671:88;;16744:1;16715:32;;;;;;;;;;;:::i;:::-;;;;;;;;16671:88;16769:24;16777:4;16783:2;16787:5;16769:7;:24::i;:::-;16493:308;;;:::o;27268:374::-;27367:1;27347:22;;:8;:22;;;27343:66;;27380:10;;;;;;;;;;;27379:11;27371:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;27343:66;27422:16;27441:7;:5;:7::i;:::-;27422:26;;27483:1;27463:22;;:8;:22;;;27459:88;;27502:33;27519:8;27529:5;27502:16;:33::i;:::-;27459:88;27557:32;27574:8;27584:4;27557:16;:32::i;:::-;27600:34;27625:8;27600:24;:34::i;:::-;27332:310;27268:374;:::o;29340:187::-;29458:5;29424:25;:31;29450:4;29424:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;29479:40;29507:4;29513:5;29479:40;;;;;;;:::i;:::-;;;;;;;;29340:187;;:::o;20899:443::-;21029:1;21012:19;;:5;:19;;;21008:91;;21084:1;21055:32;;;;;;;;;;;:::i;:::-;;;;;;;;21008:91;21132:1;21113:21;;:7;:21;;;21109:92;;21186:1;21158:31;;;;;;;;;;;:::i;:::-;;;;;;;;21109:92;21241:5;21211:11;:18;21223:5;21211:18;;;;;;;;;;;;;;;:27;21230:7;21211:27;;;;;;;;;;;;;;;:35;;;;21261:9;21257:78;;;21308:7;21292:31;;21301:5;21292:31;;;21317:5;21292:31;;;;;;:::i;:::-;;;;;;;;21257:78;20899:443;;;;:::o;29685:962::-;29773:12;29788:10;;;;;;;;;;;:29;;;;;29803:14;;;;;;;;;;;29802:15;29788:29;:86;;;;;29823:18;:24;29842:4;29823:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;29851:18;:22;29870:2;29851:22;;;;;;;;;;;;;;;;;;;;;;;;;29823:50;29821:53;29788:86;29773:101;;29891:7;29887:487;;;29915:12;29974:25;:29;30000:2;29974:29;;;;;;;;;;;;;;;;;;;;;;;;;29970:255;;;30056:4;30040:13;;30031:6;:22;;;;:::i;:::-;:29;;;;:::i;:::-;30024:36;;29970:255;;;30122:25;:31;30148:4;30122:31;;;;;;;;;;;;;;;;;;;;;;;;;30118:107;;;30205:4;30190:12;;30181:6;:21;;;;:::i;:::-;:28;;;;:::i;:::-;30174:35;;30118:107;29970:255;30252:1;30245:4;:8;30241:122;;;30284:4;30274:14;;;;;:::i;:::-;;;30307:40;30321:4;30335;30342;30307:13;:40::i;:::-;30241:122;29900:474;29887:487;30390:7;:43;;;;;30402:25;:31;30428:4;30402:31;;;;;;;;;;;;;;;;;;;;;;;;;30401:32;30390:43;:93;;;;;30465:18;;30437:24;30455:4;30437:9;:24::i;:::-;:46;;30390:93;30386:210;;;30517:4;30500:14;;:21;;;;;;;;;;;;;;;;;;30536:11;:9;:11::i;:::-;30579:5;30562:14;;:22;;;;;;;;;;;;;;;;;;30386:210;30608:31;30622:4;30628:2;30632:6;30608:13;:31::i;:::-;29762:885;29685:962;;;:::o;25034:191::-;25108:16;25127:6;;;;;;;;;;;25108:25;;25153:8;25144:6;;:17;;;;;;;;;;;;;;;;;;25208:8;25177:40;;25198:8;25177:40;;;;;;;;;;;;25097:128;25034:191;:::o;17125:1135::-;17231:1;17215:18;;:4;:18;;;17211:552;;17369:5;17353:12;;:21;;;;;;;:::i;:::-;;;;;;;;17211:552;;;17407:19;17429:9;:15;17439:4;17429:15;;;;;;;;;;;;;;;;17407:37;;17477:5;17463:11;:19;17459:117;;;17535:4;17541:11;17554:5;17510:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;17459:117;17731:5;17717:11;:19;17699:9;:15;17709:4;17699:15;;;;;;;;;;;;;;;:37;;;;17392:371;17211:552;17793:1;17779:16;;:2;:16;;;17775:435;;17961:5;17945:12;;:21;;;;;;;;;;;17775:435;;;18178:5;18161:9;:13;18171:2;18161:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;17775:435;18242:2;18227:25;;18236:4;18227:25;;;18246:5;18227:25;;;;;;:::i;:::-;;;;;;;;17125:1135;;;:::o;30655:476::-;30696:21;30734:1;30720:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30696:40;;30765:4;30747;30752:1;30747:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;30791:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30781:4;30786:1;30781:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;30826:21;30871:2;30850:18;;:23;;;;:::i;:::-;30826:47;;30884:18;30905:24;30923:4;30905:9;:24::i;:::-;30884:45;;30959:13;30946:10;:26;30942:85;;;31002:13;30989:26;;30942:85;31039:15;:37;;;31077:10;31089:1;31092:4;31098:7;:5;:7::i;:::-;31107:15;31039:84;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30685:446;;;30655:476::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:117::-;3555:1;3552;3545:12;3569:117;3678:1;3675;3668:12;3692:117;3801:1;3798;3791:12;3832:568;3905:8;3915:6;3965:3;3958:4;3950:6;3946:17;3942:27;3932:122;;3973:79;;:::i;:::-;3932:122;4086:6;4073:20;4063:30;;4116:18;4108:6;4105:30;4102:117;;;4138:79;;:::i;:::-;4102:117;4252:4;4244:6;4240:17;4228:29;;4306:3;4298:4;4290:6;4286:17;4276:8;4272:32;4269:41;4266:128;;;4313:79;;:::i;:::-;4266:128;3832:568;;;;;:::o;4406:116::-;4476:21;4491:5;4476:21;:::i;:::-;4469:5;4466:32;4456:60;;4512:1;4509;4502:12;4456:60;4406:116;:::o;4528:133::-;4571:5;4609:6;4596:20;4587:29;;4625:30;4649:5;4625:30;:::i;:::-;4528:133;;;;:::o;4667:698::-;4759:6;4767;4775;4824:2;4812:9;4803:7;4799:23;4795:32;4792:119;;;4830:79;;:::i;:::-;4792:119;4978:1;4967:9;4963:17;4950:31;5008:18;5000:6;4997:30;4994:117;;;5030:79;;:::i;:::-;4994:117;5143:80;5215:7;5206:6;5195:9;5191:22;5143:80;:::i;:::-;5125:98;;;;4921:312;5272:2;5298:50;5340:7;5331:6;5320:9;5316:22;5298:50;:::i;:::-;5288:60;;5243:115;4667:698;;;;;:::o;5371:60::-;5399:3;5420:5;5413:12;;5371:60;;;:::o;5437:142::-;5487:9;5520:53;5538:34;5547:24;5565:5;5547:24;:::i;:::-;5538:34;:::i;:::-;5520:53;:::i;:::-;5507:66;;5437:142;;;:::o;5585:126::-;5635:9;5668:37;5699:5;5668:37;:::i;:::-;5655:50;;5585:126;;;:::o;5717:150::-;5791:9;5824:37;5855:5;5824:37;:::i;:::-;5811:50;;5717:150;;;:::o;5873:179::-;5984:61;6039:5;5984:61;:::i;:::-;5979:3;5972:74;5873:179;;:::o;6058:270::-;6175:4;6213:2;6202:9;6198:18;6190:26;;6226:95;6318:1;6307:9;6303:17;6294:6;6226:95;:::i;:::-;6058:270;;;;:::o;6334:118::-;6421:24;6439:5;6421:24;:::i;:::-;6416:3;6409:37;6334:118;;:::o;6458:222::-;6551:4;6589:2;6578:9;6574:18;6566:26;;6602:71;6670:1;6659:9;6655:17;6646:6;6602:71;:::i;:::-;6458:222;;;;:::o;6686:619::-;6763:6;6771;6779;6828:2;6816:9;6807:7;6803:23;6799:32;6796:119;;;6834:79;;:::i;:::-;6796:119;6954:1;6979:53;7024:7;7015:6;7004:9;7000:22;6979:53;:::i;:::-;6969:63;;6925:117;7081:2;7107:53;7152:7;7143:6;7132:9;7128:22;7107:53;:::i;:::-;7097:63;;7052:118;7209:2;7235:53;7280:7;7271:6;7260:9;7256:22;7235:53;:::i;:::-;7225:63;;7180:118;6686:619;;;;;:::o;7311:86::-;7346:7;7386:4;7379:5;7375:16;7364:27;;7311:86;;;:::o;7403:112::-;7486:22;7502:5;7486:22;:::i;:::-;7481:3;7474:35;7403:112;;:::o;7521:214::-;7610:4;7648:2;7637:9;7633:18;7625:26;;7661:67;7725:1;7714:9;7710:17;7701:6;7661:67;:::i;:::-;7521:214;;;;:::o;7741:619::-;7818:6;7826;7834;7883:2;7871:9;7862:7;7858:23;7854:32;7851:119;;;7889:79;;:::i;:::-;7851:119;8009:1;8034:53;8079:7;8070:6;8059:9;8055:22;8034:53;:::i;:::-;8024:63;;7980:117;8136:2;8162:53;8207:7;8198:6;8187:9;8183:22;8162:53;:::i;:::-;8152:63;;8107:118;8264:2;8290:53;8335:7;8326:6;8315:9;8311:22;8290:53;:::i;:::-;8280:63;;8235:118;7741:619;;;;;:::o;8366:118::-;8453:24;8471:5;8453:24;:::i;:::-;8448:3;8441:37;8366:118;;:::o;8490:222::-;8583:4;8621:2;8610:9;8606:18;8598:26;;8634:71;8702:1;8691:9;8687:17;8678:6;8634:71;:::i;:::-;8490:222;;;;:::o;8718:329::-;8777:6;8826:2;8814:9;8805:7;8801:23;8797:32;8794:119;;;8832:79;;:::i;:::-;8794:119;8952:1;8977:53;9022:7;9013:6;9002:9;8998:22;8977:53;:::i;:::-;8967:63;;8923:117;8718:329;;;;:::o;9053:::-;9112:6;9161:2;9149:9;9140:7;9136:23;9132:32;9129:119;;;9167:79;;:::i;:::-;9129:119;9287:1;9312:53;9357:7;9348:6;9337:9;9333:22;9312:53;:::i;:::-;9302:63;;9258:117;9053:329;;;;:::o;9388:468::-;9453:6;9461;9510:2;9498:9;9489:7;9485:23;9481:32;9478:119;;;9516:79;;:::i;:::-;9478:119;9636:1;9661:53;9706:7;9697:6;9686:9;9682:22;9661:53;:::i;:::-;9651:63;;9607:117;9763:2;9789:50;9831:7;9822:6;9811:9;9807:22;9789:50;:::i;:::-;9779:60;;9734:115;9388:468;;;;;:::o;9862:323::-;9918:6;9967:2;9955:9;9946:7;9942:23;9938:32;9935:119;;;9973:79;;:::i;:::-;9935:119;10093:1;10118:50;10160:7;10151:6;10140:9;10136:22;10118:50;:::i;:::-;10108:60;;10064:114;9862:323;;;;:::o;10191:474::-;10259:6;10267;10316:2;10304:9;10295:7;10291:23;10287:32;10284:119;;;10322:79;;:::i;:::-;10284:119;10442:1;10467:53;10512:7;10503:6;10492:9;10488:22;10467:53;:::i;:::-;10457:63;;10413:117;10569:2;10595:53;10640:7;10631:6;10620:9;10616:22;10595:53;:::i;:::-;10585:63;;10540:118;10191:474;;;;;:::o;10671:180::-;10719:77;10716:1;10709:88;10816:4;10813:1;10806:15;10840:4;10837:1;10830:15;10857:320;10901:6;10938:1;10932:4;10928:12;10918:22;;10985:1;10979:4;10975:12;11006:18;10996:81;;11062:4;11054:6;11050:17;11040:27;;10996:81;11124:2;11116:6;11113:14;11093:18;11090:38;11087:84;;11143:18;;:::i;:::-;11087:84;10908:269;10857:320;;;:::o;11183:180::-;11231:77;11228:1;11221:88;11328:4;11325:1;11318:15;11352:4;11349:1;11342:15;11369:775;11602:4;11640:3;11629:9;11625:19;11617:27;;11654:71;11722:1;11711:9;11707:17;11698:6;11654:71;:::i;:::-;11735:72;11803:2;11792:9;11788:18;11779:6;11735:72;:::i;:::-;11817;11885:2;11874:9;11870:18;11861:6;11817:72;:::i;:::-;11899;11967:2;11956:9;11952:18;11943:6;11899:72;:::i;:::-;11981:73;12049:3;12038:9;12034:19;12025:6;11981:73;:::i;:::-;12064;12132:3;12121:9;12117:19;12108:6;12064:73;:::i;:::-;11369:775;;;;;;;;;:::o;12150:143::-;12207:5;12238:6;12232:13;12223:22;;12254:33;12281:5;12254:33;:::i;:::-;12150:143;;;;:::o;12299:663::-;12387:6;12395;12403;12452:2;12440:9;12431:7;12427:23;12423:32;12420:119;;;12458:79;;:::i;:::-;12420:119;12578:1;12603:64;12659:7;12650:6;12639:9;12635:22;12603:64;:::i;:::-;12593:74;;12549:128;12716:2;12742:64;12798:7;12789:6;12778:9;12774:22;12742:64;:::i;:::-;12732:74;;12687:129;12855:2;12881:64;12937:7;12928:6;12917:9;12913:22;12881:64;:::i;:::-;12871:74;;12826:129;12299:663;;;;;:::o;12968:178::-;13108:30;13104:1;13096:6;13092:14;13085:54;12968:178;:::o;13152:366::-;13294:3;13315:67;13379:2;13374:3;13315:67;:::i;:::-;13308:74;;13391:93;13480:3;13391:93;:::i;:::-;13509:2;13504:3;13500:12;13493:19;;13152:366;;;:::o;13524:419::-;13690:4;13728:2;13717:9;13713:18;13705:26;;13777:9;13771:4;13767:20;13763:1;13752:9;13748:17;13741:47;13805:131;13931:4;13805:131;:::i;:::-;13797:139;;13524:419;;;:::o;13949:180::-;13997:77;13994:1;13987:88;14094:4;14091:1;14084:15;14118:4;14115:1;14108:15;14135:410;14175:7;14198:20;14216:1;14198:20;:::i;:::-;14193:25;;14232:20;14250:1;14232:20;:::i;:::-;14227:25;;14287:1;14284;14280:9;14309:30;14327:11;14309:30;:::i;:::-;14298:41;;14488:1;14479:7;14475:15;14472:1;14469:22;14449:1;14442:9;14422:83;14399:139;;14518:18;;:::i;:::-;14399:139;14183:362;14135:410;;;;:::o;14551:180::-;14599:77;14596:1;14589:88;14696:4;14693:1;14686:15;14720:4;14717:1;14710:15;14737:185;14777:1;14794:20;14812:1;14794:20;:::i;:::-;14789:25;;14828:20;14846:1;14828:20;:::i;:::-;14823:25;;14867:1;14857:35;;14872:18;;:::i;:::-;14857:35;14914:1;14911;14907:9;14902:14;;14737:185;;;;:::o;14928:240::-;15068:34;15064:1;15056:6;15052:14;15045:58;15137:23;15132:2;15124:6;15120:15;15113:48;14928:240;:::o;15174:366::-;15316:3;15337:67;15401:2;15396:3;15337:67;:::i;:::-;15330:74;;15413:93;15502:3;15413:93;:::i;:::-;15531:2;15526:3;15522:12;15515:19;;15174:366;;;:::o;15546:419::-;15712:4;15750:2;15739:9;15735:18;15727:26;;15799:9;15793:4;15789:20;15785:1;15774:9;15770:17;15763:47;15827:131;15953:4;15827:131;:::i;:::-;15819:139;;15546:419;;;:::o;15971:239::-;16111:34;16107:1;16099:6;16095:14;16088:58;16180:22;16175:2;16167:6;16163:15;16156:47;15971:239;:::o;16216:366::-;16358:3;16379:67;16443:2;16438:3;16379:67;:::i;:::-;16372:74;;16455:93;16544:3;16455:93;:::i;:::-;16573:2;16568:3;16564:12;16557:19;;16216:366;;;:::o;16588:419::-;16754:4;16792:2;16781:9;16777:18;16769:26;;16841:9;16835:4;16831:20;16827:1;16816:9;16812:17;16805:47;16869:131;16995:4;16869:131;:::i;:::-;16861:139;;16588:419;;;:::o;17013:147::-;17114:11;17151:3;17136:18;;17013:147;;;;:::o;17166:114::-;;:::o;17286:398::-;17445:3;17466:83;17547:1;17542:3;17466:83;:::i;:::-;17459:90;;17558:93;17647:3;17558:93;:::i;:::-;17676:1;17671:3;17667:11;17660:18;;17286:398;;;:::o;17690:379::-;17874:3;17896:147;18039:3;17896:147;:::i;:::-;17889:154;;18060:3;18053:10;;17690:379;;;:::o;18075:165::-;18215:17;18211:1;18203:6;18199:14;18192:41;18075:165;:::o;18246:366::-;18388:3;18409:67;18473:2;18468:3;18409:67;:::i;:::-;18402:74;;18485:93;18574:3;18485:93;:::i;:::-;18603:2;18598:3;18594:12;18587:19;;18246:366;;;:::o;18618:419::-;18784:4;18822:2;18811:9;18807:18;18799:26;;18871:9;18865:4;18861:20;18857:1;18846:9;18842:17;18835:47;18899:131;19025:4;18899:131;:::i;:::-;18891:139;;18618:419;;;:::o;19043:351::-;19113:6;19162:2;19150:9;19141:7;19137:23;19133:32;19130:119;;;19168:79;;:::i;:::-;19130:119;19288:1;19313:64;19369:7;19360:6;19349:9;19345:22;19313:64;:::i;:::-;19303:74;;19259:128;19043:351;;;;:::o;19400:159::-;19540:11;19536:1;19528:6;19524:14;19517:35;19400:159;:::o;19565:365::-;19707:3;19728:66;19792:1;19787:3;19728:66;:::i;:::-;19721:73;;19803:93;19892:3;19803:93;:::i;:::-;19921:2;19916:3;19912:12;19905:19;;19565:365;;;:::o;19936:419::-;20102:4;20140:2;20129:9;20125:18;20117:26;;20189:9;20183:4;20179:20;20175:1;20164:9;20160:17;20153:47;20217:131;20343:4;20217:131;:::i;:::-;20209:139;;19936:419;;;:::o;20361:332::-;20482:4;20520:2;20509:9;20505:18;20497:26;;20533:71;20601:1;20590:9;20586:17;20577:6;20533:71;:::i;:::-;20614:72;20682:2;20671:9;20667:18;20658:6;20614:72;:::i;:::-;20361:332;;;;;:::o;20699:137::-;20753:5;20784:6;20778:13;20769:22;;20800:30;20824:5;20800:30;:::i;:::-;20699:137;;;;:::o;20842:345::-;20909:6;20958:2;20946:9;20937:7;20933:23;20929:32;20926:119;;;20964:79;;:::i;:::-;20926:119;21084:1;21109:61;21162:7;21153:6;21142:9;21138:22;21109:61;:::i;:::-;21099:71;;21055:125;20842:345;;;;:::o;21193:320::-;21308:4;21346:2;21335:9;21331:18;21323:26;;21359:71;21427:1;21416:9;21412:17;21403:6;21359:71;:::i;:::-;21440:66;21502:2;21491:9;21487:18;21478:6;21440:66;:::i;:::-;21193:320;;;;;:::o;21519:442::-;21668:4;21706:2;21695:9;21691:18;21683:26;;21719:71;21787:1;21776:9;21772:17;21763:6;21719:71;:::i;:::-;21800:72;21868:2;21857:9;21853:18;21844:6;21800:72;:::i;:::-;21882;21950:2;21939:9;21935:18;21926:6;21882:72;:::i;:::-;21519:442;;;;;;:::o;21967:164::-;22107:16;22103:1;22095:6;22091:14;22084:40;21967:164;:::o;22137:366::-;22279:3;22300:67;22364:2;22359:3;22300:67;:::i;:::-;22293:74;;22376:93;22465:3;22376:93;:::i;:::-;22494:2;22489:3;22485:12;22478:19;;22137:366;;;:::o;22509:419::-;22675:4;22713:2;22702:9;22698:18;22690:26;;22762:9;22756:4;22752:20;22748:1;22737:9;22733:17;22726:47;22790:131;22916:4;22790:131;:::i;:::-;22782:139;;22509:419;;;:::o;22934:194::-;22974:4;22994:20;23012:1;22994:20;:::i;:::-;22989:25;;23028:20;23046:1;23028:20;:::i;:::-;23023:25;;23072:1;23069;23065:9;23057:17;;23096:1;23090:4;23087:11;23084:37;;;23101:18;;:::i;:::-;23084:37;22934:194;;;;:::o;23134:191::-;23174:3;23193:20;23211:1;23193:20;:::i;:::-;23188:25;;23227:20;23245:1;23227:20;:::i;:::-;23222:25;;23270:1;23267;23263:9;23256:16;;23291:3;23288:1;23285:10;23282:36;;;23298:18;;:::i;:::-;23282:36;23134:191;;;;:::o;23331:180::-;23379:77;23376:1;23369:88;23476:4;23473:1;23466:15;23500:4;23497:1;23490:15;23517:143;23574:5;23605:6;23599:13;23590:22;;23621:33;23648:5;23621:33;:::i;:::-;23517:143;;;;:::o;23666:351::-;23736:6;23785:2;23773:9;23764:7;23760:23;23756:32;23753:119;;;23791:79;;:::i;:::-;23753:119;23911:1;23936:64;23992:7;23983:6;23972:9;23968:22;23936:64;:::i;:::-;23926:74;;23882:128;23666:351;;;;:::o;24023:85::-;24068:7;24097:5;24086:16;;24023:85;;;:::o;24114:158::-;24172:9;24205:61;24223:42;24232:32;24258:5;24232:32;:::i;:::-;24223:42;:::i;:::-;24205:61;:::i;:::-;24192:74;;24114:158;;;:::o;24278:147::-;24373:45;24412:5;24373:45;:::i;:::-;24368:3;24361:58;24278:147;;:::o;24431:114::-;24498:6;24532:5;24526:12;24516:22;;24431:114;;;:::o;24551:184::-;24650:11;24684:6;24679:3;24672:19;24724:4;24719:3;24715:14;24700:29;;24551:184;;;;:::o;24741:132::-;24808:4;24831:3;24823:11;;24861:4;24856:3;24852:14;24844:22;;24741:132;;;:::o;24879:108::-;24956:24;24974:5;24956:24;:::i;:::-;24951:3;24944:37;24879:108;;:::o;24993:179::-;25062:10;25083:46;25125:3;25117:6;25083:46;:::i;:::-;25161:4;25156:3;25152:14;25138:28;;24993:179;;;;:::o;25178:113::-;25248:4;25280;25275:3;25271:14;25263:22;;25178:113;;;:::o;25327:732::-;25446:3;25475:54;25523:5;25475:54;:::i;:::-;25545:86;25624:6;25619:3;25545:86;:::i;:::-;25538:93;;25655:56;25705:5;25655:56;:::i;:::-;25734:7;25765:1;25750:284;25775:6;25772:1;25769:13;25750:284;;;25851:6;25845:13;25878:63;25937:3;25922:13;25878:63;:::i;:::-;25871:70;;25964:60;26017:6;25964:60;:::i;:::-;25954:70;;25810:224;25797:1;25794;25790:9;25785:14;;25750:284;;;25754:14;26050:3;26043:10;;25451:608;;;25327:732;;;;:::o;26065:831::-;26328:4;26366:3;26355:9;26351:19;26343:27;;26380:71;26448:1;26437:9;26433:17;26424:6;26380:71;:::i;:::-;26461:80;26537:2;26526:9;26522:18;26513:6;26461:80;:::i;:::-;26588:9;26582:4;26578:20;26573:2;26562:9;26558:18;26551:48;26616:108;26719:4;26710:6;26616:108;:::i;:::-;26608:116;;26734:72;26802:2;26791:9;26787:18;26778:6;26734:72;:::i;:::-;26816:73;26884:3;26873:9;26869:19;26860:6;26816:73;:::i;:::-;26065:831;;;;;;;;:::o;26902:281::-;26985:27;27007:4;26985:27;:::i;:::-;26977:6;26973:40;27115:6;27103:10;27100:22;27079:18;27067:10;27064:34;27061:62;27058:88;;;27126:18;;:::i;:::-;27058:88;27166:10;27162:2;27155:22;26945:238;26902:281;;:::o;27189:129::-;27223:6;27250:20;;:::i;:::-;27240:30;;27279:33;27307:4;27299:6;27279:33;:::i;:::-;27189:129;;;:::o;27324:311::-;27401:4;27491:18;27483:6;27480:30;27477:56;;;27513:18;;:::i;:::-;27477:56;27563:4;27555:6;27551:17;27543:25;;27623:4;27617;27613:15;27605:23;;27324:311;;;:::o;27658:732::-;27765:5;27790:81;27806:64;27863:6;27806:64;:::i;:::-;27790:81;:::i;:::-;27781:90;;27891:5;27920:6;27913:5;27906:21;27954:4;27947:5;27943:16;27936:23;;28007:4;27999:6;27995:17;27987:6;27983:30;28036:3;28028:6;28025:15;28022:122;;;28055:79;;:::i;:::-;28022:122;28170:6;28153:231;28187:6;28182:3;28179:15;28153:231;;;28262:3;28291:48;28335:3;28323:10;28291:48;:::i;:::-;28286:3;28279:61;28369:4;28364:3;28360:14;28353:21;;28229:155;28213:4;28208:3;28204:14;28197:21;;28153:231;;;28157:21;27771:619;;27658:732;;;;;:::o;28413:385::-;28495:5;28544:3;28537:4;28529:6;28525:17;28521:27;28511:122;;28552:79;;:::i;:::-;28511:122;28662:6;28656:13;28687:105;28788:3;28780:6;28773:4;28765:6;28761:17;28687:105;:::i;:::-;28678:114;;28501:297;28413:385;;;;:::o;28804:554::-;28899:6;28948:2;28936:9;28927:7;28923:23;28919:32;28916:119;;;28954:79;;:::i;:::-;28916:119;29095:1;29084:9;29080:17;29074:24;29125:18;29117:6;29114:30;29111:117;;;29147:79;;:::i;:::-;29111:117;29252:89;29333:7;29324:6;29313:9;29309:22;29252:89;:::i;:::-;29242:99;;29045:306;28804:554;;;;:::o

Swarm Source

ipfs://53d0726db61be3b614f7c1de652b500ba8a8c3df8d57c49b33bbc8db79911e04
[ 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.