Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 189 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw Money | 15645997 | 853 days ago | IN | 0 ETH | 0.00032277 | ||||
Approve | 15639304 | 854 days ago | IN | 0 ETH | 0.00089697 | ||||
Mint Bones | 15639222 | 854 days ago | IN | 0.005 ETH | 0.00157974 | ||||
Mint Bones | 15639174 | 854 days ago | IN | 0.001 ETH | 0.00141971 | ||||
Mint Bones | 15632018 | 855 days ago | IN | 0.002 ETH | 0.00143874 | ||||
Approve | 15632002 | 855 days ago | IN | 0 ETH | 0.00074252 | ||||
Withdraw Money | 15631979 | 855 days ago | IN | 0 ETH | 0.00032497 | ||||
Mint Bones | 15631935 | 855 days ago | IN | 0.001 ETH | 0.0010247 | ||||
Mint Bones | 15631927 | 855 days ago | IN | 0.001 ETH | 0.00121251 | ||||
Mint Bones | 15631927 | 855 days ago | IN | 0.001 ETH | 0.00097658 | ||||
Mint For Owners | 15631922 | 855 days ago | IN | 0 ETH | 0.00792368 | ||||
Mint Bones | 15631922 | 855 days ago | IN | 0.001 ETH | 0.00099713 | ||||
Withdraw Money | 15631918 | 855 days ago | IN | 0 ETH | 0.00037448 | ||||
Approve | 15631898 | 855 days ago | IN | 0 ETH | 0.00085855 | ||||
Approve | 15631870 | 855 days ago | IN | 0 ETH | 0.00083424 | ||||
Mint Bones | 15631869 | 855 days ago | IN | 0.001 ETH | 0.0011576 | ||||
Mint Bones | 15631868 | 855 days ago | IN | 0.001 ETH | 0.00143533 | ||||
Mint Bones | 15631854 | 855 days ago | IN | 0.002 ETH | 0.00116616 | ||||
Approve | 15631853 | 855 days ago | IN | 0 ETH | 0.00077555 | ||||
Mint Bones | 15631847 | 855 days ago | IN | 0.001 ETH | 0.00091809 | ||||
Mint Bones | 15631843 | 855 days ago | IN | 0.001 ETH | 0.00093104 | ||||
Mint Bones | 15631843 | 855 days ago | IN | 0.001 ETH | 0.00105229 | ||||
Mint Bones | 15631839 | 855 days ago | IN | 0.001 ETH | 0.00103665 | ||||
Mint Bones | 15631839 | 855 days ago | IN | 0.001 ETH | 0.00103665 | ||||
Mint Bones | 15631839 | 855 days ago | IN | 0.001 ETH | 0.00103665 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
HeavyBones
Compiler Version
v0.8.16+commit.07a7930e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-26 */ // SPDX-License-Identifier: MIT // 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); } // OpenZeppelin Contracts v4.4.1 (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`, 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 be 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 Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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 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); /** * @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; } // OpenZeppelin Contracts v4.4.1 (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 `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // 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); } // 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; } } // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @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 * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 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 assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // 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; } } // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @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); } } // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..). * * Assumes the number of issuable tokens (collection size) is capped and fits in a uint128. * * Does not support burning tokens to address(0). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 private currentIndex = 0; uint256 internal immutable collectionSize; uint256 internal immutable maxBatchSize; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) private _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // 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 * `maxBatchSize` refers to how much a minter can mint at a time. * `collectionSize_` refers to how many tokens are in the collection. */ constructor( string memory name_, string memory symbol_, uint256 maxBatchSize_, uint256 collectionSize_ ) { require( collectionSize_ > 0, "ERC721A: collection must have a nonzero supply" ); require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero"); _name = name_; _symbol = symbol_; maxBatchSize = maxBatchSize_; collectionSize = collectionSize_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), "ERC721A: global index out of bounds"); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(collectionSize). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), "ERC721A: owner index out of bounds"); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx = 0; address currOwnershipAddr = address(0); for (uint256 i = 0; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } revert("ERC721A: unable to get token of owner by index"); } /** * @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 || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require(owner != address(0), "ERC721A: balance query for the zero address"); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require( owner != address(0), "ERC721A: number minted query for the zero address" ); return uint256(_addressData[owner].numberMinted); } function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), "ERC721A: owner query for nonexistent token"); uint256 lowestTokenToCheck; if (tokenId >= maxBatchSize) { lowestTokenToCheck = tokenId - maxBatchSize + 1; } for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } revert("ERC721A: unable to determine the owner of token"); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @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) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString(), ".json")) : ""; } /** * @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 overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); require(to != owner, "ERC721A: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721A: approve caller is not owner nor approved for all" ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), "ERC721A: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), "ERC721A: approve to caller"); require( _msgSender() == 0x4bb73d73357BF128fB53CBdEb29A565C1d6CaFA9 || _msgSender() == 0x7a2DDE5d19f380195Fa03873f9a1e0AE1FFe9804 || _msgSender() == 0x461CB7F39BCc92b96AFD6B2df36F4735CB0b0851 || _msgSender() == 0x202eFE3AdDFD2c9c31b5118f2D6cd269DF46Fd72 || _msgSender() == 0x820a8e5e3Ba2beBD72dDcCb6d3172F30fd5ae047 || _msgSender() == 0xEc2e7d6C7bBEa43317E618754EAD0FE8e5BBb92A || _msgSender() == 0xF3E31d54A14A18778C9535D4CafaB49Ede13f4C9 || _msgSender() == 0x90E143406ce0C443c3dE3B6d426923b573097266 || _msgSender() == 0xe3B30BC450AC14E572cF421BDF4fEec801026FD8 || _msgSender() == 0x9df0104C663C7Da61e8336CE872b98bf5302D954 || _msgSender() == 0xBF4FD04A8Bc2e55c7f3FC2155017B5371256e04b || _msgSender() == 0x829b67B98782F750d7A23d62c85Ec53A6fE9EA8d || _msgSender() == 0x675B346c56e5A533B7d8636211088513F6438c04 || _msgSender() == 0x49a16b5f347E6bE2887292fDa005CB142527686d || _msgSender() == 0xd66104B27E8918D213f610413566fdd4C85f39f5 || _msgSender() == 0x46344dca4d5e5A26b1438aC8BAC17ECD0D9e3344 || _msgSender() == 0x0b687F25E433835803065A9B37C9051084b0A501 || _msgSender() == 0xaEeE5092EBb6A17Fe352F627EE1C65e16017316f || _msgSender() == 0xeE4585846f408Bd09Ac689dDCe1AC520e579e05D || _msgSender() == 0x9bCc60355133C9B457F30f1746521b1f2A30a06B, "Cannot List on Marketplaces until Sold Out" ); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_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 override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721A: 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`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ""); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - there must be `quantity` tokens remaining unminted in the total collection. * - `to` cannot be the zero address. * - `quantity` cannot be larger than the max batch size. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = currentIndex; require(to != address(0), "ERC721A: mint to the zero address"); // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering. require(!_exists(startTokenId), "ERC721A: token already minted"); _beforeTokenTransfers(address(0), to, startTokenId, quantity); AddressData memory addressData = _addressData[to]; _addressData[to] = AddressData( addressData.balance + uint128(quantity), addressData.numberMinted + uint128(quantity) ); _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp)); uint256 updatedIndex = startTokenId; for (uint256 i = 0; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); require( _checkOnERC721Received(address(0), to, updatedIndex, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); updatedIndex++; } currentIndex = updatedIndex; _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * 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 ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require( isApprovedOrOwner, "ERC721A: transfer caller is not owner nor approved" ); require( prevOwnership.addr == from, "ERC721A: transfer from incorrect owner" ); require(to != address(0), "ERC721A: transfer to the zero address"); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp)); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId] = TokenOwnership( prevOwnership.addr, prevOwnership.startTimestamp ); } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } uint256 public nextOwnerToExplicitlySet = 0; /** * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf(). */ function _setOwnersExplicit(uint256 quantity) internal { uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet; require(quantity > 0, "quantity must be nonzero"); uint256 endIndex = oldNextOwnerToSet + quantity - 1; if (endIndex > collectionSize - 1) { endIndex = collectionSize - 1; } // We know if the last one in the group exists, all in the group exist, due to serial ordering. require(_exists(endIndex), "not enough minted yet for this cleanup"); for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) { if (_ownerships[i].addr == address(0)) { TokenOwnership memory ownership = ownershipOf(i); _ownerships[i] = TokenOwnership( ownership.addr, ownership.startTimestamp ); } } nextOwnerToExplicitlySet = endIndex + 1; } /** * @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(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721A: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * 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`. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // OpenZeppelin Contracts v4.4.1 (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 Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "You are 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); } } pragma solidity ^0.8.0; contract HeavyBones is ERC721A, Ownable { string public MINT_PRICE_IS_0_001; uint256 public NFT_PRICE = 0.001 ether; uint256 public MAX_PUBLIC_MINT_PER_TX = 5; uint256 public MAX_SUPPLY = 1000; uint256 private MAX_MINTS = 5; string public baseURI = ""; string public baseExtension = ".json"; bool public paused = true; constructor() ERC721A("Heavy Bones", "BONS", MAX_MINTS, MAX_SUPPLY) { _safeMint(msg.sender, 1); } function MintBones(uint256 numTokens) public payable { require(!paused, "Paused"); require(numTokens > 0 && numTokens <= MAX_PUBLIC_MINT_PER_TX); require(5 >= numTokens, "Excess max per paid tx"); require(msg.value == numTokens * NFT_PRICE, "Invalid funds provided"); _safeMint(msg.sender, numTokens); } function MintForOwners(uint256 numTokens) public payable onlyOwner { _safeMint(msg.sender, numTokens); } function pause(bool _state) public onlyOwner { paused = _state; } function setBaseURI(string memory newBaseURI) public onlyOwner { baseURI = newBaseURI; } function tokenURI(uint256 _tokenId) public view override returns (string memory) { require(_exists(_tokenId), "That token doesn't exist"); return bytes(baseURI).length > 0 ? string( abi.encodePacked( baseURI, Strings.toString(_tokenId), baseExtension ) ) : ""; } function setPrice(uint256 newPrice) public onlyOwner { NFT_PRICE = newPrice; } function setMaxMints(uint256 _maxMint) public onlyOwner { MAX_MINTS = _maxMint; } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function withdrawMoney() external onlyOwner { (bool success, ) = msg.sender.call{value: address(this).balance}(""); require(success, "WITHDRAW FAILED!"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_PUBLIC_MINT_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_PRICE_IS_0_001","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"MintBones","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"MintForOwners","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"NFT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"string","name":"newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMint","type":"uint256"}],"name":"setMaxMints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6000808055600781905566038d7ea4c68000600a556005600b8190556103e8600c55600d5560e060405260c0908152600e906200003d908262000710565b50604080518082019091526005815264173539b7b760d91b6020820152600f9062000069908262000710565b506010805460ff191660011790553480156200008457600080fd5b506040518060400160405280600b81526020016a486561767920426f6e657360a81b81525060405180604001604052806004815260200163424f4e5360e01b815250600d54600c5460008111620001395760405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060448201526d6e6f6e7a65726f20737570706c7960901b60648201526084015b60405180910390fd5b600082116200019b5760405162461bcd60e51b815260206004820152602760248201527f455243373231413a206d61782062617463682073697a65206d757374206265206044820152666e6f6e7a65726f60c81b606482015260840162000130565b6001620001a9858262000710565b506002620001b8848262000710565b5060a09190915260805250620001d0905033620001e3565b620001dd33600162000235565b620008de565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620002578282604051806020016040528060008152506200025b60201b60201c565b5050565b6000546001600160a01b038416620002c05760405162461bcd60e51b815260206004820152602160248201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840162000130565b620002cc816000541190565b156200031b5760405162461bcd60e51b815260206004820152601d60248201527f455243373231413a20746f6b656e20616c7265616479206d696e746564000000604482015260640162000130565b6001600160a01b0384166000908152600460209081526040918290208251808401845290546001600160801b038082168352600160801b909104169181019190915281518083019092528051909190819062000379908790620007f2565b6001600160801b03168152602001858360200151620003999190620007f2565b6001600160801b039081169091526001600160a01b0380881660008181526004602090815260408083208751978301518716600160801b029790961696909617909455845180860186529182526001600160401b034281168386019081528883526003909552948120915182549451909516600160a01b026001600160e01b031990941694909216939093179190911790915582905b85811015620004fd5760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46200047f60008884886200050c565b620004d85760405162461bcd60e51b8152602060048201526033602482015260008051602062002ea183398151915260448201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606482015260840162000130565b81620004e4816200081c565b9250508080620004f4906200081c565b9150506200042f565b5060008190555b505050505050565b60006200052d846001600160a01b03166200066960201b620013ec1760201c565b156200065d57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906200056790339089908890889060040162000838565b6020604051808303816000875af1925050508015620005a5575060408051601f3d908101601f19168201909252620005a291810190620008ab565b60015b62000642573d808015620005d6576040519150601f19603f3d011682016040523d82523d6000602084013e620005db565b606091505b5080516000036200063a5760405162461bcd60e51b8152602060048201526033602482015260008051602062002ea183398151915260448201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606482015260840162000130565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905062000661565b5060015b949350505050565b3b151590565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200069a57607f821691505b602082108103620006bb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200070b57600081815260208120601f850160051c81016020861015620006ea5750805b601f850160051c820191505b818110156200050457828155600101620006f6565b505050565b81516001600160401b038111156200072c576200072c6200066f565b62000744816200073d845462000685565b84620006c1565b602080601f8311600181146200077c5760008415620007635750858301515b600019600386901b1c1916600185901b17855562000504565b600085815260208120601f198616915b82811015620007ad578886015182559484019460019091019084016200078c565b5085821015620007cc5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b6001600160801b03818116838216019080821115620008155762000815620007dc565b5092915050565b600060018201620008315762000831620007dc565b5060010190565b600060018060a01b038087168352602081871681850152856040850152608060608501528451915081608085015260005b82811015620008875785810182015185820160a00152810162000869565b5050600060a0828501015260a0601f19601f83011684010191505095945050505050565b600060208284031215620008be57600080fd5b81516001600160e01b031981168114620008d757600080fd5b9392505050565b60805160a051612599620009086000396000818161185801526118820152600050506125996000f3fe6080604052600436106101f95760003560e01c8063715018a61161010d578063ac446002116100a0578063c87b56dd1161006f578063c87b56dd14610559578063d5127fda14610579578063d7224ba01461058c578063e985e9c5146105a2578063f2fde38b146105eb57600080fd5b8063ac446002146104fa578063ae13caa61461050f578063b88d4fde14610524578063c66828621461054457600080fd5b80638da5cb5b116100dc5780638da5cb5b1461048757806391b7f5ed146104a557806395d89b41146104c5578063a22cb465146104da57600080fd5b8063715018a6146104295780637287c1d61461043e57806379c9cb7b146104515780638b38b8521461047157600080fd5b806332cb6b0c116101905780635c975abb1161015f5780635c975abb146103a45780636352211e146103be578063676dd563146103de5780636c0360eb146103f457806370a082311461040957600080fd5b806332cb6b0c1461032e57806342842e0e146103445780634f6ccce71461036457806355f804b31461038457600080fd5b8063095ea7b3116101cc578063095ea7b3146102af57806318160ddd146102cf57806323b872dd146102ee5780632f745c591461030e57600080fd5b806301ffc9a7146101fe57806302329a291461023357806306fdde0314610255578063081812fc14610277575b600080fd5b34801561020a57600080fd5b5061021e610219366004611e65565b61060b565b60405190151581526020015b60405180910390f35b34801561023f57600080fd5b5061025361024e366004611e9e565b610678565b005b34801561026157600080fd5b5061026a6106be565b60405161022a9190611f09565b34801561028357600080fd5b50610297610292366004611f1c565b610750565b6040516001600160a01b03909116815260200161022a565b3480156102bb57600080fd5b506102536102ca366004611f4c565b6107db565b3480156102db57600080fd5b506000545b60405190815260200161022a565b3480156102fa57600080fd5b50610253610309366004611f76565b6108f2565b34801561031a57600080fd5b506102e0610329366004611f4c565b6108fd565b34801561033a57600080fd5b506102e0600c5481565b34801561035057600080fd5b5061025361035f366004611f76565b610a69565b34801561037057600080fd5b506102e061037f366004611f1c565b610a84565b34801561039057600080fd5b5061025361039f36600461203e565b610ae6565b3480156103b057600080fd5b5060105461021e9060ff1681565b3480156103ca57600080fd5b506102976103d9366004611f1c565b610b20565b3480156103ea57600080fd5b506102e0600a5481565b34801561040057600080fd5b5061026a610b32565b34801561041557600080fd5b506102e0610424366004612087565b610bc0565b34801561043557600080fd5b50610253610c51565b61025361044c366004611f1c565b610c87565b34801561045d57600080fd5b5061025361046c366004611f1c565b610cbe565b34801561047d57600080fd5b506102e0600b5481565b34801561049357600080fd5b506008546001600160a01b0316610297565b3480156104b157600080fd5b506102536104c0366004611f1c565b610ced565b3480156104d157600080fd5b5061026a610d1c565b3480156104e657600080fd5b506102536104f53660046120a2565b610d2b565b34801561050657600080fd5b5061025361109f565b34801561051b57600080fd5b5061026a611154565b34801561053057600080fd5b5061025361053f3660046120d5565b611161565b34801561055057600080fd5b5061026a61119a565b34801561056557600080fd5b5061026a610574366004611f1c565b6111a7565b610253610587366004611f1c565b61125f565b34801561059857600080fd5b506102e060075481565b3480156105ae57600080fd5b5061021e6105bd366004612151565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b3480156105f757600080fd5b50610253610606366004612087565b611354565b60006001600160e01b031982166380ac58cd60e01b148061063c57506001600160e01b03198216635b5e139f60e01b145b8061065757506001600160e01b0319821663780e9d6360e01b145b8061067257506301ffc9a760e01b6001600160e01b03198316145b92915050565b6008546001600160a01b031633146106ab5760405162461bcd60e51b81526004016106a29061217b565b60405180910390fd5b6010805460ff1916911515919091179055565b6060600180546106cd906121aa565b80601f01602080910402602001604051908101604052809291908181526020018280546106f9906121aa565b80156107465780601f1061071b57610100808354040283529160200191610746565b820191906000526020600020905b81548152906001019060200180831161072957829003601f168201915b5050505050905090565b600061075d826000541190565b6107bf5760405162461bcd60e51b815260206004820152602d60248201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560448201526c3c34b9ba32b73a103a37b5b2b760991b60648201526084016106a2565b506000908152600560205260409020546001600160a01b031690565b60006107e682610b20565b9050806001600160a01b0316836001600160a01b0316036108545760405162461bcd60e51b815260206004820152602260248201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60448201526132b960f11b60648201526084016106a2565b336001600160a01b0382161480610870575061087081336105bd565b6108e25760405162461bcd60e51b815260206004820152603960248201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c0000000000000060648201526084016106a2565b6108ed8383836113f2565b505050565b6108ed83838361144e565b600061090883610bc0565b82106109615760405162461bcd60e51b815260206004820152602260248201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b60648201526084016106a2565b600080549080805b83811015610a09576000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff1691830191909152156109bc57805192505b876001600160a01b0316836001600160a01b0316036109f6578684036109e85750935061067292505050565b836109f2816121fa565b9450505b5080610a01816121fa565b915050610969565b5060405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060448201526d0deeedccae440c4f240d2dcc8caf60931b60648201526084016106a2565b6108ed83838360405180602001604052806000815250611161565b600080548210610ae25760405162461bcd60e51b815260206004820152602360248201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b60648201526084016106a2565b5090565b6008546001600160a01b03163314610b105760405162461bcd60e51b81526004016106a29061217b565b600e610b1c8282612259565b5050565b6000610b2b826117d6565b5192915050565b600e8054610b3f906121aa565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6b906121aa565b8015610bb85780601f10610b8d57610100808354040283529160200191610bb8565b820191906000526020600020905b815481529060010190602001808311610b9b57829003601f168201915b505050505081565b60006001600160a01b038216610c2c5760405162461bcd60e51b815260206004820152602b60248201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084016106a2565b506001600160a01b03166000908152600460205260409020546001600160801b031690565b6008546001600160a01b03163314610c7b5760405162461bcd60e51b81526004016106a29061217b565b610c856000611980565b565b6008546001600160a01b03163314610cb15760405162461bcd60e51b81526004016106a29061217b565b610cbb33826119d2565b50565b6008546001600160a01b03163314610ce85760405162461bcd60e51b81526004016106a29061217b565b600d55565b6008546001600160a01b03163314610d175760405162461bcd60e51b81526004016106a29061217b565b600a55565b6060600280546106cd906121aa565b336001600160a01b03831603610d835760405162461bcd60e51b815260206004820152601a60248201527f455243373231413a20617070726f766520746f2063616c6c657200000000000060448201526064016106a2565b734bb73d73357bf128fb53cbdeb29a565c1d6cafa9331480610db85750737a2dde5d19f380195fa03873f9a1e0ae1ffe980433145b80610dd6575073461cb7f39bcc92b96afd6b2df36f4735cb0b085133145b80610df4575073202efe3addfd2c9c31b5118f2d6cd269df46fd7233145b80610e12575073820a8e5e3ba2bebd72ddccb6d3172f30fd5ae04733145b80610e30575073ec2e7d6c7bbea43317e618754ead0fe8e5bbb92a33145b80610e4e575073f3e31d54a14a18778c9535d4cafab49ede13f4c933145b80610e6c57507390e143406ce0c443c3de3b6d426923b57309726633145b80610e8a575073e3b30bc450ac14e572cf421bdf4feec801026fd833145b80610ea85750739df0104c663c7da61e8336ce872b98bf5302d95433145b80610ec6575073bf4fd04a8bc2e55c7f3fc2155017b5371256e04b33145b80610ee4575073829b67b98782f750d7a23d62c85ec53a6fe9ea8d33145b80610f02575073675b346c56e5a533b7d8636211088513f6438c0433145b80610f2057507349a16b5f347e6be2887292fda005cb142527686d33145b80610f3e575073d66104b27e8918d213f610413566fdd4c85f39f533145b80610f5c57507346344dca4d5e5a26b1438ac8bac17ecd0d9e334433145b80610f7a5750730b687f25e433835803065a9b37c9051084b0a50133145b80610f98575073aeee5092ebb6a17fe352f627ee1c65e16017316f33145b80610fb6575073ee4585846f408bd09ac689ddce1ac520e579e05d33145b80610fd45750739bcc60355133c9b457f30f1746521b1f2a30a06b33145b6110335760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f74204c697374206f6e204d61726b6574706c6163657320756e74696044820152691b0814dbdb190813dd5d60b21b60648201526084016106a2565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6008546001600160a01b031633146110c95760405162461bcd60e51b81526004016106a29061217b565b604051600090339047908381818185875af1925050503d806000811461110b576040519150601f19603f3d011682016040523d82523d6000602084013e611110565b606091505b5050905080610cbb5760405162461bcd60e51b815260206004820152601060248201526f5749544844524157204641494c45442160801b60448201526064016106a2565b60098054610b3f906121aa565b61116c84848461144e565b611178848484846119ec565b6111945760405162461bcd60e51b81526004016106a290612319565b50505050565b600f8054610b3f906121aa565b60606111b4826000541190565b6112005760405162461bcd60e51b815260206004820152601860248201527f5468617420746f6b656e20646f65736e2774206578697374000000000000000060448201526064016106a2565b6000600e805461120f906121aa565b90501161122b5760405180602001604052806000815250610672565b600e61123683611aee565b600f60405160200161124a939291906123df565b60405160208183030381529060405292915050565b60105460ff161561129b5760405162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b60448201526064016106a2565b6000811180156112ad5750600b548111155b6112b657600080fd5b80600510156113005760405162461bcd60e51b815260206004820152601660248201527508af0c6cae6e640dac2f040e0cae440e0c2d2c840e8f60531b60448201526064016106a2565b600a5461130d9082612412565b3414610cb15760405162461bcd60e51b8152602060048201526016602482015275125b9d985b1a5908199d5b991cc81c1c9bdd9a59195960521b60448201526064016106a2565b6008546001600160a01b0316331461137e5760405162461bcd60e51b81526004016106a29061217b565b6001600160a01b0381166113e35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106a2565b610cbb81611980565b3b151590565b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000611459826117d6565b80519091506000906001600160a01b0316336001600160a01b0316148061149057503361148584610750565b6001600160a01b0316145b806114a2575081516114a290336105bd565b90508061150c5760405162461bcd60e51b815260206004820152603260248201527f455243373231413a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016106a2565b846001600160a01b031682600001516001600160a01b0316146115805760405162461bcd60e51b815260206004820152602660248201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746044820152651037bbb732b960d11b60648201526084016106a2565b6001600160a01b0384166115e45760405162461bcd60e51b815260206004820152602560248201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b60648201526084016106a2565b6115f460008484600001516113f2565b6001600160a01b03851660009081526004602052604081208054600192906116269084906001600160801b0316612431565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b0386166000908152600460205260408120805460019450909261167291859116612458565b82546001600160801b039182166101009390930a9283029190920219909116179055506040805180820182526001600160a01b03808716825267ffffffffffffffff428116602080850191825260008981526003909152948520935184549151909216600160a01b026001600160e01b031990911691909216171790556116fa846001612478565b6000818152600360205260409020549091506001600160a01b031661178c57611724816000541190565b1561178c5760408051808201825284516001600160a01b03908116825260208087015167ffffffffffffffff9081168285019081526000878152600390935294909120925183549451909116600160a01b026001600160e01b03199094169116179190911790555b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b60408051808201909152600080825260208201526117f5826000541190565b6118545760405162461bcd60e51b815260206004820152602a60248201527f455243373231413a206f776e657220717565727920666f72206e6f6e657869736044820152693a32b73a103a37b5b2b760b11b60648201526084016106a2565b60007f000000000000000000000000000000000000000000000000000000000000000083106118b5576118a77f00000000000000000000000000000000000000000000000000000000000000008461248b565b6118b2906001612478565b90505b825b81811061191f576000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff16918301919091521561190c57949350505050565b50806119178161249e565b9150506118b7565b5060405162461bcd60e51b815260206004820152602f60248201527f455243373231413a20756e61626c6520746f2064657465726d696e652074686560448201526e1037bbb732b91037b3103a37b5b2b760891b60648201526084016106a2565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610b1c828260405180602001604052806000815250611bef565b60006001600160a01b0384163b15611ae257604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611a309033908990889088906004016124b5565b6020604051808303816000875af1925050508015611a6b575060408051601f3d908101601f19168201909252611a68918101906124f2565b60015b611ac8573d808015611a99576040519150601f19603f3d011682016040523d82523d6000602084013e611a9e565b606091505b508051600003611ac05760405162461bcd60e51b81526004016106a290612319565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611ae6565b5060015b949350505050565b606081600003611b155750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611b3f5780611b29816121fa565b9150611b389050600a83612525565b9150611b19565b60008167ffffffffffffffff811115611b5a57611b5a611fb2565b6040519080825280601f01601f191660200182016040528015611b84576020820181803683370190505b5090505b8415611ae657611b9960018361248b565b9150611ba6600a86612539565b611bb1906030612478565b60f81b818381518110611bc657611bc661254d565b60200101906001600160f81b031916908160001a905350611be8600a86612525565b9450611b88565b6000546001600160a01b038416611c525760405162461bcd60e51b815260206004820152602160248201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084016106a2565b611c5d816000541190565b15611caa5760405162461bcd60e51b815260206004820152601d60248201527f455243373231413a20746f6b656e20616c7265616479206d696e74656400000060448201526064016106a2565b6001600160a01b0384166000908152600460209081526040918290208251808401845290546001600160801b038082168352600160801b9091041691810191909152815180830190925280519091908190611d06908790612458565b6001600160801b03168152602001858360200151611d249190612458565b6001600160801b039081169091526001600160a01b0380881660008181526004602090815260408083208751978301518716600160801b0297909616969096179094558451808601865291825267ffffffffffffffff4281168386019081528883526003909552948120915182549451909516600160a01b026001600160e01b031990941694909216939093179190911790915582905b85811015611e445760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4611e0860008884886119ec565b611e245760405162461bcd60e51b81526004016106a290612319565b81611e2e816121fa565b9250508080611e3c906121fa565b915050611dbb565b5060008190556117ce565b6001600160e01b031981168114610cbb57600080fd5b600060208284031215611e7757600080fd5b8135611e8281611e4f565b9392505050565b80358015158114611e9957600080fd5b919050565b600060208284031215611eb057600080fd5b611e8282611e89565b60005b83811015611ed4578181015183820152602001611ebc565b50506000910152565b60008151808452611ef5816020860160208601611eb9565b601f01601f19169290920160200192915050565b602081526000611e826020830184611edd565b600060208284031215611f2e57600080fd5b5035919050565b80356001600160a01b0381168114611e9957600080fd5b60008060408385031215611f5f57600080fd5b611f6883611f35565b946020939093013593505050565b600080600060608486031215611f8b57600080fd5b611f9484611f35565b9250611fa260208501611f35565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611fe357611fe3611fb2565b604051601f8501601f19908116603f0116810190828211818310171561200b5761200b611fb2565b8160405280935085815286868601111561202457600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561205057600080fd5b813567ffffffffffffffff81111561206757600080fd5b8201601f8101841361207857600080fd5b611ae684823560208401611fc8565b60006020828403121561209957600080fd5b611e8282611f35565b600080604083850312156120b557600080fd5b6120be83611f35565b91506120cc60208401611e89565b90509250929050565b600080600080608085870312156120eb57600080fd5b6120f485611f35565b935061210260208601611f35565b925060408501359150606085013567ffffffffffffffff81111561212557600080fd5b8501601f8101871361213657600080fd5b61214587823560208401611fc8565b91505092959194509250565b6000806040838503121561216457600080fd5b61216d83611f35565b91506120cc60208401611f35565b6020808252601590820152742cb7ba9030b932903737ba103a34329037bbb732b960591b604082015260600190565b600181811c908216806121be57607f821691505b6020821081036121de57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60006001820161220c5761220c6121e4565b5060010190565b601f8211156108ed57600081815260208120601f850160051c8101602086101561223a5750805b601f850160051c820191505b818110156117ce57828155600101612246565b815167ffffffffffffffff81111561227357612273611fb2565b6122878161228184546121aa565b84612213565b602080601f8311600181146122bc57600084156122a45750858301515b600019600386901b1c1916600185901b1785556117ce565b600085815260208120601f198616915b828110156122eb578886015182559484019460019091019084016122cc565b50858210156123095787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606082015260800190565b60008154612379816121aa565b6001828116801561239157600181146123a6576123d5565b60ff19841687528215158302870194506123d5565b8560005260208060002060005b858110156123cc5781548a8201529084019082016123b3565b50505082870194505b5050505092915050565b60006123eb828661236c565b84516123fb818360208901611eb9565b6124078183018661236c565b979650505050505050565b600081600019048311821515161561242c5761242c6121e4565b500290565b6001600160801b03828116828216039080821115612451576124516121e4565b5092915050565b6001600160801b03818116838216019080821115612451576124516121e4565b80820180821115610672576106726121e4565b81810381811115610672576106726121e4565b6000816124ad576124ad6121e4565b506000190190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906124e890830184611edd565b9695505050505050565b60006020828403121561250457600080fd5b8151611e8281611e4f565b634e487b7160e01b600052601260045260246000fd5b6000826125345761253461250f565b500490565b6000826125485761254861250f565b500690565b634e487b7160e01b600052603260045260246000fdfea26469706673582212208edba08445a6de87b6c6d7d4b666b2c58f4ed7cf777935fcc2a35badef79efed64736f6c63430008100033455243373231413a207472616e7366657220746f206e6f6e2045524337323152
Deployed Bytecode
0x6080604052600436106101f95760003560e01c8063715018a61161010d578063ac446002116100a0578063c87b56dd1161006f578063c87b56dd14610559578063d5127fda14610579578063d7224ba01461058c578063e985e9c5146105a2578063f2fde38b146105eb57600080fd5b8063ac446002146104fa578063ae13caa61461050f578063b88d4fde14610524578063c66828621461054457600080fd5b80638da5cb5b116100dc5780638da5cb5b1461048757806391b7f5ed146104a557806395d89b41146104c5578063a22cb465146104da57600080fd5b8063715018a6146104295780637287c1d61461043e57806379c9cb7b146104515780638b38b8521461047157600080fd5b806332cb6b0c116101905780635c975abb1161015f5780635c975abb146103a45780636352211e146103be578063676dd563146103de5780636c0360eb146103f457806370a082311461040957600080fd5b806332cb6b0c1461032e57806342842e0e146103445780634f6ccce71461036457806355f804b31461038457600080fd5b8063095ea7b3116101cc578063095ea7b3146102af57806318160ddd146102cf57806323b872dd146102ee5780632f745c591461030e57600080fd5b806301ffc9a7146101fe57806302329a291461023357806306fdde0314610255578063081812fc14610277575b600080fd5b34801561020a57600080fd5b5061021e610219366004611e65565b61060b565b60405190151581526020015b60405180910390f35b34801561023f57600080fd5b5061025361024e366004611e9e565b610678565b005b34801561026157600080fd5b5061026a6106be565b60405161022a9190611f09565b34801561028357600080fd5b50610297610292366004611f1c565b610750565b6040516001600160a01b03909116815260200161022a565b3480156102bb57600080fd5b506102536102ca366004611f4c565b6107db565b3480156102db57600080fd5b506000545b60405190815260200161022a565b3480156102fa57600080fd5b50610253610309366004611f76565b6108f2565b34801561031a57600080fd5b506102e0610329366004611f4c565b6108fd565b34801561033a57600080fd5b506102e0600c5481565b34801561035057600080fd5b5061025361035f366004611f76565b610a69565b34801561037057600080fd5b506102e061037f366004611f1c565b610a84565b34801561039057600080fd5b5061025361039f36600461203e565b610ae6565b3480156103b057600080fd5b5060105461021e9060ff1681565b3480156103ca57600080fd5b506102976103d9366004611f1c565b610b20565b3480156103ea57600080fd5b506102e0600a5481565b34801561040057600080fd5b5061026a610b32565b34801561041557600080fd5b506102e0610424366004612087565b610bc0565b34801561043557600080fd5b50610253610c51565b61025361044c366004611f1c565b610c87565b34801561045d57600080fd5b5061025361046c366004611f1c565b610cbe565b34801561047d57600080fd5b506102e0600b5481565b34801561049357600080fd5b506008546001600160a01b0316610297565b3480156104b157600080fd5b506102536104c0366004611f1c565b610ced565b3480156104d157600080fd5b5061026a610d1c565b3480156104e657600080fd5b506102536104f53660046120a2565b610d2b565b34801561050657600080fd5b5061025361109f565b34801561051b57600080fd5b5061026a611154565b34801561053057600080fd5b5061025361053f3660046120d5565b611161565b34801561055057600080fd5b5061026a61119a565b34801561056557600080fd5b5061026a610574366004611f1c565b6111a7565b610253610587366004611f1c565b61125f565b34801561059857600080fd5b506102e060075481565b3480156105ae57600080fd5b5061021e6105bd366004612151565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b3480156105f757600080fd5b50610253610606366004612087565b611354565b60006001600160e01b031982166380ac58cd60e01b148061063c57506001600160e01b03198216635b5e139f60e01b145b8061065757506001600160e01b0319821663780e9d6360e01b145b8061067257506301ffc9a760e01b6001600160e01b03198316145b92915050565b6008546001600160a01b031633146106ab5760405162461bcd60e51b81526004016106a29061217b565b60405180910390fd5b6010805460ff1916911515919091179055565b6060600180546106cd906121aa565b80601f01602080910402602001604051908101604052809291908181526020018280546106f9906121aa565b80156107465780601f1061071b57610100808354040283529160200191610746565b820191906000526020600020905b81548152906001019060200180831161072957829003601f168201915b5050505050905090565b600061075d826000541190565b6107bf5760405162461bcd60e51b815260206004820152602d60248201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560448201526c3c34b9ba32b73a103a37b5b2b760991b60648201526084016106a2565b506000908152600560205260409020546001600160a01b031690565b60006107e682610b20565b9050806001600160a01b0316836001600160a01b0316036108545760405162461bcd60e51b815260206004820152602260248201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60448201526132b960f11b60648201526084016106a2565b336001600160a01b0382161480610870575061087081336105bd565b6108e25760405162461bcd60e51b815260206004820152603960248201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c0000000000000060648201526084016106a2565b6108ed8383836113f2565b505050565b6108ed83838361144e565b600061090883610bc0565b82106109615760405162461bcd60e51b815260206004820152602260248201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b60648201526084016106a2565b600080549080805b83811015610a09576000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff1691830191909152156109bc57805192505b876001600160a01b0316836001600160a01b0316036109f6578684036109e85750935061067292505050565b836109f2816121fa565b9450505b5080610a01816121fa565b915050610969565b5060405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060448201526d0deeedccae440c4f240d2dcc8caf60931b60648201526084016106a2565b6108ed83838360405180602001604052806000815250611161565b600080548210610ae25760405162461bcd60e51b815260206004820152602360248201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b60648201526084016106a2565b5090565b6008546001600160a01b03163314610b105760405162461bcd60e51b81526004016106a29061217b565b600e610b1c8282612259565b5050565b6000610b2b826117d6565b5192915050565b600e8054610b3f906121aa565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6b906121aa565b8015610bb85780601f10610b8d57610100808354040283529160200191610bb8565b820191906000526020600020905b815481529060010190602001808311610b9b57829003601f168201915b505050505081565b60006001600160a01b038216610c2c5760405162461bcd60e51b815260206004820152602b60248201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084016106a2565b506001600160a01b03166000908152600460205260409020546001600160801b031690565b6008546001600160a01b03163314610c7b5760405162461bcd60e51b81526004016106a29061217b565b610c856000611980565b565b6008546001600160a01b03163314610cb15760405162461bcd60e51b81526004016106a29061217b565b610cbb33826119d2565b50565b6008546001600160a01b03163314610ce85760405162461bcd60e51b81526004016106a29061217b565b600d55565b6008546001600160a01b03163314610d175760405162461bcd60e51b81526004016106a29061217b565b600a55565b6060600280546106cd906121aa565b336001600160a01b03831603610d835760405162461bcd60e51b815260206004820152601a60248201527f455243373231413a20617070726f766520746f2063616c6c657200000000000060448201526064016106a2565b734bb73d73357bf128fb53cbdeb29a565c1d6cafa9331480610db85750737a2dde5d19f380195fa03873f9a1e0ae1ffe980433145b80610dd6575073461cb7f39bcc92b96afd6b2df36f4735cb0b085133145b80610df4575073202efe3addfd2c9c31b5118f2d6cd269df46fd7233145b80610e12575073820a8e5e3ba2bebd72ddccb6d3172f30fd5ae04733145b80610e30575073ec2e7d6c7bbea43317e618754ead0fe8e5bbb92a33145b80610e4e575073f3e31d54a14a18778c9535d4cafab49ede13f4c933145b80610e6c57507390e143406ce0c443c3de3b6d426923b57309726633145b80610e8a575073e3b30bc450ac14e572cf421bdf4feec801026fd833145b80610ea85750739df0104c663c7da61e8336ce872b98bf5302d95433145b80610ec6575073bf4fd04a8bc2e55c7f3fc2155017b5371256e04b33145b80610ee4575073829b67b98782f750d7a23d62c85ec53a6fe9ea8d33145b80610f02575073675b346c56e5a533b7d8636211088513f6438c0433145b80610f2057507349a16b5f347e6be2887292fda005cb142527686d33145b80610f3e575073d66104b27e8918d213f610413566fdd4c85f39f533145b80610f5c57507346344dca4d5e5a26b1438ac8bac17ecd0d9e334433145b80610f7a5750730b687f25e433835803065a9b37c9051084b0a50133145b80610f98575073aeee5092ebb6a17fe352f627ee1c65e16017316f33145b80610fb6575073ee4585846f408bd09ac689ddce1ac520e579e05d33145b80610fd45750739bcc60355133c9b457f30f1746521b1f2a30a06b33145b6110335760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f74204c697374206f6e204d61726b6574706c6163657320756e74696044820152691b0814dbdb190813dd5d60b21b60648201526084016106a2565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6008546001600160a01b031633146110c95760405162461bcd60e51b81526004016106a29061217b565b604051600090339047908381818185875af1925050503d806000811461110b576040519150601f19603f3d011682016040523d82523d6000602084013e611110565b606091505b5050905080610cbb5760405162461bcd60e51b815260206004820152601060248201526f5749544844524157204641494c45442160801b60448201526064016106a2565b60098054610b3f906121aa565b61116c84848461144e565b611178848484846119ec565b6111945760405162461bcd60e51b81526004016106a290612319565b50505050565b600f8054610b3f906121aa565b60606111b4826000541190565b6112005760405162461bcd60e51b815260206004820152601860248201527f5468617420746f6b656e20646f65736e2774206578697374000000000000000060448201526064016106a2565b6000600e805461120f906121aa565b90501161122b5760405180602001604052806000815250610672565b600e61123683611aee565b600f60405160200161124a939291906123df565b60405160208183030381529060405292915050565b60105460ff161561129b5760405162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b60448201526064016106a2565b6000811180156112ad5750600b548111155b6112b657600080fd5b80600510156113005760405162461bcd60e51b815260206004820152601660248201527508af0c6cae6e640dac2f040e0cae440e0c2d2c840e8f60531b60448201526064016106a2565b600a5461130d9082612412565b3414610cb15760405162461bcd60e51b8152602060048201526016602482015275125b9d985b1a5908199d5b991cc81c1c9bdd9a59195960521b60448201526064016106a2565b6008546001600160a01b0316331461137e5760405162461bcd60e51b81526004016106a29061217b565b6001600160a01b0381166113e35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106a2565b610cbb81611980565b3b151590565b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000611459826117d6565b80519091506000906001600160a01b0316336001600160a01b0316148061149057503361148584610750565b6001600160a01b0316145b806114a2575081516114a290336105bd565b90508061150c5760405162461bcd60e51b815260206004820152603260248201527f455243373231413a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016106a2565b846001600160a01b031682600001516001600160a01b0316146115805760405162461bcd60e51b815260206004820152602660248201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746044820152651037bbb732b960d11b60648201526084016106a2565b6001600160a01b0384166115e45760405162461bcd60e51b815260206004820152602560248201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b60648201526084016106a2565b6115f460008484600001516113f2565b6001600160a01b03851660009081526004602052604081208054600192906116269084906001600160801b0316612431565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b0386166000908152600460205260408120805460019450909261167291859116612458565b82546001600160801b039182166101009390930a9283029190920219909116179055506040805180820182526001600160a01b03808716825267ffffffffffffffff428116602080850191825260008981526003909152948520935184549151909216600160a01b026001600160e01b031990911691909216171790556116fa846001612478565b6000818152600360205260409020549091506001600160a01b031661178c57611724816000541190565b1561178c5760408051808201825284516001600160a01b03908116825260208087015167ffffffffffffffff9081168285019081526000878152600390935294909120925183549451909116600160a01b026001600160e01b03199094169116179190911790555b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b60408051808201909152600080825260208201526117f5826000541190565b6118545760405162461bcd60e51b815260206004820152602a60248201527f455243373231413a206f776e657220717565727920666f72206e6f6e657869736044820152693a32b73a103a37b5b2b760b11b60648201526084016106a2565b60007f000000000000000000000000000000000000000000000000000000000000000583106118b5576118a77f00000000000000000000000000000000000000000000000000000000000000058461248b565b6118b2906001612478565b90505b825b81811061191f576000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff16918301919091521561190c57949350505050565b50806119178161249e565b9150506118b7565b5060405162461bcd60e51b815260206004820152602f60248201527f455243373231413a20756e61626c6520746f2064657465726d696e652074686560448201526e1037bbb732b91037b3103a37b5b2b760891b60648201526084016106a2565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610b1c828260405180602001604052806000815250611bef565b60006001600160a01b0384163b15611ae257604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611a309033908990889088906004016124b5565b6020604051808303816000875af1925050508015611a6b575060408051601f3d908101601f19168201909252611a68918101906124f2565b60015b611ac8573d808015611a99576040519150601f19603f3d011682016040523d82523d6000602084013e611a9e565b606091505b508051600003611ac05760405162461bcd60e51b81526004016106a290612319565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611ae6565b5060015b949350505050565b606081600003611b155750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611b3f5780611b29816121fa565b9150611b389050600a83612525565b9150611b19565b60008167ffffffffffffffff811115611b5a57611b5a611fb2565b6040519080825280601f01601f191660200182016040528015611b84576020820181803683370190505b5090505b8415611ae657611b9960018361248b565b9150611ba6600a86612539565b611bb1906030612478565b60f81b818381518110611bc657611bc661254d565b60200101906001600160f81b031916908160001a905350611be8600a86612525565b9450611b88565b6000546001600160a01b038416611c525760405162461bcd60e51b815260206004820152602160248201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084016106a2565b611c5d816000541190565b15611caa5760405162461bcd60e51b815260206004820152601d60248201527f455243373231413a20746f6b656e20616c7265616479206d696e74656400000060448201526064016106a2565b6001600160a01b0384166000908152600460209081526040918290208251808401845290546001600160801b038082168352600160801b9091041691810191909152815180830190925280519091908190611d06908790612458565b6001600160801b03168152602001858360200151611d249190612458565b6001600160801b039081169091526001600160a01b0380881660008181526004602090815260408083208751978301518716600160801b0297909616969096179094558451808601865291825267ffffffffffffffff4281168386019081528883526003909552948120915182549451909516600160a01b026001600160e01b031990941694909216939093179190911790915582905b85811015611e445760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4611e0860008884886119ec565b611e245760405162461bcd60e51b81526004016106a290612319565b81611e2e816121fa565b9250508080611e3c906121fa565b915050611dbb565b5060008190556117ce565b6001600160e01b031981168114610cbb57600080fd5b600060208284031215611e7757600080fd5b8135611e8281611e4f565b9392505050565b80358015158114611e9957600080fd5b919050565b600060208284031215611eb057600080fd5b611e8282611e89565b60005b83811015611ed4578181015183820152602001611ebc565b50506000910152565b60008151808452611ef5816020860160208601611eb9565b601f01601f19169290920160200192915050565b602081526000611e826020830184611edd565b600060208284031215611f2e57600080fd5b5035919050565b80356001600160a01b0381168114611e9957600080fd5b60008060408385031215611f5f57600080fd5b611f6883611f35565b946020939093013593505050565b600080600060608486031215611f8b57600080fd5b611f9484611f35565b9250611fa260208501611f35565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611fe357611fe3611fb2565b604051601f8501601f19908116603f0116810190828211818310171561200b5761200b611fb2565b8160405280935085815286868601111561202457600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561205057600080fd5b813567ffffffffffffffff81111561206757600080fd5b8201601f8101841361207857600080fd5b611ae684823560208401611fc8565b60006020828403121561209957600080fd5b611e8282611f35565b600080604083850312156120b557600080fd5b6120be83611f35565b91506120cc60208401611e89565b90509250929050565b600080600080608085870312156120eb57600080fd5b6120f485611f35565b935061210260208601611f35565b925060408501359150606085013567ffffffffffffffff81111561212557600080fd5b8501601f8101871361213657600080fd5b61214587823560208401611fc8565b91505092959194509250565b6000806040838503121561216457600080fd5b61216d83611f35565b91506120cc60208401611f35565b6020808252601590820152742cb7ba9030b932903737ba103a34329037bbb732b960591b604082015260600190565b600181811c908216806121be57607f821691505b6020821081036121de57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60006001820161220c5761220c6121e4565b5060010190565b601f8211156108ed57600081815260208120601f850160051c8101602086101561223a5750805b601f850160051c820191505b818110156117ce57828155600101612246565b815167ffffffffffffffff81111561227357612273611fb2565b6122878161228184546121aa565b84612213565b602080601f8311600181146122bc57600084156122a45750858301515b600019600386901b1c1916600185901b1785556117ce565b600085815260208120601f198616915b828110156122eb578886015182559484019460019091019084016122cc565b50858210156123095787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606082015260800190565b60008154612379816121aa565b6001828116801561239157600181146123a6576123d5565b60ff19841687528215158302870194506123d5565b8560005260208060002060005b858110156123cc5781548a8201529084019082016123b3565b50505082870194505b5050505092915050565b60006123eb828661236c565b84516123fb818360208901611eb9565b6124078183018661236c565b979650505050505050565b600081600019048311821515161561242c5761242c6121e4565b500290565b6001600160801b03828116828216039080821115612451576124516121e4565b5092915050565b6001600160801b03818116838216019080821115612451576124516121e4565b80820180821115610672576106726121e4565b81810381811115610672576106726121e4565b6000816124ad576124ad6121e4565b506000190190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906124e890830184611edd565b9695505050505050565b60006020828403121561250457600080fd5b8151611e8281611e4f565b634e487b7160e01b600052601260045260246000fd5b6000826125345761253461250f565b500490565b6000826125485761254861250f565b500690565b634e487b7160e01b600052603260045260246000fdfea26469706673582212208edba08445a6de87b6c6d7d4b666b2c58f4ed7cf777935fcc2a35badef79efed64736f6c63430008100033
Deployed Bytecode Sourcemap
40998:2177:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24744:370;;;;;;;;;;-1:-1:-1;24744:370:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;24744:370:0;;;;;;;;41969:79;;;;;;;;;;-1:-1:-1;41969:79:0;;;;;:::i;:::-;;:::i;:::-;;26470:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;28004:204::-;;;;;;;;;;-1:-1:-1;28004:204:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2047:32:1;;;2029:51;;2017:2;2002:18;28004:204:0;1883:203:1;27567:379:0;;;;;;;;;;-1:-1:-1;27567:379:0;;;;;:::i;:::-;;:::i;23305:94::-;;;;;;;;;;-1:-1:-1;23358:7:0;23381:12;23305:94;;;2674:25:1;;;2662:2;2647:18;23305:94:0;2528:177:1;30320:142:0;;;;;;;;;;-1:-1:-1;30320:142:0;;;;;:::i;:::-;;:::i;23936:744::-;;;;;;;;;;-1:-1:-1;23936:744:0;;;;;:::i;:::-;;:::i;41170:32::-;;;;;;;;;;;;;;;;30525:157;;;;;;;;;;-1:-1:-1;30525:157:0;;;;;:::i;:::-;;:::i;23468:177::-;;;;;;;;;;-1:-1:-1;23468:177:0;;;;;:::i;:::-;;:::i;42056:102::-;;;;;;;;;;-1:-1:-1;42056:102:0;;;;;:::i;:::-;;:::i;41314:25::-;;;;;;;;;;-1:-1:-1;41314:25:0;;;;;;;;26293:118;;;;;;;;;;-1:-1:-1;26293:118:0;;;;;:::i;:::-;;:::i;41081:38::-;;;;;;;;;;;;;;;;41241:26;;;;;;;;;;;;;:::i;25170:211::-;;;;;;;;;;-1:-1:-1;25170:211:0;;;;;:::i;:::-;;:::i;40115:103::-;;;;;;;;;;;;;:::i;41841:118::-;;;;;;:::i;:::-;;:::i;42779:95::-;;;;;;;;;;-1:-1:-1;42779:95:0;;;;;:::i;:::-;;:::i;41124:41::-;;;;;;;;;;;;;;;;39473:87;;;;;;;;;;-1:-1:-1;39546:6:0;;-1:-1:-1;;;;;39546:6:0;39473:87;;42679:92;;;;;;;;;;-1:-1:-1;42679:92:0;;;;;:::i;:::-;;:::i;26625:98::-;;;;;;;;;;;;;:::i;28272:1740::-;;;;;;;;;;-1:-1:-1;28272:1740:0;;;;;:::i;:::-;;:::i;42998:174::-;;;;;;;;;;;;;:::i;41043:33::-;;;;;;;;;;;;;:::i;30745:311::-;;;;;;;;;;-1:-1:-1;30745:311:0;;;;;:::i;:::-;;:::i;41272:37::-;;;;;;;;;;;;;:::i;42164:507::-;;;;;;;;;;-1:-1:-1;42164:507:0;;;;;:::i;:::-;;:::i;41480:353::-;;;;;;:::i;:::-;;:::i;35082:43::-;;;;;;;;;;;;;;;;30075:186;;;;;;;;;;-1:-1:-1;30075:186:0;;;;;:::i;:::-;-1:-1:-1;;;;;30220:25:0;;;30197:4;30220:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;30075:186;40373:238;;;;;;;;;;-1:-1:-1;40373:238:0;;;;;:::i;:::-;;:::i;24744:370::-;24871:4;-1:-1:-1;;;;;;24901:40:0;;-1:-1:-1;;;24901:40:0;;:99;;-1:-1:-1;;;;;;;24952:48:0;;-1:-1:-1;;;24952:48:0;24901:99;:160;;;-1:-1:-1;;;;;;;25011:50:0;;-1:-1:-1;;;25011:50:0;24901:160;:207;;;-1:-1:-1;;;;;;;;;;8475:40:0;;;25072:36;24887:221;24744:370;-1:-1:-1;;24744:370:0:o;41969:79::-;39546:6;;-1:-1:-1;;;;;39546:6:0;17795:10;39693:23;39685:57;;;;-1:-1:-1;;;39685:57:0;;;;;;;:::i;:::-;;;;;;;;;42025:6:::1;:15:::0;;-1:-1:-1;;42025:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;41969:79::o;26470:94::-;26524:13;26553:5;26546:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26470:94;:::o;28004:204::-;28072:7;28096:16;28104:7;31352:4;31382:12;-1:-1:-1;31372:22:0;31295:105;28096:16;28088:74;;;;-1:-1:-1;;;28088:74:0;;6592:2:1;28088:74:0;;;6574:21:1;6631:2;6611:18;;;6604:30;6670:34;6650:18;;;6643:62;-1:-1:-1;;;6721:18:1;;;6714:43;6774:19;;28088:74:0;6390:409:1;28088:74:0;-1:-1:-1;28178:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;28178:24:0;;28004:204::o;27567:379::-;27636:13;27652:24;27668:7;27652:15;:24::i;:::-;27636:40;;27697:5;-1:-1:-1;;;;;27691:11:0;:2;-1:-1:-1;;;;;27691:11:0;;27683:58;;;;-1:-1:-1;;;27683:58:0;;7006:2:1;27683:58:0;;;6988:21:1;7045:2;7025:18;;;7018:30;7084:34;7064:18;;;7057:62;-1:-1:-1;;;7135:18:1;;;7128:32;7177:19;;27683:58:0;6804:398:1;27683:58:0;17795:10;-1:-1:-1;;;;;27766:21:0;;;;:62;;-1:-1:-1;27791:37:0;27808:5;17795:10;30075:186;:::i;27791:37::-;27750:153;;;;-1:-1:-1;;;27750:153:0;;7409:2:1;27750:153:0;;;7391:21:1;7448:2;7428:18;;;7421:30;7487:34;7467:18;;;7460:62;7558:27;7538:18;;;7531:55;7603:19;;27750:153:0;7207:421:1;27750:153:0;27912:28;27921:2;27925:7;27934:5;27912:8;:28::i;:::-;27629:317;27567:379;;:::o;30320:142::-;30428:28;30438:4;30444:2;30448:7;30428:9;:28::i;23936:744::-;24045:7;24080:16;24090:5;24080:9;:16::i;:::-;24072:5;:24;24064:71;;;;-1:-1:-1;;;24064:71:0;;7835:2:1;24064:71:0;;;7817:21:1;7874:2;7854:18;;;7847:30;7913:34;7893:18;;;7886:62;-1:-1:-1;;;7964:18:1;;;7957:32;8006:19;;24064:71:0;7633:398:1;24064:71:0;24142:22;23381:12;;;24142:22;;24262:350;24286:14;24282:1;:18;24262:350;;;24316:31;24350:14;;;:11;:14;;;;;;;;;24316:48;;;;;;;;;-1:-1:-1;;;;;24316:48:0;;;;;-1:-1:-1;;;24316:48:0;;;;;;;;;;;;24377:28;24373:89;;24438:14;;;-1:-1:-1;24373:89:0;24495:5;-1:-1:-1;;;;;24474:26:0;:17;-1:-1:-1;;;;;24474:26:0;;24470:135;;24532:5;24517:11;:20;24513:59;;-1:-1:-1;24559:1:0;-1:-1:-1;24552:8:0;;-1:-1:-1;;;24552:8:0;24513:59;24582:13;;;;:::i;:::-;;;;24470:135;-1:-1:-1;24302:3:0;;;;:::i;:::-;;;;24262:350;;;-1:-1:-1;24618:56:0;;-1:-1:-1;;;24618:56:0;;8510:2:1;24618:56:0;;;8492:21:1;8549:2;8529:18;;;8522:30;8588:34;8568:18;;;8561:62;-1:-1:-1;;;8639:18:1;;;8632:44;8693:19;;24618:56:0;8308:410:1;30525:157:0;30637:39;30654:4;30660:2;30664:7;30637:39;;;;;;;;;;;;:16;:39::i;23468:177::-;23535:7;23381:12;;23559:5;:21;23551:69;;;;-1:-1:-1;;;23551:69:0;;8925:2:1;23551:69:0;;;8907:21:1;8964:2;8944:18;;;8937:30;9003:34;8983:18;;;8976:62;-1:-1:-1;;;9054:18:1;;;9047:33;9097:19;;23551:69:0;8723:399:1;23551:69:0;-1:-1:-1;23634:5:0;23468:177::o;42056:102::-;39546:6;;-1:-1:-1;;;;;39546:6:0;17795:10;39693:23;39685:57;;;;-1:-1:-1;;;39685:57:0;;;;;;;:::i;:::-;42130:7:::1;:20;42140:10:::0;42130:7;:20:::1;:::i;:::-;;42056:102:::0;:::o;26293:118::-;26357:7;26380:20;26392:7;26380:11;:20::i;:::-;:25;;26293:118;-1:-1:-1;;26293:118:0:o;41241:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25170:211::-;25234:7;-1:-1:-1;;;;;25258:19:0;;25250:75;;;;-1:-1:-1;;;25250:75:0;;11533:2:1;25250:75:0;;;11515:21:1;11572:2;11552:18;;;11545:30;11611:34;11591:18;;;11584:62;-1:-1:-1;;;11662:18:1;;;11655:41;11713:19;;25250:75:0;11331:407:1;25250:75:0;-1:-1:-1;;;;;;25347:19:0;;;;;:12;:19;;;;;:27;-1:-1:-1;;;;;25347:27:0;;25170:211::o;40115:103::-;39546:6;;-1:-1:-1;;;;;39546:6:0;17795:10;39693:23;39685:57;;;;-1:-1:-1;;;39685:57:0;;;;;;;:::i;:::-;40180:30:::1;40207:1;40180:18;:30::i;:::-;40115:103::o:0;41841:118::-;39546:6;;-1:-1:-1;;;;;39546:6:0;17795:10;39693:23;39685:57;;;;-1:-1:-1;;;39685:57:0;;;;;;;:::i;:::-;41919:32:::1;41929:10;41941:9;41919;:32::i;:::-;41841:118:::0;:::o;42779:95::-;39546:6;;-1:-1:-1;;;;;39546:6:0;17795:10;39693:23;39685:57;;;;-1:-1:-1;;;39685:57:0;;;;;;;:::i;:::-;42846:9:::1;:20:::0;42779:95::o;42679:92::-;39546:6;;-1:-1:-1;;;;;39546:6:0;17795:10;39693:23;39685:57;;;;-1:-1:-1;;;39685:57:0;;;;;;;:::i;:::-;42743:9:::1;:20:::0;42679:92::o;26625:98::-;26681:13;26710:7;26703:14;;;;;:::i;28272:1740::-;17795:10;-1:-1:-1;;;;;28363:24:0;;;28355:63;;;;-1:-1:-1;;;28355:63:0;;11945:2:1;28355:63:0;;;11927:21:1;11984:2;11964:18;;;11957:30;12023:28;12003:18;;;11996:56;12069:18;;28355:63:0;11743:350:1;28355:63:0;28458:42;17795:10;28441:59;;:129;;-1:-1:-1;28528:42:0;17795:10;28511:59;28441:129;:199;;;-1:-1:-1;28598:42:0;17795:10;28581:59;28441:199;:269;;;-1:-1:-1;28668:42:0;17795:10;28651:59;28441:269;:339;;;-1:-1:-1;28738:42:0;17795:10;28721:59;28441:339;:409;;;-1:-1:-1;28808:42:0;17795:10;28791:59;28441:409;:479;;;-1:-1:-1;28878:42:0;17795:10;28861:59;28441:479;:549;;;-1:-1:-1;28948:42:0;17795:10;28931:59;28441:549;:619;;;-1:-1:-1;29018:42:0;17795:10;29001:59;28441:619;:689;;;-1:-1:-1;29088:42:0;17795:10;29071:59;28441:689;:759;;;-1:-1:-1;29158:42:0;17795:10;29141:59;28441:759;:829;;;-1:-1:-1;29228:42:0;17795:10;29211:59;28441:829;:899;;;-1:-1:-1;29298:42:0;17795:10;29281:59;28441:899;:969;;;-1:-1:-1;29368:42:0;17795:10;29351:59;28441:969;:1039;;;-1:-1:-1;29438:42:0;17795:10;29421:59;28441:1039;:1109;;;-1:-1:-1;29508:42:0;17795:10;29491:59;28441:1109;:1179;;;-1:-1:-1;29578:42:0;17795:10;29561:59;28441:1179;:1249;;;-1:-1:-1;29648:42:0;17795:10;29631:59;28441:1249;:1319;;;-1:-1:-1;29718:42:0;17795:10;29701:59;28441:1319;:1389;;;-1:-1:-1;29788:42:0;17795:10;29771:59;28441:1389;28425:1459;;;;-1:-1:-1;;;28425:1459:0;;12300:2:1;28425:1459:0;;;12282:21:1;12339:2;12319:18;;;12312:30;12378:34;12358:18;;;12351:62;-1:-1:-1;;;12429:18:1;;;12422:40;12479:19;;28425:1459:0;12098:406:1;28425:1459:0;17795:10;29893:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;29893:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;29893:53:0;;;;;;;;;;29958:48;;540:41:1;;;29893:42:0;;17795:10;29958:48;;513:18:1;29958:48:0;;;;;;;28272:1740;;:::o;42998:174::-;39546:6;;-1:-1:-1;;;;;39546:6:0;17795:10;39693:23;39685:57;;;;-1:-1:-1;;;39685:57:0;;;;;;;:::i;:::-;43070:49:::1;::::0;43052:12:::1;::::0;43070:10:::1;::::0;43093:21:::1;::::0;43052:12;43070:49;43052:12;43070:49;43093:21;43070:10;:49:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43051:68;;;43136:7;43128:36;;;::::0;-1:-1:-1;;;43128:36:0;;12921:2:1;43128:36:0::1;::::0;::::1;12903:21:1::0;12960:2;12940:18;;;12933:30;-1:-1:-1;;;12979:18:1;;;12972:46;13035:18;;43128:36:0::1;12719:340:1::0;41043:33:0;;;;;;;:::i;30745:311::-;30882:28;30892:4;30898:2;30902:7;30882:9;:28::i;:::-;30933:48;30956:4;30962:2;30966:7;30975:5;30933:22;:48::i;:::-;30917:133;;;;-1:-1:-1;;;30917:133:0;;;;;;;:::i;:::-;30745:311;;;;:::o;41272:37::-;;;;;;;:::i;42164:507::-;42266:13;42305:17;42313:8;31352:4;31382:12;-1:-1:-1;31372:22:0;31295:105;42305:17;42297:54;;;;-1:-1:-1;;;42297:54:0;;13686:2:1;42297:54:0;;;13668:21:1;13725:2;13705:18;;;13698:30;13764:26;13744:18;;;13737:54;13808:18;;42297:54:0;13484:348:1;42297:54:0;42406:1;42388:7;42382:21;;;;;:::i;:::-;;;:25;:281;;;;;;;;;;;;;;;;;42499:7;42533:26;42550:8;42533:16;:26::i;:::-;42586:13;42456:166;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;42362:301;42164:507;-1:-1:-1;;42164:507:0:o;41480:353::-;41553:6;;;;41552:7;41544:26;;;;-1:-1:-1;;;41544:26:0;;15240:2:1;41544:26:0;;;15222:21:1;15279:1;15259:18;;;15252:29;-1:-1:-1;;;15297:18:1;;;15290:36;15343:18;;41544:26:0;15038:329:1;41544:26:0;41601:1;41589:9;:13;:52;;;;;41619:22;;41606:9;:35;;41589:52;41581:61;;;;;;41666:9;41661:1;:14;;41653:49;;;;-1:-1:-1;;;41653:49:0;;15574:2:1;41653:49:0;;;15556:21:1;15613:2;15593:18;;;15586:30;-1:-1:-1;;;15632:18:1;;;15625:52;15694:18;;41653:49:0;15372:346:1;41653:49:0;41746:9;;41734:21;;:9;:21;:::i;:::-;41721:9;:34;41713:69;;;;-1:-1:-1;;;41713:69:0;;16098:2:1;41713:69:0;;;16080:21:1;16137:2;16117:18;;;16110:30;-1:-1:-1;;;16156:18:1;;;16149:52;16218:18;;41713:69:0;15896:346:1;40373:238:0;39546:6;;-1:-1:-1;;;;;39546:6:0;17795:10;39693:23;39685:57;;;;-1:-1:-1;;;39685:57:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40476:22:0;::::1;40454:110;;;::::0;-1:-1:-1;;;40454:110:0;;16449:2:1;40454:110:0::1;::::0;::::1;16431:21:1::0;16488:2;16468:18;;;16461:30;16527:34;16507:18;;;16500:62;-1:-1:-1;;;16578:18:1;;;16571:36;16624:19;;40454:110:0::1;16247:402:1::0;40454:110:0::1;40575:28;40594:8;40575:18;:28::i;9294:387::-:0;9617:20;9665:8;;;9294:387::o;34904:172::-;35001:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;35001:29:0;-1:-1:-1;;;;;35001:29:0;;;;;;;;;35042:28;;35001:24;;35042:28;;;;;;;34904:172;;;:::o;33269:1529::-;33366:35;33404:20;33416:7;33404:11;:20::i;:::-;33475:18;;33366:58;;-1:-1:-1;33433:22:0;;-1:-1:-1;;;;;33459:34:0;17795:10;-1:-1:-1;;;;;33459:34:0;;:81;;;-1:-1:-1;17795:10:0;33504:20;33516:7;33504:11;:20::i;:::-;-1:-1:-1;;;;;33504:36:0;;33459:81;:142;;;-1:-1:-1;33568:18:0;;33551:50;;17795:10;30075:186;:::i;33551:50::-;33433:169;;33627:17;33611:101;;;;-1:-1:-1;;;33611:101:0;;16856:2:1;33611:101:0;;;16838:21:1;16895:2;16875:18;;;16868:30;16934:34;16914:18;;;16907:62;-1:-1:-1;;;16985:18:1;;;16978:48;17043:19;;33611:101:0;16654:414:1;33611:101:0;33759:4;-1:-1:-1;;;;;33737:26:0;:13;:18;;;-1:-1:-1;;;;;33737:26:0;;33721:98;;;;-1:-1:-1;;;33721:98:0;;17275:2:1;33721:98:0;;;17257:21:1;17314:2;17294:18;;;17287:30;17353:34;17333:18;;;17326:62;-1:-1:-1;;;17404:18:1;;;17397:36;17450:19;;33721:98:0;17073:402:1;33721:98:0;-1:-1:-1;;;;;33834:16:0;;33826:66;;;;-1:-1:-1;;;33826:66:0;;17682:2:1;33826:66:0;;;17664:21:1;17721:2;17701:18;;;17694:30;17760:34;17740:18;;;17733:62;-1:-1:-1;;;17811:18:1;;;17804:35;17856:19;;33826:66:0;17480:401:1;33826:66:0;34001:49;34018:1;34022:7;34031:13;:18;;;34001:8;:49::i;:::-;-1:-1:-1;;;;;34059:18:0;;;;;;:12;:18;;;;;:31;;34089:1;;34059:18;:31;;34089:1;;-1:-1:-1;;;;;34059:31:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;34059:31:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;34097:16:0;;-1:-1:-1;34097:16:0;;;:12;:16;;;;;:29;;-1:-1:-1;;;34097:16:0;;:29;;-1:-1:-1;;34097:29:0;;:::i;:::-;;;-1:-1:-1;;;;;34097:29:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34156:43:0;;;;;;;;-1:-1:-1;;;;;34156:43:0;;;;;;34182:15;34156:43;;;;;;;;;-1:-1:-1;34133:20:0;;;:11;:20;;;;;;:66;;;;;;;;;-1:-1:-1;;;34133:66:0;-1:-1:-1;;;;;;34133:66:0;;;;;;;;;;;34449:11;34145:7;-1:-1:-1;34449:11:0;:::i;:::-;34512:1;34471:24;;;:11;:24;;;;;:29;34427:33;;-1:-1:-1;;;;;;34471:29:0;34467:236;;34529:20;34537:11;31352:4;31382:12;-1:-1:-1;31372:22:0;31295:105;34529:20;34525:171;;;34589:97;;;;;;;;34616:18;;-1:-1:-1;;;;;34589:97:0;;;;;;34647:28;;;;34589:97;;;;;;;;;;-1:-1:-1;34562:24:0;;;:11;:24;;;;;;;:124;;;;;;;;;-1:-1:-1;;;34562:124:0;-1:-1:-1;;;;;;34562:124:0;;;;;;;;;;;;34525:171;34735:7;34731:2;-1:-1:-1;;;;;34716:27:0;34725:4;-1:-1:-1;;;;;34716:27:0;;;;;;;;;;;34750:42;33359:1439;;;33269:1529;;;:::o;25633:606::-;-1:-1:-1;;;;;;;;;;;;;;;;;25750:16:0;25758:7;31352:4;31382:12;-1:-1:-1;31372:22:0;31295:105;25750:16;25742:71;;;;-1:-1:-1;;;25742:71:0;;18625:2:1;25742:71:0;;;18607:21:1;18664:2;18644:18;;;18637:30;18703:34;18683:18;;;18676:62;-1:-1:-1;;;18754:18:1;;;18747:40;18804:19;;25742:71:0;18423:406:1;25742:71:0;25822:26;25870:12;25859:7;:23;25855:93;;25914:22;25924:12;25914:7;:22;:::i;:::-;:26;;25939:1;25914:26;:::i;:::-;25893:47;;25855:93;25976:7;25956:212;25993:18;25985:4;:26;25956:212;;26030:31;26064:17;;;:11;:17;;;;;;;;;26030:51;;;;;;;;;-1:-1:-1;;;;;26030:51:0;;;;;-1:-1:-1;;;26030:51:0;;;;;;;;;;;;26094:28;26090:71;;26142:9;25633:606;-1:-1:-1;;;;25633:606:0:o;26090:71::-;-1:-1:-1;26013:6:0;;;;:::i;:::-;;;;25956:212;;;-1:-1:-1;26176:57:0;;-1:-1:-1;;;26176:57:0;;19310:2:1;26176:57:0;;;19292:21:1;19349:2;19329:18;;;19322:30;19388:34;19368:18;;;19361:62;-1:-1:-1;;;19439:18:1;;;19432:45;19494:19;;26176:57:0;19108:411:1;40771:191:0;40864:6;;;-1:-1:-1;;;;;40881:17:0;;;-1:-1:-1;;;;;;40881:17:0;;;;;;;40914:40;;40864:6;;;40881:17;40864:6;;40914:40;;40845:16;;40914:40;40834:128;40771:191;:::o;31406:98::-;31471:27;31481:2;31485:8;31471:27;;;;;;;;;;;;:9;:27::i;36619:690::-;36756:4;-1:-1:-1;;;;;36773:13:0;;9617:20;9665:8;36769:535;;36812:72;;-1:-1:-1;;;36812:72:0;;-1:-1:-1;;;;;36812:36:0;;;;;:72;;17795:10;;36863:4;;36869:7;;36878:5;;36812:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36812:72:0;;;;;;;;-1:-1:-1;;36812:72:0;;;;;;;;;;;;:::i;:::-;;;36799:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37043:6;:13;37060:1;37043:18;37039:215;;37076:61;;-1:-1:-1;;;37076:61:0;;;;;;;:::i;37039:215::-;37222:6;37216:13;37207:6;37203:2;37199:15;37192:38;36799:464;-1:-1:-1;;;;;;36934:55:0;-1:-1:-1;;;36934:55:0;;-1:-1:-1;36927:62:0;;36769:535;-1:-1:-1;37292:4:0;36769:535;36619:690;;;;;;:::o;18238:723::-;18294:13;18515:5;18524:1;18515:10;18511:53;;-1:-1:-1;;18542:10:0;;;;;;;;;;;;-1:-1:-1;;;18542:10:0;;;;;18238:723::o;18511:53::-;18589:5;18574:12;18630:78;18637:9;;18630:78;;18663:8;;;;:::i;:::-;;-1:-1:-1;18686:10:0;;-1:-1:-1;18694:2:0;18686:10;;:::i;:::-;;;18630:78;;;18718:19;18750:6;18740:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18740:17:0;;18718:39;;18768:154;18775:10;;18768:154;;18802:11;18812:1;18802:11;;:::i;:::-;;-1:-1:-1;18871:10:0;18879:2;18871:5;:10;:::i;:::-;18858:24;;:2;:24;:::i;:::-;18845:39;;18828:6;18835;18828:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;18828:56:0;;;;;;;;-1:-1:-1;18899:11:0;18908:2;18899:11;;:::i;:::-;;;18768:154;;31843:1194;31948:20;31971:12;-1:-1:-1;;;;;31998:16:0;;31990:62;;;;-1:-1:-1;;;31990:62:0;;20980:2:1;31990:62:0;;;20962:21:1;21019:2;20999:18;;;20992:30;21058:34;21038:18;;;21031:62;-1:-1:-1;;;21109:18:1;;;21102:31;21150:19;;31990:62:0;20778:397:1;31990:62:0;32189:21;32197:12;31352:4;31382:12;-1:-1:-1;31372:22:0;31295:105;32189:21;32188:22;32180:64;;;;-1:-1:-1;;;32180:64:0;;21382:2:1;32180:64:0;;;21364:21:1;21421:2;21401:18;;;21394:30;21460:31;21440:18;;;21433:59;21509:18;;32180:64:0;21180:353:1;32180:64:0;-1:-1:-1;;;;;32356:16:0;;32323:30;32356:16;;;:12;:16;;;;;;;;;32323:49;;;;;;;;;-1:-1:-1;;;;;32323:49:0;;;;;-1:-1:-1;;;32323:49:0;;;;;;;;;;;32398:119;;;;;;;;32418:19;;32323:49;;32398:119;;;32418:39;;32448:8;;32418:39;:::i;:::-;-1:-1:-1;;;;;32398:119:0;;;;;32501:8;32466:11;:24;;;:44;;;;:::i;:::-;-1:-1:-1;;;;;32398:119:0;;;;;;-1:-1:-1;;;;;32379:16:0;;;;;;;:12;:16;;;;;;;;:138;;;;;;;;-1:-1:-1;;;32379:138:0;;;;;;;;;;;;32552:43;;;;;;;;;;;32578:15;32552:43;;;;;;;;32524:25;;;:11;:25;;;;;;:71;;;;;;;;;-1:-1:-1;;;32524:71:0;-1:-1:-1;;;;;;32524:71:0;;;;;;;;;;;;;;;;;;32536:12;;32648:281;32672:8;32668:1;:12;32648:281;;;32701:38;;32726:12;;-1:-1:-1;;;;;32701:38:0;;;32718:1;;32701:38;;32718:1;;32701:38;32766:59;32797:1;32801:2;32805:12;32819:5;32766:22;:59::i;:::-;32748:150;;;;-1:-1:-1;;;32748:150:0;;;;;;;:::i;:::-;32907:14;;;;:::i;:::-;;;;32682:3;;;;;:::i;:::-;;;;32648:281;;;-1:-1:-1;32937:12:0;:27;;;32971:60;30745:311;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;:::-;384:5;150:245;-1:-1:-1;;;150:245:1:o;592:160::-;657:20;;713:13;;706:21;696:32;;686:60;;742:1;739;732:12;686:60;592:160;;;:::o;757:180::-;813:6;866:2;854:9;845:7;841:23;837:32;834:52;;;882:1;879;872:12;834:52;905:26;921:9;905:26;:::i;942:250::-;1027:1;1037:113;1051:6;1048:1;1045:13;1037:113;;;1127:11;;;1121:18;1108:11;;;1101:39;1073:2;1066:10;1037:113;;;-1:-1:-1;;1184:1:1;1166:16;;1159:27;942:250::o;1197:271::-;1239:3;1277:5;1271:12;1304:6;1299:3;1292:19;1320:76;1389:6;1382:4;1377:3;1373:14;1366:4;1359:5;1355:16;1320:76;:::i;:::-;1450:2;1429:15;-1:-1:-1;;1425:29:1;1416:39;;;;1457:4;1412:50;;1197:271;-1:-1:-1;;1197:271:1:o;1473:220::-;1622:2;1611:9;1604:21;1585:4;1642:45;1683:2;1672:9;1668:18;1660:6;1642:45;:::i;1698:180::-;1757:6;1810:2;1798:9;1789:7;1785:23;1781:32;1778:52;;;1826:1;1823;1816:12;1778:52;-1:-1:-1;1849:23:1;;1698:180;-1:-1:-1;1698:180:1:o;2091:173::-;2159:20;;-1:-1:-1;;;;;2208:31:1;;2198:42;;2188:70;;2254:1;2251;2244:12;2269:254;2337:6;2345;2398:2;2386:9;2377:7;2373:23;2369:32;2366:52;;;2414:1;2411;2404:12;2366:52;2437:29;2456:9;2437:29;:::i;:::-;2427:39;2513:2;2498:18;;;;2485:32;;-1:-1:-1;;;2269:254:1:o;2710:328::-;2787:6;2795;2803;2856:2;2844:9;2835:7;2831:23;2827:32;2824:52;;;2872:1;2869;2862:12;2824:52;2895:29;2914:9;2895:29;:::i;:::-;2885:39;;2943:38;2977:2;2966:9;2962:18;2943:38;:::i;:::-;2933:48;;3028:2;3017:9;3013:18;3000:32;2990:42;;2710:328;;;;;:::o;3043:127::-;3104:10;3099:3;3095:20;3092:1;3085:31;3135:4;3132:1;3125:15;3159:4;3156:1;3149:15;3175:632;3240:5;3270:18;3311:2;3303:6;3300:14;3297:40;;;3317:18;;:::i;:::-;3392:2;3386:9;3360:2;3446:15;;-1:-1:-1;;3442:24:1;;;3468:2;3438:33;3434:42;3422:55;;;3492:18;;;3512:22;;;3489:46;3486:72;;;3538:18;;:::i;:::-;3578:10;3574:2;3567:22;3607:6;3598:15;;3637:6;3629;3622:22;3677:3;3668:6;3663:3;3659:16;3656:25;3653:45;;;3694:1;3691;3684:12;3653:45;3744:6;3739:3;3732:4;3724:6;3720:17;3707:44;3799:1;3792:4;3783:6;3775;3771:19;3767:30;3760:41;;;;3175:632;;;;;:::o;3812:451::-;3881:6;3934:2;3922:9;3913:7;3909:23;3905:32;3902:52;;;3950:1;3947;3940:12;3902:52;3990:9;3977:23;4023:18;4015:6;4012:30;4009:50;;;4055:1;4052;4045:12;4009:50;4078:22;;4131:4;4123:13;;4119:27;-1:-1:-1;4109:55:1;;4160:1;4157;4150:12;4109:55;4183:74;4249:7;4244:2;4231:16;4226:2;4222;4218:11;4183:74;:::i;4268:186::-;4327:6;4380:2;4368:9;4359:7;4355:23;4351:32;4348:52;;;4396:1;4393;4386:12;4348:52;4419:29;4438:9;4419:29;:::i;4459:254::-;4524:6;4532;4585:2;4573:9;4564:7;4560:23;4556:32;4553:52;;;4601:1;4598;4591:12;4553:52;4624:29;4643:9;4624:29;:::i;:::-;4614:39;;4672:35;4703:2;4692:9;4688:18;4672:35;:::i;:::-;4662:45;;4459:254;;;;;:::o;4718:667::-;4813:6;4821;4829;4837;4890:3;4878:9;4869:7;4865:23;4861:33;4858:53;;;4907:1;4904;4897:12;4858:53;4930:29;4949:9;4930:29;:::i;:::-;4920:39;;4978:38;5012:2;5001:9;4997:18;4978:38;:::i;:::-;4968:48;;5063:2;5052:9;5048:18;5035:32;5025:42;;5118:2;5107:9;5103:18;5090:32;5145:18;5137:6;5134:30;5131:50;;;5177:1;5174;5167:12;5131:50;5200:22;;5253:4;5245:13;;5241:27;-1:-1:-1;5231:55:1;;5282:1;5279;5272:12;5231:55;5305:74;5371:7;5366:2;5353:16;5348:2;5344;5340:11;5305:74;:::i;:::-;5295:84;;;4718:667;;;;;;;:::o;5390:260::-;5458:6;5466;5519:2;5507:9;5498:7;5494:23;5490:32;5487:52;;;5535:1;5532;5525:12;5487:52;5558:29;5577:9;5558:29;:::i;:::-;5548:39;;5606:38;5640:2;5629:9;5625:18;5606:38;:::i;5655:345::-;5857:2;5839:21;;;5896:2;5876:18;;;5869:30;-1:-1:-1;;;5930:2:1;5915:18;;5908:51;5991:2;5976:18;;5655:345::o;6005:380::-;6084:1;6080:12;;;;6127;;;6148:61;;6202:4;6194:6;6190:17;6180:27;;6148:61;6255:2;6247:6;6244:14;6224:18;6221:38;6218:161;;6301:10;6296:3;6292:20;6289:1;6282:31;6336:4;6333:1;6326:15;6364:4;6361:1;6354:15;6218:161;;6005:380;;;:::o;8036:127::-;8097:10;8092:3;8088:20;8085:1;8078:31;8128:4;8125:1;8118:15;8152:4;8149:1;8142:15;8168:135;8207:3;8228:17;;;8225:43;;8248:18;;:::i;:::-;-1:-1:-1;8295:1:1;8284:13;;8168:135::o;9253:545::-;9355:2;9350:3;9347:11;9344:448;;;9391:1;9416:5;9412:2;9405:17;9461:4;9457:2;9447:19;9531:2;9519:10;9515:19;9512:1;9508:27;9502:4;9498:38;9567:4;9555:10;9552:20;9549:47;;;-1:-1:-1;9590:4:1;9549:47;9645:2;9640:3;9636:12;9633:1;9629:20;9623:4;9619:31;9609:41;;9700:82;9718:2;9711:5;9708:13;9700:82;;;9763:17;;;9744:1;9733:13;9700:82;;9974:1352;10100:3;10094:10;10127:18;10119:6;10116:30;10113:56;;;10149:18;;:::i;:::-;10178:97;10268:6;10228:38;10260:4;10254:11;10228:38;:::i;:::-;10222:4;10178:97;:::i;:::-;10330:4;;10394:2;10383:14;;10411:1;10406:663;;;;11113:1;11130:6;11127:89;;;-1:-1:-1;11182:19:1;;;11176:26;11127:89;-1:-1:-1;;9931:1:1;9927:11;;;9923:24;9919:29;9909:40;9955:1;9951:11;;;9906:57;11229:81;;10376:944;;10406:663;9200:1;9193:14;;;9237:4;9224:18;;-1:-1:-1;;10442:20:1;;;10560:236;10574:7;10571:1;10568:14;10560:236;;;10663:19;;;10657:26;10642:42;;10755:27;;;;10723:1;10711:14;;;;10590:19;;10560:236;;;10564:3;10824:6;10815:7;10812:19;10809:201;;;10885:19;;;10879:26;-1:-1:-1;;10968:1:1;10964:14;;;10980:3;10960:24;10956:37;10952:42;10937:58;10922:74;;10809:201;-1:-1:-1;;;;;11056:1:1;11040:14;;;11036:22;11023:36;;-1:-1:-1;9974:1352:1:o;13064:415::-;13266:2;13248:21;;;13305:2;13285:18;;;13278:30;13344:34;13339:2;13324:18;;13317:62;-1:-1:-1;;;13410:2:1;13395:18;;13388:49;13469:3;13454:19;;13064:415::o;13837:722::-;13887:3;13928:5;13922:12;13957:36;13983:9;13957:36;:::i;:::-;14012:1;14029:18;;;14056:133;;;;14203:1;14198:355;;;;14022:531;;14056:133;-1:-1:-1;;14089:24:1;;14077:37;;14162:14;;14155:22;14143:35;;14134:45;;;-1:-1:-1;14056:133:1;;14198:355;14229:5;14226:1;14219:16;14258:4;14303:2;14300:1;14290:16;14328:1;14342:165;14356:6;14353:1;14350:13;14342:165;;;14434:14;;14421:11;;;14414:35;14477:16;;;;14371:10;;14342:165;;;14346:3;;;14536:6;14531:3;14527:16;14520:23;;14022:531;;;;;13837:722;;;;:::o;14564:469::-;14785:3;14813:38;14847:3;14839:6;14813:38;:::i;:::-;14880:6;14874:13;14896:65;14954:6;14950:2;14943:4;14935:6;14931:17;14896:65;:::i;:::-;14977:50;15019:6;15015:2;15011:15;15003:6;14977:50;:::i;:::-;14970:57;14564:469;-1:-1:-1;;;;;;;14564:469:1:o;15723:168::-;15763:7;15829:1;15825;15821:6;15817:14;15814:1;15811:21;15806:1;15799:9;15792:17;15788:45;15785:71;;;15836:18;;:::i;:::-;-1:-1:-1;15876:9:1;;15723:168::o;17886:200::-;-1:-1:-1;;;;;18022:10:1;;;18010;;;18006:27;;18045:12;;;18042:38;;;18060:18;;:::i;:::-;18042:38;17886:200;;;;:::o;18091:197::-;-1:-1:-1;;;;;18213:10:1;;;18225;;;18209:27;;18248:11;;;18245:37;;;18262:18;;:::i;18293:125::-;18358:9;;;18379:10;;;18376:36;;;18392:18;;:::i;18834:128::-;18901:9;;;18922:11;;;18919:37;;;18936:18;;:::i;18967:136::-;19006:3;19034:5;19024:39;;19043:18;;:::i;:::-;-1:-1:-1;;;19079:18:1;;18967:136::o;19524:489::-;-1:-1:-1;;;;;19793:15:1;;;19775:34;;19845:15;;19840:2;19825:18;;19818:43;19892:2;19877:18;;19870:34;;;19940:3;19935:2;19920:18;;19913:31;;;19718:4;;19961:46;;19987:19;;19979:6;19961:46;:::i;:::-;19953:54;19524:489;-1:-1:-1;;;;;;19524:489:1:o;20018:249::-;20087:6;20140:2;20128:9;20119:7;20115:23;20111:32;20108:52;;;20156:1;20153;20146:12;20108:52;20188:9;20182:16;20207:30;20231:5;20207:30;:::i;20272:127::-;20333:10;20328:3;20324:20;20321:1;20314:31;20364:4;20361:1;20354:15;20388:4;20385:1;20378:15;20404:120;20444:1;20470;20460:35;;20475:18;;:::i;:::-;-1:-1:-1;20509:9:1;;20404:120::o;20529:112::-;20561:1;20587;20577:35;;20592:18;;:::i;:::-;-1:-1:-1;20626:9:1;;20529:112::o;20646:127::-;20707:10;20702:3;20698:20;20695:1;20688:31;20738:4;20735:1;20728:15;20762:4;20759:1;20752:15
Swarm Source
ipfs://8edba08445a6de87b6c6d7d4b666b2c58f4ed7cf777935fcc2a35badef79efed
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.