Polygon Sponsored slots available. Book your slot here!
Overview
POL Balance
0 POL
POL Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
MetaTrace
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2023-09-06 */ /** *Submitted for verification at PolygonScan.com on 2023-05-12 */ // File: @openzeppelin/contracts-upgradeable/utils/StorageSlotUpgradeable.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/StorageSlot.sol) pragma solidity ^0.8.0; /** * @dev Library for reading and writing primitive types to specific storage slots. * * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. * This library helps with reading and writing to such slots without the need for inline assembly. * * The functions in this library return Slot structs that contain a `value` member that can be used to read or write. * * Example usage to set ERC1967 implementation slot: * ``` * contract ERC1967 { * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; * * function _getImplementation() internal view returns (address) { * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value; * } * * function _setImplementation(address newImplementation) internal { * require(Address.isContract(newImplementation), "ERC1967: new implementation is not a contract"); * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation; * } * } * ``` * * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._ */ library StorageSlotUpgradeable { struct AddressSlot { address value; } struct BooleanSlot { bool value; } struct Bytes32Slot { bytes32 value; } struct Uint256Slot { uint256 value; } /** * @dev Returns an `AddressSlot` with member `value` located at `slot`. */ function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) { /// @solidity memory-safe-assembly assembly { r.slot := slot } } /** * @dev Returns an `BooleanSlot` with member `value` located at `slot`. */ function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) { /// @solidity memory-safe-assembly assembly { r.slot := slot } } /** * @dev Returns an `Bytes32Slot` with member `value` located at `slot`. */ function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) { /// @solidity memory-safe-assembly assembly { r.slot := slot } } /** * @dev Returns an `Uint256Slot` with member `value` located at `slot`. */ function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) { /// @solidity memory-safe-assembly assembly { r.slot := slot } } } // File: @openzeppelin/contracts-upgradeable/interfaces/IERC1967Upgradeable.sol // OpenZeppelin Contracts (last updated v4.8.3) (interfaces/IERC1967.sol) pragma solidity ^0.8.0; /** * @dev ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC. * * _Available since v4.9._ */ interface IERC1967Upgradeable { /** * @dev Emitted when the implementation is upgraded. */ event Upgraded(address indexed implementation); /** * @dev Emitted when the admin account has changed. */ event AdminChanged(address previousAdmin, address newAdmin); /** * @dev Emitted when the beacon is changed. */ event BeaconUpgraded(address indexed beacon); } // File: @openzeppelin/contracts-upgradeable/proxy/beacon/IBeaconUpgradeable.sol // OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol) pragma solidity ^0.8.0; /** * @dev This is the interface that {BeaconProxy} expects of its beacon. */ interface IBeaconUpgradeable { /** * @dev Must return an address that can be used as a delegate call target. * * {BeaconProxy} will check that this address is a contract. */ function implementation() external view returns (address); } // File: @openzeppelin/contracts-upgradeable/interfaces/draft-IERC1822Upgradeable.sol // OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol) pragma solidity ^0.8.0; /** * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified * proxy whose upgrades are fully controlled by the current implementation. */ interface IERC1822ProxiableUpgradeable { /** * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation * address. * * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this * function revert if invoked through a proxy. */ function proxiableUUID() external view returns (bytes32); } // File: @openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library AddressUpgradeable { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } // File: @openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol // OpenZeppelin Contracts (last updated v4.8.1) (proxy/utils/Initializable.sol) pragma solidity ^0.8.2; /** * @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] * ``` * 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 Indicates that the contract has been initialized. * @custom:oz-retyped-from bool */ uint8 private _initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private _initializing; /** * @dev Triggered when the contract has been initialized or reinitialized. */ event Initialized(uint8 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 functions marked with `initializer` can be nested in the context of a * constructor. * * Emits an {Initialized} event. */ modifier initializer() { bool isTopLevelCall = !_initializing; require( (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1), "Initializable: contract is already initialized" ); _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 255 will prevent any future reinitialization. * * Emits an {Initialized} event. */ modifier reinitializer(uint8 version) { require(!_initializing && _initialized < version, "Initializable: contract is already initialized"); _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() { require(_initializing, "Initializable: contract is not initializing"); _; } /** * @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 { require(!_initializing, "Initializable: contract is initializing"); if (_initialized < type(uint8).max) { _initialized = type(uint8).max; emit Initialized(type(uint8).max); } } /** * @dev Returns the highest version that has been initialized. See {reinitializer}. */ function _getInitializedVersion() internal view returns (uint8) { return _initialized; } /** * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}. */ function _isInitializing() internal view returns (bool) { return _initializing; } } // File: @openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol // OpenZeppelin Contracts (last updated v4.8.3) (proxy/ERC1967/ERC1967Upgrade.sol) pragma solidity ^0.8.2; /** * @dev This abstract contract provides getters and event emitting update functions for * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots. * * _Available since v4.1._ * * @custom:oz-upgrades-unsafe-allow delegatecall */ abstract contract ERC1967UpgradeUpgradeable is Initializable, IERC1967Upgradeable { function __ERC1967Upgrade_init() internal onlyInitializing { } function __ERC1967Upgrade_init_unchained() internal onlyInitializing { } // This is the keccak-256 hash of "eip1967.proxy.rollback" subtracted by 1 bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143; /** * @dev Storage slot with the address of the current implementation. * This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1, and is * validated in the constructor. */ bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; /** * @dev Returns the current implementation address. */ function _getImplementation() internal view returns (address) { return StorageSlotUpgradeable.getAddressSlot(_IMPLEMENTATION_SLOT).value; } /** * @dev Stores a new address in the EIP1967 implementation slot. */ function _setImplementation(address newImplementation) private { require(AddressUpgradeable.isContract(newImplementation), "ERC1967: new implementation is not a contract"); StorageSlotUpgradeable.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation; } /** * @dev Perform implementation upgrade * * Emits an {Upgraded} event. */ function _upgradeTo(address newImplementation) internal { _setImplementation(newImplementation); emit Upgraded(newImplementation); } /** * @dev Perform implementation upgrade with additional setup call. * * Emits an {Upgraded} event. */ function _upgradeToAndCall( address newImplementation, bytes memory data, bool forceCall ) internal { _upgradeTo(newImplementation); if (data.length > 0 || forceCall) { _functionDelegateCall(newImplementation, data); } } /** * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call. * * Emits an {Upgraded} event. */ function _upgradeToAndCallUUPS( address newImplementation, bytes memory data, bool forceCall ) internal { // Upgrades from old implementations will perform a rollback test. This test requires the new // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing // this special case will break upgrade paths from old UUPS implementation to new ones. if (StorageSlotUpgradeable.getBooleanSlot(_ROLLBACK_SLOT).value) { _setImplementation(newImplementation); } else { try IERC1822ProxiableUpgradeable(newImplementation).proxiableUUID() returns (bytes32 slot) { require(slot == _IMPLEMENTATION_SLOT, "ERC1967Upgrade: unsupported proxiableUUID"); } catch { revert("ERC1967Upgrade: new implementation is not UUPS"); } _upgradeToAndCall(newImplementation, data, forceCall); } } /** * @dev Storage slot with the admin of the contract. * This is the keccak-256 hash of "eip1967.proxy.admin" subtracted by 1, and is * validated in the constructor. */ bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103; /** * @dev Returns the current admin. */ function _getAdmin() internal view returns (address) { return StorageSlotUpgradeable.getAddressSlot(_ADMIN_SLOT).value; } /** * @dev Stores a new address in the EIP1967 admin slot. */ function _setAdmin(address newAdmin) private { require(newAdmin != address(0), "ERC1967: new admin is the zero address"); StorageSlotUpgradeable.getAddressSlot(_ADMIN_SLOT).value = newAdmin; } /** * @dev Changes the admin of the proxy. * * Emits an {AdminChanged} event. */ function _changeAdmin(address newAdmin) internal { emit AdminChanged(_getAdmin(), newAdmin); _setAdmin(newAdmin); } /** * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy. * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor. */ bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50; /** * @dev Returns the current beacon. */ function _getBeacon() internal view returns (address) { return StorageSlotUpgradeable.getAddressSlot(_BEACON_SLOT).value; } /** * @dev Stores a new beacon in the EIP1967 beacon slot. */ function _setBeacon(address newBeacon) private { require(AddressUpgradeable.isContract(newBeacon), "ERC1967: new beacon is not a contract"); require( AddressUpgradeable.isContract(IBeaconUpgradeable(newBeacon).implementation()), "ERC1967: beacon implementation is not a contract" ); StorageSlotUpgradeable.getAddressSlot(_BEACON_SLOT).value = newBeacon; } /** * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that). * * Emits a {BeaconUpgraded} event. */ function _upgradeBeaconToAndCall( address newBeacon, bytes memory data, bool forceCall ) internal { _setBeacon(newBeacon); emit BeaconUpgraded(newBeacon); if (data.length > 0 || forceCall) { _functionDelegateCall(IBeaconUpgradeable(newBeacon).implementation(), data); } } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function _functionDelegateCall(address target, bytes memory data) private returns (bytes memory) { require(AddressUpgradeable.isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return AddressUpgradeable.verifyCallResult(success, returndata, "Address: low-level delegate call failed"); } /** * @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[50] private __gap; } // File: @openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol // OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/UUPSUpgradeable.sol) pragma solidity ^0.8.0; /** * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy. * * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing * `UUPSUpgradeable` with a custom implementation of upgrades. * * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism. * * _Available since v4.1._ */ abstract contract UUPSUpgradeable is Initializable, IERC1822ProxiableUpgradeable, ERC1967UpgradeUpgradeable { function __UUPSUpgradeable_init() internal onlyInitializing { } function __UUPSUpgradeable_init_unchained() internal onlyInitializing { } /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment address private immutable __self = address(this); /** * @dev Check that the execution is being performed through a delegatecall call and that the execution context is * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to * fail. */ modifier onlyProxy() { require(address(this) != __self, "Function must be called through delegatecall"); require(_getImplementation() == __self, "Function must be called through active proxy"); _; } /** * @dev Check that the execution is not being performed through a delegate call. This allows a function to be * callable on the implementing contract but not through proxies. */ modifier notDelegated() { require(address(this) == __self, "UUPSUpgradeable: must not be called through delegatecall"); _; } /** * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the * implementation. It is used to validate the implementation's compatibility when performing an upgrade. * * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier. */ function proxiableUUID() external view virtual override notDelegated returns (bytes32) { return _IMPLEMENTATION_SLOT; } /** * @dev Upgrade the implementation of the proxy to `newImplementation`. * * Calls {_authorizeUpgrade}. * * Emits an {Upgraded} event. */ function upgradeTo(address newImplementation) external virtual onlyProxy { _authorizeUpgrade(newImplementation); _upgradeToAndCallUUPS(newImplementation, new bytes(0), false); } /** * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call * encoded in `data`. * * Calls {_authorizeUpgrade}. * * Emits an {Upgraded} event. */ function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy { _authorizeUpgrade(newImplementation); _upgradeToAndCallUUPS(newImplementation, data, true); } /** * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by * {upgradeTo} and {upgradeToAndCall}. * * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}. * * ```solidity * function _authorizeUpgrade(address) internal override onlyOwner {} * ``` */ function _authorizeUpgrade(address newImplementation) internal virtual; /** * @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[50] private __gap; } // File: @openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @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; } /** * @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[50] private __gap; } // File: @openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @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. * * By default, the owner account will be the one that deploys the contract. 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 { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ function __Ownable_init() internal onlyInitializing { __Ownable_init_unchained(); } function __Ownable_init_unchained() internal onlyInitializing { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing 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 { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } /** * @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: @openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol // OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol) pragma solidity ^0.8.0; /** * @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 { /** * @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); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ function __Pausable_init() internal onlyInitializing { __Pausable_init_unchained(); } function __Pausable_init_unchained() internal onlyInitializing { _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) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { require(paused(), "Pausable: not paused"); } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } /** * @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: @openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20Upgradeable { /** * @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 amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // File: @openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20MetadataUpgradeable is IERC20Upgradeable { /** * @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/token/ERC20/ERC20Upgradeable.sol // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; /** * @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}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * 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]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * 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 { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @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[45] private __gap; } // File: @openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol) pragma solidity ^0.8.0; /** * @dev Extension of {ERC20} that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */ abstract contract ERC20BurnableUpgradeable is Initializable, ContextUpgradeable, ERC20Upgradeable { function __ERC20Burnable_init() internal onlyInitializing { } function __ERC20Burnable_init_unchained() internal onlyInitializing { } /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } /** * @dev Destroys `amount` tokens from `account`, deducting from the caller's * allowance. * * See {ERC20-_burn} and {ERC20-allowance}. * * Requirements: * * - the caller must have allowance for ``accounts``'s tokens of at least * `amount`. */ function burnFrom(address account, uint256 amount) public virtual { _spendAllowance(account, _msgSender(), amount); _burn(account, amount); } /** * @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[50] private __gap; } // File: trc.sol pragma solidity ^0.8.9; contract MetaTraceGovernanceToken is Initializable, ERC20Upgradeable, ERC20BurnableUpgradeable, PausableUpgradeable, OwnableUpgradeable, UUPSUpgradeable { constructor() { _disableInitializers(); } function initialize() initializer public { __ERC20_init("MetaTrace Governance Token", "TRC"); __ERC20Burnable_init(); __Pausable_init(); __Ownable_init(); __UUPSUpgradeable_init(); _mint(0xacfA62804D53875c2A25b586A874F7Ec6F65788a, 5000000000 * 10 ** decimals()); } function pause() external onlyOwner { _pause(); } function unpause() external onlyOwner { _unpause(); } function _beforeTokenTransfer(address from, address to, uint256 amount) internal whenNotPaused override { super._beforeTokenTransfer(from, to, amount); } function decimals() public view virtual override returns (uint8) { return 2; } function _authorizeUpgrade(address newImplementation) internal onlyOwner override {} function renounceOwnership() public virtual override onlyOwner { revert("Renounce Ownership forbidden"); } } // File: TRC2.sol //SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.9; contract MetaTrace is MetaTraceGovernanceToken { function name() public view virtual override returns (string memory) { return "MetaTrace"; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"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":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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","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":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b50620000556200005b60201b60201c565b62000206565b600060019054906101000a900460ff1615620000ae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000a590620001a9565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff161015620001205760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff604051620001179190620001e9565b60405180910390a15b565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60006200019160278362000122565b91506200019e8262000133565b604082019050919050565b60006020820190508181036000830152620001c48162000182565b9050919050565b600060ff82169050919050565b620001e381620001cb565b82525050565b6000602082019050620002006000830184620001d8565b92915050565b6080516139766200023e600039600081816105dd0152818161066b015281816107c201528181610850015261090001526139766000f3fe6080604052600436106101405760003560e01c80635c975abb116100b65780638da5cb5b1161006f5780638da5cb5b1461040357806395d89b411461042e578063a457c2d714610459578063a9059cbb14610496578063dd62ed3e146104d3578063f2fde38b1461051057610140565b80635c975abb1461032d57806370a0823114610358578063715018a61461039557806379cc6790146103ac5780638129fc1c146103d55780638456cb59146103ec57610140565b80633659cfe6116101085780633659cfe61461024057806339509351146102695780633f4ba83a146102a657806342966c68146102bd5780634f1ef286146102e657806352d1902d1461030257610140565b806306fdde0314610145578063095ea7b31461017057806318160ddd146101ad57806323b872dd146101d8578063313ce56714610215575b600080fd5b34801561015157600080fd5b5061015a610539565b60405161016791906121c2565b60405180910390f35b34801561017c57600080fd5b506101976004803603810190610192919061228c565b610576565b6040516101a491906122e7565b60405180910390f35b3480156101b957600080fd5b506101c2610599565b6040516101cf9190612311565b60405180910390f35b3480156101e457600080fd5b506101ff60048036038101906101fa919061232c565b6105a3565b60405161020c91906122e7565b60405180910390f35b34801561022157600080fd5b5061022a6105d2565b604051610237919061239b565b60405180910390f35b34801561024c57600080fd5b50610267600480360381019061026291906123b6565b6105db565b005b34801561027557600080fd5b50610290600480360381019061028b919061228c565b610763565b60405161029d91906122e7565b60405180910390f35b3480156102b257600080fd5b506102bb61079a565b005b3480156102c957600080fd5b506102e460048036038101906102df91906123e3565b6107ac565b005b61030060048036038101906102fb9190612545565b6107c0565b005b34801561030e57600080fd5b506103176108fc565b60405161032491906125ba565b60405180910390f35b34801561033957600080fd5b506103426109b5565b60405161034f91906122e7565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a91906123b6565b6109cc565b60405161038c9190612311565b60405180910390f35b3480156103a157600080fd5b506103aa610a15565b005b3480156103b857600080fd5b506103d360048036038101906103ce919061228c565b610a58565b005b3480156103e157600080fd5b506103ea610a78565b005b3480156103f857600080fd5b50610401610c83565b005b34801561040f57600080fd5b50610418610c95565b60405161042591906125e4565b60405180910390f35b34801561043a57600080fd5b50610443610cbf565b60405161045091906121c2565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b919061228c565b610d51565b60405161048d91906122e7565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b8919061228c565b610dc8565b6040516104ca91906122e7565b60405180910390f35b3480156104df57600080fd5b506104fa60048036038101906104f591906125ff565b610deb565b6040516105079190612311565b60405180910390f35b34801561051c57600080fd5b50610537600480360381019061053291906123b6565b610e72565b005b60606040518060400160405280600981526020017f4d65746154726163650000000000000000000000000000000000000000000000815250905090565b600080610581610ef5565b905061058e818585610efd565b600191505092915050565b6000603554905090565b6000806105ae610ef5565b90506105bb8582856110c6565b6105c6858585611152565b60019150509392505050565b60006002905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1603610669576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610660906126b1565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166106a86113cb565b73ffffffffffffffffffffffffffffffffffffffff16146106fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f590612743565b60405180910390fd5b61070781611422565b61076081600067ffffffffffffffff8111156107265761072561241a565b5b6040519080825280601f01601f1916602001820160405280156107585781602001600182028036833780820191505090505b50600061142d565b50565b60008061076e610ef5565b905061078f8185856107808589610deb565b61078a9190612792565b610efd565b600191505092915050565b6107a261159b565b6107aa611619565b565b6107bd6107b7610ef5565b8261167c565b50565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff160361084e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610845906126b1565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661088d6113cb565b73ffffffffffffffffffffffffffffffffffffffff16146108e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108da90612743565b60405180910390fd5b6108ec82611422565b6108f88282600161142d565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161461098c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098390612838565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b6000609760009054906101000a900460ff16905090565b6000603360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a1d61159b565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4f906128a4565b60405180910390fd5b610a6a82610a64610ef5565b836110c6565b610a74828261167c565b5050565b60008060019054906101000a900460ff16159050808015610aa95750600160008054906101000a900460ff1660ff16105b80610ad65750610ab83061184b565b158015610ad55750600160008054906101000a900460ff1660ff16145b5b610b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0c90612936565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610b52576001600060016101000a81548160ff0219169083151502179055505b610bc66040518060400160405280601a81526020017f4d657461547261636520476f7665726e616e636520546f6b656e0000000000008152506040518060400160405280600381526020017f545243000000000000000000000000000000000000000000000000000000000081525061186e565b610bce6118cb565b610bd661191c565b610bde611975565b610be66119ce565b610c2773acfa62804d53875c2a25b586a874f7ec6f65788a610c066105d2565b600a610c129190612a89565b64012a05f200610c229190612ad4565b611a1f565b8015610c805760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610c779190612b5b565b60405180910390a15b50565b610c8b61159b565b610c93611b76565b565b600060c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060378054610cce90612ba5565b80601f0160208091040260200160405190810160405280929190818152602001828054610cfa90612ba5565b8015610d475780601f10610d1c57610100808354040283529160200191610d47565b820191906000526020600020905b815481529060010190602001808311610d2a57829003601f168201915b5050505050905090565b600080610d5c610ef5565b90506000610d6a8286610deb565b905083811015610daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da690612c48565b60405180910390fd5b610dbc8286868403610efd565b60019250505092915050565b600080610dd3610ef5565b9050610de0818585611152565b600191505092915050565b6000603460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610e7a61159b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee090612cda565b60405180910390fd5b610ef281611bd9565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6390612d6c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd290612dfe565b60405180910390fd5b80603460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516110b99190612311565b60405180910390a3505050565b60006110d28484610deb565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461114c578181101561113e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113590612e6a565b60405180910390fd5b61114b8484848403610efd565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b890612efc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611230576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122790612f8e565b60405180910390fd5b61123b838383611c9f565b6000603360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156112c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b990613020565b60405180910390fd5b818103603360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081603360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113b29190612311565b60405180910390a36113c5848484611cb7565b50505050565b60006113f97f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611cbc565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61142a61159b565b50565b6114597f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611cc6565b60000160009054906101000a900460ff161561147d5761147883611cd0565b611596565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156114e557506040513d601f19601f820116820180604052508101906114e2919061306c565b60015b611524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151b9061310b565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611589576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115809061319d565b60405180910390fd5b50611595838383611d89565b5b505050565b6115a3610ef5565b73ffffffffffffffffffffffffffffffffffffffff166115c1610c95565b73ffffffffffffffffffffffffffffffffffffffff1614611617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160e90613209565b60405180910390fd5b565b611621611db5565b6000609760006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611665610ef5565b60405161167291906125e4565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e29061329b565b60405180910390fd5b6116f782600083611c9f565b6000603360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561177e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117759061332d565b60405180910390fd5b818103603360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081603560008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516118329190612311565b60405180910390a361184683600084611cb7565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff166118bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b4906133bf565b60405180910390fd5b6118c78282611dfe565b5050565b600060019054906101000a900460ff1661191a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611911906133bf565b60405180910390fd5b565b600060019054906101000a900460ff1661196b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611962906133bf565b60405180910390fd5b611973611e71565b565b600060019054906101000a900460ff166119c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bb906133bf565b60405180910390fd5b6119cc611edd565b565b600060019054906101000a900460ff16611a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a14906133bf565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a859061342b565b60405180910390fd5b611a9a60008383611c9f565b8060356000828254611aac9190612792565b9250508190555080603360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611b5e9190612311565b60405180910390a3611b7260008383611cb7565b5050565b611b7e611f3e565b6001609760006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611bc2610ef5565b604051611bcf91906125e4565b60405180910390a1565b600060c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160c960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611ca7611f3e565b611cb2838383611f88565b505050565b505050565b6000819050919050565b6000819050919050565b611cd98161184b565b611d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0f906134bd565b60405180910390fd5b80611d457f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611cbc565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611d9283611f8d565b600082511180611d9f5750805b15611db057611dae8383611fdc565b505b505050565b611dbd6109b5565b611dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df390613529565b60405180910390fd5b565b600060019054906101000a900460ff16611e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e44906133bf565b60405180910390fd5b8160369081611e5c91906136eb565b508060379081611e6c91906136eb565b505050565b600060019054906101000a900460ff16611ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb7906133bf565b60405180910390fd5b6000609760006101000a81548160ff021916908315150217905550565b600060019054906101000a900460ff16611f2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f23906133bf565b60405180910390fd5b611f3c611f37610ef5565b611bd9565b565b611f466109b5565b15611f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7d90613809565b60405180910390fd5b565b505050565b611f9681611cd0565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060611fe78361184b565b612026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201d9061389b565b60405180910390fd5b6000808473ffffffffffffffffffffffffffffffffffffffff168460405161204e9190613902565b600060405180830381855af49150503d8060008114612089576040519150601f19603f3d011682016040523d82523d6000602084013e61208e565b606091505b50915091506120b6828260405180606001604052806027815260200161391a602791396120c0565b9250505092915050565b606083156120d0578290506120db565b6120da83836120e2565b5b9392505050565b6000825111156120f55781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212991906121c2565b60405180910390fd5b600081519050919050565b600082825260208201905092915050565b60005b8381101561216c578082015181840152602081019050612151565b60008484015250505050565b6000601f19601f8301169050919050565b600061219482612132565b61219e818561213d565b93506121ae81856020860161214e565b6121b781612178565b840191505092915050565b600060208201905081810360008301526121dc8184612189565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612223826121f8565b9050919050565b61223381612218565b811461223e57600080fd5b50565b6000813590506122508161222a565b92915050565b6000819050919050565b61226981612256565b811461227457600080fd5b50565b60008135905061228681612260565b92915050565b600080604083850312156122a3576122a26121ee565b5b60006122b185828601612241565b92505060206122c285828601612277565b9150509250929050565b60008115159050919050565b6122e1816122cc565b82525050565b60006020820190506122fc60008301846122d8565b92915050565b61230b81612256565b82525050565b60006020820190506123266000830184612302565b92915050565b600080600060608486031215612345576123446121ee565b5b600061235386828701612241565b935050602061236486828701612241565b925050604061237586828701612277565b9150509250925092565b600060ff82169050919050565b6123958161237f565b82525050565b60006020820190506123b0600083018461238c565b92915050565b6000602082840312156123cc576123cb6121ee565b5b60006123da84828501612241565b91505092915050565b6000602082840312156123f9576123f86121ee565b5b600061240784828501612277565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61245282612178565b810181811067ffffffffffffffff821117156124715761247061241a565b5b80604052505050565b60006124846121e4565b90506124908282612449565b919050565b600067ffffffffffffffff8211156124b0576124af61241a565b5b6124b982612178565b9050602081019050919050565b82818337600083830152505050565b60006124e86124e384612495565b61247a565b90508281526020810184848401111561250457612503612415565b5b61250f8482856124c6565b509392505050565b600082601f83011261252c5761252b612410565b5b813561253c8482602086016124d5565b91505092915050565b6000806040838503121561255c5761255b6121ee565b5b600061256a85828601612241565b925050602083013567ffffffffffffffff81111561258b5761258a6121f3565b5b61259785828601612517565b9150509250929050565b6000819050919050565b6125b4816125a1565b82525050565b60006020820190506125cf60008301846125ab565b92915050565b6125de81612218565b82525050565b60006020820190506125f960008301846125d5565b92915050565b60008060408385031215612616576126156121ee565b5b600061262485828601612241565b925050602061263585828601612241565b9150509250929050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b600061269b602c8361213d565b91506126a68261263f565b604082019050919050565b600060208201905081810360008301526126ca8161268e565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b600061272d602c8361213d565b9150612738826126d1565b604082019050919050565b6000602082019050818103600083015261275c81612720565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061279d82612256565b91506127a883612256565b92508282019050808211156127c0576127bf612763565b5b92915050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b600061282260388361213d565b915061282d826127c6565b604082019050919050565b6000602082019050818103600083015261285181612815565b9050919050565b7f52656e6f756e6365204f776e65727368697020666f7262696464656e00000000600082015250565b600061288e601c8361213d565b915061289982612858565b602082019050919050565b600060208201905081810360008301526128bd81612881565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000612920602e8361213d565b915061292b826128c4565b604082019050919050565b6000602082019050818103600083015261294f81612913565b9050919050565b60008160011c9050919050565b6000808291508390505b60018511156129ad5780860481111561298957612988612763565b5b60018516156129985780820291505b80810290506129a685612956565b945061296d565b94509492505050565b6000826129c65760019050612a82565b816129d45760009050612a82565b81600181146129ea57600281146129f457612a23565b6001915050612a82565b60ff841115612a0657612a05612763565b5b8360020a915084821115612a1d57612a1c612763565b5b50612a82565b5060208310610133831016604e8410600b8410161715612a585782820a905083811115612a5357612a52612763565b5b612a82565b612a658484846001612963565b92509050818404811115612a7c57612a7b612763565b5b81810290505b9392505050565b6000612a9482612256565b9150612a9f8361237f565b9250612acc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846129b6565b905092915050565b6000612adf82612256565b9150612aea83612256565b9250828202612af881612256565b91508282048414831517612b0f57612b0e612763565b5b5092915050565b6000819050919050565b6000819050919050565b6000612b45612b40612b3b84612b16565b612b20565b61237f565b9050919050565b612b5581612b2a565b82525050565b6000602082019050612b706000830184612b4c565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612bbd57607f821691505b602082108103612bd057612bcf612b76565b5b50919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612c3260258361213d565b9150612c3d82612bd6565b604082019050919050565b60006020820190508181036000830152612c6181612c25565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612cc460268361213d565b9150612ccf82612c68565b604082019050919050565b60006020820190508181036000830152612cf381612cb7565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612d5660248361213d565b9150612d6182612cfa565b604082019050919050565b60006020820190508181036000830152612d8581612d49565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612de860228361213d565b9150612df382612d8c565b604082019050919050565b60006020820190508181036000830152612e1781612ddb565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612e54601d8361213d565b9150612e5f82612e1e565b602082019050919050565b60006020820190508181036000830152612e8381612e47565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612ee660258361213d565b9150612ef182612e8a565b604082019050919050565b60006020820190508181036000830152612f1581612ed9565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612f7860238361213d565b9150612f8382612f1c565b604082019050919050565b60006020820190508181036000830152612fa781612f6b565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061300a60268361213d565b915061301582612fae565b604082019050919050565b6000602082019050818103600083015261303981612ffd565b9050919050565b613049816125a1565b811461305457600080fd5b50565b60008151905061306681613040565b92915050565b600060208284031215613082576130816121ee565b5b600061309084828501613057565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b60006130f5602e8361213d565b915061310082613099565b604082019050919050565b60006020820190508181036000830152613124816130e8565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b600061318760298361213d565b91506131928261312b565b604082019050919050565b600060208201905081810360008301526131b68161317a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006131f360208361213d565b91506131fe826131bd565b602082019050919050565b60006020820190508181036000830152613222816131e6565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061328560218361213d565b915061329082613229565b604082019050919050565b600060208201905081810360008301526132b481613278565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b600061331760228361213d565b9150613322826132bb565b604082019050919050565b600060208201905081810360008301526133468161330a565b9050919050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b60006133a9602b8361213d565b91506133b48261334d565b604082019050919050565b600060208201905081810360008301526133d88161339c565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000613415601f8361213d565b9150613420826133df565b602082019050919050565b6000602082019050818103600083015261344481613408565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b60006134a7602d8361213d565b91506134b28261344b565b604082019050919050565b600060208201905081810360008301526134d68161349a565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b600061351360148361213d565b915061351e826134dd565b602082019050919050565b6000602082019050818103600083015261354281613506565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026135ab7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261356e565b6135b5868361356e565b95508019841693508086168417925050509392505050565b60006135e86135e36135de84612256565b612b20565b612256565b9050919050565b6000819050919050565b613602836135cd565b61361661360e826135ef565b84845461357b565b825550505050565b600090565b61362b61361e565b6136368184846135f9565b505050565b5b8181101561365a5761364f600082613623565b60018101905061363c565b5050565b601f82111561369f5761367081613549565b6136798461355e565b81016020851015613688578190505b61369c6136948561355e565b83018261363b565b50505b505050565b600082821c905092915050565b60006136c2600019846008026136a4565b1980831691505092915050565b60006136db83836136b1565b9150826002028217905092915050565b6136f482612132565b67ffffffffffffffff81111561370d5761370c61241a565b5b6137178254612ba5565b61372282828561365e565b600060209050601f8311600181146137555760008415613743578287015190505b61374d85826136cf565b8655506137b5565b601f19841661376386613549565b60005b8281101561378b57848901518255600182019150602085019450602081019050613766565b868310156137a857848901516137a4601f8916826136b1565b8355505b6001600288020188555050505b505050505050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006137f360108361213d565b91506137fe826137bd565b602082019050919050565b60006020820190508181036000830152613822816137e6565b9050919050565b7f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b600061388560268361213d565b915061389082613829565b604082019050919050565b600060208201905081810360008301526138b481613878565b9050919050565b600081519050919050565b600081905092915050565b60006138dc826138bb565b6138e681856138c6565b93506138f681856020860161214e565b80840191505092915050565b600061390e82846138d1565b91508190509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c826650c12055dd1d72c7410f141721bc032a3e820bad749437c8ca6ba7ba5ab64736f6c63430008120033
Deployed Bytecode
0x6080604052600436106101405760003560e01c80635c975abb116100b65780638da5cb5b1161006f5780638da5cb5b1461040357806395d89b411461042e578063a457c2d714610459578063a9059cbb14610496578063dd62ed3e146104d3578063f2fde38b1461051057610140565b80635c975abb1461032d57806370a0823114610358578063715018a61461039557806379cc6790146103ac5780638129fc1c146103d55780638456cb59146103ec57610140565b80633659cfe6116101085780633659cfe61461024057806339509351146102695780633f4ba83a146102a657806342966c68146102bd5780634f1ef286146102e657806352d1902d1461030257610140565b806306fdde0314610145578063095ea7b31461017057806318160ddd146101ad57806323b872dd146101d8578063313ce56714610215575b600080fd5b34801561015157600080fd5b5061015a610539565b60405161016791906121c2565b60405180910390f35b34801561017c57600080fd5b506101976004803603810190610192919061228c565b610576565b6040516101a491906122e7565b60405180910390f35b3480156101b957600080fd5b506101c2610599565b6040516101cf9190612311565b60405180910390f35b3480156101e457600080fd5b506101ff60048036038101906101fa919061232c565b6105a3565b60405161020c91906122e7565b60405180910390f35b34801561022157600080fd5b5061022a6105d2565b604051610237919061239b565b60405180910390f35b34801561024c57600080fd5b50610267600480360381019061026291906123b6565b6105db565b005b34801561027557600080fd5b50610290600480360381019061028b919061228c565b610763565b60405161029d91906122e7565b60405180910390f35b3480156102b257600080fd5b506102bb61079a565b005b3480156102c957600080fd5b506102e460048036038101906102df91906123e3565b6107ac565b005b61030060048036038101906102fb9190612545565b6107c0565b005b34801561030e57600080fd5b506103176108fc565b60405161032491906125ba565b60405180910390f35b34801561033957600080fd5b506103426109b5565b60405161034f91906122e7565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a91906123b6565b6109cc565b60405161038c9190612311565b60405180910390f35b3480156103a157600080fd5b506103aa610a15565b005b3480156103b857600080fd5b506103d360048036038101906103ce919061228c565b610a58565b005b3480156103e157600080fd5b506103ea610a78565b005b3480156103f857600080fd5b50610401610c83565b005b34801561040f57600080fd5b50610418610c95565b60405161042591906125e4565b60405180910390f35b34801561043a57600080fd5b50610443610cbf565b60405161045091906121c2565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b919061228c565b610d51565b60405161048d91906122e7565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b8919061228c565b610dc8565b6040516104ca91906122e7565b60405180910390f35b3480156104df57600080fd5b506104fa60048036038101906104f591906125ff565b610deb565b6040516105079190612311565b60405180910390f35b34801561051c57600080fd5b50610537600480360381019061053291906123b6565b610e72565b005b60606040518060400160405280600981526020017f4d65746154726163650000000000000000000000000000000000000000000000815250905090565b600080610581610ef5565b905061058e818585610efd565b600191505092915050565b6000603554905090565b6000806105ae610ef5565b90506105bb8582856110c6565b6105c6858585611152565b60019150509392505050565b60006002905090565b7f00000000000000000000000004007cd00a5661a4fda6a00e399f5d6ee4a0f8eb73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1603610669576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610660906126b1565b60405180910390fd5b7f00000000000000000000000004007cd00a5661a4fda6a00e399f5d6ee4a0f8eb73ffffffffffffffffffffffffffffffffffffffff166106a86113cb565b73ffffffffffffffffffffffffffffffffffffffff16146106fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f590612743565b60405180910390fd5b61070781611422565b61076081600067ffffffffffffffff8111156107265761072561241a565b5b6040519080825280601f01601f1916602001820160405280156107585781602001600182028036833780820191505090505b50600061142d565b50565b60008061076e610ef5565b905061078f8185856107808589610deb565b61078a9190612792565b610efd565b600191505092915050565b6107a261159b565b6107aa611619565b565b6107bd6107b7610ef5565b8261167c565b50565b7f00000000000000000000000004007cd00a5661a4fda6a00e399f5d6ee4a0f8eb73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff160361084e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610845906126b1565b60405180910390fd5b7f00000000000000000000000004007cd00a5661a4fda6a00e399f5d6ee4a0f8eb73ffffffffffffffffffffffffffffffffffffffff1661088d6113cb565b73ffffffffffffffffffffffffffffffffffffffff16146108e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108da90612743565b60405180910390fd5b6108ec82611422565b6108f88282600161142d565b5050565b60007f00000000000000000000000004007cd00a5661a4fda6a00e399f5d6ee4a0f8eb73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161461098c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098390612838565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b6000609760009054906101000a900460ff16905090565b6000603360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a1d61159b565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4f906128a4565b60405180910390fd5b610a6a82610a64610ef5565b836110c6565b610a74828261167c565b5050565b60008060019054906101000a900460ff16159050808015610aa95750600160008054906101000a900460ff1660ff16105b80610ad65750610ab83061184b565b158015610ad55750600160008054906101000a900460ff1660ff16145b5b610b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0c90612936565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610b52576001600060016101000a81548160ff0219169083151502179055505b610bc66040518060400160405280601a81526020017f4d657461547261636520476f7665726e616e636520546f6b656e0000000000008152506040518060400160405280600381526020017f545243000000000000000000000000000000000000000000000000000000000081525061186e565b610bce6118cb565b610bd661191c565b610bde611975565b610be66119ce565b610c2773acfa62804d53875c2a25b586a874f7ec6f65788a610c066105d2565b600a610c129190612a89565b64012a05f200610c229190612ad4565b611a1f565b8015610c805760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610c779190612b5b565b60405180910390a15b50565b610c8b61159b565b610c93611b76565b565b600060c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060378054610cce90612ba5565b80601f0160208091040260200160405190810160405280929190818152602001828054610cfa90612ba5565b8015610d475780601f10610d1c57610100808354040283529160200191610d47565b820191906000526020600020905b815481529060010190602001808311610d2a57829003601f168201915b5050505050905090565b600080610d5c610ef5565b90506000610d6a8286610deb565b905083811015610daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da690612c48565b60405180910390fd5b610dbc8286868403610efd565b60019250505092915050565b600080610dd3610ef5565b9050610de0818585611152565b600191505092915050565b6000603460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610e7a61159b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee090612cda565b60405180910390fd5b610ef281611bd9565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6390612d6c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd290612dfe565b60405180910390fd5b80603460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516110b99190612311565b60405180910390a3505050565b60006110d28484610deb565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461114c578181101561113e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113590612e6a565b60405180910390fd5b61114b8484848403610efd565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b890612efc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611230576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122790612f8e565b60405180910390fd5b61123b838383611c9f565b6000603360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156112c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b990613020565b60405180910390fd5b818103603360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081603360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113b29190612311565b60405180910390a36113c5848484611cb7565b50505050565b60006113f97f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611cbc565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61142a61159b565b50565b6114597f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611cc6565b60000160009054906101000a900460ff161561147d5761147883611cd0565b611596565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156114e557506040513d601f19601f820116820180604052508101906114e2919061306c565b60015b611524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151b9061310b565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611589576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115809061319d565b60405180910390fd5b50611595838383611d89565b5b505050565b6115a3610ef5565b73ffffffffffffffffffffffffffffffffffffffff166115c1610c95565b73ffffffffffffffffffffffffffffffffffffffff1614611617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160e90613209565b60405180910390fd5b565b611621611db5565b6000609760006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611665610ef5565b60405161167291906125e4565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e29061329b565b60405180910390fd5b6116f782600083611c9f565b6000603360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561177e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117759061332d565b60405180910390fd5b818103603360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081603560008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516118329190612311565b60405180910390a361184683600084611cb7565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff166118bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b4906133bf565b60405180910390fd5b6118c78282611dfe565b5050565b600060019054906101000a900460ff1661191a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611911906133bf565b60405180910390fd5b565b600060019054906101000a900460ff1661196b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611962906133bf565b60405180910390fd5b611973611e71565b565b600060019054906101000a900460ff166119c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bb906133bf565b60405180910390fd5b6119cc611edd565b565b600060019054906101000a900460ff16611a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a14906133bf565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a859061342b565b60405180910390fd5b611a9a60008383611c9f565b8060356000828254611aac9190612792565b9250508190555080603360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611b5e9190612311565b60405180910390a3611b7260008383611cb7565b5050565b611b7e611f3e565b6001609760006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611bc2610ef5565b604051611bcf91906125e4565b60405180910390a1565b600060c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160c960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611ca7611f3e565b611cb2838383611f88565b505050565b505050565b6000819050919050565b6000819050919050565b611cd98161184b565b611d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0f906134bd565b60405180910390fd5b80611d457f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611cbc565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611d9283611f8d565b600082511180611d9f5750805b15611db057611dae8383611fdc565b505b505050565b611dbd6109b5565b611dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df390613529565b60405180910390fd5b565b600060019054906101000a900460ff16611e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e44906133bf565b60405180910390fd5b8160369081611e5c91906136eb565b508060379081611e6c91906136eb565b505050565b600060019054906101000a900460ff16611ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb7906133bf565b60405180910390fd5b6000609760006101000a81548160ff021916908315150217905550565b600060019054906101000a900460ff16611f2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f23906133bf565b60405180910390fd5b611f3c611f37610ef5565b611bd9565b565b611f466109b5565b15611f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7d90613809565b60405180910390fd5b565b505050565b611f9681611cd0565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060611fe78361184b565b612026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201d9061389b565b60405180910390fd5b6000808473ffffffffffffffffffffffffffffffffffffffff168460405161204e9190613902565b600060405180830381855af49150503d8060008114612089576040519150601f19603f3d011682016040523d82523d6000602084013e61208e565b606091505b50915091506120b6828260405180606001604052806027815260200161391a602791396120c0565b9250505092915050565b606083156120d0578290506120db565b6120da83836120e2565b5b9392505050565b6000825111156120f55781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212991906121c2565b60405180910390fd5b600081519050919050565b600082825260208201905092915050565b60005b8381101561216c578082015181840152602081019050612151565b60008484015250505050565b6000601f19601f8301169050919050565b600061219482612132565b61219e818561213d565b93506121ae81856020860161214e565b6121b781612178565b840191505092915050565b600060208201905081810360008301526121dc8184612189565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612223826121f8565b9050919050565b61223381612218565b811461223e57600080fd5b50565b6000813590506122508161222a565b92915050565b6000819050919050565b61226981612256565b811461227457600080fd5b50565b60008135905061228681612260565b92915050565b600080604083850312156122a3576122a26121ee565b5b60006122b185828601612241565b92505060206122c285828601612277565b9150509250929050565b60008115159050919050565b6122e1816122cc565b82525050565b60006020820190506122fc60008301846122d8565b92915050565b61230b81612256565b82525050565b60006020820190506123266000830184612302565b92915050565b600080600060608486031215612345576123446121ee565b5b600061235386828701612241565b935050602061236486828701612241565b925050604061237586828701612277565b9150509250925092565b600060ff82169050919050565b6123958161237f565b82525050565b60006020820190506123b0600083018461238c565b92915050565b6000602082840312156123cc576123cb6121ee565b5b60006123da84828501612241565b91505092915050565b6000602082840312156123f9576123f86121ee565b5b600061240784828501612277565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61245282612178565b810181811067ffffffffffffffff821117156124715761247061241a565b5b80604052505050565b60006124846121e4565b90506124908282612449565b919050565b600067ffffffffffffffff8211156124b0576124af61241a565b5b6124b982612178565b9050602081019050919050565b82818337600083830152505050565b60006124e86124e384612495565b61247a565b90508281526020810184848401111561250457612503612415565b5b61250f8482856124c6565b509392505050565b600082601f83011261252c5761252b612410565b5b813561253c8482602086016124d5565b91505092915050565b6000806040838503121561255c5761255b6121ee565b5b600061256a85828601612241565b925050602083013567ffffffffffffffff81111561258b5761258a6121f3565b5b61259785828601612517565b9150509250929050565b6000819050919050565b6125b4816125a1565b82525050565b60006020820190506125cf60008301846125ab565b92915050565b6125de81612218565b82525050565b60006020820190506125f960008301846125d5565b92915050565b60008060408385031215612616576126156121ee565b5b600061262485828601612241565b925050602061263585828601612241565b9150509250929050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b600061269b602c8361213d565b91506126a68261263f565b604082019050919050565b600060208201905081810360008301526126ca8161268e565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b600061272d602c8361213d565b9150612738826126d1565b604082019050919050565b6000602082019050818103600083015261275c81612720565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061279d82612256565b91506127a883612256565b92508282019050808211156127c0576127bf612763565b5b92915050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b600061282260388361213d565b915061282d826127c6565b604082019050919050565b6000602082019050818103600083015261285181612815565b9050919050565b7f52656e6f756e6365204f776e65727368697020666f7262696464656e00000000600082015250565b600061288e601c8361213d565b915061289982612858565b602082019050919050565b600060208201905081810360008301526128bd81612881565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000612920602e8361213d565b915061292b826128c4565b604082019050919050565b6000602082019050818103600083015261294f81612913565b9050919050565b60008160011c9050919050565b6000808291508390505b60018511156129ad5780860481111561298957612988612763565b5b60018516156129985780820291505b80810290506129a685612956565b945061296d565b94509492505050565b6000826129c65760019050612a82565b816129d45760009050612a82565b81600181146129ea57600281146129f457612a23565b6001915050612a82565b60ff841115612a0657612a05612763565b5b8360020a915084821115612a1d57612a1c612763565b5b50612a82565b5060208310610133831016604e8410600b8410161715612a585782820a905083811115612a5357612a52612763565b5b612a82565b612a658484846001612963565b92509050818404811115612a7c57612a7b612763565b5b81810290505b9392505050565b6000612a9482612256565b9150612a9f8361237f565b9250612acc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846129b6565b905092915050565b6000612adf82612256565b9150612aea83612256565b9250828202612af881612256565b91508282048414831517612b0f57612b0e612763565b5b5092915050565b6000819050919050565b6000819050919050565b6000612b45612b40612b3b84612b16565b612b20565b61237f565b9050919050565b612b5581612b2a565b82525050565b6000602082019050612b706000830184612b4c565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612bbd57607f821691505b602082108103612bd057612bcf612b76565b5b50919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612c3260258361213d565b9150612c3d82612bd6565b604082019050919050565b60006020820190508181036000830152612c6181612c25565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612cc460268361213d565b9150612ccf82612c68565b604082019050919050565b60006020820190508181036000830152612cf381612cb7565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612d5660248361213d565b9150612d6182612cfa565b604082019050919050565b60006020820190508181036000830152612d8581612d49565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612de860228361213d565b9150612df382612d8c565b604082019050919050565b60006020820190508181036000830152612e1781612ddb565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612e54601d8361213d565b9150612e5f82612e1e565b602082019050919050565b60006020820190508181036000830152612e8381612e47565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612ee660258361213d565b9150612ef182612e8a565b604082019050919050565b60006020820190508181036000830152612f1581612ed9565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612f7860238361213d565b9150612f8382612f1c565b604082019050919050565b60006020820190508181036000830152612fa781612f6b565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061300a60268361213d565b915061301582612fae565b604082019050919050565b6000602082019050818103600083015261303981612ffd565b9050919050565b613049816125a1565b811461305457600080fd5b50565b60008151905061306681613040565b92915050565b600060208284031215613082576130816121ee565b5b600061309084828501613057565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b60006130f5602e8361213d565b915061310082613099565b604082019050919050565b60006020820190508181036000830152613124816130e8565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b600061318760298361213d565b91506131928261312b565b604082019050919050565b600060208201905081810360008301526131b68161317a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006131f360208361213d565b91506131fe826131bd565b602082019050919050565b60006020820190508181036000830152613222816131e6565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061328560218361213d565b915061329082613229565b604082019050919050565b600060208201905081810360008301526132b481613278565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b600061331760228361213d565b9150613322826132bb565b604082019050919050565b600060208201905081810360008301526133468161330a565b9050919050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b60006133a9602b8361213d565b91506133b48261334d565b604082019050919050565b600060208201905081810360008301526133d88161339c565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000613415601f8361213d565b9150613420826133df565b602082019050919050565b6000602082019050818103600083015261344481613408565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b60006134a7602d8361213d565b91506134b28261344b565b604082019050919050565b600060208201905081810360008301526134d68161349a565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b600061351360148361213d565b915061351e826134dd565b602082019050919050565b6000602082019050818103600083015261354281613506565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026135ab7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261356e565b6135b5868361356e565b95508019841693508086168417925050509392505050565b60006135e86135e36135de84612256565b612b20565b612256565b9050919050565b6000819050919050565b613602836135cd565b61361661360e826135ef565b84845461357b565b825550505050565b600090565b61362b61361e565b6136368184846135f9565b505050565b5b8181101561365a5761364f600082613623565b60018101905061363c565b5050565b601f82111561369f5761367081613549565b6136798461355e565b81016020851015613688578190505b61369c6136948561355e565b83018261363b565b50505b505050565b600082821c905092915050565b60006136c2600019846008026136a4565b1980831691505092915050565b60006136db83836136b1565b9150826002028217905092915050565b6136f482612132565b67ffffffffffffffff81111561370d5761370c61241a565b5b6137178254612ba5565b61372282828561365e565b600060209050601f8311600181146137555760008415613743578287015190505b61374d85826136cf565b8655506137b5565b601f19841661376386613549565b60005b8281101561378b57848901518255600182019150602085019450602081019050613766565b868310156137a857848901516137a4601f8916826136b1565b8355505b6001600288020188555050505b505050505050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006137f360108361213d565b91506137fe826137bd565b602082019050919050565b60006020820190508181036000830152613822816137e6565b9050919050565b7f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b600061388560268361213d565b915061389082613829565b604082019050919050565b600060208201905081810360008301526138b481613878565b9050919050565b600081519050919050565b600081905092915050565b60006138dc826138bb565b6138e681856138c6565b93506138f681856020860161214e565b80840191505092915050565b600061390e82846138d1565b91508190509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c826650c12055dd1d72c7410f141721bc032a3e820bad749437c8ca6ba7ba5ab64736f6c63430008120033
Deployed Bytecode Sourcemap
61273:163:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61327:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49039:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47808:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49820:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60835:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31312:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50524:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60553:67;;;;;;;;;;;;;:::i;:::-;;58986:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31771:225;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30990:133;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39284:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47979:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61059:120;;;;;;;;;;;;;:::i;:::-;;59396:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60149:325;;;;;;;;;;;;;:::i;:::-;;60482:63;;;;;;;;;;;;;:::i;:::-;;35630:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46907:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51265:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48312:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48568:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36536:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;61327:106;61381:13;61407:18;;;;;;;;;;;;;;;;;;;61327:106;:::o;49039:201::-;49122:4;49139:13;49155:12;:10;:12::i;:::-;49139:28;;49178:32;49187:5;49194:7;49203:6;49178:8;:32::i;:::-;49228:4;49221:11;;;49039:201;;;;:::o;47808:108::-;47869:7;47896:12;;47889:19;;47808:108;:::o;49820:295::-;49951:4;49968:15;49986:12;:10;:12::i;:::-;49968:30;;50009:38;50025:4;50031:7;50040:6;50009:15;:38::i;:::-;50058:27;50068:4;50074:2;50078:6;50058:9;:27::i;:::-;50103:4;50096:11;;;49820:295;;;;;:::o;60835:92::-;60893:5;60918:1;60911:8;;60835:92;:::o;31312:200::-;29860:6;29843:23;;29851:4;29843:23;;;29835:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;29958:6;29934:30;;:20;:18;:20::i;:::-;:30;;;29926:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;31396:36:::1;31414:17;31396;:36::i;:::-;31443:61;31465:17;31494:1;31484:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31498:5;31443:21;:61::i;:::-;31312:200:::0;:::o;50524:238::-;50612:4;50629:13;50645:12;:10;:12::i;:::-;50629:28;;50668:64;50677:5;50684:7;50721:10;50693:25;50703:5;50710:7;50693:9;:25::i;:::-;:38;;;;:::i;:::-;50668:8;:64::i;:::-;50750:4;50743:11;;;50524:238;;;;:::o;60553:67::-;35516:13;:11;:13::i;:::-;60602:10:::1;:8;:10::i;:::-;60553:67::o:0;58986:91::-;59042:27;59048:12;:10;:12::i;:::-;59062:6;59042:5;:27::i;:::-;58986:91;:::o;31771:225::-;29860:6;29843:23;;29851:4;29843:23;;;29835:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;29958:6;29934:30;;:20;:18;:20::i;:::-;:30;;;29926:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;31889:36:::1;31907:17;31889;:36::i;:::-;31936:52;31958:17;31977:4;31983;31936:21;:52::i;:::-;31771:225:::0;;:::o;30990:133::-;31068:7;30305:6;30288:23;;30296:4;30288:23;;;30280:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;21681:66:::1;31095:20;;31088:27;;30990:133:::0;:::o;39284:86::-;39331:4;39355:7;;;;;;;;;;;39348:14;;39284:86;:::o;47979:127::-;48053:7;48080:9;:18;48090:7;48080:18;;;;;;;;;;;;;;;;48073:25;;47979:127;;;:::o;61059:120::-;35516:13;:11;:13::i;:::-;61133:38:::1;;;;;;;;;;:::i;:::-;;;;;;;;59396:164:::0;59473:46;59489:7;59498:12;:10;:12::i;:::-;59512:6;59473:15;:46::i;:::-;59530:22;59536:7;59545:6;59530:5;:22::i;:::-;59396:164;;:::o;60149:325::-;17055:19;17078:13;;;;;;;;;;;17077:14;17055:36;;17125:14;:34;;;;;17158:1;17143:12;;;;;;;;;;:16;;;17125:34;17124:108;;;;17166:44;17204:4;17166:29;:44::i;:::-;17165:45;:66;;;;;17230:1;17214:12;;;;;;;;;;:17;;;17165:66;17124:108;17102:204;;;;;;;;;;;;:::i;:::-;;;;;;;;;17332:1;17317:12;;:16;;;;;;;;;;;;;;;;;;17348:14;17344:67;;;17395:4;17379:13;;:20;;;;;;;;;;;;;;;;;;17344:67;60201:49:::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;::::0;:12:::1;:49::i;:::-;60261:22;:20;:22::i;:::-;60294:17;:15;:17::i;:::-;60322:16;:14;:16::i;:::-;60349:24;:22;:24::i;:::-;60386:80;60392:42;60455:10;:8;:10::i;:::-;60449:2;:16;;;;:::i;:::-;60436:10;:29;;;;:::i;:::-;60386:5;:80::i;:::-;17437:14:::0;17433:102;;;17484:5;17468:13;;:21;;;;;;;;;;;;;;;;;;17509:14;17521:1;17509:14;;;;;;:::i;:::-;;;;;;;;17433:102;17044:498;60149:325::o;60482:63::-;35516:13;:11;:13::i;:::-;60529:8:::1;:6;:8::i;:::-;60482:63::o:0;35630:87::-;35676:7;35703:6;;;;;;;;;;;35696:13;;35630:87;:::o;46907:104::-;46963:13;46996:7;46989:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46907:104;:::o;51265:436::-;51358:4;51375:13;51391:12;:10;:12::i;:::-;51375:28;;51414:24;51441:25;51451:5;51458:7;51441:9;:25::i;:::-;51414:52;;51505:15;51485:16;:35;;51477:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;51598:60;51607:5;51614:7;51642:15;51623:16;:34;51598:8;:60::i;:::-;51689:4;51682:11;;;;51265:436;;;;:::o;48312:193::-;48391:4;48408:13;48424:12;:10;:12::i;:::-;48408:28;;48447;48457:5;48464:2;48468:6;48447:9;:28::i;:::-;48493:4;48486:11;;;48312:193;;;;:::o;48568:151::-;48657:7;48684:11;:18;48696:5;48684:18;;;;;;;;;;;;;;;:27;48703:7;48684:27;;;;;;;;;;;;;;;;48677:34;;48568:151;;;;:::o;36536:201::-;35516:13;:11;:13::i;:::-;36645:1:::1;36625:22;;:8;:22;;::::0;36617:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36701:28;36720:8;36701:18;:28::i;:::-;36536:201:::0;:::o;33668:98::-;33721:7;33748:10;33741:17;;33668:98;:::o;55292:380::-;55445:1;55428:19;;:5;:19;;;55420:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55526:1;55507:21;;:7;:21;;;55499:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55610:6;55580:11;:18;55592:5;55580:18;;;;;;;;;;;;;;;:27;55599:7;55580:27;;;;;;;;;;;;;;;:36;;;;55648:7;55632:32;;55641:5;55632:32;;;55657:6;55632:32;;;;;;:::i;:::-;;;;;;;;55292:380;;;:::o;55963:453::-;56098:24;56125:25;56135:5;56142:7;56125:9;:25::i;:::-;56098:52;;56185:17;56165:16;:37;56161:248;;56247:6;56227:16;:26;;56219:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56331:51;56340:5;56347:7;56375:6;56356:16;:25;56331:8;:51::i;:::-;56161:248;56087:329;55963:453;;;:::o;52171:840::-;52318:1;52302:18;;:4;:18;;;52294:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52395:1;52381:16;;:2;:16;;;52373:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;52450:38;52471:4;52477:2;52481:6;52450:20;:38::i;:::-;52501:19;52523:9;:15;52533:4;52523:15;;;;;;;;;;;;;;;;52501:37;;52572:6;52557:11;:21;;52549:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;52689:6;52675:11;:20;52657:9;:15;52667:4;52657:15;;;;;;;;;;;;;;;:38;;;;52892:6;52875:9;:13;52885:2;52875:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;52942:2;52927:26;;52936:4;52927:26;;;52946:6;52927:26;;;;;;:::i;:::-;;;;;;;;52966:37;52986:4;52992:2;52996:6;52966:19;:37::i;:::-;52283:728;52171:840;;;:::o;21831:153::-;21884:7;21911:59;21681:66;21949:20;;21911:37;:59::i;:::-;:65;;;;;;;;;;;;21904:72;;21831:153;:::o;60935:116::-;35516:13;:11;:13::i;:::-;60935:116;:::o;23249:992::-;23703:53;21333:66;23741:14;;23703:37;:53::i;:::-;:59;;;;;;;;;;;;23699:535;;;23779:37;23798:17;23779:18;:37::i;:::-;23699:535;;;23882:17;23853:61;;;:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;23849:306;;24083:56;;;;;;;;;;:::i;:::-;;;;;;;;23849:306;21681:66;23975:20;;23967:4;:28;23959:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;23917:140;24169:53;24187:17;24206:4;24212:9;24169:17;:53::i;:::-;23699:535;23249:992;;;:::o;35795:132::-;35870:12;:10;:12::i;:::-;35859:23;;:7;:5;:7::i;:::-;:23;;;35851:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35795:132::o;40139:120::-;39148:16;:14;:16::i;:::-;40208:5:::1;40198:7;;:15;;;;;;;;;;;;;;;;;;40229:22;40238:12;:10;:12::i;:::-;40229:22;;;;;;:::i;:::-;;;;;;;;40139:120::o:0;54179:675::-;54282:1;54263:21;;:7;:21;;;54255:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;54335:49;54356:7;54373:1;54377:6;54335:20;:49::i;:::-;54397:22;54422:9;:18;54432:7;54422:18;;;;;;;;;;;;;;;;54397:43;;54477:6;54459:14;:24;;54451:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;54596:6;54579:14;:23;54558:9;:18;54568:7;54558:18;;;;;;;;;;;;;;;:44;;;;54713:6;54697:12;;:22;;;;;;;;;;;54774:1;54748:37;;54757:7;54748:37;;;54778:6;54748:37;;;;;;:::i;:::-;;;;;;;;54798:48;54818:7;54835:1;54839:6;54798:19;:48::i;:::-;54244:610;54179:675;;:::o;6421:326::-;6481:4;6738:1;6716:7;:19;;;:23;6709:30;;6421:326;;;:::o;46299:149::-;19198:13;;;;;;;;;;;19190:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;46402:38:::1;46425:5;46432:7;46402:22;:38::i;:::-;46299:149:::0;;:::o;58722:66::-;19198:13;;;;;;;;;;;19190:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;58722:66::o;38454:99::-;19198:13;;;;;;;;;;;19190:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;38518:27:::1;:25;:27::i;:::-;38454:99::o:0;35173:97::-;19198:13;;;;;;;;;;;19190:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;35236:26:::1;:24;:26::i;:::-;35173:97::o:0;28988:68::-;19198:13;;;;;;;;;;;19190:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;28988:68::o;53298:548::-;53401:1;53382:21;;:7;:21;;;53374:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;53452:49;53481:1;53485:7;53494:6;53452:20;:49::i;:::-;53530:6;53514:12;;:22;;;;;;;:::i;:::-;;;;;;;;53707:6;53685:9;:18;53695:7;53685:18;;;;;;;;;;;;;;;;:28;;;;;;;;;;;53761:7;53740:37;;53757:1;53740:37;;;53770:6;53740:37;;;;;;:::i;:::-;;;;;;;;53790:48;53818:1;53822:7;53831:6;53790:19;:48::i;:::-;53298:548;;:::o;39880:118::-;38889:19;:17;:19::i;:::-;39950:4:::1;39940:7;;:14;;;;;;;;;;;;;;;;;;39970:20;39977:12;:10;:12::i;:::-;39970:20;;;;;;:::i;:::-;;;;;;;;39880:118::o:0;36897:191::-;36971:16;36990:6;;;;;;;;;;;36971:25;;37016:8;37007:6;;:17;;;;;;;;;;;;;;;;;;37071:8;37040:40;;37061:8;37040:40;;;;;;;;;;;;36960:128;36897:191;:::o;60628:199::-;38889:19;:17;:19::i;:::-;60775:44:::1;60802:4;60808:2;60812:6;60775:26;:44::i;:::-;60628:199:::0;;;:::o;57745:124::-;;;;:::o;1800:195::-;1861:21;1973:4;1963:14;;1800:195;;;:::o;2098:::-;2159:21;2271:4;2261:14;;2098:195;;;:::o;22080:284::-;22162:48;22192:17;22162:29;:48::i;:::-;22154:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;22339:17;22271:59;21681:66;22309:20;;22271:37;:59::i;:::-;:65;;;:85;;;;;;;;;;;;;;;;;;22080:284;:::o;22773:297::-;22916:29;22927:17;22916:10;:29::i;:::-;22974:1;22960:4;:11;:15;:28;;;;22979:9;22960:28;22956:107;;;23005:46;23027:17;23046:4;23005:21;:46::i;:::-;;22956:107;22773:297;;;:::o;39628:108::-;39695:8;:6;:8::i;:::-;39687:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;39628:108::o;46456:162::-;19198:13;;;;;;;;;;;19190:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;46577:5:::1;46569;:13;;;;;;:::i;:::-;;46603:7;46593;:17;;;;;;:::i;:::-;;46456:162:::0;;:::o;38561:97::-;19198:13;;;;;;;;;;;19190:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;38645:5:::1;38635:7;;:15;;;;;;;;;;;;;;;;;;38561:97::o:0;35278:113::-;19198:13;;;;;;;;;;;19190:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;35351:32:::1;35370:12;:10;:12::i;:::-;35351:18;:32::i;:::-;35278:113::o:0;39443:108::-;39514:8;:6;:8::i;:::-;39513:9;39505:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;39443:108::o;57016:125::-;;;;:::o;22477:155::-;22544:37;22563:17;22544:18;:37::i;:::-;22606:17;22597:27;;;;;;;;;;;;22477:155;:::o;27246:461::-;27329:12;27362:37;27392:6;27362:29;:37::i;:::-;27354:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;27516:12;27530:23;27557:6;:19;;27577:4;27557:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27515:67;;;;27600:99;27636:7;27645:10;27600:99;;;;;;;;;;;;;;;;;:35;:99::i;:::-;27593:106;;;;27246:461;;;;:::o;12831:305::-;12981:12;13010:7;13006:123;;;13041:10;13034:17;;;;13006:123;13084:33;13092:10;13104:12;13084:7;:33::i;:::-;12831:305;;;;;;:::o;13144:552::-;13325:1;13305:10;:17;:21;13301:388;;;13537:10;13531:17;13594:15;13581:10;13577:2;13573:19;13566:44;13301:388;13664:12;13657:20;;;;;;;;;;;:::i;:::-;;;;;;;;7:99:1;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:86::-;4458:7;4498:4;4491:5;4487:16;4476:27;;4423:86;;;:::o;4515:112::-;4598:22;4614:5;4598:22;:::i;:::-;4593:3;4586:35;4515:112;;:::o;4633:214::-;4722:4;4760:2;4749:9;4745:18;4737:26;;4773:67;4837:1;4826:9;4822:17;4813:6;4773:67;:::i;:::-;4633:214;;;;:::o;4853:329::-;4912:6;4961:2;4949:9;4940:7;4936:23;4932:32;4929:119;;;4967:79;;:::i;:::-;4929:119;5087:1;5112:53;5157:7;5148:6;5137:9;5133:22;5112:53;:::i;:::-;5102:63;;5058:117;4853:329;;;;:::o;5188:::-;5247:6;5296:2;5284:9;5275:7;5271:23;5267:32;5264:119;;;5302:79;;:::i;:::-;5264:119;5422:1;5447:53;5492:7;5483:6;5472:9;5468:22;5447:53;:::i;:::-;5437:63;;5393:117;5188:329;;;;:::o;5523:117::-;5632:1;5629;5622:12;5646:117;5755:1;5752;5745:12;5769:180;5817:77;5814:1;5807:88;5914:4;5911:1;5904:15;5938:4;5935:1;5928:15;5955:281;6038:27;6060:4;6038:27;:::i;:::-;6030:6;6026:40;6168:6;6156:10;6153:22;6132:18;6120:10;6117:34;6114:62;6111:88;;;6179:18;;:::i;:::-;6111:88;6219:10;6215:2;6208:22;5998:238;5955:281;;:::o;6242:129::-;6276:6;6303:20;;:::i;:::-;6293:30;;6332:33;6360:4;6352:6;6332:33;:::i;:::-;6242:129;;;:::o;6377:307::-;6438:4;6528:18;6520:6;6517:30;6514:56;;;6550:18;;:::i;:::-;6514:56;6588:29;6610:6;6588:29;:::i;:::-;6580:37;;6672:4;6666;6662:15;6654:23;;6377:307;;;:::o;6690:146::-;6787:6;6782:3;6777;6764:30;6828:1;6819:6;6814:3;6810:16;6803:27;6690:146;;;:::o;6842:423::-;6919:5;6944:65;6960:48;7001:6;6960:48;:::i;:::-;6944:65;:::i;:::-;6935:74;;7032:6;7025:5;7018:21;7070:4;7063:5;7059:16;7108:3;7099:6;7094:3;7090:16;7087:25;7084:112;;;7115:79;;:::i;:::-;7084:112;7205:54;7252:6;7247:3;7242;7205:54;:::i;:::-;6925:340;6842:423;;;;;:::o;7284:338::-;7339:5;7388:3;7381:4;7373:6;7369:17;7365:27;7355:122;;7396:79;;:::i;:::-;7355:122;7513:6;7500:20;7538:78;7612:3;7604:6;7597:4;7589:6;7585:17;7538:78;:::i;:::-;7529:87;;7345:277;7284:338;;;;:::o;7628:652::-;7705:6;7713;7762:2;7750:9;7741:7;7737:23;7733:32;7730:119;;;7768:79;;:::i;:::-;7730:119;7888:1;7913:53;7958:7;7949:6;7938:9;7934:22;7913:53;:::i;:::-;7903:63;;7859:117;8043:2;8032:9;8028:18;8015:32;8074:18;8066:6;8063:30;8060:117;;;8096:79;;:::i;:::-;8060:117;8201:62;8255:7;8246:6;8235:9;8231:22;8201:62;:::i;:::-;8191:72;;7986:287;7628:652;;;;;:::o;8286:77::-;8323:7;8352:5;8341:16;;8286:77;;;:::o;8369:118::-;8456:24;8474:5;8456:24;:::i;:::-;8451:3;8444:37;8369:118;;:::o;8493:222::-;8586:4;8624:2;8613:9;8609:18;8601:26;;8637:71;8705:1;8694:9;8690:17;8681:6;8637:71;:::i;:::-;8493:222;;;;:::o;8721:118::-;8808:24;8826:5;8808:24;:::i;:::-;8803:3;8796:37;8721:118;;:::o;8845:222::-;8938:4;8976:2;8965:9;8961:18;8953:26;;8989:71;9057:1;9046:9;9042:17;9033:6;8989:71;:::i;:::-;8845:222;;;;:::o;9073:474::-;9141:6;9149;9198:2;9186:9;9177:7;9173:23;9169:32;9166:119;;;9204:79;;:::i;:::-;9166:119;9324:1;9349:53;9394:7;9385:6;9374:9;9370:22;9349:53;:::i;:::-;9339:63;;9295:117;9451:2;9477:53;9522:7;9513:6;9502:9;9498:22;9477:53;:::i;:::-;9467:63;;9422:118;9073:474;;;;;:::o;9553:231::-;9693:34;9689:1;9681:6;9677:14;9670:58;9762:14;9757:2;9749:6;9745:15;9738:39;9553:231;:::o;9790:366::-;9932:3;9953:67;10017:2;10012:3;9953:67;:::i;:::-;9946:74;;10029:93;10118:3;10029:93;:::i;:::-;10147:2;10142:3;10138:12;10131:19;;9790:366;;;:::o;10162:419::-;10328:4;10366:2;10355:9;10351:18;10343:26;;10415:9;10409:4;10405:20;10401:1;10390:9;10386:17;10379:47;10443:131;10569:4;10443:131;:::i;:::-;10435:139;;10162:419;;;:::o;10587:231::-;10727:34;10723:1;10715:6;10711:14;10704:58;10796:14;10791:2;10783:6;10779:15;10772:39;10587:231;:::o;10824:366::-;10966:3;10987:67;11051:2;11046:3;10987:67;:::i;:::-;10980:74;;11063:93;11152:3;11063:93;:::i;:::-;11181:2;11176:3;11172:12;11165:19;;10824:366;;;:::o;11196:419::-;11362:4;11400:2;11389:9;11385:18;11377:26;;11449:9;11443:4;11439:20;11435:1;11424:9;11420:17;11413:47;11477:131;11603:4;11477:131;:::i;:::-;11469:139;;11196:419;;;:::o;11621:180::-;11669:77;11666:1;11659:88;11766:4;11763:1;11756:15;11790:4;11787:1;11780:15;11807:191;11847:3;11866:20;11884:1;11866:20;:::i;:::-;11861:25;;11900:20;11918:1;11900:20;:::i;:::-;11895:25;;11943:1;11940;11936:9;11929:16;;11964:3;11961:1;11958:10;11955:36;;;11971:18;;:::i;:::-;11955:36;11807:191;;;;:::o;12004:243::-;12144:34;12140:1;12132:6;12128:14;12121:58;12213:26;12208:2;12200:6;12196:15;12189:51;12004:243;:::o;12253:366::-;12395:3;12416:67;12480:2;12475:3;12416:67;:::i;:::-;12409:74;;12492:93;12581:3;12492:93;:::i;:::-;12610:2;12605:3;12601:12;12594:19;;12253:366;;;:::o;12625:419::-;12791:4;12829:2;12818:9;12814:18;12806:26;;12878:9;12872:4;12868:20;12864:1;12853:9;12849:17;12842:47;12906:131;13032:4;12906:131;:::i;:::-;12898:139;;12625:419;;;:::o;13050:178::-;13190:30;13186:1;13178:6;13174:14;13167:54;13050:178;:::o;13234:366::-;13376:3;13397:67;13461:2;13456:3;13397:67;:::i;:::-;13390:74;;13473:93;13562:3;13473:93;:::i;:::-;13591:2;13586:3;13582:12;13575:19;;13234:366;;;:::o;13606:419::-;13772:4;13810:2;13799:9;13795:18;13787:26;;13859:9;13853:4;13849:20;13845:1;13834:9;13830:17;13823:47;13887:131;14013:4;13887:131;:::i;:::-;13879:139;;13606:419;;;:::o;14031:233::-;14171:34;14167:1;14159:6;14155:14;14148:58;14240:16;14235:2;14227:6;14223:15;14216:41;14031:233;:::o;14270:366::-;14412:3;14433:67;14497:2;14492:3;14433:67;:::i;:::-;14426:74;;14509:93;14598:3;14509:93;:::i;:::-;14627:2;14622:3;14618:12;14611:19;;14270:366;;;:::o;14642:419::-;14808:4;14846:2;14835:9;14831:18;14823:26;;14895:9;14889:4;14885:20;14881:1;14870:9;14866:17;14859:47;14923:131;15049:4;14923:131;:::i;:::-;14915:139;;14642:419;;;:::o;15067:102::-;15109:8;15156:5;15153:1;15149:13;15128:34;;15067:102;;;:::o;15175:848::-;15236:5;15243:4;15267:6;15258:15;;15291:5;15282:14;;15305:712;15326:1;15316:8;15313:15;15305:712;;;15421:4;15416:3;15412:14;15406:4;15403:24;15400:50;;;15430:18;;:::i;:::-;15400:50;15480:1;15470:8;15466:16;15463:451;;;15895:4;15888:5;15884:16;15875:25;;15463:451;15945:4;15939;15935:15;15927:23;;15975:32;15998:8;15975:32;:::i;:::-;15963:44;;15305:712;;;15175:848;;;;;;;:::o;16029:1073::-;16083:5;16274:8;16264:40;;16295:1;16286:10;;16297:5;;16264:40;16323:4;16313:36;;16340:1;16331:10;;16342:5;;16313:36;16409:4;16457:1;16452:27;;;;16493:1;16488:191;;;;16402:277;;16452:27;16470:1;16461:10;;16472:5;;;16488:191;16533:3;16523:8;16520:17;16517:43;;;16540:18;;:::i;:::-;16517:43;16589:8;16586:1;16582:16;16573:25;;16624:3;16617:5;16614:14;16611:40;;;16631:18;;:::i;:::-;16611:40;16664:5;;;16402:277;;16788:2;16778:8;16775:16;16769:3;16763:4;16760:13;16756:36;16738:2;16728:8;16725:16;16720:2;16714:4;16711:12;16707:35;16691:111;16688:246;;;16844:8;16838:4;16834:19;16825:28;;16879:3;16872:5;16869:14;16866:40;;;16886:18;;:::i;:::-;16866:40;16919:5;;16688:246;16959:42;16997:3;16987:8;16981:4;16978:1;16959:42;:::i;:::-;16944:57;;;;17033:4;17028:3;17024:14;17017:5;17014:25;17011:51;;;17042:18;;:::i;:::-;17011:51;17091:4;17084:5;17080:16;17071:25;;16029:1073;;;;;;:::o;17108:281::-;17166:5;17190:23;17208:4;17190:23;:::i;:::-;17182:31;;17234:25;17250:8;17234:25;:::i;:::-;17222:37;;17278:104;17315:66;17305:8;17299:4;17278:104;:::i;:::-;17269:113;;17108:281;;;;:::o;17395:410::-;17435:7;17458:20;17476:1;17458:20;:::i;:::-;17453:25;;17492:20;17510:1;17492:20;:::i;:::-;17487:25;;17547:1;17544;17540:9;17569:30;17587:11;17569:30;:::i;:::-;17558:41;;17748:1;17739:7;17735:15;17732:1;17729:22;17709:1;17702:9;17682:83;17659:139;;17778:18;;:::i;:::-;17659:139;17443:362;17395:410;;;;:::o;17811:85::-;17856:7;17885:5;17874:16;;17811:85;;;:::o;17902:60::-;17930:3;17951:5;17944:12;;17902:60;;;:::o;17968:154::-;18024:9;18057:59;18073:42;18082:32;18108:5;18082:32;:::i;:::-;18073:42;:::i;:::-;18057:59;:::i;:::-;18044:72;;17968:154;;;:::o;18128:143::-;18221:43;18258:5;18221:43;:::i;:::-;18216:3;18209:56;18128:143;;:::o;18277:234::-;18376:4;18414:2;18403:9;18399:18;18391:26;;18427:77;18501:1;18490:9;18486:17;18477:6;18427:77;:::i;:::-;18277:234;;;;:::o;18517:180::-;18565:77;18562:1;18555:88;18662:4;18659:1;18652:15;18686:4;18683:1;18676:15;18703:320;18747:6;18784:1;18778:4;18774:12;18764:22;;18831:1;18825:4;18821:12;18852:18;18842:81;;18908:4;18900:6;18896:17;18886:27;;18842:81;18970:2;18962:6;18959:14;18939:18;18936:38;18933:84;;18989:18;;:::i;:::-;18933:84;18754:269;18703:320;;;:::o;19029:224::-;19169:34;19165:1;19157:6;19153:14;19146:58;19238:7;19233:2;19225:6;19221:15;19214:32;19029:224;:::o;19259:366::-;19401:3;19422:67;19486:2;19481:3;19422:67;:::i;:::-;19415:74;;19498:93;19587:3;19498:93;:::i;:::-;19616:2;19611:3;19607:12;19600:19;;19259:366;;;:::o;19631:419::-;19797:4;19835:2;19824:9;19820:18;19812:26;;19884:9;19878:4;19874:20;19870:1;19859:9;19855:17;19848:47;19912:131;20038:4;19912:131;:::i;:::-;19904:139;;19631:419;;;:::o;20056:225::-;20196:34;20192:1;20184:6;20180:14;20173:58;20265:8;20260:2;20252:6;20248:15;20241:33;20056:225;:::o;20287:366::-;20429:3;20450:67;20514:2;20509:3;20450:67;:::i;:::-;20443:74;;20526:93;20615:3;20526:93;:::i;:::-;20644:2;20639:3;20635:12;20628:19;;20287:366;;;:::o;20659:419::-;20825:4;20863:2;20852:9;20848:18;20840:26;;20912:9;20906:4;20902:20;20898:1;20887:9;20883:17;20876:47;20940:131;21066:4;20940:131;:::i;:::-;20932:139;;20659:419;;;:::o;21084:223::-;21224:34;21220:1;21212:6;21208:14;21201:58;21293:6;21288:2;21280:6;21276:15;21269:31;21084:223;:::o;21313:366::-;21455:3;21476:67;21540:2;21535:3;21476:67;:::i;:::-;21469:74;;21552:93;21641:3;21552:93;:::i;:::-;21670:2;21665:3;21661:12;21654:19;;21313:366;;;:::o;21685:419::-;21851:4;21889:2;21878:9;21874:18;21866:26;;21938:9;21932:4;21928:20;21924:1;21913:9;21909:17;21902:47;21966:131;22092:4;21966:131;:::i;:::-;21958:139;;21685:419;;;:::o;22110:221::-;22250:34;22246:1;22238:6;22234:14;22227:58;22319:4;22314:2;22306:6;22302:15;22295:29;22110:221;:::o;22337:366::-;22479:3;22500:67;22564:2;22559:3;22500:67;:::i;:::-;22493:74;;22576:93;22665:3;22576:93;:::i;:::-;22694:2;22689:3;22685:12;22678:19;;22337:366;;;:::o;22709:419::-;22875:4;22913:2;22902:9;22898:18;22890:26;;22962:9;22956:4;22952:20;22948:1;22937:9;22933:17;22926:47;22990:131;23116:4;22990:131;:::i;:::-;22982:139;;22709:419;;;:::o;23134:179::-;23274:31;23270:1;23262:6;23258:14;23251:55;23134:179;:::o;23319:366::-;23461:3;23482:67;23546:2;23541:3;23482:67;:::i;:::-;23475:74;;23558:93;23647:3;23558:93;:::i;:::-;23676:2;23671:3;23667:12;23660:19;;23319:366;;;:::o;23691:419::-;23857:4;23895:2;23884:9;23880:18;23872:26;;23944:9;23938:4;23934:20;23930:1;23919:9;23915:17;23908:47;23972:131;24098:4;23972:131;:::i;:::-;23964:139;;23691:419;;;:::o;24116:224::-;24256:34;24252:1;24244:6;24240:14;24233:58;24325:7;24320:2;24312:6;24308:15;24301:32;24116:224;:::o;24346:366::-;24488:3;24509:67;24573:2;24568:3;24509:67;:::i;:::-;24502:74;;24585:93;24674:3;24585:93;:::i;:::-;24703:2;24698:3;24694:12;24687:19;;24346:366;;;:::o;24718:419::-;24884:4;24922:2;24911:9;24907:18;24899:26;;24971:9;24965:4;24961:20;24957:1;24946:9;24942:17;24935:47;24999:131;25125:4;24999:131;:::i;:::-;24991:139;;24718:419;;;:::o;25143:222::-;25283:34;25279:1;25271:6;25267:14;25260:58;25352:5;25347:2;25339:6;25335:15;25328:30;25143:222;:::o;25371:366::-;25513:3;25534:67;25598:2;25593:3;25534:67;:::i;:::-;25527:74;;25610:93;25699:3;25610:93;:::i;:::-;25728:2;25723:3;25719:12;25712:19;;25371:366;;;:::o;25743:419::-;25909:4;25947:2;25936:9;25932:18;25924:26;;25996:9;25990:4;25986:20;25982:1;25971:9;25967:17;25960:47;26024:131;26150:4;26024:131;:::i;:::-;26016:139;;25743:419;;;:::o;26168:225::-;26308:34;26304:1;26296:6;26292:14;26285:58;26377:8;26372:2;26364:6;26360:15;26353:33;26168:225;:::o;26399:366::-;26541:3;26562:67;26626:2;26621:3;26562:67;:::i;:::-;26555:74;;26638:93;26727:3;26638:93;:::i;:::-;26756:2;26751:3;26747:12;26740:19;;26399:366;;;:::o;26771:419::-;26937:4;26975:2;26964:9;26960:18;26952:26;;27024:9;27018:4;27014:20;27010:1;26999:9;26995:17;26988:47;27052:131;27178:4;27052:131;:::i;:::-;27044:139;;26771:419;;;:::o;27196:122::-;27269:24;27287:5;27269:24;:::i;:::-;27262:5;27259:35;27249:63;;27308:1;27305;27298:12;27249:63;27196:122;:::o;27324:143::-;27381:5;27412:6;27406:13;27397:22;;27428:33;27455:5;27428:33;:::i;:::-;27324:143;;;;:::o;27473:351::-;27543:6;27592:2;27580:9;27571:7;27567:23;27563:32;27560:119;;;27598:79;;:::i;:::-;27560:119;27718:1;27743:64;27799:7;27790:6;27779:9;27775:22;27743:64;:::i;:::-;27733:74;;27689:128;27473:351;;;;:::o;27830:233::-;27970:34;27966:1;27958:6;27954:14;27947:58;28039:16;28034:2;28026:6;28022:15;28015:41;27830:233;:::o;28069:366::-;28211:3;28232:67;28296:2;28291:3;28232:67;:::i;:::-;28225:74;;28308:93;28397:3;28308:93;:::i;:::-;28426:2;28421:3;28417:12;28410:19;;28069:366;;;:::o;28441:419::-;28607:4;28645:2;28634:9;28630:18;28622:26;;28694:9;28688:4;28684:20;28680:1;28669:9;28665:17;28658:47;28722:131;28848:4;28722:131;:::i;:::-;28714:139;;28441:419;;;:::o;28866:228::-;29006:34;29002:1;28994:6;28990:14;28983:58;29075:11;29070:2;29062:6;29058:15;29051:36;28866:228;:::o;29100:366::-;29242:3;29263:67;29327:2;29322:3;29263:67;:::i;:::-;29256:74;;29339:93;29428:3;29339:93;:::i;:::-;29457:2;29452:3;29448:12;29441:19;;29100:366;;;:::o;29472:419::-;29638:4;29676:2;29665:9;29661:18;29653:26;;29725:9;29719:4;29715:20;29711:1;29700:9;29696:17;29689:47;29753:131;29879:4;29753:131;:::i;:::-;29745:139;;29472:419;;;:::o;29897:182::-;30037:34;30033:1;30025:6;30021:14;30014:58;29897:182;:::o;30085:366::-;30227:3;30248:67;30312:2;30307:3;30248:67;:::i;:::-;30241:74;;30324:93;30413:3;30324:93;:::i;:::-;30442:2;30437:3;30433:12;30426:19;;30085:366;;;:::o;30457:419::-;30623:4;30661:2;30650:9;30646:18;30638:26;;30710:9;30704:4;30700:20;30696:1;30685:9;30681:17;30674:47;30738:131;30864:4;30738:131;:::i;:::-;30730:139;;30457:419;;;:::o;30882:220::-;31022:34;31018:1;31010:6;31006:14;30999:58;31091:3;31086:2;31078:6;31074:15;31067:28;30882:220;:::o;31108:366::-;31250:3;31271:67;31335:2;31330:3;31271:67;:::i;:::-;31264:74;;31347:93;31436:3;31347:93;:::i;:::-;31465:2;31460:3;31456:12;31449:19;;31108:366;;;:::o;31480:419::-;31646:4;31684:2;31673:9;31669:18;31661:26;;31733:9;31727:4;31723:20;31719:1;31708:9;31704:17;31697:47;31761:131;31887:4;31761:131;:::i;:::-;31753:139;;31480:419;;;:::o;31905:221::-;32045:34;32041:1;32033:6;32029:14;32022:58;32114:4;32109:2;32101:6;32097:15;32090:29;31905:221;:::o;32132:366::-;32274:3;32295:67;32359:2;32354:3;32295:67;:::i;:::-;32288:74;;32371:93;32460:3;32371:93;:::i;:::-;32489:2;32484:3;32480:12;32473:19;;32132:366;;;:::o;32504:419::-;32670:4;32708:2;32697:9;32693:18;32685:26;;32757:9;32751:4;32747:20;32743:1;32732:9;32728:17;32721:47;32785:131;32911:4;32785:131;:::i;:::-;32777:139;;32504:419;;;:::o;32929:230::-;33069:34;33065:1;33057:6;33053:14;33046:58;33138:13;33133:2;33125:6;33121:15;33114:38;32929:230;:::o;33165:366::-;33307:3;33328:67;33392:2;33387:3;33328:67;:::i;:::-;33321:74;;33404:93;33493:3;33404:93;:::i;:::-;33522:2;33517:3;33513:12;33506:19;;33165:366;;;:::o;33537:419::-;33703:4;33741:2;33730:9;33726:18;33718:26;;33790:9;33784:4;33780:20;33776:1;33765:9;33761:17;33754:47;33818:131;33944:4;33818:131;:::i;:::-;33810:139;;33537:419;;;:::o;33962:181::-;34102:33;34098:1;34090:6;34086:14;34079:57;33962:181;:::o;34149:366::-;34291:3;34312:67;34376:2;34371:3;34312:67;:::i;:::-;34305:74;;34388:93;34477:3;34388:93;:::i;:::-;34506:2;34501:3;34497:12;34490:19;;34149:366;;;:::o;34521:419::-;34687:4;34725:2;34714:9;34710:18;34702:26;;34774:9;34768:4;34764:20;34760:1;34749:9;34745:17;34738:47;34802:131;34928:4;34802:131;:::i;:::-;34794:139;;34521:419;;;:::o;34946:232::-;35086:34;35082:1;35074:6;35070:14;35063:58;35155:15;35150:2;35142:6;35138:15;35131:40;34946:232;:::o;35184:366::-;35326:3;35347:67;35411:2;35406:3;35347:67;:::i;:::-;35340:74;;35423:93;35512:3;35423:93;:::i;:::-;35541:2;35536:3;35532:12;35525:19;;35184:366;;;:::o;35556:419::-;35722:4;35760:2;35749:9;35745:18;35737:26;;35809:9;35803:4;35799:20;35795:1;35784:9;35780:17;35773:47;35837:131;35963:4;35837:131;:::i;:::-;35829:139;;35556:419;;;:::o;35981:170::-;36121:22;36117:1;36109:6;36105:14;36098:46;35981:170;:::o;36157:366::-;36299:3;36320:67;36384:2;36379:3;36320:67;:::i;:::-;36313:74;;36396:93;36485:3;36396:93;:::i;:::-;36514:2;36509:3;36505:12;36498:19;;36157:366;;;:::o;36529:419::-;36695:4;36733:2;36722:9;36718:18;36710:26;;36782:9;36776:4;36772:20;36768:1;36757:9;36753:17;36746:47;36810:131;36936:4;36810:131;:::i;:::-;36802:139;;36529:419;;;:::o;36954:141::-;37003:4;37026:3;37018:11;;37049:3;37046:1;37039:14;37083:4;37080:1;37070:18;37062:26;;36954:141;;;:::o;37101:93::-;37138:6;37185:2;37180;37173:5;37169:14;37165:23;37155:33;;37101:93;;;:::o;37200:107::-;37244:8;37294:5;37288:4;37284:16;37263:37;;37200:107;;;;:::o;37313:393::-;37382:6;37432:1;37420:10;37416:18;37455:97;37485:66;37474:9;37455:97;:::i;:::-;37573:39;37603:8;37592:9;37573:39;:::i;:::-;37561:51;;37645:4;37641:9;37634:5;37630:21;37621:30;;37694:4;37684:8;37680:19;37673:5;37670:30;37660:40;;37389:317;;37313:393;;;;;:::o;37712:142::-;37762:9;37795:53;37813:34;37822:24;37840:5;37822:24;:::i;:::-;37813:34;:::i;:::-;37795:53;:::i;:::-;37782:66;;37712:142;;;:::o;37860:75::-;37903:3;37924:5;37917:12;;37860:75;;;:::o;37941:269::-;38051:39;38082:7;38051:39;:::i;:::-;38112:91;38161:41;38185:16;38161:41;:::i;:::-;38153:6;38146:4;38140:11;38112:91;:::i;:::-;38106:4;38099:105;38017:193;37941:269;;;:::o;38216:73::-;38261:3;38216:73;:::o;38295:189::-;38372:32;;:::i;:::-;38413:65;38471:6;38463;38457:4;38413:65;:::i;:::-;38348:136;38295:189;;:::o;38490:186::-;38550:120;38567:3;38560:5;38557:14;38550:120;;;38621:39;38658:1;38651:5;38621:39;:::i;:::-;38594:1;38587:5;38583:13;38574:22;;38550:120;;;38490:186;;:::o;38682:543::-;38783:2;38778:3;38775:11;38772:446;;;38817:38;38849:5;38817:38;:::i;:::-;38901:29;38919:10;38901:29;:::i;:::-;38891:8;38887:44;39084:2;39072:10;39069:18;39066:49;;;39105:8;39090:23;;39066:49;39128:80;39184:22;39202:3;39184:22;:::i;:::-;39174:8;39170:37;39157:11;39128:80;:::i;:::-;38787:431;;38772:446;38682:543;;;:::o;39231:117::-;39285:8;39335:5;39329:4;39325:16;39304:37;;39231:117;;;;:::o;39354:169::-;39398:6;39431:51;39479:1;39475:6;39467:5;39464:1;39460:13;39431:51;:::i;:::-;39427:56;39512:4;39506;39502:15;39492:25;;39405:118;39354:169;;;;:::o;39528:295::-;39604:4;39750:29;39775:3;39769:4;39750:29;:::i;:::-;39742:37;;39812:3;39809:1;39805:11;39799:4;39796:21;39788:29;;39528:295;;;;:::o;39828:1395::-;39945:37;39978:3;39945:37;:::i;:::-;40047:18;40039:6;40036:30;40033:56;;;40069:18;;:::i;:::-;40033:56;40113:38;40145:4;40139:11;40113:38;:::i;:::-;40198:67;40258:6;40250;40244:4;40198:67;:::i;:::-;40292:1;40316:4;40303:17;;40348:2;40340:6;40337:14;40365:1;40360:618;;;;41022:1;41039:6;41036:77;;;41088:9;41083:3;41079:19;41073:26;41064:35;;41036:77;41139:67;41199:6;41192:5;41139:67;:::i;:::-;41133:4;41126:81;40995:222;40330:887;;40360:618;40412:4;40408:9;40400:6;40396:22;40446:37;40478:4;40446:37;:::i;:::-;40505:1;40519:208;40533:7;40530:1;40527:14;40519:208;;;40612:9;40607:3;40603:19;40597:26;40589:6;40582:42;40663:1;40655:6;40651:14;40641:24;;40710:2;40699:9;40695:18;40682:31;;40556:4;40553:1;40549:12;40544:17;;40519:208;;;40755:6;40746:7;40743:19;40740:179;;;40813:9;40808:3;40804:19;40798:26;40856:48;40898:4;40890:6;40886:17;40875:9;40856:48;:::i;:::-;40848:6;40841:64;40763:156;40740:179;40965:1;40961;40953:6;40949:14;40945:22;40939:4;40932:36;40367:611;;;40330:887;;39920:1303;;;39828:1395;;:::o;41229:166::-;41369:18;41365:1;41357:6;41353:14;41346:42;41229:166;:::o;41401:366::-;41543:3;41564:67;41628:2;41623:3;41564:67;:::i;:::-;41557:74;;41640:93;41729:3;41640:93;:::i;:::-;41758:2;41753:3;41749:12;41742:19;;41401:366;;;:::o;41773:419::-;41939:4;41977:2;41966:9;41962:18;41954:26;;42026:9;42020:4;42016:20;42012:1;42001:9;41997:17;41990:47;42054:131;42180:4;42054:131;:::i;:::-;42046:139;;41773:419;;;:::o;42198:225::-;42338:34;42334:1;42326:6;42322:14;42315:58;42407:8;42402:2;42394:6;42390:15;42383:33;42198:225;:::o;42429:366::-;42571:3;42592:67;42656:2;42651:3;42592:67;:::i;:::-;42585:74;;42668:93;42757:3;42668:93;:::i;:::-;42786:2;42781:3;42777:12;42770:19;;42429:366;;;:::o;42801:419::-;42967:4;43005:2;42994:9;42990:18;42982:26;;43054:9;43048:4;43044:20;43040:1;43029:9;43025:17;43018:47;43082:131;43208:4;43082:131;:::i;:::-;43074:139;;42801:419;;;:::o;43226:98::-;43277:6;43311:5;43305:12;43295:22;;43226:98;;;:::o;43330:147::-;43431:11;43468:3;43453:18;;43330:147;;;;:::o;43483:386::-;43587:3;43615:38;43647:5;43615:38;:::i;:::-;43669:88;43750:6;43745:3;43669:88;:::i;:::-;43662:95;;43766:65;43824:6;43819:3;43812:4;43805:5;43801:16;43766:65;:::i;:::-;43856:6;43851:3;43847:16;43840:23;;43591:278;43483:386;;;;:::o;43875:271::-;44005:3;44027:93;44116:3;44107:6;44027:93;:::i;:::-;44020:100;;44137:3;44130:10;;43875:271;;;;:::o
Swarm Source
ipfs://c826650c12055dd1d72c7410f141721bc032a3e820bad749437c8ca6ba7ba5ab
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.