ERC-721
Overview
Max Total Supply
0 AVATAR
Holders
28
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 AVATARLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
MonaAvatars
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-11-16 */ // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // File: @openzeppelin/contracts/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/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/security/Pausable.sol // OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { require(paused(), "Pausable: not paused"); } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: @openzeppelin/contracts/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/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/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/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/interfaces/IERC2981.sol // OpenZeppelin Contracts (last updated v4.6.0) (interfaces/IERC2981.sol) pragma solidity ^0.8.0; /** * @dev Interface for the NFT Royalty Standard. * * A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal * support for royalty payments across all NFT marketplaces and ecosystem participants. * * _Available since v4.5._ */ interface IERC2981 is IERC165 { /** * @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of * exchange. The royalty amount is denominated and should be paid in that same unit of exchange. */ function royaltyInfo(uint256 tokenId, uint256 salePrice) external view returns (address receiver, uint256 royaltyAmount); } // File: @openzeppelin/contracts/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/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/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/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: contracts/1_Storage.sol pragma solidity ^0.8.0; contract MonaAvatars is ERC721, Ownable, Pausable { // Mona Wallet for royalty payments and emergency withdrawals. address monaWallet; // Next token ID to be minted. uint256 private nextTokenId; // Can creators update the URIs of their tokens? bool creatorURIUpdatesPaused; // For EIP 2981, royalty rate out of 10,000. // For example, 10% royalties: royaltyRate = 1000. uint256 royaltyRate; uint256 constant royaltyRateDivisor = 10_000; // token id => uri mapping(uint256 => string) private _tokenURIs; // uri => used (has this URI been used before?) mapping(string => bool) private _tokenURIUsed; // token id => creator (who has permission to update this token's URI and get paid royalties?) mapping(uint256 => address) private _creators; // Prefix that all token URIs must begin with. Enforced when token URI is set to prevent typosquatting. string public uriPrefix; // address => allowed to mint mapping(address => bool) public allowedMinters; // EVENTS event UpdateMonaWallet(address indexed newOwner, address indexed sender); event UpdateRoyaltyRate(uint256 newRate, address indexed sender); event UnPauseCreatorURIUpdates(address indexed sender); event PauseCreatorURIUpdates(address indexed sender); event UpdateURIPrefix(string _uriPrefix, address indexed sender); event UpdateCreator( uint256 tokenId, address indexed newCreator, address indexed sender ); event UpdateTokenURI(uint256 tokenId, string oldUri, string newUri); // @param: _name: The name of the ERC721 token. // @param: _symbol: The symbol of the ERC721 token. // @param: _royaltyRate: The rate (out of 10,000) EIP 2981 royalties should be paid at. // @param: _monaWallet: The address where Mona royalties should be paid out (also used for withdrawals). constructor( string memory _name, string memory _symbol, uint256 _royaltyRate, address _monaWallet, string memory _uriPrefix ) ERC721(_name, _symbol) { updateRoyaltyRate(_royaltyRate); updateMonaWallet(_monaWallet); updateURIPrefix(_uriPrefix); } // MODIFIERS // // Is this URI allowed to be used? Only yes if it's unused modifier tokenURIAllowed(string memory _tokenURI) { require(!_tokenURIUsed[_tokenURI], "token uri already used"); _tokenURIPrefixed(_tokenURI); _; } // Is this user allowed to update the URI of a given token? // Only yes if it's the creator and creator updates are unpaused, or admin. modifier allowedToUpdateURI(uint256 _tokenId) { require( msg.sender == owner() || (msg.sender == _creators[_tokenId] && !creatorURIUpdatesPaused), "not allowed to update token uri" ); _; } modifier allowedToMint() { require(allowedMinters[msg.sender], "caller not allowed minter"); _; } // Does the provided tokenURI have the correct prefix? function _tokenURIPrefixed(string memory _tokenURI) internal view { bytes memory newURIBytes = bytes(_tokenURI); uint256 prefixLength = bytes(uriPrefix).length; // New token URI must be longer than prefix, else bail early to prevent overflow. require( newURIBytes.length > prefixLength, "Incorrect URI prefix length" ); bytes memory resultPrefix = new bytes(prefixLength); // Slice prefixLength bytes from _tokenURI to compare. for (uint256 i; i < prefixLength; ) { resultPrefix[i] = newURIBytes[i]; unchecked { ++i; } } require( keccak256(resultPrefix) == keccak256(bytes(uriPrefix)), "Incorrect URI prefix" ); } // MINTING & BURNING // // @notice: Mints a new token and assigns URI specific variable. // @notice: Once a creator claims are URI it cannot be used again. // @param: _tokenURI: URI of the new token. function mintToken(string memory _tokenURI) public whenNotPaused tokenURIAllowed(_tokenURI) allowedToMint { _tokenURIs[nextTokenId] = _tokenURI; _tokenURIUsed[_tokenURI] = true; _creators[nextTokenId] = msg.sender; _mint(msg.sender, nextTokenId++); } // @notice: Burns a given token, removing it from circulation. // @param: _tokenId: ID of the token to burn. function burn(uint256 _tokenId) public onlyOwner { _burn(_tokenId); } // TOKEN URI FUNCTIONS // // @notice: Updates the URI of a given token to a new URI. // @notice: Requires that the new URI is unused, and that sender is this token's creator or admin. // @param: _tokenId: ID of the token to update. // @param: _tokenURI: New URI to assign to the token. function updateTokenURI(uint256 _tokenId, string calldata _tokenURI) public tokenURIAllowed(_tokenURI) allowedToUpdateURI(_tokenId) { string storage oldTokenUri = _tokenURIs[_tokenId]; _tokenURIs[_tokenId] = _tokenURI; _tokenURIUsed[_tokenURI] = true; emit UpdateTokenURI(_tokenId, oldTokenUri, _tokenURI); } // @notice: Returns the URI of a given token. // @param: _tokenId: ID of the token to get the URI of. function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require(_exists(_tokenId), "nonexistant token"); return _tokenURIs[_tokenId]; } // CREATOR & URI OWNER // // @notice: Update the creator of a given token. // @notice: Only the creator of the token or the admin can update the creator. // @param: _tokenId: ID of the token to update. // @param: _newCreator: The address of the new creator to assign to the token. function updateCreator(uint256 _tokenId, address _newCreator) public { require( msg.sender == _creators[_tokenId] || msg.sender == owner(), "only creator" ); _creators[_tokenId] = _newCreator; emit UpdateCreator(_tokenId, _newCreator, msg.sender); } // @notice: Returns the creator of a given token. // @param: _tokenId: ID of the token to get the creator of. function creatorOf(uint256 _tokenId) public view returns (address) { require(_exists(_tokenId), "nonexistant token"); return _creators[_tokenId]; } // @notice: Allows admin to update the enforce URI prefix. // @param: _uriPrefix: Prefix expected in URI updates function updateURIPrefix(string memory _uriPrefix) public onlyOwner { uriPrefix = _uriPrefix; emit UpdateURIPrefix(_uriPrefix, msg.sender); } // PAUSE AND UNPAUSE // // @notice: Pauses minting of tokens. // @notice: Only the admin can pause minting. // @notice: Uses the _pause() function from the Pausable OZ import. function pauseMinting() public onlyOwner { _pause(); } // @notice: Unpauses minting of tokens. // @notice: Only the admin can unpause minting. // @notice: Uses the _unpause() function from the Pausable OZ import. function unpauseMinting() public onlyOwner { _unpause(); } // @notice: Turns OFF permission for creators to update URIs of their tokens. // @notice: Only the admin can pause creator URI updates. function pauseCreatorURIUpdates() public onlyOwner { creatorURIUpdatesPaused = true; emit PauseCreatorURIUpdates(msg.sender); } // @notice: Turns ON permission for creators to update URIs of their tokens. // @notice: Only the admin can unpause creator URI updates. function unpauseCreatorURIUpdates() public onlyOwner { creatorURIUpdatesPaused = false; emit UnPauseCreatorURIUpdates(msg.sender); } // ROYALTY INFO // // @notice: EIP 165 compliance to let marketplaces know we implement EIP 2981 for royalty info. function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721) returns (bool) { return interfaceId == type(IERC2981).interfaceId || super.supportsInterface(interfaceId); } // @notice: Royalty info function, as specified in EIP 2981. // @notice: Returns the address to pay royalties to, and the amount to pay out. // @notice: monaWallet is set to receive royalties, but admin can set address to 0 and royalties will flow straight to creators. // @param: _tokenId: ID of the token to get royalty info for. // @param: _salePrice: How much the token sold for, to use in royalty calculations. function royaltyInfo(uint256 _tokenId, uint256 _salePrice) external view returns (address receiver, uint256 royaltyAmount) { require(_exists(_tokenId), "nonexistant token"); royaltyAmount = (_salePrice * royaltyRate) / royaltyRateDivisor; receiver = monaWallet == address(0) ? _creators[_tokenId] : monaWallet; return (receiver, royaltyAmount); } // @notice: Update the address of the Mona Wallet, to collect EIP 2981 royalties or do emergency withdrawals. // @notice: Only the admin can update the Mona Wallet. // @param: _newMonaWallet: The address of the new Mona Wallet. function updateMonaWallet(address _newMonaWallet) public onlyOwner { monaWallet = _newMonaWallet; emit UpdateMonaWallet(_newMonaWallet, msg.sender); } // @notice: Update the royalty rate for EIP 2981 compliant marketplaces. // @notice: Only the admin can update the royalty rate. // @param: _rate: The new royalty rate, calculated as x / 10,000. For example, 10% royalties = 1000. function updateRoyaltyRate(uint256 _rate) public onlyOwner { require(_rate <= 10000, "royalty out of range"); royaltyRate = _rate; emit UpdateRoyaltyRate(_rate, msg.sender); } // @notice: Set // @notice: Only the admin can call this function, addresses and allowances must be same length. // @param: addresses: list of addresses to update // @param: allowances: list of boolean permissions for addresses function updateAllowedMinters( address[] calldata addresses, bool[] calldata allowances ) public onlyOwner { require( addresses.length == allowances.length, "addresses and allowances must be same length" ); for (uint256 i = 0; i < addresses.length; i++) { allowedMinters[addresses[i]] = allowances[i]; } } // WITHDRAWALS // // @notice: Withdraw any Eth in this contract to the Mona Wallet. function withdrawEth() public onlyOwner { (bool success, ) = payable(monaWallet).call{ value: address(this).balance }(""); require(success); } // @notice: Withdraw any ERC20 tokens in this contract to the Mona Wallet. // @param: amount: The amount of tokens to withdraw. // @param: token: The ERC20 token to withdraw. function withdrawERC20(uint256 amount, address token) public onlyOwner { bool success = IERC20(token).transfer(monaWallet, amount); require(success); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"_royaltyRate","type":"uint256"},{"internalType":"address","name":"_monaWallet","type":"address"},{"internalType":"string","name":"_uriPrefix","type":"string"}],"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":"sender","type":"address"}],"name":"PauseCreatorURIUpdates","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"UnPauseCreatorURIUpdates","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"newCreator","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"UpdateCreator","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newOwner","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"UpdateMonaWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newRate","type":"uint256"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"UpdateRoyaltyRate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"string","name":"oldUri","type":"string"},{"indexed":false,"internalType":"string","name":"newUri","type":"string"}],"name":"UpdateTokenURI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"_uriPrefix","type":"string"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"UpdateURIPrefix","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowedMinters","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"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":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"creatorOf","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"mintToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseCreatorURIUpdates","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","type":"uint256"}],"stateMutability":"view","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":"unpauseCreatorURIUpdates","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool[]","name":"allowances","type":"bool[]"}],"name":"updateAllowedMinters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"address","name":"_newCreator","type":"address"}],"name":"updateCreator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newMonaWallet","type":"address"}],"name":"updateMonaWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"updateRoyaltyRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"updateTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"updateURIPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"token","type":"address"}],"name":"withdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawEth","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620055f6380380620055f6833981810160405281019062000037919062000669565b848481600090816200004a91906200098f565b5080600190816200005c91906200098f565b5050506200007f62000073620000d860201b60201c565b620000e060201b60201c565b6000600660146101000a81548160ff021916908315150217905550620000ab83620001a660201b60201c565b620000bc826200025860201b60201c565b620000cd816200030660201b60201c565b505050505062000bfe565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620001b66200037b60201b60201c565b612710811115620001fe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001f59062000ad7565b60405180910390fd5b80600a819055503373ffffffffffffffffffffffffffffffffffffffff167f4b7dbec63042c1dda577f7aa6fd14122cddcc3f21992561e3a69c6db7822b3c6826040516200024d919062000b0a565b60405180910390a250565b620002686200037b60201b60201c565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fbde6a1f22996ef208a396e5e011324e19c33cc4cd523fdcc34e26ce88c43e08c60405160405180910390a350565b620003166200037b60201b60201c565b80600e90816200032791906200098f565b503373ffffffffffffffffffffffffffffffffffffffff167fde16c1e51a062f420283920369ff930e4ec41c5721ff0fa09a083ef5b79c97de8260405162000370919062000b68565b60405180910390a250565b6200038b620000d860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003b16200040c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200040a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004019062000bdc565b60405180910390fd5b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200049f8262000454565b810181811067ffffffffffffffff82111715620004c157620004c062000465565b5b80604052505050565b6000620004d662000436565b9050620004e4828262000494565b919050565b600067ffffffffffffffff82111562000507576200050662000465565b5b620005128262000454565b9050602081019050919050565b60005b838110156200053f57808201518184015260208101905062000522565b60008484015250505050565b6000620005626200055c84620004e9565b620004ca565b9050828152602081018484840111156200058157620005806200044f565b5b6200058e8482856200051f565b509392505050565b600082601f830112620005ae57620005ad6200044a565b5b8151620005c08482602086016200054b565b91505092915050565b6000819050919050565b620005de81620005c9565b8114620005ea57600080fd5b50565b600081519050620005fe81620005d3565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620006318262000604565b9050919050565b620006438162000624565b81146200064f57600080fd5b50565b600081519050620006638162000638565b92915050565b600080600080600060a0868803121562000688576200068762000440565b5b600086015167ffffffffffffffff811115620006a957620006a862000445565b5b620006b78882890162000596565b955050602086015167ffffffffffffffff811115620006db57620006da62000445565b5b620006e98882890162000596565b9450506040620006fc88828901620005ed565b93505060606200070f8882890162000652565b925050608086015167ffffffffffffffff81111562000733576200073262000445565b5b620007418882890162000596565b9150509295509295909350565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620007a157607f821691505b602082108103620007b757620007b662000759565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620008217fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620007e2565b6200082d8683620007e2565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620008706200086a6200086484620005c9565b62000845565b620005c9565b9050919050565b6000819050919050565b6200088c836200084f565b620008a46200089b8262000877565b848454620007ef565b825550505050565b600090565b620008bb620008ac565b620008c881848462000881565b505050565b5b81811015620008f057620008e4600082620008b1565b600181019050620008ce565b5050565b601f8211156200093f576200090981620007bd565b6200091484620007d2565b8101602085101562000924578190505b6200093c6200093385620007d2565b830182620008cd565b50505b505050565b600082821c905092915050565b6000620009646000198460080262000944565b1980831691505092915050565b60006200097f838362000951565b9150826002028217905092915050565b6200099a826200074e565b67ffffffffffffffff811115620009b657620009b562000465565b5b620009c2825462000788565b620009cf828285620008f4565b600060209050601f83116001811462000a075760008415620009f2578287015190505b620009fe858262000971565b86555062000a6e565b601f19841662000a1786620007bd565b60005b8281101562000a415784890151825560018201915060208501945060208101905062000a1a565b8683101562000a61578489015162000a5d601f89168262000951565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f726f79616c7479206f7574206f662072616e6765000000000000000000000000600082015250565b600062000abf60148362000a76565b915062000acc8262000a87565b602082019050919050565b6000602082019050818103600083015262000af28162000ab0565b9050919050565b62000b0481620005c9565b82525050565b600060208201905062000b21600083018462000af9565b92915050565b600062000b34826200074e565b62000b40818562000a76565b935062000b528185602086016200051f565b62000b5d8162000454565b840191505092915050565b6000602082019050818103600083015262000b84818462000b27565b905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000bc460208362000a76565b915062000bd18262000b8c565b602082019050919050565b6000602082019050818103600083015262000bf78162000bb5565b9050919050565b6149e88062000c0e6000396000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c8063715018a611610125578063bceb2a22116100ad578063da8fbf2a1161007c578063da8fbf2a146105af578063e1ee5c83146105b9578063e985e9c5146105d5578063f2fde38b14610605578063f8361bab1461062157610211565b8063bceb2a221461053d578063c20938e014610559578063c87b56dd14610575578063da304499146105a557610211565b8063a0ef91df116100f4578063a0ef91df146104e7578063a22cb465146104f1578063ae2003221461050d578063b2cfad2814610517578063b88d4fde1461052157610211565b8063715018a6146104855780638da5cb5b1461048f57806395d89b41146104ad57806398df857c146104cb57610211565b806333eba49a116101a8578063589a174311610177578063589a1743146103b95780635c975abb146103e957806362b99ad4146104075780636352211e1461042557806370a082311461045557610211565b806333eba49a14610335578063423afa661461035157806342842e0e1461038157806342966c681461039d57610211565b80630b185dfe116101e45780630b185dfe146102b057806318e97fd1146102cc57806323b872dd146102e85780632a55205a1461030457610211565b806301ffc9a71461021657806306fdde0314610246578063081812fc14610264578063095ea7b314610294575b600080fd5b610230600480360381019061022b9190612c20565b61063d565b60405161023d9190612c68565b60405180910390f35b61024e6106b7565b60405161025b9190612d13565b60405180910390f35b61027e60048036038101906102799190612d6b565b610749565b60405161028b9190612dd9565b60405180910390f35b6102ae60048036038101906102a99190612e20565b61078f565b005b6102ca60048036038101906102c59190612f1b565b6108a6565b005b6102e660048036038101906102e19190612ff2565b6109c3565b005b61030260048036038101906102fd9190613052565b610c2d565b005b61031e600480360381019061031991906130a5565b610c8d565b60405161032c9291906130f4565b60405180910390f35b61034f600480360381019061034a919061324d565b610db1565b005b61036b60048036038101906103669190613296565b610f8d565b6040516103789190612c68565b60405180910390f35b61039b60048036038101906103969190613052565b610fad565b005b6103b760048036038101906103b29190612d6b565b610fcd565b005b6103d360048036038101906103ce9190612d6b565b610fe1565b6040516103e09190612dd9565b60405180910390f35b6103f1611066565b6040516103fe9190612c68565b60405180910390f35b61040f61107d565b60405161041c9190612d13565b60405180910390f35b61043f600480360381019061043a9190612d6b565b61110b565b60405161044c9190612dd9565b60405180910390f35b61046f600480360381019061046a9190613296565b6111bc565b60405161047c91906132c3565b60405180910390f35b61048d611273565b005b610497611287565b6040516104a49190612dd9565b60405180910390f35b6104b56112b1565b6040516104c29190612d13565b60405180910390f35b6104e560048036038101906104e09190613296565b611343565b005b6104ef6113e9565b005b61050b6004803603810190610506919061330a565b61148c565b005b6105156114a2565b005b61051f6114b4565b005b61053b600480360381019061053691906133eb565b61151c565b005b6105576004803603810190610552919061324d565b61157e565b005b610573600480360381019061056e919061346e565b6115e7565b005b61058f600480360381019061058a9190612d6b565b6116a2565b60405161059c9190612d13565b60405180910390f35b6105ad61178f565b005b6105b76117f7565b005b6105d360048036038101906105ce9190612d6b565b611809565b005b6105ef60048036038101906105ea91906134ae565b6118ae565b6040516105fc9190612c68565b60405180910390f35b61061f600480360381019061061a9190613296565b611942565b005b61063b6004803603810190610636919061346e565b6119c5565b005b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106b057506106af82611b5e565b5b9050919050565b6060600080546106c69061351d565b80601f01602080910402602001604051908101604052809291908181526020018280546106f29061351d565b801561073f5780601f106107145761010080835404028352916020019161073f565b820191906000526020600020905b81548152906001019060200180831161072257829003601f168201915b5050505050905090565b600061075482611c40565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061079a8261110b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361080a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610801906135c0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610829611c8b565b73ffffffffffffffffffffffffffffffffffffffff161480610858575061085781610852611c8b565b6118ae565b5b610897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088e90613652565b60405180910390fd5b6108a18383611c93565b505050565b6108ae611d4c565b8181905084849050146108f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ed906136e4565b60405180910390fd5b60005b848490508110156109bc5782828281811061091757610916613704565b5b905060200201602081019061092c9190613733565b600f600087878581811061094357610942613704565b5b90506020020160208101906109589190613296565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806109b49061378f565b9150506108f9565b5050505050565b81818080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050600c81604051610a189190613813565b908152602001604051809103902060009054906101000a900460ff1615610a74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6b90613876565b60405180910390fd5b610a7d81611dca565b83610a86611287565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610b365750600d600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148015610b355750600960009054906101000a900460ff16155b5b610b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6c906138e2565b60405180910390fd5b6000600b600087815260200190815260200160002090508484600b60008981526020019081526020016000209182610bae929190613ab9565b506001600c8686604051610bc3929190613bae565b908152602001604051809103902060006101000a81548160ff0219169083151502179055507f877cb5fe270579c5071e4a16ceb146f7be4bf5ae40e9d8896a2a3727d781de3386828787604051610c1d9493929190613c8d565b60405180910390a1505050505050565b610c3e610c38611c8b565b82611f52565b610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7490613d46565b60405180910390fd5b610c88838383611fe7565b505050565b600080610c998461224d565b610cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccf90613db2565b60405180910390fd5b612710600a5484610ce99190613dd2565b610cf39190613e43565b9050600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d7357600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610da8565b600d600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b91509250929050565b610db96122b9565b80600c81604051610dca9190613813565b908152602001604051809103902060009054906101000a900460ff1615610e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1d90613876565b60405180910390fd5b610e2f81611dca565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb290613ec0565b60405180910390fd5b81600b600060085481526020019081526020016000209081610edd9190613ee0565b506001600c83604051610ef09190613813565b908152602001604051809103902060006101000a81548160ff02191690831515021790555033600d6000600854815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610f893360086000815480929190610f809061378f565b91905055612303565b5050565b600f6020528060005260406000206000915054906101000a900460ff1681565b610fc88383836040518060200160405280600081525061151c565b505050565b610fd5611d4c565b610fde816124dc565b50565b6000610fec8261224d565b61102b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102290613db2565b60405180910390fd5b600d600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600660149054906101000a900460ff16905090565b600e805461108a9061351d565b80601f01602080910402602001604051908101604052809291908181526020018280546110b69061351d565b80156111035780601f106110d857610100808354040283529160200191611103565b820191906000526020600020905b8154815290600101906020018083116110e657829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111aa90613ffe565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361122c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122390614090565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61127b611d4c565b61128560006125f9565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546112c09061351d565b80601f01602080910402602001604051908101604052809291908181526020018280546112ec9061351d565b80156113395780601f1061130e57610100808354040283529160200191611339565b820191906000526020600020905b81548152906001019060200180831161131c57829003601f168201915b5050505050905090565b61134b611d4c565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fbde6a1f22996ef208a396e5e011324e19c33cc4cd523fdcc34e26ce88c43e08c60405160405180910390a350565b6113f1611d4c565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051611439906140e1565b60006040518083038185875af1925050503d8060008114611476576040519150601f19603f3d011682016040523d82523d6000602084013e61147b565b606091505b505090508061148957600080fd5b50565b61149e611497611c8b565b83836126bf565b5050565b6114aa611d4c565b6114b261282b565b565b6114bc611d4c565b6000600960006101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff167f7c2295421de1a88d6392f0fce429c317a32ed5d38be6f6e00a139f01590e920c60405160405180910390a2565b61152d611527611c8b565b83611f52565b61156c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156390613d46565b60405180910390fd5b6115788484848461288e565b50505050565b611586611d4c565b80600e90816115959190613ee0565b503373ffffffffffffffffffffffffffffffffffffffff167fde16c1e51a062f420283920369ff930e4ec41c5721ff0fa09a083ef5b79c97de826040516115dc9190612d13565b60405180910390a250565b6115ef611d4c565b60008173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518363ffffffff1660e01b815260040161164e9291906130f4565b6020604051808303816000875af115801561166d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611691919061410b565b90508061169d57600080fd5b505050565b60606116ad8261224d565b6116ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e390613db2565b60405180910390fd5b600b6000838152602001908152602001600020805461170a9061351d565b80601f01602080910402602001604051908101604052809291908181526020018280546117369061351d565b80156117835780601f1061175857610100808354040283529160200191611783565b820191906000526020600020905b81548152906001019060200180831161176657829003601f168201915b50505050509050919050565b611797611d4c565b6001600960006101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff167feafe05283d5f7228187a72dfd58c6ae8296f91a6a9be9a29406a6941d1c593e760405160405180910390a2565b6117ff611d4c565b6118076128ea565b565b611811611d4c565b612710811115611856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184d90614184565b60405180910390fd5b80600a819055503373ffffffffffffffffffffffffffffffffffffffff167f4b7dbec63042c1dda577f7aa6fd14122cddcc3f21992561e3a69c6db7822b3c6826040516118a391906132c3565b60405180910390a250565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61194a611d4c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b090614216565b60405180910390fd5b6119c2816125f9565b50565b600d600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611a645750611a35611287565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9a90614282565b60405180910390fd5b80600d600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f0a1be7c84f8d2439cd1106b06022308991ce5b9d1f38ee72ba89d2ffd89bfe8f84604051611b5291906132c3565b60405180910390a35050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611c2957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611c395750611c388261294d565b5b9050919050565b611c498161224d565b611c88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7f90613ffe565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611d068361110b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611d54611c8b565b73ffffffffffffffffffffffffffffffffffffffff16611d72611287565b73ffffffffffffffffffffffffffffffffffffffff1614611dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbf906142ee565b60405180910390fd5b565b60008190506000600e8054611dde9061351d565b9050905080825111611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c9061435a565b60405180910390fd5b60008167ffffffffffffffff811115611e4157611e40613122565b5b6040519080825280601f01601f191660200182016040528015611e735781602001600182028036833780820191505090505b50905060005b82811015611eec57838181518110611e9457611e93613704565b5b602001015160f81c60f81b828281518110611eb257611eb1613704565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806001019050611e79565b50600e604051611efc9190614412565b6040518091039020818051906020012014611f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4390614475565b60405180910390fd5b50505050565b600080611f5e8361110b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611fa05750611f9f81856118ae565b5b80611fde57508373ffffffffffffffffffffffffffffffffffffffff16611fc684610749565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166120078261110b565b73ffffffffffffffffffffffffffffffffffffffff161461205d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205490614507565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c390614599565b60405180910390fd5b6120d78383836129b7565b6120e2600082611c93565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461213291906145b9565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461218991906145ed565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46122488383836129bc565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6122c1611066565b15612301576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f89061466d565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612372576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612369906146d9565b60405180910390fd5b61237b8161224d565b156123bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b290614745565b60405180910390fd5b6123c7600083836129b7565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461241791906145ed565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124d8600083836129bc565b5050565b60006124e78261110b565b90506124f5816000846129b7565b612500600083611c93565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461255091906145b9565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125f5816000846129bc565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361272d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612724906147b1565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161281e9190612c68565b60405180910390a3505050565b6128336129c1565b6000600660146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612877611c8b565b6040516128849190612dd9565b60405180910390a1565b612899848484611fe7565b6128a584848484612a0a565b6128e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128db90614843565b60405180910390fd5b50505050565b6128f26122b9565b6001600660146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612936611c8b565b6040516129439190612dd9565b60405180910390a1565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b505050565b6129c9611066565b612a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ff906148af565b60405180910390fd5b565b6000612a2b8473ffffffffffffffffffffffffffffffffffffffff16612b91565b15612b84578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a54611c8b565b8786866040518563ffffffff1660e01b8152600401612a769493929190614924565b6020604051808303816000875af1925050508015612ab257506040513d601f19601f82011682018060405250810190612aaf9190614985565b60015b612b34573d8060008114612ae2576040519150601f19603f3d011682016040523d82523d6000602084013e612ae7565b606091505b506000815103612b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2390614843565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b89565b600190505b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612bfd81612bc8565b8114612c0857600080fd5b50565b600081359050612c1a81612bf4565b92915050565b600060208284031215612c3657612c35612bbe565b5b6000612c4484828501612c0b565b91505092915050565b60008115159050919050565b612c6281612c4d565b82525050565b6000602082019050612c7d6000830184612c59565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612cbd578082015181840152602081019050612ca2565b60008484015250505050565b6000601f19601f8301169050919050565b6000612ce582612c83565b612cef8185612c8e565b9350612cff818560208601612c9f565b612d0881612cc9565b840191505092915050565b60006020820190508181036000830152612d2d8184612cda565b905092915050565b6000819050919050565b612d4881612d35565b8114612d5357600080fd5b50565b600081359050612d6581612d3f565b92915050565b600060208284031215612d8157612d80612bbe565b5b6000612d8f84828501612d56565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612dc382612d98565b9050919050565b612dd381612db8565b82525050565b6000602082019050612dee6000830184612dca565b92915050565b612dfd81612db8565b8114612e0857600080fd5b50565b600081359050612e1a81612df4565b92915050565b60008060408385031215612e3757612e36612bbe565b5b6000612e4585828601612e0b565b9250506020612e5685828601612d56565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f840112612e8557612e84612e60565b5b8235905067ffffffffffffffff811115612ea257612ea1612e65565b5b602083019150836020820283011115612ebe57612ebd612e6a565b5b9250929050565b60008083601f840112612edb57612eda612e60565b5b8235905067ffffffffffffffff811115612ef857612ef7612e65565b5b602083019150836020820283011115612f1457612f13612e6a565b5b9250929050565b60008060008060408587031215612f3557612f34612bbe565b5b600085013567ffffffffffffffff811115612f5357612f52612bc3565b5b612f5f87828801612e6f565b9450945050602085013567ffffffffffffffff811115612f8257612f81612bc3565b5b612f8e87828801612ec5565b925092505092959194509250565b60008083601f840112612fb257612fb1612e60565b5b8235905067ffffffffffffffff811115612fcf57612fce612e65565b5b602083019150836001820283011115612feb57612fea612e6a565b5b9250929050565b60008060006040848603121561300b5761300a612bbe565b5b600061301986828701612d56565b935050602084013567ffffffffffffffff81111561303a57613039612bc3565b5b61304686828701612f9c565b92509250509250925092565b60008060006060848603121561306b5761306a612bbe565b5b600061307986828701612e0b565b935050602061308a86828701612e0b565b925050604061309b86828701612d56565b9150509250925092565b600080604083850312156130bc576130bb612bbe565b5b60006130ca85828601612d56565b92505060206130db85828601612d56565b9150509250929050565b6130ee81612d35565b82525050565b60006040820190506131096000830185612dca565b61311660208301846130e5565b9392505050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61315a82612cc9565b810181811067ffffffffffffffff8211171561317957613178613122565b5b80604052505050565b600061318c612bb4565b90506131988282613151565b919050565b600067ffffffffffffffff8211156131b8576131b7613122565b5b6131c182612cc9565b9050602081019050919050565b82818337600083830152505050565b60006131f06131eb8461319d565b613182565b90508281526020810184848401111561320c5761320b61311d565b5b6132178482856131ce565b509392505050565b600082601f83011261323457613233612e60565b5b81356132448482602086016131dd565b91505092915050565b60006020828403121561326357613262612bbe565b5b600082013567ffffffffffffffff81111561328157613280612bc3565b5b61328d8482850161321f565b91505092915050565b6000602082840312156132ac576132ab612bbe565b5b60006132ba84828501612e0b565b91505092915050565b60006020820190506132d860008301846130e5565b92915050565b6132e781612c4d565b81146132f257600080fd5b50565b600081359050613304816132de565b92915050565b6000806040838503121561332157613320612bbe565b5b600061332f85828601612e0b565b9250506020613340858286016132f5565b9150509250929050565b600067ffffffffffffffff82111561336557613364613122565b5b61336e82612cc9565b9050602081019050919050565b600061338e6133898461334a565b613182565b9050828152602081018484840111156133aa576133a961311d565b5b6133b58482856131ce565b509392505050565b600082601f8301126133d2576133d1612e60565b5b81356133e284826020860161337b565b91505092915050565b6000806000806080858703121561340557613404612bbe565b5b600061341387828801612e0b565b945050602061342487828801612e0b565b935050604061343587828801612d56565b925050606085013567ffffffffffffffff81111561345657613455612bc3565b5b613462878288016133bd565b91505092959194509250565b6000806040838503121561348557613484612bbe565b5b600061349385828601612d56565b92505060206134a485828601612e0b565b9150509250929050565b600080604083850312156134c5576134c4612bbe565b5b60006134d385828601612e0b565b92505060206134e485828601612e0b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061353557607f821691505b602082108103613548576135476134ee565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006135aa602183612c8e565b91506135b58261354e565b604082019050919050565b600060208201905081810360008301526135d98161359d565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b600061363c603e83612c8e565b9150613647826135e0565b604082019050919050565b6000602082019050818103600083015261366b8161362f565b9050919050565b7f61646472657373657320616e6420616c6c6f77616e636573206d75737420626560008201527f2073616d65206c656e6774680000000000000000000000000000000000000000602082015250565b60006136ce602c83612c8e565b91506136d982613672565b604082019050919050565b600060208201905081810360008301526136fd816136c1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561374957613748612bbe565b5b6000613757848285016132f5565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061379a82612d35565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036137cc576137cb613760565b5b600182019050919050565b600081905092915050565b60006137ed82612c83565b6137f781856137d7565b9350613807818560208601612c9f565b80840191505092915050565b600061381f82846137e2565b915081905092915050565b7f746f6b656e2075726920616c7265616479207573656400000000000000000000600082015250565b6000613860601683612c8e565b915061386b8261382a565b602082019050919050565b6000602082019050818103600083015261388f81613853565b9050919050565b7f6e6f7420616c6c6f77656420746f2075706461746520746f6b656e2075726900600082015250565b60006138cc601f83612c8e565b91506138d782613896565b602082019050919050565b600060208201905081810360008301526138fb816138bf565b9050919050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261396f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613932565b6139798683613932565b95508019841693508086168417925050509392505050565b6000819050919050565b60006139b66139b16139ac84612d35565b613991565b612d35565b9050919050565b6000819050919050565b6139d08361399b565b6139e46139dc826139bd565b84845461393f565b825550505050565b600090565b6139f96139ec565b613a048184846139c7565b505050565b5b81811015613a2857613a1d6000826139f1565b600181019050613a0a565b5050565b601f821115613a6d57613a3e8161390d565b613a4784613922565b81016020851015613a56578190505b613a6a613a6285613922565b830182613a09565b50505b505050565b600082821c905092915050565b6000613a9060001984600802613a72565b1980831691505092915050565b6000613aa98383613a7f565b9150826002028217905092915050565b613ac38383613902565b67ffffffffffffffff811115613adc57613adb613122565b5b613ae6825461351d565b613af1828285613a2c565b6000601f831160018114613b205760008415613b0e578287013590505b613b188582613a9d565b865550613b80565b601f198416613b2e8661390d565b60005b82811015613b5657848901358255600182019150602085019450602081019050613b31565b86831015613b735784890135613b6f601f891682613a7f565b8355505b6001600288020188555050505b50505050505050565b6000613b9583856137d7565b9350613ba28385846131ce565b82840190509392505050565b6000613bbb828486613b89565b91508190509392505050565b60008190508160005260206000209050919050565b60008154613be98161351d565b613bf38186612c8e565b94506001821660008114613c0e5760018114613c2457613c57565b60ff198316865281151560200286019350613c57565b613c2d85613bc7565b60005b83811015613c4f57815481890152600182019150602081019050613c30565b808801955050505b50505092915050565b6000613c6c8385612c8e565b9350613c798385846131ce565b613c8283612cc9565b840190509392505050565b6000606082019050613ca260008301876130e5565b8181036020830152613cb48186613bdc565b90508181036040830152613cc9818486613c60565b905095945050505050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6000613d30602e83612c8e565b9150613d3b82613cd4565b604082019050919050565b60006020820190508181036000830152613d5f81613d23565b9050919050565b7f6e6f6e6578697374616e7420746f6b656e000000000000000000000000000000600082015250565b6000613d9c601183612c8e565b9150613da782613d66565b602082019050919050565b60006020820190508181036000830152613dcb81613d8f565b9050919050565b6000613ddd82612d35565b9150613de883612d35565b9250828202613df681612d35565b91508282048414831517613e0d57613e0c613760565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613e4e82612d35565b9150613e5983612d35565b925082613e6957613e68613e14565b5b828204905092915050565b7f63616c6c6572206e6f7420616c6c6f776564206d696e74657200000000000000600082015250565b6000613eaa601983612c8e565b9150613eb582613e74565b602082019050919050565b60006020820190508181036000830152613ed981613e9d565b9050919050565b613ee982612c83565b67ffffffffffffffff811115613f0257613f01613122565b5b613f0c825461351d565b613f17828285613a2c565b600060209050601f831160018114613f4a5760008415613f38578287015190505b613f428582613a9d565b865550613faa565b601f198416613f588661390d565b60005b82811015613f8057848901518255600182019150602085019450602081019050613f5b565b86831015613f9d5784890151613f99601f891682613a7f565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000613fe8601883612c8e565b9150613ff382613fb2565b602082019050919050565b6000602082019050818103600083015261401781613fdb565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b600061407a602983612c8e565b91506140858261401e565b604082019050919050565b600060208201905081810360008301526140a98161406d565b9050919050565b600081905092915050565b50565b60006140cb6000836140b0565b91506140d6826140bb565b600082019050919050565b60006140ec826140be565b9150819050919050565b600081519050614105816132de565b92915050565b60006020828403121561412157614120612bbe565b5b600061412f848285016140f6565b91505092915050565b7f726f79616c7479206f7574206f662072616e6765000000000000000000000000600082015250565b600061416e601483612c8e565b915061417982614138565b602082019050919050565b6000602082019050818103600083015261419d81614161565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614200602683612c8e565b915061420b826141a4565b604082019050919050565b6000602082019050818103600083015261422f816141f3565b9050919050565b7f6f6e6c792063726561746f720000000000000000000000000000000000000000600082015250565b600061426c600c83612c8e565b915061427782614236565b602082019050919050565b6000602082019050818103600083015261429b8161425f565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142d8602083612c8e565b91506142e3826142a2565b602082019050919050565b60006020820190508181036000830152614307816142cb565b9050919050565b7f496e636f72726563742055524920707265666978206c656e6774680000000000600082015250565b6000614344601b83612c8e565b915061434f8261430e565b602082019050919050565b6000602082019050818103600083015261437381614337565b9050919050565b60008190508160005260206000209050919050565b6000815461439c8161351d565b6143a681866140b0565b945060018216600081146143c157600181146143d657614409565b60ff1983168652811515820286019350614409565b6143df8561437a565b60005b83811015614401578154818901526001820191506020810190506143e2565b838801955050505b50505092915050565b600061441e828461438f565b915081905092915050565b7f496e636f72726563742055524920707265666978000000000000000000000000600082015250565b600061445f601483612c8e565b915061446a82614429565b602082019050919050565b6000602082019050818103600083015261448e81614452565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006144f1602583612c8e565b91506144fc82614495565b604082019050919050565b60006020820190508181036000830152614520816144e4565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614583602483612c8e565b915061458e82614527565b604082019050919050565b600060208201905081810360008301526145b281614576565b9050919050565b60006145c482612d35565b91506145cf83612d35565b92508282039050818111156145e7576145e6613760565b5b92915050565b60006145f882612d35565b915061460383612d35565b925082820190508082111561461b5761461a613760565b5b92915050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000614657601083612c8e565b915061466282614621565b602082019050919050565b600060208201905081810360008301526146868161464a565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006146c3602083612c8e565b91506146ce8261468d565b602082019050919050565b600060208201905081810360008301526146f2816146b6565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061472f601c83612c8e565b915061473a826146f9565b602082019050919050565b6000602082019050818103600083015261475e81614722565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061479b601983612c8e565b91506147a682614765565b602082019050919050565b600060208201905081810360008301526147ca8161478e565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061482d603283612c8e565b9150614838826147d1565b604082019050919050565b6000602082019050818103600083015261485c81614820565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000614899601483612c8e565b91506148a482614863565b602082019050919050565b600060208201905081810360008301526148c88161488c565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006148f6826148cf565b61490081856148da565b9350614910818560208601612c9f565b61491981612cc9565b840191505092915050565b60006080820190506149396000830187612dca565b6149466020830186612dca565b61495360408301856130e5565b818103606083015261496581846148eb565b905095945050505050565b60008151905061497f81612bf4565b92915050565b60006020828403121561499b5761499a612bbe565b5b60006149a984828501614970565b9150509291505056fea2646970667358221220fccadec4765f6489645d5376d40a5cbaf35be21a7cfffe47f920ff2aaf1583cd64736f6c6343000811003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000005dc0000000000000000000000003433361e17d06fce4adbc596995cce73cc241bab000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000064156415441520000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000641564154415200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007697066733a2f2f00000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102115760003560e01c8063715018a611610125578063bceb2a22116100ad578063da8fbf2a1161007c578063da8fbf2a146105af578063e1ee5c83146105b9578063e985e9c5146105d5578063f2fde38b14610605578063f8361bab1461062157610211565b8063bceb2a221461053d578063c20938e014610559578063c87b56dd14610575578063da304499146105a557610211565b8063a0ef91df116100f4578063a0ef91df146104e7578063a22cb465146104f1578063ae2003221461050d578063b2cfad2814610517578063b88d4fde1461052157610211565b8063715018a6146104855780638da5cb5b1461048f57806395d89b41146104ad57806398df857c146104cb57610211565b806333eba49a116101a8578063589a174311610177578063589a1743146103b95780635c975abb146103e957806362b99ad4146104075780636352211e1461042557806370a082311461045557610211565b806333eba49a14610335578063423afa661461035157806342842e0e1461038157806342966c681461039d57610211565b80630b185dfe116101e45780630b185dfe146102b057806318e97fd1146102cc57806323b872dd146102e85780632a55205a1461030457610211565b806301ffc9a71461021657806306fdde0314610246578063081812fc14610264578063095ea7b314610294575b600080fd5b610230600480360381019061022b9190612c20565b61063d565b60405161023d9190612c68565b60405180910390f35b61024e6106b7565b60405161025b9190612d13565b60405180910390f35b61027e60048036038101906102799190612d6b565b610749565b60405161028b9190612dd9565b60405180910390f35b6102ae60048036038101906102a99190612e20565b61078f565b005b6102ca60048036038101906102c59190612f1b565b6108a6565b005b6102e660048036038101906102e19190612ff2565b6109c3565b005b61030260048036038101906102fd9190613052565b610c2d565b005b61031e600480360381019061031991906130a5565b610c8d565b60405161032c9291906130f4565b60405180910390f35b61034f600480360381019061034a919061324d565b610db1565b005b61036b60048036038101906103669190613296565b610f8d565b6040516103789190612c68565b60405180910390f35b61039b60048036038101906103969190613052565b610fad565b005b6103b760048036038101906103b29190612d6b565b610fcd565b005b6103d360048036038101906103ce9190612d6b565b610fe1565b6040516103e09190612dd9565b60405180910390f35b6103f1611066565b6040516103fe9190612c68565b60405180910390f35b61040f61107d565b60405161041c9190612d13565b60405180910390f35b61043f600480360381019061043a9190612d6b565b61110b565b60405161044c9190612dd9565b60405180910390f35b61046f600480360381019061046a9190613296565b6111bc565b60405161047c91906132c3565b60405180910390f35b61048d611273565b005b610497611287565b6040516104a49190612dd9565b60405180910390f35b6104b56112b1565b6040516104c29190612d13565b60405180910390f35b6104e560048036038101906104e09190613296565b611343565b005b6104ef6113e9565b005b61050b6004803603810190610506919061330a565b61148c565b005b6105156114a2565b005b61051f6114b4565b005b61053b600480360381019061053691906133eb565b61151c565b005b6105576004803603810190610552919061324d565b61157e565b005b610573600480360381019061056e919061346e565b6115e7565b005b61058f600480360381019061058a9190612d6b565b6116a2565b60405161059c9190612d13565b60405180910390f35b6105ad61178f565b005b6105b76117f7565b005b6105d360048036038101906105ce9190612d6b565b611809565b005b6105ef60048036038101906105ea91906134ae565b6118ae565b6040516105fc9190612c68565b60405180910390f35b61061f600480360381019061061a9190613296565b611942565b005b61063b6004803603810190610636919061346e565b6119c5565b005b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106b057506106af82611b5e565b5b9050919050565b6060600080546106c69061351d565b80601f01602080910402602001604051908101604052809291908181526020018280546106f29061351d565b801561073f5780601f106107145761010080835404028352916020019161073f565b820191906000526020600020905b81548152906001019060200180831161072257829003601f168201915b5050505050905090565b600061075482611c40565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061079a8261110b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361080a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610801906135c0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610829611c8b565b73ffffffffffffffffffffffffffffffffffffffff161480610858575061085781610852611c8b565b6118ae565b5b610897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088e90613652565b60405180910390fd5b6108a18383611c93565b505050565b6108ae611d4c565b8181905084849050146108f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ed906136e4565b60405180910390fd5b60005b848490508110156109bc5782828281811061091757610916613704565b5b905060200201602081019061092c9190613733565b600f600087878581811061094357610942613704565b5b90506020020160208101906109589190613296565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806109b49061378f565b9150506108f9565b5050505050565b81818080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050600c81604051610a189190613813565b908152602001604051809103902060009054906101000a900460ff1615610a74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6b90613876565b60405180910390fd5b610a7d81611dca565b83610a86611287565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610b365750600d600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148015610b355750600960009054906101000a900460ff16155b5b610b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6c906138e2565b60405180910390fd5b6000600b600087815260200190815260200160002090508484600b60008981526020019081526020016000209182610bae929190613ab9565b506001600c8686604051610bc3929190613bae565b908152602001604051809103902060006101000a81548160ff0219169083151502179055507f877cb5fe270579c5071e4a16ceb146f7be4bf5ae40e9d8896a2a3727d781de3386828787604051610c1d9493929190613c8d565b60405180910390a1505050505050565b610c3e610c38611c8b565b82611f52565b610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7490613d46565b60405180910390fd5b610c88838383611fe7565b505050565b600080610c998461224d565b610cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccf90613db2565b60405180910390fd5b612710600a5484610ce99190613dd2565b610cf39190613e43565b9050600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d7357600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610da8565b600d600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b91509250929050565b610db96122b9565b80600c81604051610dca9190613813565b908152602001604051809103902060009054906101000a900460ff1615610e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1d90613876565b60405180910390fd5b610e2f81611dca565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb290613ec0565b60405180910390fd5b81600b600060085481526020019081526020016000209081610edd9190613ee0565b506001600c83604051610ef09190613813565b908152602001604051809103902060006101000a81548160ff02191690831515021790555033600d6000600854815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610f893360086000815480929190610f809061378f565b91905055612303565b5050565b600f6020528060005260406000206000915054906101000a900460ff1681565b610fc88383836040518060200160405280600081525061151c565b505050565b610fd5611d4c565b610fde816124dc565b50565b6000610fec8261224d565b61102b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102290613db2565b60405180910390fd5b600d600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600660149054906101000a900460ff16905090565b600e805461108a9061351d565b80601f01602080910402602001604051908101604052809291908181526020018280546110b69061351d565b80156111035780601f106110d857610100808354040283529160200191611103565b820191906000526020600020905b8154815290600101906020018083116110e657829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111aa90613ffe565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361122c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122390614090565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61127b611d4c565b61128560006125f9565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546112c09061351d565b80601f01602080910402602001604051908101604052809291908181526020018280546112ec9061351d565b80156113395780601f1061130e57610100808354040283529160200191611339565b820191906000526020600020905b81548152906001019060200180831161131c57829003601f168201915b5050505050905090565b61134b611d4c565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fbde6a1f22996ef208a396e5e011324e19c33cc4cd523fdcc34e26ce88c43e08c60405160405180910390a350565b6113f1611d4c565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051611439906140e1565b60006040518083038185875af1925050503d8060008114611476576040519150601f19603f3d011682016040523d82523d6000602084013e61147b565b606091505b505090508061148957600080fd5b50565b61149e611497611c8b565b83836126bf565b5050565b6114aa611d4c565b6114b261282b565b565b6114bc611d4c565b6000600960006101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff167f7c2295421de1a88d6392f0fce429c317a32ed5d38be6f6e00a139f01590e920c60405160405180910390a2565b61152d611527611c8b565b83611f52565b61156c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156390613d46565b60405180910390fd5b6115788484848461288e565b50505050565b611586611d4c565b80600e90816115959190613ee0565b503373ffffffffffffffffffffffffffffffffffffffff167fde16c1e51a062f420283920369ff930e4ec41c5721ff0fa09a083ef5b79c97de826040516115dc9190612d13565b60405180910390a250565b6115ef611d4c565b60008173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518363ffffffff1660e01b815260040161164e9291906130f4565b6020604051808303816000875af115801561166d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611691919061410b565b90508061169d57600080fd5b505050565b60606116ad8261224d565b6116ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e390613db2565b60405180910390fd5b600b6000838152602001908152602001600020805461170a9061351d565b80601f01602080910402602001604051908101604052809291908181526020018280546117369061351d565b80156117835780601f1061175857610100808354040283529160200191611783565b820191906000526020600020905b81548152906001019060200180831161176657829003601f168201915b50505050509050919050565b611797611d4c565b6001600960006101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff167feafe05283d5f7228187a72dfd58c6ae8296f91a6a9be9a29406a6941d1c593e760405160405180910390a2565b6117ff611d4c565b6118076128ea565b565b611811611d4c565b612710811115611856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184d90614184565b60405180910390fd5b80600a819055503373ffffffffffffffffffffffffffffffffffffffff167f4b7dbec63042c1dda577f7aa6fd14122cddcc3f21992561e3a69c6db7822b3c6826040516118a391906132c3565b60405180910390a250565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61194a611d4c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b090614216565b60405180910390fd5b6119c2816125f9565b50565b600d600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611a645750611a35611287565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9a90614282565b60405180910390fd5b80600d600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f0a1be7c84f8d2439cd1106b06022308991ce5b9d1f38ee72ba89d2ffd89bfe8f84604051611b5291906132c3565b60405180910390a35050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611c2957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611c395750611c388261294d565b5b9050919050565b611c498161224d565b611c88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7f90613ffe565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611d068361110b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611d54611c8b565b73ffffffffffffffffffffffffffffffffffffffff16611d72611287565b73ffffffffffffffffffffffffffffffffffffffff1614611dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbf906142ee565b60405180910390fd5b565b60008190506000600e8054611dde9061351d565b9050905080825111611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c9061435a565b60405180910390fd5b60008167ffffffffffffffff811115611e4157611e40613122565b5b6040519080825280601f01601f191660200182016040528015611e735781602001600182028036833780820191505090505b50905060005b82811015611eec57838181518110611e9457611e93613704565b5b602001015160f81c60f81b828281518110611eb257611eb1613704565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806001019050611e79565b50600e604051611efc9190614412565b6040518091039020818051906020012014611f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4390614475565b60405180910390fd5b50505050565b600080611f5e8361110b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611fa05750611f9f81856118ae565b5b80611fde57508373ffffffffffffffffffffffffffffffffffffffff16611fc684610749565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166120078261110b565b73ffffffffffffffffffffffffffffffffffffffff161461205d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205490614507565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c390614599565b60405180910390fd5b6120d78383836129b7565b6120e2600082611c93565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461213291906145b9565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461218991906145ed565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46122488383836129bc565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6122c1611066565b15612301576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f89061466d565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612372576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612369906146d9565b60405180910390fd5b61237b8161224d565b156123bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b290614745565b60405180910390fd5b6123c7600083836129b7565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461241791906145ed565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124d8600083836129bc565b5050565b60006124e78261110b565b90506124f5816000846129b7565b612500600083611c93565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461255091906145b9565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125f5816000846129bc565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361272d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612724906147b1565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161281e9190612c68565b60405180910390a3505050565b6128336129c1565b6000600660146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612877611c8b565b6040516128849190612dd9565b60405180910390a1565b612899848484611fe7565b6128a584848484612a0a565b6128e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128db90614843565b60405180910390fd5b50505050565b6128f26122b9565b6001600660146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612936611c8b565b6040516129439190612dd9565b60405180910390a1565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b505050565b6129c9611066565b612a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ff906148af565b60405180910390fd5b565b6000612a2b8473ffffffffffffffffffffffffffffffffffffffff16612b91565b15612b84578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a54611c8b565b8786866040518563ffffffff1660e01b8152600401612a769493929190614924565b6020604051808303816000875af1925050508015612ab257506040513d601f19601f82011682018060405250810190612aaf9190614985565b60015b612b34573d8060008114612ae2576040519150601f19603f3d011682016040523d82523d6000602084013e612ae7565b606091505b506000815103612b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2390614843565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b89565b600190505b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612bfd81612bc8565b8114612c0857600080fd5b50565b600081359050612c1a81612bf4565b92915050565b600060208284031215612c3657612c35612bbe565b5b6000612c4484828501612c0b565b91505092915050565b60008115159050919050565b612c6281612c4d565b82525050565b6000602082019050612c7d6000830184612c59565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612cbd578082015181840152602081019050612ca2565b60008484015250505050565b6000601f19601f8301169050919050565b6000612ce582612c83565b612cef8185612c8e565b9350612cff818560208601612c9f565b612d0881612cc9565b840191505092915050565b60006020820190508181036000830152612d2d8184612cda565b905092915050565b6000819050919050565b612d4881612d35565b8114612d5357600080fd5b50565b600081359050612d6581612d3f565b92915050565b600060208284031215612d8157612d80612bbe565b5b6000612d8f84828501612d56565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612dc382612d98565b9050919050565b612dd381612db8565b82525050565b6000602082019050612dee6000830184612dca565b92915050565b612dfd81612db8565b8114612e0857600080fd5b50565b600081359050612e1a81612df4565b92915050565b60008060408385031215612e3757612e36612bbe565b5b6000612e4585828601612e0b565b9250506020612e5685828601612d56565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f840112612e8557612e84612e60565b5b8235905067ffffffffffffffff811115612ea257612ea1612e65565b5b602083019150836020820283011115612ebe57612ebd612e6a565b5b9250929050565b60008083601f840112612edb57612eda612e60565b5b8235905067ffffffffffffffff811115612ef857612ef7612e65565b5b602083019150836020820283011115612f1457612f13612e6a565b5b9250929050565b60008060008060408587031215612f3557612f34612bbe565b5b600085013567ffffffffffffffff811115612f5357612f52612bc3565b5b612f5f87828801612e6f565b9450945050602085013567ffffffffffffffff811115612f8257612f81612bc3565b5b612f8e87828801612ec5565b925092505092959194509250565b60008083601f840112612fb257612fb1612e60565b5b8235905067ffffffffffffffff811115612fcf57612fce612e65565b5b602083019150836001820283011115612feb57612fea612e6a565b5b9250929050565b60008060006040848603121561300b5761300a612bbe565b5b600061301986828701612d56565b935050602084013567ffffffffffffffff81111561303a57613039612bc3565b5b61304686828701612f9c565b92509250509250925092565b60008060006060848603121561306b5761306a612bbe565b5b600061307986828701612e0b565b935050602061308a86828701612e0b565b925050604061309b86828701612d56565b9150509250925092565b600080604083850312156130bc576130bb612bbe565b5b60006130ca85828601612d56565b92505060206130db85828601612d56565b9150509250929050565b6130ee81612d35565b82525050565b60006040820190506131096000830185612dca565b61311660208301846130e5565b9392505050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61315a82612cc9565b810181811067ffffffffffffffff8211171561317957613178613122565b5b80604052505050565b600061318c612bb4565b90506131988282613151565b919050565b600067ffffffffffffffff8211156131b8576131b7613122565b5b6131c182612cc9565b9050602081019050919050565b82818337600083830152505050565b60006131f06131eb8461319d565b613182565b90508281526020810184848401111561320c5761320b61311d565b5b6132178482856131ce565b509392505050565b600082601f83011261323457613233612e60565b5b81356132448482602086016131dd565b91505092915050565b60006020828403121561326357613262612bbe565b5b600082013567ffffffffffffffff81111561328157613280612bc3565b5b61328d8482850161321f565b91505092915050565b6000602082840312156132ac576132ab612bbe565b5b60006132ba84828501612e0b565b91505092915050565b60006020820190506132d860008301846130e5565b92915050565b6132e781612c4d565b81146132f257600080fd5b50565b600081359050613304816132de565b92915050565b6000806040838503121561332157613320612bbe565b5b600061332f85828601612e0b565b9250506020613340858286016132f5565b9150509250929050565b600067ffffffffffffffff82111561336557613364613122565b5b61336e82612cc9565b9050602081019050919050565b600061338e6133898461334a565b613182565b9050828152602081018484840111156133aa576133a961311d565b5b6133b58482856131ce565b509392505050565b600082601f8301126133d2576133d1612e60565b5b81356133e284826020860161337b565b91505092915050565b6000806000806080858703121561340557613404612bbe565b5b600061341387828801612e0b565b945050602061342487828801612e0b565b935050604061343587828801612d56565b925050606085013567ffffffffffffffff81111561345657613455612bc3565b5b613462878288016133bd565b91505092959194509250565b6000806040838503121561348557613484612bbe565b5b600061349385828601612d56565b92505060206134a485828601612e0b565b9150509250929050565b600080604083850312156134c5576134c4612bbe565b5b60006134d385828601612e0b565b92505060206134e485828601612e0b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061353557607f821691505b602082108103613548576135476134ee565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006135aa602183612c8e565b91506135b58261354e565b604082019050919050565b600060208201905081810360008301526135d98161359d565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b600061363c603e83612c8e565b9150613647826135e0565b604082019050919050565b6000602082019050818103600083015261366b8161362f565b9050919050565b7f61646472657373657320616e6420616c6c6f77616e636573206d75737420626560008201527f2073616d65206c656e6774680000000000000000000000000000000000000000602082015250565b60006136ce602c83612c8e565b91506136d982613672565b604082019050919050565b600060208201905081810360008301526136fd816136c1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561374957613748612bbe565b5b6000613757848285016132f5565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061379a82612d35565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036137cc576137cb613760565b5b600182019050919050565b600081905092915050565b60006137ed82612c83565b6137f781856137d7565b9350613807818560208601612c9f565b80840191505092915050565b600061381f82846137e2565b915081905092915050565b7f746f6b656e2075726920616c7265616479207573656400000000000000000000600082015250565b6000613860601683612c8e565b915061386b8261382a565b602082019050919050565b6000602082019050818103600083015261388f81613853565b9050919050565b7f6e6f7420616c6c6f77656420746f2075706461746520746f6b656e2075726900600082015250565b60006138cc601f83612c8e565b91506138d782613896565b602082019050919050565b600060208201905081810360008301526138fb816138bf565b9050919050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261396f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613932565b6139798683613932565b95508019841693508086168417925050509392505050565b6000819050919050565b60006139b66139b16139ac84612d35565b613991565b612d35565b9050919050565b6000819050919050565b6139d08361399b565b6139e46139dc826139bd565b84845461393f565b825550505050565b600090565b6139f96139ec565b613a048184846139c7565b505050565b5b81811015613a2857613a1d6000826139f1565b600181019050613a0a565b5050565b601f821115613a6d57613a3e8161390d565b613a4784613922565b81016020851015613a56578190505b613a6a613a6285613922565b830182613a09565b50505b505050565b600082821c905092915050565b6000613a9060001984600802613a72565b1980831691505092915050565b6000613aa98383613a7f565b9150826002028217905092915050565b613ac38383613902565b67ffffffffffffffff811115613adc57613adb613122565b5b613ae6825461351d565b613af1828285613a2c565b6000601f831160018114613b205760008415613b0e578287013590505b613b188582613a9d565b865550613b80565b601f198416613b2e8661390d565b60005b82811015613b5657848901358255600182019150602085019450602081019050613b31565b86831015613b735784890135613b6f601f891682613a7f565b8355505b6001600288020188555050505b50505050505050565b6000613b9583856137d7565b9350613ba28385846131ce565b82840190509392505050565b6000613bbb828486613b89565b91508190509392505050565b60008190508160005260206000209050919050565b60008154613be98161351d565b613bf38186612c8e565b94506001821660008114613c0e5760018114613c2457613c57565b60ff198316865281151560200286019350613c57565b613c2d85613bc7565b60005b83811015613c4f57815481890152600182019150602081019050613c30565b808801955050505b50505092915050565b6000613c6c8385612c8e565b9350613c798385846131ce565b613c8283612cc9565b840190509392505050565b6000606082019050613ca260008301876130e5565b8181036020830152613cb48186613bdc565b90508181036040830152613cc9818486613c60565b905095945050505050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6000613d30602e83612c8e565b9150613d3b82613cd4565b604082019050919050565b60006020820190508181036000830152613d5f81613d23565b9050919050565b7f6e6f6e6578697374616e7420746f6b656e000000000000000000000000000000600082015250565b6000613d9c601183612c8e565b9150613da782613d66565b602082019050919050565b60006020820190508181036000830152613dcb81613d8f565b9050919050565b6000613ddd82612d35565b9150613de883612d35565b9250828202613df681612d35565b91508282048414831517613e0d57613e0c613760565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613e4e82612d35565b9150613e5983612d35565b925082613e6957613e68613e14565b5b828204905092915050565b7f63616c6c6572206e6f7420616c6c6f776564206d696e74657200000000000000600082015250565b6000613eaa601983612c8e565b9150613eb582613e74565b602082019050919050565b60006020820190508181036000830152613ed981613e9d565b9050919050565b613ee982612c83565b67ffffffffffffffff811115613f0257613f01613122565b5b613f0c825461351d565b613f17828285613a2c565b600060209050601f831160018114613f4a5760008415613f38578287015190505b613f428582613a9d565b865550613faa565b601f198416613f588661390d565b60005b82811015613f8057848901518255600182019150602085019450602081019050613f5b565b86831015613f9d5784890151613f99601f891682613a7f565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000613fe8601883612c8e565b9150613ff382613fb2565b602082019050919050565b6000602082019050818103600083015261401781613fdb565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b600061407a602983612c8e565b91506140858261401e565b604082019050919050565b600060208201905081810360008301526140a98161406d565b9050919050565b600081905092915050565b50565b60006140cb6000836140b0565b91506140d6826140bb565b600082019050919050565b60006140ec826140be565b9150819050919050565b600081519050614105816132de565b92915050565b60006020828403121561412157614120612bbe565b5b600061412f848285016140f6565b91505092915050565b7f726f79616c7479206f7574206f662072616e6765000000000000000000000000600082015250565b600061416e601483612c8e565b915061417982614138565b602082019050919050565b6000602082019050818103600083015261419d81614161565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614200602683612c8e565b915061420b826141a4565b604082019050919050565b6000602082019050818103600083015261422f816141f3565b9050919050565b7f6f6e6c792063726561746f720000000000000000000000000000000000000000600082015250565b600061426c600c83612c8e565b915061427782614236565b602082019050919050565b6000602082019050818103600083015261429b8161425f565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142d8602083612c8e565b91506142e3826142a2565b602082019050919050565b60006020820190508181036000830152614307816142cb565b9050919050565b7f496e636f72726563742055524920707265666978206c656e6774680000000000600082015250565b6000614344601b83612c8e565b915061434f8261430e565b602082019050919050565b6000602082019050818103600083015261437381614337565b9050919050565b60008190508160005260206000209050919050565b6000815461439c8161351d565b6143a681866140b0565b945060018216600081146143c157600181146143d657614409565b60ff1983168652811515820286019350614409565b6143df8561437a565b60005b83811015614401578154818901526001820191506020810190506143e2565b838801955050505b50505092915050565b600061441e828461438f565b915081905092915050565b7f496e636f72726563742055524920707265666978000000000000000000000000600082015250565b600061445f601483612c8e565b915061446a82614429565b602082019050919050565b6000602082019050818103600083015261448e81614452565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006144f1602583612c8e565b91506144fc82614495565b604082019050919050565b60006020820190508181036000830152614520816144e4565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614583602483612c8e565b915061458e82614527565b604082019050919050565b600060208201905081810360008301526145b281614576565b9050919050565b60006145c482612d35565b91506145cf83612d35565b92508282039050818111156145e7576145e6613760565b5b92915050565b60006145f882612d35565b915061460383612d35565b925082820190508082111561461b5761461a613760565b5b92915050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000614657601083612c8e565b915061466282614621565b602082019050919050565b600060208201905081810360008301526146868161464a565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006146c3602083612c8e565b91506146ce8261468d565b602082019050919050565b600060208201905081810360008301526146f2816146b6565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061472f601c83612c8e565b915061473a826146f9565b602082019050919050565b6000602082019050818103600083015261475e81614722565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061479b601983612c8e565b91506147a682614765565b602082019050919050565b600060208201905081810360008301526147ca8161478e565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061482d603283612c8e565b9150614838826147d1565b604082019050919050565b6000602082019050818103600083015261485c81614820565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000614899601483612c8e565b91506148a482614863565b602082019050919050565b600060208201905081810360008301526148c88161488c565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006148f6826148cf565b61490081856148da565b9350614910818560208601612c9f565b61491981612cc9565b840191505092915050565b60006080820190506149396000830187612dca565b6149466020830186612dca565b61495360408301856130e5565b818103606083015261496581846148eb565b905095945050505050565b60008151905061497f81612bf4565b92915050565b60006020828403121561499b5761499a612bbe565b5b60006149a984828501614970565b9150509291505056fea2646970667358221220fccadec4765f6489645d5376d40a5cbaf35be21a7cfffe47f920ff2aaf1583cd64736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000005dc0000000000000000000000003433361e17d06fce4adbc596995cce73cc241bab000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000064156415441520000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000641564154415200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007697066733a2f2f00000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): AVATAR
Arg [1] : _symbol (string): AVATAR
Arg [2] : _royaltyRate (uint256): 1500
Arg [3] : _monaWallet (address): 0x3433361e17D06fCe4AdBC596995cCE73CC241baB
Arg [4] : _uriPrefix (string): ipfs://
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000005dc
Arg [3] : 0000000000000000000000003433361e17d06fce4adbc596995cce73cc241bab
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [6] : 4156415441520000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [8] : 4156415441520000000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [10] : 697066733a2f2f00000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
44426:11687:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52749:282;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32096:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33609:171;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33126:417;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55039:408;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49504:381;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34309:336;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53480:419;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;48641:332;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45441:46;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34716:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49100:83;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51008:170;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7942:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45374:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31807:222;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31538:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10807:103;;;:::i;:::-;;10159:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32265:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54150:173;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55551:187;;;:::i;:::-;;33852:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51928:72;;;:::i;:::-;;52459:155;;;:::i;:::-;;34972:323;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51309:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55936:174;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50005:243;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52154:150;;;:::i;:::-;;51679:68;;;:::i;:::-;;54576:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34078:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11065:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50564:316;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52749:282;52887:4;52944:26;52929:41;;;:11;:41;;;;:94;;;;52987:36;53011:11;52987:23;:36::i;:::-;52929:94;52909:114;;52749:282;;;:::o;32096:100::-;32150:13;32183:5;32176:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32096:100;:::o;33609:171::-;33685:7;33705:23;33720:7;33705:14;:23::i;:::-;33748:15;:24;33764:7;33748:24;;;;;;;;;;;;;;;;;;;;;33741:31;;33609:171;;;:::o;33126:417::-;33207:13;33223:23;33238:7;33223:14;:23::i;:::-;33207:39;;33271:5;33265:11;;:2;:11;;;33257:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;33365:5;33349:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;33374:37;33391:5;33398:12;:10;:12::i;:::-;33374:16;:37::i;:::-;33349:62;33327:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;33514:21;33523:2;33527:7;33514:8;:21::i;:::-;33196:347;33126:417;;:::o;55039:408::-;10045:13;:11;:13::i;:::-;55222:10:::1;;:17;;55202:9;;:16;;:37;55180:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;55327:9;55322:118;55346:9;;:16;;55342:1;:20;55322:118;;;55415:10;;55426:1;55415:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;55384:14;:28;55399:9;;55409:1;55399:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;55384:28;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;55364:3;;;;;:::i;:::-;;;;55322:118;;;;55039:408:::0;;;;:::o;49504:381::-;49614:9;;46793:180;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46863:13;46877:9;46863:24;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;46862:25;46854:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;46925:28;46943:9;46925:17;:28::i;:::-;49653:8:::1;47220:7;:5;:7::i;:::-;47206:21;;:10;:21;;;:105;;;;47263:9;:19;47273:8;47263:19;;;;;;;;;;;;;;;;;;;;;47249:33;;:10;:33;;;:61;;;;;47287:23;;;;;;;;;;;47286:24;47249:61;47206:105;47184:186;;;;;;;;;;;;:::i;:::-;;;;;;;;;49679:26:::2;49708:10;:20;49719:8;49708:20;;;;;;;;;;;49679:49;;49762:9;;49739:10;:20;49750:8;49739:20;;;;;;;;;;;:32;;;;;;;:::i;:::-;;49809:4;49782:13;49796:9;;49782:24;;;;;;;:::i;:::-;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;49829:48;49844:8;49854:11;49867:9;;49829:48;;;;;;;;;:::i;:::-;;;;;;;;49668:217;46964:1:::1;49504:381:::0;;;;:::o;34309:336::-;34504:41;34523:12;:10;:12::i;:::-;34537:7;34504:18;:41::i;:::-;34496:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;34609:28;34619:4;34625:2;34629:7;34609:9;:28::i;:::-;34309:336;;;:::o;53480:419::-;53589:16;53607:21;53654:17;53662:8;53654:7;:17::i;:::-;53646:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;44911:6;53734:11;;53721:10;:24;;;;:::i;:::-;53720:47;;;;:::i;:::-;53704:63;;53811:1;53789:24;;:10;;;;;;;;;;;:24;;;:59;;53838:10;;;;;;;;;;;53789:59;;;53816:9;:19;53826:8;53816:19;;;;;;;;;;;;;;;;;;;;;53789:59;53778:70;;53480:419;;;;;:::o;48641:332::-;7547:19;:17;:19::i;:::-;48749:9:::1;46863:13;46877:9;46863:24;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;46862:25;46854:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;46925:28;46943:9;46925:17;:28::i;:::-;47442:14:::2;:26;47457:10;47442:26;;;;;;;;;;;;;;;;;;;;;;;;;47434:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;48825:9:::3;48799:10;:23;48810:11;;48799:23;;;;;;;;;;;:35;;;;;;:::i;:::-;;48872:4;48845:13;48859:9;48845:24;;;;;;:::i;:::-;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;48912:10;48887:9;:22;48897:11;;48887:22;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;48933:32;48939:10;48951:11;;:13;;;;;;;;;:::i;:::-;;;;;48933:5;:32::i;:::-;7577:1:::1;48641:332:::0;:::o;45441:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;34716:185::-;34854:39;34871:4;34877:2;34881:7;34854:39;;;;;;;;;;;;:16;:39::i;:::-;34716:185;;;:::o;49100:83::-;10045:13;:11;:13::i;:::-;49160:15:::1;49166:8;49160:5;:15::i;:::-;49100:83:::0;:::o;51008:170::-;51066:7;51094:17;51102:8;51094:7;:17::i;:::-;51086:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;51151:9;:19;51161:8;51151:19;;;;;;;;;;;;;;;;;;;;;51144:26;;51008:170;;;:::o;7942:86::-;7989:4;8013:7;;;;;;;;;;;8006:14;;7942:86;:::o;45374:23::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31807:222::-;31879:7;31899:13;31915:7;:16;31923:7;31915:16;;;;;;;;;;;;;;;;;;;;;31899:32;;31967:1;31950:19;;:5;:19;;;31942:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;32016:5;32009:12;;;31807:222;;;:::o;31538:207::-;31610:7;31655:1;31638:19;;:5;:19;;;31630:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31721:9;:16;31731:5;31721:16;;;;;;;;;;;;;;;;31714:23;;31538:207;;;:::o;10807:103::-;10045:13;:11;:13::i;:::-;10872:30:::1;10899:1;10872:18;:30::i;:::-;10807:103::o:0;10159:87::-;10205:7;10232:6;;;;;;;;;;;10225:13;;10159:87;:::o;32265:104::-;32321:13;32354:7;32347:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32265:104;:::o;54150:173::-;10045:13;:11;:13::i;:::-;54241:14:::1;54228:10;;:27;;;;;;;;;;;;;;;;;;54304:10;54271:44;;54288:14;54271:44;;;;;;;;;;;;54150:173:::0;:::o;55551:187::-;10045:13;:11;:13::i;:::-;55603:12:::1;55629:10;;;;;;;;;;;55621:24;;55667:21;55621:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55602:101;;;55722:7;55714:16;;;::::0;::::1;;55591:147;55551:187::o:0;33852:155::-;33947:52;33966:12;:10;:12::i;:::-;33980:8;33990;33947:18;:52::i;:::-;33852:155;;:::o;51928:72::-;10045:13;:11;:13::i;:::-;51982:10:::1;:8;:10::i;:::-;51928:72::o:0;52459:155::-;10045:13;:11;:13::i;:::-;52549:5:::1;52523:23;;:31;;;;;;;;;;;;;;;;;;52595:10;52570:36;;;;;;;;;;;;52459:155::o:0;34972:323::-;35146:41;35165:12;:10;:12::i;:::-;35179:7;35146:18;:41::i;:::-;35138:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;35249:38;35263:4;35269:2;35273:7;35282:4;35249:13;:38::i;:::-;34972:323;;;;:::o;51309:164::-;10045:13;:11;:13::i;:::-;51400:10:::1;51388:9;:22;;;;;;:::i;:::-;;51454:10;51426:39;;;51442:10;51426:39;;;;;;:::i;:::-;;;;;;;;51309:164:::0;:::o;55936:174::-;10045:13;:11;:13::i;:::-;56018:12:::1;56040:5;56033:22;;;56056:10;;;;;;;;;;;56068:6;56033:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;56018:57;;56094:7;56086:16;;;::::0;::::1;;56007:103;55936:174:::0;;:::o;50005:243::-;50124:13;50163:17;50171:8;50163:7;:17::i;:::-;50155:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;50220:10;:20;50231:8;50220:20;;;;;;;;;;;50213:27;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50005:243;;;:::o;52154:150::-;10045:13;:11;:13::i;:::-;52242:4:::1;52216:23;;:30;;;;;;;;;;;;;;;;;;52285:10;52262:34;;;;;;;;;;;;52154:150::o:0;51679:68::-;10045:13;:11;:13::i;:::-;51731:8:::1;:6;:8::i;:::-;51679:68::o:0;54576:207::-;10045:13;:11;:13::i;:::-;54663:5:::1;54654;:14;;54646:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;54718:5;54704:11;:19;;;;54764:10;54739:36;;;54757:5;54739:36;;;;;;:::i;:::-;;;;;;;;54576:207:::0;:::o;34078:164::-;34175:4;34199:18;:25;34218:5;34199:25;;;;;;;;;;;;;;;:35;34225:8;34199:35;;;;;;;;;;;;;;;;;;;;;;;;;34192:42;;34078:164;;;;:::o;11065:201::-;10045:13;:11;:13::i;:::-;11174:1:::1;11154:22;;:8;:22;;::::0;11146:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;11230:28;11249:8;11230:18;:28::i;:::-;11065:201:::0;:::o;50564:316::-;50680:9;:19;50690:8;50680:19;;;;;;;;;;;;;;;;;;;;;50666:33;;:10;:33;;;:58;;;;50717:7;:5;:7::i;:::-;50703:21;;:10;:21;;;50666:58;50644:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;50797:11;50775:9;:19;50785:8;50775:19;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;50861:10;50824:48;;50848:11;50824:48;;;50838:8;50824:48;;;;;;:::i;:::-;;;;;;;;50564:316;;:::o;31169:305::-;31271:4;31323:25;31308:40;;;:11;:40;;;;:105;;;;31380:33;31365:48;;;:11;:48;;;;31308:105;:158;;;;31430:36;31454:11;31430:23;:36::i;:::-;31308:158;31288:178;;31169:305;;;:::o;41584:135::-;41666:16;41674:7;41666;:16::i;:::-;41658:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;41584:135;:::o;6055:98::-;6108:7;6135:10;6128:17;;6055:98;:::o;40863:174::-;40965:2;40938:15;:24;40954:7;40938:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;41021:7;41017:2;40983:46;;40992:23;41007:7;40992:14;:23::i;:::-;40983:46;;;;;;;;;;;;40863:174;;:::o;10324:132::-;10399:12;:10;:12::i;:::-;10388:23;;:7;:5;:7::i;:::-;:23;;;10380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10324:132::o;47586:825::-;47663:24;47696:9;47663:43;;47717:20;47746:9;47740:23;;;;;:::i;:::-;;;47717:46;;47908:12;47887:11;:18;:33;47865:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;47986:25;48024:12;48014:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47986:51;;48117:9;48112:157;48132:12;48128:1;:16;48112:157;;;48181:11;48193:1;48181:14;;;;;;;;:::i;:::-;;;;;;;;;;48163:12;48176:1;48163:15;;;;;;;;:::i;:::-;;;;;:32;;;;;;;;;;;48239:3;;;;;48112:157;;;;48344:9;48328:27;;;;;;:::i;:::-;;;;;;;;48311:12;48301:23;;;;;;:54;48279:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;47652:759;;;47586:825;:::o;37096:264::-;37189:4;37206:13;37222:23;37237:7;37222:14;:23::i;:::-;37206:39;;37275:5;37264:16;;:7;:16;;;:52;;;;37284:32;37301:5;37308:7;37284:16;:32::i;:::-;37264:52;:87;;;;37344:7;37320:31;;:20;37332:7;37320:11;:20::i;:::-;:31;;;37264:87;37256:96;;;37096:264;;;;:::o;40119:625::-;40278:4;40251:31;;:23;40266:7;40251:14;:23::i;:::-;:31;;;40243:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;40357:1;40343:16;;:2;:16;;;40335:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;40413:39;40434:4;40440:2;40444:7;40413:20;:39::i;:::-;40517:29;40534:1;40538:7;40517:8;:29::i;:::-;40578:1;40559:9;:15;40569:4;40559:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;40607:1;40590:9;:13;40600:2;40590:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;40638:2;40619:7;:16;40627:7;40619:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;40677:7;40673:2;40658:27;;40667:4;40658:27;;;;;;;;;;;;40698:38;40718:4;40724:2;40728:7;40698:19;:38::i;:::-;40119:625;;;:::o;36802:127::-;36867:4;36919:1;36891:30;;:7;:16;36899:7;36891:16;;;;;;;;;;;;;;;;;;;;;:30;;;;36884:37;;36802:127;;;:::o;8101:108::-;8172:8;:6;:8::i;:::-;8171:9;8163:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;8101:108::o;38694:439::-;38788:1;38774:16;;:2;:16;;;38766:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;38847:16;38855:7;38847;:16::i;:::-;38846:17;38838:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;38909:45;38938:1;38942:2;38946:7;38909:20;:45::i;:::-;38984:1;38967:9;:13;38977:2;38967:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;39015:2;38996:7;:16;39004:7;38996:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;39060:7;39056:2;39035:33;;39052:1;39035:33;;;;;;;;;;;;39081:44;39109:1;39113:2;39117:7;39081:19;:44::i;:::-;38694:439;;:::o;39362:420::-;39422:13;39438:23;39453:7;39438:14;:23::i;:::-;39422:39;;39474:48;39495:5;39510:1;39514:7;39474:20;:48::i;:::-;39563:29;39580:1;39584:7;39563:8;:29::i;:::-;39625:1;39605:9;:16;39615:5;39605:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;39644:7;:16;39652:7;39644:16;;;;;;;;;;;;39637:23;;;;;;;;;;;39706:7;39702:1;39678:36;;39687:5;39678:36;;;;;;;;;;;;39727:47;39747:5;39762:1;39766:7;39727:19;:47::i;:::-;39411:371;39362:420;:::o;11426:191::-;11500:16;11519:6;;;;;;;;;;;11500:25;;11545:8;11536:6;;:17;;;;;;;;;;;;;;;;;;11600:8;11569:40;;11590:8;11569:40;;;;;;;;;;;;11489:128;11426:191;:::o;41180:315::-;41335:8;41326:17;;:5;:17;;;41318:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;41422:8;41384:18;:25;41403:5;41384:25;;;;;;;;;;;;;;;:35;41410:8;41384:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;41468:8;41446:41;;41461:5;41446:41;;;41478:8;41446:41;;;;;;:::i;:::-;;;;;;;;41180:315;;;:::o;8797:120::-;7806:16;:14;:16::i;:::-;8866:5:::1;8856:7;;:15;;;;;;;;;;;;;;;;;;8887:22;8896:12;:10;:12::i;:::-;8887:22;;;;;;:::i;:::-;;;;;;;;8797:120::o:0;36176:313::-;36332:28;36342:4;36348:2;36352:7;36332:9;:28::i;:::-;36379:47;36402:4;36408:2;36412:7;36421:4;36379:22;:47::i;:::-;36371:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;36176:313;;;;:::o;8538:118::-;7547:19;:17;:19::i;:::-;8608:4:::1;8598:7;;:14;;;;;;;;;;;;;;;;;;8628:20;8635:12;:10;:12::i;:::-;8628:20;;;;;;:::i;:::-;;;;;;;;8538:118::o:0;23911:157::-;23996:4;24035:25;24020:40;;;:11;:40;;;;24013:47;;23911:157;;;:::o;43708:126::-;;;;:::o;44219:125::-;;;;:::o;8286:108::-;8353:8;:6;:8::i;:::-;8345:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;8286:108::o;42283:853::-;42437:4;42458:15;:2;:13;;;:15::i;:::-;42454:675;;;42510:2;42494:36;;;42531:12;:10;:12::i;:::-;42545:4;42551:7;42560:4;42494:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;42490:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42752:1;42735:6;:13;:18;42731:328;;42778:60;;;;;;;;;;:::i;:::-;;;;;;;;42731:328;43009:6;43003:13;42994:6;42990:2;42986:15;42979:38;42490:584;42626:41;;;42616:51;;;:6;:51;;;;42609:58;;;;;42454:675;43113:4;43106:11;;42283:853;;;;;;;:::o;12857:326::-;12917:4;13174:1;13152:7;:19;;;:23;13145:30;;12857:326;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:117::-;4999:1;4996;4989:12;5013:117;5122:1;5119;5112:12;5136:117;5245:1;5242;5235:12;5276:568;5349:8;5359:6;5409:3;5402:4;5394:6;5390:17;5386:27;5376:122;;5417:79;;:::i;:::-;5376:122;5530:6;5517:20;5507:30;;5560:18;5552:6;5549:30;5546:117;;;5582:79;;:::i;:::-;5546:117;5696:4;5688:6;5684:17;5672:29;;5750:3;5742:4;5734:6;5730:17;5720:8;5716:32;5713:41;5710:128;;;5757:79;;:::i;:::-;5710:128;5276:568;;;;;:::o;5864:565::-;5934:8;5944:6;5994:3;5987:4;5979:6;5975:17;5971:27;5961:122;;6002:79;;:::i;:::-;5961:122;6115:6;6102:20;6092:30;;6145:18;6137:6;6134:30;6131:117;;;6167:79;;:::i;:::-;6131:117;6281:4;6273:6;6269:17;6257:29;;6335:3;6327:4;6319:6;6315:17;6305:8;6301:32;6298:41;6295:128;;;6342:79;;:::i;:::-;6295:128;5864:565;;;;;:::o;6435:928::-;6554:6;6562;6570;6578;6627:2;6615:9;6606:7;6602:23;6598:32;6595:119;;;6633:79;;:::i;:::-;6595:119;6781:1;6770:9;6766:17;6753:31;6811:18;6803:6;6800:30;6797:117;;;6833:79;;:::i;:::-;6797:117;6946:80;7018:7;7009:6;6998:9;6994:22;6946:80;:::i;:::-;6928:98;;;;6724:312;7103:2;7092:9;7088:18;7075:32;7134:18;7126:6;7123:30;7120:117;;;7156:79;;:::i;:::-;7120:117;7269:77;7338:7;7329:6;7318:9;7314:22;7269:77;:::i;:::-;7251:95;;;;7046:310;6435:928;;;;;;;:::o;7383:553::-;7441:8;7451:6;7501:3;7494:4;7486:6;7482:17;7478:27;7468:122;;7509:79;;:::i;:::-;7468:122;7622:6;7609:20;7599:30;;7652:18;7644:6;7641:30;7638:117;;;7674:79;;:::i;:::-;7638:117;7788:4;7780:6;7776:17;7764:29;;7842:3;7834:4;7826:6;7822:17;7812:8;7808:32;7805:41;7802:128;;;7849:79;;:::i;:::-;7802:128;7383:553;;;;;:::o;7942:674::-;8022:6;8030;8038;8087:2;8075:9;8066:7;8062:23;8058:32;8055:119;;;8093:79;;:::i;:::-;8055:119;8213:1;8238:53;8283:7;8274:6;8263:9;8259:22;8238:53;:::i;:::-;8228:63;;8184:117;8368:2;8357:9;8353:18;8340:32;8399:18;8391:6;8388:30;8385:117;;;8421:79;;:::i;:::-;8385:117;8534:65;8591:7;8582:6;8571:9;8567:22;8534:65;:::i;:::-;8516:83;;;;8311:298;7942:674;;;;;:::o;8622:619::-;8699:6;8707;8715;8764:2;8752:9;8743:7;8739:23;8735:32;8732:119;;;8770:79;;:::i;:::-;8732:119;8890:1;8915:53;8960:7;8951:6;8940:9;8936:22;8915:53;:::i;:::-;8905:63;;8861:117;9017:2;9043:53;9088:7;9079:6;9068:9;9064:22;9043:53;:::i;:::-;9033:63;;8988:118;9145:2;9171:53;9216:7;9207:6;9196:9;9192:22;9171:53;:::i;:::-;9161:63;;9116:118;8622:619;;;;;:::o;9247:474::-;9315:6;9323;9372:2;9360:9;9351:7;9347:23;9343:32;9340:119;;;9378:79;;:::i;:::-;9340:119;9498:1;9523:53;9568:7;9559:6;9548:9;9544:22;9523:53;:::i;:::-;9513:63;;9469:117;9625:2;9651:53;9696:7;9687:6;9676:9;9672:22;9651:53;:::i;:::-;9641:63;;9596:118;9247:474;;;;;:::o;9727:118::-;9814:24;9832:5;9814:24;:::i;:::-;9809:3;9802:37;9727:118;;:::o;9851:332::-;9972:4;10010:2;9999:9;9995:18;9987:26;;10023:71;10091:1;10080:9;10076:17;10067:6;10023:71;:::i;:::-;10104:72;10172:2;10161:9;10157:18;10148:6;10104:72;:::i;:::-;9851:332;;;;;:::o;10189:117::-;10298:1;10295;10288:12;10312:180;10360:77;10357:1;10350:88;10457:4;10454:1;10447:15;10481:4;10478:1;10471:15;10498:281;10581:27;10603:4;10581:27;:::i;:::-;10573:6;10569:40;10711:6;10699:10;10696:22;10675:18;10663:10;10660:34;10657:62;10654:88;;;10722:18;;:::i;:::-;10654:88;10762:10;10758:2;10751:22;10541:238;10498:281;;:::o;10785:129::-;10819:6;10846:20;;:::i;:::-;10836:30;;10875:33;10903:4;10895:6;10875:33;:::i;:::-;10785:129;;;:::o;10920:308::-;10982:4;11072:18;11064:6;11061:30;11058:56;;;11094:18;;:::i;:::-;11058:56;11132:29;11154:6;11132:29;:::i;:::-;11124:37;;11216:4;11210;11206:15;11198:23;;10920:308;;;:::o;11234:146::-;11331:6;11326:3;11321;11308:30;11372:1;11363:6;11358:3;11354:16;11347:27;11234:146;;;:::o;11386:425::-;11464:5;11489:66;11505:49;11547:6;11505:49;:::i;:::-;11489:66;:::i;:::-;11480:75;;11578:6;11571:5;11564:21;11616:4;11609:5;11605:16;11654:3;11645:6;11640:3;11636:16;11633:25;11630:112;;;11661:79;;:::i;:::-;11630:112;11751:54;11798:6;11793:3;11788;11751:54;:::i;:::-;11470:341;11386:425;;;;;:::o;11831:340::-;11887:5;11936:3;11929:4;11921:6;11917:17;11913:27;11903:122;;11944:79;;:::i;:::-;11903:122;12061:6;12048:20;12086:79;12161:3;12153:6;12146:4;12138:6;12134:17;12086:79;:::i;:::-;12077:88;;11893:278;11831:340;;;;:::o;12177:509::-;12246:6;12295:2;12283:9;12274:7;12270:23;12266:32;12263:119;;;12301:79;;:::i;:::-;12263:119;12449:1;12438:9;12434:17;12421:31;12479:18;12471:6;12468:30;12465:117;;;12501:79;;:::i;:::-;12465:117;12606:63;12661:7;12652:6;12641:9;12637:22;12606:63;:::i;:::-;12596:73;;12392:287;12177:509;;;;:::o;12692:329::-;12751:6;12800:2;12788:9;12779:7;12775:23;12771:32;12768:119;;;12806:79;;:::i;:::-;12768:119;12926:1;12951:53;12996:7;12987:6;12976:9;12972:22;12951:53;:::i;:::-;12941:63;;12897:117;12692:329;;;;:::o;13027:222::-;13120:4;13158:2;13147:9;13143:18;13135:26;;13171:71;13239:1;13228:9;13224:17;13215:6;13171:71;:::i;:::-;13027:222;;;;:::o;13255:116::-;13325:21;13340:5;13325:21;:::i;:::-;13318:5;13315:32;13305:60;;13361:1;13358;13351:12;13305:60;13255:116;:::o;13377:133::-;13420:5;13458:6;13445:20;13436:29;;13474:30;13498:5;13474:30;:::i;:::-;13377:133;;;;:::o;13516:468::-;13581:6;13589;13638:2;13626:9;13617:7;13613:23;13609:32;13606:119;;;13644:79;;:::i;:::-;13606:119;13764:1;13789:53;13834:7;13825:6;13814:9;13810:22;13789:53;:::i;:::-;13779:63;;13735:117;13891:2;13917:50;13959:7;13950:6;13939:9;13935:22;13917:50;:::i;:::-;13907:60;;13862:115;13516:468;;;;;:::o;13990:307::-;14051:4;14141:18;14133:6;14130:30;14127:56;;;14163:18;;:::i;:::-;14127:56;14201:29;14223:6;14201:29;:::i;:::-;14193:37;;14285:4;14279;14275:15;14267:23;;13990:307;;;:::o;14303:423::-;14380:5;14405:65;14421:48;14462:6;14421:48;:::i;:::-;14405:65;:::i;:::-;14396:74;;14493:6;14486:5;14479:21;14531:4;14524:5;14520:16;14569:3;14560:6;14555:3;14551:16;14548:25;14545:112;;;14576:79;;:::i;:::-;14545:112;14666:54;14713:6;14708:3;14703;14666:54;:::i;:::-;14386:340;14303:423;;;;;:::o;14745:338::-;14800:5;14849:3;14842:4;14834:6;14830:17;14826:27;14816:122;;14857:79;;:::i;:::-;14816:122;14974:6;14961:20;14999:78;15073:3;15065:6;15058:4;15050:6;15046:17;14999:78;:::i;:::-;14990:87;;14806:277;14745:338;;;;:::o;15089:943::-;15184:6;15192;15200;15208;15257:3;15245:9;15236:7;15232:23;15228:33;15225:120;;;15264:79;;:::i;:::-;15225:120;15384:1;15409:53;15454:7;15445:6;15434:9;15430:22;15409:53;:::i;:::-;15399:63;;15355:117;15511:2;15537:53;15582:7;15573:6;15562:9;15558:22;15537:53;:::i;:::-;15527:63;;15482:118;15639:2;15665:53;15710:7;15701:6;15690:9;15686:22;15665:53;:::i;:::-;15655:63;;15610:118;15795:2;15784:9;15780:18;15767:32;15826:18;15818:6;15815:30;15812:117;;;15848:79;;:::i;:::-;15812:117;15953:62;16007:7;15998:6;15987:9;15983:22;15953:62;:::i;:::-;15943:72;;15738:287;15089:943;;;;;;;:::o;16038:474::-;16106:6;16114;16163:2;16151:9;16142:7;16138:23;16134:32;16131:119;;;16169:79;;:::i;:::-;16131:119;16289:1;16314:53;16359:7;16350:6;16339:9;16335:22;16314:53;:::i;:::-;16304:63;;16260:117;16416:2;16442:53;16487:7;16478:6;16467:9;16463:22;16442:53;:::i;:::-;16432:63;;16387:118;16038:474;;;;;:::o;16518:::-;16586:6;16594;16643:2;16631:9;16622:7;16618:23;16614:32;16611:119;;;16649:79;;:::i;:::-;16611:119;16769:1;16794:53;16839:7;16830:6;16819:9;16815:22;16794:53;:::i;:::-;16784:63;;16740:117;16896:2;16922:53;16967:7;16958:6;16947:9;16943:22;16922:53;:::i;:::-;16912:63;;16867:118;16518:474;;;;;:::o;16998:180::-;17046:77;17043:1;17036:88;17143:4;17140:1;17133:15;17167:4;17164:1;17157:15;17184:320;17228:6;17265:1;17259:4;17255:12;17245:22;;17312:1;17306:4;17302:12;17333:18;17323:81;;17389:4;17381:6;17377:17;17367:27;;17323:81;17451:2;17443:6;17440:14;17420:18;17417:38;17414:84;;17470:18;;:::i;:::-;17414:84;17235:269;17184:320;;;:::o;17510:220::-;17650:34;17646:1;17638:6;17634:14;17627:58;17719:3;17714:2;17706:6;17702:15;17695:28;17510:220;:::o;17736:366::-;17878:3;17899:67;17963:2;17958:3;17899:67;:::i;:::-;17892:74;;17975:93;18064:3;17975:93;:::i;:::-;18093:2;18088:3;18084:12;18077:19;;17736:366;;;:::o;18108:419::-;18274:4;18312:2;18301:9;18297:18;18289:26;;18361:9;18355:4;18351:20;18347:1;18336:9;18332:17;18325:47;18389:131;18515:4;18389:131;:::i;:::-;18381:139;;18108:419;;;:::o;18533:249::-;18673:34;18669:1;18661:6;18657:14;18650:58;18742:32;18737:2;18729:6;18725:15;18718:57;18533:249;:::o;18788:366::-;18930:3;18951:67;19015:2;19010:3;18951:67;:::i;:::-;18944:74;;19027:93;19116:3;19027:93;:::i;:::-;19145:2;19140:3;19136:12;19129:19;;18788:366;;;:::o;19160:419::-;19326:4;19364:2;19353:9;19349:18;19341:26;;19413:9;19407:4;19403:20;19399:1;19388:9;19384:17;19377:47;19441:131;19567:4;19441:131;:::i;:::-;19433:139;;19160:419;;;:::o;19585:231::-;19725:34;19721:1;19713:6;19709:14;19702:58;19794:14;19789:2;19781:6;19777:15;19770:39;19585:231;:::o;19822:366::-;19964:3;19985:67;20049:2;20044:3;19985:67;:::i;:::-;19978:74;;20061:93;20150:3;20061:93;:::i;:::-;20179:2;20174:3;20170:12;20163:19;;19822:366;;;:::o;20194:419::-;20360:4;20398:2;20387:9;20383:18;20375:26;;20447:9;20441:4;20437:20;20433:1;20422:9;20418:17;20411:47;20475:131;20601:4;20475:131;:::i;:::-;20467:139;;20194:419;;;:::o;20619:180::-;20667:77;20664:1;20657:88;20764:4;20761:1;20754:15;20788:4;20785:1;20778:15;20805:323;20861:6;20910:2;20898:9;20889:7;20885:23;20881:32;20878:119;;;20916:79;;:::i;:::-;20878:119;21036:1;21061:50;21103:7;21094:6;21083:9;21079:22;21061:50;:::i;:::-;21051:60;;21007:114;20805:323;;;;:::o;21134:180::-;21182:77;21179:1;21172:88;21279:4;21276:1;21269:15;21303:4;21300:1;21293:15;21320:233;21359:3;21382:24;21400:5;21382:24;:::i;:::-;21373:33;;21428:66;21421:5;21418:77;21415:103;;21498:18;;:::i;:::-;21415:103;21545:1;21538:5;21534:13;21527:20;;21320:233;;;:::o;21559:148::-;21661:11;21698:3;21683:18;;21559:148;;;;:::o;21713:390::-;21819:3;21847:39;21880:5;21847:39;:::i;:::-;21902:89;21984:6;21979:3;21902:89;:::i;:::-;21895:96;;22000:65;22058:6;22053:3;22046:4;22039:5;22035:16;22000:65;:::i;:::-;22090:6;22085:3;22081:16;22074:23;;21823:280;21713:390;;;;:::o;22109:275::-;22241:3;22263:95;22354:3;22345:6;22263:95;:::i;:::-;22256:102;;22375:3;22368:10;;22109:275;;;;:::o;22390:172::-;22530:24;22526:1;22518:6;22514:14;22507:48;22390:172;:::o;22568:366::-;22710:3;22731:67;22795:2;22790:3;22731:67;:::i;:::-;22724:74;;22807:93;22896:3;22807:93;:::i;:::-;22925:2;22920:3;22916:12;22909:19;;22568:366;;;:::o;22940:419::-;23106:4;23144:2;23133:9;23129:18;23121:26;;23193:9;23187:4;23183:20;23179:1;23168:9;23164:17;23157:47;23221:131;23347:4;23221:131;:::i;:::-;23213:139;;22940:419;;;:::o;23365:181::-;23505:33;23501:1;23493:6;23489:14;23482:57;23365:181;:::o;23552:366::-;23694:3;23715:67;23779:2;23774:3;23715:67;:::i;:::-;23708:74;;23791:93;23880:3;23791:93;:::i;:::-;23909:2;23904:3;23900:12;23893:19;;23552:366;;;:::o;23924:419::-;24090:4;24128:2;24117:9;24113:18;24105:26;;24177:9;24171:4;24167:20;24163:1;24152:9;24148:17;24141:47;24205:131;24331:4;24205:131;:::i;:::-;24197:139;;23924:419;;;:::o;24349:97::-;24408:6;24436:3;24426:13;;24349:97;;;;:::o;24452:141::-;24501:4;24524:3;24516:11;;24547:3;24544:1;24537:14;24581:4;24578:1;24568:18;24560:26;;24452:141;;;:::o;24599:93::-;24636:6;24683:2;24678;24671:5;24667:14;24663:23;24653:33;;24599:93;;;:::o;24698:107::-;24742:8;24792:5;24786:4;24782:16;24761:37;;24698:107;;;;:::o;24811:393::-;24880:6;24930:1;24918:10;24914:18;24953:97;24983:66;24972:9;24953:97;:::i;:::-;25071:39;25101:8;25090:9;25071:39;:::i;:::-;25059:51;;25143:4;25139:9;25132:5;25128:21;25119:30;;25192:4;25182:8;25178:19;25171:5;25168:30;25158:40;;24887:317;;24811:393;;;;;:::o;25210:60::-;25238:3;25259:5;25252:12;;25210:60;;;:::o;25276:142::-;25326:9;25359:53;25377:34;25386:24;25404:5;25386:24;:::i;:::-;25377:34;:::i;:::-;25359:53;:::i;:::-;25346:66;;25276:142;;;:::o;25424:75::-;25467:3;25488:5;25481:12;;25424:75;;;:::o;25505:269::-;25615:39;25646:7;25615:39;:::i;:::-;25676:91;25725:41;25749:16;25725:41;:::i;:::-;25717:6;25710:4;25704:11;25676:91;:::i;:::-;25670:4;25663:105;25581:193;25505:269;;;:::o;25780:73::-;25825:3;25780:73;:::o;25859:189::-;25936:32;;:::i;:::-;25977:65;26035:6;26027;26021:4;25977:65;:::i;:::-;25912:136;25859:189;;:::o;26054:186::-;26114:120;26131:3;26124:5;26121:14;26114:120;;;26185:39;26222:1;26215:5;26185:39;:::i;:::-;26158:1;26151:5;26147:13;26138:22;;26114:120;;;26054:186;;:::o;26246:543::-;26347:2;26342:3;26339:11;26336:446;;;26381:38;26413:5;26381:38;:::i;:::-;26465:29;26483:10;26465:29;:::i;:::-;26455:8;26451:44;26648:2;26636:10;26633:18;26630:49;;;26669:8;26654:23;;26630:49;26692:80;26748:22;26766:3;26748:22;:::i;:::-;26738:8;26734:37;26721:11;26692:80;:::i;:::-;26351:431;;26336:446;26246:543;;;:::o;26795:117::-;26849:8;26899:5;26893:4;26889:16;26868:37;;26795:117;;;;:::o;26918:169::-;26962:6;26995:51;27043:1;27039:6;27031:5;27028:1;27024:13;26995:51;:::i;:::-;26991:56;27076:4;27070;27066:15;27056:25;;26969:118;26918:169;;;;:::o;27092:295::-;27168:4;27314:29;27339:3;27333:4;27314:29;:::i;:::-;27306:37;;27376:3;27373:1;27369:11;27363:4;27360:21;27352:29;;27092:295;;;;:::o;27392:1403::-;27516:44;27556:3;27551;27516:44;:::i;:::-;27625:18;27617:6;27614:30;27611:56;;;27647:18;;:::i;:::-;27611:56;27691:38;27723:4;27717:11;27691:38;:::i;:::-;27776:67;27836:6;27828;27822:4;27776:67;:::i;:::-;27870:1;27899:2;27891:6;27888:14;27916:1;27911:632;;;;28587:1;28604:6;28601:84;;;28660:9;28655:3;28651:19;28638:33;28629:42;;28601:84;28711:67;28771:6;28764:5;28711:67;:::i;:::-;28705:4;28698:81;28560:229;27881:908;;27911:632;27963:4;27959:9;27951:6;27947:22;27997:37;28029:4;27997:37;:::i;:::-;28056:1;28070:215;28084:7;28081:1;28078:14;28070:215;;;28170:9;28165:3;28161:19;28148:33;28140:6;28133:49;28221:1;28213:6;28209:14;28199:24;;28268:2;28257:9;28253:18;28240:31;;28107:4;28104:1;28100:12;28095:17;;28070:215;;;28313:6;28304:7;28301:19;28298:186;;;28378:9;28373:3;28369:19;28356:33;28421:48;28463:4;28455:6;28451:17;28440:9;28421:48;:::i;:::-;28413:6;28406:64;28321:163;28298:186;28530:1;28526;28518:6;28514:14;28510:22;28504:4;28497:36;27918:625;;;27881:908;;27491:1304;;;27392:1403;;;:::o;28825:330::-;28941:3;28962:89;29044:6;29039:3;28962:89;:::i;:::-;28955:96;;29061:56;29110:6;29105:3;29098:5;29061:56;:::i;:::-;29142:6;29137:3;29133:16;29126:23;;28825:330;;;;;:::o;29161:295::-;29303:3;29325:105;29426:3;29417:6;29409;29325:105;:::i;:::-;29318:112;;29447:3;29440:10;;29161:295;;;;;:::o;29462:145::-;29515:4;29538:3;29530:11;;29561:3;29558:1;29551:14;29595:4;29592:1;29582:18;29574:26;;29462:145;;;:::o;29637:839::-;29726:3;29763:5;29757:12;29792:36;29818:9;29792:36;:::i;:::-;29844:71;29908:6;29903:3;29844:71;:::i;:::-;29837:78;;29946:1;29935:9;29931:17;29962:1;29957:164;;;;30135:1;30130:340;;;;29924:546;;29957:164;30041:4;30037:9;30026;30022:25;30017:3;30010:38;30101:6;30094:14;30087:22;30081:4;30077:33;30072:3;30068:43;30061:50;;29957:164;;30130:340;30197:42;30233:5;30197:42;:::i;:::-;30261:1;30275:154;30289:6;30286:1;30283:13;30275:154;;;30363:7;30357:14;30353:1;30348:3;30344:11;30337:35;30413:1;30404:7;30400:15;30389:26;;30311:4;30308:1;30304:12;30299:17;;30275:154;;;30458:1;30453:3;30449:11;30442:18;;30137:333;;29924:546;;29730:746;;29637:839;;;;:::o;30506:317::-;30604:3;30625:71;30689:6;30684:3;30625:71;:::i;:::-;30618:78;;30706:56;30755:6;30750:3;30743:5;30706:56;:::i;:::-;30787:29;30809:6;30787:29;:::i;:::-;30782:3;30778:39;30771:46;;30506:317;;;;;:::o;30829:646::-;31029:4;31067:2;31056:9;31052:18;31044:26;;31080:71;31148:1;31137:9;31133:17;31124:6;31080:71;:::i;:::-;31198:9;31192:4;31188:20;31183:2;31172:9;31168:18;31161:48;31226:79;31300:4;31291:6;31226:79;:::i;:::-;31218:87;;31352:9;31346:4;31342:20;31337:2;31326:9;31322:18;31315:48;31380:88;31463:4;31454:6;31446;31380:88;:::i;:::-;31372:96;;30829:646;;;;;;;:::o;31481:233::-;31621:34;31617:1;31609:6;31605:14;31598:58;31690:16;31685:2;31677:6;31673:15;31666:41;31481:233;:::o;31720:366::-;31862:3;31883:67;31947:2;31942:3;31883:67;:::i;:::-;31876:74;;31959:93;32048:3;31959:93;:::i;:::-;32077:2;32072:3;32068:12;32061:19;;31720:366;;;:::o;32092:419::-;32258:4;32296:2;32285:9;32281:18;32273:26;;32345:9;32339:4;32335:20;32331:1;32320:9;32316:17;32309:47;32373:131;32499:4;32373:131;:::i;:::-;32365:139;;32092:419;;;:::o;32517:167::-;32657:19;32653:1;32645:6;32641:14;32634:43;32517:167;:::o;32690:366::-;32832:3;32853:67;32917:2;32912:3;32853:67;:::i;:::-;32846:74;;32929:93;33018:3;32929:93;:::i;:::-;33047:2;33042:3;33038:12;33031:19;;32690:366;;;:::o;33062:419::-;33228:4;33266:2;33255:9;33251:18;33243:26;;33315:9;33309:4;33305:20;33301:1;33290:9;33286:17;33279:47;33343:131;33469:4;33343:131;:::i;:::-;33335:139;;33062:419;;;:::o;33487:410::-;33527:7;33550:20;33568:1;33550:20;:::i;:::-;33545:25;;33584:20;33602:1;33584:20;:::i;:::-;33579:25;;33639:1;33636;33632:9;33661:30;33679:11;33661:30;:::i;:::-;33650:41;;33840:1;33831:7;33827:15;33824:1;33821:22;33801:1;33794:9;33774:83;33751:139;;33870:18;;:::i;:::-;33751:139;33535:362;33487:410;;;;:::o;33903:180::-;33951:77;33948:1;33941:88;34048:4;34045:1;34038:15;34072:4;34069:1;34062:15;34089:185;34129:1;34146:20;34164:1;34146:20;:::i;:::-;34141:25;;34180:20;34198:1;34180:20;:::i;:::-;34175:25;;34219:1;34209:35;;34224:18;;:::i;:::-;34209:35;34266:1;34263;34259:9;34254:14;;34089:185;;;;:::o;34280:175::-;34420:27;34416:1;34408:6;34404:14;34397:51;34280:175;:::o;34461:366::-;34603:3;34624:67;34688:2;34683:3;34624:67;:::i;:::-;34617:74;;34700:93;34789:3;34700:93;:::i;:::-;34818:2;34813:3;34809:12;34802:19;;34461:366;;;:::o;34833:419::-;34999:4;35037:2;35026:9;35022:18;35014:26;;35086:9;35080:4;35076:20;35072:1;35061:9;35057:17;35050:47;35114:131;35240:4;35114:131;:::i;:::-;35106:139;;34833:419;;;:::o;35258:1395::-;35375:37;35408:3;35375:37;:::i;:::-;35477:18;35469:6;35466:30;35463:56;;;35499:18;;:::i;:::-;35463:56;35543:38;35575:4;35569:11;35543:38;:::i;:::-;35628:67;35688:6;35680;35674:4;35628:67;:::i;:::-;35722:1;35746:4;35733:17;;35778:2;35770:6;35767:14;35795:1;35790:618;;;;36452:1;36469:6;36466:77;;;36518:9;36513:3;36509:19;36503:26;36494:35;;36466:77;36569:67;36629:6;36622:5;36569:67;:::i;:::-;36563:4;36556:81;36425:222;35760:887;;35790:618;35842:4;35838:9;35830:6;35826:22;35876:37;35908:4;35876:37;:::i;:::-;35935:1;35949:208;35963:7;35960:1;35957:14;35949:208;;;36042:9;36037:3;36033:19;36027:26;36019:6;36012:42;36093:1;36085:6;36081:14;36071:24;;36140:2;36129:9;36125:18;36112:31;;35986:4;35983:1;35979:12;35974:17;;35949:208;;;36185:6;36176:7;36173:19;36170:179;;;36243:9;36238:3;36234:19;36228:26;36286:48;36328:4;36320:6;36316:17;36305:9;36286:48;:::i;:::-;36278:6;36271:64;36193:156;36170:179;36395:1;36391;36383:6;36379:14;36375:22;36369:4;36362:36;35797:611;;;35760:887;;35350:1303;;;35258:1395;;:::o;36659:174::-;36799:26;36795:1;36787:6;36783:14;36776:50;36659:174;:::o;36839:366::-;36981:3;37002:67;37066:2;37061:3;37002:67;:::i;:::-;36995:74;;37078:93;37167:3;37078:93;:::i;:::-;37196:2;37191:3;37187:12;37180:19;;36839:366;;;:::o;37211:419::-;37377:4;37415:2;37404:9;37400:18;37392:26;;37464:9;37458:4;37454:20;37450:1;37439:9;37435:17;37428:47;37492:131;37618:4;37492:131;:::i;:::-;37484:139;;37211:419;;;:::o;37636:228::-;37776:34;37772:1;37764:6;37760:14;37753:58;37845:11;37840:2;37832:6;37828:15;37821:36;37636:228;:::o;37870:366::-;38012:3;38033:67;38097:2;38092:3;38033:67;:::i;:::-;38026:74;;38109:93;38198:3;38109:93;:::i;:::-;38227:2;38222:3;38218:12;38211:19;;37870:366;;;:::o;38242:419::-;38408:4;38446:2;38435:9;38431:18;38423:26;;38495:9;38489:4;38485:20;38481:1;38470:9;38466:17;38459:47;38523:131;38649:4;38523:131;:::i;:::-;38515:139;;38242:419;;;:::o;38667:147::-;38768:11;38805:3;38790:18;;38667:147;;;;:::o;38820:114::-;;:::o;38940:398::-;39099:3;39120:83;39201:1;39196:3;39120:83;:::i;:::-;39113:90;;39212:93;39301:3;39212:93;:::i;:::-;39330:1;39325:3;39321:11;39314:18;;38940:398;;;:::o;39344:379::-;39528:3;39550:147;39693:3;39550:147;:::i;:::-;39543:154;;39714:3;39707:10;;39344:379;;;:::o;39729:137::-;39783:5;39814:6;39808:13;39799:22;;39830:30;39854:5;39830:30;:::i;:::-;39729:137;;;;:::o;39872:345::-;39939:6;39988:2;39976:9;39967:7;39963:23;39959:32;39956:119;;;39994:79;;:::i;:::-;39956:119;40114:1;40139:61;40192:7;40183:6;40172:9;40168:22;40139:61;:::i;:::-;40129:71;;40085:125;39872:345;;;;:::o;40223:170::-;40363:22;40359:1;40351:6;40347:14;40340:46;40223:170;:::o;40399:366::-;40541:3;40562:67;40626:2;40621:3;40562:67;:::i;:::-;40555:74;;40638:93;40727:3;40638:93;:::i;:::-;40756:2;40751:3;40747:12;40740:19;;40399:366;;;:::o;40771:419::-;40937:4;40975:2;40964:9;40960:18;40952:26;;41024:9;41018:4;41014:20;41010:1;40999:9;40995:17;40988:47;41052:131;41178:4;41052:131;:::i;:::-;41044:139;;40771:419;;;:::o;41196:225::-;41336:34;41332:1;41324:6;41320:14;41313:58;41405:8;41400:2;41392:6;41388:15;41381:33;41196:225;:::o;41427:366::-;41569:3;41590:67;41654:2;41649:3;41590:67;:::i;:::-;41583:74;;41666:93;41755:3;41666:93;:::i;:::-;41784:2;41779:3;41775:12;41768:19;;41427:366;;;:::o;41799:419::-;41965:4;42003:2;41992:9;41988:18;41980:26;;42052:9;42046:4;42042:20;42038:1;42027:9;42023:17;42016:47;42080:131;42206:4;42080:131;:::i;:::-;42072:139;;41799:419;;;:::o;42224:162::-;42364:14;42360:1;42352:6;42348:14;42341:38;42224:162;:::o;42392:366::-;42534:3;42555:67;42619:2;42614:3;42555:67;:::i;:::-;42548:74;;42631:93;42720:3;42631:93;:::i;:::-;42749:2;42744:3;42740:12;42733:19;;42392:366;;;:::o;42764:419::-;42930:4;42968:2;42957:9;42953:18;42945:26;;43017:9;43011:4;43007:20;43003:1;42992:9;42988:17;42981:47;43045:131;43171:4;43045:131;:::i;:::-;43037:139;;42764:419;;;:::o;43189:182::-;43329:34;43325:1;43317:6;43313:14;43306:58;43189:182;:::o;43377:366::-;43519:3;43540:67;43604:2;43599:3;43540:67;:::i;:::-;43533:74;;43616:93;43705:3;43616:93;:::i;:::-;43734:2;43729:3;43725:12;43718:19;;43377:366;;;:::o;43749:419::-;43915:4;43953:2;43942:9;43938:18;43930:26;;44002:9;43996:4;43992:20;43988:1;43977:9;43973:17;43966:47;44030:131;44156:4;44030:131;:::i;:::-;44022:139;;43749:419;;;:::o;44174:177::-;44314:29;44310:1;44302:6;44298:14;44291:53;44174:177;:::o;44357:366::-;44499:3;44520:67;44584:2;44579:3;44520:67;:::i;:::-;44513:74;;44596:93;44685:3;44596:93;:::i;:::-;44714:2;44709:3;44705:12;44698:19;;44357:366;;;:::o;44729:419::-;44895:4;44933:2;44922:9;44918:18;44910:26;;44982:9;44976:4;44972:20;44968:1;44957:9;44953:17;44946:47;45010:131;45136:4;45010:131;:::i;:::-;45002:139;;44729:419;;;:::o;45154:144::-;45206:4;45229:3;45221:11;;45252:3;45249:1;45242:14;45286:4;45283:1;45273:18;45265:26;;45154:144;;;:::o;45326:878::-;45431:3;45468:5;45462:12;45497:36;45523:9;45497:36;:::i;:::-;45549:88;45630:6;45625:3;45549:88;:::i;:::-;45542:95;;45668:1;45657:9;45653:17;45684:1;45679:166;;;;45859:1;45854:344;;;;45646:552;;45679:166;45763:4;45759:9;45748;45744:25;45739:3;45732:38;45825:6;45818:14;45811:22;45803:6;45799:35;45794:3;45790:45;45783:52;;45679:166;;45854:344;45921:41;45956:5;45921:41;:::i;:::-;45984:1;45998:154;46012:6;46009:1;46006:13;45998:154;;;46086:7;46080:14;46076:1;46071:3;46067:11;46060:35;46136:1;46127:7;46123:15;46112:26;;46034:4;46031:1;46027:12;46022:17;;45998:154;;;46181:6;46176:3;46172:16;46165:23;;45861:337;;45646:552;;45435:769;;45326:878;;;;:::o;46210:273::-;46341:3;46363:94;46453:3;46444:6;46363:94;:::i;:::-;46356:101;;46474:3;46467:10;;46210:273;;;;:::o;46489:170::-;46629:22;46625:1;46617:6;46613:14;46606:46;46489:170;:::o;46665:366::-;46807:3;46828:67;46892:2;46887:3;46828:67;:::i;:::-;46821:74;;46904:93;46993:3;46904:93;:::i;:::-;47022:2;47017:3;47013:12;47006:19;;46665:366;;;:::o;47037:419::-;47203:4;47241:2;47230:9;47226:18;47218:26;;47290:9;47284:4;47280:20;47276:1;47265:9;47261:17;47254:47;47318:131;47444:4;47318:131;:::i;:::-;47310:139;;47037:419;;;:::o;47462:224::-;47602:34;47598:1;47590:6;47586:14;47579:58;47671:7;47666:2;47658:6;47654:15;47647:32;47462:224;:::o;47692:366::-;47834:3;47855:67;47919:2;47914:3;47855:67;:::i;:::-;47848:74;;47931:93;48020:3;47931:93;:::i;:::-;48049:2;48044:3;48040:12;48033:19;;47692:366;;;:::o;48064:419::-;48230:4;48268:2;48257:9;48253:18;48245:26;;48317:9;48311:4;48307:20;48303:1;48292:9;48288:17;48281:47;48345:131;48471:4;48345:131;:::i;:::-;48337:139;;48064:419;;;:::o;48489:223::-;48629:34;48625:1;48617:6;48613:14;48606:58;48698:6;48693:2;48685:6;48681:15;48674:31;48489:223;:::o;48718:366::-;48860:3;48881:67;48945:2;48940:3;48881:67;:::i;:::-;48874:74;;48957:93;49046:3;48957:93;:::i;:::-;49075:2;49070:3;49066:12;49059:19;;48718:366;;;:::o;49090:419::-;49256:4;49294:2;49283:9;49279:18;49271:26;;49343:9;49337:4;49333:20;49329:1;49318:9;49314:17;49307:47;49371:131;49497:4;49371:131;:::i;:::-;49363:139;;49090:419;;;:::o;49515:194::-;49555:4;49575:20;49593:1;49575:20;:::i;:::-;49570:25;;49609:20;49627:1;49609:20;:::i;:::-;49604:25;;49653:1;49650;49646:9;49638:17;;49677:1;49671:4;49668:11;49665:37;;;49682:18;;:::i;:::-;49665:37;49515:194;;;;:::o;49715:191::-;49755:3;49774:20;49792:1;49774:20;:::i;:::-;49769:25;;49808:20;49826:1;49808:20;:::i;:::-;49803:25;;49851:1;49848;49844:9;49837:16;;49872:3;49869:1;49866:10;49863:36;;;49879:18;;:::i;:::-;49863:36;49715:191;;;;:::o;49912:166::-;50052:18;50048:1;50040:6;50036:14;50029:42;49912:166;:::o;50084:366::-;50226:3;50247:67;50311:2;50306:3;50247:67;:::i;:::-;50240:74;;50323:93;50412:3;50323:93;:::i;:::-;50441:2;50436:3;50432:12;50425:19;;50084:366;;;:::o;50456:419::-;50622:4;50660:2;50649:9;50645:18;50637:26;;50709:9;50703:4;50699:20;50695:1;50684:9;50680:17;50673:47;50737:131;50863:4;50737:131;:::i;:::-;50729:139;;50456:419;;;:::o;50881:182::-;51021:34;51017:1;51009:6;51005:14;50998:58;50881:182;:::o;51069:366::-;51211:3;51232:67;51296:2;51291:3;51232:67;:::i;:::-;51225:74;;51308:93;51397:3;51308:93;:::i;:::-;51426:2;51421:3;51417:12;51410:19;;51069:366;;;:::o;51441:419::-;51607:4;51645:2;51634:9;51630:18;51622:26;;51694:9;51688:4;51684:20;51680:1;51669:9;51665:17;51658:47;51722:131;51848:4;51722:131;:::i;:::-;51714:139;;51441:419;;;:::o;51866:178::-;52006:30;52002:1;51994:6;51990:14;51983:54;51866:178;:::o;52050:366::-;52192:3;52213:67;52277:2;52272:3;52213:67;:::i;:::-;52206:74;;52289:93;52378:3;52289:93;:::i;:::-;52407:2;52402:3;52398:12;52391:19;;52050:366;;;:::o;52422:419::-;52588:4;52626:2;52615:9;52611:18;52603:26;;52675:9;52669:4;52665:20;52661:1;52650:9;52646:17;52639:47;52703:131;52829:4;52703:131;:::i;:::-;52695:139;;52422:419;;;:::o;52847:175::-;52987:27;52983:1;52975:6;52971:14;52964:51;52847:175;:::o;53028:366::-;53170:3;53191:67;53255:2;53250:3;53191:67;:::i;:::-;53184:74;;53267:93;53356:3;53267:93;:::i;:::-;53385:2;53380:3;53376:12;53369:19;;53028:366;;;:::o;53400:419::-;53566:4;53604:2;53593:9;53589:18;53581:26;;53653:9;53647:4;53643:20;53639:1;53628:9;53624:17;53617:47;53681:131;53807:4;53681:131;:::i;:::-;53673:139;;53400:419;;;:::o;53825:237::-;53965:34;53961:1;53953:6;53949:14;53942:58;54034:20;54029:2;54021:6;54017:15;54010:45;53825:237;:::o;54068:366::-;54210:3;54231:67;54295:2;54290:3;54231:67;:::i;:::-;54224:74;;54307:93;54396:3;54307:93;:::i;:::-;54425:2;54420:3;54416:12;54409:19;;54068:366;;;:::o;54440:419::-;54606:4;54644:2;54633:9;54629:18;54621:26;;54693:9;54687:4;54683:20;54679:1;54668:9;54664:17;54657:47;54721:131;54847:4;54721:131;:::i;:::-;54713:139;;54440:419;;;:::o;54865:170::-;55005:22;55001:1;54993:6;54989:14;54982:46;54865:170;:::o;55041:366::-;55183:3;55204:67;55268:2;55263:3;55204:67;:::i;:::-;55197:74;;55280:93;55369:3;55280:93;:::i;:::-;55398:2;55393:3;55389:12;55382:19;;55041:366;;;:::o;55413:419::-;55579:4;55617:2;55606:9;55602:18;55594:26;;55666:9;55660:4;55656:20;55652:1;55641:9;55637:17;55630:47;55694:131;55820:4;55694:131;:::i;:::-;55686:139;;55413:419;;;:::o;55838:98::-;55889:6;55923:5;55917:12;55907:22;;55838:98;;;:::o;55942:168::-;56025:11;56059:6;56054:3;56047:19;56099:4;56094:3;56090:14;56075:29;;55942:168;;;;:::o;56116:373::-;56202:3;56230:38;56262:5;56230:38;:::i;:::-;56284:70;56347:6;56342:3;56284:70;:::i;:::-;56277:77;;56363:65;56421:6;56416:3;56409:4;56402:5;56398:16;56363:65;:::i;:::-;56453:29;56475:6;56453:29;:::i;:::-;56448:3;56444:39;56437:46;;56206:283;56116:373;;;;:::o;56495:640::-;56690:4;56728:3;56717:9;56713:19;56705:27;;56742:71;56810:1;56799:9;56795:17;56786:6;56742:71;:::i;:::-;56823:72;56891:2;56880:9;56876:18;56867:6;56823:72;:::i;:::-;56905;56973:2;56962:9;56958:18;56949:6;56905:72;:::i;:::-;57024:9;57018:4;57014:20;57009:2;56998:9;56994:18;56987:48;57052:76;57123:4;57114:6;57052:76;:::i;:::-;57044:84;;56495:640;;;;;;;:::o;57141:141::-;57197:5;57228:6;57222:13;57213:22;;57244:32;57270:5;57244:32;:::i;:::-;57141:141;;;;:::o;57288:349::-;57357:6;57406:2;57394:9;57385:7;57381:23;57377:32;57374:119;;;57412:79;;:::i;:::-;57374:119;57532:1;57557:63;57612:7;57603:6;57592:9;57588:22;57557:63;:::i;:::-;57547:73;;57503:127;57288:349;;;;:::o
Swarm Source
ipfs://fccadec4765f6489645d5376d40a5cbaf35be21a7cfffe47f920ff2aaf1583cd
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.