ETH Price: $2,812.22 (-0.31%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve217192332025-01-27 23:45:598 days ago1738021559IN
XFED: XFED Token
0 ETH0.000269815.77936792
Approve217192152025-01-27 23:42:238 days ago1738021343IN
XFED: XFED Token
0 ETH0.000275775.90709437
Approve217191992025-01-27 23:39:118 days ago1738021151IN
XFED: XFED Token
0 ETH0.000256925.50329942
Approve217146232025-01-27 8:19:359 days ago1737965975IN
XFED: XFED Token
0 ETH0.0004619.87461126
Approve216874842025-01-23 13:27:3513 days ago1737638855IN
XFED: XFED Token
0 ETH0.0008332317.82478807
Transfer216856542025-01-23 7:19:3513 days ago1737616775IN
XFED: XFED Token
0 ETH0.000245347.68918485
Approve216796252025-01-22 11:07:1114 days ago1737544031IN
XFED: XFED Token
0 ETH0.000363787.79406893
Transfer216748332025-01-21 19:04:3514 days ago1737486275IN
XFED: XFED Token
0 ETH0.0013373224.84819641
Approve216711562025-01-21 6:44:4715 days ago1737441887IN
XFED: XFED Token
0 ETH0.000405328.6820017
Approve216710352025-01-21 6:20:3515 days ago1737440435IN
XFED: XFED Token
0 ETH0.000379858.13631128
Approve216691192025-01-20 23:54:3515 days ago1737417275IN
XFED: XFED Token
0 ETH0.0007392915.83538256
Approve216680612025-01-20 20:21:5915 days ago1737404519IN
XFED: XFED Token
0 ETH0.0013974829.93364375
Approve216674952025-01-20 18:28:2315 days ago1737397703IN
XFED: XFED Token
0 ETH0.0016774535.930647
Approve216673002025-01-20 17:49:1115 days ago1737395351IN
XFED: XFED Token
0 ETH0.0040143185.87499957
Transfer216644102025-01-20 8:08:3516 days ago1737360515IN
XFED: XFED Token
0 ETH0.0012330238.58508194
Approve216568492025-01-19 6:49:4717 days ago1737269387IN
XFED: XFED Token
0 ETH0.0005194911.12740029
Approve216550952025-01-19 0:56:1117 days ago1737248171IN
XFED: XFED Token
0 ETH0.0008417918.00775458
Transfer216520152025-01-18 14:37:2318 days ago1737211043IN
XFED: XFED Token
0 ETH0.0009142628.59935564
Transfer216519762025-01-18 14:29:3518 days ago1737210575IN
XFED: XFED Token
0 ETH0.0013344227.19547061
Renounce Ownersh...216512612025-01-18 12:05:5918 days ago1737201959IN
XFED: XFED Token
0 ETH0.0003187913.68741619
Transfer216490102025-01-18 4:33:4718 days ago1737174827IN
XFED: XFED Token
0 ETH0.0008777416.31256741
Approve216437142025-01-17 10:48:1119 days ago1737110891IN
XFED: XFED Token
0 ETH0.000372717.97314121
Transfer216426142025-01-17 7:06:2319 days ago1737097583IN
XFED: XFED Token
0 ETH0.000203376.37153534
Approve216425432025-01-17 6:51:5919 days ago1737096719IN
XFED: XFED Token
0 ETH0.000363627.78870592
Transfer216424762025-01-17 6:38:3519 days ago1737095915IN
XFED: XFED Token
0 ETH0.000251254.66842361
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Xfed

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-12-29
*/

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.20;

/**
 * @dev Interface of the ERC-20 standard as defined in the ERC.
 */
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);
}

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


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

pragma solidity ^0.8.20;


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

// File: @openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol


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

pragma solidity ^0.8.20;

/**
 * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed
 * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an
 * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer
 * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.
 *
 * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be
 * reused. This mechanism prevents re-execution of each "step" but allows the creation of new initialization steps in
 * case an upgrade adds a module that needs to be initialized.
 *
 * For example:
 *
 * [.hljs-theme-light.nopadding]
 * ```solidity
 * contract MyToken is ERC20Upgradeable {
 *     function initialize() initializer public {
 *         __ERC20_init("MyToken", "MTK");
 *     }
 * }
 *
 * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {
 *     function initializeV2() reinitializer(2) public {
 *         __ERC20Permit_init("MyToken");
 *     }
 * }
 * ```
 *
 * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as
 * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.
 *
 * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure
 * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.
 *
 * [CAUTION]
 * ====
 * Avoid leaving a contract uninitialized.
 *
 * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation
 * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke
 * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:
 *
 * [.hljs-theme-light.nopadding]
 * ```
 * /// @custom:oz-upgrades-unsafe-allow constructor
 * constructor() {
 *     _disableInitializers();
 * }
 * ```
 * ====
 */
abstract contract Initializable {
    /**
     * @dev Storage of the initializable contract.
     *
     * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions
     * when using with upgradeable contracts.
     *
     * @custom:storage-location erc7201:openzeppelin.storage.Initializable
     */
    struct InitializableStorage {
        /**
         * @dev Indicates that the contract has been initialized.
         */
        uint64 _initialized;
        /**
         * @dev Indicates that the contract is in the process of being initialized.
         */
        bool _initializing;
    }

    // keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.Initializable")) - 1)) & ~bytes32(uint256(0xff))
    bytes32 private constant INITIALIZABLE_STORAGE = 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00;

    /**
     * @dev The contract is already initialized.
     */
    error InvalidInitialization();

    /**
     * @dev The contract is not initializing.
     */
    error NotInitializing();

    /**
     * @dev Triggered when the contract has been initialized or reinitialized.
     */
    event Initialized(uint64 version);

    /**
     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,
     * `onlyInitializing` functions can be used to initialize parent contracts.
     *
     * Similar to `reinitializer(1)`, except that in the context of a constructor an `initializer` may be invoked any
     * number of times. This behavior in the constructor can be useful during testing and is not expected to be used in
     * production.
     *
     * Emits an {Initialized} event.
     */
    modifier initializer() {
        // solhint-disable-next-line var-name-mixedcase
        InitializableStorage storage $ = _getInitializableStorage();

        // Cache values to avoid duplicated sloads
        bool isTopLevelCall = !$._initializing;
        uint64 initialized = $._initialized;

        // Allowed calls:
        // - initialSetup: the contract is not in the initializing state and no previous version was
        //                 initialized
        // - construction: the contract is initialized at version 1 (no reininitialization) and the
        //                 current contract is just being deployed
        bool initialSetup = initialized == 0 && isTopLevelCall;
        bool construction = initialized == 1 && address(this).code.length == 0;

        if (!initialSetup && !construction) {
            revert InvalidInitialization();
        }
        $._initialized = 1;
        if (isTopLevelCall) {
            $._initializing = true;
        }
        _;
        if (isTopLevelCall) {
            $._initializing = false;
            emit Initialized(1);
        }
    }

    /**
     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the
     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be
     * used to initialize parent contracts.
     *
     * A reinitializer may be used after the original initialization step. This is essential to configure modules that
     * are added through upgrades and that require initialization.
     *
     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`
     * cannot be nested. If one is invoked in the context of another, execution will revert.
     *
     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in
     * a contract, executing them in the right order is up to the developer or operator.
     *
     * WARNING: Setting the version to 2**64 - 1 will prevent any future reinitialization.
     *
     * Emits an {Initialized} event.
     */
    modifier reinitializer(uint64 version) {
        // solhint-disable-next-line var-name-mixedcase
        InitializableStorage storage $ = _getInitializableStorage();

        if ($._initializing || $._initialized >= version) {
            revert InvalidInitialization();
        }
        $._initialized = version;
        $._initializing = true;
        _;
        $._initializing = false;
        emit Initialized(version);
    }

    /**
     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the
     * {initializer} and {reinitializer} modifiers, directly or indirectly.
     */
    modifier onlyInitializing() {
        _checkInitializing();
        _;
    }

    /**
     * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.
     */
    function _checkInitializing() internal view virtual {
        if (!_isInitializing()) {
            revert NotInitializing();
        }
    }

    /**
     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.
     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized
     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called
     * through proxies.
     *
     * Emits an {Initialized} event the first time it is successfully executed.
     */
    function _disableInitializers() internal virtual {
        // solhint-disable-next-line var-name-mixedcase
        InitializableStorage storage $ = _getInitializableStorage();

        if ($._initializing) {
            revert InvalidInitialization();
        }
        if ($._initialized != type(uint64).max) {
            $._initialized = type(uint64).max;
            emit Initialized(type(uint64).max);
        }
    }

    /**
     * @dev Returns the highest version that has been initialized. See {reinitializer}.
     */
    function _getInitializedVersion() internal view returns (uint64) {
        return _getInitializableStorage()._initialized;
    }

    /**
     * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.
     */
    function _isInitializing() internal view returns (bool) {
        return _getInitializableStorage()._initializing;
    }

    /**
     * @dev Returns a pointer to the storage namespace.
     */
    // solhint-disable-next-line var-name-mixedcase
    function _getInitializableStorage() private pure returns (InitializableStorage storage $) {
        assembly {
            $.slot := INITIALIZABLE_STORAGE
        }
    }
}

