Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 2,036 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Unstake NF Ts | 36088100 | 2 days ago | IN | 0 ETH | 0.00001685 | ||||
| Claim Rewards | 36088065 | 2 days ago | IN | 0 ETH | 0.00002569 | ||||
| Unstake NF Ts | 35804292 | 4 days ago | IN | 0 ETH | 0.00001014 | ||||
| Claim Rewards | 35804276 | 4 days ago | IN | 0 ETH | 0.00002751 | ||||
| Claim Rewards | 35526654 | 5 days ago | IN | 0 ETH | 0.00002446 | ||||
| Unstake NF Ts | 35407235 | 6 days ago | IN | 0 ETH | 0.00008406 | ||||
| Claim Rewards | 35407196 | 6 days ago | IN | 0 ETH | 0.00003085 | ||||
| Unstake NF Ts | 35402879 | 6 days ago | IN | 0 ETH | 0.00001694 | ||||
| Claim Rewards | 35402866 | 6 days ago | IN | 0 ETH | 0.00003049 | ||||
| Unstake NF Ts | 35327187 | 7 days ago | IN | 0 ETH | 0.00001749 | ||||
| Claim Rewards | 35327116 | 7 days ago | IN | 0 ETH | 0.00002193 | ||||
| Unstake NF Ts | 35108765 | 8 days ago | IN | 0 ETH | 0.00000963 | ||||
| Claim Rewards | 35108716 | 8 days ago | IN | 0 ETH | 0.00003073 | ||||
| Unstake NF Ts | 34991303 | 9 days ago | IN | 0 ETH | 0.00002127 | ||||
| Claim Rewards | 34991249 | 9 days ago | IN | 0 ETH | 0.00003086 | ||||
| Claim Rewards | 34931017 | 10 days ago | IN | 0 ETH | 0.00002915 | ||||
| Claim Rewards | 34929205 | 10 days ago | IN | 0 ETH | 0.00002944 | ||||
| Unstake NF Ts | 34793038 | 10 days ago | IN | 0 ETH | 0.0000362 | ||||
| Unstake NF Ts | 34673627 | 11 days ago | IN | 0 ETH | 0.00001551 | ||||
| Claim Rewards | 34673568 | 11 days ago | IN | 0 ETH | 0.0000301 | ||||
| Unstake NF Ts | 34548953 | 12 days ago | IN | 0 ETH | 0.00009794 | ||||
| Unstake NF Ts | 34548911 | 12 days ago | IN | 0 ETH | 0.00014607 | ||||
| Claim Rewards | 34483324 | 13 days ago | IN | 0 ETH | 0.00003073 | ||||
| Unstake NF Ts | 34402296 | 14 days ago | IN | 0 ETH | 0.00001882 | ||||
| Claim Rewards | 34402264 | 14 days ago | IN | 0 ETH | 0.00002998 |
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 20395021 | 114 days ago | Contract Creation | 0 ETH |
Cross-Chain Transactions
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:
NFTStaking
Compiler Version
v0.8.28-1.0.2
ZkSolc Version
v1.5.15
Contract Source Code (Solidity)
/** *Submitted for verification at abscan.org on 2025-10-01 */ // Sources flattened with hardhat v2.26.3 https://hardhat.org // SPDX-License-Identifier: MIT // File @openzeppelin/contracts/utils/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } } // File @openzeppelin/contracts/access/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * The initial owner is set to the address provided by the deployer. This can * later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File @openzeppelin/contracts/interfaces/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v5.4.0) (interfaces/draft-IERC6093.sol) pragma solidity >=0.8.4; /** * @dev Standard ERC-20 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens. */ interface IERC20Errors { /** * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. * @param balance Current balance for the interacting account. * @param needed Minimum amount required to perform a transfer. */ error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC20InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC20InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `spender`ΓÇÖs `allowance`. Used in transfers. * @param spender Address that may be allowed to operate on tokens without being their owner. * @param allowance Amount of tokens a `spender` is allowed to operate with. * @param needed Minimum amount required to perform a transfer. */ error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC20InvalidApprover(address approver); /** * @dev Indicates a failure with the `spender` to be approved. Used in approvals. * @param spender Address that may be allowed to operate on tokens without being their owner. */ error ERC20InvalidSpender(address spender); } /** * @dev Standard ERC-721 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens. */ interface IERC721Errors { /** * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20. * Used in balance queries. * @param owner Address of the current owner of a token. */ error ERC721InvalidOwner(address owner); /** * @dev Indicates a `tokenId` whose `owner` is the zero address. * @param tokenId Identifier number of a token. */ error ERC721NonexistentToken(uint256 tokenId); /** * @dev Indicates an error related to the ownership over a particular token. Used in transfers. * @param sender Address whose tokens are being transferred. * @param tokenId Identifier number of a token. * @param owner Address of the current owner of a token. */ error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC721InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC721InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `operator`ΓÇÖs approval. Used in transfers. * @param operator Address that may be allowed to operate on tokens without being their owner. * @param tokenId Identifier number of a token. */ error ERC721InsufficientApproval(address operator, uint256 tokenId); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC721InvalidApprover(address approver); /** * @dev Indicates a failure with the `operator` to be approved. Used in approvals. * @param operator Address that may be allowed to operate on tokens without being their owner. */ error ERC721InvalidOperator(address operator); } /** * @dev Standard ERC-1155 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens. */ interface IERC1155Errors { /** * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. * @param balance Current balance for the interacting account. * @param needed Minimum amount required to perform a transfer. * @param tokenId Identifier number of a token. */ error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC1155InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC1155InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `operator`ΓÇÖs approval. Used in transfers. * @param operator Address that may be allowed to operate on tokens without being their owner. * @param owner Address of the current owner of a token. */ error ERC1155MissingApprovalForAll(address operator, address owner); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC1155InvalidApprover(address approver); /** * @dev Indicates a failure with the `operator` to be approved. Used in approvals. * @param operator Address that may be allowed to operate on tokens without being their owner. */ error ERC1155InvalidOperator(address operator); /** * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation. * Used in batch transfers. * @param idsLength Length of the array of token identifiers * @param valuesLength Length of the array of token amounts */ error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength); } // File @openzeppelin/contracts/token/ERC20/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol) pragma solidity >=0.4.16; /** * @dev Interface of the ERC-20 standard as defined in the ERC. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 value) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets a `value` amount of tokens as the allowance of `spender` over the * caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 value) external returns (bool); } // File @openzeppelin/contracts/token/ERC20/extensions/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity >=0.6.2; /** * @dev Interface for the optional metadata functions from the ERC-20 standard. */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File @openzeppelin/contracts/token/ERC20/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.20; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * The default value of {decimals} is 18. To change this, you should override * this function so it returns a different value. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC-20 * applications. */ abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors { mapping(address account => uint256) private _balances; mapping(address account => mapping(address spender => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * Both values are immutable: they can only be set once during construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the default value returned by this function, unless * it's overridden. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual returns (uint8) { return 18; } /// @inheritdoc IERC20 function totalSupply() public view virtual returns (uint256) { return _totalSupply; } /// @inheritdoc IERC20 function balanceOf(address account) public view virtual returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `value`. */ function transfer(address to, uint256 value) public virtual returns (bool) { address owner = _msgSender(); _transfer(owner, to, value); return true; } /// @inheritdoc IERC20 function allowance(address owner, address spender) public view virtual returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 value) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, value); return true; } /** * @dev See {IERC20-transferFrom}. * * Skips emitting an {Approval} event indicating an allowance update. This is not * required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `value`. * - the caller must have allowance for ``from``'s tokens of at least * `value`. */ function transferFrom(address from, address to, uint256 value) public virtual returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, value); _transfer(from, to, value); return true; } /** * @dev Moves a `value` amount of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * NOTE: This function is not virtual, {_update} should be overridden instead. */ function _transfer(address from, address to, uint256 value) internal { if (from == address(0)) { revert ERC20InvalidSender(address(0)); } if (to == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(from, to, value); } /** * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from` * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding * this function. * * Emits a {Transfer} event. */ function _update(address from, address to, uint256 value) internal virtual { if (from == address(0)) { // Overflow check required: The rest of the code assumes that totalSupply never overflows _totalSupply += value; } else { uint256 fromBalance = _balances[from]; if (fromBalance < value) { revert ERC20InsufficientBalance(from, fromBalance, value); } unchecked { // Overflow not possible: value <= fromBalance <= totalSupply. _balances[from] = fromBalance - value; } } if (to == address(0)) { unchecked { // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply. _totalSupply -= value; } } else { unchecked { // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256. _balances[to] += value; } } emit Transfer(from, to, value); } /** * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0). * Relies on the `_update` mechanism * * Emits a {Transfer} event with `from` set to the zero address. * * NOTE: This function is not virtual, {_update} should be overridden instead. */ function _mint(address account, uint256 value) internal { if (account == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(address(0), account, value); } /** * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply. * Relies on the `_update` mechanism. * * Emits a {Transfer} event with `to` set to the zero address. * * NOTE: This function is not virtual, {_update} should be overridden instead */ function _burn(address account, uint256 value) internal { if (account == address(0)) { revert ERC20InvalidSender(address(0)); } _update(account, address(0), value); } /** * @dev Sets `value` as the allowance of `spender` over the `owner`'s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. * * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument. */ function _approve(address owner, address spender, uint256 value) internal { _approve(owner, spender, value, true); } /** * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event. * * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any * `Approval` event during `transferFrom` operations. * * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to * true using the following override: * * ```solidity * function _approve(address owner, address spender, uint256 value, bool) internal virtual override { * super._approve(owner, spender, value, true); * } * ``` * * Requirements are the same as {_approve}. */ function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual { if (owner == address(0)) { revert ERC20InvalidApprover(address(0)); } if (spender == address(0)) { revert ERC20InvalidSpender(address(0)); } _allowances[owner][spender] = value; if (emitEvent) { emit Approval(owner, spender, value); } } /** * @dev Updates `owner`'s allowance for `spender` based on spent `value`. * * Does not update the allowance value in case of infinite allowance. * Revert if not enough allowance is available. * * Does not emit an {Approval} event. */ function _spendAllowance(address owner, address spender, uint256 value) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance < type(uint256).max) { if (currentAllowance < value) { revert ERC20InsufficientAllowance(spender, currentAllowance, value); } unchecked { _approve(owner, spender, currentAllowance - value, false); } } } } // File @openzeppelin/contracts/utils/introspection/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v5.4.0) (utils/introspection/IERC165.sol) pragma solidity >=0.4.16; /** * @dev Interface of the ERC-165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[ERC]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @openzeppelin/contracts/token/ERC721/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v5.4.0) (token/ERC721/IERC721.sol) pragma solidity >=0.6.2; /** * @dev Required interface of an ERC-721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon * a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC-721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or * {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon * a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the address zero. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File @openzeppelin/contracts/utils/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v5.3.0) (utils/Pausable.sol) pragma solidity ^0.8.20; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { bool private _paused; /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); /** * @dev The operation failed because the contract is paused. */ error EnforcedPause(); /** * @dev The operation failed because the contract is not paused. */ error ExpectedPause(); /** * @dev 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 { if (paused()) { revert EnforcedPause(); } } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { if (!paused()) { revert ExpectedPause(); } } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _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()); } } // File @openzeppelin/contracts/utils/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (utils/ReentrancyGuard.sol) pragma solidity ^0.8.20; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at, * consider using {ReentrancyGuardTransient} instead. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant NOT_ENTERED = 1; uint256 private constant ENTERED = 2; uint256 private _status; /** * @dev Unauthorized reentrant call. */ error ReentrancyGuardReentrantCall(); constructor() { _status = NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be NOT_ENTERED if (_status == ENTERED) { revert ReentrancyGuardReentrantCall(); } // Any calls to nonReentrant after this point will fail _status = ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == ENTERED; } } // File contracts/Staking.sol // Original license: SPDX_License_Identifier: MIT pragma solidity ^0.8.28; /** * @title Cannasapiens NFT Staking Contract with Receipt Tokens * @notice Stake your NFTs and earn $GRIND tokens over 90 days while receiving receipt tokens * @dev This contract issues ERC20 receipt tokens when NFTs are staked. */ contract NFTStaking is ERC20, Ownable, ReentrancyGuard, Pausable { uint256 public constant STAKING_DURATION = 90 days; uint256 public constant DAILY_GRIND_RESERVE = 6666667 * 10**18; uint256 public constant TOTAL_GRIND_ALLOCATED = 600000000 * 10**18; uint256 public constant GRACE_PERIOD = 5 minutes; IERC721 public immutable nftContract; IERC20 public immutable grindToken; uint256 public stakingStartTime; uint256 public stakingEndTime; uint256 public totalStakedNFTs; uint256 public totalUniqueStakers; bool public overrideActive; uint256 public overrideDailyAmount; struct StakeInfo { uint128 stakedCount; uint128 lastClaimDay; uint256 totalRewardsClaimed; uint256[] tokenIds; } struct DayInfo { uint128 totalStakersAtEnd; uint128 totalNFTsAtEnd; uint256 dailyRewardPerNFT; uint256 overrideAmount; bool finalized; bool overrideActiveOnDay; } mapping(address => StakeInfo) public stakers; mapping(uint256 => address) public tokenOwner; mapping(uint256 => bool) public isStaked; mapping(uint256 => DayInfo) public dailyStats; mapping(address => bool) public hasStaked; event NFTsStaked(address indexed staker, uint256[] tokenIds, uint256 timestamp, uint256 receiptTokens); event NFTsUnstaked(address indexed staker, uint256[] tokenIds, uint256 timestamp, uint256 receiptTokensBurned); event RewardsClaimed(address indexed staker, uint256 amount, uint256 claimDay); event StakingStarted(uint256 startTime, uint256 endTime); event EmergencyWithdraw(address indexed staker, uint256[] tokenIds); event OverrideActivated(uint256 dailyAmount); event OverrideDeactivated(); event DailyStatsFinalized(uint256 day, uint256 totalStakers, uint256 totalNFTs, uint256 rewardPerNFT); constructor( address _nftContract, address _grindToken, address _owner, string memory _receiptName, string memory _receiptSymbol ) ERC20(_receiptName, _receiptSymbol) Ownable(_owner) { require(_nftContract != address(0), "Invalid NFT contract address"); require(_grindToken != address(0), "Invalid GRIND token address"); nftContract = IERC721(_nftContract); grindToken = IERC20(_grindToken); } /** * @notice Start the staking program * @dev Can only be called by owner and only once. Uses grace period to handle simultaneous staking */ function startStaking() external onlyOwner { require(stakingStartTime == 0, "Staking already started"); require(grindToken.balanceOf(address(this)) >= TOTAL_GRIND_ALLOCATED, "Insufficient GRIND tokens in contract"); stakingStartTime = block.timestamp + GRACE_PERIOD; stakingEndTime = stakingStartTime + STAKING_DURATION; emit StakingStarted(stakingStartTime, stakingEndTime); } /** * @notice Get current day number since staking started * @return Current day number (0-89) */ function getCurrentDay() public view returns (uint256) { if (stakingStartTime == 0 || block.timestamp < stakingStartTime) { return 0; } uint256 daysPassed = (block.timestamp - stakingStartTime) / 1 days; return daysPassed > 89 ? 89 : daysPassed; } /** * @notice Check if user can claim today * @param staker Address to check * @return Whether user can claim */ function canClaim(address staker) public view returns (bool) { if (stakers[staker].stakedCount == 0) return false; uint256 currentDay = getCurrentDay(); return currentDay > stakers[staker].lastClaimDay; } /** * @notice Stake multiple NFTs and receive receipt tokens * @param tokenIds Array of NFT token IDs to stake */ function stakeNFTs(uint256[] calldata tokenIds) external nonReentrant whenNotPaused { require(stakingStartTime > 0, "Staking not started"); require(block.timestamp < stakingEndTime, "Staking period ended"); require(tokenIds.length > 0, "Must stake at least one NFT"); StakeInfo storage stakerInfo = stakers[msg.sender]; bool isFirstStake = !hasStaked[msg.sender]; for (uint256 i = 0; i < tokenIds.length; i++) { uint256 tokenId = tokenIds[i]; require(!isStaked[tokenId], "NFT already staked"); nftContract.transferFrom(msg.sender, address(this), tokenId); isStaked[tokenId] = true; tokenOwner[tokenId] = msg.sender; stakerInfo.tokenIds.push(tokenId); } uint256 newStakeCount = uint256(stakerInfo.stakedCount) + tokenIds.length; stakerInfo.stakedCount = uint128(newStakeCount); stakerInfo.lastClaimDay = uint128(getCurrentDay()); totalStakedNFTs += tokenIds.length; if (isFirstStake) { hasStaked[msg.sender] = true; totalUniqueStakers++; } uint256 receiptAmount = tokenIds.length * 10**decimals(); _mint(msg.sender, receiptAmount); emit NFTsStaked(msg.sender, tokenIds, block.timestamp, receiptAmount); } /** * @notice Unstake specific NFTs and burn receipt tokens * @param tokenIds Array of NFT token IDs to unstake */ function unstakeNFTs(uint256[] calldata tokenIds) external nonReentrant { require(tokenIds.length > 0, "Must unstake at least one NFT"); StakeInfo storage stakerInfo = stakers[msg.sender]; require(stakerInfo.stakedCount > 0, "No NFTs staked"); // Auto-claim any pending rewards before unstaking if (canClaim(msg.sender)) { _claimRewards(msg.sender); } for (uint256 i = 0; i < tokenIds.length; i++) { uint256 tokenId = tokenIds[i]; require(tokenOwner[tokenId] == msg.sender, "Not owner of staked NFT"); require(isStaked[tokenId], "NFT not staked"); nftContract.transferFrom(address(this), msg.sender, tokenId); isStaked[tokenId] = false; tokenOwner[tokenId] = address(0); _removeTokenFromStaker(msg.sender, tokenId); } uint256 newStakeCount = uint256(stakerInfo.stakedCount) - tokenIds.length; stakerInfo.stakedCount = uint128(newStakeCount); totalStakedNFTs -= tokenIds.length; uint256 burnAmount = tokenIds.length * 10**decimals(); _burn(msg.sender, burnAmount); emit NFTsUnstaked(msg.sender, tokenIds, block.timestamp, burnAmount); } /** * @notice Claim daily rewards (once per 24 hours) */ function claimRewards() external nonReentrant { require(stakers[msg.sender].stakedCount > 0, "No NFTs staked"); require(canClaim(msg.sender), "Cannot claim yet - wait 24h since last claim"); _claimRewards(msg.sender); } /** * @notice Get today's claimable amount per NFT * @return Amount of GRIND tokens per NFT for today */ function getTodayClaimAmount() public view returns (uint256) { if (stakingStartTime == 0 || block.timestamp < stakingStartTime) { return 0; } uint256 currentDay = getCurrentDay(); if (currentDay >= 90) { return 0; } if (overrideActive) { if (totalStakedNFTs == 0) return 0; return overrideDailyAmount / totalStakedNFTs; } if (totalStakedNFTs == 0) return 0; return DAILY_GRIND_RESERVE / totalStakedNFTs; } /** * @notice Calculate how much a specific staker can claim (accumulated rewards for all missed days) * @param staker Address of the staker * @return Claimable amount for the staker */ function calculateClaimableRewards(address staker) public view returns (uint256) { StakeInfo storage stakerInfo = stakers[staker]; if (stakerInfo.stakedCount == 0 || !canClaim(staker)) { return 0; } uint256 currentDay = getCurrentDay(); uint256 lastClaim = uint256(stakerInfo.lastClaimDay); if (currentDay >= 90) { currentDay = 89; } uint256 totalReward = 0; uint256 nftCount = uint256(stakerInfo.stakedCount); // Loop through each day since last claim and sum rewards using historical rates for (uint256 day = lastClaim + 1; day <= currentDay; day++) { uint256 rewardPerNFT = _getHistoricalDailyRate(day); totalReward += rewardPerNFT * nftCount; } return totalReward; } /** * @notice Get staker information * @param staker Address of the staker * @return tokenIds Array of staked token IDs * @return stakedCount Number of staked NFTs * @return lastClaimDay Last reward claim day * @return totalRewardsClaimed Total rewards claimed so far * @return claimableRewards Current claimable rewards */ function getStakerInfo(address staker) external view returns ( uint256[] memory tokenIds, uint256 stakedCount, uint256 lastClaimDay, uint256 totalRewardsClaimed, uint256 claimableRewards ) { StakeInfo storage stakerInfo = stakers[staker]; return ( stakerInfo.tokenIds, uint256(stakerInfo.stakedCount), uint256(stakerInfo.lastClaimDay), stakerInfo.totalRewardsClaimed, calculateClaimableRewards(staker) ); } /** * @notice Internal function to claim rewards * @param staker Address of the staker */ function _claimRewards(address staker) internal { uint256 currentDay = getCurrentDay(); // Finalize previous day's stats before claiming _finalizeUnsnapshotedDays(currentDay); uint256 claimableRewards = calculateClaimableRewards(staker); if (claimableRewards > 0) { StakeInfo storage stakerInfo = stakers[staker]; stakerInfo.lastClaimDay = uint128(currentDay); stakerInfo.totalRewardsClaimed += claimableRewards; require(grindToken.transfer(staker, claimableRewards), "Transfer failed"); emit RewardsClaimed(staker, claimableRewards, currentDay); } } /** * @notice Activate override mode for custom daily amounts */ function activateOverrideClaim() external onlyOwner { overrideActive = true; emit OverrideActivated(overrideDailyAmount); } /** * @notice Deactivate override mode */ function deactivateOverrideClaim() external onlyOwner { overrideActive = false; emit OverrideDeactivated(); } /** * @notice Set custom daily amount for override mode * @param amount Daily GRIND amount to distribute */ function setOverrideClaim(uint256 amount) external onlyOwner { overrideDailyAmount = amount; if (overrideActive) { emit OverrideActivated(amount); } } /** * @notice Get the historical daily rate for a specific day * @param day Day number (0-89) * @return Reward per NFT for that day */ function _getHistoricalDailyRate(uint256 day) internal view returns (uint256) { DayInfo storage dayInfo = dailyStats[day]; // If day is finalized, use stored rate if (dayInfo.finalized) { return dayInfo.dailyRewardPerNFT; } // If not finalized and it's a past day, calculate retroactively // This shouldn't normally happen if we snapshot correctly if (dayInfo.totalNFTsAtEnd > 0) { if (dayInfo.overrideActiveOnDay) { return dayInfo.overrideAmount / uint256(dayInfo.totalNFTsAtEnd); } return DAILY_GRIND_RESERVE / uint256(dayInfo.totalNFTsAtEnd); } // Fallback: use current values (only for current/future days) return getTodayClaimAmount(); } /** * @notice Finalize stats for all days between last finalized and target day * @param targetDay Day to finalize up to (exclusive) */ function _finalizeUnsnapshotedDays(uint256 targetDay) internal { if (targetDay == 0) return; // Find the first unfinalized day and finalize all days before targetDay for (uint256 day = 0; day < targetDay && day < 90; day++) { DayInfo storage dayInfo = dailyStats[day]; if (!dayInfo.finalized) { _finalizeDayStats(day); } } } /** * @notice Finalize statistics for a specific day * @param day Day number to finalize */ function _finalizeDayStats(uint256 day) internal { require(day < 90, "Invalid day"); DayInfo storage dayInfo = dailyStats[day]; if (dayInfo.finalized) { return; // Already finalized } // Snapshot current state dayInfo.totalStakersAtEnd = uint128(totalUniqueStakers); dayInfo.totalNFTsAtEnd = uint128(totalStakedNFTs); dayInfo.overrideActiveOnDay = overrideActive; dayInfo.overrideAmount = overrideDailyAmount; // Calculate and store the per-NFT rate for this day if (totalStakedNFTs > 0) { if (overrideActive) { dayInfo.dailyRewardPerNFT = overrideDailyAmount / totalStakedNFTs; } else { dayInfo.dailyRewardPerNFT = DAILY_GRIND_RESERVE / totalStakedNFTs; } } else { dayInfo.dailyRewardPerNFT = 0; } dayInfo.finalized = true; emit DailyStatsFinalized(day, totalUniqueStakers, totalStakedNFTs, dayInfo.dailyRewardPerNFT); } /** * @notice Manually finalize a day's statistics (owner only, for emergency/maintenance) * @param day Day number to finalize */ function finalizeDayStats(uint256 day) external onlyOwner { _finalizeDayStats(day); } /** * @notice Remove a token from staker's array (optimized for gas) * @param staker Address of the staker * @param tokenId Token ID to remove */ function _removeTokenFromStaker(address staker, uint256 tokenId) internal { StakeInfo storage stakerInfo = stakers[staker]; uint256[] storage tokenIds = stakerInfo.tokenIds; uint256 length = tokenIds.length; for (uint256 i = 0; i < length; i++) { if (tokenIds[i] == tokenId) { if (i != length - 1) { tokenIds[i] = tokenIds[length - 1]; } tokenIds.pop(); break; } } } /** * @notice Emergency unstake all NFTs for a user (only owner) - optimized for large amounts * @dev Auto-claims any pending rewards before unstaking to prevent loss of funds * @param staker Address of the staker */ function emergencyUnstake(address staker) external onlyOwner { StakeInfo storage stakerInfo = stakers[staker]; require(stakerInfo.stakedCount > 0, "No NFTs to unstake"); // Auto-claim any pending rewards before emergency unstaking if (canClaim(staker)) { _claimRewards(staker); } uint256[] memory tokenIds = stakerInfo.tokenIds; uint256 stakedCount = uint256(stakerInfo.stakedCount); uint256 receiptBalance = balanceOf(staker); if (receiptBalance > 0) { _burn(staker, receiptBalance); } uint256 batchSize = 50; uint256 processed = 0; for (uint256 i = 0; i < tokenIds.length && processed < batchSize; i++) { uint256 tokenId = tokenIds[i]; if (isStaked[tokenId] && tokenOwner[tokenId] == staker) { nftContract.transferFrom(address(this), staker, tokenId); isStaked[tokenId] = false; tokenOwner[tokenId] = address(0); processed++; } } totalStakedNFTs -= stakedCount; delete stakers[staker]; emit EmergencyWithdraw(staker, tokenIds); } /** * @notice Emergency unstake multiple users (batch operation for large scale) * @param stakerAddresses Array of staker addresses */ function emergencyUnstakeBatch(address[] calldata stakerAddresses) external onlyOwner { for (uint256 i = 0; i < stakerAddresses.length; i++) { if (this.balanceOf(stakerAddresses[i]) > 0) { this.emergencyUnstake(stakerAddresses[i]); } } } /** * @notice Pause staking operations */ function pause() external onlyOwner { _pause(); } /** * @notice Unpause staking operations */ function unpause() external onlyOwner { _unpause(); } /** * @notice Withdraw remaining GRIND tokens after staking ends * @param amount Amount to withdraw */ function withdrawGrindTokens(uint256 amount) external onlyOwner { require(block.timestamp > stakingEndTime, "Staking period not ended"); require(grindToken.transfer(owner(), amount), "Transfer failed"); } /** * @notice Check if staking is active */ function isStakingActive() external view returns (bool) { return stakingStartTime > 0 && block.timestamp >= stakingStartTime && block.timestamp < stakingEndTime; } /** * @notice Get remaining staking time */ function getRemainingTime() external view returns (uint256) { if (stakingStartTime == 0 || block.timestamp >= stakingEndTime) { return 0; } return stakingEndTime - block.timestamp; } /** * @notice Get contract statistics * @return _totalStakedNFTs Total NFTs currently staked * @return _totalUniqueStakers Total unique users who have staked * @return _currentDay Current day of staking period (0-89) * @return _overrideActive Whether override mode is active * @return _totalSupply Total receipt tokens in circulation */ function getContractStats() external view returns ( uint256 _totalStakedNFTs, uint256 _totalUniqueStakers, uint256 _currentDay, bool _overrideActive, uint256 _totalSupply ) { return ( totalStakedNFTs, totalUniqueStakers, getCurrentDay(), overrideActive, totalSupply() ); } /** * @notice Get daily statistics for a specific day * @param day Day number to query (0-89) * @return totalStakersAtEnd Total stakers at end of day * @return totalNFTsAtEnd Total NFTs staked at end of day * @return dailyRewardPerNFT Reward per NFT for that day * @return finalized Whether day stats are finalized */ function getDayStats(uint256 day) external view returns ( uint256 totalStakersAtEnd, uint256 totalNFTsAtEnd, uint256 dailyRewardPerNFT, bool finalized ) { DayInfo storage dayInfo = dailyStats[day]; return ( uint256(dayInfo.totalStakersAtEnd), uint256(dayInfo.totalNFTsAtEnd), dayInfo.dailyRewardPerNFT, dayInfo.finalized ); } /** * @notice Override transfer to prevent receipt token trading (soulbound-like behavior) * @dev Can be customized if you want to allow transfers */ function _update( address from, address to, uint256 value ) internal override { if (from != address(0) && to != address(0)) { revert("Receipt tokens are non-transferable"); } super._update(from, to, value); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_nftContract","type":"address"},{"internalType":"address","name":"_grindToken","type":"address"},{"internalType":"address","name":"_owner","type":"address"},{"internalType":"string","name":"_receiptName","type":"string"},{"internalType":"string","name":"_receiptSymbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[],"name":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExpectedPause","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"day","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalStakers","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalNFTs","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardPerNFT","type":"uint256"}],"name":"DailyStatsFinalized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"receiptTokens","type":"uint256"}],"name":"NFTsStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"receiptTokensBurned","type":"uint256"}],"name":"NFTsUnstaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"dailyAmount","type":"uint256"}],"name":"OverrideActivated","type":"event"},{"anonymous":false,"inputs":[],"name":"OverrideDeactivated","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":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claimDay","type":"uint256"}],"name":"RewardsClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"startTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"StakingStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"DAILY_GRIND_RESERVE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GRACE_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOTAL_GRIND_ALLOCATED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activateOverrideClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"calculateClaimableRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"canClaim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"dailyStats","outputs":[{"internalType":"uint128","name":"totalStakersAtEnd","type":"uint128"},{"internalType":"uint128","name":"totalNFTsAtEnd","type":"uint128"},{"internalType":"uint256","name":"dailyRewardPerNFT","type":"uint256"},{"internalType":"uint256","name":"overrideAmount","type":"uint256"},{"internalType":"bool","name":"finalized","type":"bool"},{"internalType":"bool","name":"overrideActiveOnDay","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deactivateOverrideClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"emergencyUnstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"stakerAddresses","type":"address[]"}],"name":"emergencyUnstakeBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"day","type":"uint256"}],"name":"finalizeDayStats","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getContractStats","outputs":[{"internalType":"uint256","name":"_totalStakedNFTs","type":"uint256"},{"internalType":"uint256","name":"_totalUniqueStakers","type":"uint256"},{"internalType":"uint256","name":"_currentDay","type":"uint256"},{"internalType":"bool","name":"_overrideActive","type":"bool"},{"internalType":"uint256","name":"_totalSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentDay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"day","type":"uint256"}],"name":"getDayStats","outputs":[{"internalType":"uint256","name":"totalStakersAtEnd","type":"uint256"},{"internalType":"uint256","name":"totalNFTsAtEnd","type":"uint256"},{"internalType":"uint256","name":"dailyRewardPerNFT","type":"uint256"},{"internalType":"bool","name":"finalized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRemainingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getStakerInfo","outputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256","name":"stakedCount","type":"uint256"},{"internalType":"uint256","name":"lastClaimDay","type":"uint256"},{"internalType":"uint256","name":"totalRewardsClaimed","type":"uint256"},{"internalType":"uint256","name":"claimableRewards","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTodayClaimAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"grindToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"hasStaked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"isStaked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isStakingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftContract","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"overrideActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"overrideDailyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setOverrideClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"stakeNFTs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakers","outputs":[{"internalType":"uint128","name":"stakedCount","type":"uint128"},{"internalType":"uint128","name":"lastClaimDay","type":"uint128"},{"internalType":"uint256","name":"totalRewardsClaimed","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingEndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStakedNFTs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalUniqueStakers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"unstakeNFTs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawGrindTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
9c4d535b0000000000000000000000000000000000000000000000000000000000000000010005a18b82c41f249f745db5f6de113ef040e686f40b568cfc37832258073b000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001200000000000000000000000008d1efb8ab4f74607fb9df73c065df627fe0f3b6d0000000000000000000000001c26da604221466976beeb509698152ba8a3a13f000000000000000000000000c6de70568f48794f317459e89733bb0436de081700000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000137374616b65642043616e6e6153617069656e730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035343530000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x0001000000000002001200000000000200000000000103550000006003100270000004e8033001970000000100200190000000220000c13d0000008002000039000000400020043f000000040030008c0000004e0000413d000000000201043b000000e002200270000004ff0020009c000000500000213d000005230020009c000000610000213d000005350020009c000000a50000a13d000005360020009c000001a20000a13d000005370020009c0000026e0000213d0000053a0020009c000003100000613d0000053b0020009c0000004e0000c13d0000000001000416000000000001004b0000004e0000c13d0000055501000041000000800010043f0000054d010000410000139b0001042e000000c004000039000000400040043f0000000002000416000000000002004b0000004e0000c13d0000001f02300039000004e902200197000000c002200039000000400020043f0000001f0530018f000004ea06300198000000c002600039000000340000613d000000000701034f000000007807043c0000000004840436000000000024004b000000300000c13d000000000005004b000000410000613d000000000161034f0000000304500210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000a00030008c0000004e0000413d000000c00900043d000004eb0090009c0000004e0000213d000000e00100043d000e00000001001d000004eb0010009c0000004e0000213d000001000100043d000d00000001001d000004eb0010009c000001480000a13d00000000010000190000139c00010430000005000020009c000000790000213d000005120020009c000000df0000a13d000005130020009c000001cc0000a13d000005140020009c0000027d0000213d000005170020009c000003150000613d000005180020009c0000004e0000c13d0000000001000416000000000001004b0000004e0000c13d0000000c010000390000028e0000013d000005240020009c000001040000a13d000005250020009c000001d70000a13d000005260020009c000002950000213d000005290020009c000003230000613d0000052a0020009c0000004e0000c13d0000000002000416000000000002004b0000004e0000c13d000000240030008c0000004e0000413d0000000401100370000000000101043b000004eb0010009c0000004e0000213d000000000010043f000000200000043f00000040020000390000000001000019000003410000013d000005010020009c000001340000a13d000005020020009c000002550000a13d000005030020009c000002f90000213d000005060020009c000003280000613d000005070020009c0000004e0000c13d0000000001000416000000000001004b0000004e0000c13d0000000a01000039000000000101041a000e00000001001d0000000b01000039000000000101041a000d00000001001d139a0ee20000040f0000000c02000039000000000202041a0000000203000039000000000303041a000000400400043d00000020054000390000000d0600002900000000006504350000004005400039000000000015043500000080014000390000000000310435000000ff002001900000000001000039000000010100c039000000600240003900000000001204350000000e010000290000000000140435000004e80040009c000004e80400804100000040014002100000054c011001c70000139b0001042e0000053f0020009c000001590000213d000005430020009c000003a10000613d000005440020009c000003b90000613d000005450020009c0000004e0000c13d0000000002000416000000000002004b0000004e0000c13d000000240030008c0000004e0000413d0000000402100370000000000202043b000004ec0020009c0000004e0000213d0000002304200039000000000034004b0000004e0000813d000500040020003d0000000501100360000000000101043b000900000001001d000004ec0010009c0000004e0000213d000000240220003900000009010000290000000501100210000400000001001d000800000002001d0000000001210019000000000031004b0000004e0000213d0000000601000039000000000201041a000000020020008c000002790000613d0000000202000039000000000021041b0000000701000039000000000101041a000000ff00100190000006c00000c13d0000000801000039000000000101041a000000000001004b000009e50000c13d000004fc01000041000000800010043f0000002001000039000000840010043f0000001301000039000000a40010043f0000058d01000041000000c40010043f00000565010000410000139c000104300000051c0020009c000001660000213d000005200020009c000003ca0000613d000005210020009c000004050000613d000005220020009c0000004e0000c13d0000000002000416000000000002004b0000004e0000c13d000000240030008c0000004e0000413d0000000401100370000000000101043b000000000010043f0000001101000039000000200010043f00000040020000390000000001000019139a135d0000040f0000000302100039000000000202041a0000000103100039000000000303041a000000000101041a0000055304100197000000800040043f0000008001100270000000a00010043f000000c00030043f000000ff002001900000000001000039000000010100c039000000e00010043f0000056a010000410000139b0001042e0000052e0020009c000001850000213d000005320020009c0000041e0000613d000005330020009c000004230000613d000005340020009c0000004e0000c13d0000000002000416000000000002004b0000004e0000c13d000000240030008c0000004e0000413d0000000401100370000000000101043b000900000001001d000004eb0010009c0000004e0000213d0000000501000039000000000101041a000004eb021001970000000001000411000000000012004b000005ee0000c13d0000000901000029000000000010043f0000000e01000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f00000001002001900000004e0000613d000000000201043b000000000102041a0000055300100198000007b50000c13d000000400100043d00000044021000390000057a03000041000000000032043500000024021000390000001203000039000006ac0000013d0000050b0020009c000001900000213d0000050f0020009c000004340000613d000005100020009c0000043f0000613d000005110020009c0000004e0000c13d0000000002000416000000000002004b0000004e0000c13d000000240030008c0000004e0000413d0000000401100370000000000101043b000004eb0010009c0000004e0000213d000000000010043f00000012010000390000028a0000013d000001200500043d000004ec0050009c0000004e0000213d000000c002300039000000df01500039000000000021004b0000004e0000813d000000c0015000390000000004010433000004ed0040009c000005f30000413d0000055b01000041000000000010043f0000004101000039000000040010043f00000547010000410000139c00010430000005400020009c000004460000613d000005410020009c0000044b0000613d000005420020009c0000004e0000c13d0000000001000416000000000001004b0000004e0000c13d0000058401000041000000800010043f0000054d010000410000139b0001042e0000051d0020009c000004eb0000613d0000051e0020009c000004f00000613d0000051f0020009c0000004e0000c13d0000000002000416000000000002004b0000004e0000c13d000000240030008c0000004e0000413d0000000401100370000000000101043b000004eb0010009c0000004e0000213d000000000010043f0000000e01000039000000200010043f00000040020000390000000001000019139a135d0000040f0000000102100039000000000202041a000000000101041a0000055303100197000000800030043f0000008001100270000000a00010043f000000c00020043f00000569010000410000139b0001042e0000052f0020009c000004f50000613d000005300020009c000004fc0000613d000005310020009c0000004e0000c13d0000000001000416000000000001004b0000004e0000c13d00000007010000390000028e0000013d0000050c0020009c000005010000613d0000050d0020009c0000050c0000613d0000050e0020009c0000004e0000c13d0000000001000416000000000001004b0000004e0000c13d000000240030008c0000004e0000413d139a10a60000040f00000004010000390000000001100367000000000101043b139a12f30000040f00000000010000190000139b0001042e0000053c0020009c000005380000613d0000053d0020009c000005470000613d0000053e0020009c0000004e0000c13d0000000002000416000000000002004b0000004e0000c13d000000240030008c0000004e0000413d0000000401100370000000000101043b000000000010043f0000001101000039000000200010043f00000040020000390000000001000019139a135d0000040f0000000302100039000000000202041a0000000203100039000000000303041a0000000104100039000000000404041a000000000101041a0000055305100197000000800050043f0000008001100270000000a00010043f000000c00040043f000000e00030043f000000ff002001900000000001000039000000010100c039000001000010043f0000ff00002001900000000001000039000000010100c039000001200010043f00000581010000410000139b0001042e000005190020009c000005870000613d0000051a0020009c000005920000613d0000051b0020009c0000004e0000c13d0000000001000416000000000001004b0000004e0000c13d139a0f460000040f0000068c0000013d0000052b0020009c000005a70000613d0000052c0020009c000005bf0000613d0000052d0020009c0000004e0000c13d0000000001000416000000000001004b0000004e0000c13d000000240030008c0000004e0000413d0000000501000039000000000101041a000004eb021001970000000001000411000000000012004b000005ee0000c13d0000000901000039000000000101041a000e00000001001d000005490100004100000000001004430000000001000414000004e80010009c000004e801008041000000c0011002100000054a011001c70000800b02000039139a13950000040f000000010020019000000ead0000613d000000400500043d00000024025000390000000403500039000000000101043b0000000e0010006c000006fd0000a13d0000000501000039000000000101041a0000057604000041000000000045043500000004040000390000000004400367000000000404043b000004eb01100197000000000013043500000000004204350000055101000041000000000010044300000000010004120000000400100443000000200100003900000024001004430000000001000414000004e80010009c000004e801008041000000c00110021000000556011001c70000800502000039000d00000005001d139a13950000040f000000010020019000000ead0000613d000000000201043b0000000d01000029000004e80010009c000004e80100804100000040011002100000000003000414000004e80030009c000004e803008041000000c003300210000000000113019f00000577011001c7000004eb02200197139a13900000040f0000006003100270000004e803300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000d0b00002900000000057b0019000002330000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b0000022f0000c13d000000000006004b000002400000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f000000000065043500000001002001900000086a0000613d0000001f01400039000000600210018f0000000001b20019000000000021004b00000000020000390000000102004039000004ec0010009c000001530000213d0000000100200190000001530000c13d000000400010043f000000200030008c0000004e0000413d00000000010b0433000000010010008c0000004e0000213d139a0f320000040f00000000010000190000139b0001042e000005080020009c000005c70000613d000005090020009c000005d80000613d0000050a0020009c0000004e0000c13d0000000001000416000000000001004b0000004e0000c13d0000000501000039000000000101041a000004eb021001970000000001000411000000000012004b000005ee0000c13d0000000c01000039000000000201041a000005920220019700000001022001bf000000000021041b0000000d01000039000000000101041a000000800010043f00000000010004140000035f0000013d000005380020009c000003430000613d000005390020009c0000004e0000c13d0000000001000416000000000001004b0000004e0000c13d0000000602000039000000000102041a000000020010008c000006930000c13d0000058e01000041000000000010043f0000057d010000410000139c00010430000005150020009c0000034a0000613d000005160020009c0000004e0000c13d0000000002000416000000000002004b0000004e0000c13d000000240030008c0000004e0000413d0000000401100370000000000101043b000000000010043f0000001001000039000000200010043f00000040020000390000000001000019139a135d0000040f000000000101041a000000ff001001900000000001000039000000010100c039000000800010043f0000054d010000410000139b0001042e000005270020009c000003670000613d000005280020009c0000004e0000c13d0000000001000416000000000001004b0000004e0000c13d0000000501000039000000000101041a000004eb021001970000000001000411000000000012004b000005ee0000c13d0000000801000039000000000101041a000000000001004b000006c40000c13d0000056d01000041000000800010043f0000000001000410000000840010043f0000055101000041000000000010044300000000010004120000000400100443000000200100003900000024001004430000000001000414000004e80010009c000004e801008041000000c00110021000000556011001c70000800502000039139a13950000040f000000010020019000000ead0000613d000000000101043b0000000003000414000004eb02100197000004e80030009c000004e803008041000000c0013002100000056e011001c7139a13950000040f0000006003100270000004e803300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf000000800a000039000002d00000613d000000000801034f000000008908043c000000000a9a043600000000005a004b000002cc0000c13d000000000006004b000002dd0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f000000000065043500000001002001900000085e0000613d0000001f01400039000000600210018f00000080012001bf000000400010043f000000200030008c0000004e0000413d000000800300043d0000056f0030009c00000a000000213d000004fc03000041000000000031043500000084032001bf00000020040000390000000000430435000000e40320003900000572040000410000000000430435000000c40320003900000573040000410000000000430435000000a40220003900000025030000390000000000320435000000400110021000000574011001c70000139c00010430000005040020009c0000037f0000613d000005050020009c0000004e0000c13d0000000002000416000000000002004b0000004e0000c13d000000240030008c0000004e0000413d0000000401100370000000000601043b000004eb0060009c0000004e0000213d0000000501000039000000000201041a000004eb052001970000000003000411000000000035004b000006860000c13d000000000006004b0000070b0000c13d0000054801000041000006e40000013d0000000001000416000000000001004b0000004e0000c13d0000000a01000039000005c30000013d0000000002000416000000000002004b0000004e0000c13d000000440030008c0000004e0000413d0000000401100370000000000101043b000004eb0010009c0000004e0000213d0000000002000411000004eb00200198000006ce0000c13d0000058301000041000006e40000013d0000000001000416000000000001004b0000004e0000c13d0000000801000039000005c30000013d0000000002000416000000000002004b0000004e0000c13d000000440030008c0000004e0000413d0000000402100370000000000202043b000004eb0020009c0000004e0000213d0000002401100370000000000101043b000e00000001001d000004eb0010009c0000004e0000213d000000000020043f0000000101000039000000200010043f00000040020000390000000001000019139a135d0000040f0000000e02000029000000000020043f000000200010043f00000000010000190000004002000039139a135d0000040f000005c30000013d0000000001000416000000000001004b0000004e0000c13d0000001201000039000000800010043f0000054d010000410000139b0001042e0000000002000416000000000002004b0000004e0000c13d000000240030008c0000004e0000413d0000000401100370000000000101043b0000000502000039000000000202041a000004eb032001970000000002000411000000000023004b000006810000c13d0000000d02000039000000000012041b0000000c02000039000000000202041a000000ff00200190000006f60000613d000000800010043f0000000001000414000004e80010009c000004e801008041000000c0011002100000054e011001c70000800d0200003900000001030000390000054f04000041000006f30000013d0000000001000416000000000001004b0000004e0000c13d0000000501000039000000000201041a000004eb052001970000000003000411000000000035004b000006860000c13d000004f702200197000000000021041b0000000001000414000004e80010009c000004e801008041000000c001100210000004f8011001c70000800d020000390000000303000039000004f9040000410000000006000019139a13900000040f00000001002001900000004e0000613d000006f60000013d0000000001000416000000000001004b0000004e0000c13d0000000801000039000000000101041a000000000001004b0000068b0000613d0000000901000039000000000101041a000e00000001001d000005490100004100000000001004430000000001000414000004e80010009c000004e801008041000000c0011002100000054a011001c70000800b02000039139a13950000040f000000010020019000000ead0000613d000000000101043b0000000e0010006c0000068b0000813d0000000902000039000000000202041a000000000112004b0000068c0000813d0000055b01000041000000000010043f0000001101000039000000040010043f00000547010000410000139c000104300000000001000416000000000001004b0000004e0000c13d0000000303000039000000000203041a000000010520019000000001012002700000007f0410018f00000000010460190000001f0010008c00000000060000390000000106002039000000000626013f0000000100600190000005a10000c13d000000800010043f000000000005004b000006d20000c13d0000059201200197000000a00010043f000000000004004b00000020020000390000000002006039000006df0000013d0000000002000416000000000002004b0000004e0000c13d000000440030008c0000004e0000413d0000000402100370000000000202043b000e00000002001d000004eb0020009c0000004e0000213d0000002401100370000000000301043b0000000002000411000000000002004b000006e10000c13d0000059101000041000006e40000013d0000000002000416000000000002004b0000004e0000c13d000000240030008c0000004e0000413d0000000401100370000000000201043b000004eb0020009c0000004e0000213d000c00000002001d000000000020043f0000000e01000039000000200010043f00000040020000390000000001000019139a135d0000040f0000000002010019000b00000001001d0000000101100039000000000101041a000e00000001001d000000000102041a000d00000001001d0000000c01000029139a0fc10000040f000c00000001001d0000000b010000290000000201100039139a0efd0000040f000000a002000039000000400300043d000a00000003001d0000000002230436000b00000002001d000000a002300039139a0ec30000040f0000000a0500002900000080025000390000000c03000029000000000032043500000060025000390000000e0300002900000000003204350000000d0400002900000080024002700000004003500039000000000023043500000553024001970000000b0300002900000000002304350000000001510049000004e80010009c000004e8010080410000006001100210000004e80050009c000004e8050080410000004002500210000000000121019f0000139b0001042e0000000001000416000000000001004b0000004e0000c13d0000000501000039000000000101041a000004eb011001970000000002000411000000000021004b000006810000c13d0000000702000039000000000302041a000000ff00300190000006c00000c13d00000001033001bf000000000032041b000000800010043f0000000001000414000004e80010009c000004e801008041000000c0011002100000054e011001c70000800d0200003900000001030000390000056b04000041000006f30000013d0000000001000416000000000001004b0000004e0000c13d139a0ee20000040f0000068c0000013d0000000001000416000000000001004b0000004e0000c13d0000000501000039000000000101041a000004eb011001970000000002000411000000000021004b000006810000c13d0000000702000039000000000302041a000000ff00300190000006e80000c13d0000057c01000041000000000010043f0000057d010000410000139c000104300000000002000416000000000002004b0000004e0000c13d000000240030008c0000004e0000413d0000000401100370000000000101043b000004eb0010009c0000004e0000213d139a0f7c0000040f0000068c0000013d0000000001000416000000000001004b0000004e0000c13d0000012c01000039000000800010043f0000054d010000410000139b0001042e0000000001000416000000000001004b0000004e0000c13d0000000201000039000005c30000013d0000000002000416000000000002004b0000004e0000c13d000000240030008c0000004e0000413d0000000402100370000000000202043b000004ec0020009c0000004e0000213d0000002304200039000000000034004b0000004e0000813d0000000404200039000000000141034f000000000101043b000b00000001001d000004ec0010009c0000004e0000213d000a00240020003d0000000b0100002900000005011002100000000a01100029000000000031004b0000004e0000213d0000000501000039000000000101041a000004eb021001970000000001000411000000000012004b000005ee0000c13d0000000b0000006b000006f60000613d0000008003000039000d00000000001d000004740000013d000000400030043f0000000d020000290000000102200039000d00000002001d0000000b0020006c000006f60000813d0000000d0100002900000005011002100000000a01100029000c00000001001d0000000001100367000000000101043b000004eb0010009c0000004e0000213d0000056d02000041000000000023043500000004023000390000000000120435000004e80030009c000004e801000041000000000103401900000040011002100000000002000414000004e80020009c000004e802008041000000c002200210000000000112019f00000547011001c70000000002000410000e00000003001d139a13950000040f0000000e0a0000290000006003100270000004e803300197000000200030008c00000020040000390000000004034019000000200640019000000000056a00190000049c0000613d000000000701034f00000000080a0019000000007907043c0000000008980436000000000058004b000004980000c13d0000001f07400190000004a90000613d000000000661034f0000000307700210000000000805043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f0000000000650435000000010020019000000a810000613d0000001f01400039000000600210018f0000000001a20019000000000021004b00000000020000390000000102004039000004ec0010009c000001530000213d0000000100200190000001530000c13d000000400010043f000000200030008c0000004e0000413d00000000020a0433000000000002004b00000000030100190000046f0000613d0000000c010000290000000001100367000000000101043b000004eb0010009c0000004e0000213d000e00000001001d00000558010000410000000000100443000000000100041000000004001004430000000001000414000004e80010009c000004e801008041000000c00110021000000559011001c70000800202000039139a13950000040f000000010020019000000ead0000613d000000000101043b000000000001004b0000000e020000290000004e0000613d000000400300043d0000058501000041000000000013043500000004013000390000000000210435000004e80030009c000e00000003001d000004e801000041000000000103401900000040011002100000000002000414000004e80020009c000004e802008041000000c002200210000000000112019f00000547011001c70000000002000410139a13900000040f000000010020019000000a990000613d0000000e03000029000004ec0030009c0000046e0000a13d000001530000013d0000000001000416000000000001004b0000004e0000c13d0000000901000039000005c30000013d0000000001000416000000000001004b0000004e0000c13d0000000501000039000005450000013d0000000001000416000000000001004b0000004e0000c13d0000057801000041000000800010043f0000054d010000410000139b0001042e0000000001000416000000000001004b0000004e0000c13d0000000b01000039000005c30000013d0000000002000416000000000002004b0000004e0000c13d000000240030008c0000004e0000413d0000000401100370000000000101043b000004eb0010009c0000004e0000213d139a0fc10000040f0000068c0000013d0000000002000416000000000002004b0000004e0000c13d000000240030008c0000004e0000413d0000000402100370000000000202043b000004ec0020009c0000004e0000213d0000002304200039000000000034004b0000004e0000813d000400040020003d0000000401100360000000000101043b000800000001001d000004ec0010009c0000004e0000213d000000240220003900000008010000290000000501100210000300000001001d000700000002001d0000000001210019000000000031004b0000004e0000213d0000000601000039000000000201041a000000020020008c000002790000613d0000000202000039000000000021041b000000080000006b000008880000c13d000004fc01000041000000800010043f0000002001000039000000840010043f0000001d01000039000000a40010043f0000056401000041000000c40010043f00000565010000410000139c000104300000000002000416000000000002004b0000004e0000c13d000000240030008c0000004e0000413d0000000401100370000000000101043b000000000010043f0000000f01000039000000200010043f00000040020000390000000001000019139a135d0000040f000000000101041a000005d40000013d0000000002000416000000000002004b0000004e0000c13d000000640030008c0000004e0000413d0000000402100370000000000202043b000e00000002001d000004eb0020009c0000004e0000213d0000002402100370000000000202043b000d00000002001d000004eb0020009c0000004e0000213d0000004401100370000000000101043b000c00000001001d0000000e01000029000000000010043f0000000101000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f00000001002001900000004e0000613d000000000101043b0000000002000411000004eb02200197000b00000002001d000000000020043f000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f00000001002001900000004e0000613d000000000101043b000000000101041a000005930010009c000009ad0000c13d0000000e0000006b000003210000613d0000000d0000006b000006d00000613d000000400100043d000000640210003900000567030000410000000000320435000000440210003900000566030000410000000000320435000000240210003900000023030000390000074a0000013d0000000001000416000000000001004b0000004e0000c13d0000000001000412001200000001001d001100200000003d000080050100003900000044030000390000000004000415000000120440008a000005d10000013d0000000001000416000000000001004b0000004e0000c13d0000000403000039000000000203041a000000010520019000000001012002700000007f0410018f00000000010460190000001f0010008c00000000060000390000000106002039000000000626013f0000000100600190000006b70000613d0000055b01000041000000000010043f0000002201000039000000040010043f00000547010000410000139c000104300000000001000416000000000001004b0000004e0000c13d0000000801000039000000000101041a000000000001004b000005bd0000613d000e00000001001d000005490100004100000000001004430000000001000414000004e80010009c000004e801008041000000c0011002100000054a011001c70000800b02000039139a13950000040f000000010020019000000ead0000613d000000000101043b0000000e0010006c0000071a0000813d000000010100018f0000068c0000013d0000000001000416000000000001004b0000004e0000c13d0000000d01000039000000000101041a000000800010043f0000054d010000410000139b0001042e0000000001000416000000000001004b0000004e0000c13d0000000001000412001000000001001d000f00000000003d000080050100003900000044030000390000000004000415000000100440008a00000005044002100000055102000041139a13720000040f000004eb01100197000000800010043f0000054d010000410000139b0001042e0000000001000416000000000001004b0000004e0000c13d0000000501000039000000000101041a000004eb021001970000000001000411000000000012004b000005ee0000c13d0000000c01000039000000000201041a0000059202200197000000000021041b0000000001000414000004e80010009c000004e801008041000000c001100210000004f8011001c70000800d0200003900000001030000390000055004000041000006f30000013d0000054602000041000000000020043f000000040010043f00000547010000410000139c000104300000001f01400039000004ee011001970000003f01100039000004ef01100197000000400700043d0000000001170019000000000071004b00000000060000390000000106004039000004ec0010009c000001530000213d0000000100600190000001530000c13d000000400010043f000c00000007001d0000000001470436000000e0055000390000000006540019000000000026004b0000004e0000213d000000000004004b000006110000613d000000000600001900000000076100190000000008560019000000000808043300000000008704350000002006600039000000000046004b0000060a0000413d0000000c0440002900000020044000390000000000040435000001400400043d000004ec0040009c0000004e0000213d0000001f05400039000000000035004b0000000003000019000004f003008041000004f005500197000000000005004b0000000006000019000004f006004041000004f00050009c000000000603c019000000000006004b0000004e0000c13d000000c0034000390000000003030433000004ec0030009c000001530000213d0000001f05300039000004ee055001970000003f05500039000004ef05500197000000400700043d0000000005570019000000000075004b00000000060000390000000106004039000004ec0050009c000001530000213d0000000100600190000001530000c13d000000400050043f000b00000007001d0000000005370436000a00000005001d000000e0044000390000000005430019000000000025004b0000004e0000213d000800000009001d000000000003004b0000000a07000029000006480000613d000000000200001900000000052700190000000006420019000000000606043300000000006504350000002002200039000000000032004b000006410000413d0000000b02300029000000200220003900000000000204350000000c020000290000000002020433000900000002001d000004ec0020009c000001530000213d0000000302000039000000000202041a000000010320019000000001022002700000007f0220618f0000001f0020008c00000000040000390000000104002039000000000034004b000005a10000c13d000000200020008c0000066d0000413d0000000303000039000000000030043f00000009040000290000001f034000390000000503300270000004f10330009a000000200040008c000004f2030040410000001f022000390000000502200270000004f10220009a000000000023004b0000066d0000813d000000000003041b0000000103300039000000000023004b000006690000413d00000009020000290000001f0020008c00000a8d0000a13d0000000301000039000000000010043f0000000001000414000004e80010009c000004e801008041000000c001100210000004f3011001c70000801002000039139a13950000040f00000001002001900000004e0000613d0000000902000029000004f402200198000000000101043b00000c5d0000c13d000000200300003900000c6a0000013d0000054601000041000000000010043f000000040020043f00000547010000410000139c000104300000054601000041000000000010043f000000040030043f00000547010000410000139c000104300000000001000019000000400200043d0000000000120435000004e80020009c000004e80200804100000040012002100000054b011001c70000139b0001042e0000000201000039000000000012041b0000000001000411000000000010043f0000000e01000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f00000001002001900000004e0000613d000000000101043b000000000101041a00000553001001980000072e0000c13d000000400100043d00000044021000390000058003000041000000000032043500000024021000390000000e030000390000000000320435000004fc020000410000000000210435000000040210003900000020030000390000000000320435000004e80010009c000004e8010080410000004001100210000004fd011001c70000139c00010430000000800010043f000000000005004b000006f80000c13d0000059201200197000000a00010043f000000000004004b000000c001000039000000a001006039000007a40000013d0000058601000041000000000010043f0000057d010000410000139c00010430000004fc01000041000000800010043f0000002001000039000000840010043f0000001701000039000000a40010043f0000056c01000041000000c40010043f00000565010000410000139c00010430000000000001004b000007550000c13d0000058b01000041000006e40000013d000000000030043f000000020020008c0000000002000019000006df0000413d000004f2030000410000000002000019000000000403041a000000a005200039000000000045043500000001033000390000002002200039000000000012004b000006d80000413d0000002002200039000007a50000013d0000000e0000006b000007610000c13d0000059001000041000000000010043f000000040000043f00000547010000410000139c000104300000059203300197000000000032041b000000800010043f0000000001000414000004e80010009c000004e801008041000000c0011002100000054e011001c70000800d0200003900000001030000390000057b04000041139a13900000040f00000001002001900000004e0000613d00000000010000190000139b0001042e000000000030043f000000020020008c000007990000813d000000a001000039000007a40000013d000004fc0100004100000000001504350000002001000039000000000013043500000018010000390000000000120435000000440150003900000575020000410000000000210435000004e80050009c000004e8050080410000004001500210000004fd011001c70000139c00010430000004f702200197000000000262019f000000000021041b0000000001000414000004e80010009c000004e801008041000000c001100210000004f8011001c70000800d020000390000000303000039000004f904000041139a13900000040f00000001002001900000004e0000613d000006f60000013d0000000901000039000000000101041a000e00000001001d000005490100004100000000001004430000000001000414000004e80010009c000004e801008041000000c0011002100000054a011001c70000800b02000039139a13950000040f000000010020019000000ead0000613d000000000101043b0000000e0010006c00000000010000390000000101004039000000010110018f0000068c0000013d0000000001000411000004eb01100197000e00000001001d000000000010043f0000000e01000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f00000001002001900000004e0000613d000000000101043b000000000101041a0000055300100198000009b80000c13d000000400100043d00000064021000390000057e03000041000000000032043500000044021000390000057f03000041000000000032043500000024021000390000002c030000390000000000320435000004fc020000410000000000210435000000040210003900000020030000390000000000320435000004e80010009c000004e801008041000000400110021000000574011001c70000139c00010430000004fc01000041000000800010043f0000002001000039000000840010043f0000002301000039000000a40010043f0000056601000041000000c40010043f0000056701000041000000e40010043f00000568010000410000139c00010430000d00000003001d000000000020043f0000000101000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f00000001002001900000004e0000613d000000000101043b0000000e02000029000000000020043f000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f00000001002001900000004e0000613d000000000101043b0000000d02000029000000000021041b000000400100043d0000000000210435000004e80010009c000004e80100804100000040011002100000000002000414000004e80020009c000004e802008041000000c002200210000000000112019f000004f3011001c70000800d0200003900000003030000390000058f0400004100000000050004110000000e06000029139a13900000040f00000001002001900000004e0000613d000000400100043d00000001020000390000000000210435000004e80010009c000004e80100804100000040011002100000054b011001c70000139b0001042e000004f60200004100000000040000190000000003040019000000000402041a000000a005300039000000000045043500000001022000390000002004300039000000000014004b0000079b0000413d000000c001300039000000800210008a0000008001000039139a0ed00000040f000000400100043d000e00000001001d0000008002000039139a0eae0000040f0000000e020000290000000001210049000004e80010009c000004e8010080410000006001100210000004e80020009c000004e8020080410000004002200210000000000121019f0000139b0001042e000e00000002001d0000000901000029000000000010043f0000000e01000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f00000001002001900000004e0000613d000000000101043b000000000101041a000005530010019800000a270000c13d0000000e010000290000000201100039000000000301041a000000400200043d000a00000002001d000d00000003001d0000000002320436000b00000002001d000000000010043f0000000001000414000004e80010009c000004e801008041000000c001100210000004f3011001c70000801002000039139a13950000040f00000001002001900000004e0000613d0000000d05000029000000000005004b0000000b02000029000007e60000613d000000000101043b0000000b020000290000000003000019000000000401041a000000000242043600000001011000390000000103300039000000000053004b000007e00000413d0000000a0120006a0000001f0110003900000594021001970000000a01200029000000000021004b00000000020000390000000102004039000004ec0010009c000001530000213d0000000100200190000001530000c13d000000400010043f0000000e01000029000000000101041a000500000001001d0000000901000029000000000010043f000000200000043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f00000001002001900000004e0000613d000000000101043b000000000101041a000e00000001001d000000000001004b00000c2f0000c13d0000000a010000290000000001010433000000000001004b00000cb10000c13d000000050100002900000553021001970000000a01000039000000000301041a000000000223004b0000039b0000413d000000000021041b0000000901000029000000000010043f0000000e01000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f00000001002001900000004e0000613d000000000101043b000000000001041b0000000102100039000000000002041b0000000201100039000000000201041a000000000001041b000e00000002001d000000000002004b0000083a0000613d000000000010043f0000000001000414000004e80010009c000004e801008041000000c001100210000004f3011001c70000801002000039139a13950000040f00000001002001900000004e0000613d000000000101043b0000000e02100029000000000021004b0000083a0000813d000000000001041b0000000101100039000000000021004b000008360000413d000000400100043d000000200200003900000000022104360000000a03000029000000000303043300000000003204350000004002100039000000000003004b0000084b0000613d00000000040000190000000a060000290000002006600039000000000506043300000000025204360000000104400039000000000034004b000008450000413d0000000002120049000004e80020009c000004e8020080410000006002200210000004e80010009c000004e8010080410000004001100210000000000112019f0000000002000414000004e80020009c000004e802008041000000c002200210000000000121019f000004f8011001c70000800d02000039000000020300003900000579040000410000000905000029000006f30000013d0000001f0530018f000004ea06300198000000400200043d0000000004620019000008750000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000008650000c13d000008750000013d0000001f0530018f000004ea06300198000000400200043d0000000004620019000008750000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000008710000c13d000000000005004b000008820000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000004e80020009c000004e8020080410000004002200210000000000112019f0000139c000104300000000001000411000000000010043f0000000e01000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f00000001002001900000004e0000613d000000000101043b000200000001001d000000000101041a0000055300100198000006a60000613d0000000001000411000004eb01100197000600000001001d000000000010043f0000000e01000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f00000001002001900000004e0000613d000000000101043b000000000101041a000005530010019800000ab50000c13d000005510100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000004e80010009c000004e801008041000000c00110021000000556011001c70000800502000039139a13950000040f000000010020019000000ead0000613d000000000101043b000a04eb0010019b0000000001000410000504eb0010019b0000000002000019000008c50000013d00000009020000290000000102200039000000080020006c00000e070000813d000900000002001d000000050120021000000007011000290000000001100367000000000101043b000d00000001001d000000000010043f0000000f01000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f00000001002001900000004e0000613d000000000101043b000000000101041a000004eb011001970000000002000411000000000021004b00000def0000c13d0000000d01000029000000000010043f0000001001000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f00000001002001900000004e0000613d000000000101043b000000000101041a000000ff0010019000000df60000613d000005580100004100000000001004430000000a0100002900000004001004430000000001000414000004e80010009c000004e801008041000000c00110021000000559011001c70000800202000039139a13950000040f000000010020019000000ead0000613d000000000101043b000000000001004b0000004e0000613d000000400300043d00000044013000390000000d0200002900000000002104350000002401300039000000060200002900000000002104350000055a010000410000000000130435000000040130003900000005020000290000000000210435000004e80030009c000e00000003001d000004e801000041000000000103401900000040011002100000000002000414000004e80020009c000004e802008041000000c002200210000000000112019f000004fd011001c70000000a02000029139a13900000040f000000010020019000000dfa0000613d0000000e01000029000004ec0010009c000001530000213d000000400010043f0000000d01000029000000000010043f0000001001000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f00000001002001900000004e0000613d000000000101043b000000000201041a0000059202200197000000000021041b0000000d01000029000000000010043f0000000f01000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f00000001002001900000004e0000613d000000000101043b000000000201041a000004f702200197000000000021041b0000000001000411000000000010043f0000000e01000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f00000001002001900000004e0000613d000000000101043b0000000202100039000000000102041a000b00000001001d000000000001004b000008c10000613d0000000003000019000c00000002001d000000000102041a000e00000003001d000000000031004b00000d560000a13d000000000020043f0000000001000414000004e80010009c000004e801008041000000c001100210000004f3011001c70000801002000039139a13950000040f00000001002001900000004e0000613d000000000101043b0000000e030000290000000001310019000000000101041a0000000d0010006c0000096d0000613d00000001033000390000000b0030006c0000000c02000029000009540000413d000008c10000013d0000000b01000029000000010410008a000000000043004b0000000c02000029000009970000613d000000000102041a000d00000004001d000000000041004b00000d560000a13d000000000020043f0000000001000414000004e80010009c000004e801008041000000c001100210000004f3011001c70000801002000039139a13950000040f00000001002001900000004e0000613d000000000101043b0000000c03000029000000000203041a0000000e0020006c00000d560000a13d0000000d01100029000000000101041a000d00000001001d000000000030043f0000000001000414000004e80010009c000004e801008041000000c001100210000004f3011001c70000801002000039139a13950000040f00000001002001900000004e0000613d000000000101043b0000000e011000290000000d02000029000000000021041b0000000c02000029000000000102041a000e00000001001d000000000001004b00000e410000613d000000000020043f0000000001000414000004e80010009c000004e801008041000000c001100210000004f3011001c70000801002000039139a13950000040f00000001002001900000004e0000613d0000000e02000029000000010220008a000000000101043b0000000001210019000000000001041b0000000c01000029000000000021041b000008c10000013d000a000c0010007400000a500000813d0000058202000041000000000020043f0000000002000411000000040020043f000000240010043f0000000c01000029000000440010043f000004fd010000410000139c000104300000000801000039000000000101041a000d00000001001d000000000001004b000009cb0000613d000005490100004100000000001004430000000001000414000004e80010009c000004e801008041000000c0011002100000054a011001c70000800b02000039139a13950000040f000000010020019000000ead0000613d000000000101043b0000000d0110006c00000a750000813d000d00000000001d0000000e01000029000000000010043f0000000e01000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f00000001002001900000004e0000613d000000000101043b000000000101041a00000080011002700000000d0010006b000007410000a13d0000000001000411139a10b20000040f00000001010000390000000602000039000000000012041b00000000010000190000139b0001042e0000000901000039000000000101041a000e00000001001d000005490100004100000000001004430000000001000414000004e80010009c000004e801008041000000c0011002100000054a011001c70000800b02000039139a13950000040f000000010020019000000ead0000613d000000000101043b000300000001001d0000000e0010006c00000a7a0000813d000000090000006b00000ad00000c13d000000400100043d00000044021000390000058c03000041000000000032043500000024021000390000001b03000039000006ac0000013d000005490100004100000000001004430000000001000414000004e80010009c000004e801008041000000c0011002100000054a011001c70000800b02000039139a13950000040f000000010020019000000ead0000613d000000000201043b000005950020009c0000039b0000213d0000012c012000390000000803000039000000000013041b000005700220009a000000000021004b0000039b0000213d0000000903000039000000000023041b000000400300043d000000200430003900000000002404350000000000130435000004e80030009c000004e80300804100000040013002100000000002000414000004e80020009c000004e802008041000000c002200210000000000112019f00000552011001c70000800d0200003900000001030000390000057104000041000006f30000013d0000000801000039000000000101041a000d00000001001d000000000001004b00000a3a0000613d000005490100004100000000001004430000000001000414000004e80010009c000004e801008041000000c0011002100000054a011001c70000800b02000039139a13950000040f000000010020019000000ead0000613d000000000101043b0000000d0110006c00000c2a0000813d000d00000000001d0000000901000029000000000010043f0000000e01000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f00000001002001900000004e0000613d000000000101043b000000000101041a00000080011002700000000d0010006b000007c70000a13d0000000901000029139a10b20000040f000007c70000013d0000000e0000006b000003c80000613d0000000001000411000000000001004b000006e30000613d0000000e01000029000000000010043f0000000101000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f00000001002001900000004e0000613d000000000101043b0000000b02000029000000000020043f000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f00000001002001900000004e0000613d000000000101043b0000000a02000029000000000021041b0000000d0000006b0000057d0000c13d000006d00000013d000005540210012a000005550010009c0000005902008039000d00000002001d000009cc0000013d000000400100043d00000044021000390000058703000041000000000032043500000024021000390000001403000039000006ac0000013d0000001f0530018f000004ea06300198000000400200043d0000000004620019000008750000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000a880000c13d000008750000013d000000090000006b000000000200001900000a910000613d000000000201043300000009040000290000000301400210000005930110027f0000059301100167000000000112016f0000000102400210000000000121019f00000c780000013d00000060061002700000001f0460018f000004ea05600198000000400200043d000000000352001900000aa50000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b00000aa10000c13d000004e806600197000000000004004b00000ab30000613d000000000151034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000006001600210000008830000013d0000000801000039000000000101041a000e00000001001d000000000001004b00000c4a0000c13d000e00000000001d0000000601000029000000000010043f0000000e01000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f00000001002001900000004e0000613d000000000101043b000000000101041a00000080011002700000000e0010006b000008ad0000a13d0000000001000411139a10b20000040f000008ad0000013d0000000001000411000000000010043f0000000e01000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f00000001002001900000004e0000613d000000000101043b000200000001001d0000000001000411000000000010043f0000001201000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f00000001002001900000004e0000613d000000000101043b000000000101041a000e00000001001d000005510100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000004e80010009c000004e801008041000000c00110021000000556011001c70000800502000039139a13950000040f000000010020019000000ead0000613d0000000e02000029000100ff002001930000000002000411000704eb0020019b0000000202000029000c00020020003d000000000101043b000d04eb0010019b0000000001000410000604eb0010019b0000000002000019000a00000002001d000000050120021000000008011000290000000001100367000000000101043b000e00000001001d000000000010043f0000001001000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f00000001002001900000004e0000613d000000000101043b000000000101041a000000ff0010019000000e300000c13d000005580100004100000000001004430000000d0100002900000004001004430000000001000414000004e80010009c000004e801008041000000c00110021000000559011001c70000800202000039139a13950000040f000000010020019000000ead0000613d000000000101043b000000000001004b0000004e0000613d000000400300043d00000044013000390000000e0200002900000000002104350000002401300039000000060200002900000000002104350000055a010000410000000000130435000000040130003900000007020000290000000000210435000004e80030009c000b00000003001d000004e801000041000000000103401900000040011002100000000002000414000004e80020009c000004e802008041000000c002200210000000000112019f000004fd011001c70000000d02000029139a13900000040f000000010020019000000e340000613d0000000b01000029000004ec0010009c000001530000213d000000400010043f0000000e01000029000000000010043f0000001001000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f00000001002001900000004e0000613d000000000101043b000000000201041a000005920220019700000001022001bf000000000021041b0000000e01000029000000000010043f0000000f01000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f00000001002001900000004e0000613d000000000101043b000000000201041a000004f7022001970000000003000411000000000232019f000000000021041b0000000c01000029000000000101041a000004ec0010009c000001530000213d000b00000001001d00000001011000390000000c02000029000000000012041b000000000020043f0000000001000414000004e80010009c000004e801008041000000c001100210000004f3011001c70000801002000039139a13950000040f00000001002001900000004e0000613d000000000101043b0000000b011000290000000e02000029000000000021041b0000000a020000290000000102200039000000090020006c00000b080000413d0000000203000029000000000103041a000000090210002900000553022001970000055c01100197000000000112019f000000000013041b0000000801000039000000000101041a000e00000001001d000000000001004b00000ba60000613d000005490100004100000000001004430000000001000414000004e80010009c000004e801008041000000c0011002100000054a011001c70000800b02000039139a13950000040f000000010020019000000ead0000613d000000000101043b0000000e0210006c00000e470000813d00000000010000190000000203000029000000000203041a0000055302200197000000000112019f000000000013041b0000000a01000039000000000201041a000000090020002a0000039b0000413d0000000902200029000000000021041b000000010000006b00000bcb0000c13d0000000001000411000000000010043f0000001201000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f00000001002001900000004e0000613d000000000101043b000000000201041a000005920220019700000001022001bf000000000021041b0000000b01000039000000000201041a000000010220003a0000039b0000613d000000000021041b0000000001000411000000000001004b000006d00000613d0000000901000029000e055d001000d50000000201000039000000000101041a0000000e0010002a0000039b0000413d0000000e011000290000000202000039000000000012041b0000000001000411000000000010043f000000200000043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f00000001002001900000004e0000613d000000000101043b000000000201041a0000000e030000290000000002320019000000000021041b000000400100043d0000000000310435000004e80010009c000004e80100804100000040011002100000000002000414000004e80020009c000004e802008041000000c002200210000000000112019f000004f3011001c70000800d0200003900000003030000390000055e0400004100000000050000190000000006000411139a13900000040f00000001002001900000004e0000613d000000400100043d0000006002100039000000090300002900000000003204350000006002000039000000000221043600000004040000290000001f0340018f000000000004004b00000c0e0000613d00000080041000390000000405400029000000050600002900000020066000390000000006600367000000006706043c0000000004740436000000000054004b00000c0a0000c13d000000000003004b00000040031000390000000e04000029000000000043043500000003030000290000000000320435000004e80010009c000004e801008041000000400110021000000004020000290000055f0020009c0000055f020080410000006002200210000000000112019f0000000002000414000004e80020009c000004e802008041000000c002200210000000000121019f000005600110009a0000800d0200003900000002030000390000058a040000410000000005000411139a13900000040f00000001002001900000004e0000613d000009e00000013d000005540210012a000005550010009c0000005902008039000d00000002001d00000a3b0000013d000000090000006b000003210000613d0000000901000029000000000010043f000000200000043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f00000001002001900000004e0000613d000000000101043b000000000101041a000d000e0010007400000d5c0000813d0000056202000041000000000020043f0000000902000029000000040020043f000000240010043f0000000e01000029000000440010043f000004fd010000410000139c00010430000005490100004100000000001004430000000001000414000004e80010009c000004e801008041000000c0011002100000054a011001c70000800b02000039139a13950000040f000000010020019000000ead0000613d000000000101043b0000000e0110006c00000aba0000413d000005540210012a000005550010009c0000005902008039000e00000002001d00000abb0000013d000000010320008a00000005033002700000000004310019000000200300003900000001044000390000000c0600002900000000056300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b00000c630000c13d000000090020006c00000c750000613d00000009020000290000000302200210000000f80220018f000005930220027f00000593022001670000000c033000290000000003030433000000000223016f000000000021041b0000000901000029000000010110021000000001011001bf0000000302000039000000000012041b0000000b010000290000000001010433000c00000001001d000004ec0010009c000001530000213d0000000401000039000000000201041a000000010020019000000001012002700000007f0110618f0000001f0010008c00000000030000390000000103002039000000000223013f0000000100200190000005a10000c13d000000200010008c00000c9d0000413d0000000402000039000000000020043f0000000c030000290000001f023000390000000502200270000004f50220009a000000200030008c000004f6020040410000001f011000390000000501100270000004f50110009a000000000012004b00000c9d0000813d000000000002041b0000000102200039000000000012004b00000c990000413d0000000c010000290000001f0010008c00000d490000a13d0000000401000039000000000010043f0000000001000414000004e80010009c000004e801008041000000c001100210000004f3011001c70000801002000039139a13950000040f00000001002001900000004e0000613d0000000c02000029000004f402200198000000000101043b00000d840000c13d000000200300003900000d910000013d0000000001000410000604eb0010019b0000000002000019000c00000000001d000d00000002001d00000005012002100000000b011000290000000001010433000e00000001001d000000000010043f0000001001000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f00000001002001900000004e0000613d000000000101043b000000000101041a000000ff0010019000000d3f0000613d0000000e01000029000000000010043f0000000f01000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f00000001002001900000004e0000613d000000000101043b000000000101041a000004eb01100197000000090010006c00000d3f0000c13d000005510100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000004e80010009c000004e801008041000000c00110021000000556011001c70000800502000039139a13950000040f000000010020019000000ead0000613d000000000101043b00000558020000410000000000200443000004eb01100197000800000001001d00000004001004430000000001000414000004e80010009c000004e801008041000000c00110021000000559011001c70000800202000039139a13950000040f000000010020019000000ead0000613d000000000101043b000000000001004b0000004e0000613d000000400300043d00000044013000390000000e0200002900000000002104350000002401300039000000090200002900000000002104350000055a010000410000000000130435000000040130003900000006020000290000000000210435000004e80030009c000700000003001d000004e801000041000000000103401900000040011002100000000002000414000004e80020009c000004e802008041000000c002200210000000000112019f000004fd011001c70000000802000029139a13900000040f000000010020019000000de20000613d0000000701000029000004ec0010009c000001530000213d000000400010043f0000000e01000029000000000010043f0000001001000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f00000001002001900000004e0000613d000000000101043b000000000201041a0000059202200197000000000021041b0000000e01000029000000000010043f0000000f01000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f00000001002001900000004e0000613d000000000101043b000000000201041a000004f702200197000000000021041b0000000c01000029000c00010010003d0000000d0200002900000001022000390000000a010000290000000001010433000000000012004b0000080a0000813d0000000c01000029000000310010008c00000cb50000a13d0000080a0000013d0000000c0000006b000000000100001900000d4e0000613d0000000a0100002900000000010104330000000c040000290000000302400210000005930220027f0000059302200167000000000121016f0000000102400210000000000121019f00000d9f0000013d0000055b01000041000000000010043f0000003201000039000000040010043f00000547010000410000139c000104300000000901000029000000000010043f000000200000043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f00000001002001900000004e0000613d000000000101043b0000000d02000029000000000021041b0000000201000039000000000201041a0000000e030000290000000002320049000000000021041b000000400100043d0000000000310435000004e80010009c000004e80100804100000040011002100000000002000414000004e80020009c000004e802008041000000c002200210000000000112019f000004f3011001c70000800d0200003900000003030000390000055e0400004100000009050000290000000006000019139a13900000040f0000000100200190000008060000c13d0000004e0000013d000000010320008a00000005033002700000000004310019000000200300003900000001044000390000000b0600002900000000056300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b00000d8a0000c13d0000000c0020006c00000d9c0000613d0000000c020000290000000302200210000000f80220018f000005930220027f00000593022001670000000b033000290000000003030433000000000223016f000000000021041b0000000c01000029000000010110021000000001011001bf0000000402000039000000000012041b0000000d0000006b0000030e0000613d0000000501000039000000000201041a000004f7032001970000000d06000029000000000363019f000000000031041b000000400100043d000c00000001001d0000000001000414000004eb05200197000004e80010009c000004e801008041000000c001100210000004f8011001c70000800d020000390000000303000039000004f904000041139a13900000040f000000010020019000000008030000290000004e0000613d00000001010000390000000602000039000000000012041b000000000003004b00000dce0000c13d0000000c030000290000004401300039000004fe02000041000000000021043500000024013000390000001c020000390000000000210435000004fc010000410000000000130435000000040130003900000020020000390000000000210435000004e80030009c000004e8030080410000004001300210000004fd011001c70000139c000104300000000e0000006b00000dd40000c13d000000400100043d0000004402100039000004fb03000041000009fc0000013d0000000801000029000000800010043f0000000e02000029000000a00020043f0000014000000443000001600010044300000020010000390000018000100443000001a000200443000001000010044300000002010000390000012000100443000004fa010000410000139b0001042e00000060061002700000001f0460018f000004ea05600198000000400200043d000000000352001900000aa50000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b00000dea0000c13d00000aa50000013d000000400100043d00000044021000390000055703000041000000000032043500000024021000390000001703000039000006ac0000013d000000400100043d00000044021000390000056303000041000006a90000013d00000060061002700000001f0460018f000004ea05600198000000400200043d000000000352001900000aa50000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b00000e020000c13d00000aa50000013d0000000201000029000000000101041a0000055302100197000000080020006b0000039b0000213d000000080210006a00000553022001970000055c01100197000000000112019f0000000202000029000000000012041b0000000a01000039000000000201041a000000080220006c0000039b0000413d000000000021041b000000060000006b000003210000613d0000000601000029000000000010043f000000200000043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f00000001002001900000004e0000613d0000000802000029000e055d002000d5000000000101043b000000000101041a0000000e0210006c000d00000002001d00000e4c0000813d0000056202000041000000000020043f000000060200002900000c440000013d000000400100043d00000044021000390000058803000041000001300000013d00000060061002700000001f0460018f000004ea05600198000000400200043d000000000352001900000aa50000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b00000e3c0000c13d00000aa50000013d0000055b01000041000000000010043f0000003101000039000000040010043f00000547010000410000139c00010430000005540120012a0000008001100210000005550020009c000005890100804100000ba70000013d0000000601000029000000000010043f000000200000043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f00000001002001900000004e0000613d000000000101043b0000000d02000029000000000021041b0000000202000039000000000102041a0000000e030000290000000001310049000000000012041b000000400100043d0000000000310435000004e80010009c000004e80100804100000040011002100000000002000414000004e80020009c000004e802008041000000c002200210000000000112019f000004f3011001c70000800d0200003900000003030000390000055e0400004100000006050000290000000006000019139a13900000040f00000001002001900000004e0000613d000000400100043d000d00000001001d000005490100004100000000001004430000000001000414000004e80010009c000004e801008041000000c0011002100000054a011001c70000800b02000039139a13950000040f000000010020019000000ead0000613d000000000101043b0000000d040000290000006002400039000000080300002900000000003204350000006002000039000000000224043600000003040000290000001f0340018f000000000004004b00000e950000613d0000000d0400002900000080044000390000000305400029000000040600002900000020066000390000000006600367000000006706043c0000000004740436000000000054004b00000e910000c13d000000000003004b0000000d0500002900000040035000390000000e0400002900000000004304350000000000120435000004e80050009c000004e805008041000000400150021000000003020000290000055f0020009c0000055f020080410000006002200210000000000112019f0000000002000414000004e80020009c000004e802008041000000c002200210000000000121019f000005600110009a0000800d020000390000000203000039000005610400004100000c250000013d000000000001042f00000020030000390000000004310436000000003202043400000000002404350000004001100039000000000002004b00000ebd0000613d000000000400001900000000054100190000000006430019000000000606043300000000006504350000002004400039000000000024004b00000eb60000413d000000000321001900000000000304350000001f0220003900000594022001970000000001210019000000000001042d000000000301001900000000040104330000000001420436000000000004004b00000ecf0000613d00000000020000190000002003300039000000000503043300000000015104360000000102200039000000000042004b00000ec90000413d000000000001042d0000001f0220003900000594022001970000000001120019000000000021004b00000000020000390000000102004039000004ec0010009c00000edc0000213d000000010020019000000edc0000c13d000000400010043f000000000001042d0000055b01000041000000000010043f0000004101000039000000040010043f00000547010000410000139c0001043000010000000000020000000801000039000000000101041a000000000001004b00000ef60000613d000100000001001d000005490100004100000000001004430000000001000414000004e80010009c000004e801008041000000c0011002100000054a011001c70000800b02000039139a13950000040f000000010020019000000efc0000613d000000000101043b000000010210006c00000ef80000813d0000000001000019000000000001042d000005540120012a000005550020009c0000005901008039000000000001042d000000000001042f0003000000000002000000000301041a000000400200043d000300000002001d000100000003001d0000000002320436000200000002001d000000000010043f0000000001000414000004e80010009c000004e801008041000000c001100210000004f3011001c70000801002000039139a13950000040f000000010020019000000f2a0000613d0000000105000029000000000005004b00000f1b0000613d000000000101043b00000000020000190000000204000029000000000301041a000000000434043600000001011000390000000102200039000000000052004b00000f140000413d00000f1c0000013d0000000204000029000000030100002900000000021400490000001f0320003900000594023001970000000003120019000000000023004b00000000020000390000000102004039000004ec0030009c00000f2c0000213d000000010020019000000f2c0000c13d000000400030043f000000000001042d00000000010000190000139c000104300000055b01000041000000000010043f0000004101000039000000040010043f00000547010000410000139c00010430000000000001004b00000f350000613d000000000001042d000000400100043d00000044021000390000059603000041000000000032043500000024021000390000000f030000390000000000320435000004fc020000410000000000210435000000040210003900000020030000390000000000320435000004e80010009c000004e8010080410000004001100210000004fd011001c70000139c0001043000010000000000020000000801000039000000000101041a000000000001004b00000f5a0000613d000100000001001d000005490100004100000000001004430000000001000414000004e80010009c000004e801008041000000c0011002100000054a011001c70000800b02000039139a13950000040f000000010020019000000f7b0000613d000000000101043b000000010010006c00000f5c0000813d0000000001000019000000000001042d0000000801000039000000000101041a000000000001004b00000f6b0000613d000005490100004100000000001004430000000001000414000004e80010009c000004e801008041000000c0011002100000054a011001c70000800b02000039139a13950000040f000000010020019000000f7b0000613d0000000a01000039000000000101041a0000000c02000039000000000202041a000000ff0020019000000f770000613d000000000001004b00000f5a0000613d0000000d02000039000000000202041a00000000011200d9000000000001042d000000000001004b00000f5a0000613d0000058401100129000000000001042d000000000001042f0002000000000002000004eb01100197000200000001001d000000000010043f0000000e01000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f000000010020019000000fbe0000613d000000000101043b000000000101041a000005530010019800000fa40000613d0000000801000039000000000101041a000000000001004b00000fa20000613d000100000001001d000005490100004100000000001004430000000001000414000004e80010009c000004e801008041000000c0011002100000054a011001c70000800b02000039139a13950000040f000000010020019000000fc00000613d000000000101043b000000010110006c00000fa60000813d000100000000001d00000faa0000013d0000000001000019000000000001042d000005540210012a000005550010009c0000005902008039000100000002001d0000000201000029000000000010043f0000000e01000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f000000010020019000000fbe0000613d000000000101043b000000000101041a0000008001100270000000010010006b00000000010000390000000101002039000000000001042d00000000010000190000139c00010430000000000001042f0006000000000002000004eb01100197000600000001001d000000000010043f0000000e01000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f00000001002001900000109d0000613d000000000101043b000000000201041a000205530020019c000010260000613d000500000002001d0000000601000029000000000010043f0000000e01000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f00000001002001900000109d0000613d000000000101043b000000000101041a0000055300100198000010260000613d0000000801000039000000000101041a000000000001004b00000ff90000613d000400000001001d000005490100004100000000001004430000000001000414000004e80010009c000004e801008041000000c0011002100000054a011001c70000800b02000039139a13950000040f0000000100200190000010a50000613d000000000101043b000000040110006c00000ffb0000813d000400000000001d00000fff0000013d000005540210012a000005550010009c0000005902008039000400000002001d0000000601000029000000000010043f0000000e01000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f00000001002001900000109d0000613d000000000101043b000000000101041a0000008001100270000000040010006b000010260000a13d0000000801000039000000000101041a000000000001004b000010240000613d000600000001001d000005490100004100000000001004430000000001000414000004e80010009c000004e801008041000000c0011002100000054a011001c70000800b02000039139a13950000040f0000000100200190000010a50000613d000000000101043b000000060110006c000010280000813d00000000020000190000102b0000013d0000000001000019000000000001042d000005540210012a000005550010009c0000005902008039000000590020008c0000005902008039000000050100002900000080041002700000000001000019000300000002001d000010380000013d000000000100041500000005011000690000000001000002000000000200001900000004012000290000000302000029000000000024004b000010270000813d000400000001001d00000001044000390000000001000415000500000001001d000600000004001d000000000040043f0000001101000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f00000001002001900000109d0000613d000000000101043b0000000302100039000000000302041a000000ff003001900000105d0000613d0000000101100039000000000101041a0000000604000029000000000200041500000005022000690000000002000002000000000001004b000010350000613d00000002021000b900000000011200d9000000020010006c000010360000613d0000109f0000013d000000000201041a00000080022002720000000604000029000010670000613d0000ff0000300190000010960000613d0000000201100039000000000101041a00000000012100d9000010530000013d0000000801000039000000000101041a000000000001004b000010320000613d000100000001001d000005490100004100000000001004430000000001000414000004e80010009c000004e801008041000000c0011002100000054a011001c70000800b02000039139a13950000040f00000006040000290000000100200190000010a50000613d000000000101043b000000010010006c000010320000413d0000000801000039000000000101041a000000000001004b0000108b0000613d000005490100004100000000001004430000000001000414000004e80010009c000004e801008041000000c0011002100000054a011001c70000800b02000039139a13950000040f00000006040000290000000100200190000010a50000613d0000000a01000039000000000101041a0000000c02000039000000000202041a000000ff00200190000010980000613d000000000001004b000010320000613d0000000d02000039000000000202041a0000109b0000013d0000058401200129000010530000013d0000058402000041000000000001004b000010320000613d00000000011200d9000010530000013d00000000010000190000139c000104300000055b01000041000000000010043f0000001101000039000000040010043f00000547010000410000139c00010430000000000001042f0000000501000039000000000101041a000004eb021001970000000001000411000000000012004b000010ad0000c13d000000000001042d0000054602000041000000000020043f000000040010043f00000547010000410000139c0001043000080000000000020000000802000039000000000202041a000000000002004b000010c80000613d000800000002001d000700000001001d000005490100004100000000001004430000000001000414000004e80010009c000004e801008041000000c0011002100000054a011001c70000800b02000039139a13950000040f0000000100200190000012be0000613d000000000101043b000000080210006c0000000701000029000010cb0000813d0000000003000415000500000000001d000011490000013d000005550020009c000010d50000813d0000000003000415000005540020009c000010c90000413d000004e802200197000005540020009c000010c90000413d0005055400200132000010d70000013d000500590000003d0000000003000415000600000003001d0000000001000019000800000001001d000000000010043f0000001101000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f0000000100200190000012b60000613d000000000101043b0000000301100039000000000101041a000000ff00100190000011410000c13d0000000801000029000000000010043f0000001101000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f0000000100200190000012b60000613d000000000201043b0000000301200039000000000301041a000000ff00300190000011410000c13d0000000b04000039000000000404041a0000055304400197000000000502041a0000055c05500197000000000545019f000000000052041b0000000a06000039000000000506041a0000008005500210000000000445019f000000000042041b00000597033001970000000c07000039000000000407041a000000ff00400190000001000330c1bf000000000031041b00000002042000390000000d05000039000000000505041a000000000054041b000000000406041a000000000004004b0000111c0000613d000000000507041a000000ff005001900000111f0000613d0000000d05000039000000000505041a000011200000013d00000000040000190000000806000029000011220000013d0000058405000041000000080600002900000000044500d90000000102200039000000000042041b00000001023001bf000000000021041b0000000b01000039000000000101041a0000000a02000039000000000202041a000000400300043d0000006005300039000000000045043500000040043000390000000000240435000000200230003900000000001204350000000000630435000004e80030009c000004e80300804100000040013002100000000002000414000004e80020009c000004e802008041000000c002200210000000000112019f00000598011001c70000800d0200003900000001030000390000059904000041139a13900000040f0000000100200190000012b60000613d00000008030000290000000101300039000000050010006c000011470000813d000000590030008c000010d90000413d00000007010000290000000603000029000000000200041500000000022300490000000002000002000004eb01100197000200000001001d000000000010043f0000000e01000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f0000000100200190000012b60000613d000000000101043b000000000101041a000800000001001d000305530010019c000012b50000613d0000000201000029000000000010043f0000000e01000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f0000000100200190000012b60000613d000000000101043b000000000101041a0000055300100198000012b50000613d0000000801000039000000000101041a000000000001004b000011830000613d000700000001001d000005490100004100000000001004430000000001000414000004e80010009c000004e801008041000000c0011002100000054a011001c70000800b02000039139a13950000040f0000000100200190000012be0000613d000000000101043b000000070110006c000011850000813d000700000000001d000011890000013d000005540210012a000005550010009c0000005902008039000700000002001d0000000201000029000000000010043f0000000e01000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f0000000100200190000012b60000613d000000000101043b000000000101041a0000008001100270000000070010006b000012b50000a13d0000000801000039000000000101041a000000000001004b000011ae0000613d000700000001001d000005490100004100000000001004430000000001000414000004e80010009c000004e801008041000000c0011002100000054a011001c70000800b02000039139a13950000040f0000000100200190000012be0000613d000000000101043b000000070110006c000011b00000813d0000000001000019000011b40000013d000005540210012a000005550010009c000000000102001900000059010080390000000802000029000000590010008c000000590100803900070080002002780000000003000019000400000001001d000011c30000013d00000003021000b900000000011200d9000000030010006c0000000401000029000012b80000c13d000000000032001a0000000003320019000012b80000413d0000000702000029000000000012004b000800000003001d0000122d0000813d00000001022000390000000001000415000600000001001d000700000002001d000000000020043f0000001101000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f0000000100200190000012b60000613d000000000101043b0000000302100039000000000302041a000000ff00300190000011e60000613d0000000101100039000000000101041a0000000803000029000000000200041500000006022000690000000002000002000000000001004b000011bb0000c13d0000000002000019000012070000013d000000000201041a0000008002200272000011ef0000613d0000ff00003001900000120c0000613d0000000201100039000000000101041a00000000012100d9000011de0000013d0000000801000039000000000101041a000000000001004b000012020000613d000100000001001d000005490100004100000000001004430000000001000414000004e80010009c000004e801008041000000c0011002100000054a011001c70000800b02000039139a13950000040f0000000100200190000012be0000613d000000000101043b000000010010006c0000120e0000813d000000000100041500000006011000690000000001000002000000000200001900000008030000290000000401000029000000000032001a0000000003320019000012b80000413d000011c30000013d0000058401200129000011de0000013d0000000801000039000000000101041a000000000001004b0000121d0000613d000005490100004100000000001004430000000001000414000004e80010009c000004e801008041000000c0011002100000054a011001c70000800b02000039139a13950000040f0000000100200190000012be0000613d0000000a01000039000000000101041a0000000c02000039000000000202041a000000ff00200190000012280000613d000000000001004b000012020000613d0000000d02000039000000000202041a0000122b0000013d0000058402000041000000000001004b000012020000613d00000000011200d9000011de0000013d000000000003004b000012b50000613d0000000201000029000000000010043f0000000e01000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f0000000100200190000012b60000613d00000005020000290000008002200210000000000101043b000000000301041a0000055303300197000000000223019f000000000021041b0000000101100039000000000201041a0000000803000029000000000032001a000012b80000413d0000000002320019000000000021041b000000400200043d0000002401200039000000000031043500000576010000410000000000120435000700000002001d0000000401200039000000020200002900000000002104350000055101000041000000000010044300000000010004120000000400100443000000200100003900000024001004430000000001000414000004e80010009c000004e801008041000000c00110021000000556011001c70000800502000039139a13950000040f0000000100200190000012be0000613d000000000201043b0000000701000029000004e80010009c000004e80100804100000040011002100000000003000414000004e80030009c000004e803008041000000c003300210000000000113019f00000577011001c7000004eb02200197139a13900000040f0000006003100270000004e803300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000070b00002900000000057b00190000127f0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b0000127b0000c13d000000000006004b0000128c0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f00000000006504350000000100200190000012bf0000613d0000001f01400039000000600210018f0000000001b20019000000000021004b00000000020000390000000102004039000004ec0010009c000012dd0000213d0000000100200190000012dd0000c13d000000400010043f000000200030008c000012b60000413d00000000020b0433000000010020008c000012b60000213d000000000002004b000012e30000613d00000020021000390000000503000029000000000032043500000008020000290000000000210435000004e80010009c000004e80100804100000040011002100000000002000414000004e80020009c000004e802008041000000c002200210000000000112019f00000552011001c70000800d0200003900000002030000390000059a040000410000000205000029139a13900000040f0000000100200190000012b60000613d000000000001042d00000000010000190000139c000104300000055b01000041000000000010043f0000001101000039000000040010043f00000547010000410000139c00010430000000000001042f0000001f0530018f000004ea06300198000000400200043d0000000004620019000012ca0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000012c60000c13d000000000005004b000012d70000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000004e80020009c000004e8020080410000004002200210000000000112019f0000139c000104300000055b01000041000000000010043f0000004101000039000000040010043f00000547010000410000139c0001043000000044021000390000059603000041000000000032043500000024021000390000000f030000390000000000320435000004fc020000410000000000210435000000040210003900000020030000390000000000320435000004e80010009c000004e8010080410000004001100210000004fd011001c70000139c000104300001000000000002000000590010008c0000134b0000213d000100000001001d000000000010043f0000001101000039000000200010043f0000000001000414000004e80010009c000004e801008041000000c00110021000000552011001c70000801002000039139a13950000040f0000000100200190000013490000613d000000000201043b0000000301200039000000000501041a000000ff00500190000013480000c13d0000000b03000039000000000403041a0000055306400197000000000402041a0000055c04400197000000000464019f000000000042041b0000000a04000039000000000704041a0000008007700210000000000667019f000000000062041b00000597055001970000000c07000039000000000607041a000000ff00600190000001000550c1bf000000000051041b00000002062000390000000d08000039000000000908041a000000000096041b000000000604041a000000000006004b000013260000613d000000000707041a000000ff00700190000013280000613d000000000708041a000013290000013d00000000060000190000132a0000013d000005840700004100000000066700d90000000102200039000000000062041b00000001025001bf000000000021041b000000000103041a000000000204041a000000400300043d00000060043000390000000000640435000000400430003900000000002404350000002002300039000000000012043500000001010000290000000000130435000004e80030009c000004e80300804100000040013002100000000002000414000004e80020009c000004e802008041000000c002200210000000000112019f00000598011001c70000800d0200003900000001030000390000059904000041139a13900000040f0000000100200190000013490000613d000000000001042d00000000010000190000139c00010430000000400100043d00000044021000390000059b03000041000000000032043500000024021000390000000b030000390000000000320435000004fc020000410000000000210435000000040210003900000020030000390000000000320435000004e80010009c000004e8010080410000004001100210000004fd011001c70000139c00010430000000000001042f000004e80010009c000004e8010080410000004001100210000004e80020009c000004e8020080410000006002200210000000000112019f0000000002000414000004e80020009c000004e802008041000000c002200210000000000112019f000004f8011001c70000801002000039139a13950000040f0000000100200190000013700000613d000000000101043b000000000001042d00000000010000190000139c0001043000000000050100190000000000200443000000050030008c000013800000413d000000040100003900000000020000190000000506200210000000000664001900000005066002700000000006060031000000000161043a0000000102200039000000000031004b000013780000413d000004e80030009c000004e80300804100000060013002100000000002000414000004e80020009c000004e802008041000000c002200210000000000112019f0000059c011001c70000000002050019139a13950000040f00000001002001900000138f0000613d000000000101043b000000000001042d000000000001042f00001393002104210000000102000039000000000001042d0000000002000019000000000001042d00001398002104230000000102000039000000000001042d0000000002000019000000000001042d0000139a000004320000139b0001042e0000139c0001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe000000000000000000000000000000000000000000000000000000000ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffff0000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001ffffffffffffffe0000000000000000000000000000000000000000000000003ffffffffffffffe080000000000000000000000000000000000000000000000000000000000000003da8a5f161a6c3ff06a60736d0ed24d7963cc6a5c4fafd2fa1dae9bb908e07a5c2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0200000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffe075ca53043ea007e5c65182cbb028f60d7179ff4b55739a3949b401801c942e658a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19bffffffffffffffffffffffff000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000008be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e000000002000000000000000000000000000000c0000001000000000000000000496e76616c6964204752494e4420746f6b656e2061646472657373000000000008c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000496e76616c6964204e465420636f6e747261637420616464726573730000000000000000000000000000000000000000000000000000000000000000733bdeef00000000000000000000000000000000000000000000000000000000bf3506c000000000000000000000000000000000000000000000000000000000d56d229c00000000000000000000000000000000000000000000000000000000dd62ed3d00000000000000000000000000000000000000000000000000000000efb98bce00000000000000000000000000000000000000000000000000000000efb98bcf00000000000000000000000000000000000000000000000000000000f2fde38b00000000000000000000000000000000000000000000000000000000dd62ed3e00000000000000000000000000000000000000000000000000000000dfe6b5d600000000000000000000000000000000000000000000000000000000d56d229d00000000000000000000000000000000000000000000000000000000d64c549e00000000000000000000000000000000000000000000000000000000d6bff59e00000000000000000000000000000000000000000000000000000000cd75000b00000000000000000000000000000000000000000000000000000000cd75000c00000000000000000000000000000000000000000000000000000000cdb039cd00000000000000000000000000000000000000000000000000000000cee5396900000000000000000000000000000000000000000000000000000000bf3506c100000000000000000000000000000000000000000000000000000000c1a287e200000000000000000000000000000000000000000000000000000000c93c8f340000000000000000000000000000000000000000000000000000000092415cc900000000000000000000000000000000000000000000000000000000a9059cba00000000000000000000000000000000000000000000000000000000b422782900000000000000000000000000000000000000000000000000000000b422782a00000000000000000000000000000000000000000000000000000000baa51f8600000000000000000000000000000000000000000000000000000000a9059cbb00000000000000000000000000000000000000000000000000000000aa2ff4e40000000000000000000000000000000000000000000000000000000092415cca0000000000000000000000000000000000000000000000000000000095d89b41000000000000000000000000000000000000000000000000000000009bd3546d000000000000000000000000000000000000000000000000000000008ac33486000000000000000000000000000000000000000000000000000000008ac33487000000000000000000000000000000000000000000000000000000008da5cb5b000000000000000000000000000000000000000000000000000000009168ae7200000000000000000000000000000000000000000000000000000000733bdef0000000000000000000000000000000000000000000000000000000008456cb59000000000000000000000000000000000000000000000000000000008a270dc9000000000000000000000000000000000000000000000000000000003e6968b50000000000000000000000000000000000000000000000000000000061f64456000000000000000000000000000000000000000000000000000000006abfd18200000000000000000000000000000000000000000000000000000000715018a500000000000000000000000000000000000000000000000000000000715018a60000000000000000000000000000000000000000000000000000000071b0cbfa000000000000000000000000000000000000000000000000000000006abfd1830000000000000000000000000000000000000000000000000000000070a082310000000000000000000000000000000000000000000000000000000061f6445700000000000000000000000000000000000000000000000000000000649ec29b000000000000000000000000000000000000000000000000000000006803bd4100000000000000000000000000000000000000000000000000000000481f6e3f00000000000000000000000000000000000000000000000000000000481f6e40000000000000000000000000000000000000000000000000000000004bf9c46d000000000000000000000000000000000000000000000000000000005c975abb000000000000000000000000000000000000000000000000000000003e6968b6000000000000000000000000000000000000000000000000000000003f4ba83a00000000000000000000000000000000000000000000000000000000420ed8ea000000000000000000000000000000000000000000000000000000001caaa486000000000000000000000000000000000000000000000000000000002c9dcbb300000000000000000000000000000000000000000000000000000000313ce56600000000000000000000000000000000000000000000000000000000313ce56700000000000000000000000000000000000000000000000000000000372500ab000000000000000000000000000000000000000000000000000000002c9dcbb4000000000000000000000000000000000000000000000000000000002e175004000000000000000000000000000000000000000000000000000000001caaa4870000000000000000000000000000000000000000000000000000000023b872dd000000000000000000000000000000000000000000000000000000002c489aec0000000000000000000000000000000000000000000000000000000018160ddc0000000000000000000000000000000000000000000000000000000018160ddd0000000000000000000000000000000000000000000000000000000019fbbaeb000000000000000000000000000000000000000000000000000000001be735640000000000000000000000000000000000000000000000000000000006fdde0300000000000000000000000000000000000000000000000000000000095ea7b3000000000000000000000000000000000000000000000000000000000f48a482118cdaa70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000001e4fbdf700000000000000000000000000000000000000000000000000000000796b89b91644bc98cd93958e4c9038275d622183e25ac5af08cc6b5d955391320200000200000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000200000008000000000000000000200000000000000000000000000000000000020000000800000000000000000c8735c3b8bd3f06140e838a95ce8e8b0994d560769ec414cee34fab83c354c7674c416bca3bdae4e8c4a03fba72d81e856f157c27f5e3e603e63ffdeb5801391310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e020000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000015180000000000000000000000000000000000000000000000000000000000076a70002000002000000000000000000000000000000440000000000000000000000004e6f74206f776e6572206f66207374616b6564204e46540000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83020000020000000000000000000000000000002400000000000000000000000023b872dd000000000000000000000000000000000000000000000000000000004e487b7100000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000de0b6b3a7640000ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef00000000000000000000000000000000000000000000000000000000ffffff7ffdffffffffffffffffffffffffffffffffffff80000000000000000000000000b48691a27237ce8d3cceff06dbfaad37621233b3e7d408f71c1878bf0b2428ebe450d38c000000000000000000000000000000000000000000000000000000004e4654206e6f74207374616b65640000000000000000000000000000000000004d75737420756e7374616b65206174206c65617374206f6e65204e465400000000000000000000000000000000000000000000640000008000000000000000005265636569707420746f6b656e7320617265206e6f6e2d7472616e7366657261626c65000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000840000008000000000000000000000000000000000000000000000000000000060000000800000000000000000000000000000000000000000000000000000008000000080000000000000000062e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2585374616b696e6720616c7265616479207374617274656400000000000000000070a08231000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000800000000000000000000000000000000000000000000000000000000001f04ef12cb04cf157ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8957d43858e6acd05259f028111009ba00d900c7c0b1803ac6cbdde1d1ab4c58f270607472616374000000000000000000000000000000000000000000000000000000496e73756666696369656e74204752494e4420746f6b656e7320696e20636f6e00000000000000000000000000000000000000840000000000000000000000005374616b696e6720706572696f64206e6f7420656e6465640000000000000000a9059cbb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044000000000000000000000000000000000000000000000000000000000000000001f04ef12cb04cf1580000001ad6082f7aa3e32095e38fd4c0bf76fa2bb7584e81474cf3519d2dea4081181c4e6f204e46547320746f20756e7374616b6500000000000000000000000000005db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa8dfc202b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000065206c61737420636c61696d000000000000000000000000000000000000000043616e6e6f7420636c61696d20796574202d2077616974203234682073696e634e6f204e465473207374616b656400000000000000000000000000000000000000000000000000000000000000000000000000c0000000800000000000000000fb8f41b20000000000000000000000000000000000000000000000000000000096c6fd1e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000583b8be02e86c13cc0000420ed8ea00000000000000000000000000000000000000000000000000000000d93c0665000000000000000000000000000000000000000000000000000000005374616b696e6720706572696f6420656e6465640000000000000000000000004e465420616c7265616479207374616b6564000000000000000000000000000000000000000000000000000000000059000000000000000000000000000000005c0e9f07aa0b338446fc4980ce5f808793c844f270dc74846d716778f4b12b47ec442f05000000000000000000000000000000000000000000000000000000004d757374207374616b65206174206c65617374206f6e65204e465400000000005374616b696e67206e6f742073746172746564000000000000000000000000003ee5aeb5000000000000000000000000000000000000000000000000000000008c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92594280d6200000000000000000000000000000000000000000000000000000000e602df0500000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed35472616e73666572206661696c65640000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000200000000000000000000000000000000000080000000000000000000000000b09fa00415ccd763d5b3a5c1cd8ae1e32f6994fedb1c5e6bcfd6fccf6073ffc3dacbdde355ba930696a362ea6738feb9f8bd52dfb3d81947558fd3217e23e325496e76616c69642064617900000000000000000000000000000000000000000002000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2646970667358221220853b2d6e715961159192dcedef087b2d6b135a9cc42c1d6356ed5d793e0c44fc64736f6c6378247a6b736f6c633a312e352e31353b736f6c633a302e382e32383b6c6c766d3a312e302e320055
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.