ERC-721
Overview
Max Total Supply
2,127 Dick MFers
Holders
312
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
3 Dick MFersLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
DickMFers
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-27 */ //SPDX-License-Identifier: UNLICENSED // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/Strings.sol // 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); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // 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(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts 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); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // 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); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts 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; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } pragma solidity >=0.7.0 <0.9.0; contract DickMFers is ERC721, Ownable { using Strings for uint256; using Counters for Counters.Counter; Counters.Counter private supply; string public uriPrefix = ""; string public uriSuffix = ".json"; string public hiddenMetadataUri; uint256 public cost = 0.01 ether; uint256 public wlcost = 0.01 ether; uint256 public maxSupply = 10000; uint256 public _freeSupply = 1000; uint256 public _freeMintLimit = 20; uint256 public maxMintAmountPerTx = 20; uint256 public maxMintPerUser = 100; bool public whiteListActive = false; mapping(address => bool) private _whitelist; uint256 private startTime; uint256 private _WLstartTime; bool public paused = true; bool public revealed = false; constructor() ERC721("Dick MFers", "Dick MFers") { setHiddenMetadataUri("ipfs://looool/hidden.json"); } modifier mintCompliance(uint256 _mintAmount) { require(_mintAmount > 0 && _mintAmount <= maxMintAmountPerTx, "Invalid mint amount!"); require(supply.current() + _mintAmount <= maxSupply, "Max supply exceeded!"); _; } function setStartTime(uint256 _startTime) external onlyOwner { startTime = _startTime; } function setWLStartTime(uint256 WLstartTime) external onlyOwner { _WLstartTime = WLstartTime; } function totalSupply() public view returns (uint256) { return supply.current(); } function setwhiteListActive() external onlyOwner { whiteListActive = true; } function setwhiteListInActive() external onlyOwner { whiteListActive = false; } function setMaxMintPerUser(uint256 _maxMintPerUser) external onlyOwner { maxMintPerUser = _maxMintPerUser; } function addSingleWhiteList(address _addr) public onlyOwner { _whitelist[_addr] = true; } function addMultipleToWhiteList(address[] memory addresses) external onlyOwner { for (uint256 i = 0; i < addresses.length; i++) { require(addresses[i] != address(0), "Can't add the null address"); _whitelist[addresses[i]] = true; } } function isInWhiteList(address _addr) private view returns (bool) { return _whitelist[_addr]; } function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) { require(!paused, "The contract is paused!"); require(msg.value == cost * _mintAmount, "Insufficient funds!"); require(block.timestamp >= startTime,"The sale has not started yet."); require(balanceOf(msg.sender)+_mintAmount <= maxMintPerUser, "Please Lower Amount"); _mintLoop(msg.sender, _mintAmount); } function setfreemintlimit (uint256 limit) public onlyOwner { _freeMintLimit = limit; } function setfreeSupply (uint256 freeamt) public onlyOwner { _freeSupply = freeamt; } function freemint( uint256 _mintAmount) public payable { require(owner() == msg.sender || !paused, "Mint disabled"); require(totalSupply() + _mintAmount <= _freeSupply, "Exceed max free supply"); require(_mintAmount <= _freeMintLimit, "Cant mint more than mint limit"); require(_mintAmount > 0, "Must mint at least 1 token"); require(balanceOf(msg.sender)+_mintAmount <= maxMintPerUser, "Please Lower Amount"); _mintLoop(msg.sender, _mintAmount); } function WhiteListMint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) { require(!whiteListActive, "The contract is paused!"); require(msg.value >= wlcost * _mintAmount, "Insufficient funds!"); require(block.timestamp >= _WLstartTime,"The sale has not started yet."); require(_whitelist[msg.sender], "You are not on the WhiteList"); require(balanceOf(msg.sender)+_mintAmount <= maxMintPerUser, "Please Lower Amount"); _mintLoop(msg.sender, _mintAmount); } function mintForAddress(uint256 _mintAmount, address _receiver) public mintCompliance(_mintAmount) onlyOwner { _mintLoop(_receiver, _mintAmount); } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount); uint256 currentTokenId = 1; uint256 ownedTokenIndex = 0; while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) { address currentTokenOwner = ownerOf(currentTokenId); if (currentTokenOwner == _owner) { ownedTokenIds[ownedTokenIndex] = currentTokenId; ownedTokenIndex++; } currentTokenId++; } return ownedTokenIds; } function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require( _exists(_tokenId), "ERC721Metadata: URI query for nonexistent token" ); if (revealed == false) { return hiddenMetadataUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix)) : ""; } function setRevealed(bool _state) public onlyOwner { revealed = _state; } function setCost(uint256 _cost) public onlyOwner { cost = _cost; } function setWLCost(uint256 _wlcost) public onlyOwner { wlcost = _wlcost; } function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx) public onlyOwner { maxMintAmountPerTx = _maxMintAmountPerTx; } function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner { hiddenMetadataUri = _hiddenMetadataUri; } function setUriPrefix(string memory _uriPrefix) public onlyOwner { uriPrefix = _uriPrefix; } function setUriSuffix(string memory _uriSuffix) public onlyOwner { uriSuffix = _uriSuffix; } function setPaused(bool _state) public onlyOwner { paused = _state; } function withdraw() public onlyOwner { (bool project, ) = payable(owner()).call{value: address(this).balance}(""); require(project); } function _mintLoop(address _receiver, uint256 _mintAmount) internal { for (uint256 i = 0; i < _mintAmount; i++) { supply.increment(); _safeMint(_receiver, supply.current()); } } function _baseURI() internal view virtual override returns (string memory) { return uriPrefix; } }
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":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"WhiteListMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"_freeMintLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_freeSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addMultipleToWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"addSingleWhiteList","outputs":[],"stateMutability":"nonpayable","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":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"freemint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintPerUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintPerUser","type":"uint256"}],"name":"setMaxMintPerUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startTime","type":"uint256"}],"name":"setStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_wlcost","type":"uint256"}],"name":"setWLCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"WLstartTime","type":"uint256"}],"name":"setWLStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"freeamt","type":"uint256"}],"name":"setfreeSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"setfreemintlimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setwhiteListActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setwhiteListInActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whiteListActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wlcost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a06040819052600060808190526200001b9160089162000227565b5060408051808201909152600580825264173539b7b760d91b60209092019182526200004a9160099162000227565b50662386f26fc10000600b819055600c55612710600d556103e8600e556014600f81905560105560646011556012805460ff191690556016805461ffff191660011790553480156200009b57600080fd5b50604080518082018252600a808252694469636b204d4665727360b01b602080840182815285518087019096529285528401528151919291620000e19160009162000227565b508051620000f790600190602084019062000227565b505050620001146200010e6200015960201b60201c565b6200015d565b60408051808201909152601981527f697066733a2f2f6c6f6f6f6f6c2f68696464656e2e6a736f6e0000000000000060208201526200015390620001af565b6200030a565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6006546001600160a01b031633146200020e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b80516200022390600a90602084019062000227565b5050565b8280546200023590620002cd565b90600052602060002090601f016020900481019282620002595760008555620002a4565b82601f106200027457805160ff1916838001178555620002a4565b82800160010185558215620002a4579182015b82811115620002a457825182559160200191906001019062000287565b50620002b2929150620002b6565b5090565b5b80821115620002b25760008155600101620002b7565b600181811c90821680620002e257607f821691505b602082108114156200030457634e487b7160e01b600052602260045260246000fd5b50919050565b612d23806200031a6000396000f3fe60806040526004361061031a5760003560e01c806362b99ad4116101ab578063a22cb465116100f7578063d304c4bc11610095578063e985e9c51161006f578063e985e9c5146108b7578063ef368a3b14610900578063efbd73f414610915578063f2fde38b1461093557600080fd5b8063d304c4bc1461086b578063d5abeb0114610881578063e0a808531461089757600080fd5b8063b88d4fde116100d1578063b88d4fde146107f8578063c1c880e314610818578063c87b56dd1461082b578063d1d192131461084b57600080fd5b8063a22cb465146107a3578063a45ba8e7146107c3578063b071401b146107d857600080fd5b80637ec4a659116101645780638da5cb5b1161013e5780638da5cb5b1461074757806394354fd01461076557806395d89b411461077b578063a0712d681461079057600080fd5b80637ec4a659146106e757806383ccaef7146107075780638a710eb01461072757600080fd5b806362b99ad4146106515780636352211e1461066657806367c77446146106865780636c2d3c4f1461069c57806370a08231146106b2578063715018a6146106d257600080fd5b80632e4355cd1161026a57806342842e0e116102235780634fdd43cb116101fd5780634fdd43cb146105e357806351830227146106035780635503a0e8146106225780635c975abb1461063757600080fd5b806342842e0e14610576578063438b63001461059657806344a0d68a146105c357600080fd5b80632e4355cd146104dc57806333241b8d146104f65780633a7809381461050b5780633ccfd60b146105215780633e0a322d1461053657806341de0bc41461055657600080fd5b806316ba10e0116102d75780631a86854f116102b15780631a86854f1461045c57806323b872dd1461047c578063287930841461049c5780632d12cc74146104bc57600080fd5b806316ba10e01461040757806316c38b3c1461042757806318160ddd1461044757600080fd5b806301ffc9a71461031f57806306fdde0314610354578063081812fc14610376578063095ea7b3146103ae5780630fbe4fe2146103d057806313faede6146103e3575b600080fd5b34801561032b57600080fd5b5061033f61033a3660046127df565b610955565b60405190151581526020015b60405180910390f35b34801561036057600080fd5b506103696109a7565b60405161034b9190612a0f565b34801561038257600080fd5b50610396610391366004612862565b610a39565b6040516001600160a01b03909116815260200161034b565b3480156103ba57600080fd5b506103ce6103c93660046126e6565b610ad3565b005b6103ce6103de366004612862565b610be9565b3480156103ef57600080fd5b506103f9600b5481565b60405190815260200161034b565b34801561041357600080fd5b506103ce610422366004612819565b610db7565b34801561043357600080fd5b506103ce6104423660046127c4565b610df8565b34801561045357600080fd5b506103f9610e35565b34801561046857600080fd5b506103ce610477366004612862565b610e45565b34801561048857600080fd5b506103ce610497366004612604565b610e74565b3480156104a857600080fd5b506103ce6104b7366004612710565b610ea5565b3480156104c857600080fd5b506103ce6104d73660046125b6565b610fb3565b3480156104e857600080fd5b5060125461033f9060ff1681565b34801561050257600080fd5b506103ce611001565b34801561051757600080fd5b506103f9600e5481565b34801561052d57600080fd5b506103ce611037565b34801561054257600080fd5b506103ce610551366004612862565b6110d2565b34801561056257600080fd5b506103ce610571366004612862565b611101565b34801561058257600080fd5b506103ce610591366004612604565b611130565b3480156105a257600080fd5b506105b66105b13660046125b6565b61114b565b60405161034b91906129cb565b3480156105cf57600080fd5b506103ce6105de366004612862565b61122c565b3480156105ef57600080fd5b506103ce6105fe366004612819565b61125b565b34801561060f57600080fd5b5060165461033f90610100900460ff1681565b34801561062e57600080fd5b50610369611298565b34801561064357600080fd5b5060165461033f9060ff1681565b34801561065d57600080fd5b50610369611326565b34801561067257600080fd5b50610396610681366004612862565b611333565b34801561069257600080fd5b506103f9600f5481565b3480156106a857600080fd5b506103f9600c5481565b3480156106be57600080fd5b506103f96106cd3660046125b6565b6113aa565b3480156106de57600080fd5b506103ce611431565b3480156106f357600080fd5b506103ce610702366004612819565b611467565b34801561071357600080fd5b506103ce610722366004612862565b6114a4565b34801561073357600080fd5b506103ce610742366004612862565b6114d3565b34801561075357600080fd5b506006546001600160a01b0316610396565b34801561077157600080fd5b506103f960105481565b34801561078757600080fd5b50610369611502565b6103ce61079e366004612862565b611511565b3480156107af57600080fd5b506103ce6107be3660046126bc565b6116cb565b3480156107cf57600080fd5b506103696116d6565b3480156107e457600080fd5b506103ce6107f3366004612862565b6116e3565b34801561080457600080fd5b506103ce610813366004612640565b611712565b6103ce610826366004612862565b61174a565b34801561083757600080fd5b50610369610846366004612862565b6118ff565b34801561085757600080fd5b506103ce610866366004612862565b611a7e565b34801561087757600080fd5b506103f960115481565b34801561088d57600080fd5b506103f9600d5481565b3480156108a357600080fd5b506103ce6108b23660046127c4565b611aad565b3480156108c357600080fd5b5061033f6108d23660046125d1565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561090c57600080fd5b506103ce611af1565b34801561092157600080fd5b506103ce61093036600461287b565b611b2a565b34801561094157600080fd5b506103ce6109503660046125b6565b611bc2565b60006001600160e01b031982166380ac58cd60e01b148061098657506001600160e01b03198216635b5e139f60e01b145b806109a157506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546109b690612c15565b80601f01602080910402602001604051908101604052809291908181526020018280546109e290612c15565b8015610a2f5780601f10610a0457610100808354040283529160200191610a2f565b820191906000526020600020905b815481529060010190602001808311610a1257829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610ab75760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6000610ade82611333565b9050806001600160a01b0316836001600160a01b03161415610b4c5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610aae565b336001600160a01b0382161480610b685750610b6881336108d2565b610bda5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610aae565b610be48383611c5a565b505050565b33610bfc6006546001600160a01b031690565b6001600160a01b03161480610c14575060165460ff16155b610c505760405162461bcd60e51b815260206004820152600d60248201526c135a5b9d08191a5cd8589b1959609a1b6044820152606401610aae565b600e5481610c5c610e35565b610c669190612b87565b1115610cad5760405162461bcd60e51b8152602060048201526016602482015275457863656564206d6178206672656520737570706c7960501b6044820152606401610aae565b600f54811115610cff5760405162461bcd60e51b815260206004820152601e60248201527f43616e74206d696e74206d6f7265207468616e206d696e74206c696d697400006044820152606401610aae565b60008111610d4f5760405162461bcd60e51b815260206004820152601a60248201527f4d757374206d696e74206174206c65617374203120746f6b656e0000000000006044820152606401610aae565b60115481610d5c336113aa565b610d669190612b87565b1115610daa5760405162461bcd60e51b8152602060048201526013602482015272141b19585cd948131bddd95c88105b5bdd5b9d606a1b6044820152606401610aae565b610db43382611cc8565b50565b6006546001600160a01b03163314610de15760405162461bcd60e51b8152600401610aae90612aa2565b8051610df4906009906020840190612499565b5050565b6006546001600160a01b03163314610e225760405162461bcd60e51b8152600401610aae90612aa2565b6016805460ff1916911515919091179055565b6000610e4060075490565b905090565b6006546001600160a01b03163314610e6f5760405162461bcd60e51b8152600401610aae90612aa2565b600e55565b610e7e3382611d05565b610e9a5760405162461bcd60e51b8152600401610aae90612b05565b610be4838383611dfc565b6006546001600160a01b03163314610ecf5760405162461bcd60e51b8152600401610aae90612aa2565b60005b8151811015610df45760006001600160a01b0316828281518110610ef857610ef8612cab565b60200260200101516001600160a01b03161415610f575760405162461bcd60e51b815260206004820152601a60248201527f43616e27742061646420746865206e756c6c20616464726573730000000000006044820152606401610aae565b600160136000848481518110610f6f57610f6f612cab565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610fab81612c50565b915050610ed2565b6006546001600160a01b03163314610fdd5760405162461bcd60e51b8152600401610aae90612aa2565b6001600160a01b03166000908152601360205260409020805460ff19166001179055565b6006546001600160a01b0316331461102b5760405162461bcd60e51b8152600401610aae90612aa2565b6012805460ff19169055565b6006546001600160a01b031633146110615760405162461bcd60e51b8152600401610aae90612aa2565b60006110756006546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d80600081146110bf576040519150601f19603f3d011682016040523d82523d6000602084013e6110c4565b606091505b5050905080610db457600080fd5b6006546001600160a01b031633146110fc5760405162461bcd60e51b8152600401610aae90612aa2565b601455565b6006546001600160a01b0316331461112b5760405162461bcd60e51b8152600401610aae90612aa2565b600f55565b610be483838360405180602001604052806000815250611712565b60606000611158836113aa565b905060008167ffffffffffffffff81111561117557611175612cc1565b60405190808252806020026020018201604052801561119e578160200160208202803683370190505b509050600160005b83811080156111b75750600d548211155b156112225760006111c783611333565b9050866001600160a01b0316816001600160a01b0316141561120f57828483815181106111f6576111f6612cab565b60209081029190910101528161120b81612c50565b9250505b8261121981612c50565b935050506111a6565b5090949350505050565b6006546001600160a01b031633146112565760405162461bcd60e51b8152600401610aae90612aa2565b600b55565b6006546001600160a01b031633146112855760405162461bcd60e51b8152600401610aae90612aa2565b8051610df490600a906020840190612499565b600980546112a590612c15565b80601f01602080910402602001604051908101604052809291908181526020018280546112d190612c15565b801561131e5780601f106112f35761010080835404028352916020019161131e565b820191906000526020600020905b81548152906001019060200180831161130157829003601f168201915b505050505081565b600880546112a590612c15565b6000818152600260205260408120546001600160a01b0316806109a15760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610aae565b60006001600160a01b0382166114155760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610aae565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b0316331461145b5760405162461bcd60e51b8152600401610aae90612aa2565b6114656000611f9c565b565b6006546001600160a01b031633146114915760405162461bcd60e51b8152600401610aae90612aa2565b8051610df4906008906020840190612499565b6006546001600160a01b031633146114ce5760405162461bcd60e51b8152600401610aae90612aa2565b601155565b6006546001600160a01b031633146114fd5760405162461bcd60e51b8152600401610aae90612aa2565b601555565b6060600180546109b690612c15565b8060008111801561152457506010548111155b6115405760405162461bcd60e51b8152600401610aae90612a74565b600d548161154d60075490565b6115579190612b87565b11156115755760405162461bcd60e51b8152600401610aae90612ad7565b60165460ff16156115c25760405162461bcd60e51b815260206004820152601760248201527654686520636f6e7472616374206973207061757365642160481b6044820152606401610aae565b81600b546115d09190612bb3565b34146116145760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b6044820152606401610aae565b6014544210156116665760405162461bcd60e51b815260206004820152601d60248201527f5468652073616c6520686173206e6f742073746172746564207965742e0000006044820152606401610aae565b60115482611673336113aa565b61167d9190612b87565b11156116c15760405162461bcd60e51b8152602060048201526013602482015272141b19585cd948131bddd95c88105b5bdd5b9d606a1b6044820152606401610aae565b610df43383611cc8565b610df4338383611fee565b600a80546112a590612c15565b6006546001600160a01b0316331461170d5760405162461bcd60e51b8152600401610aae90612aa2565b601055565b61171c3383611d05565b6117385760405162461bcd60e51b8152600401610aae90612b05565b611744848484846120bd565b50505050565b8060008111801561175d57506010548111155b6117795760405162461bcd60e51b8152600401610aae90612a74565b600d548161178660075490565b6117909190612b87565b11156117ae5760405162461bcd60e51b8152600401610aae90612ad7565b60125460ff16156117fb5760405162461bcd60e51b815260206004820152601760248201527654686520636f6e7472616374206973207061757365642160481b6044820152606401610aae565b81600c546118099190612bb3565b34101561184e5760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b6044820152606401610aae565b6015544210156118a05760405162461bcd60e51b815260206004820152601d60248201527f5468652073616c6520686173206e6f742073746172746564207965742e0000006044820152606401610aae565b3360009081526013602052604090205460ff166116665760405162461bcd60e51b815260206004820152601d60248201527f596f7520617265206e6f74206f6e20746865202057686974654c6973740000006044820152606401610aae565b6000818152600260205260409020546060906001600160a01b031661197e5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610aae565b601654610100900460ff16611a1f57600a805461199a90612c15565b80601f01602080910402602001604051908101604052809291908181526020018280546119c690612c15565b8015611a135780601f106119e857610100808354040283529160200191611a13565b820191906000526020600020905b8154815290600101906020018083116119f657829003601f168201915b50505050509050919050565b6000611a296120f0565b90506000815111611a495760405180602001604052806000815250611a77565b80611a53846120ff565b6009604051602001611a67939291906128ca565b6040516020818303038152906040525b9392505050565b6006546001600160a01b03163314611aa85760405162461bcd60e51b8152600401610aae90612aa2565b600c55565b6006546001600160a01b03163314611ad75760405162461bcd60e51b8152600401610aae90612aa2565b601680549115156101000261ff0019909216919091179055565b6006546001600160a01b03163314611b1b5760405162461bcd60e51b8152600401610aae90612aa2565b6012805460ff19166001179055565b81600081118015611b3d57506010548111155b611b595760405162461bcd60e51b8152600401610aae90612a74565b600d5481611b6660075490565b611b709190612b87565b1115611b8e5760405162461bcd60e51b8152600401610aae90612ad7565b6006546001600160a01b03163314611bb85760405162461bcd60e51b8152600401610aae90612aa2565b610be48284611cc8565b6006546001600160a01b03163314611bec5760405162461bcd60e51b8152600401610aae90612aa2565b6001600160a01b038116611c515760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aae565b610db481611f9c565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611c8f82611333565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60005b81811015610be457611ce1600780546001019055565b611cf383611cee60075490565b6121fd565b80611cfd81612c50565b915050611ccb565b6000818152600260205260408120546001600160a01b0316611d7e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610aae565b6000611d8983611333565b9050806001600160a01b0316846001600160a01b03161480611dc45750836001600160a01b0316611db984610a39565b6001600160a01b0316145b80611df457506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611e0f82611333565b6001600160a01b031614611e775760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610aae565b6001600160a01b038216611ed95760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610aae565b611ee4600082611c5a565b6001600160a01b0383166000908152600360205260408120805460019290611f0d908490612bd2565b90915550506001600160a01b0382166000908152600360205260408120805460019290611f3b908490612b87565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156120505760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610aae565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6120c8848484611dfc565b6120d484848484612217565b6117445760405162461bcd60e51b8152600401610aae90612a22565b6060600880546109b690612c15565b6060816121235750506040805180820190915260018152600360fc1b602082015290565b8160005b811561214d578061213781612c50565b91506121469050600a83612b9f565b9150612127565b60008167ffffffffffffffff81111561216857612168612cc1565b6040519080825280601f01601f191660200182016040528015612192576020820181803683370190505b5090505b8415611df4576121a7600183612bd2565b91506121b4600a86612c6b565b6121bf906030612b87565b60f81b8183815181106121d4576121d4612cab565b60200101906001600160f81b031916908160001a9053506121f6600a86612b9f565b9450612196565b610df4828260405180602001604052806000815250612324565b60006001600160a01b0384163b1561231957604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061225b90339089908890889060040161298e565b602060405180830381600087803b15801561227557600080fd5b505af19250505080156122a5575060408051601f3d908101601f191682019092526122a2918101906127fc565b60015b6122ff573d8080156122d3576040519150601f19603f3d011682016040523d82523d6000602084013e6122d8565b606091505b5080516122f75760405162461bcd60e51b8152600401610aae90612a22565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611df4565b506001949350505050565b61232e8383612357565b61233b6000848484612217565b610be45760405162461bcd60e51b8152600401610aae90612a22565b6001600160a01b0382166123ad5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610aae565b6000818152600260205260409020546001600160a01b0316156124125760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610aae565b6001600160a01b038216600090815260036020526040812080546001929061243b908490612b87565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546124a590612c15565b90600052602060002090601f0160209004810192826124c7576000855561250d565b82601f106124e057805160ff191683800117855561250d565b8280016001018555821561250d579182015b8281111561250d5782518255916020019190600101906124f2565b5061251992915061251d565b5090565b5b80821115612519576000815560010161251e565b600067ffffffffffffffff83111561254c5761254c612cc1565b61255f601f8401601f1916602001612b56565b905082815283838301111561257357600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b03811681146125a157600080fd5b919050565b803580151581146125a157600080fd5b6000602082840312156125c857600080fd5b611a778261258a565b600080604083850312156125e457600080fd5b6125ed8361258a565b91506125fb6020840161258a565b90509250929050565b60008060006060848603121561261957600080fd5b6126228461258a565b92506126306020850161258a565b9150604084013590509250925092565b6000806000806080858703121561265657600080fd5b61265f8561258a565b935061266d6020860161258a565b925060408501359150606085013567ffffffffffffffff81111561269057600080fd5b8501601f810187136126a157600080fd5b6126b087823560208401612532565b91505092959194509250565b600080604083850312156126cf57600080fd5b6126d88361258a565b91506125fb602084016125a6565b600080604083850312156126f957600080fd5b6127028361258a565b946020939093013593505050565b6000602080838503121561272357600080fd5b823567ffffffffffffffff8082111561273b57600080fd5b818501915085601f83011261274f57600080fd5b81358181111561276157612761612cc1565b8060051b9150612772848301612b56565b8181528481019084860184860187018a101561278d57600080fd5b600095505b838610156127b7576127a38161258a565b835260019590950194918601918601612792565b5098975050505050505050565b6000602082840312156127d657600080fd5b611a77826125a6565b6000602082840312156127f157600080fd5b8135611a7781612cd7565b60006020828403121561280e57600080fd5b8151611a7781612cd7565b60006020828403121561282b57600080fd5b813567ffffffffffffffff81111561284257600080fd5b8201601f8101841361285357600080fd5b611df484823560208401612532565b60006020828403121561287457600080fd5b5035919050565b6000806040838503121561288e57600080fd5b823591506125fb6020840161258a565b600081518084526128b6816020860160208601612be9565b601f01601f19169290920160200192915050565b6000845160206128dd8285838a01612be9565b8551918401916128f08184848a01612be9565b8554920191600090600181811c908083168061290d57607f831692505b85831081141561292b57634e487b7160e01b85526022600452602485fd5b80801561293f57600181146129505761297d565b60ff1985168852838801955061297d565b60008b81526020902060005b858110156129755781548a82015290840190880161295c565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906129c19083018461289e565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612a03578351835292840192918401916001016129e7565b50909695505050505050565b602081526000611a77602083018461289e565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b602080825260149082015273496e76616c6964206d696e7420616d6f756e742160601b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601490820152734d617820737570706c792065786365656465642160601b604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff81118282101715612b7f57612b7f612cc1565b604052919050565b60008219821115612b9a57612b9a612c7f565b500190565b600082612bae57612bae612c95565b500490565b6000816000190483118215151615612bcd57612bcd612c7f565b500290565b600082821015612be457612be4612c7f565b500390565b60005b83811015612c04578181015183820152602001612bec565b838111156117445750506000910152565b600181811c90821680612c2957607f821691505b60208210811415612c4a57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612c6457612c64612c7f565b5060010190565b600082612c7a57612c7a612c95565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610db457600080fdfea2646970667358221220e2b962834f3f0abe39385851161eba80cbb26248548b7de34591312ca51de9c664736f6c63430008070033
Deployed Bytecode
0x60806040526004361061031a5760003560e01c806362b99ad4116101ab578063a22cb465116100f7578063d304c4bc11610095578063e985e9c51161006f578063e985e9c5146108b7578063ef368a3b14610900578063efbd73f414610915578063f2fde38b1461093557600080fd5b8063d304c4bc1461086b578063d5abeb0114610881578063e0a808531461089757600080fd5b8063b88d4fde116100d1578063b88d4fde146107f8578063c1c880e314610818578063c87b56dd1461082b578063d1d192131461084b57600080fd5b8063a22cb465146107a3578063a45ba8e7146107c3578063b071401b146107d857600080fd5b80637ec4a659116101645780638da5cb5b1161013e5780638da5cb5b1461074757806394354fd01461076557806395d89b411461077b578063a0712d681461079057600080fd5b80637ec4a659146106e757806383ccaef7146107075780638a710eb01461072757600080fd5b806362b99ad4146106515780636352211e1461066657806367c77446146106865780636c2d3c4f1461069c57806370a08231146106b2578063715018a6146106d257600080fd5b80632e4355cd1161026a57806342842e0e116102235780634fdd43cb116101fd5780634fdd43cb146105e357806351830227146106035780635503a0e8146106225780635c975abb1461063757600080fd5b806342842e0e14610576578063438b63001461059657806344a0d68a146105c357600080fd5b80632e4355cd146104dc57806333241b8d146104f65780633a7809381461050b5780633ccfd60b146105215780633e0a322d1461053657806341de0bc41461055657600080fd5b806316ba10e0116102d75780631a86854f116102b15780631a86854f1461045c57806323b872dd1461047c578063287930841461049c5780632d12cc74146104bc57600080fd5b806316ba10e01461040757806316c38b3c1461042757806318160ddd1461044757600080fd5b806301ffc9a71461031f57806306fdde0314610354578063081812fc14610376578063095ea7b3146103ae5780630fbe4fe2146103d057806313faede6146103e3575b600080fd5b34801561032b57600080fd5b5061033f61033a3660046127df565b610955565b60405190151581526020015b60405180910390f35b34801561036057600080fd5b506103696109a7565b60405161034b9190612a0f565b34801561038257600080fd5b50610396610391366004612862565b610a39565b6040516001600160a01b03909116815260200161034b565b3480156103ba57600080fd5b506103ce6103c93660046126e6565b610ad3565b005b6103ce6103de366004612862565b610be9565b3480156103ef57600080fd5b506103f9600b5481565b60405190815260200161034b565b34801561041357600080fd5b506103ce610422366004612819565b610db7565b34801561043357600080fd5b506103ce6104423660046127c4565b610df8565b34801561045357600080fd5b506103f9610e35565b34801561046857600080fd5b506103ce610477366004612862565b610e45565b34801561048857600080fd5b506103ce610497366004612604565b610e74565b3480156104a857600080fd5b506103ce6104b7366004612710565b610ea5565b3480156104c857600080fd5b506103ce6104d73660046125b6565b610fb3565b3480156104e857600080fd5b5060125461033f9060ff1681565b34801561050257600080fd5b506103ce611001565b34801561051757600080fd5b506103f9600e5481565b34801561052d57600080fd5b506103ce611037565b34801561054257600080fd5b506103ce610551366004612862565b6110d2565b34801561056257600080fd5b506103ce610571366004612862565b611101565b34801561058257600080fd5b506103ce610591366004612604565b611130565b3480156105a257600080fd5b506105b66105b13660046125b6565b61114b565b60405161034b91906129cb565b3480156105cf57600080fd5b506103ce6105de366004612862565b61122c565b3480156105ef57600080fd5b506103ce6105fe366004612819565b61125b565b34801561060f57600080fd5b5060165461033f90610100900460ff1681565b34801561062e57600080fd5b50610369611298565b34801561064357600080fd5b5060165461033f9060ff1681565b34801561065d57600080fd5b50610369611326565b34801561067257600080fd5b50610396610681366004612862565b611333565b34801561069257600080fd5b506103f9600f5481565b3480156106a857600080fd5b506103f9600c5481565b3480156106be57600080fd5b506103f96106cd3660046125b6565b6113aa565b3480156106de57600080fd5b506103ce611431565b3480156106f357600080fd5b506103ce610702366004612819565b611467565b34801561071357600080fd5b506103ce610722366004612862565b6114a4565b34801561073357600080fd5b506103ce610742366004612862565b6114d3565b34801561075357600080fd5b506006546001600160a01b0316610396565b34801561077157600080fd5b506103f960105481565b34801561078757600080fd5b50610369611502565b6103ce61079e366004612862565b611511565b3480156107af57600080fd5b506103ce6107be3660046126bc565b6116cb565b3480156107cf57600080fd5b506103696116d6565b3480156107e457600080fd5b506103ce6107f3366004612862565b6116e3565b34801561080457600080fd5b506103ce610813366004612640565b611712565b6103ce610826366004612862565b61174a565b34801561083757600080fd5b50610369610846366004612862565b6118ff565b34801561085757600080fd5b506103ce610866366004612862565b611a7e565b34801561087757600080fd5b506103f960115481565b34801561088d57600080fd5b506103f9600d5481565b3480156108a357600080fd5b506103ce6108b23660046127c4565b611aad565b3480156108c357600080fd5b5061033f6108d23660046125d1565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561090c57600080fd5b506103ce611af1565b34801561092157600080fd5b506103ce61093036600461287b565b611b2a565b34801561094157600080fd5b506103ce6109503660046125b6565b611bc2565b60006001600160e01b031982166380ac58cd60e01b148061098657506001600160e01b03198216635b5e139f60e01b145b806109a157506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546109b690612c15565b80601f01602080910402602001604051908101604052809291908181526020018280546109e290612c15565b8015610a2f5780601f10610a0457610100808354040283529160200191610a2f565b820191906000526020600020905b815481529060010190602001808311610a1257829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610ab75760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6000610ade82611333565b9050806001600160a01b0316836001600160a01b03161415610b4c5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610aae565b336001600160a01b0382161480610b685750610b6881336108d2565b610bda5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610aae565b610be48383611c5a565b505050565b33610bfc6006546001600160a01b031690565b6001600160a01b03161480610c14575060165460ff16155b610c505760405162461bcd60e51b815260206004820152600d60248201526c135a5b9d08191a5cd8589b1959609a1b6044820152606401610aae565b600e5481610c5c610e35565b610c669190612b87565b1115610cad5760405162461bcd60e51b8152602060048201526016602482015275457863656564206d6178206672656520737570706c7960501b6044820152606401610aae565b600f54811115610cff5760405162461bcd60e51b815260206004820152601e60248201527f43616e74206d696e74206d6f7265207468616e206d696e74206c696d697400006044820152606401610aae565b60008111610d4f5760405162461bcd60e51b815260206004820152601a60248201527f4d757374206d696e74206174206c65617374203120746f6b656e0000000000006044820152606401610aae565b60115481610d5c336113aa565b610d669190612b87565b1115610daa5760405162461bcd60e51b8152602060048201526013602482015272141b19585cd948131bddd95c88105b5bdd5b9d606a1b6044820152606401610aae565b610db43382611cc8565b50565b6006546001600160a01b03163314610de15760405162461bcd60e51b8152600401610aae90612aa2565b8051610df4906009906020840190612499565b5050565b6006546001600160a01b03163314610e225760405162461bcd60e51b8152600401610aae90612aa2565b6016805460ff1916911515919091179055565b6000610e4060075490565b905090565b6006546001600160a01b03163314610e6f5760405162461bcd60e51b8152600401610aae90612aa2565b600e55565b610e7e3382611d05565b610e9a5760405162461bcd60e51b8152600401610aae90612b05565b610be4838383611dfc565b6006546001600160a01b03163314610ecf5760405162461bcd60e51b8152600401610aae90612aa2565b60005b8151811015610df45760006001600160a01b0316828281518110610ef857610ef8612cab565b60200260200101516001600160a01b03161415610f575760405162461bcd60e51b815260206004820152601a60248201527f43616e27742061646420746865206e756c6c20616464726573730000000000006044820152606401610aae565b600160136000848481518110610f6f57610f6f612cab565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610fab81612c50565b915050610ed2565b6006546001600160a01b03163314610fdd5760405162461bcd60e51b8152600401610aae90612aa2565b6001600160a01b03166000908152601360205260409020805460ff19166001179055565b6006546001600160a01b0316331461102b5760405162461bcd60e51b8152600401610aae90612aa2565b6012805460ff19169055565b6006546001600160a01b031633146110615760405162461bcd60e51b8152600401610aae90612aa2565b60006110756006546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d80600081146110bf576040519150601f19603f3d011682016040523d82523d6000602084013e6110c4565b606091505b5050905080610db457600080fd5b6006546001600160a01b031633146110fc5760405162461bcd60e51b8152600401610aae90612aa2565b601455565b6006546001600160a01b0316331461112b5760405162461bcd60e51b8152600401610aae90612aa2565b600f55565b610be483838360405180602001604052806000815250611712565b60606000611158836113aa565b905060008167ffffffffffffffff81111561117557611175612cc1565b60405190808252806020026020018201604052801561119e578160200160208202803683370190505b509050600160005b83811080156111b75750600d548211155b156112225760006111c783611333565b9050866001600160a01b0316816001600160a01b0316141561120f57828483815181106111f6576111f6612cab565b60209081029190910101528161120b81612c50565b9250505b8261121981612c50565b935050506111a6565b5090949350505050565b6006546001600160a01b031633146112565760405162461bcd60e51b8152600401610aae90612aa2565b600b55565b6006546001600160a01b031633146112855760405162461bcd60e51b8152600401610aae90612aa2565b8051610df490600a906020840190612499565b600980546112a590612c15565b80601f01602080910402602001604051908101604052809291908181526020018280546112d190612c15565b801561131e5780601f106112f35761010080835404028352916020019161131e565b820191906000526020600020905b81548152906001019060200180831161130157829003601f168201915b505050505081565b600880546112a590612c15565b6000818152600260205260408120546001600160a01b0316806109a15760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610aae565b60006001600160a01b0382166114155760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610aae565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b0316331461145b5760405162461bcd60e51b8152600401610aae90612aa2565b6114656000611f9c565b565b6006546001600160a01b031633146114915760405162461bcd60e51b8152600401610aae90612aa2565b8051610df4906008906020840190612499565b6006546001600160a01b031633146114ce5760405162461bcd60e51b8152600401610aae90612aa2565b601155565b6006546001600160a01b031633146114fd5760405162461bcd60e51b8152600401610aae90612aa2565b601555565b6060600180546109b690612c15565b8060008111801561152457506010548111155b6115405760405162461bcd60e51b8152600401610aae90612a74565b600d548161154d60075490565b6115579190612b87565b11156115755760405162461bcd60e51b8152600401610aae90612ad7565b60165460ff16156115c25760405162461bcd60e51b815260206004820152601760248201527654686520636f6e7472616374206973207061757365642160481b6044820152606401610aae565b81600b546115d09190612bb3565b34146116145760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b6044820152606401610aae565b6014544210156116665760405162461bcd60e51b815260206004820152601d60248201527f5468652073616c6520686173206e6f742073746172746564207965742e0000006044820152606401610aae565b60115482611673336113aa565b61167d9190612b87565b11156116c15760405162461bcd60e51b8152602060048201526013602482015272141b19585cd948131bddd95c88105b5bdd5b9d606a1b6044820152606401610aae565b610df43383611cc8565b610df4338383611fee565b600a80546112a590612c15565b6006546001600160a01b0316331461170d5760405162461bcd60e51b8152600401610aae90612aa2565b601055565b61171c3383611d05565b6117385760405162461bcd60e51b8152600401610aae90612b05565b611744848484846120bd565b50505050565b8060008111801561175d57506010548111155b6117795760405162461bcd60e51b8152600401610aae90612a74565b600d548161178660075490565b6117909190612b87565b11156117ae5760405162461bcd60e51b8152600401610aae90612ad7565b60125460ff16156117fb5760405162461bcd60e51b815260206004820152601760248201527654686520636f6e7472616374206973207061757365642160481b6044820152606401610aae565b81600c546118099190612bb3565b34101561184e5760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b6044820152606401610aae565b6015544210156118a05760405162461bcd60e51b815260206004820152601d60248201527f5468652073616c6520686173206e6f742073746172746564207965742e0000006044820152606401610aae565b3360009081526013602052604090205460ff166116665760405162461bcd60e51b815260206004820152601d60248201527f596f7520617265206e6f74206f6e20746865202057686974654c6973740000006044820152606401610aae565b6000818152600260205260409020546060906001600160a01b031661197e5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610aae565b601654610100900460ff16611a1f57600a805461199a90612c15565b80601f01602080910402602001604051908101604052809291908181526020018280546119c690612c15565b8015611a135780601f106119e857610100808354040283529160200191611a13565b820191906000526020600020905b8154815290600101906020018083116119f657829003601f168201915b50505050509050919050565b6000611a296120f0565b90506000815111611a495760405180602001604052806000815250611a77565b80611a53846120ff565b6009604051602001611a67939291906128ca565b6040516020818303038152906040525b9392505050565b6006546001600160a01b03163314611aa85760405162461bcd60e51b8152600401610aae90612aa2565b600c55565b6006546001600160a01b03163314611ad75760405162461bcd60e51b8152600401610aae90612aa2565b601680549115156101000261ff0019909216919091179055565b6006546001600160a01b03163314611b1b5760405162461bcd60e51b8152600401610aae90612aa2565b6012805460ff19166001179055565b81600081118015611b3d57506010548111155b611b595760405162461bcd60e51b8152600401610aae90612a74565b600d5481611b6660075490565b611b709190612b87565b1115611b8e5760405162461bcd60e51b8152600401610aae90612ad7565b6006546001600160a01b03163314611bb85760405162461bcd60e51b8152600401610aae90612aa2565b610be48284611cc8565b6006546001600160a01b03163314611bec5760405162461bcd60e51b8152600401610aae90612aa2565b6001600160a01b038116611c515760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aae565b610db481611f9c565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611c8f82611333565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60005b81811015610be457611ce1600780546001019055565b611cf383611cee60075490565b6121fd565b80611cfd81612c50565b915050611ccb565b6000818152600260205260408120546001600160a01b0316611d7e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610aae565b6000611d8983611333565b9050806001600160a01b0316846001600160a01b03161480611dc45750836001600160a01b0316611db984610a39565b6001600160a01b0316145b80611df457506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611e0f82611333565b6001600160a01b031614611e775760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610aae565b6001600160a01b038216611ed95760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610aae565b611ee4600082611c5a565b6001600160a01b0383166000908152600360205260408120805460019290611f0d908490612bd2565b90915550506001600160a01b0382166000908152600360205260408120805460019290611f3b908490612b87565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156120505760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610aae565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6120c8848484611dfc565b6120d484848484612217565b6117445760405162461bcd60e51b8152600401610aae90612a22565b6060600880546109b690612c15565b6060816121235750506040805180820190915260018152600360fc1b602082015290565b8160005b811561214d578061213781612c50565b91506121469050600a83612b9f565b9150612127565b60008167ffffffffffffffff81111561216857612168612cc1565b6040519080825280601f01601f191660200182016040528015612192576020820181803683370190505b5090505b8415611df4576121a7600183612bd2565b91506121b4600a86612c6b565b6121bf906030612b87565b60f81b8183815181106121d4576121d4612cab565b60200101906001600160f81b031916908160001a9053506121f6600a86612b9f565b9450612196565b610df4828260405180602001604052806000815250612324565b60006001600160a01b0384163b1561231957604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061225b90339089908890889060040161298e565b602060405180830381600087803b15801561227557600080fd5b505af19250505080156122a5575060408051601f3d908101601f191682019092526122a2918101906127fc565b60015b6122ff573d8080156122d3576040519150601f19603f3d011682016040523d82523d6000602084013e6122d8565b606091505b5080516122f75760405162461bcd60e51b8152600401610aae90612a22565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611df4565b506001949350505050565b61232e8383612357565b61233b6000848484612217565b610be45760405162461bcd60e51b8152600401610aae90612a22565b6001600160a01b0382166123ad5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610aae565b6000818152600260205260409020546001600160a01b0316156124125760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610aae565b6001600160a01b038216600090815260036020526040812080546001929061243b908490612b87565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546124a590612c15565b90600052602060002090601f0160209004810192826124c7576000855561250d565b82601f106124e057805160ff191683800117855561250d565b8280016001018555821561250d579182015b8281111561250d5782518255916020019190600101906124f2565b5061251992915061251d565b5090565b5b80821115612519576000815560010161251e565b600067ffffffffffffffff83111561254c5761254c612cc1565b61255f601f8401601f1916602001612b56565b905082815283838301111561257357600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b03811681146125a157600080fd5b919050565b803580151581146125a157600080fd5b6000602082840312156125c857600080fd5b611a778261258a565b600080604083850312156125e457600080fd5b6125ed8361258a565b91506125fb6020840161258a565b90509250929050565b60008060006060848603121561261957600080fd5b6126228461258a565b92506126306020850161258a565b9150604084013590509250925092565b6000806000806080858703121561265657600080fd5b61265f8561258a565b935061266d6020860161258a565b925060408501359150606085013567ffffffffffffffff81111561269057600080fd5b8501601f810187136126a157600080fd5b6126b087823560208401612532565b91505092959194509250565b600080604083850312156126cf57600080fd5b6126d88361258a565b91506125fb602084016125a6565b600080604083850312156126f957600080fd5b6127028361258a565b946020939093013593505050565b6000602080838503121561272357600080fd5b823567ffffffffffffffff8082111561273b57600080fd5b818501915085601f83011261274f57600080fd5b81358181111561276157612761612cc1565b8060051b9150612772848301612b56565b8181528481019084860184860187018a101561278d57600080fd5b600095505b838610156127b7576127a38161258a565b835260019590950194918601918601612792565b5098975050505050505050565b6000602082840312156127d657600080fd5b611a77826125a6565b6000602082840312156127f157600080fd5b8135611a7781612cd7565b60006020828403121561280e57600080fd5b8151611a7781612cd7565b60006020828403121561282b57600080fd5b813567ffffffffffffffff81111561284257600080fd5b8201601f8101841361285357600080fd5b611df484823560208401612532565b60006020828403121561287457600080fd5b5035919050565b6000806040838503121561288e57600080fd5b823591506125fb6020840161258a565b600081518084526128b6816020860160208601612be9565b601f01601f19169290920160200192915050565b6000845160206128dd8285838a01612be9565b8551918401916128f08184848a01612be9565b8554920191600090600181811c908083168061290d57607f831692505b85831081141561292b57634e487b7160e01b85526022600452602485fd5b80801561293f57600181146129505761297d565b60ff1985168852838801955061297d565b60008b81526020902060005b858110156129755781548a82015290840190880161295c565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906129c19083018461289e565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612a03578351835292840192918401916001016129e7565b50909695505050505050565b602081526000611a77602083018461289e565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b602080825260149082015273496e76616c6964206d696e7420616d6f756e742160601b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601490820152734d617820737570706c792065786365656465642160601b604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff81118282101715612b7f57612b7f612cc1565b604052919050565b60008219821115612b9a57612b9a612c7f565b500190565b600082612bae57612bae612c95565b500490565b6000816000190483118215151615612bcd57612bcd612c7f565b500290565b600082821015612be457612be4612c7f565b500390565b60005b83811015612c04578181015183820152602001612bec565b838111156117445750506000910152565b600181811c90821680612c2957607f821691505b60208210811415612c4a57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612c6457612c64612c7f565b5060010190565b600082612c7a57612c7a612c95565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610db457600080fdfea2646970667358221220e2b962834f3f0abe39385851161eba80cbb26248548b7de34591312ca51de9c664736f6c63430008070033
Deployed Bytecode Sourcemap
37707:6498:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25230:305;;;;;;;;;;-1:-1:-1;25230:305:0;;;;;:::i;:::-;;:::i;:::-;;;8809:14:1;;8802:22;8784:41;;8772:2;8757:18;25230:305:0;;;;;;;;26175:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;27734:221::-;;;;;;;;;;-1:-1:-1;27734:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7470:32:1;;;7452:51;;7440:2;7425:18;27734:221:0;7306:203:1;27257:411:0;;;;;;;;;;-1:-1:-1;27257:411:0;;;;;:::i;:::-;;:::i;:::-;;40595:493;;;;;;:::i;:::-;;:::i;37971:32::-;;;;;;;;;;;;;;;;;;;19812:25:1;;;19800:2;19785:18;37971:32:0;19666:177:1;43546:100:0;;;;;;;;;;-1:-1:-1;43546:100:0;;;;;:::i;:::-;;:::i;43652:77::-;;;;;;;;;;-1:-1:-1;43652:77:0;;;;;:::i;:::-;;:::i;39038:89::-;;;;;;;;;;;;;:::i;40495:94::-;;;;;;;;;;-1:-1:-1;40495:94:0;;;;;:::i;:::-;;:::i;28484:339::-;;;;;;;;;;-1:-1:-1;28484:339:0;;;;;:::i;:::-;;:::i;39561:292::-;;;;;;;;;;-1:-1:-1;39561:292:0;;;;;:::i;:::-;;:::i;39456:99::-;;;;;;;;;;-1:-1:-1;39456:99:0;;;;;:::i;:::-;;:::i;38246:35::-;;;;;;;;;;-1:-1:-1;38246:35:0;;;;;;;;39231:95;;;;;;;;;;;;;:::i;38084:33::-;;;;;;;;;;;;;;;;43735:147;;;;;;;;;;;;;:::i;38821:98::-;;;;;;;;;;-1:-1:-1;38821:98:0;;;;;:::i;:::-;;:::i;40393:96::-;;;;;;;;;;-1:-1:-1;40393:96:0;;;;;:::i;:::-;;:::i;28894:185::-;;;;;;;;;;-1:-1:-1;28894:185:0;;;;;:::i;:::-;;:::i;41770:635::-;;;;;;;;;;-1:-1:-1;41770:635:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;42998:74::-;;;;;;;;;;-1:-1:-1;42998:74:0;;;;;:::i;:::-;;:::i;43302:132::-;;;;;;;;;;-1:-1:-1;43302:132:0;;;;;:::i;:::-;;:::i;38429:28::-;;;;;;;;;;-1:-1:-1;38429:28:0;;;;;;;;;;;37893:33;;;;;;;;;;;;;:::i;38399:25::-;;;;;;;;;;-1:-1:-1;38399:25:0;;;;;;;;37860:28;;;;;;;;;;;;;:::i;25869:239::-;;;;;;;;;;-1:-1:-1;25869:239:0;;;;;:::i;:::-;;:::i;38122:34::-;;;;;;;;;;;;;;;;38008;;;;;;;;;;;;;;;;25599:208;;;;;;;;;;-1:-1:-1;25599:208:0;;;;;:::i;:::-;;:::i;6234:103::-;;;;;;;;;;;;;:::i;43440:100::-;;;;;;;;;;-1:-1:-1;43440:100:0;;;;;:::i;:::-;;:::i;39332:118::-;;;;;;;;;;-1:-1:-1;39332:118:0;;;;;:::i;:::-;;:::i;38927:105::-;;;;;;;;;;-1:-1:-1;38927:105:0;;;;;:::i;:::-;;:::i;5583:87::-;;;;;;;;;;-1:-1:-1;5656:6:0;;-1:-1:-1;;;;;5656:6:0;5583:87;;38161:38;;;;;;;;;;;;;;;;26344:104;;;;;;;;;;;;;:::i;39972:411::-;;;;;;:::i;:::-;;:::i;28027:155::-;;;;;;;;;;-1:-1:-1;28027:155:0;;;;;:::i;:::-;;:::i;37931:31::-;;;;;;;;;;;;;:::i;43166:130::-;;;;;;;;;;-1:-1:-1;43166:130:0;;;;;:::i;:::-;;:::i;29150:328::-;;;;;;;;;;-1:-1:-1;29150:328:0;;;;;:::i;:::-;;:::i;41096:505::-;;;;;;:::i;:::-;;:::i;42411:494::-;;;;;;;;;;-1:-1:-1;42411:494:0;;;;;:::i;:::-;;:::i;43078:82::-;;;;;;;;;;-1:-1:-1;43078:82:0;;;;;:::i;:::-;;:::i;38204:35::-;;;;;;;;;;;;;;;;38047:32;;;;;;;;;;;;;;;;42911:81;;;;;;;;;;-1:-1:-1;42911:81:0;;;;;:::i;:::-;;:::i;28253:164::-;;;;;;;;;;-1:-1:-1;28253:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;28374:25:0;;;28350:4;28374:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;28253:164;39133:92;;;;;;;;;;;;;:::i;41609:155::-;;;;;;;;;;-1:-1:-1;41609:155:0;;;;;:::i;:::-;;:::i;6492:201::-;;;;;;;;;;-1:-1:-1;6492:201:0;;;;;:::i;:::-;;:::i;25230:305::-;25332:4;-1:-1:-1;;;;;;25369:40:0;;-1:-1:-1;;;25369:40:0;;:105;;-1:-1:-1;;;;;;;25426:48:0;;-1:-1:-1;;;25426:48:0;25369:105;:158;;;-1:-1:-1;;;;;;;;;;18124:40:0;;;25491:36;25349:178;25230:305;-1:-1:-1;;25230:305:0:o;26175:100::-;26229:13;26262:5;26255:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26175:100;:::o;27734:221::-;27810:7;31077:16;;;:7;:16;;;;;;-1:-1:-1;;;;;31077:16:0;27830:73;;;;-1:-1:-1;;;27830:73:0;;15003:2:1;27830:73:0;;;14985:21:1;15042:2;15022:18;;;15015:30;15081:34;15061:18;;;15054:62;-1:-1:-1;;;15132:18:1;;;15125:42;15184:19;;27830:73:0;;;;;;;;;-1:-1:-1;27923:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;27923:24:0;;27734:221::o;27257:411::-;27338:13;27354:23;27369:7;27354:14;:23::i;:::-;27338:39;;27402:5;-1:-1:-1;;;;;27396:11:0;:2;-1:-1:-1;;;;;27396:11:0;;;27388:57;;;;-1:-1:-1;;;27388:57:0;;17310:2:1;27388:57:0;;;17292:21:1;17349:2;17329:18;;;17322:30;17388:34;17368:18;;;17361:62;-1:-1:-1;;;17439:18:1;;;17432:31;17480:19;;27388:57:0;17108:397:1;27388:57:0;4387:10;-1:-1:-1;;;;;27480:21:0;;;;:62;;-1:-1:-1;27505:37:0;27522:5;4387:10;28253:164;:::i;27505:37::-;27458:168;;;;-1:-1:-1;;;27458:168:0;;13038:2:1;27458:168:0;;;13020:21:1;13077:2;13057:18;;;13050:30;13116:34;13096:18;;;13089:62;13187:26;13167:18;;;13160:54;13231:19;;27458:168:0;12836:420:1;27458:168:0;27639:21;27648:2;27652:7;27639:8;:21::i;:::-;27327:341;27257:411;;:::o;40595:493::-;40678:10;40667:7;5656:6;;-1:-1:-1;;;;;5656:6:0;;5583:87;40667:7;-1:-1:-1;;;;;40667:21:0;;:32;;;-1:-1:-1;40693:6:0;;;;40692:7;40667:32;40659:58;;;;-1:-1:-1;;;40659:58:0;;18830:2:1;40659:58:0;;;18812:21:1;18869:2;18849:18;;;18842:30;-1:-1:-1;;;18888:18:1;;;18881:43;18941:18;;40659:58:0;18628:337:1;40659:58:0;40765:11;;40750;40734:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:42;;40726:77;;;;-1:-1:-1;;;40726:77:0;;18479:2:1;40726:77:0;;;18461:21:1;18518:2;18498:18;;;18491:30;-1:-1:-1;;;18537:18:1;;;18530:52;18599:18;;40726:77:0;18277:346:1;40726:77:0;40835:14;;40820:11;:29;;40812:72;;;;-1:-1:-1;;;40812:72:0;;9620:2:1;40812:72:0;;;9602:21:1;9659:2;9639:18;;;9632:30;9698:32;9678:18;;;9671:60;9748:18;;40812:72:0;9418:354:1;40812:72:0;40915:1;40901:11;:15;40893:54;;;;-1:-1:-1;;;40893:54:0;;11511:2:1;40893:54:0;;;11493:21:1;11550:2;11530:18;;;11523:30;11589:28;11569:18;;;11562:56;11635:18;;40893:54:0;11309:350:1;40893:54:0;41001:14;;40986:11;40964:21;40974:10;40964:9;:21::i;:::-;:33;;;;:::i;:::-;:51;;40956:83;;;;-1:-1:-1;;;40956:83:0;;19172:2:1;40956:83:0;;;19154:21:1;19211:2;19191:18;;;19184:30;-1:-1:-1;;;19230:18:1;;;19223:49;19289:18;;40956:83:0;18970:343:1;40956:83:0;41048:34;41058:10;41070:11;41048:9;:34::i;:::-;40595:493;:::o;43546:100::-;5656:6;;-1:-1:-1;;;;;5656:6:0;4387:10;5803:23;5795:68;;;;-1:-1:-1;;;5795:68:0;;;;;;;:::i;:::-;43618:22;;::::1;::::0;:9:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;:::-;;43546:100:::0;:::o;43652:77::-;5656:6;;-1:-1:-1;;;;;5656:6:0;4387:10;5803:23;5795:68;;;;-1:-1:-1;;;5795:68:0;;;;;;;:::i;:::-;43708:6:::1;:15:::0;;-1:-1:-1;;43708:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;43652:77::o;39038:89::-;39082:7;39105:16;:6;1003:14;;911:114;39105:16;39098:23;;39038:89;:::o;40495:94::-;5656:6;;-1:-1:-1;;;;;5656:6:0;4387:10;5803:23;5795:68;;;;-1:-1:-1;;;5795:68:0;;;;;;;:::i;:::-;40562:11:::1;:21:::0;40495:94::o;28484:339::-;28679:41;4387:10;28712:7;28679:18;:41::i;:::-;28671:103;;;;-1:-1:-1;;;28671:103:0;;;;;;;:::i;:::-;28787:28;28797:4;28803:2;28807:7;28787:9;:28::i;39561:292::-;5656:6;;-1:-1:-1;;;;;5656:6:0;4387:10;5803:23;5795:68;;;;-1:-1:-1;;;5795:68:0;;;;;;;:::i;:::-;39656:9:::1;39651:193;39675:9;:16;39671:1;:20;39651:193;;;39743:1;-1:-1:-1::0;;;;;39719:26:0::1;:9;39729:1;39719:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;39719:26:0::1;;;39711:65;;;::::0;-1:-1:-1;;;39711:65:0;;15777:2:1;39711:65:0::1;::::0;::::1;15759:21:1::0;15816:2;15796:18;;;15789:30;15855:28;15835:18;;;15828:56;15901:18;;39711:65:0::1;15575:350:1::0;39711:65:0::1;39816:4;39789:10;:24;39800:9;39810:1;39800:12;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;39789:24:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;39789:24:0;:31;;-1:-1:-1;;39789:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39693:3;::::1;::::0;::::1;:::i;:::-;;;;39651:193;;39456:99:::0;5656:6;;-1:-1:-1;;;;;5656:6:0;4387:10;5803:23;5795:68;;;;-1:-1:-1;;;5795:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39525:17:0::1;;::::0;;;:10:::1;:17;::::0;;;;:24;;-1:-1:-1;;39525:24:0::1;39545:4;39525:24;::::0;;39456:99::o;39231:95::-;5656:6;;-1:-1:-1;;;;;5656:6:0;4387:10;5803:23;5795:68;;;;-1:-1:-1;;;5795:68:0;;;;;;;:::i;:::-;39293:15:::1;:23:::0;;-1:-1:-1;;39293:23:0::1;::::0;;39231:95::o;43735:147::-;5656:6;;-1:-1:-1;;;;;5656:6:0;4387:10;5803:23;5795:68;;;;-1:-1:-1;;;5795:68:0;;;;;;;:::i;:::-;43780:12:::1;43806:7;5656:6:::0;;-1:-1:-1;;;;;5656:6:0;;5583:87;43806:7:::1;-1:-1:-1::0;;;;;43798:21:0::1;43827;43798:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43779:74;;;43868:7;43860:16;;;::::0;::::1;38821:98:::0;5656:6;;-1:-1:-1;;;;;5656:6:0;4387:10;5803:23;5795:68;;;;-1:-1:-1;;;5795:68:0;;;;;;;:::i;:::-;38891:9:::1;:22:::0;38821:98::o;40393:96::-;5656:6;;-1:-1:-1;;;;;5656:6:0;4387:10;5803:23;5795:68;;;;-1:-1:-1;;;5795:68:0;;;;;;;:::i;:::-;40461:14:::1;:22:::0;40393:96::o;28894:185::-;29032:39;29049:4;29055:2;29059:7;29032:39;;;;;;;;;;;;:16;:39::i;41770:635::-;41845:16;41873:23;41899:17;41909:6;41899:9;:17::i;:::-;41873:43;;41923:30;41970:15;41956:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41956:30:0;-1:-1:-1;41923:63:0;-1:-1:-1;42018:1:0;41993:22;42062:309;42087:15;42069;:33;:64;;;;;42124:9;;42106:14;:27;;42069:64;42062:309;;;42144:25;42172:23;42180:14;42172:7;:23::i;:::-;42144:51;;42231:6;-1:-1:-1;;;;;42210:27:0;:17;-1:-1:-1;;;;;42210:27:0;;42206:131;;;42283:14;42250:13;42264:15;42250:30;;;;;;;;:::i;:::-;;;;;;;;;;:47;42310:17;;;;:::i;:::-;;;;42206:131;42347:16;;;;:::i;:::-;;;;42135:236;42062:309;;;-1:-1:-1;42386:13:0;;41770:635;-1:-1:-1;;;;41770:635:0:o;42998:74::-;5656:6;;-1:-1:-1;;;;;5656:6:0;4387:10;5803:23;5795:68;;;;-1:-1:-1;;;5795:68:0;;;;;;;:::i;:::-;43054:4:::1;:12:::0;42998:74::o;43302:132::-;5656:6;;-1:-1:-1;;;;;5656:6:0;4387:10;5803:23;5795:68;;;;-1:-1:-1;;;5795:68:0;;;;;;;:::i;:::-;43390:38;;::::1;::::0;:17:::1;::::0;:38:::1;::::0;::::1;::::0;::::1;:::i;37893:33::-:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37860:28::-;;;;;;;:::i;25869:239::-;25941:7;25977:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25977:16:0;26012:19;26004:73;;;;-1:-1:-1;;;26004:73:0;;13874:2:1;26004:73:0;;;13856:21:1;13913:2;13893:18;;;13886:30;13952:34;13932:18;;;13925:62;-1:-1:-1;;;14003:18:1;;;13996:39;14052:19;;26004:73:0;13672:405:1;25599:208:0;25671:7;-1:-1:-1;;;;;25699:19:0;;25691:74;;;;-1:-1:-1;;;25691:74:0;;13463:2:1;25691:74:0;;;13445:21:1;13502:2;13482:18;;;13475:30;13541:34;13521:18;;;13514:62;-1:-1:-1;;;13592:18:1;;;13585:40;13642:19;;25691:74:0;13261:406:1;25691:74:0;-1:-1:-1;;;;;;25783:16:0;;;;;:9;:16;;;;;;;25599:208::o;6234:103::-;5656:6;;-1:-1:-1;;;;;5656:6:0;4387:10;5803:23;5795:68;;;;-1:-1:-1;;;5795:68:0;;;;;;;:::i;:::-;6299:30:::1;6326:1;6299:18;:30::i;:::-;6234:103::o:0;43440:100::-;5656:6;;-1:-1:-1;;;;;5656:6:0;4387:10;5803:23;5795:68;;;;-1:-1:-1;;;5795:68:0;;;;;;;:::i;:::-;43512:22;;::::1;::::0;:9:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;39332:118::-:0;5656:6;;-1:-1:-1;;;;;5656:6:0;4387:10;5803:23;5795:68;;;;-1:-1:-1;;;5795:68:0;;;;;;;:::i;:::-;39412:14:::1;:32:::0;39332:118::o;38927:105::-;5656:6;;-1:-1:-1;;;;;5656:6:0;4387:10;5803:23;5795:68;;;;-1:-1:-1;;;5795:68:0;;;;;;;:::i;:::-;39000:12:::1;:26:::0;38927:105::o;26344:104::-;26400:13;26433:7;26426:14;;;;;:::i;39972:411::-;40037:11;38655:1;38641:11;:15;:52;;;;;38675:18;;38660:11;:33;;38641:52;38633:85;;;;-1:-1:-1;;;38633:85:0;;;;;;;:::i;:::-;38767:9;;38752:11;38733:16;:6;1003:14;;911:114;38733:16;:30;;;;:::i;:::-;:43;;38725:76;;;;-1:-1:-1;;;38725:76:0;;;;;;;:::i;:::-;40066:6:::1;::::0;::::1;;40065:7;40057:43;;;::::0;-1:-1:-1;;;40057:43:0;;16132:2:1;40057:43:0::1;::::0;::::1;16114:21:1::0;16171:2;16151:18;;;16144:30;-1:-1:-1;;;16190:18:1;;;16183:53;16253:18;;40057:43:0::1;15930:347:1::0;40057:43:0::1;40135:11;40128:4;;:18;;;;:::i;:::-;40115:9;:31;40107:63;;;::::0;-1:-1:-1;;;40107:63:0;;19520:2:1;40107:63:0::1;::::0;::::1;19502:21:1::0;19559:2;19539:18;;;19532:30;-1:-1:-1;;;19578:18:1;;;19571:49;19637:18;;40107:63:0::1;19318:343:1::0;40107:63:0::1;40204:9;;40185:15;:28;;40177:69;;;::::0;-1:-1:-1;;;40177:69:0;;14645:2:1;40177:69:0::1;::::0;::::1;14627:21:1::0;14684:2;14664:18;;;14657:30;14723:31;14703:18;;;14696:59;14772:18;;40177:69:0::1;14443:353:1::0;40177:69:0::1;40298:14;;40283:11;40261:21;40271:10;40261:9;:21::i;:::-;:33;;;;:::i;:::-;:51;;40253:83;;;::::0;-1:-1:-1;;;40253:83:0;;19172:2:1;40253:83:0::1;::::0;::::1;19154:21:1::0;19211:2;19191:18;;;19184:30;-1:-1:-1;;;19230:18:1;;;19223:49;19289:18;;40253:83:0::1;18970:343:1::0;40253:83:0::1;40343:34;40353:10;40365:11;40343:9;:34::i;28027:155::-:0;28122:52;4387:10;28155:8;28165;28122:18;:52::i;37931:31::-;;;;;;;:::i;43166:130::-;5656:6;;-1:-1:-1;;;;;5656:6:0;4387:10;5803:23;5795:68;;;;-1:-1:-1;;;5795:68:0;;;;;;;:::i;:::-;43250:18:::1;:40:::0;43166:130::o;29150:328::-;29325:41;4387:10;29358:7;29325:18;:41::i;:::-;29317:103;;;;-1:-1:-1;;;29317:103:0;;;;;;;:::i;:::-;29431:39;29445:4;29451:2;29455:7;29464:5;29431:13;:39::i;:::-;29150:328;;;;:::o;41096:505::-;41170:11;38655:1;38641:11;:15;:52;;;;;38675:18;;38660:11;:33;;38641:52;38633:85;;;;-1:-1:-1;;;38633:85:0;;;;;;;:::i;:::-;38767:9;;38752:11;38733:16;:6;1003:14;;911:114;38733:16;:30;;;;:::i;:::-;:43;;38725:76;;;;-1:-1:-1;;;38725:76:0;;;;;;;:::i;:::-;41199:15:::1;::::0;::::1;;41198:16;41190:52;;;::::0;-1:-1:-1;;;41190:52:0;;16132:2:1;41190:52:0::1;::::0;::::1;16114:21:1::0;16171:2;16151:18;;;16144:30;-1:-1:-1;;;16190:18:1;;;16183:53;16253:18;;41190:52:0::1;15930:347:1::0;41190:52:0::1;41279:11;41270:6;;:20;;;;:::i;:::-;41257:9;:33;;41249:65;;;::::0;-1:-1:-1;;;41249:65:0;;19520:2:1;41249:65:0::1;::::0;::::1;19502:21:1::0;19559:2;19539:18;;;19532:30;-1:-1:-1;;;19578:18:1;;;19571:49;19637:18;;41249:65:0::1;19318:343:1::0;41249:65:0::1;41348:12;;41329:15;:31;;41321:72;;;::::0;-1:-1:-1;;;41321:72:0;;14645:2:1;41321:72:0::1;::::0;::::1;14627:21:1::0;14684:2;14664:18;;;14657:30;14723:31;14703:18;;;14696:59;14772:18;;41321:72:0::1;14443:353:1::0;41321:72:0::1;41419:10;41408:22;::::0;;;:10:::1;:22;::::0;;;;;::::1;;41400:64;;;::::0;-1:-1:-1;;;41400:64:0;;9262:2:1;41400:64:0::1;::::0;::::1;9244:21:1::0;9301:2;9281:18;;;9274:30;9340:31;9320:18;;;9313:59;9389:18;;41400:64:0::1;9060:353:1::0;42411:494:0;31053:4;31077:16;;;:7;:16;;;;;;42510:13;;-1:-1:-1;;;;;31077:16:0;42535:98;;;;-1:-1:-1;;;42535:98:0;;16894:2:1;42535:98:0;;;16876:21:1;16933:2;16913:18;;;16906:30;16972:34;16952:18;;;16945:62;-1:-1:-1;;;17023:18:1;;;17016:45;17078:19;;42535:98:0;16692:411:1;42535:98:0;42646:8;;;;;;;42642:64;;42681:17;42674:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42411:494;;;:::o;42642:64::-;42714:28;42745:10;:8;:10::i;:::-;42714:41;;42800:1;42775:14;42769:28;:32;:130;;;;;;;;;;;;;;;;;42837:14;42853:19;:8;:17;:19::i;:::-;42874:9;42820:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;42769:130;42762:137;42411:494;-1:-1:-1;;;42411:494:0:o;43078:82::-;5656:6;;-1:-1:-1;;;;;5656:6:0;4387:10;5803:23;5795:68;;;;-1:-1:-1;;;5795:68:0;;;;;;;:::i;:::-;43138:6:::1;:16:::0;43078:82::o;42911:81::-;5656:6;;-1:-1:-1;;;;;5656:6:0;4387:10;5803:23;5795:68;;;;-1:-1:-1;;;5795:68:0;;;;;;;:::i;:::-;42969:8:::1;:17:::0;;;::::1;;;;-1:-1:-1::0;;42969:17:0;;::::1;::::0;;;::::1;::::0;;42911:81::o;39133:92::-;5656:6;;-1:-1:-1;;;;;5656:6:0;4387:10;5803:23;5795:68;;;;-1:-1:-1;;;5795:68:0;;;;;;;:::i;:::-;39193:15:::1;:22:::0;;-1:-1:-1;;39193:22:0::1;39211:4;39193:22;::::0;;39133:92::o;41609:155::-;41695:11;38655:1;38641:11;:15;:52;;;;;38675:18;;38660:11;:33;;38641:52;38633:85;;;;-1:-1:-1;;;38633:85:0;;;;;;;:::i;:::-;38767:9;;38752:11;38733:16;:6;1003:14;;911:114;38733:16;:30;;;;:::i;:::-;:43;;38725:76;;;;-1:-1:-1;;;38725:76:0;;;;;;;:::i;:::-;5656:6;;-1:-1:-1;;;;;5656:6:0;4387:10;5803:23:::1;5795:68;;;;-1:-1:-1::0;;;5795:68:0::1;;;;;;;:::i;:::-;41725:33:::2;41735:9;41746:11;41725:9;:33::i;6492:201::-:0;5656:6;;-1:-1:-1;;;;;5656:6:0;4387:10;5803:23;5795:68;;;;-1:-1:-1;;;5795:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6581:22:0;::::1;6573:73;;;::::0;-1:-1:-1;;;6573:73:0;;10398:2:1;6573:73:0::1;::::0;::::1;10380:21:1::0;10437:2;10417:18;;;10410:30;10476:34;10456:18;;;10449:62;-1:-1:-1;;;10527:18:1;;;10520:36;10573:19;;6573:73:0::1;10196:402:1::0;6573:73:0::1;6657:28;6676:8;6657:18;:28::i;34970:174::-:0;35045:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;35045:29:0;-1:-1:-1;;;;;35045:29:0;;;;;;;;:24;;35099:23;35045:24;35099:14;:23::i;:::-;-1:-1:-1;;;;;35090:46:0;;;;;;;;;;;34970:174;;:::o;43888:204::-;43968:9;43963:124;43987:11;43983:1;:15;43963:124;;;44014:18;:6;1122:19;;1140:1;1122:19;;;1033:127;44014:18;44041:38;44051:9;44062:16;:6;1003:14;;911:114;44062:16;44041:9;:38::i;:::-;44000:3;;;;:::i;:::-;;;;43963:124;;31282:348;31375:4;31077:16;;;:7;:16;;;;;;-1:-1:-1;;;;;31077:16:0;31392:73;;;;-1:-1:-1;;;31392:73:0;;12625:2:1;31392:73:0;;;12607:21:1;12664:2;12644:18;;;12637:30;12703:34;12683:18;;;12676:62;-1:-1:-1;;;12754:18:1;;;12747:42;12806:19;;31392:73:0;12423:408:1;31392:73:0;31476:13;31492:23;31507:7;31492:14;:23::i;:::-;31476:39;;31545:5;-1:-1:-1;;;;;31534:16:0;:7;-1:-1:-1;;;;;31534:16:0;;:51;;;;31578:7;-1:-1:-1;;;;;31554:31:0;:20;31566:7;31554:11;:20::i;:::-;-1:-1:-1;;;;;31554:31:0;;31534:51;:87;;;-1:-1:-1;;;;;;28374:25:0;;;28350:4;28374:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;31589:32;31526:96;31282:348;-1:-1:-1;;;;31282:348:0:o;34274:578::-;34433:4;-1:-1:-1;;;;;34406:31:0;:23;34421:7;34406:14;:23::i;:::-;-1:-1:-1;;;;;34406:31:0;;34398:85;;;;-1:-1:-1;;;34398:85:0;;16484:2:1;34398:85:0;;;16466:21:1;16523:2;16503:18;;;16496:30;16562:34;16542:18;;;16535:62;-1:-1:-1;;;16613:18:1;;;16606:39;16662:19;;34398:85:0;16282:405:1;34398:85:0;-1:-1:-1;;;;;34502:16:0;;34494:65;;;;-1:-1:-1;;;34494:65:0;;11866:2:1;34494:65:0;;;11848:21:1;11905:2;11885:18;;;11878:30;11944:34;11924:18;;;11917:62;-1:-1:-1;;;11995:18:1;;;11988:34;12039:19;;34494:65:0;11664:400:1;34494:65:0;34676:29;34693:1;34697:7;34676:8;:29::i;:::-;-1:-1:-1;;;;;34718:15:0;;;;;;:9;:15;;;;;:20;;34737:1;;34718:15;:20;;34737:1;;34718:20;:::i;:::-;;;;-1:-1:-1;;;;;;;34749:13:0;;;;;;:9;:13;;;;;:18;;34766:1;;34749:13;:18;;34766:1;;34749:18;:::i;:::-;;;;-1:-1:-1;;34778:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;34778:21:0;-1:-1:-1;;;;;34778:21:0;;;;;;;;;34817:27;;34778:16;;34817:27;;;;;;;34274:578;;;:::o;6853:191::-;6946:6;;;-1:-1:-1;;;;;6963:17:0;;;-1:-1:-1;;;;;;6963:17:0;;;;;;;6996:40;;6946:6;;;6963:17;6946:6;;6996:40;;6927:16;;6996:40;6916:128;6853:191;:::o;35286:315::-;35441:8;-1:-1:-1;;;;;35432:17:0;:5;-1:-1:-1;;;;;35432:17:0;;;35424:55;;;;-1:-1:-1;;;35424:55:0;;12271:2:1;35424:55:0;;;12253:21:1;12310:2;12290:18;;;12283:30;12349:27;12329:18;;;12322:55;12394:18;;35424:55:0;12069:349:1;35424:55:0;-1:-1:-1;;;;;35490:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;35490:46:0;;;;;;;;;;35552:41;;8784::1;;;35552::0;;8757:18:1;35552:41:0;;;;;;;35286:315;;;:::o;30360:::-;30517:28;30527:4;30533:2;30537:7;30517:9;:28::i;:::-;30564:48;30587:4;30593:2;30597:7;30606:5;30564:22;:48::i;:::-;30556:111;;;;-1:-1:-1;;;30556:111:0;;;;;;;:::i;44098:104::-;44158:13;44187:9;44180:16;;;;;:::i;1869:723::-;1925:13;2146:10;2142:53;;-1:-1:-1;;2173:10:0;;;;;;;;;;;;-1:-1:-1;;;2173:10:0;;;;;1869:723::o;2142:53::-;2220:5;2205:12;2261:78;2268:9;;2261:78;;2294:8;;;;:::i;:::-;;-1:-1:-1;2317:10:0;;-1:-1:-1;2325:2:0;2317:10;;:::i;:::-;;;2261:78;;;2349:19;2381:6;2371:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2371:17:0;;2349:39;;2399:154;2406:10;;2399:154;;2433:11;2443:1;2433:11;;:::i;:::-;;-1:-1:-1;2502:10:0;2510:2;2502:5;:10;:::i;:::-;2489:24;;:2;:24;:::i;:::-;2476:39;;2459:6;2466;2459:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;2459:56:0;;;;;;;;-1:-1:-1;2530:11:0;2539:2;2530:11;;:::i;:::-;;;2399:154;;31972:110;32048:26;32058:2;32062:7;32048:26;;;;;;;;;;;;:9;:26::i;36166:799::-;36321:4;-1:-1:-1;;;;;36342:13:0;;8194:20;8242:8;36338:620;;36378:72;;-1:-1:-1;;;36378:72:0;;-1:-1:-1;;;;;36378:36:0;;;;;:72;;4387:10;;36429:4;;36435:7;;36444:5;;36378:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36378:72:0;;;;;;;;-1:-1:-1;;36378:72:0;;;;;;;;;;;;:::i;:::-;;;36374:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36620:13:0;;36616:272;;36663:60;;-1:-1:-1;;;36663:60:0;;;;;;;:::i;36616:272::-;36838:6;36832:13;36823:6;36819:2;36815:15;36808:38;36374:529;-1:-1:-1;;;;;;36501:51:0;-1:-1:-1;;;36501:51:0;;-1:-1:-1;36494:58:0;;36338:620;-1:-1:-1;36942:4:0;36166:799;;;;;;:::o;32309:321::-;32439:18;32445:2;32449:7;32439:5;:18::i;:::-;32490:54;32521:1;32525:2;32529:7;32538:5;32490:22;:54::i;:::-;32468:154;;;;-1:-1:-1;;;32468:154:0;;;;;;;:::i;32966:382::-;-1:-1:-1;;;;;33046:16:0;;33038:61;;;;-1:-1:-1;;;33038:61:0;;14284:2:1;33038:61:0;;;14266:21:1;;;14303:18;;;14296:30;14362:34;14342:18;;;14335:62;14414:18;;33038:61:0;14082:356:1;33038:61:0;31053:4;31077:16;;;:7;:16;;;;;;-1:-1:-1;;;;;31077:16:0;:30;33110:58;;;;-1:-1:-1;;;33110:58:0;;10805:2:1;33110:58:0;;;10787:21:1;10844:2;10824:18;;;10817:30;10883;10863:18;;;10856:58;10931:18;;33110:58:0;10603:352:1;33110:58:0;-1:-1:-1;;;;;33239:13:0;;;;;;:9;:13;;;;;:18;;33256:1;;33239:13;:18;;33256:1;;33239:18;:::i;:::-;;;;-1:-1:-1;;33268:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;33268:21:0;-1:-1:-1;;;;;33268:21:0;;;;;;;;33307:33;;33268:16;;;33307:33;;33268:16;;33307:33;32966:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:406:1;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:1;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:45;;;309:1;306;299:12;268:45;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;14:406;;;;;:::o;425:173::-;493:20;;-1:-1:-1;;;;;542:31:1;;532:42;;522:70;;588:1;585;578:12;522:70;425:173;;;:::o;603:160::-;668:20;;724:13;;717:21;707:32;;697:60;;753:1;750;743:12;768:186;827:6;880:2;868:9;859:7;855:23;851:32;848:52;;;896:1;893;886:12;848:52;919:29;938:9;919:29;:::i;959:260::-;1027:6;1035;1088:2;1076:9;1067:7;1063:23;1059:32;1056:52;;;1104:1;1101;1094:12;1056:52;1127:29;1146:9;1127:29;:::i;:::-;1117:39;;1175:38;1209:2;1198:9;1194:18;1175:38;:::i;:::-;1165:48;;959:260;;;;;:::o;1224:328::-;1301:6;1309;1317;1370:2;1358:9;1349:7;1345:23;1341:32;1338:52;;;1386:1;1383;1376:12;1338:52;1409:29;1428:9;1409:29;:::i;:::-;1399:39;;1457:38;1491:2;1480:9;1476:18;1457:38;:::i;:::-;1447:48;;1542:2;1531:9;1527:18;1514:32;1504:42;;1224:328;;;;;:::o;1557:666::-;1652:6;1660;1668;1676;1729:3;1717:9;1708:7;1704:23;1700:33;1697:53;;;1746:1;1743;1736:12;1697:53;1769:29;1788:9;1769:29;:::i;:::-;1759:39;;1817:38;1851:2;1840:9;1836:18;1817:38;:::i;:::-;1807:48;;1902:2;1891:9;1887:18;1874:32;1864:42;;1957:2;1946:9;1942:18;1929:32;1984:18;1976:6;1973:30;1970:50;;;2016:1;2013;2006:12;1970:50;2039:22;;2092:4;2084:13;;2080:27;-1:-1:-1;2070:55:1;;2121:1;2118;2111:12;2070:55;2144:73;2209:7;2204:2;2191:16;2186:2;2182;2178:11;2144:73;:::i;:::-;2134:83;;;1557:666;;;;;;;:::o;2228:254::-;2293:6;2301;2354:2;2342:9;2333:7;2329:23;2325:32;2322:52;;;2370:1;2367;2360:12;2322:52;2393:29;2412:9;2393:29;:::i;:::-;2383:39;;2441:35;2472:2;2461:9;2457:18;2441:35;:::i;2487:254::-;2555:6;2563;2616:2;2604:9;2595:7;2591:23;2587:32;2584:52;;;2632:1;2629;2622:12;2584:52;2655:29;2674:9;2655:29;:::i;:::-;2645:39;2731:2;2716:18;;;;2703:32;;-1:-1:-1;;;2487:254:1:o;2746:963::-;2830:6;2861:2;2904;2892:9;2883:7;2879:23;2875:32;2872:52;;;2920:1;2917;2910:12;2872:52;2960:9;2947:23;2989:18;3030:2;3022:6;3019:14;3016:34;;;3046:1;3043;3036:12;3016:34;3084:6;3073:9;3069:22;3059:32;;3129:7;3122:4;3118:2;3114:13;3110:27;3100:55;;3151:1;3148;3141:12;3100:55;3187:2;3174:16;3209:2;3205;3202:10;3199:36;;;3215:18;;:::i;:::-;3261:2;3258:1;3254:10;3244:20;;3284:28;3308:2;3304;3300:11;3284:28;:::i;:::-;3346:15;;;3377:12;;;;3409:11;;;3439;;;3435:20;;3432:33;-1:-1:-1;3429:53:1;;;3478:1;3475;3468:12;3429:53;3500:1;3491:10;;3510:169;3524:2;3521:1;3518:9;3510:169;;;3581:23;3600:3;3581:23;:::i;:::-;3569:36;;3542:1;3535:9;;;;;3625:12;;;;3657;;3510:169;;;-1:-1:-1;3698:5:1;2746:963;-1:-1:-1;;;;;;;;2746:963:1:o;3714:180::-;3770:6;3823:2;3811:9;3802:7;3798:23;3794:32;3791:52;;;3839:1;3836;3829:12;3791:52;3862:26;3878:9;3862:26;:::i;3899:245::-;3957:6;4010:2;3998:9;3989:7;3985:23;3981:32;3978:52;;;4026:1;4023;4016:12;3978:52;4065:9;4052:23;4084:30;4108:5;4084:30;:::i;4149:249::-;4218:6;4271:2;4259:9;4250:7;4246:23;4242:32;4239:52;;;4287:1;4284;4277:12;4239:52;4319:9;4313:16;4338:30;4362:5;4338:30;:::i;4403:450::-;4472:6;4525:2;4513:9;4504:7;4500:23;4496:32;4493:52;;;4541:1;4538;4531:12;4493:52;4581:9;4568:23;4614:18;4606:6;4603:30;4600:50;;;4646:1;4643;4636:12;4600:50;4669:22;;4722:4;4714:13;;4710:27;-1:-1:-1;4700:55:1;;4751:1;4748;4741:12;4700:55;4774:73;4839:7;4834:2;4821:16;4816:2;4812;4808:11;4774:73;:::i;4858:180::-;4917:6;4970:2;4958:9;4949:7;4945:23;4941:32;4938:52;;;4986:1;4983;4976:12;4938:52;-1:-1:-1;5009:23:1;;4858:180;-1:-1:-1;4858:180:1:o;5043:254::-;5111:6;5119;5172:2;5160:9;5151:7;5147:23;5143:32;5140:52;;;5188:1;5185;5178:12;5140:52;5224:9;5211:23;5201:33;;5253:38;5287:2;5276:9;5272:18;5253:38;:::i;5302:257::-;5343:3;5381:5;5375:12;5408:6;5403:3;5396:19;5424:63;5480:6;5473:4;5468:3;5464:14;5457:4;5450:5;5446:16;5424:63;:::i;:::-;5541:2;5520:15;-1:-1:-1;;5516:29:1;5507:39;;;;5548:4;5503:50;;5302:257;-1:-1:-1;;5302:257:1:o;5564:1527::-;5788:3;5826:6;5820:13;5852:4;5865:51;5909:6;5904:3;5899:2;5891:6;5887:15;5865:51;:::i;:::-;5979:13;;5938:16;;;;6001:55;5979:13;5938:16;6023:15;;;6001:55;:::i;:::-;6145:13;;6078:20;;;6118:1;;6205;6227:18;;;;6280;;;;6307:93;;6385:4;6375:8;6371:19;6359:31;;6307:93;6448:2;6438:8;6435:16;6415:18;6412:40;6409:167;;;-1:-1:-1;;;6475:33:1;;6531:4;6528:1;6521:15;6561:4;6482:3;6549:17;6409:167;6592:18;6619:110;;;;6743:1;6738:328;;;;6585:481;;6619:110;-1:-1:-1;;6654:24:1;;6640:39;;6699:20;;;;-1:-1:-1;6619:110:1;;6738:328;20201:1;20194:14;;;20238:4;20225:18;;6833:1;6847:169;6861:8;6858:1;6855:15;6847:169;;;6943:14;;6928:13;;;6921:37;6986:16;;;;6878:10;;6847:169;;;6851:3;;7047:8;7040:5;7036:20;7029:27;;6585:481;-1:-1:-1;7082:3:1;;5564:1527;-1:-1:-1;;;;;;;;;;;5564:1527:1:o;7514:488::-;-1:-1:-1;;;;;7783:15:1;;;7765:34;;7835:15;;7830:2;7815:18;;7808:43;7882:2;7867:18;;7860:34;;;7930:3;7925:2;7910:18;;7903:31;;;7708:4;;7951:45;;7976:19;;7968:6;7951:45;:::i;:::-;7943:53;7514:488;-1:-1:-1;;;;;;7514:488:1:o;8007:632::-;8178:2;8230:21;;;8300:13;;8203:18;;;8322:22;;;8149:4;;8178:2;8401:15;;;;8375:2;8360:18;;;8149:4;8444:169;8458:6;8455:1;8452:13;8444:169;;;8519:13;;8507:26;;8588:15;;;;8553:12;;;;8480:1;8473:9;8444:169;;;-1:-1:-1;8630:3:1;;8007:632;-1:-1:-1;;;;;;8007:632:1:o;8836:219::-;8985:2;8974:9;8967:21;8948:4;9005:44;9045:2;9034:9;9030:18;9022:6;9005:44;:::i;9777:414::-;9979:2;9961:21;;;10018:2;9998:18;;;9991:30;10057:34;10052:2;10037:18;;10030:62;-1:-1:-1;;;10123:2:1;10108:18;;10101:48;10181:3;10166:19;;9777:414::o;10960:344::-;11162:2;11144:21;;;11201:2;11181:18;;;11174:30;-1:-1:-1;;;11235:2:1;11220:18;;11213:50;11295:2;11280:18;;10960:344::o;15214:356::-;15416:2;15398:21;;;15435:18;;;15428:30;15494:34;15489:2;15474:18;;15467:62;15561:2;15546:18;;15214:356::o;17510:344::-;17712:2;17694:21;;;17751:2;17731:18;;;17724:30;-1:-1:-1;;;17785:2:1;17770:18;;17763:50;17845:2;17830:18;;17510:344::o;17859:413::-;18061:2;18043:21;;;18100:2;18080:18;;;18073:30;18139:34;18134:2;18119:18;;18112:62;-1:-1:-1;;;18205:2:1;18190:18;;18183:47;18262:3;18247:19;;17859:413::o;19848:275::-;19919:2;19913:9;19984:2;19965:13;;-1:-1:-1;;19961:27:1;19949:40;;20019:18;20004:34;;20040:22;;;20001:62;19998:88;;;20066:18;;:::i;:::-;20102:2;20095:22;19848:275;;-1:-1:-1;19848:275:1:o;20254:128::-;20294:3;20325:1;20321:6;20318:1;20315:13;20312:39;;;20331:18;;:::i;:::-;-1:-1:-1;20367:9:1;;20254:128::o;20387:120::-;20427:1;20453;20443:35;;20458:18;;:::i;:::-;-1:-1:-1;20492:9:1;;20387:120::o;20512:168::-;20552:7;20618:1;20614;20610:6;20606:14;20603:1;20600:21;20595:1;20588:9;20581:17;20577:45;20574:71;;;20625:18;;:::i;:::-;-1:-1:-1;20665:9:1;;20512:168::o;20685:125::-;20725:4;20753:1;20750;20747:8;20744:34;;;20758:18;;:::i;:::-;-1:-1:-1;20795:9:1;;20685:125::o;20815:258::-;20887:1;20897:113;20911:6;20908:1;20905:13;20897:113;;;20987:11;;;20981:18;20968:11;;;20961:39;20933:2;20926:10;20897:113;;;21028:6;21025:1;21022:13;21019:48;;;-1:-1:-1;;21063:1:1;21045:16;;21038:27;20815:258::o;21078:380::-;21157:1;21153:12;;;;21200;;;21221:61;;21275:4;21267:6;21263:17;21253:27;;21221:61;21328:2;21320:6;21317:14;21297:18;21294:38;21291:161;;;21374:10;21369:3;21365:20;21362:1;21355:31;21409:4;21406:1;21399:15;21437:4;21434:1;21427:15;21291:161;;21078:380;;;:::o;21463:135::-;21502:3;-1:-1:-1;;21523:17:1;;21520:43;;;21543:18;;:::i;:::-;-1:-1:-1;21590:1:1;21579:13;;21463:135::o;21603:112::-;21635:1;21661;21651:35;;21666:18;;:::i;:::-;-1:-1:-1;21700:9:1;;21603:112::o;21720:127::-;21781:10;21776:3;21772:20;21769:1;21762:31;21812:4;21809:1;21802:15;21836:4;21833:1;21826:15;21852:127;21913:10;21908:3;21904:20;21901:1;21894:31;21944:4;21941:1;21934:15;21968:4;21965:1;21958:15;21984:127;22045:10;22040:3;22036:20;22033:1;22026:31;22076:4;22073:1;22066:15;22100:4;22097:1;22090:15;22116:127;22177:10;22172:3;22168:20;22165:1;22158:31;22208:4;22205:1;22198:15;22232:4;22229:1;22222:15;22248:131;-1:-1:-1;;;;;;22322:32:1;;22312:43;;22302:71;;22369:1;22366;22359:12
Swarm Source
ipfs://e2b962834f3f0abe39385851161eba80cbb26248548b7de34591312ca51de9c6
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.