// File: @openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol


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

pragma solidity ^0.8.20;


/**
 * @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 ContextUpgradeable is Initializable {
    function __Context_init() internal onlyInitializing {
    }

    function __Context_init_unchained() internal onlyInitializing {
    }
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

// File: @openzeppelin/contracts/interfaces/draft-IERC6093.sol


// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC6093.sol)
pragma solidity ^0.8.20;

/**
 * @dev Standard ERC-20 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 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 ERC-721 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.
 */
interface IERC721Errors {
    /**
     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-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 ERC-1155 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 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);
}

// File: @openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol


// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.20;






/**
 * @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 ERC-20
 * applications.
 */
abstract contract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20, IERC20Metadata, IERC20Errors {
    /// @custom:storage-location erc7201:openzeppelin.storage.ERC20
    struct ERC20Storage {
        mapping(address account => uint256) _balances;

        mapping(address account => mapping(address spender => uint256)) _allowances;

        uint256 _totalSupply;

        string _name;
        string _symbol;
    }

    // keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.ERC20")) - 1)) & ~bytes32(uint256(0xff))
    bytes32 private constant ERC20StorageLocation = 0x52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00;

    function _getERC20Storage() private pure returns (ERC20Storage storage $) {
        assembly {
            $.slot := ERC20StorageLocation
        }
    }

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

    function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {
        ERC20Storage storage $ = _getERC20Storage();
        $._name = name_;
        $._symbol = symbol_;
    }

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

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual returns (string memory) {
        ERC20Storage storage $ = _getERC20Storage();
        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) {
        ERC20Storage storage $ = _getERC20Storage();
        return $._totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual returns (uint256) {
        ERC20Storage storage $ = _getERC20Storage();
        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) {
        ERC20Storage storage $ = _getERC20Storage();
        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}.
     *
     * Skips emitting an {Approval} event indicating an allowance update. This is not
     * required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve].
     *
     * 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 {
        ERC20Storage storage $ = _getERC20Storage();
        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:
     *
     * ```solidity
     * 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 {
        ERC20Storage storage $ = _getERC20Storage();
        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);
            }
        }
    }
}

// File: @openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol


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

pragma solidity ^0.8.20;



/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract PausableUpgradeable is Initializable, ContextUpgradeable {
    /// @custom:storage-location erc7201:openzeppelin.storage.Pausable
    struct PausableStorage {
        bool _paused;
    }

    // keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.Pausable")) - 1)) & ~bytes32(uint256(0xff))
    bytes32 private constant PausableStorageLocation = 0xcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300;

    function _getPausableStorage() private pure returns (PausableStorage storage $) {
        assembly {
            $.slot := PausableStorageLocation
        }
    }

    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    /**
     * @dev The operation failed because the contract is paused.
     */
    error EnforcedPause();

    /**
     * @dev The operation failed because the contract is not paused.
     */
    error ExpectedPause();

    /**
     * @dev Initializes the contract in unpaused state.
     */
    function __Pausable_init() internal onlyInitializing {
        __Pausable_init_unchained();
    }

    function __Pausable_init_unchained() internal onlyInitializing {
        PausableStorage storage $ = _getPausableStorage();
        $._paused = false;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        _requireNotPaused();
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        _requirePaused();
        _;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        PausableStorage storage $ = _getPausableStorage();
        return $._paused;
    }

    /**
     * @dev Throws if the contract is paused.
     */
    function _requireNotPaused() internal view virtual {
        if (paused()) {
            revert EnforcedPause();
        }
    }

    /**
     * @dev Throws if the contract is not paused.
     */
    function _requirePaused() internal view virtual {
        if (!paused()) {
            revert ExpectedPause();
        }
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        PausableStorage storage $ = _getPausableStorage();
        $._paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        PausableStorage storage $ = _getPausableStorage();
        $._paused = false;
        emit Unpaused(_msgSender());
    }
}

// File: @openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20PausableUpgradeable.sol


// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/ERC20Pausable.sol)

pragma solidity ^0.8.20;




/**
 * @dev ERC-20 token with pausable token transfers, minting and burning.
 *
 * Useful for scenarios such as preventing trades until the end of an evaluation
 * period, or having an emergency switch for freezing all token transfers in the
 * event of a large bug.
 *
 * IMPORTANT: This contract does not include public pause and unpause functions. In
 * addition to inheriting this contract, you must define both functions, invoking the
 * {Pausable-_pause} and {Pausable-_unpause} internal functions, with appropriate
 * access control, e.g. using {AccessControl} or {Ownable}. Not doing so will
 * make the contract pause mechanism of the contract unreachable, and thus unusable.
 */
abstract contract ERC20PausableUpgradeable is Initializable, ERC20Upgradeable, PausableUpgradeable {
    function __ERC20Pausable_init() internal onlyInitializing {
        __Pausable_init_unchained();
    }

    function __ERC20Pausable_init_unchained() internal onlyInitializing {
    }
    /**
     * @dev See {ERC20-_update}.
     *
     * Requirements:
     *
     * - the contract must not be paused.
     */
    function _update(address from, address to, uint256 value) internal virtual override whenNotPaused {
        super._update(from, to, value);
    }
}

// File: @openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol


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

pragma solidity ^0.8.20;



/**
 * @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 OwnableUpgradeable is Initializable, ContextUpgradeable {
    /// @custom:storage-location erc7201:openzeppelin.storage.Ownable
    struct OwnableStorage {
        address _owner;
    }

    // keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.Ownable")) - 1)) & ~bytes32(uint256(0xff))
    bytes32 private constant OwnableStorageLocation = 0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300;

    function _getOwnableStorage() private pure returns (OwnableStorage storage $) {
        assembly {
            $.slot := OwnableStorageLocation
        }
    }

    /**
     * @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.
     */
    function __Ownable_init(address initialOwner) internal onlyInitializing {
        __Ownable_init_unchained(initialOwner);
    }

    function __Ownable_init_unchained(address initialOwner) internal onlyInitializing {
        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) {
        OwnableStorage storage $ = _getOwnableStorage();
        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 {
        OwnableStorage storage $ = _getOwnableStorage();
        address oldOwner = $._owner;
        $._owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol


// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuardUpgradeable is Initializable {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    function __ReentrancyGuard_init() internal onlyInitializing {
        __ReentrancyGuard_init_unchained();
    }

    function __ReentrancyGuard_init_unchained() internal onlyInitializing {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be _NOT_ENTERED
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
     * `nonReentrant` function in the call stack.
     */
    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == _ENTERED;
    }

    /**
     * @dev This empty reserved space is put in place to allow future versions to add new
     * variables without shifting down storage in the inheritance chain.
     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps
     */
    uint256[49] private __gap;
}

// File: xfed.sol


pragma solidity ^0.8.0;





interface IRouter {
    function addLiquidityETH(
        address token,
        uint256 tokenAmount,
        uint256 minTokenAmount,
        uint256 minETHAmount,
        address recipient,
        uint256 deadline
    ) external payable;
}

contract Xfed is Initializable, ERC20PausableUpgradeable, OwnableUpgradeable, ReentrancyGuardUpgradeable {
    uint256 public constant TOTAL_SUPPLY = 1_000_000_000_000 * 10**18; // 100 billion tokens

    mapping(string => address) public routers;

    event RouterAdded(string routerName, address routerAddress);
    event RouterRemoved(string routerName);
    event TokensBurned(address indexed burner, uint256 amount);

    function initialize(string memory name, string memory symbol) public initializer {
        __ERC20_init(name, symbol);
        __ERC20Pausable_init();
        __Ownable_init(msg.sender);
        __ReentrancyGuard_init();

        _mint(msg.sender, TOTAL_SUPPLY); // Mint total supply to the owner
    }

    /**
     * @dev Set or update a router by its name and address.
     */
    function setRouter(string calldata routerName, address routerAddress) external onlyOwner {
        require(routerAddress != address(0), "Router address cannot be zero");
        routers[routerName] = routerAddress;
        emit RouterAdded(routerName, routerAddress);
    }

    /**
     * @dev Remove a router by its name.
     */
    function removeRouter(string calldata routerName) external onlyOwner {
        require(routers[routerName] != address(0), "Router does not exist");
        delete routers[routerName];
        emit RouterRemoved(routerName);
    }

    /**
     * @dev Add liquidity to a router with ETH.
     */
    function addLiquidityETH(
        string calldata routerName,
        uint256 tokenAmount,
        uint256 ethAmount
    ) external payable onlyOwner nonReentrant whenNotPaused {
        address routerAddress = routers[routerName];
        require(routerAddress != address(0), "Router not found");

        IRouter router = IRouter(routerAddress);

        // Approve the router to spend tokens
        _approve(address(this), routerAddress, tokenAmount);

        // Add liquidity
        router.addLiquidityETH{value: ethAmount}(
            address(this), // Token address
            tokenAmount,   // Amount of tokens
            0,             // Minimum token amount
            0,             // Minimum ETH amount
            owner(),       // Recipient
            block.timestamp + 3600 // Deadline
        );
    }

    /**
     * @dev Burn tokens manually.
     */
    function burn(uint256 amount) external onlyOwner {
        require(amount > 0, "Amount must be greater than zero");
        _burn(_msgSender(), amount);
        emit TokensBurned(_msgSender(), amount);
    }
}

Contract Security Audit

Contract ABI

[{"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":[],"name":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExpectedPause","type":"error"},{"inputs":[],"name":"InvalidInitialization","type":"error"},{"inputs":[],"name":"NotInitializing","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":"uint64","name":"version","type":"uint64"}],"name":"Initialized","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":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"routerName","type":"string"},{"indexed":false,"internalType":"address","name":"routerAddress","type":"address"}],"name":"RouterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"routerName","type":"string"}],"name":"RouterRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"burner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"TOTAL_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"routerName","type":"string"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"addLiquidityETH","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","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":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"routerName","type":"string"}],"name":"removeRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"routers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"routerName","type":"string"},{"internalType":"address","name":"routerAddress","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561000f575f80fd5b506116818061001d5f395ff3fe60806040526004361061011b575f3560e01c806370a082311161009d578063a9059cbb11610062578063a9059cbb14610378578063bfed277f14610397578063dd62ed3e146103aa578063e81f7ec9146103c9578063f2fde38b146103e8575f80fd5b806370a08231146102dc578063715018a61461031c5780638da5cb5b14610330578063902d55a51461034457806395d89b4114610364575f80fd5b80633576d024116100e35780633576d024146101ef57806337ee35d41461024757806342966c68146102685780634cd88b76146102875780635c975abb146102a6575f80fd5b806306fdde031461011f578063095ea7b31461014957806318160ddd1461017857806323b872dd146101b5578063313ce567146101d4575b5f80fd5b34801561012a575f80fd5b50610133610407565b60405161014091906110cf565b60405180910390f35b348015610154575f80fd5b50610168610163366004611135565b6104c7565b6040519015158152602001610140565b348015610183575f80fd5b507f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b604051908152602001610140565b3480156101c0575f80fd5b506101686101cf36600461115d565b6104e0565b3480156101df575f80fd5b5060405160128152602001610140565b3480156101fa575f80fd5b5061022f610209366004611233565b80516020818301810180516032825292820191909301209152546001600160a01b031681565b6040516001600160a01b039091168152602001610140565b348015610252575f80fd5b506102666102613660046112b2565b610503565b005b348015610273575f80fd5b50610266610282366004611302565b6105e7565b348015610292575f80fd5b506102666102a1366004611319565b610680565b3480156102b1575f80fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610168565b3480156102e7575f80fd5b506101a76102f6366004611379565b6001600160a01b03165f9081525f8051602061162c833981519152602052604090205490565b348015610327575f80fd5b506102666107c0565b34801561033b575f80fd5b5061022f6107d3565b34801561034f575f80fd5b506101a76c0c9f2c9cd04674edea4000000081565b34801561036f575f80fd5b50610133610801565b348015610383575f80fd5b50610168610392366004611135565b61083f565b6102666103a5366004611399565b61084c565b3480156103b5575f80fd5b506101a76103c43660046113e6565b610994565b3480156103d4575f80fd5b506102666103e3366004611417565b6109dd565b3480156103f3575f80fd5b50610266610402366004611379565b610ac9565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0380546060915f8051602061162c8339815191529161044590611456565b80601f016020809104026020016040519081016040528092919081815260200182805461047190611456565b80156104bc5780601f10610493576101008083540402835291602001916104bc565b820191905f5260205f20905b81548152906001019060200180831161049f57829003601f168201915b505050505091505090565b5f336104d4818585610b06565b60019150505b92915050565b5f336104ed858285610b18565b6104f8858585610b75565b506001949350505050565b61050b610bd2565b6001600160a01b0381166105665760405162461bcd60e51b815260206004820152601d60248201527f526f7574657220616464726573732063616e6e6f74206265207a65726f00000060448201526064015b60405180910390fd5b806032848460405161057992919061148e565b90815260405190819003602001812080546001600160a01b03939093166001600160a01b0319909316929092179091557ff1de8525e8449af0de96ab21735341331b5d5254af583acbe00088058b7cd739906105da908590859085906114c5565b60405180910390a1505050565b6105ef610bd2565b5f811161063e5760405162461bcd60e51b815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f604482015260640161055d565b6106483382610c04565b60405181815233907ffd38818f5291bf0bb3a2a48aadc06ba8757865d1dabd804585338aab3009dcb69060200160405180910390a250565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f811580156106c55750825b90505f8267ffffffffffffffff1660011480156106e15750303b155b9050811580156106ef575080155b1561070d5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561073757845460ff60401b1916600160401b1785555b6107418787610c3c565b610749610c4e565b61075233610c5e565b61075a610c6f565b610771336c0c9f2c9cd04674edea40000000610c7f565b83156107b757845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6107c8610bd2565b6107d15f610cb3565b565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060915f8051602061162c8339815191529161044590611456565b5f336104d4818585610b75565b610854610bd2565b61085c610d23565b610864610d7a565b5f6032858560405161087792919061148e565b908152604051908190036020019020546001600160a01b03169050806108d25760405162461bcd60e51b815260206004820152601060248201526f149bdd5d195c881b9bdd08199bdd5b9960821b604482015260640161055d565b806108de308286610b06565b806001600160a01b031663f305d7198430875f806108fa6107d3565b61090642610e106114f0565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c4015f604051808303818588803b15801561096c575f80fd5b505af115801561097e573d5f803e3d5ffd5b5050505050505061098e60015f55565b50505050565b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6109e5610bd2565b5f6001600160a01b031660328383604051610a0192919061148e565b908152604051908190036020019020546001600160a01b031603610a5f5760405162461bcd60e51b8152602060048201526015602482015274149bdd5d195c88191bd95cc81b9bdd08195e1a5cdd605a1b604482015260640161055d565b60328282604051610a7192919061148e565b90815260405190819003602001812080546001600160a01b03191690557ffd90c253274e1abf07b1af58f12f7275e443edeb032c1da98aae1d04a971ff2990610abd908490849061150f565b60405180910390a15050565b610ad1610bd2565b6001600160a01b038116610afa57604051631e4fbdf760e01b81525f600482015260240161055d565b610b0381610cb3565b50565b610b138383836001610dc3565b505050565b5f610b238484610994565b90505f19811461098e5781811015610b6757604051637dc7a0d960e11b81526001600160a01b0384166004820152602481018290526044810183905260640161055d565b61098e84848484035f610dc3565b6001600160a01b038316610b9e57604051634b637e8f60e11b81525f600482015260240161055d565b6001600160a01b038216610bc75760405163ec442f0560e01b81525f600482015260240161055d565b610b13838383610ea7565b33610bdb6107d3565b6001600160a01b0316146107d15760405163118cdaa760e01b815233600482015260240161055d565b6001600160a01b038216610c2d57604051634b637e8f60e11b81525f600482015260240161055d565b610c38825f83610ea7565b5050565b610c44610eba565b610c388282610f03565b610c56610eba565b6107d1610f53565b610c66610eba565b610b0381610f86565b610c77610eba565b6107d1610f8e565b6001600160a01b038216610ca85760405163ec442f0560e01b81525f600482015260240161055d565b610c385f8383610ea7565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b60025f5403610d745760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161055d565b60025f55565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156107d15760405163d93c066560e01b815260040160405180910390fd5b60015f55565b5f8051602061162c8339815191526001600160a01b038516610dfa5760405163e602df0560e01b81525f600482015260240161055d565b6001600160a01b038416610e2357604051634a1406b160e11b81525f600482015260240161055d565b6001600160a01b038086165f90815260018301602090815260408083209388168352929052208390558115610ea057836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610e9791815260200190565b60405180910390a35b5050505050565b610eaf610d7a565b610b13838383610f96565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166107d157604051631afcd79f60e31b815260040160405180910390fd5b610f0b610eba565b5f8051602061162c8339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03610f44848261156f565b506004810161098e838261156f565b610f5b610eba565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff19169055565b610ad1610eba565b610dbd610eba565b5f8051602061162c8339815191526001600160a01b038416610fd05781816002015f828254610fc591906114f0565b909155506110409050565b6001600160a01b0384165f90815260208290526040902054828110156110225760405163391434e360e21b81526001600160a01b0386166004820152602481018290526044810184905260640161055d565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b03831661105e57600281018054839003905561107c565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516110c191815260200190565b60405180910390a350505050565b5f6020808352835180828501525f5b818110156110fa578581018301518582016040015282016110de565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114611130575f80fd5b919050565b5f8060408385031215611146575f80fd5b61114f8361111a565b946020939093013593505050565b5f805f6060848603121561116f575f80fd5b6111788461111a565b92506111866020850161111a565b9150604084013590509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126111b9575f80fd5b813567ffffffffffffffff808211156111d4576111d4611196565b604051601f8301601f19908116603f011681019082821181831017156111fc576111fc611196565b81604052838152866020858801011115611214575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f60208284031215611243575f80fd5b813567ffffffffffffffff811115611259575f80fd5b611265848285016111aa565b949350505050565b5f8083601f84011261127d575f80fd5b50813567ffffffffffffffff811115611294575f80fd5b6020830191508360208285010111156112ab575f80fd5b9250929050565b5f805f604084860312156112c4575f80fd5b833567ffffffffffffffff8111156112da575f80fd5b6112e68682870161126d565b90945092506112f990506020850161111a565b90509250925092565b5f60208284031215611312575f80fd5b5035919050565b5f806040838503121561132a575f80fd5b823567ffffffffffffffff80821115611341575f80fd5b61134d868387016111aa565b93506020850135915080821115611362575f80fd5b5061136f858286016111aa565b9150509250929050565b5f60208284031215611389575f80fd5b6113928261111a565b9392505050565b5f805f80606085870312156113ac575f80fd5b843567ffffffffffffffff8111156113c2575f80fd5b6113ce8782880161126d565b90989097506020870135966040013595509350505050565b5f80604083850312156113f7575f80fd5b6114008361111a565b915061140e6020840161111a565b90509250929050565b5f8060208385031215611428575f80fd5b823567ffffffffffffffff81111561143e575f80fd5b61144a8582860161126d565b90969095509350505050565b600181811c9082168061146a57607f821691505b60208210810361148857634e487b7160e01b5f52602260045260245ffd5b50919050565b818382375f9101908152919050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b604081525f6114d860408301858761149d565b905060018060a01b0383166020830152949350505050565b808201808211156104da57634e487b7160e01b5f52601160045260245ffd5b602081525f61126560208301848661149d565b601f821115610b13575f81815260208120601f850160051c810160208610156115485750805b601f850160051c820191505b8181101561156757828155600101611554565b505050505050565b815167ffffffffffffffff81111561158957611589611196565b61159d816115978454611456565b84611522565b602080601f8311600181146115d0575f84156115b95750858301515b5f19600386901b1c1916600185901b178555611567565b5f85815260208120601f198616915b828110156115fe578886015182559484019460019091019084016115df565b508582101561161b57878501515f19600388901b60f8161c191681555b5050505050600190811b0190555056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a264697066735822122074563a6a9e0d93895478871dcde6f2913b3c5e7a387caca889b4147877f6ffa764736f6c63430008140033

Deployed Bytecode

0x60806040526004361061011b575f3560e01c806370a082311161009d578063a9059cbb11610062578063a9059cbb14610378578063bfed277f14610397578063dd62ed3e146103aa578063e81f7ec9146103c9578063f2fde38b146103e8575f80fd5b806370a08231146102dc578063715018a61461031c5780638da5cb5b14610330578063902d55a51461034457806395d89b4114610364575f80fd5b80633576d024116100e35780633576d024146101ef57806337ee35d41461024757806342966c68146102685780634cd88b76146102875780635c975abb146102a6575f80fd5b806306fdde031461011f578063095ea7b31461014957806318160ddd1461017857806323b872dd146101b5578063313ce567146101d4575b5f80fd5b34801561012a575f80fd5b50610133610407565b60405161014091906110cf565b60405180910390f35b348015610154575f80fd5b50610168610163366004611135565b6104c7565b6040519015158152602001610140565b348015610183575f80fd5b507f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b604051908152602001610140565b3480156101c0575f80fd5b506101686101cf36600461115d565b6104e0565b3480156101df575f80fd5b5060405160128152602001610140565b3480156101fa575f80fd5b5061022f610209366004611233565b80516020818301810180516032825292820191909301209152546001600160a01b031681565b6040516001600160a01b039091168152602001610140565b348015610252575f80fd5b506102666102613660046112b2565b610503565b005b348015610273575f80fd5b50610266610282366004611302565b6105e7565b348015610292575f80fd5b506102666102a1366004611319565b610680565b3480156102b1575f80fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610168565b3480156102e7575f80fd5b506101a76102f6366004611379565b6001600160a01b03165f9081525f8051602061162c833981519152602052604090205490565b348015610327575f80fd5b506102666107c0565b34801561033b575f80fd5b5061022f6107d3565b34801561034f575f80fd5b506101a76c0c9f2c9cd04674edea4000000081565b34801561036f575f80fd5b50610133610801565b348015610383575f80fd5b50610168610392366004611135565b61083f565b6102666103a5366004611399565b61084c565b3480156103b5575f80fd5b506101a76103c43660046113e6565b610994565b3480156103d4575f80fd5b506102666103e3366004611417565b6109dd565b3480156103f3575f80fd5b50610266610402366004611379565b610ac9565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0380546060915f8051602061162c8339815191529161044590611456565b80601f016020809104026020016040519081016040528092919081815260200182805461047190611456565b80156104bc5780601f10610493576101008083540402835291602001916104bc565b820191905f5260205f20905b81548152906001019060200180831161049f57829003601f168201915b505050505091505090565b5f336104d4818585610b06565b60019150505b92915050565b5f336104ed858285610b18565b6104f8858585610b75565b506001949350505050565b61050b610bd2565b6001600160a01b0381166105665760405162461bcd60e51b815260206004820152601d60248201527f526f7574657220616464726573732063616e6e6f74206265207a65726f00000060448201526064015b60405180910390fd5b806032848460405161057992919061148e565b90815260405190819003602001812080546001600160a01b03939093166001600160a01b0319909316929092179091557ff1de8525e8449af0de96ab21735341331b5d5254af583acbe00088058b7cd739906105da908590859085906114c5565b60405180910390a1505050565b6105ef610bd2565b5f811161063e5760405162461bcd60e51b815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f604482015260640161055d565b6106483382610c04565b60405181815233907ffd38818f5291bf0bb3a2a48aadc06ba8757865d1dabd804585338aab3009dcb69060200160405180910390a250565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f811580156106c55750825b90505f8267ffffffffffffffff1660011480156106e15750303b155b9050811580156106ef575080155b1561070d5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561073757845460ff60401b1916600160401b1785555b6107418787610c3c565b610749610c4e565b61075233610c5e565b61075a610c6f565b610771336c0c9f2c9cd04674edea40000000610c7f565b83156107b757845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6107c8610bd2565b6107d15f610cb3565b565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060915f8051602061162c8339815191529161044590611456565b5f336104d4818585610b75565b610854610bd2565b61085c610d23565b610864610d7a565b5f6032858560405161087792919061148e565b908152604051908190036020019020546001600160a01b03169050806108d25760405162461bcd60e51b815260206004820152601060248201526f149bdd5d195c881b9bdd08199bdd5b9960821b604482015260640161055d565b806108de308286610b06565b806001600160a01b031663f305d7198430875f806108fa6107d3565b61090642610e106114f0565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c4015f604051808303818588803b15801561096c575f80fd5b505af115801561097e573d5f803e3d5ffd5b5050505050505061098e60015f55565b50505050565b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6109e5610bd2565b5f6001600160a01b031660328383604051610a0192919061148e565b908152604051908190036020019020546001600160a01b031603610a5f5760405162461bcd60e51b8152602060048201526015602482015274149bdd5d195c88191bd95cc81b9bdd08195e1a5cdd605a1b604482015260640161055d565b60328282604051610a7192919061148e565b90815260405190819003602001812080546001600160a01b03191690557ffd90c253274e1abf07b1af58f12f7275e443edeb032c1da98aae1d04a971ff2990610abd908490849061150f565b60405180910390a15050565b610ad1610bd2565b6001600160a01b038116610afa57604051631e4fbdf760e01b81525f600482015260240161055d565b610b0381610cb3565b50565b610b138383836001610dc3565b505050565b5f610b238484610994565b90505f19811461098e5781811015610b6757604051637dc7a0d960e11b81526001600160a01b0384166004820152602481018290526044810183905260640161055d565b61098e84848484035f610dc3565b6001600160a01b038316610b9e57604051634b637e8f60e11b81525f600482015260240161055d565b6001600160a01b038216610bc75760405163ec442f0560e01b81525f600482015260240161055d565b610b13838383610ea7565b33610bdb6107d3565b6001600160a01b0316146107d15760405163118cdaa760e01b815233600482015260240161055d565b6001600160a01b038216610c2d57604051634b637e8f60e11b81525f600482015260240161055d565b610c38825f83610ea7565b5050565b610c44610eba565b610c388282610f03565b610c56610eba565b6107d1610f53565b610c66610eba565b610b0381610f86565b610c77610eba565b6107d1610f8e565b6001600160a01b038216610ca85760405163ec442f0560e01b81525f600482015260240161055d565b610c385f8383610ea7565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b60025f5403610d745760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161055d565b60025f55565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156107d15760405163d93c066560e01b815260040160405180910390fd5b60015f55565b5f8051602061162c8339815191526001600160a01b038516610dfa5760405163e602df0560e01b81525f600482015260240161055d565b6001600160a01b038416610e2357604051634a1406b160e11b81525f600482015260240161055d565b6001600160a01b038086165f90815260018301602090815260408083209388168352929052208390558115610ea057836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610e9791815260200190565b60405180910390a35b5050505050565b610eaf610d7a565b610b13838383610f96565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166107d157604051631afcd79f60e31b815260040160405180910390fd5b610f0b610eba565b5f8051602061162c8339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03610f44848261156f565b506004810161098e838261156f565b610f5b610eba565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff19169055565b610ad1610eba565b610dbd610eba565b5f8051602061162c8339815191526001600160a01b038416610fd05781816002015f828254610fc591906114f0565b909155506110409050565b6001600160a01b0384165f90815260208290526040902054828110156110225760405163391434e360e21b81526001600160a01b0386166004820152602481018290526044810184905260640161055d565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b03831661105e57600281018054839003905561107c565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516110c191815260200190565b60405180910390a350505050565b5f6020808352835180828501525f5b818110156110fa578581018301518582016040015282016110de565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114611130575f80fd5b919050565b5f8060408385031215611146575f80fd5b61114f8361111a565b946020939093013593505050565b5f805f6060848603121561116f575f80fd5b6111788461111a565b92506111866020850161111a565b9150604084013590509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126111b9575f80fd5b813567ffffffffffffffff808211156111d4576111d4611196565b604051601f8301601f19908116603f011681019082821181831017156111fc576111fc611196565b81604052838152866020858801011115611214575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f60208284031215611243575f80fd5b813567ffffffffffffffff811115611259575f80fd5b611265848285016111aa565b949350505050565b5f8083601f84011261127d575f80fd5b50813567ffffffffffffffff811115611294575f80fd5b6020830191508360208285010111156112ab575f80fd5b9250929050565b5f805f604084860312156112c4575f80fd5b833567ffffffffffffffff8111156112da575f80fd5b6112e68682870161126d565b90945092506112f990506020850161111a565b90509250925092565b5f60208284031215611312575f80fd5b5035919050565b5f806040838503121561132a575f80fd5b823567ffffffffffffffff80821115611341575f80fd5b61134d868387016111aa565b93506020850135915080821115611362575f80fd5b5061136f858286016111aa565b9150509250929050565b5f60208284031215611389575f80fd5b6113928261111a565b9392505050565b5f805f80606085870312156113ac575f80fd5b843567ffffffffffffffff8111156113c2575f80fd5b6113ce8782880161126d565b90989097506020870135966040013595509350505050565b5f80604083850312156113f7575f80fd5b6114008361111a565b915061140e6020840161111a565b90509250929050565b5f8060208385031215611428575f80fd5b823567ffffffffffffffff81111561143e575f80fd5b61144a8582860161126d565b90969095509350505050565b600181811c9082168061146a57607f821691505b60208210810361148857634e487b7160e01b5f52602260045260245ffd5b50919050565b818382375f9101908152919050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b604081525f6114d860408301858761149d565b905060018060a01b0383166020830152949350505050565b808201808211156104da57634e487b7160e01b5f52601160045260245ffd5b602081525f61126560208301848661149d565b601f821115610b13575f81815260208120601f850160051c810160208610156115485750805b601f850160051c820191505b8181101561156757828155600101611554565b505050505050565b815167ffffffffffffffff81111561158957611589611196565b61159d816115978454611456565b84611522565b602080601f8311600181146115d0575f84156115b95750858301515b5f19600386901b1c1916600185901b178555611567565b5f85815260208120601f198616915b828110156115fe578886015182559484019460019091019084016115df565b508582101561161b57878501515f19600388901b60f8161c191681555b5050505050600190811b0190555056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a264697066735822122074563a6a9e0d93895478871dcde6f2913b3c5e7a387caca889b4147877f6ffa764736f6c63430008140033

Deployed Bytecode Sourcemap

46543:2608:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23193:147;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25766:190;;;;;;;;;;-1:-1:-1;25766:190:0;;;;;:::i;:::-;;:::i;:::-;;;1169:14:1;;1162:22;1144:41;;1132:2;1117:18;25766:190:0;1004:187:1;24407:155:0;;;;;;;;;;-1:-1:-1;24540:14:0;;24407:155;;;1342:25:1;;;1330:2;1315:18;24407:155:0;1196:177:1;26566:249:0;;;;;;;;;;-1:-1:-1;26566:249:0;;;;;:::i;:::-;;:::i;24258:84::-;;;;;;;;;;-1:-1:-1;24258:84:0;;24332:2;1853:36:1;;1841:2;1826:18;24258:84:0;1711:184:1;46751:41:0;;;;;;;;;;-1:-1:-1;46751:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;46751:41:0;;;;;;-1:-1:-1;;;;;3247:32:1;;;3229:51;;3217:2;3202:18;46751:41:0;3083:203:1;47375:277:0;;;;;;;;;;-1:-1:-1;47375:277:0;;;;;:::i;:::-;;:::i;:::-;;48937:211;;;;;;;;;;-1:-1:-1;48937:211:0;;;;;:::i;:::-;;:::i;46979:309::-;;;;;;;;;;-1:-1:-1;46979:309:0;;;;;:::i;:::-;;:::i;35669:148::-;;;;;;;;;;-1:-1:-1;34184:23:0;35800:9;;;35669:148;;24625:174;;;;;;;;;;-1:-1:-1;24625:174:0;;;;;:::i;:::-;-1:-1:-1;;;;;24771:20:0;24690:7;24771:20;;;-1:-1:-1;;;;;;;;;;;24771:20:0;;;;;;;24625:174;41565:103;;;;;;;;;;;;;:::i;40830:147::-;;;;;;;;;;;;;:::i;46655:65::-;;;;;;;;;;;;46694:26;46655:65;;23459:151;;;;;;;;;;;;;:::i;25004:182::-;;;;;;;;;;-1:-1:-1;25004:182:0;;;;;:::i;:::-;;:::i;48028:848::-;;;;;;:::i;:::-;;:::i;25249:198::-;;;;;;;;;;-1:-1:-1;25249:198:0;;;;;:::i;:::-;;:::i;47720:233::-;;;;;;;;;;-1:-1:-1;47720:233:0;;;;;:::i;:::-;;:::i;41823:220::-;;;;;;;;;;-1:-1:-1;41823:220:0;;;;;:::i;:::-;;:::i;23193:147::-;23325:7;23318:14;;23238:13;;-1:-1:-1;;;;;;;;;;;22518:20:0;23318:14;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23193:147;:::o;25766:190::-;25839:4;13768:10;25895:31;13768:10;25911:7;25920:5;25895:8;:31::i;:::-;25944:4;25937:11;;;25766:190;;;;;:::o;26566:249::-;26653:4;13768:10;26711:37;26727:4;13768:10;26742:5;26711:15;:37::i;:::-;26759:26;26769:4;26775:2;26779:5;26759:9;:26::i;:::-;-1:-1:-1;26803:4:0;;26566:249;-1:-1:-1;;;;26566:249:0:o;47375:277::-;40716:13;:11;:13::i;:::-;-1:-1:-1;;;;;47483:27:0;::::1;47475:69;;;::::0;-1:-1:-1;;;47475:69:0;;6878:2:1;47475:69:0::1;::::0;::::1;6860:21:1::0;6917:2;6897:18;;;6890:30;6956:31;6936:18;;;6929:59;7005:18;;47475:69:0::1;;;;;;;;;47577:13;47555:7;47563:10;;47555:19;;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;:35;;-1:-1:-1;;;;;47555:35:0;;;::::1;-1:-1:-1::0;;;;;;47555:35:0;;::::1;::::0;;;::::1;::::0;;;47606:38:::1;::::0;::::1;::::0;47618:10;;;;47630:13;;47606:38:::1;:::i;:::-;;;;;;;;47375:277:::0;;;:::o;48937:211::-;40716:13;:11;:13::i;:::-;49014:1:::1;49005:6;:10;48997:55;;;::::0;-1:-1:-1;;;48997:55:0;;8135:2:1;48997:55:0::1;::::0;::::1;8117:21:1::0;;;8154:18;;;8147:30;8213:34;8193:18;;;8186:62;8265:18;;48997:55:0::1;7933:356:1::0;48997:55:0::1;49063:27;13768:10:::0;49083:6:::1;49063:5;:27::i;:::-;49106:34;::::0;1342:25:1;;;13768:10:0;;49106:34:::1;::::0;1330:2:1;1315:18;49106:34:0::1;;;;;;;48937:211:::0;:::o;46979:309::-;12750:21;8066:15;;-1:-1:-1;;;8066:15:0;;;;8065:16;;8113:14;;7919:30;8498:16;;:34;;;;;8518:14;8498:34;8478:54;;8543:17;8563:11;:16;;8578:1;8563:16;:50;;;;-1:-1:-1;8591:4:0;8583:25;:30;8563:50;8543:70;;8631:12;8630:13;:30;;;;;8648:12;8647:13;8630:30;8626:93;;;8684:23;;-1:-1:-1;;;8684:23:0;;;;;;;;;;;8626:93;8729:18;;-1:-1:-1;;8729:18:0;8746:1;8729:18;;;8758:69;;;;8793:22;;-1:-1:-1;;;;8793:22:0;-1:-1:-1;;;8793:22:0;;;8758:69;47071:26:::1;47084:4;47090:6;47071:12;:26::i;:::-;47108:22;:20;:22::i;:::-;47141:26;47156:10;47141:14;:26::i;:::-;47178:24;:22;:24::i;:::-;47215:31;47221:10;46694:26;47215:5;:31::i;:::-;8853:14:::0;8849:104;;;8884:23;;-1:-1:-1;;;;8884:23:0;;;8927:14;;-1:-1:-1;8447:50:1;;8927:14:0;;8435:2:1;8420:18;8927:14:0;;;;;;;8849:104;7851:1109;;;;;46979:309;;:::o;41565:103::-;40716:13;:11;:13::i;:::-;41630:30:::1;41657:1;41630:18;:30::i;:::-;41565:103::o:0;40830:147::-;39661:22;40961:8;-1:-1:-1;;;;;40961:8:0;;40830:147::o;23459:151::-;23593:9;23586:16;;23506:13;;-1:-1:-1;;;;;;;;;;;22518:20:0;23586:16;;;:::i;25004:182::-;25073:4;13768:10;25129:27;13768:10;25146:2;25150:5;25129:9;:27::i;48028:848::-;40716:13;:11;:13::i;:::-;45038:21:::1;:19;:21::i;:::-;35274:19:::2;:17;:19::i;:::-;48220:21:::3;48244:7;48252:10;;48244:19;;;;;;;:::i;:::-;::::0;;;::::3;::::0;;;;;::::3;::::0;;;;-1:-1:-1;;;;;48244:19:0::3;::::0;-1:-1:-1;48244:19:0;48274:56:::3;;;::::0;-1:-1:-1;;;48274:56:0;;8710:2:1;48274:56:0::3;::::0;::::3;8692:21:1::0;8749:2;8729:18;;;8722:30;-1:-1:-1;;;8768:18:1;;;8761:46;8824:18;;48274:56:0::3;8508:340:1::0;48274:56:0::3;48368:13:::0;48442:51:::3;48459:4;48368:13:::0;48481:11;48442:8:::3;:51::i;:::-;48532:6;-1:-1:-1::0;;;;;48532:22:0::3;;48562:9;48595:4;48632:11;48680:1;48732::::0;48782:7:::3;:5;:7::i;:::-;48823:22;:15;48841:4;48823:22;:::i;:::-;48532:336;::::0;::::3;::::0;;;-1:-1:-1;;;;;;48532:336:0;;;-1:-1:-1;;;;;9439:15:1;;;48532:336:0::3;::::0;::::3;9421:34:1::0;9471:18;;;9464:34;;;;9514:18;;;9507:34;;;;9557:18;;;9550:34;;;;9621:15;;;9600:19;;;9593:44;9653:19;;;9646:35;;;;9355:19;;48532:336:0::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;48209:667;;45082:20:::1;44299:1:::0;45602:7;:22;45419:213;45082:20:::1;48028:848:::0;;;;:::o;25249:198::-;-1:-1:-1;;;;;25410:20:0;;;25329:7;25410:20;;;:13;:20;;;;;;;;:29;;;;;;;;;;;;;25249:198::o;47720:233::-;40716:13;:11;:13::i;:::-;47839:1:::1;-1:-1:-1::0;;;;;47808:33:0::1;:7;47816:10;;47808:19;;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;;-1:-1:-1;;;;;47808:19:0::1;:33:::0;47800:67:::1;;;::::0;-1:-1:-1;;;47800:67:0;;9894:2:1;47800:67:0::1;::::0;::::1;9876:21:1::0;9933:2;9913:18;;;9906:30;-1:-1:-1;;;9952:18:1;;;9945:51;10013:18;;47800:67:0::1;9692:345:1::0;47800:67:0::1;47885:7;47893:10;;47885:19;;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;47878:26;;-1:-1:-1;;;;;;47878:26:0::1;::::0;;47920:25:::1;::::0;::::1;::::0;47934:10;;;;47920:25:::1;:::i;:::-;;;;;;;;47720:233:::0;;:::o;41823:220::-;40716:13;:11;:13::i;:::-;-1:-1:-1;;;;;41908:22:0;::::1;41904:93;;41954:31;::::0;-1:-1:-1;;;41954:31:0;;41982:1:::1;41954:31;::::0;::::1;3229:51:1::0;3202:18;;41954:31:0::1;3083:203:1::0;41904:93:0::1;42007:28;42026:8;42007:18;:28::i;:::-;41823:220:::0;:::o;30689:130::-;30774:37;30783:5;30790:7;30799:5;30806:4;30774:8;:37::i;:::-;30689:130;;;:::o;32477:487::-;32577:24;32604:25;32614:5;32621:7;32604:9;:25::i;:::-;32577:52;;-1:-1:-1;;32644:16:0;:37;32640:317;;32721:5;32702:16;:24;32698:132;;;32754:60;;-1:-1:-1;;;32754:60:0;;-1:-1:-1;;;;;10514:32:1;;32754:60:0;;;10496:51:1;10563:18;;;10556:34;;;10606:18;;;10599:34;;;10469:18;;32754:60:0;10294:345:1;32698:132:0;32873:57;32882:5;32889:7;32917:5;32898:16;:24;32924:5;32873:8;:57::i;27200:308::-;-1:-1:-1;;;;;27284:18:0;;27280:88;;27326:30;;-1:-1:-1;;;27326:30:0;;27353:1;27326:30;;;3229:51:1;3202:18;;27326:30:0;3083:203:1;27280:88:0;-1:-1:-1;;;;;27382:16:0;;27378:88;;27422:32;;-1:-1:-1;;;27422:32:0;;27451:1;27422:32;;;3229:51:1;3202:18;;27422:32:0;3083:203:1;27378:88:0;27476:24;27484:4;27490:2;27494:5;27476:7;:24::i;41055:166::-;13768:10;41115:7;:5;:7::i;:::-;-1:-1:-1;;;;;41115:23:0;;41111:103;;41162:40;;-1:-1:-1;;;41162:40:0;;13768:10;41162:40;;;3229:51:1;3202:18;;41162:40:0;3083:203:1;29925:211:0;-1:-1:-1;;;;;29996:21:0;;29992:91;;30041:30;;-1:-1:-1;;;30041:30:0;;30068:1;30041:30;;;3229:51:1;3202:18;;30041:30:0;3083:203:1;29992:91:0;30093:35;30101:7;30118:1;30122:5;30093:7;:35::i;:::-;29925:211;;:::o;22746:149::-;10757:20;:18;:20::i;:::-;22849:38:::1;22872:5;22879:7;22849:22;:38::i;37921:104::-:0;10757:20;:18;:20::i;:::-;37990:27:::1;:25;:27::i;40214:129::-:0;10757:20;:18;:20::i;:::-;40297:38:::1;40322:12;40297:24;:38::i;44385:113::-:0;10757:20;:18;:20::i;:::-;44456:34:::1;:32;:34::i;29384:213::-:0;-1:-1:-1;;;;;29455:21:0;;29451:93;;29500:32;;-1:-1:-1;;;29500:32:0;;29529:1;29500:32;;;3229:51:1;3202:18;;29500:32:0;3083:203:1;29451:93:0;29554:35;29570:1;29574:7;29583:5;29554:7;:35::i;42203:253::-;39661:22;42354:8;;-1:-1:-1;;;;;;42373:19:0;;-1:-1:-1;;;;;42373:19:0;;;;;;;;42408:40;;42354:8;;;;;42408:40;;42277:24;;42408:40;42266:190;;42203:253;:::o;45118:293::-;44343:1;45252:7;;:19;45244:63;;;;-1:-1:-1;;;45244:63:0;;10846:2:1;45244:63:0;;;10828:21:1;10885:2;10865:18;;;10858:30;10924:33;10904:18;;;10897:61;10975:18;;45244:63:0;10644:355:1;45244:63:0;44343:1;45385:7;:18;45118:293::o;35890:132::-;34184:23;35800:9;;;35952:63;;;35988:15;;-1:-1:-1;;;35988:15:0;;;;;;;;;;;45419:213;44299:1;45602:7;:22;45419:213::o;31686:499::-;-1:-1:-1;;;;;;;;;;;;;;;;31853:19:0;;31849:91;;31896:32;;-1:-1:-1;;;31896:32:0;;31925:1;31896:32;;;3229:51:1;3202:18;;31896:32:0;3083:203:1;31849:91:0;-1:-1:-1;;;;;31954:21:0;;31950:92;;31999:31;;-1:-1:-1;;;31999:31:0;;32027:1;31999:31;;;3229:51:1;3202:18;;31999:31:0;3083:203:1;31950:92:0;-1:-1:-1;;;;;32052:20:0;;;;;;;:13;;;:20;;;;;;;;:29;;;;;;;;;:37;;;32100:78;;;;32151:7;-1:-1:-1;;;;;32135:31:0;32144:5;-1:-1:-1;;;;;32135:31:0;;32160:5;32135:31;;;;1342:25:1;;1330:2;1315:18;;1196:177;32135:31:0;;;;;;;;32100:78;31784:401;31686:499;;;;:::o;38248:147::-;35274:19;:17;:19::i;:::-;38357:30:::1;38371:4;38377:2;38381:5;38357:13;:30::i;10917:145::-:0;12750:21;12431:40;-1:-1:-1;;;12431:40:0;;;;10980:75;;11026:17;;-1:-1:-1;;;11026:17:0;;;;;;;;;;;22903:220;10757:20;:18;:20::i;:::-;-1:-1:-1;;;;;;;;;;;23070:7:0;:15:::1;23080:5:::0;23070:7;:15:::1;:::i;:::-;-1:-1:-1::0;23096:9:0::1;::::0;::::1;:19;23108:7:::0;23096:9;:19:::1;:::i;34884:159::-:0;10757:20;:18;:20::i;:::-;34184:23;35018:17;;-1:-1:-1;;35018:17:0::1;::::0;;34884:159::o;40351:240::-;10757:20;:18;:20::i;44506:111::-;10757:20;:18;:20::i;27832:1199::-;-1:-1:-1;;;;;;;;;;;;;;;;27976:18:0;;27972:558;;28132:5;28114:1;:14;;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;27972:558:0;;-1:-1:-1;27972:558:0;;-1:-1:-1;;;;;28192:17:0;;28170:19;28192:17;;;;;;;;;;;28228:19;;;28224:117;;;28275:50;;-1:-1:-1;;;28275:50:0;;-1:-1:-1;;;;;10514:32:1;;28275:50:0;;;10496:51:1;10563:18;;;10556:34;;;10606:18;;;10599:34;;;10469:18;;28275:50:0;10294:345:1;28224:117:0;-1:-1:-1;;;;;28464:17:0;;:11;:17;;;;;;;;;;28484:19;;;;28464:39;;27972:558;-1:-1:-1;;;;;28546:16:0;;28542:439;;28712:14;;;:23;;;;;;;28542:439;;;-1:-1:-1;;;;;28930:15:0;;:11;:15;;;;;;;;;;:24;;;;;;28542:439;29013:2;-1:-1:-1;;;;;28998:25:0;29007:4;-1:-1:-1;;;;;28998:25:0;;29017:5;28998:25;;;;1342::1;;1330:2;1315:18;;1196:177;28998:25:0;;;;;;;;27907:1124;27832:1199;;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:173::-;635:20;;-1:-1:-1;;;;;684:31:1;;674:42;;664:70;;730:1;727;720:12;664:70;567:173;;;:::o;745:254::-;813:6;821;874:2;862:9;853:7;849:23;845:32;842:52;;;890:1;887;880:12;842:52;913:29;932:9;913:29;:::i;:::-;903:39;989:2;974:18;;;;961:32;;-1:-1:-1;;;745:254:1:o;1378:328::-;1455:6;1463;1471;1524:2;1512:9;1503:7;1499:23;1495:32;1492:52;;;1540:1;1537;1530:12;1492:52;1563:29;1582:9;1563:29;:::i;:::-;1553:39;;1611:38;1645:2;1634:9;1630:18;1611:38;:::i;:::-;1601:48;;1696:2;1685:9;1681:18;1668:32;1658:42;;1378:328;;;;;:::o;1900:127::-;1961:10;1956:3;1952:20;1949:1;1942:31;1992:4;1989:1;1982:15;2016:4;2013:1;2006:15;2032:719;2075:5;2128:3;2121:4;2113:6;2109:17;2105:27;2095:55;;2146:1;2143;2136:12;2095:55;2182:6;2169:20;2208:18;2245:2;2241;2238:10;2235:36;;;2251:18;;:::i;:::-;2326:2;2320:9;2294:2;2380:13;;-1:-1:-1;;2376:22:1;;;2400:2;2372:31;2368:40;2356:53;;;2424:18;;;2444:22;;;2421:46;2418:72;;;2470:18;;:::i;:::-;2510:10;2506:2;2499:22;2545:2;2537:6;2530:18;2591:3;2584:4;2579:2;2571:6;2567:15;2563:26;2560:35;2557:55;;;2608:1;2605;2598:12;2557:55;2672:2;2665:4;2657:6;2653:17;2646:4;2638:6;2634:17;2621:54;2719:1;2712:4;2707:2;2699:6;2695:15;2691:26;2684:37;2739:6;2730:15;;;;;;2032:719;;;;:::o;2756:322::-;2825:6;2878:2;2866:9;2857:7;2853:23;2849:32;2846:52;;;2894:1;2891;2884:12;2846:52;2934:9;2921:23;2967:18;2959:6;2956:30;2953:50;;;2999:1;2996;2989:12;2953:50;3022;3064:7;3055:6;3044:9;3040:22;3022:50;:::i;:::-;3012:60;2756:322;-1:-1:-1;;;;2756:322:1:o;3291:348::-;3343:8;3353:6;3407:3;3400:4;3392:6;3388:17;3384:27;3374:55;;3425:1;3422;3415:12;3374:55;-1:-1:-1;3448:20:1;;3491:18;3480:30;;3477:50;;;3523:1;3520;3513:12;3477:50;3560:4;3552:6;3548:17;3536:29;;3612:3;3605:4;3596:6;3588;3584:19;3580:30;3577:39;3574:59;;;3629:1;3626;3619:12;3574:59;3291:348;;;;;:::o;3644:485::-;3724:6;3732;3740;3793:2;3781:9;3772:7;3768:23;3764:32;3761:52;;;3809:1;3806;3799:12;3761:52;3849:9;3836:23;3882:18;3874:6;3871:30;3868:50;;;3914:1;3911;3904:12;3868:50;3953:59;4004:7;3995:6;3984:9;3980:22;3953:59;:::i;:::-;4031:8;;-1:-1:-1;3927:85:1;-1:-1:-1;4085:38:1;;-1:-1:-1;4119:2:1;4104:18;;4085:38;:::i;:::-;4075:48;;3644:485;;;;;:::o;4134:180::-;4193:6;4246:2;4234:9;4225:7;4221:23;4217:32;4214:52;;;4262:1;4259;4252:12;4214:52;-1:-1:-1;4285:23:1;;4134:180;-1:-1:-1;4134:180:1:o;4319:543::-;4407:6;4415;4468:2;4456:9;4447:7;4443:23;4439:32;4436:52;;;4484:1;4481;4474:12;4436:52;4524:9;4511:23;4553:18;4594:2;4586:6;4583:14;4580:34;;;4610:1;4607;4600:12;4580:34;4633:50;4675:7;4666:6;4655:9;4651:22;4633:50;:::i;:::-;4623:60;;4736:2;4725:9;4721:18;4708:32;4692:48;;4765:2;4755:8;4752:16;4749:36;;;4781:1;4778;4771:12;4749:36;;4804:52;4848:7;4837:8;4826:9;4822:24;4804:52;:::i;:::-;4794:62;;;4319:543;;;;;:::o;4867:186::-;4926:6;4979:2;4967:9;4958:7;4954:23;4950:32;4947:52;;;4995:1;4992;4985:12;4947:52;5018:29;5037:9;5018:29;:::i;:::-;5008:39;4867:186;-1:-1:-1;;;4867:186:1:o;5058:547::-;5147:6;5155;5163;5171;5224:2;5212:9;5203:7;5199:23;5195:32;5192:52;;;5240:1;5237;5230:12;5192:52;5280:9;5267:23;5313:18;5305:6;5302:30;5299:50;;;5345:1;5342;5335:12;5299:50;5384:59;5435:7;5426:6;5415:9;5411:22;5384:59;:::i;:::-;5462:8;;5358:85;;-1:-1:-1;5544:2:1;5529:18;;5516:32;;5595:2;5580:18;5567:32;;-1:-1:-1;5058:547:1;-1:-1:-1;;;;5058:547:1:o;5610:260::-;5678:6;5686;5739:2;5727:9;5718:7;5714:23;5710:32;5707:52;;;5755:1;5752;5745:12;5707:52;5778:29;5797:9;5778:29;:::i;:::-;5768:39;;5826:38;5860:2;5849:9;5845:18;5826:38;:::i;:::-;5816:48;;5610:260;;;;;:::o;5875:411::-;5946:6;5954;6007:2;5995:9;5986:7;5982:23;5978:32;5975:52;;;6023:1;6020;6013:12;5975:52;6063:9;6050:23;6096:18;6088:6;6085:30;6082:50;;;6128:1;6125;6118:12;6082:50;6167:59;6218:7;6209:6;6198:9;6194:22;6167:59;:::i;:::-;6245:8;;6141:85;;-1:-1:-1;5875:411:1;-1:-1:-1;;;;5875:411:1:o;6291:380::-;6370:1;6366:12;;;;6413;;;6434:61;;6488:4;6480:6;6476:17;6466:27;;6434:61;6541:2;6533:6;6530:14;6510:18;6507:38;6504:161;;6587:10;6582:3;6578:20;6575:1;6568:31;6622:4;6619:1;6612:15;6650:4;6647:1;6640:15;6504:161;;6291:380;;;:::o;7034:273::-;7219:6;7211;7206:3;7193:33;7175:3;7245:16;;7270:13;;;7245:16;7034:273;-1:-1:-1;7034:273:1:o;7312:267::-;7401:6;7396:3;7389:19;7453:6;7446:5;7439:4;7434:3;7430:14;7417:43;-1:-1:-1;7505:1:1;7480:16;;;7498:4;7476:27;;;7469:38;;;;7561:2;7540:15;;;-1:-1:-1;;7536:29:1;7527:39;;;7523:50;;7312:267::o;7584:344::-;7771:2;7760:9;7753:21;7734:4;7791:62;7849:2;7838:9;7834:18;7826:6;7818;7791:62;:::i;:::-;7783:70;;7918:1;7914;7909:3;7905:11;7901:19;7893:6;7889:32;7884:2;7873:9;7869:18;7862:60;7584:344;;;;;;:::o;8853:222::-;8918:9;;;8939:10;;;8936:133;;;8991:10;8986:3;8982:20;8979:1;8972:31;9026:4;9023:1;9016:15;9054:4;9051:1;9044:15;10042:247;10201:2;10190:9;10183:21;10164:4;10221:62;10279:2;10268:9;10264:18;10256:6;10248;10221:62;:::i;11130:545::-;11232:2;11227:3;11224:11;11221:448;;;11268:1;11293:5;11289:2;11282:17;11338:4;11334:2;11324:19;11408:2;11396:10;11392:19;11389:1;11385:27;11379:4;11375:38;11444:4;11432:10;11429:20;11426:47;;;-1:-1:-1;11467:4:1;11426:47;11522:2;11517:3;11513:12;11510:1;11506:20;11500:4;11496:31;11486:41;;11577:82;11595:2;11588:5;11585:13;11577:82;;;11640:17;;;11621:1;11610:13;11577:82;;;11581:3;;;11130:545;;;:::o;11851:1352::-;11977:3;11971:10;12004:18;11996:6;11993:30;11990:56;;;12026:18;;:::i;:::-;12055:97;12145:6;12105:38;12137:4;12131:11;12105:38;:::i;:::-;12099:4;12055:97;:::i;:::-;12207:4;;12271:2;12260:14;;12288:1;12283:663;;;;12990:1;13007:6;13004:89;;;-1:-1:-1;13059:19:1;;;13053:26;13004:89;-1:-1:-1;;11808:1:1;11804:11;;;11800:24;11796:29;11786:40;11832:1;11828:11;;;11783:57;13106:81;;12253:944;;12283:663;11077:1;11070:14;;;11114:4;11101:18;;-1:-1:-1;;12319:20:1;;;12437:236;12451:7;12448:1;12445:14;12437:236;;;12540:19;;;12534:26;12519:42;;12632:27;;;;12600:1;12588:14;;;;12467:19;;12437:236;;;12441:3;12701:6;12692:7;12689:19;12686:201;;;12762:19;;;12756:26;-1:-1:-1;;12845:1:1;12841:14;;;12857:3;12837:24;12833:37;12829:42;12814:58;12799:74;;12686:201;-1:-1:-1;;;;;12933:1:1;12917:14;;;12913:22;12900:36;;-1:-1:-1;11851:1352:1:o

Swarm Source

ipfs://74563a6a9e0d93895478871dcde6f2913b3c5e7a387caca889b4147877f6ffa7

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

OVERVIEW

XFED is a DeFi movement on the Ethereum blockchain, offering transparency, security, and accessibility to empower individuals and take control of their financial future. The XFED token provides a decentralized alternative that challenges the current finance system.

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.