Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 303 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Safe Mint | 15596269 | 1251 days ago | IN | 0 ETH | 0.00108334 | ||||
| Safe Mint | 15596268 | 1251 days ago | IN | 0 ETH | 0.0011534 | ||||
| Safe Mint | 15596267 | 1251 days ago | IN | 0 ETH | 0.00115492 | ||||
| Safe Mint | 15596265 | 1251 days ago | IN | 0 ETH | 0.00108426 | ||||
| Safe Mint | 15596263 | 1251 days ago | IN | 0 ETH | 0.0012101 | ||||
| Safe Mint | 15596262 | 1251 days ago | IN | 0 ETH | 0.00114436 | ||||
| Safe Mint | 15596262 | 1251 days ago | IN | 0 ETH | 0.00114436 | ||||
| Safe Mint | 15596258 | 1251 days ago | IN | 0 ETH | 0.00127825 | ||||
| Safe Mint | 15596256 | 1251 days ago | IN | 0 ETH | 0.00122191 | ||||
| Safe Mint | 15596255 | 1251 days ago | IN | 0 ETH | 0.0011968 | ||||
| Safe Mint | 15596254 | 1251 days ago | IN | 0 ETH | 0.00118915 | ||||
| Safe Mint | 15596253 | 1251 days ago | IN | 0 ETH | 0.00123687 | ||||
| Safe Mint | 15596250 | 1251 days ago | IN | 0 ETH | 0.00129251 | ||||
| Safe Mint | 15596249 | 1251 days ago | IN | 0 ETH | 0.00125037 | ||||
| Safe Mint | 15596248 | 1251 days ago | IN | 0 ETH | 0.00120333 | ||||
| Safe Mint | 15596247 | 1251 days ago | IN | 0 ETH | 0.0012385 | ||||
| Set Approval For... | 15596146 | 1251 days ago | IN | 0 ETH | 0.00040788 | ||||
| Safe Mint | 15596066 | 1251 days ago | IN | 0 ETH | 0.00121515 | ||||
| Safe Mint | 15596065 | 1251 days ago | IN | 0 ETH | 0.00116756 | ||||
| Safe Mint | 15596064 | 1251 days ago | IN | 0 ETH | 0.00121026 | ||||
| Safe Mint | 15596062 | 1251 days ago | IN | 0 ETH | 0.00130995 | ||||
| Safe Mint | 15596061 | 1251 days ago | IN | 0 ETH | 0.00124982 | ||||
| Safe Mint | 15596061 | 1251 days ago | IN | 0 ETH | 0.00124982 | ||||
| Safe Mint | 15596059 | 1251 days ago | IN | 0 ETH | 0.0013863 | ||||
| Safe Mint | 15596058 | 1251 days ago | IN | 0 ETH | 0.00129912 |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
sparrownft
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-08-29
*/
/**
*Submitted for verification at Etherscan.io on 2022-08-24
*/
// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts@4.7.3/utils/Counters.sol
// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)
pragma solidity ^0.8.0;
/**
* @title Counters
* @author Matt Condon (@shrugs)
* @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
* of elements in a mapping, issuing ERC721 ids, or counting request ids.
*
* Include with `using Counters for Counters.Counter;`
*/
library Counters {
struct Counter {
// This variable should never be directly accessed by users of the library: interactions must be restricted to
// the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
// this feature: see https://github.com/ethereum/solidity/issues/4637
uint256 _value; // default: 0
}
function current(Counter storage counter) internal view returns (uint256) {
return counter._value;
}
function increment(Counter storage counter) internal {
unchecked {
counter._value += 1;
}
}
function decrement(Counter storage counter) internal {
uint256 value = counter._value;
require(value > 0, "Counter: decrement overflow");
unchecked {
counter._value = value - 1;
}
}
function reset(Counter storage counter) internal {
counter._value = 0;
}
}
// File: @openzeppelin/contracts@4.7.3/utils/Strings.sol
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)
pragma solidity ^0.8.0;
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
uint8 private constant _ADDRESS_LENGTH = 20;
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
// Inspired by OraclizeAPI's implementation - MIT licence
// https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol
if (value == 0) {
return "0";
}
uint256 temp = value;
uint256 digits;
while (temp != 0) {
digits++;
temp /= 10;
}
bytes memory buffer = new bytes(digits);
while (value != 0) {
digits -= 1;
buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
value /= 10;
}
return string(buffer);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
*/
function toHexString(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0x00";
}
uint256 temp = value;
uint256 length = 0;
while (temp != 0) {
length++;
temp >>= 8;
}
return toHexString(value, length);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
*/
function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
bytes memory buffer = new bytes(2 * length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 2 * length + 1; i > 1; --i) {
buffer[i] = _HEX_SYMBOLS[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: hex length insufficient");
return string(buffer);
}
/**
* @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
*/
function toHexString(address addr) internal pure returns (string memory) {
return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
}
}
// File: @openzeppelin/contracts@4.7.3/utils/Context.sol
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File: @openzeppelin/contracts@4.7.3/access/Ownable.sol
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File: @openzeppelin/contracts@4.7.3/utils/Address.sol
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)
pragma solidity ^0.8.1;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*
* [IMPORTANT]
* ====
* You shouldn't rely on `isContract` to protect against flash loan attacks!
*
* Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
* constructor.
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File: @openzeppelin/contracts@4.7.3/token/ERC721/IERC721Receiver.sol
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)
pragma solidity ^0.8.0;
/**
* @title ERC721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC721 asset contracts.
*/
interface IERC721Receiver {
/**
* @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
* by `operator` from `from`, this function is called.
*
* It must return its Solidity selector to confirm the token transfer.
* If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
*
* The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
*/
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
// File: @openzeppelin/contracts@4.7.3/utils/introspection/IERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* 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[EIP 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@4.7.3/utils/introspection/ERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
* for the additional interface id that will be supported. For example:
*
* ```solidity
* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
* }
* ```
*
* Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
*/
abstract contract ERC165 is IERC165 {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
// File: @openzeppelin/contracts@4.7.3/token/ERC721/IERC721.sol
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol)
pragma solidity ^0.8.0;
/**
* @dev Required interface of an ERC721 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 ERC721 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: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
*
* 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 caller.
*
* 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@4.7.3/token/ERC721/extensions/IERC721Metadata.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)
pragma solidity ^0.8.0;
/**
* @title ERC-721 Non-Fungible Token Standard, optional metadata extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Metadata is IERC721 {
/**
* @dev Returns the token collection name.
*/
function name() external view returns (string memory);
/**
* @dev Returns the token collection symbol.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
*/
function tokenURI(uint256 tokenId) external view returns (string memory);
}
// File: @openzeppelin/contracts@4.7.3/token/ERC721/ERC721.sol
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
* the Metadata extension, but not including the Enumerable extension, which is available separately as
* {ERC721Enumerable}.
*/
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
using Address for address;
using Strings for uint256;
// Token name
string private _name;
// Token symbol
string private _symbol;
// Mapping from token ID to owner address
mapping(uint256 => address) private _owners;
// Mapping owner address to token count
mapping(address => uint256) private _balances;
// Mapping from token ID to approved address
mapping(uint256 => address) private _tokenApprovals;
// Mapping from owner to operator approvals
mapping(address => mapping(address => bool)) private _operatorApprovals;
/**
* @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return
interfaceId == type(IERC721).interfaceId ||
interfaceId == type(IERC721Metadata).interfaceId ||
super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721-balanceOf}.
*/
function balanceOf(address owner) public view virtual override returns (uint256) {
require(owner != address(0), "ERC721: address zero is not a valid owner");
return _balances[owner];
}
/**
* @dev See {IERC721-ownerOf}.
*/
function ownerOf(uint256 tokenId) public view virtual override returns (address) {
address owner = _owners[tokenId];
require(owner != address(0), "ERC721: invalid token ID");
return owner;
}
/**
* @dev See {IERC721Metadata-name}.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev See {IERC721Metadata-symbol}.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev See {IERC721Metadata-tokenURI}.
*/
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
_requireMinted(tokenId);
string memory baseURI = _baseURI();
return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
}
/**
* @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
* token will be the concatenation of the `baseURI` and the `tokenId`. Empty
* by default, can be overridden in child contracts.
*/
function _baseURI() internal view virtual returns (string memory) {
return "";
}
/**
* @dev See {IERC721-approve}.
*/
function approve(address to, uint256 tokenId) public virtual override {
address owner = ERC721.ownerOf(tokenId);
require(to != owner, "ERC721: approval to current owner");
require(
_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
"ERC721: approve caller is not token owner nor approved for all"
);
_approve(to, tokenId);
}
/**
* @dev See {IERC721-getApproved}.
*/
function getApproved(uint256 tokenId) public view virtual override returns (address) {
_requireMinted(tokenId);
return _tokenApprovals[tokenId];
}
/**
* @dev See {IERC721-setApprovalForAll}.
*/
function setApprovalForAll(address operator, bool approved) public virtual override {
_setApprovalForAll(_msgSender(), operator, approved);
}
/**
* @dev See {IERC721-isApprovedForAll}.
*/
function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
return _operatorApprovals[owner][operator];
}
/**
* @dev See {IERC721-transferFrom}.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
//solhint-disable-next-line max-line-length
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved");
_transfer(from, to, tokenId);
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
safeTransferFrom(from, to, tokenId, "");
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes memory data
) public virtual override {
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved");
_safeTransfer(from, to, tokenId, data);
}
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* `data` is additional data, it has no specified format and it is sent in call to `to`.
*
* This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
* implement alternative mechanisms to perform token transfer, such as signature-based.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeTransfer(
address from,
address to,
uint256 tokenId,
bytes memory data
) internal virtual {
_transfer(from, to, tokenId);
require(_checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer");
}
/**
* @dev Returns whether `tokenId` exists.
*
* Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
*
* Tokens start existing when they are minted (`_mint`),
* and stop existing when they are burned (`_burn`).
*/
function _exists(uint256 tokenId) internal view virtual returns (bool) {
return _owners[tokenId] != address(0);
}
/**
* @dev Returns whether `spender` is allowed to manage `tokenId`.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
address owner = ERC721.ownerOf(tokenId);
return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender);
}
/**
* @dev Safely mints `tokenId` and transfers it to `to`.
*
* Requirements:
*
* - `tokenId` must not exist.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeMint(address to, uint256 tokenId) internal virtual {
_safeMint(to, tokenId, "");
}
/**
* @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
* forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
*/
function _safeMint(
address to,
uint256 tokenId,
bytes memory data
) internal virtual {
_mint(to, tokenId);
require(
_checkOnERC721Received(address(0), to, tokenId, data),
"ERC721: transfer to non ERC721Receiver implementer"
);
}
/**
* @dev Mints `tokenId` and transfers it to `to`.
*
* WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
*
* Requirements:
*
* - `tokenId` must not exist.
* - `to` cannot be the zero address.
*
* Emits a {Transfer} event.
*/
function _mint(address to, uint256 tokenId) internal virtual {
require(to != address(0), "ERC721: mint to the zero address");
require(!_exists(tokenId), "ERC721: token already minted");
_beforeTokenTransfer(address(0), to, tokenId);
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(address(0), to, tokenId);
_afterTokenTransfer(address(0), to, tokenId);
}
/**
* @dev Destroys `tokenId`.
* The approval is cleared when the token is burned.
*
* Requirements:
*
* - `tokenId` must exist.
*
* Emits a {Transfer} event.
*/
function _burn(uint256 tokenId) internal virtual {
address owner = ERC721.ownerOf(tokenId);
_beforeTokenTransfer(owner, address(0), tokenId);
// Clear approvals
_approve(address(0), tokenId);
_balances[owner] -= 1;
delete _owners[tokenId];
emit Transfer(owner, address(0), tokenId);
_afterTokenTransfer(owner, address(0), tokenId);
}
/**
* @dev Transfers `tokenId` from `from` to `to`.
* As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
*
* Emits a {Transfer} event.
*/
function _transfer(
address from,
address to,
uint256 tokenId
) internal virtual {
require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
require(to != address(0), "ERC721: transfer to the zero address");
_beforeTokenTransfer(from, to, tokenId);
// Clear approvals from the previous owner
_approve(address(0), tokenId);
_balances[from] -= 1;
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(from, to, tokenId);
_afterTokenTransfer(from, to, tokenId);
}
/**
* @dev Approve `to` to operate on `tokenId`
*
* Emits an {Approval} event.
*/
function _approve(address to, uint256 tokenId) internal virtual {
_tokenApprovals[tokenId] = to;
emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
}
/**
* @dev Approve `operator` to operate on all of `owner` tokens
*
* Emits an {ApprovalForAll} event.
*/
function _setApprovalForAll(
address owner,
address operator,
bool approved
) internal virtual {
require(owner != operator, "ERC721: approve to caller");
_operatorApprovals[owner][operator] = approved;
emit ApprovalForAll(owner, operator, approved);
}
/**
* @dev Reverts if the `tokenId` has not been minted yet.
*/
function _requireMinted(uint256 tokenId) internal view virtual {
require(_exists(tokenId), "ERC721: invalid token ID");
}
/**
* @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
* The call is not executed if the target address is not a contract.
*
* @param from address representing the previous owner of the given token ID
* @param to target address that will receive the tokens
* @param tokenId uint256 ID of the token to be transferred
* @param data bytes optional data to send along with the call
* @return bool whether the call correctly returned the expected magic value
*/
function _checkOnERC721Received(
address from,
address to,
uint256 tokenId,
bytes memory data
) private returns (bool) {
if (to.isContract()) {
try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) {
return retval == IERC721Receiver.onERC721Received.selector;
} catch (bytes memory reason) {
if (reason.length == 0) {
revert("ERC721: transfer to non ERC721Receiver implementer");
} else {
/// @solidity memory-safe-assembly
assembly {
revert(add(32, reason), mload(reason))
}
}
}
} else {
return true;
}
}
/**
* @dev Hook that is called before any token transfer. This includes minting
* and burning.
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
* - When `to` is zero, ``from``'s `tokenId` will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual {}
/**
* @dev Hook that is called after any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _afterTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual {}
}
// File: @openzeppelin/contracts@4.7.3/token/ERC721/extensions/ERC721URIStorage.sol
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/extensions/ERC721URIStorage.sol)
pragma solidity ^0.8.0;
/**
* @dev ERC721 token with storage based token URI management.
*/
abstract contract ERC721URIStorage is ERC721 {
using Strings for uint256;
// Optional mapping for token URIs
mapping(uint256 => string) private _tokenURIs;
/**
* @dev See {IERC721Metadata-tokenURI}.
*/
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
_requireMinted(tokenId);
string memory _tokenURI = _tokenURIs[tokenId];
string memory base = _baseURI();
// If there is no base URI, return the token URI.
if (bytes(base).length == 0) {
return _tokenURI;
}
// If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
if (bytes(_tokenURI).length > 0) {
return string(abi.encodePacked(base, _tokenURI));
}
return super.tokenURI(tokenId);
}
/**
* @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
_tokenURIs[tokenId] = _tokenURI;
}
/**
* @dev See {ERC721-_burn}. This override additionally checks to see if a
* token-specific URI was set for the token, and if so, it deletes the token URI from
* the storage mapping.
*/
function _burn(uint256 tokenId) internal virtual override {
super._burn(tokenId);
if (bytes(_tokenURIs[tokenId]).length != 0) {
delete _tokenURIs[tokenId];
}
}
}
// File: sparrownft.sol
pragma solidity ^0.8.4;
contract sparrownft is ERC721, ERC721URIStorage, Ownable {
using Counters for Counters.Counter;
Counters.Counter private _tokenIdCounter;
constructor() ERC721("Lundy House Sparrow NFT", "NFTSparrow") {}
function safeMint(address to, string memory uri) public onlyOwner {
uint256 tokenId = _tokenIdCounter.current();
_tokenIdCounter.increment();
_safeMint(to, tokenId);
_setTokenURI(tokenId, uri);
}
// The following functions are overrides required by Solidity.
function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) {
super._burn(tokenId);
}
function tokenURI(uint256 tokenId)
public
view
override(ERC721, ERC721URIStorage)
returns (string memory)
{
return super.tokenURI(tokenId);
}
//winthdraw fund for onwer
function withdraw() public payable onlyOwner {
(bool os, ) = payable(owner()).call{value: address(this).balance}("");
require(os);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"string","name":"uri","type":"string"}],"name":"safeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]Contract Creation Code
60806040523480156200001157600080fd5b506040518060400160405280601781526020017f4c756e647920486f7573652053706172726f77204e46540000000000000000008152506040518060400160405280600a81526020017f4e465453706172726f7700000000000000000000000000000000000000000000815250816000908051906020019062000096929190620001a6565b508060019080519060200190620000af929190620001a6565b505050620000d2620000c6620000d860201b60201c565b620000e060201b60201c565b620002bb565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001b49062000256565b90600052602060002090601f016020900481019282620001d8576000855562000224565b82601f10620001f357805160ff191683800117855562000224565b8280016001018555821562000224579182015b828111156200022357825182559160200191906001019062000206565b5b50905062000233919062000237565b5090565b5b808211156200025257600081600090555060010162000238565b5090565b600060028204905060018216806200026f57607f821691505b602082108114156200028657620002856200028c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b612e0580620002cb6000396000f3fe6080604052600436106101095760003560e01c8063715018a611610095578063b88d4fde11610064578063b88d4fde14610348578063c87b56dd14610371578063d204c45e146103ae578063e985e9c5146103d7578063f2fde38b1461041457610109565b8063715018a6146102b25780638da5cb5b146102c957806395d89b41146102f4578063a22cb4651461031f57610109565b806323b872dd116100dc57806323b872dd146101dc5780633ccfd60b1461020557806342842e0e1461020f5780636352211e1461023857806370a082311461027557610109565b806301ffc9a71461010e57806306fdde031461014b578063081812fc14610176578063095ea7b3146101b3575b600080fd5b34801561011a57600080fd5b5061013560048036038101906101309190611fdc565b61043d565b60405161014291906123d4565b60405180910390f35b34801561015757600080fd5b5061016061051f565b60405161016d91906123ef565b60405180910390f35b34801561018257600080fd5b5061019d6004803603810190610198919061202e565b6105b1565b6040516101aa919061236d565b60405180910390f35b3480156101bf57600080fd5b506101da60048036038101906101d59190611fa0565b6105f7565b005b3480156101e857600080fd5b5061020360048036038101906101fe9190611e46565b61070f565b005b61020d61076f565b005b34801561021b57600080fd5b5061023660048036038101906102319190611e46565b6107f7565b005b34801561024457600080fd5b5061025f600480360381019061025a919061202e565b610817565b60405161026c919061236d565b60405180910390f35b34801561028157600080fd5b5061029c60048036038101906102979190611de1565b6108c9565b6040516102a991906125d1565b60405180910390f35b3480156102be57600080fd5b506102c7610981565b005b3480156102d557600080fd5b506102de610995565b6040516102eb919061236d565b60405180910390f35b34801561030057600080fd5b506103096109bf565b60405161031691906123ef565b60405180910390f35b34801561032b57600080fd5b5061034660048036038101906103419190611f10565b610a51565b005b34801561035457600080fd5b5061036f600480360381019061036a9190611e95565b610a67565b005b34801561037d57600080fd5b506103986004803603810190610393919061202e565b610ac9565b6040516103a591906123ef565b60405180910390f35b3480156103ba57600080fd5b506103d560048036038101906103d09190611f4c565b610adb565b005b3480156103e357600080fd5b506103fe60048036038101906103f99190611e0a565b610b14565b60405161040b91906123d4565b60405180910390f35b34801561042057600080fd5b5061043b60048036038101906104369190611de1565b610ba8565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061050857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610518575061051782610c2c565b5b9050919050565b60606000805461052e90612832565b80601f016020809104026020016040519081016040528092919081815260200182805461055a90612832565b80156105a75780601f1061057c576101008083540402835291602001916105a7565b820191906000526020600020905b81548152906001019060200180831161058a57829003601f168201915b5050505050905090565b60006105bc82610c96565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061060282610817565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066a90612591565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610692610ce1565b73ffffffffffffffffffffffffffffffffffffffff1614806106c157506106c0816106bb610ce1565b610b14565b5b610700576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f790612511565b60405180910390fd5b61070a8383610ce9565b505050565b61072061071a610ce1565b82610da2565b61075f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610756906125b1565b60405180910390fd5b61076a838383610e37565b505050565b61077761109e565b6000610781610995565b73ffffffffffffffffffffffffffffffffffffffff16476040516107a490612358565b60006040518083038185875af1925050503d80600081146107e1576040519150601f19603f3d011682016040523d82523d6000602084013e6107e6565b606091505b50509050806107f457600080fd5b50565b61081283838360405180602001604052806000815250610a67565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156108c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b790612571565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561093a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610931906124d1565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61098961109e565b610993600061111c565b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546109ce90612832565b80601f01602080910402602001604051908101604052809291908181526020018280546109fa90612832565b8015610a475780601f10610a1c57610100808354040283529160200191610a47565b820191906000526020600020905b815481529060010190602001808311610a2a57829003601f168201915b5050505050905090565b610a63610a5c610ce1565b83836111e2565b5050565b610a78610a72610ce1565b83610da2565b610ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aae906125b1565b60405180910390fd5b610ac38484848461134f565b50505050565b6060610ad4826113ab565b9050919050565b610ae361109e565b6000610aef60086114be565b9050610afb60086114cc565b610b0583826114e2565b610b0f8183611500565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610bb061109e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1790612431565b60405180910390fd5b610c298161111c565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610c9f81611574565b610cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd590612571565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610d5c83610817565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610dae83610817565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610df05750610def8185610b14565b5b80610e2e57508373ffffffffffffffffffffffffffffffffffffffff16610e16846105b1565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16610e5782610817565b73ffffffffffffffffffffffffffffffffffffffff1614610ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea490612451565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1490612491565b60405180910390fd5b610f288383836115e0565b610f33600082610ce9565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f839190612748565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610fda91906126c1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46110998383836115e5565b505050565b6110a6610ce1565b73ffffffffffffffffffffffffffffffffffffffff166110c4610995565b73ffffffffffffffffffffffffffffffffffffffff161461111a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111190612551565b60405180910390fd5b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611251576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611248906124b1565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161134291906123d4565b60405180910390a3505050565b61135a848484610e37565b611366848484846115ea565b6113a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139c90612411565b60405180910390fd5b50505050565b60606113b682610c96565b60006006600084815260200190815260200160002080546113d690612832565b80601f016020809104026020016040519081016040528092919081815260200182805461140290612832565b801561144f5780601f106114245761010080835404028352916020019161144f565b820191906000526020600020905b81548152906001019060200180831161143257829003601f168201915b505050505090506000611460611781565b90506000815114156114765781925050506114b9565b6000825111156114ab578082604051602001611493929190612334565b604051602081830303815290604052925050506114b9565b6114b484611798565b925050505b919050565b600081600001549050919050565b6001816000016000828254019250508190555050565b6114fc828260405180602001604052806000815250611800565b5050565b61150982611574565b611548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153f906124f1565b60405180910390fd5b8060066000848152602001908152602001600020908051906020019061156f929190611c05565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b505050565b600061160b8473ffffffffffffffffffffffffffffffffffffffff1661185b565b15611774578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611634610ce1565b8786866040518563ffffffff1660e01b81526004016116569493929190612388565b602060405180830381600087803b15801561167057600080fd5b505af19250505080156116a157506040513d601f19601f8201168201806040525081019061169e9190612005565b60015b611724573d80600081146116d1576040519150601f19603f3d011682016040523d82523d6000602084013e6116d6565b606091505b5060008151141561171c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171390612411565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611779565b600190505b949350505050565b606060405180602001604052806000815250905090565b60606117a382610c96565b60006117ad611781565b905060008151116117cd57604051806020016040528060008152506117f8565b806117d78461187e565b6040516020016117e8929190612334565b6040516020818303038152906040525b915050919050565b61180a8383611a2b565b61181760008484846115ea565b611856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184d90612411565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b606060008214156118c6576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611a26565b600082905060005b600082146118f85780806118e190612895565b915050600a826118f19190612717565b91506118ce565b60008167ffffffffffffffff81111561193a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561196c5781602001600182028036833780820191505090505b5090505b60008514611a1f576001826119859190612748565b9150600a8561199491906128de565b60306119a091906126c1565b60f81b8183815181106119dc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611a189190612717565b9450611970565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9290612531565b60405180910390fd5b611aa481611574565b15611ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adb90612471565b60405180910390fd5b611af0600083836115e0565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b4091906126c1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611c01600083836115e5565b5050565b828054611c1190612832565b90600052602060002090601f016020900481019282611c335760008555611c7a565b82601f10611c4c57805160ff1916838001178555611c7a565b82800160010185558215611c7a579182015b82811115611c79578251825591602001919060010190611c5e565b5b509050611c879190611c8b565b5090565b5b80821115611ca4576000816000905550600101611c8c565b5090565b6000611cbb611cb684612611565b6125ec565b905082815260208101848484011115611cd357600080fd5b611cde8482856127f0565b509392505050565b6000611cf9611cf484612642565b6125ec565b905082815260208101848484011115611d1157600080fd5b611d1c8482856127f0565b509392505050565b600081359050611d3381612d73565b92915050565b600081359050611d4881612d8a565b92915050565b600081359050611d5d81612da1565b92915050565b600081519050611d7281612da1565b92915050565b600082601f830112611d8957600080fd5b8135611d99848260208601611ca8565b91505092915050565b600082601f830112611db357600080fd5b8135611dc3848260208601611ce6565b91505092915050565b600081359050611ddb81612db8565b92915050565b600060208284031215611df357600080fd5b6000611e0184828501611d24565b91505092915050565b60008060408385031215611e1d57600080fd5b6000611e2b85828601611d24565b9250506020611e3c85828601611d24565b9150509250929050565b600080600060608486031215611e5b57600080fd5b6000611e6986828701611d24565b9350506020611e7a86828701611d24565b9250506040611e8b86828701611dcc565b9150509250925092565b60008060008060808587031215611eab57600080fd5b6000611eb987828801611d24565b9450506020611eca87828801611d24565b9350506040611edb87828801611dcc565b925050606085013567ffffffffffffffff811115611ef857600080fd5b611f0487828801611d78565b91505092959194509250565b60008060408385031215611f2357600080fd5b6000611f3185828601611d24565b9250506020611f4285828601611d39565b9150509250929050565b60008060408385031215611f5f57600080fd5b6000611f6d85828601611d24565b925050602083013567ffffffffffffffff811115611f8a57600080fd5b611f9685828601611da2565b9150509250929050565b60008060408385031215611fb357600080fd5b6000611fc185828601611d24565b9250506020611fd285828601611dcc565b9150509250929050565b600060208284031215611fee57600080fd5b6000611ffc84828501611d4e565b91505092915050565b60006020828403121561201757600080fd5b600061202584828501611d63565b91505092915050565b60006020828403121561204057600080fd5b600061204e84828501611dcc565b91505092915050565b6120608161277c565b82525050565b61206f8161278e565b82525050565b600061208082612673565b61208a8185612689565b935061209a8185602086016127ff565b6120a3816129cb565b840191505092915050565b60006120b98261267e565b6120c381856126a5565b93506120d38185602086016127ff565b6120dc816129cb565b840191505092915050565b60006120f28261267e565b6120fc81856126b6565b935061210c8185602086016127ff565b80840191505092915050565b60006121256032836126a5565b9150612130826129dc565b604082019050919050565b60006121486026836126a5565b915061215382612a2b565b604082019050919050565b600061216b6025836126a5565b915061217682612a7a565b604082019050919050565b600061218e601c836126a5565b915061219982612ac9565b602082019050919050565b60006121b16024836126a5565b91506121bc82612af2565b604082019050919050565b60006121d46019836126a5565b91506121df82612b41565b602082019050919050565b60006121f76029836126a5565b915061220282612b6a565b604082019050919050565b600061221a602e836126a5565b915061222582612bb9565b604082019050919050565b600061223d603e836126a5565b915061224882612c08565b604082019050919050565b60006122606020836126a5565b915061226b82612c57565b602082019050919050565b60006122836020836126a5565b915061228e82612c80565b602082019050919050565b60006122a66018836126a5565b91506122b182612ca9565b602082019050919050565b60006122c96021836126a5565b91506122d482612cd2565b604082019050919050565b60006122ec60008361269a565b91506122f782612d21565b600082019050919050565b600061230f602e836126a5565b915061231a82612d24565b604082019050919050565b61232e816127e6565b82525050565b600061234082856120e7565b915061234c82846120e7565b91508190509392505050565b6000612363826122df565b9150819050919050565b60006020820190506123826000830184612057565b92915050565b600060808201905061239d6000830187612057565b6123aa6020830186612057565b6123b76040830185612325565b81810360608301526123c98184612075565b905095945050505050565b60006020820190506123e96000830184612066565b92915050565b6000602082019050818103600083015261240981846120ae565b905092915050565b6000602082019050818103600083015261242a81612118565b9050919050565b6000602082019050818103600083015261244a8161213b565b9050919050565b6000602082019050818103600083015261246a8161215e565b9050919050565b6000602082019050818103600083015261248a81612181565b9050919050565b600060208201905081810360008301526124aa816121a4565b9050919050565b600060208201905081810360008301526124ca816121c7565b9050919050565b600060208201905081810360008301526124ea816121ea565b9050919050565b6000602082019050818103600083015261250a8161220d565b9050919050565b6000602082019050818103600083015261252a81612230565b9050919050565b6000602082019050818103600083015261254a81612253565b9050919050565b6000602082019050818103600083015261256a81612276565b9050919050565b6000602082019050818103600083015261258a81612299565b9050919050565b600060208201905081810360008301526125aa816122bc565b9050919050565b600060208201905081810360008301526125ca81612302565b9050919050565b60006020820190506125e66000830184612325565b92915050565b60006125f6612607565b90506126028282612864565b919050565b6000604051905090565b600067ffffffffffffffff82111561262c5761262b61299c565b5b612635826129cb565b9050602081019050919050565b600067ffffffffffffffff82111561265d5761265c61299c565b5b612666826129cb565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006126cc826127e6565b91506126d7836127e6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561270c5761270b61290f565b5b828201905092915050565b6000612722826127e6565b915061272d836127e6565b92508261273d5761273c61293e565b5b828204905092915050565b6000612753826127e6565b915061275e836127e6565b9250828210156127715761277061290f565b5b828203905092915050565b6000612787826127c6565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561281d578082015181840152602081019050612802565b8381111561282c576000848401525b50505050565b6000600282049050600182168061284a57607f821691505b6020821081141561285e5761285d61296d565b5b50919050565b61286d826129cb565b810181811067ffffffffffffffff8211171561288c5761288b61299c565b5b80604052505050565b60006128a0826127e6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156128d3576128d261290f565b5b600182019050919050565b60006128e9826127e6565b91506128f4836127e6565b9250826129045761290361293e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b612d7c8161277c565b8114612d8757600080fd5b50565b612d938161278e565b8114612d9e57600080fd5b50565b612daa8161279a565b8114612db557600080fd5b50565b612dc1816127e6565b8114612dcc57600080fd5b5056fea2646970667358221220e2da7551d2bfcd42633b97b54e533d9d0353a49a8f4f0b1847eda073c87ec9ec64736f6c63430008040033
Deployed Bytecode
0x6080604052600436106101095760003560e01c8063715018a611610095578063b88d4fde11610064578063b88d4fde14610348578063c87b56dd14610371578063d204c45e146103ae578063e985e9c5146103d7578063f2fde38b1461041457610109565b8063715018a6146102b25780638da5cb5b146102c957806395d89b41146102f4578063a22cb4651461031f57610109565b806323b872dd116100dc57806323b872dd146101dc5780633ccfd60b1461020557806342842e0e1461020f5780636352211e1461023857806370a082311461027557610109565b806301ffc9a71461010e57806306fdde031461014b578063081812fc14610176578063095ea7b3146101b3575b600080fd5b34801561011a57600080fd5b5061013560048036038101906101309190611fdc565b61043d565b60405161014291906123d4565b60405180910390f35b34801561015757600080fd5b5061016061051f565b60405161016d91906123ef565b60405180910390f35b34801561018257600080fd5b5061019d6004803603810190610198919061202e565b6105b1565b6040516101aa919061236d565b60405180910390f35b3480156101bf57600080fd5b506101da60048036038101906101d59190611fa0565b6105f7565b005b3480156101e857600080fd5b5061020360048036038101906101fe9190611e46565b61070f565b005b61020d61076f565b005b34801561021b57600080fd5b5061023660048036038101906102319190611e46565b6107f7565b005b34801561024457600080fd5b5061025f600480360381019061025a919061202e565b610817565b60405161026c919061236d565b60405180910390f35b34801561028157600080fd5b5061029c60048036038101906102979190611de1565b6108c9565b6040516102a991906125d1565b60405180910390f35b3480156102be57600080fd5b506102c7610981565b005b3480156102d557600080fd5b506102de610995565b6040516102eb919061236d565b60405180910390f35b34801561030057600080fd5b506103096109bf565b60405161031691906123ef565b60405180910390f35b34801561032b57600080fd5b5061034660048036038101906103419190611f10565b610a51565b005b34801561035457600080fd5b5061036f600480360381019061036a9190611e95565b610a67565b005b34801561037d57600080fd5b506103986004803603810190610393919061202e565b610ac9565b6040516103a591906123ef565b60405180910390f35b3480156103ba57600080fd5b506103d560048036038101906103d09190611f4c565b610adb565b005b3480156103e357600080fd5b506103fe60048036038101906103f99190611e0a565b610b14565b60405161040b91906123d4565b60405180910390f35b34801561042057600080fd5b5061043b60048036038101906104369190611de1565b610ba8565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061050857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610518575061051782610c2c565b5b9050919050565b60606000805461052e90612832565b80601f016020809104026020016040519081016040528092919081815260200182805461055a90612832565b80156105a75780601f1061057c576101008083540402835291602001916105a7565b820191906000526020600020905b81548152906001019060200180831161058a57829003601f168201915b5050505050905090565b60006105bc82610c96565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061060282610817565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066a90612591565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610692610ce1565b73ffffffffffffffffffffffffffffffffffffffff1614806106c157506106c0816106bb610ce1565b610b14565b5b610700576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f790612511565b60405180910390fd5b61070a8383610ce9565b505050565b61072061071a610ce1565b82610da2565b61075f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610756906125b1565b60405180910390fd5b61076a838383610e37565b505050565b61077761109e565b6000610781610995565b73ffffffffffffffffffffffffffffffffffffffff16476040516107a490612358565b60006040518083038185875af1925050503d80600081146107e1576040519150601f19603f3d011682016040523d82523d6000602084013e6107e6565b606091505b50509050806107f457600080fd5b50565b61081283838360405180602001604052806000815250610a67565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156108c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b790612571565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561093a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610931906124d1565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61098961109e565b610993600061111c565b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546109ce90612832565b80601f01602080910402602001604051908101604052809291908181526020018280546109fa90612832565b8015610a475780601f10610a1c57610100808354040283529160200191610a47565b820191906000526020600020905b815481529060010190602001808311610a2a57829003601f168201915b5050505050905090565b610a63610a5c610ce1565b83836111e2565b5050565b610a78610a72610ce1565b83610da2565b610ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aae906125b1565b60405180910390fd5b610ac38484848461134f565b50505050565b6060610ad4826113ab565b9050919050565b610ae361109e565b6000610aef60086114be565b9050610afb60086114cc565b610b0583826114e2565b610b0f8183611500565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610bb061109e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1790612431565b60405180910390fd5b610c298161111c565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610c9f81611574565b610cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd590612571565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610d5c83610817565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610dae83610817565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610df05750610def8185610b14565b5b80610e2e57508373ffffffffffffffffffffffffffffffffffffffff16610e16846105b1565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16610e5782610817565b73ffffffffffffffffffffffffffffffffffffffff1614610ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea490612451565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1490612491565b60405180910390fd5b610f288383836115e0565b610f33600082610ce9565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f839190612748565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610fda91906126c1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46110998383836115e5565b505050565b6110a6610ce1565b73ffffffffffffffffffffffffffffffffffffffff166110c4610995565b73ffffffffffffffffffffffffffffffffffffffff161461111a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111190612551565b60405180910390fd5b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611251576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611248906124b1565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161134291906123d4565b60405180910390a3505050565b61135a848484610e37565b611366848484846115ea565b6113a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139c90612411565b60405180910390fd5b50505050565b60606113b682610c96565b60006006600084815260200190815260200160002080546113d690612832565b80601f016020809104026020016040519081016040528092919081815260200182805461140290612832565b801561144f5780601f106114245761010080835404028352916020019161144f565b820191906000526020600020905b81548152906001019060200180831161143257829003601f168201915b505050505090506000611460611781565b90506000815114156114765781925050506114b9565b6000825111156114ab578082604051602001611493929190612334565b604051602081830303815290604052925050506114b9565b6114b484611798565b925050505b919050565b600081600001549050919050565b6001816000016000828254019250508190555050565b6114fc828260405180602001604052806000815250611800565b5050565b61150982611574565b611548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153f906124f1565b60405180910390fd5b8060066000848152602001908152602001600020908051906020019061156f929190611c05565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b505050565b600061160b8473ffffffffffffffffffffffffffffffffffffffff1661185b565b15611774578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611634610ce1565b8786866040518563ffffffff1660e01b81526004016116569493929190612388565b602060405180830381600087803b15801561167057600080fd5b505af19250505080156116a157506040513d601f19601f8201168201806040525081019061169e9190612005565b60015b611724573d80600081146116d1576040519150601f19603f3d011682016040523d82523d6000602084013e6116d6565b606091505b5060008151141561171c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171390612411565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611779565b600190505b949350505050565b606060405180602001604052806000815250905090565b60606117a382610c96565b60006117ad611781565b905060008151116117cd57604051806020016040528060008152506117f8565b806117d78461187e565b6040516020016117e8929190612334565b6040516020818303038152906040525b915050919050565b61180a8383611a2b565b61181760008484846115ea565b611856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184d90612411565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b606060008214156118c6576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611a26565b600082905060005b600082146118f85780806118e190612895565b915050600a826118f19190612717565b91506118ce565b60008167ffffffffffffffff81111561193a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561196c5781602001600182028036833780820191505090505b5090505b60008514611a1f576001826119859190612748565b9150600a8561199491906128de565b60306119a091906126c1565b60f81b8183815181106119dc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611a189190612717565b9450611970565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9290612531565b60405180910390fd5b611aa481611574565b15611ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adb90612471565b60405180910390fd5b611af0600083836115e0565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b4091906126c1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611c01600083836115e5565b5050565b828054611c1190612832565b90600052602060002090601f016020900481019282611c335760008555611c7a565b82601f10611c4c57805160ff1916838001178555611c7a565b82800160010185558215611c7a579182015b82811115611c79578251825591602001919060010190611c5e565b5b509050611c879190611c8b565b5090565b5b80821115611ca4576000816000905550600101611c8c565b5090565b6000611cbb611cb684612611565b6125ec565b905082815260208101848484011115611cd357600080fd5b611cde8482856127f0565b509392505050565b6000611cf9611cf484612642565b6125ec565b905082815260208101848484011115611d1157600080fd5b611d1c8482856127f0565b509392505050565b600081359050611d3381612d73565b92915050565b600081359050611d4881612d8a565b92915050565b600081359050611d5d81612da1565b92915050565b600081519050611d7281612da1565b92915050565b600082601f830112611d8957600080fd5b8135611d99848260208601611ca8565b91505092915050565b600082601f830112611db357600080fd5b8135611dc3848260208601611ce6565b91505092915050565b600081359050611ddb81612db8565b92915050565b600060208284031215611df357600080fd5b6000611e0184828501611d24565b91505092915050565b60008060408385031215611e1d57600080fd5b6000611e2b85828601611d24565b9250506020611e3c85828601611d24565b9150509250929050565b600080600060608486031215611e5b57600080fd5b6000611e6986828701611d24565b9350506020611e7a86828701611d24565b9250506040611e8b86828701611dcc565b9150509250925092565b60008060008060808587031215611eab57600080fd5b6000611eb987828801611d24565b9450506020611eca87828801611d24565b9350506040611edb87828801611dcc565b925050606085013567ffffffffffffffff811115611ef857600080fd5b611f0487828801611d78565b91505092959194509250565b60008060408385031215611f2357600080fd5b6000611f3185828601611d24565b9250506020611f4285828601611d39565b9150509250929050565b60008060408385031215611f5f57600080fd5b6000611f6d85828601611d24565b925050602083013567ffffffffffffffff811115611f8a57600080fd5b611f9685828601611da2565b9150509250929050565b60008060408385031215611fb357600080fd5b6000611fc185828601611d24565b9250506020611fd285828601611dcc565b9150509250929050565b600060208284031215611fee57600080fd5b6000611ffc84828501611d4e565b91505092915050565b60006020828403121561201757600080fd5b600061202584828501611d63565b91505092915050565b60006020828403121561204057600080fd5b600061204e84828501611dcc565b91505092915050565b6120608161277c565b82525050565b61206f8161278e565b82525050565b600061208082612673565b61208a8185612689565b935061209a8185602086016127ff565b6120a3816129cb565b840191505092915050565b60006120b98261267e565b6120c381856126a5565b93506120d38185602086016127ff565b6120dc816129cb565b840191505092915050565b60006120f28261267e565b6120fc81856126b6565b935061210c8185602086016127ff565b80840191505092915050565b60006121256032836126a5565b9150612130826129dc565b604082019050919050565b60006121486026836126a5565b915061215382612a2b565b604082019050919050565b600061216b6025836126a5565b915061217682612a7a565b604082019050919050565b600061218e601c836126a5565b915061219982612ac9565b602082019050919050565b60006121b16024836126a5565b91506121bc82612af2565b604082019050919050565b60006121d46019836126a5565b91506121df82612b41565b602082019050919050565b60006121f76029836126a5565b915061220282612b6a565b604082019050919050565b600061221a602e836126a5565b915061222582612bb9565b604082019050919050565b600061223d603e836126a5565b915061224882612c08565b604082019050919050565b60006122606020836126a5565b915061226b82612c57565b602082019050919050565b60006122836020836126a5565b915061228e82612c80565b602082019050919050565b60006122a66018836126a5565b91506122b182612ca9565b602082019050919050565b60006122c96021836126a5565b91506122d482612cd2565b604082019050919050565b60006122ec60008361269a565b91506122f782612d21565b600082019050919050565b600061230f602e836126a5565b915061231a82612d24565b604082019050919050565b61232e816127e6565b82525050565b600061234082856120e7565b915061234c82846120e7565b91508190509392505050565b6000612363826122df565b9150819050919050565b60006020820190506123826000830184612057565b92915050565b600060808201905061239d6000830187612057565b6123aa6020830186612057565b6123b76040830185612325565b81810360608301526123c98184612075565b905095945050505050565b60006020820190506123e96000830184612066565b92915050565b6000602082019050818103600083015261240981846120ae565b905092915050565b6000602082019050818103600083015261242a81612118565b9050919050565b6000602082019050818103600083015261244a8161213b565b9050919050565b6000602082019050818103600083015261246a8161215e565b9050919050565b6000602082019050818103600083015261248a81612181565b9050919050565b600060208201905081810360008301526124aa816121a4565b9050919050565b600060208201905081810360008301526124ca816121c7565b9050919050565b600060208201905081810360008301526124ea816121ea565b9050919050565b6000602082019050818103600083015261250a8161220d565b9050919050565b6000602082019050818103600083015261252a81612230565b9050919050565b6000602082019050818103600083015261254a81612253565b9050919050565b6000602082019050818103600083015261256a81612276565b9050919050565b6000602082019050818103600083015261258a81612299565b9050919050565b600060208201905081810360008301526125aa816122bc565b9050919050565b600060208201905081810360008301526125ca81612302565b9050919050565b60006020820190506125e66000830184612325565b92915050565b60006125f6612607565b90506126028282612864565b919050565b6000604051905090565b600067ffffffffffffffff82111561262c5761262b61299c565b5b612635826129cb565b9050602081019050919050565b600067ffffffffffffffff82111561265d5761265c61299c565b5b612666826129cb565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006126cc826127e6565b91506126d7836127e6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561270c5761270b61290f565b5b828201905092915050565b6000612722826127e6565b915061272d836127e6565b92508261273d5761273c61293e565b5b828204905092915050565b6000612753826127e6565b915061275e836127e6565b9250828210156127715761277061290f565b5b828203905092915050565b6000612787826127c6565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561281d578082015181840152602081019050612802565b8381111561282c576000848401525b50505050565b6000600282049050600182168061284a57607f821691505b6020821081141561285e5761285d61296d565b5b50919050565b61286d826129cb565b810181811067ffffffffffffffff8211171561288c5761288b61299c565b5b80604052505050565b60006128a0826127e6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156128d3576128d261290f565b5b600182019050919050565b60006128e9826127e6565b91506128f4836127e6565b9250826129045761290361293e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b612d7c8161277c565b8114612d8757600080fd5b50565b612d938161278e565b8114612d9e57600080fd5b50565b612daa8161279a565b8114612db557600080fd5b50565b612dc1816127e6565b8114612dcc57600080fd5b5056fea2646970667358221220e2da7551d2bfcd42633b97b54e533d9d0353a49a8f4f0b1847eda073c87ec9ec64736f6c63430008040033
Deployed Bytecode Sourcemap
41585:1052:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26372:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27299:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28812:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28329:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29512:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42487:147;;;:::i;:::-;;29919:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27010:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26741:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6866:103;;;;;;;;;;;;;:::i;:::-;;6218:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27468:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29055:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30175:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42251:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41814:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29281:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7124:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26372:305;26474:4;26526:25;26511:40;;;:11;:40;;;;:105;;;;26583:33;26568:48;;;:11;:48;;;;26511:105;:158;;;;26633:36;26657:11;26633:23;:36::i;:::-;26511:158;26491:178;;26372:305;;;:::o;27299:100::-;27353:13;27386:5;27379:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27299:100;:::o;28812:171::-;28888:7;28908:23;28923:7;28908:14;:23::i;:::-;28951:15;:24;28967:7;28951:24;;;;;;;;;;;;;;;;;;;;;28944:31;;28812:171;;;:::o;28329:417::-;28410:13;28426:23;28441:7;28426:14;:23::i;:::-;28410:39;;28474:5;28468:11;;:2;:11;;;;28460:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28568:5;28552:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28577:37;28594:5;28601:12;:10;:12::i;:::-;28577:16;:37::i;:::-;28552:62;28530:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;28717:21;28726:2;28730:7;28717:8;:21::i;:::-;28329:417;;;:::o;29512:336::-;29707:41;29726:12;:10;:12::i;:::-;29740:7;29707:18;:41::i;:::-;29699:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;29812:28;29822:4;29828:2;29832:7;29812:9;:28::i;:::-;29512:336;;;:::o;42487:147::-;6104:13;:11;:13::i;:::-;42542:7:::1;42563;:5;:7::i;:::-;42555:21;;42584;42555:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42541:69;;;42625:2;42617:11;;;::::0;::::1;;6128:1;42487:147::o:0;29919:185::-;30057:39;30074:4;30080:2;30084:7;30057:39;;;;;;;;;;;;:16;:39::i;:::-;29919:185;;;:::o;27010:222::-;27082:7;27102:13;27118:7;:16;27126:7;27118:16;;;;;;;;;;;;;;;;;;;;;27102:32;;27170:1;27153:19;;:5;:19;;;;27145:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;27219:5;27212:12;;;27010:222;;;:::o;26741:207::-;26813:7;26858:1;26841:19;;:5;:19;;;;26833:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26924:9;:16;26934:5;26924:16;;;;;;;;;;;;;;;;26917:23;;26741:207;;;:::o;6866:103::-;6104:13;:11;:13::i;:::-;6931:30:::1;6958:1;6931:18;:30::i;:::-;6866:103::o:0;6218:87::-;6264:7;6291:6;;;;;;;;;;;6284:13;;6218:87;:::o;27468:104::-;27524:13;27557:7;27550:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27468:104;:::o;29055:155::-;29150:52;29169:12;:10;:12::i;:::-;29183:8;29193;29150:18;:52::i;:::-;29055:155;;:::o;30175:323::-;30349:41;30368:12;:10;:12::i;:::-;30382:7;30349:18;:41::i;:::-;30341:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;30452:38;30466:4;30472:2;30476:7;30485:4;30452:13;:38::i;:::-;30175:323;;;;:::o;42251:196::-;42378:13;42416:23;42431:7;42416:14;:23::i;:::-;42409:30;;42251:196;;;:::o;41814:236::-;6104:13;:11;:13::i;:::-;41891:15:::1;41909:25;:15;:23;:25::i;:::-;41891:43;;41945:27;:15;:25;:27::i;:::-;41983:22;41993:2;41997:7;41983:9;:22::i;:::-;42016:26;42029:7;42038:3;42016:12;:26::i;:::-;6128:1;41814:236:::0;;:::o;29281:164::-;29378:4;29402:18;:25;29421:5;29402:25;;;;;;;;;;;;;;;:35;29428:8;29402:35;;;;;;;;;;;;;;;;;;;;;;;;;29395:42;;29281:164;;;;:::o;7124:201::-;6104:13;:11;:13::i;:::-;7233:1:::1;7213:22;;:8;:22;;;;7205:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7289:28;7308:8;7289:18;:28::i;:::-;7124:201:::0;:::o;19096:157::-;19181:4;19220:25;19205:40;;;:11;:40;;;;19198:47;;19096:157;;;:::o;36787:135::-;36869:16;36877:7;36869;:16::i;:::-;36861:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;36787:135;:::o;4763:98::-;4816:7;4843:10;4836:17;;4763:98;:::o;36066:174::-;36168:2;36141:15;:24;36157:7;36141:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36224:7;36220:2;36186:46;;36195:23;36210:7;36195:14;:23::i;:::-;36186:46;;;;;;;;;;;;36066:174;;:::o;32299:264::-;32392:4;32409:13;32425:23;32440:7;32425:14;:23::i;:::-;32409:39;;32478:5;32467:16;;:7;:16;;;:52;;;;32487:32;32504:5;32511:7;32487:16;:32::i;:::-;32467:52;:87;;;;32547:7;32523:31;;:20;32535:7;32523:11;:20::i;:::-;:31;;;32467:87;32459:96;;;32299:264;;;;:::o;35322:625::-;35481:4;35454:31;;:23;35469:7;35454:14;:23::i;:::-;:31;;;35446:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;35560:1;35546:16;;:2;:16;;;;35538:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35616:39;35637:4;35643:2;35647:7;35616:20;:39::i;:::-;35720:29;35737:1;35741:7;35720:8;:29::i;:::-;35781:1;35762:9;:15;35772:4;35762:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35810:1;35793:9;:13;35803:2;35793:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35841:2;35822:7;:16;35830:7;35822:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35880:7;35876:2;35861:27;;35870:4;35861:27;;;;;;;;;;;;35901:38;35921:4;35927:2;35931:7;35901:19;:38::i;:::-;35322:625;;;:::o;6383:132::-;6458:12;:10;:12::i;:::-;6447:23;;:7;:5;:7::i;:::-;:23;;;6439:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6383:132::o;7485:191::-;7559:16;7578:6;;;;;;;;;;;7559:25;;7604:8;7595:6;;:17;;;;;;;;;;;;;;;;;;7659:8;7628:40;;7649:8;7628:40;;;;;;;;;;;;7485:191;;:::o;36383:315::-;36538:8;36529:17;;:5;:17;;;;36521:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36625:8;36587:18;:25;36606:5;36587:25;;;;;;;;;;;;;;;:35;36613:8;36587:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36671:8;36649:41;;36664:5;36649:41;;;36681:8;36649:41;;;;;;:::i;:::-;;;;;;;;36383:315;;;:::o;31379:313::-;31535:28;31545:4;31551:2;31555:7;31535:9;:28::i;:::-;31582:47;31605:4;31611:2;31615:7;31624:4;31582:22;:47::i;:::-;31574:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;31379:313;;;;:::o;40086:624::-;40159:13;40185:23;40200:7;40185:14;:23::i;:::-;40221;40247:10;:19;40258:7;40247:19;;;;;;;;;;;40221:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40277:18;40298:10;:8;:10::i;:::-;40277:31;;40406:1;40390:4;40384:18;:23;40380:72;;;40431:9;40424:16;;;;;;40380:72;40582:1;40562:9;40556:23;:27;40552:108;;;40631:4;40637:9;40614:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40600:48;;;;;;40552:108;40679:23;40694:7;40679:14;:23::i;:::-;40672:30;;;;40086:624;;;;:::o;982:114::-;1047:7;1074;:14;;;1067:21;;982:114;;;:::o;1104:127::-;1211:1;1193:7;:14;;;:19;;;;;;;;;;;1104:127;:::o;32905:110::-;32981:26;32991:2;32995:7;32981:26;;;;;;;;;;;;:9;:26::i;:::-;32905:110;;:::o;40866:217::-;40966:16;40974:7;40966;:16::i;:::-;40958:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;41066:9;41044:10;:19;41055:7;41044:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;40866:217;;:::o;32005:127::-;32070:4;32122:1;32094:30;;:7;:16;32102:7;32094:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32087:37;;32005:127;;;:::o;38911:126::-;;;;:::o;39422:125::-;;;;:::o;37486:853::-;37640:4;37661:15;:2;:13;;;:15::i;:::-;37657:675;;;37713:2;37697:36;;;37734:12;:10;:12::i;:::-;37748:4;37754:7;37763:4;37697:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37693:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37955:1;37938:6;:13;:18;37934:328;;;37981:60;;;;;;;;;;:::i;:::-;;;;;;;;37934:328;38212:6;38206:13;38197:6;38193:2;38189:15;38182:38;37693:584;37829:41;;;37819:51;;;:6;:51;;;;37812:58;;;;;37657:675;38316:4;38309:11;;37486:853;;;;;;;:::o;28173:94::-;28224:13;28250:9;;;;;;;;;;;;;;28173:94;:::o;27643:281::-;27716:13;27742:23;27757:7;27742:14;:23::i;:::-;27778:21;27802:10;:8;:10::i;:::-;27778:34;;27854:1;27836:7;27830:21;:25;:86;;;;;;;;;;;;;;;;;27882:7;27891:18;:7;:16;:18::i;:::-;27865:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27830:86;27823:93;;;27643:281;;;:::o;33242:319::-;33371:18;33377:2;33381:7;33371:5;:18::i;:::-;33422:53;33453:1;33457:2;33461:7;33470:4;33422:22;:53::i;:::-;33400:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;33242:319;;;:::o;8922:326::-;8982:4;9239:1;9217:7;:19;;;:23;9210:30;;8922:326;;;:::o;2011:723::-;2067:13;2297:1;2288:5;:10;2284:53;;;2315:10;;;;;;;;;;;;;;;;;;;;;2284:53;2347:12;2362:5;2347:20;;2378:14;2403:78;2418:1;2410:4;:9;2403:78;;2436:8;;;;;:::i;:::-;;;;2467:2;2459:10;;;;;:::i;:::-;;;2403:78;;;2491:19;2523:6;2513:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2491:39;;2541:154;2557:1;2548:5;:10;2541:154;;2585:1;2575:11;;;;;:::i;:::-;;;2652:2;2644:5;:10;;;;:::i;:::-;2631:2;:24;;;;:::i;:::-;2618:39;;2601:6;2608;2601:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;2681:2;2672:11;;;;;:::i;:::-;;;2541:154;;;2719:6;2705:21;;;;;2011:723;;;;:::o;33897:439::-;33991:1;33977:16;;:2;:16;;;;33969:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34050:16;34058:7;34050;:16::i;:::-;34049:17;34041:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34112:45;34141:1;34145:2;34149:7;34112:20;:45::i;:::-;34187:1;34170:9;:13;34180:2;34170:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34218:2;34199:7;:16;34207:7;34199:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34263:7;34259:2;34238:33;;34255:1;34238:33;;;;;;;;;;;;34284:44;34312:1;34316:2;34320:7;34284:19;:44::i;:::-;33897:439;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;434:5;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;753:5;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;852:133::-;895:5;933:6;920:20;911:29;;949:30;973:5;949:30;:::i;:::-;901:84;;;;:::o;991:137::-;1036:5;1074:6;1061:20;1052:29;;1090:32;1116:5;1090:32;:::i;:::-;1042:86;;;;:::o;1134:141::-;1190:5;1221:6;1215:13;1206:22;;1237:32;1263:5;1237:32;:::i;:::-;1196:79;;;;:::o;1294:271::-;1349:5;1398:3;1391:4;1383:6;1379:17;1375:27;1365:2;;1416:1;1413;1406:12;1365:2;1456:6;1443:20;1481:78;1555:3;1547:6;1540:4;1532:6;1528:17;1481:78;:::i;:::-;1472:87;;1355:210;;;;;:::o;1585:273::-;1641:5;1690:3;1683:4;1675:6;1671:17;1667:27;1657:2;;1708:1;1705;1698:12;1657:2;1748:6;1735:20;1773:79;1848:3;1840:6;1833:4;1825:6;1821:17;1773:79;:::i;:::-;1764:88;;1647:211;;;;;:::o;1864:139::-;1910:5;1948:6;1935:20;1926:29;;1964:33;1991:5;1964:33;:::i;:::-;1916:87;;;;:::o;2009:262::-;2068:6;2117:2;2105:9;2096:7;2092:23;2088:32;2085:2;;;2133:1;2130;2123:12;2085:2;2176:1;2201:53;2246:7;2237:6;2226:9;2222:22;2201:53;:::i;:::-;2191:63;;2147:117;2075:196;;;;:::o;2277:407::-;2345:6;2353;2402:2;2390:9;2381:7;2377:23;2373:32;2370:2;;;2418:1;2415;2408:12;2370:2;2461:1;2486:53;2531:7;2522:6;2511:9;2507:22;2486:53;:::i;:::-;2476:63;;2432:117;2588:2;2614:53;2659:7;2650:6;2639:9;2635:22;2614:53;:::i;:::-;2604:63;;2559:118;2360:324;;;;;:::o;2690:552::-;2767:6;2775;2783;2832:2;2820:9;2811:7;2807:23;2803:32;2800:2;;;2848:1;2845;2838:12;2800:2;2891:1;2916:53;2961:7;2952:6;2941:9;2937:22;2916:53;:::i;:::-;2906:63;;2862:117;3018:2;3044:53;3089:7;3080:6;3069:9;3065:22;3044:53;:::i;:::-;3034:63;;2989:118;3146:2;3172:53;3217:7;3208:6;3197:9;3193:22;3172:53;:::i;:::-;3162:63;;3117:118;2790:452;;;;;:::o;3248:809::-;3343:6;3351;3359;3367;3416:3;3404:9;3395:7;3391:23;3387:33;3384:2;;;3433:1;3430;3423:12;3384:2;3476:1;3501:53;3546:7;3537:6;3526:9;3522:22;3501:53;:::i;:::-;3491:63;;3447:117;3603:2;3629:53;3674:7;3665:6;3654:9;3650:22;3629:53;:::i;:::-;3619:63;;3574:118;3731:2;3757:53;3802:7;3793:6;3782:9;3778:22;3757:53;:::i;:::-;3747:63;;3702:118;3887:2;3876:9;3872:18;3859:32;3918:18;3910:6;3907:30;3904:2;;;3950:1;3947;3940:12;3904:2;3978:62;4032:7;4023:6;4012:9;4008:22;3978:62;:::i;:::-;3968:72;;3830:220;3374:683;;;;;;;:::o;4063:401::-;4128:6;4136;4185:2;4173:9;4164:7;4160:23;4156:32;4153:2;;;4201:1;4198;4191:12;4153:2;4244:1;4269:53;4314:7;4305:6;4294:9;4290:22;4269:53;:::i;:::-;4259:63;;4215:117;4371:2;4397:50;4439:7;4430:6;4419:9;4415:22;4397:50;:::i;:::-;4387:60;;4342:115;4143:321;;;;;:::o;4470:520::-;4548:6;4556;4605:2;4593:9;4584:7;4580:23;4576:32;4573:2;;;4621:1;4618;4611:12;4573:2;4664:1;4689:53;4734:7;4725:6;4714:9;4710:22;4689:53;:::i;:::-;4679:63;;4635:117;4819:2;4808:9;4804:18;4791:32;4850:18;4842:6;4839:30;4836:2;;;4882:1;4879;4872:12;4836:2;4910:63;4965:7;4956:6;4945:9;4941:22;4910:63;:::i;:::-;4900:73;;4762:221;4563:427;;;;;:::o;4996:407::-;5064:6;5072;5121:2;5109:9;5100:7;5096:23;5092:32;5089:2;;;5137:1;5134;5127:12;5089:2;5180:1;5205:53;5250:7;5241:6;5230:9;5226:22;5205:53;:::i;:::-;5195:63;;5151:117;5307:2;5333:53;5378:7;5369:6;5358:9;5354:22;5333:53;:::i;:::-;5323:63;;5278:118;5079:324;;;;;:::o;5409:260::-;5467:6;5516:2;5504:9;5495:7;5491:23;5487:32;5484:2;;;5532:1;5529;5522:12;5484:2;5575:1;5600:52;5644:7;5635:6;5624:9;5620:22;5600:52;:::i;:::-;5590:62;;5546:116;5474:195;;;;:::o;5675:282::-;5744:6;5793:2;5781:9;5772:7;5768:23;5764:32;5761:2;;;5809:1;5806;5799:12;5761:2;5852:1;5877:63;5932:7;5923:6;5912:9;5908:22;5877:63;:::i;:::-;5867:73;;5823:127;5751:206;;;;:::o;5963:262::-;6022:6;6071:2;6059:9;6050:7;6046:23;6042:32;6039:2;;;6087:1;6084;6077:12;6039:2;6130:1;6155:53;6200:7;6191:6;6180:9;6176:22;6155:53;:::i;:::-;6145:63;;6101:117;6029:196;;;;:::o;6231:118::-;6318:24;6336:5;6318:24;:::i;:::-;6313:3;6306:37;6296:53;;:::o;6355:109::-;6436:21;6451:5;6436:21;:::i;:::-;6431:3;6424:34;6414:50;;:::o;6470:360::-;6556:3;6584:38;6616:5;6584:38;:::i;:::-;6638:70;6701:6;6696:3;6638:70;:::i;:::-;6631:77;;6717:52;6762:6;6757:3;6750:4;6743:5;6739:16;6717:52;:::i;:::-;6794:29;6816:6;6794:29;:::i;:::-;6789:3;6785:39;6778:46;;6560:270;;;;;:::o;6836:364::-;6924:3;6952:39;6985:5;6952:39;:::i;:::-;7007:71;7071:6;7066:3;7007:71;:::i;:::-;7000:78;;7087:52;7132:6;7127:3;7120:4;7113:5;7109:16;7087:52;:::i;:::-;7164:29;7186:6;7164:29;:::i;:::-;7159:3;7155:39;7148:46;;6928:272;;;;;:::o;7206:377::-;7312:3;7340:39;7373:5;7340:39;:::i;:::-;7395:89;7477:6;7472:3;7395:89;:::i;:::-;7388:96;;7493:52;7538:6;7533:3;7526:4;7519:5;7515:16;7493:52;:::i;:::-;7570:6;7565:3;7561:16;7554:23;;7316:267;;;;;:::o;7589:366::-;7731:3;7752:67;7816:2;7811:3;7752:67;:::i;:::-;7745:74;;7828:93;7917:3;7828:93;:::i;:::-;7946:2;7941:3;7937:12;7930:19;;7735:220;;;:::o;7961:366::-;8103:3;8124:67;8188:2;8183:3;8124:67;:::i;:::-;8117:74;;8200:93;8289:3;8200:93;:::i;:::-;8318:2;8313:3;8309:12;8302:19;;8107:220;;;:::o;8333:366::-;8475:3;8496:67;8560:2;8555:3;8496:67;:::i;:::-;8489:74;;8572:93;8661:3;8572:93;:::i;:::-;8690:2;8685:3;8681:12;8674:19;;8479:220;;;:::o;8705:366::-;8847:3;8868:67;8932:2;8927:3;8868:67;:::i;:::-;8861:74;;8944:93;9033:3;8944:93;:::i;:::-;9062:2;9057:3;9053:12;9046:19;;8851:220;;;:::o;9077:366::-;9219:3;9240:67;9304:2;9299:3;9240:67;:::i;:::-;9233:74;;9316:93;9405:3;9316:93;:::i;:::-;9434:2;9429:3;9425:12;9418:19;;9223:220;;;:::o;9449:366::-;9591:3;9612:67;9676:2;9671:3;9612:67;:::i;:::-;9605:74;;9688:93;9777:3;9688:93;:::i;:::-;9806:2;9801:3;9797:12;9790:19;;9595:220;;;:::o;9821:366::-;9963:3;9984:67;10048:2;10043:3;9984:67;:::i;:::-;9977:74;;10060:93;10149:3;10060:93;:::i;:::-;10178:2;10173:3;10169:12;10162:19;;9967:220;;;:::o;10193:366::-;10335:3;10356:67;10420:2;10415:3;10356:67;:::i;:::-;10349:74;;10432:93;10521:3;10432:93;:::i;:::-;10550:2;10545:3;10541:12;10534:19;;10339:220;;;:::o;10565:366::-;10707:3;10728:67;10792:2;10787:3;10728:67;:::i;:::-;10721:74;;10804:93;10893:3;10804:93;:::i;:::-;10922:2;10917:3;10913:12;10906:19;;10711:220;;;:::o;10937:366::-;11079:3;11100:67;11164:2;11159:3;11100:67;:::i;:::-;11093:74;;11176:93;11265:3;11176:93;:::i;:::-;11294:2;11289:3;11285:12;11278:19;;11083:220;;;:::o;11309:366::-;11451:3;11472:67;11536:2;11531:3;11472:67;:::i;:::-;11465:74;;11548:93;11637:3;11548:93;:::i;:::-;11666:2;11661:3;11657:12;11650:19;;11455:220;;;:::o;11681:366::-;11823:3;11844:67;11908:2;11903:3;11844:67;:::i;:::-;11837:74;;11920:93;12009:3;11920:93;:::i;:::-;12038:2;12033:3;12029:12;12022:19;;11827:220;;;:::o;12053:366::-;12195:3;12216:67;12280:2;12275:3;12216:67;:::i;:::-;12209:74;;12292:93;12381:3;12292:93;:::i;:::-;12410:2;12405:3;12401:12;12394:19;;12199:220;;;:::o;12425:398::-;12584:3;12605:83;12686:1;12681:3;12605:83;:::i;:::-;12598:90;;12697:93;12786:3;12697:93;:::i;:::-;12815:1;12810:3;12806:11;12799:18;;12588:235;;;:::o;12829:366::-;12971:3;12992:67;13056:2;13051:3;12992:67;:::i;:::-;12985:74;;13068:93;13157:3;13068:93;:::i;:::-;13186:2;13181:3;13177:12;13170:19;;12975:220;;;:::o;13201:118::-;13288:24;13306:5;13288:24;:::i;:::-;13283:3;13276:37;13266:53;;:::o;13325:435::-;13505:3;13527:95;13618:3;13609:6;13527:95;:::i;:::-;13520:102;;13639:95;13730:3;13721:6;13639:95;:::i;:::-;13632:102;;13751:3;13744:10;;13509:251;;;;;:::o;13766:379::-;13950:3;13972:147;14115:3;13972:147;:::i;:::-;13965:154;;14136:3;14129:10;;13954:191;;;:::o;14151:222::-;14244:4;14282:2;14271:9;14267:18;14259:26;;14295:71;14363:1;14352:9;14348:17;14339:6;14295:71;:::i;:::-;14249:124;;;;:::o;14379:640::-;14574:4;14612:3;14601:9;14597:19;14589:27;;14626:71;14694:1;14683:9;14679:17;14670:6;14626:71;:::i;:::-;14707:72;14775:2;14764:9;14760:18;14751:6;14707:72;:::i;:::-;14789;14857:2;14846:9;14842:18;14833:6;14789:72;:::i;:::-;14908:9;14902:4;14898:20;14893:2;14882:9;14878:18;14871:48;14936:76;15007:4;14998:6;14936:76;:::i;:::-;14928:84;;14579:440;;;;;;;:::o;15025:210::-;15112:4;15150:2;15139:9;15135:18;15127:26;;15163:65;15225:1;15214:9;15210:17;15201:6;15163:65;:::i;:::-;15117:118;;;;:::o;15241:313::-;15354:4;15392:2;15381:9;15377:18;15369:26;;15441:9;15435:4;15431:20;15427:1;15416:9;15412:17;15405:47;15469:78;15542:4;15533:6;15469:78;:::i;:::-;15461:86;;15359:195;;;;:::o;15560:419::-;15726:4;15764:2;15753:9;15749:18;15741:26;;15813:9;15807:4;15803:20;15799:1;15788:9;15784:17;15777:47;15841:131;15967:4;15841:131;:::i;:::-;15833:139;;15731:248;;;:::o;15985:419::-;16151:4;16189:2;16178:9;16174:18;16166:26;;16238:9;16232:4;16228:20;16224:1;16213:9;16209:17;16202:47;16266:131;16392:4;16266:131;:::i;:::-;16258:139;;16156:248;;;:::o;16410:419::-;16576:4;16614:2;16603:9;16599:18;16591:26;;16663:9;16657:4;16653:20;16649:1;16638:9;16634:17;16627:47;16691:131;16817:4;16691:131;:::i;:::-;16683:139;;16581:248;;;:::o;16835:419::-;17001:4;17039:2;17028:9;17024:18;17016:26;;17088:9;17082:4;17078:20;17074:1;17063:9;17059:17;17052:47;17116:131;17242:4;17116:131;:::i;:::-;17108:139;;17006:248;;;:::o;17260:419::-;17426:4;17464:2;17453:9;17449:18;17441:26;;17513:9;17507:4;17503:20;17499:1;17488:9;17484:17;17477:47;17541:131;17667:4;17541:131;:::i;:::-;17533:139;;17431:248;;;:::o;17685:419::-;17851:4;17889:2;17878:9;17874:18;17866:26;;17938:9;17932:4;17928:20;17924:1;17913:9;17909:17;17902:47;17966:131;18092:4;17966:131;:::i;:::-;17958:139;;17856:248;;;:::o;18110:419::-;18276:4;18314:2;18303:9;18299:18;18291:26;;18363:9;18357:4;18353:20;18349:1;18338:9;18334:17;18327:47;18391:131;18517:4;18391:131;:::i;:::-;18383:139;;18281:248;;;:::o;18535:419::-;18701:4;18739:2;18728:9;18724:18;18716:26;;18788:9;18782:4;18778:20;18774:1;18763:9;18759:17;18752:47;18816:131;18942:4;18816:131;:::i;:::-;18808:139;;18706:248;;;:::o;18960:419::-;19126:4;19164:2;19153:9;19149:18;19141:26;;19213:9;19207:4;19203:20;19199:1;19188:9;19184:17;19177:47;19241:131;19367:4;19241:131;:::i;:::-;19233:139;;19131:248;;;:::o;19385:419::-;19551:4;19589:2;19578:9;19574:18;19566:26;;19638:9;19632:4;19628:20;19624:1;19613:9;19609:17;19602:47;19666:131;19792:4;19666:131;:::i;:::-;19658:139;;19556:248;;;:::o;19810:419::-;19976:4;20014:2;20003:9;19999:18;19991:26;;20063:9;20057:4;20053:20;20049:1;20038:9;20034:17;20027:47;20091:131;20217:4;20091:131;:::i;:::-;20083:139;;19981:248;;;:::o;20235:419::-;20401:4;20439:2;20428:9;20424:18;20416:26;;20488:9;20482:4;20478:20;20474:1;20463:9;20459:17;20452:47;20516:131;20642:4;20516:131;:::i;:::-;20508:139;;20406:248;;;:::o;20660:419::-;20826:4;20864:2;20853:9;20849:18;20841:26;;20913:9;20907:4;20903:20;20899:1;20888:9;20884:17;20877:47;20941:131;21067:4;20941:131;:::i;:::-;20933:139;;20831:248;;;:::o;21085:419::-;21251:4;21289:2;21278:9;21274:18;21266:26;;21338:9;21332:4;21328:20;21324:1;21313:9;21309:17;21302:47;21366:131;21492:4;21366:131;:::i;:::-;21358:139;;21256:248;;;:::o;21510:222::-;21603:4;21641:2;21630:9;21626:18;21618:26;;21654:71;21722:1;21711:9;21707:17;21698:6;21654:71;:::i;:::-;21608:124;;;;:::o;21738:129::-;21772:6;21799:20;;:::i;:::-;21789:30;;21828:33;21856:4;21848:6;21828:33;:::i;:::-;21779:88;;;:::o;21873:75::-;21906:6;21939:2;21933:9;21923:19;;21913:35;:::o;21954:307::-;22015:4;22105:18;22097:6;22094:30;22091:2;;;22127:18;;:::i;:::-;22091:2;22165:29;22187:6;22165:29;:::i;:::-;22157:37;;22249:4;22243;22239:15;22231:23;;22020:241;;;:::o;22267:308::-;22329:4;22419:18;22411:6;22408:30;22405:2;;;22441:18;;:::i;:::-;22405:2;22479:29;22501:6;22479:29;:::i;:::-;22471:37;;22563:4;22557;22553:15;22545:23;;22334:241;;;:::o;22581:98::-;22632:6;22666:5;22660:12;22650:22;;22639:40;;;:::o;22685:99::-;22737:6;22771:5;22765:12;22755:22;;22744:40;;;:::o;22790:168::-;22873:11;22907:6;22902:3;22895:19;22947:4;22942:3;22938:14;22923:29;;22885:73;;;;:::o;22964:147::-;23065:11;23102:3;23087:18;;23077:34;;;;:::o;23117:169::-;23201:11;23235:6;23230:3;23223:19;23275:4;23270:3;23266:14;23251:29;;23213:73;;;;:::o;23292:148::-;23394:11;23431:3;23416:18;;23406:34;;;;:::o;23446:305::-;23486:3;23505:20;23523:1;23505:20;:::i;:::-;23500:25;;23539:20;23557:1;23539:20;:::i;:::-;23534:25;;23693:1;23625:66;23621:74;23618:1;23615:81;23612:2;;;23699:18;;:::i;:::-;23612:2;23743:1;23740;23736:9;23729:16;;23490:261;;;;:::o;23757:185::-;23797:1;23814:20;23832:1;23814:20;:::i;:::-;23809:25;;23848:20;23866:1;23848:20;:::i;:::-;23843:25;;23887:1;23877:2;;23892:18;;:::i;:::-;23877:2;23934:1;23931;23927:9;23922:14;;23799:143;;;;:::o;23948:191::-;23988:4;24008:20;24026:1;24008:20;:::i;:::-;24003:25;;24042:20;24060:1;24042:20;:::i;:::-;24037:25;;24081:1;24078;24075:8;24072:2;;;24086:18;;:::i;:::-;24072:2;24131:1;24128;24124:9;24116:17;;23993:146;;;;:::o;24145:96::-;24182:7;24211:24;24229:5;24211:24;:::i;:::-;24200:35;;24190:51;;;:::o;24247:90::-;24281:7;24324:5;24317:13;24310:21;24299:32;;24289:48;;;:::o;24343:149::-;24379:7;24419:66;24412:5;24408:78;24397:89;;24387:105;;;:::o;24498:126::-;24535:7;24575:42;24568:5;24564:54;24553:65;;24543:81;;;:::o;24630:77::-;24667:7;24696:5;24685:16;;24675:32;;;:::o;24713:154::-;24797:6;24792:3;24787;24774:30;24859:1;24850:6;24845:3;24841:16;24834:27;24764:103;;;:::o;24873:307::-;24941:1;24951:113;24965:6;24962:1;24959:13;24951:113;;;25050:1;25045:3;25041:11;25035:18;25031:1;25026:3;25022:11;25015:39;24987:2;24984:1;24980:10;24975:15;;24951:113;;;25082:6;25079:1;25076:13;25073:2;;;25162:1;25153:6;25148:3;25144:16;25137:27;25073:2;24922:258;;;;:::o;25186:320::-;25230:6;25267:1;25261:4;25257:12;25247:22;;25314:1;25308:4;25304:12;25335:18;25325:2;;25391:4;25383:6;25379:17;25369:27;;25325:2;25453;25445:6;25442:14;25422:18;25419:38;25416:2;;;25472:18;;:::i;:::-;25416:2;25237:269;;;;:::o;25512:281::-;25595:27;25617:4;25595:27;:::i;:::-;25587:6;25583:40;25725:6;25713:10;25710:22;25689:18;25677:10;25674:34;25671:62;25668:2;;;25736:18;;:::i;:::-;25668:2;25776:10;25772:2;25765:22;25555:238;;;:::o;25799:233::-;25838:3;25861:24;25879:5;25861:24;:::i;:::-;25852:33;;25907:66;25900:5;25897:77;25894:2;;;25977:18;;:::i;:::-;25894:2;26024:1;26017:5;26013:13;26006:20;;25842:190;;;:::o;26038:176::-;26070:1;26087:20;26105:1;26087:20;:::i;:::-;26082:25;;26121:20;26139:1;26121:20;:::i;:::-;26116:25;;26160:1;26150:2;;26165:18;;:::i;:::-;26150:2;26206:1;26203;26199:9;26194:14;;26072:142;;;;:::o;26220:180::-;26268:77;26265:1;26258:88;26365:4;26362:1;26355:15;26389:4;26386:1;26379:15;26406:180;26454:77;26451:1;26444:88;26551:4;26548:1;26541:15;26575:4;26572:1;26565:15;26592:180;26640:77;26637:1;26630:88;26737:4;26734:1;26727:15;26761:4;26758:1;26751:15;26778:180;26826:77;26823:1;26816:88;26923:4;26920:1;26913:15;26947:4;26944:1;26937:15;26964:102;27005:6;27056:2;27052:7;27047:2;27040:5;27036:14;27032:28;27022:38;;27012:54;;;:::o;27072:237::-;27212:34;27208:1;27200:6;27196:14;27189:58;27281:20;27276:2;27268:6;27264:15;27257:45;27178:131;:::o;27315:225::-;27455:34;27451:1;27443:6;27439:14;27432:58;27524:8;27519:2;27511:6;27507:15;27500:33;27421:119;:::o;27546:224::-;27686:34;27682:1;27674:6;27670:14;27663:58;27755:7;27750:2;27742:6;27738:15;27731:32;27652:118;:::o;27776:178::-;27916:30;27912:1;27904:6;27900:14;27893:54;27882:72;:::o;27960:223::-;28100:34;28096:1;28088:6;28084:14;28077:58;28169:6;28164:2;28156:6;28152:15;28145:31;28066:117;:::o;28189:175::-;28329:27;28325:1;28317:6;28313:14;28306:51;28295:69;:::o;28370:228::-;28510:34;28506:1;28498:6;28494:14;28487:58;28579:11;28574:2;28566:6;28562:15;28555:36;28476:122;:::o;28604:233::-;28744:34;28740:1;28732:6;28728:14;28721:58;28813:16;28808:2;28800:6;28796:15;28789:41;28710:127;:::o;28843:249::-;28983:34;28979:1;28971:6;28967:14;28960:58;29052:32;29047:2;29039:6;29035:15;29028:57;28949:143;:::o;29098:182::-;29238:34;29234:1;29226:6;29222:14;29215:58;29204:76;:::o;29286:182::-;29426:34;29422:1;29414:6;29410:14;29403:58;29392:76;:::o;29474:174::-;29614:26;29610:1;29602:6;29598:14;29591:50;29580:68;:::o;29654:220::-;29794:34;29790:1;29782:6;29778:14;29771:58;29863:3;29858:2;29850:6;29846:15;29839:28;29760:114;:::o;29880:::-;29986:8;:::o;30000:233::-;30140:34;30136:1;30128:6;30124:14;30117:58;30209:16;30204:2;30196:6;30192:15;30185:41;30106:127;:::o;30239:122::-;30312:24;30330:5;30312:24;:::i;:::-;30305:5;30302:35;30292:2;;30351:1;30348;30341:12;30292:2;30282:79;:::o;30367:116::-;30437:21;30452:5;30437:21;:::i;:::-;30430:5;30427:32;30417:2;;30473:1;30470;30463:12;30417:2;30407:76;:::o;30489:120::-;30561:23;30578:5;30561:23;:::i;:::-;30554:5;30551:34;30541:2;;30599:1;30596;30589:12;30541:2;30531:78;:::o;30615:122::-;30688:24;30706:5;30688:24;:::i;:::-;30681:5;30678:35;30668:2;;30727:1;30724;30717:12;30668:2;30658:79;:::o
Swarm Source
ipfs://e2da7551d2bfcd42633b97b54e533d9d0353a49a8f4f0b1847eda073c87ec9ec
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.