Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 118 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 21719233 | 8 days ago | IN | 0 ETH | 0.00026981 | ||||
Approve | 21719215 | 8 days ago | IN | 0 ETH | 0.00027577 | ||||
Approve | 21719199 | 8 days ago | IN | 0 ETH | 0.00025692 | ||||
Approve | 21714623 | 9 days ago | IN | 0 ETH | 0.000461 | ||||
Approve | 21687484 | 13 days ago | IN | 0 ETH | 0.00083323 | ||||
Transfer | 21685654 | 13 days ago | IN | 0 ETH | 0.00024534 | ||||
Approve | 21679625 | 14 days ago | IN | 0 ETH | 0.00036378 | ||||
Transfer | 21674833 | 14 days ago | IN | 0 ETH | 0.00133732 | ||||
Approve | 21671156 | 15 days ago | IN | 0 ETH | 0.00040532 | ||||
Approve | 21671035 | 15 days ago | IN | 0 ETH | 0.00037985 | ||||
Approve | 21669119 | 15 days ago | IN | 0 ETH | 0.00073929 | ||||
Approve | 21668061 | 15 days ago | IN | 0 ETH | 0.00139748 | ||||
Approve | 21667495 | 15 days ago | IN | 0 ETH | 0.00167745 | ||||
Approve | 21667300 | 15 days ago | IN | 0 ETH | 0.00401431 | ||||
Transfer | 21664410 | 16 days ago | IN | 0 ETH | 0.00123302 | ||||
Approve | 21656849 | 17 days ago | IN | 0 ETH | 0.00051949 | ||||
Approve | 21655095 | 17 days ago | IN | 0 ETH | 0.00084179 | ||||
Transfer | 21652015 | 18 days ago | IN | 0 ETH | 0.00091426 | ||||
Transfer | 21651976 | 18 days ago | IN | 0 ETH | 0.00133442 | ||||
Renounce Ownersh... | 21651261 | 18 days ago | IN | 0 ETH | 0.00031879 | ||||
Transfer | 21649010 | 18 days ago | IN | 0 ETH | 0.00087774 | ||||
Approve | 21643714 | 19 days ago | IN | 0 ETH | 0.00037271 | ||||
Transfer | 21642614 | 19 days ago | IN | 0 ETH | 0.00020337 | ||||
Approve | 21642543 | 19 days ago | IN | 0 ETH | 0.00036362 | ||||
Transfer | 21642476 | 19 days ago | IN | 0 ETH | 0.00025125 |
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
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
- No Contract Security Audit Submitted- Submit Audit Here
[{"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"}]
Contract Creation Code
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
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.Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.