Overview
TokenID
1113
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
SharkCatPlanet
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity >=0.8.0 <0.9.0; import "./ERC721Enumerable.sol"; import "./Ownable.sol"; import "./MerkleProof.sol"; contract SharkCatPlanet is ERC721Enumerable, Ownable { using Strings for uint256; uint256 public constant MAX_SUPPLY = 9999; uint256 public reservedGiveaway = 99; // Reserved last 99 SharkCats for giveaway (ID 9901 - 9999) uint256 public limitMintPerTx = 20; uint256 private maxCashbackPerToken; string public baseURI; string public baseExtension = ".json"; bool public paused = true; bool private cashback = true; enum SaleRound { OG, WL, Public, Closed } SaleRound public saleRound = SaleRound.Closed; mapping(SaleRound => uint256) public salePrice; mapping(SaleRound => bytes32) private rootPreSaleWhiteList; mapping(SaleRound => mapping(address => uint256)) public preSaleMintAddressesMintedCount; constructor(string memory _initBaseURI, uint256 _initMaxCashbackPerToken) ERC721("SharkCat Planet", "SCP") { setBaseURI(_initBaseURI); setMaxCashbackPerToken(_initMaxCashbackPerToken); setSalePrice(SaleRound.OG, 0.065 ether); setSalePrice(SaleRound.WL, 0.075 ether); setSalePrice(SaleRound.Public, 0.085 ether); } modifier saleOpen(uint256 _mintAmount) { require(!paused, "Sales paused"); require(saleRound != SaleRound.Closed, "Sales closed"); require( totalSupply() + _mintAmount <= MAX_SUPPLY - reservedGiveaway, "Exceeds maximum SharkCats limit" ); require( _mintAmount <= limitMintPerTx || limitMintPerTx == 0, "Mint SharkCats per tx exceeded" ); _; } function isWhitelisted(SaleRound _round, bytes32[] memory _proof) private view returns (bool) { bytes32 leaf = keccak256(abi.encodePacked(address(this), msg.sender)); return MerkleProof.verify(_proof, rootPreSaleWhiteList[_round], leaf); } function preSaleMint(uint256 _mintAmount, bytes32[] memory _proof) public payable saleOpen(_mintAmount) { uint256 startGas = gasleft(); uint256 supply = totalSupply(); require(saleRound == SaleRound.OG || saleRound == SaleRound.WL, "Pre sales not open"); if (saleRound == SaleRound.OG) { require(isWhitelisted(SaleRound.OG, _proof), "Not whitelisted"); require( preSaleMintAddressesMintedCount[saleRound][msg.sender] + _mintAmount <= 4, "Mint SharkCat per address exceeded, come back again next round" ); } else if (saleRound == SaleRound.WL) { require( isWhitelisted(SaleRound.WL, _proof) || isWhitelisted(SaleRound.OG, _proof), "Not whitelisted" ); require( preSaleMintAddressesMintedCount[saleRound][msg.sender] + _mintAmount <= 2, "Mint SharkCat per address exceeded, come back again next round" ); } require(msg.value >= salePrice[saleRound] * _mintAmount, "Value below price"); preSaleMintAddressesMintedCount[saleRound][msg.sender] += _mintAmount; uint256 cashbackAmount = 0; for (uint256 i = 1; i <= _mintAmount; i++) { uint256 tokenId = supply + i - (99 - reservedGiveaway); _safeMint(msg.sender, tokenId); if (cashback && tokenId <= 3000) { cashbackAmount = (startGas - gasleft()) * tx.gasprice; if (cashbackAmount > maxCashbackPerToken * i) { cashbackAmount = maxCashbackPerToken * i; } } } if (cashbackAmount > 0) { _withdraw(msg.sender, cashbackAmount); } } function mint(uint256 _mintAmount) public payable saleOpen(_mintAmount) { uint256 startGas = gasleft(); uint256 supply = totalSupply(); require(saleRound == SaleRound.Public, "Sales not open"); require(msg.value >= salePrice[SaleRound.Public] * _mintAmount, "Value below price"); uint256 cashbackAmount = 0; for (uint256 i = 1; i <= _mintAmount; i++) { uint256 tokenId = supply + i - (99 - reservedGiveaway); _safeMint(msg.sender, tokenId); if (cashback && tokenId <= 3000) { cashbackAmount = (startGas - gasleft()) * tx.gasprice; if (cashbackAmount > maxCashbackPerToken * i) { cashbackAmount = maxCashbackPerToken * i; } } } if (cashbackAmount > 0) { _withdraw(msg.sender, cashbackAmount); } } function mintUnsoldToken(address _to, uint256 _mintAmount) public onlyOwner { uint256 supply = totalSupply(); require(!paused, "Paused"); require(saleRound == SaleRound.Closed, "Sales not closed"); require(supply + _mintAmount <= MAX_SUPPLY - reservedGiveaway, "Exceeds maximum SharkCats limit"); for (uint256 i = 1; i <= _mintAmount; i++) { uint256 tokenId = supply + i - (99 - reservedGiveaway); _safeMint(_to, tokenId); } } function giveAway(address _to, uint256[] memory _tokensId) public onlyOwner { uint256 supply = totalSupply(); require(_tokensId.length > 0); require(_tokensId.length <= reservedGiveaway, "Exceeds reserved giveaway limit"); require(supply + _tokensId.length <= MAX_SUPPLY, "Exceeds maximum SharkCats limit"); for (uint256 i = 0; i < _tokensId.length; i++) { require(_tokensId[i] >= 9901 && _tokensId[i] <= MAX_SUPPLY, "Token ID out of range"); require(!_exists(_tokensId[i]), "Token already exists"); } reservedGiveaway -= _tokensId.length; for (uint256 i = 0; i < _tokensId.length; i++) { _safeMint(_to, _tokensId[i]); } } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent SharkCat" ); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } function setSalePrice(SaleRound _round, uint256 _newPrice) public onlyOwner { salePrice[_round] = _newPrice; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function setRootPreSaleWhitelist(SaleRound _round, bytes32 _root) public onlyOwner { rootPreSaleWhiteList[_round] = _root; } function setLimitMintPerTx(uint256 _newLimitAmount) public onlyOwner { limitMintPerTx = _newLimitAmount; } function setSaleRound(SaleRound _round) public onlyOwner { saleRound = _round; } function pause(bool _pause) public onlyOwner { paused = _pause; } function setCashback(bool _cashback) public onlyOwner { cashback = _cashback; } function setMaxCashbackPerToken(uint256 _amount) public onlyOwner { maxCashbackPerToken = _amount; } function withdrawAll() public payable onlyOwner { uint256 balance = address(this).balance; require(balance > 0, "No ether"); _withdraw(owner(), balance); } function _withdraw(address _address, uint256 _amount) private { (bool success, ) = payable(_address).call{value: _amount}(""); require(success, "Transfer failed"); } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } }
// SPDX-License-Identifier: MIT 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); } } } }
// SPDX-License-Identifier: MIT 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; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @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; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; import "./IERC721Receiver.sol"; import "./IERC721Metadata.sol"; import "./Address.sol"; import "./Context.sol"; import "./Strings.sol"; import "./ERC165.sol"; /** * @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 {} }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./ERC721.sol"; import "./IERC721Enumerable.sol"; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @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` cannot be the zero address. * - `to` cannot be the zero address. * * 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 override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } }
// SPDX-License-Identifier: MIT 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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @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; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @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); }
// SPDX-License-Identifier: MIT 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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = keccak256(abi.encodePacked(computedHash, proofElement)); } else { // Hash(current element of the proof + current computed hash) computedHash = keccak256(abi.encodePacked(proofElement, computedHash)); } } return computedHash; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./Context.sol"; /** * @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); } }
// SPDX-License-Identifier: MIT 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); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"uint256","name":"_initMaxCashbackPerToken","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_tokensId","type":"uint256[]"}],"name":"giveAway","outputs":[],"stateMutability":"nonpayable","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":"limitMintPerTx","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":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mintUnsoldToken","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":[{"internalType":"bool","name":"_pause","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"preSaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"enum SharkCatPlanet.SaleRound","name":"","type":"uint8"},{"internalType":"address","name":"","type":"address"}],"name":"preSaleMintAddressesMintedCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservedGiveaway","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":"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":"enum SharkCatPlanet.SaleRound","name":"","type":"uint8"}],"name":"salePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleRound","outputs":[{"internalType":"enum SharkCatPlanet.SaleRound","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_cashback","type":"bool"}],"name":"setCashback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLimitAmount","type":"uint256"}],"name":"setLimitMintPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxCashbackPerToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum SharkCatPlanet.SaleRound","name":"_round","type":"uint8"},{"internalType":"bytes32","name":"_root","type":"bytes32"}],"name":"setRootPreSaleWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum SharkCatPlanet.SaleRound","name":"_round","type":"uint8"},{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setSalePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum SharkCatPlanet.SaleRound","name":"_round","type":"uint8"}],"name":"setSaleRound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
6063600b556014600c5560c06040526005608081905264173539b7b760d91b60a09081526200003291600f9190620002f1565b506010805462ffffff1916620301011790553480156200005157600080fd5b5060405162003ccd38038062003ccd8339810160408190526200007491620003c3565b604080518082018252600f81526e14da185c9ad0d85d08141b185b995d608a1b60208083019182528351808501909452600384526205343560ec1b908401528151919291620000c691600091620002f1565b508051620000dc906001906020840190620002f1565b505050620000f9620000f36200015560201b60201c565b62000159565b6200010482620001ab565b6200010f8162000213565b62000123600066e6ed27d666800062000263565b62000138600167010a741a4627800062000263565b6200014d600267012dfb0cb5e8800062000263565b5050620004e5565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600a546001600160a01b03163314620001fa5760405162461bcd60e51b8152602060048201819052602482015260008051602062003cad83398151915260448201526064015b60405180910390fd5b80516200020f90600e906020840190620002f1565b5050565b600a546001600160a01b031633146200025e5760405162461bcd60e51b8152602060048201819052602482015260008051602062003cad8339815191526044820152606401620001f1565b600d55565b600a546001600160a01b03163314620002ae5760405162461bcd60e51b8152602060048201819052602482015260008051602062003cad8339815191526044820152606401620001f1565b8060116000846003811115620002c857620002c862000397565b6003811115620002dc57620002dc62000397565b81526020810191909152604001600020555050565b828054620002ff90620004a8565b90600052602060002090601f0160209004810192826200032357600085556200036e565b82601f106200033e57805160ff19168380011785556200036e565b828001600101855582156200036e579182015b828111156200036e57825182559160200191906001019062000351565b506200037c92915062000380565b5090565b5b808211156200037c576000815560010162000381565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b60008060408385031215620003d757600080fd5b82516001600160401b0380821115620003ef57600080fd5b818501915085601f8301126200040457600080fd5b815181811115620004195762000419620003ad565b604051601f8201601f19908116603f01168101908382118183101715620004445762000444620003ad565b816040528281526020935088848487010111156200046157600080fd5b600091505b8282101562000485578482018401518183018501529083019062000466565b82821115620004975760008484830101525b969092015195979596505050505050565b600181811c90821680620004bd57607f821691505b60208210811415620004df57634e487b7160e01b600052602260045260246000fd5b50919050565b6137b880620004f56000396000f3fe6080604052600436106102715760003560e01c80636c0360eb11610149578063a0712d68116100c6578063c66828621161008a578063e4e9275a11610064578063e4e9275a14610727578063e985e9c514610754578063f2fde38b1461079d57600080fd5b8063c6682862146106d2578063c87b56dd146106e7578063da3ef23f1461070757600080fd5b8063a0712d6814610649578063a22cb4651461065c578063b733b4b31461067c578063b88d4fde14610692578063bceaa5e5146106b257600080fd5b8063853828b61161010d578063853828b6146105ce5780638a2ad202146105d65780638da5cb5b146105f657806395d89b41146106145780639d95c9301461062957600080fd5b80636c0360eb1461054e57806370a0823114610563578063715018a6146105835780637677382e1461059857806377b116bb146105b857600080fd5b806332cb6b0c116101f2578063515b2d7f116101b65780635c975abb116101905780635c975abb146104f45780635daeab891461050e5780636352211e1461052e57600080fd5b8063515b2d7f1461049457806355f804b3146104b457806359a5e8bc146104d457600080fd5b806332cb6b0c146103fe57806338af39e81461041457806342842e0e146104415780634c220f6e146104615780634f6ccce71461047457600080fd5b806318160ddd1161023957806318160ddd1461034757806323b872dd1461036657806325756e851461038657806328c5e3a4146103a65780632f745c59146103de57600080fd5b806301ffc9a71461027657806302329a29146102ab57806306fdde03146102cd578063081812fc146102ef578063095ea7b314610327575b600080fd5b34801561028257600080fd5b50610296610291366004613058565b6107bd565b60405190151581526020015b60405180910390f35b3480156102b757600080fd5b506102cb6102c636600461308a565b6107e8565b005b3480156102d957600080fd5b506102e2610848565b6040516102a291906130fd565b3480156102fb57600080fd5b5061030f61030a366004613110565b6108da565b6040516001600160a01b0390911681526020016102a2565b34801561033357600080fd5b506102cb610342366004613140565b61096f565b34801561035357600080fd5b506008545b6040519081526020016102a2565b34801561037257600080fd5b506102cb61038136600461316a565b610a85565b34801561039257600080fd5b506102cb6103a1366004613110565b610b00565b3480156103b257600080fd5b506103586103c13660046131b5565b601360209081526000928352604080842090915290825290205481565b3480156103ea57600080fd5b506103586103f9366004613140565b610b4d565b34801561040a57600080fd5b5061035861270f81565b34801561042057600080fd5b5061035861042f3660046131e8565b60116020526000908152604090205481565b34801561044d57600080fd5b506102cb61045c36600461316a565b610be3565b6102cb61046f36600461326e565b610bfe565b34801561048057600080fd5b5061035861048f366004613110565b611282565b3480156104a057600080fd5b506102cb6104af366004613110565b611315565b3480156104c057600080fd5b506102cb6104cf366004613368565b611362565b3480156104e057600080fd5b506102cb6104ef3660046131e8565b6113c1565b34801561050057600080fd5b506010546102969060ff1681565b34801561051a57600080fd5b506102cb610529366004613140565b611434565b34801561053a57600080fd5b5061030f610549366004613110565b6115ed565b34801561055a57600080fd5b506102e2611664565b34801561056f57600080fd5b5061035861057e3660046133b1565b6116f2565b34801561058f57600080fd5b506102cb611779565b3480156105a457600080fd5b506102cb6105b336600461308a565b6117cd565b3480156105c457600080fd5b50610358600c5481565b6102cb61182f565b3480156105e257600080fd5b506102cb6105f13660046133cc565b6118ce565b34801561060257600080fd5b50600a546001600160a01b031661030f565b34801561062057600080fd5b506102e2611953565b34801561063557600080fd5b506102cb6106443660046133cc565b611962565b6102cb610657366004613110565b6119c1565b34801561066857600080fd5b506102cb6106773660046133e8565b611ceb565b34801561068857600080fd5b50610358600b5481565b34801561069e57600080fd5b506102cb6106ad366004613412565b611cf6565b3480156106be57600080fd5b506102cb6106cd36600461348e565b611d72565b3480156106de57600080fd5b506102e2612018565b3480156106f357600080fd5b506102e2610702366004613110565b612025565b34801561071357600080fd5b506102cb610722366004613368565b612111565b34801561073357600080fd5b506010546107479062010000900460ff1681565b6040516102a291906134dd565b34801561076057600080fd5b5061029661076f366004613505565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156107a957600080fd5b506102cb6107b83660046133b1565b61216c565b60006001600160e01b0319821663780e9d6360e01b14806107e257506107e282612222565b92915050565b600a546001600160a01b031633146108355760405162461bcd60e51b8152602060048201819052602482015260008051602061376383398151915260448201526064015b60405180910390fd5b6010805460ff1916911515919091179055565b60606000805461085790613521565b80601f016020809104026020016040519081016040528092919081815260200182805461088390613521565b80156108d05780601f106108a5576101008083540402835291602001916108d0565b820191906000526020600020905b8154815290600101906020018083116108b357829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166109535760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161082c565b506000908152600460205260409020546001600160a01b031690565b600061097a826115ed565b9050806001600160a01b0316836001600160a01b031614156109e85760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161082c565b336001600160a01b0382161480610a045750610a04813361076f565b610a765760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161082c565b610a808383612272565b505050565b610a8f33826122e0565b610af55760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6044820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606482015260840161082c565b610a808383836123d7565b600a546001600160a01b03163314610b485760405162461bcd60e51b81526020600482018190526024820152600080516020613763833981519152604482015260640161082c565b600c55565b6000610b58836116f2565b8210610bba5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b606482015260840161082c565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b610a8083838360405180602001604052806000815250611cf6565b601054829060ff1615610c425760405162461bcd60e51b815260206004820152600c60248201526b14d85b195cc81c185d5cd95960a21b604482015260640161082c565b600360105462010000900460ff166003811115610c6157610c616134c7565b1415610c9e5760405162461bcd60e51b815260206004820152600c60248201526b14d85b195cc818db1bdcd95960a21b604482015260640161082c565b600b54610cad9061270f613572565b81610cb760085490565b610cc19190613589565b1115610d0f5760405162461bcd60e51b815260206004820152601f60248201527f45786365656473206d6178696d756d20536861726b43617473206c696d697400604482015260640161082c565b600c5481111580610d205750600c54155b610d6c5760405162461bcd60e51b815260206004820152601e60248201527f4d696e7420536861726b43617473207065722074782065786365656465640000604482015260640161082c565b60005a90506000610d7c60085490565b9050600060105462010000900460ff166003811115610d9d57610d9d6134c7565b1480610dc55750600160105462010000900460ff166003811115610dc357610dc36134c7565b145b610e115760405162461bcd60e51b815260206004820152601260248201527f5072652073616c6573206e6f74206f70656e0000000000000000000000000000604482015260640161082c565b600060105462010000900460ff166003811115610e3057610e306134c7565b1415610f5957610e41600085612582565b610e7f5760405162461bcd60e51b815260206004820152600f60248201526e139bdd081dda1a5d195b1a5cdd1959608a1b604482015260640161082c565b60048560136000601060029054906101000a900460ff166003811115610ea757610ea76134c7565b6003811115610eb857610eb86134c7565b815260208082019290925260409081016000908120338252909252902054610ee09190613589565b1115610f545760405162461bcd60e51b815260206004820152603e60248201527f4d696e7420536861726b4361742070657220616464726573732065786365656460448201527f65642c20636f6d65206261636b20616761696e206e65787420726f756e640000606482015260840161082c565b6110ad565b600160105462010000900460ff166003811115610f7857610f786134c7565b14156110ad57610f89600185612582565b80610f9a5750610f9a600085612582565b610fd85760405162461bcd60e51b815260206004820152600f60248201526e139bdd081dda1a5d195b1a5cdd1959608a1b604482015260640161082c565b60028560136000601060029054906101000a900460ff166003811115611000576110006134c7565b6003811115611011576110116134c7565b8152602080820192909252604090810160009081203382529092529020546110399190613589565b11156110ad5760405162461bcd60e51b815260206004820152603e60248201527f4d696e7420536861726b4361742070657220616464726573732065786365656460448201527f65642c20636f6d65206261636b20616761696e206e65787420726f756e640000606482015260840161082c565b8460116000601060029054906101000a900460ff1660038111156110d3576110d36134c7565b60038111156110e4576110e46134c7565b8152602001908152602001600020546110fd91906135a1565b3410156111405760405162461bcd60e51b815260206004820152601160248201527056616c75652062656c6f7720707269636560781b604482015260640161082c565b8460136000601060029054906101000a900460ff166003811115611166576111666134c7565b6003811115611177576111776134c7565b81526020019081526020016000206000336001600160a01b03166001600160a01b0316815260200190815260200160002060008282546111b79190613589565b909155506000905060015b868111611269576000600b5460636111da9190613572565b6111e48386613589565b6111ee9190613572565b90506111fa3382612609565b601054610100900460ff1680156112135750610bb88111155b15611256573a5a6112249087613572565b61122e91906135a1565b925081600d5461123e91906135a1565b8311156112565781600d5461125391906135a1565b92505b5080611261816135c0565b9150506111c2565b50801561127a5761127a3382612623565b505050505050565b600061128d60085490565b82106112f05760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161082c565b60088281548110611303576113036135db565b90600052602060002001549050919050565b600a546001600160a01b0316331461135d5760405162461bcd60e51b81526020600482018190526024820152600080516020613763833981519152604482015260640161082c565b600d55565b600a546001600160a01b031633146113aa5760405162461bcd60e51b81526020600482018190526024820152600080516020613763833981519152604482015260640161082c565b80516113bd90600e906020840190612fa9565b5050565b600a546001600160a01b031633146114095760405162461bcd60e51b81526020600482018190526024820152600080516020613763833981519152604482015260640161082c565b6010805482919062ff000019166201000083600381111561142c5761142c6134c7565b021790555050565b600a546001600160a01b0316331461147c5760405162461bcd60e51b81526020600482018190526024820152600080516020613763833981519152604482015260640161082c565b600061148760085490565b60105490915060ff16156114c65760405162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015260640161082c565b600360105462010000900460ff1660038111156114e5576114e56134c7565b146115325760405162461bcd60e51b815260206004820152601060248201527f53616c6573206e6f7420636c6f73656400000000000000000000000000000000604482015260640161082c565b600b546115419061270f613572565b61154b8383613589565b11156115995760405162461bcd60e51b815260206004820152601f60248201527f45786365656473206d6178696d756d20536861726b43617473206c696d697400604482015260640161082c565b60015b8281116115e7576000600b5460636115b49190613572565b6115be8385613589565b6115c89190613572565b90506115d48582612609565b50806115df816135c0565b91505061159c565b50505050565b6000818152600260205260408120546001600160a01b0316806107e25760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161082c565b600e805461167190613521565b80601f016020809104026020016040519081016040528092919081815260200182805461169d90613521565b80156116ea5780601f106116bf576101008083540402835291602001916116ea565b820191906000526020600020905b8154815290600101906020018083116116cd57829003601f168201915b505050505081565b60006001600160a01b03821661175d5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161082c565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146117c15760405162461bcd60e51b81526020600482018190526024820152600080516020613763833981519152604482015260640161082c565b6117cb60006126c6565b565b600a546001600160a01b031633146118155760405162461bcd60e51b81526020600482018190526024820152600080516020613763833981519152604482015260640161082c565b601080549115156101000261ff0019909216919091179055565b600a546001600160a01b031633146118775760405162461bcd60e51b81526020600482018190526024820152600080516020613763833981519152604482015260640161082c565b47806118b05760405162461bcd60e51b815260206004820152600860248201526727379032ba3432b960c11b604482015260640161082c565b6118cb6118c5600a546001600160a01b031690565b82612623565b50565b600a546001600160a01b031633146119165760405162461bcd60e51b81526020600482018190526024820152600080516020613763833981519152604482015260640161082c565b806012600084600381111561192d5761192d6134c7565b600381111561193e5761193e6134c7565b81526020810191909152604001600020555050565b60606001805461085790613521565b600a546001600160a01b031633146119aa5760405162461bcd60e51b81526020600482018190526024820152600080516020613763833981519152604482015260640161082c565b806011600084600381111561192d5761192d6134c7565b601054819060ff1615611a055760405162461bcd60e51b815260206004820152600c60248201526b14d85b195cc81c185d5cd95960a21b604482015260640161082c565b600360105462010000900460ff166003811115611a2457611a246134c7565b1415611a615760405162461bcd60e51b815260206004820152600c60248201526b14d85b195cc818db1bdcd95960a21b604482015260640161082c565b600b54611a709061270f613572565b81611a7a60085490565b611a849190613589565b1115611ad25760405162461bcd60e51b815260206004820152601f60248201527f45786365656473206d6178696d756d20536861726b43617473206c696d697400604482015260640161082c565b600c5481111580611ae35750600c54155b611b2f5760405162461bcd60e51b815260206004820152601e60248201527f4d696e7420536861726b43617473207065722074782065786365656465640000604482015260640161082c565b60005a90506000611b3f60085490565b9050600260105462010000900460ff166003811115611b6057611b606134c7565b14611bad5760405162461bcd60e51b815260206004820152600e60248201527f53616c6573206e6f74206f70656e000000000000000000000000000000000000604482015260640161082c565b600260005260116020527f08037d7b151cc412d25674a4e66b334d9ae9d2e5517a7feaae5cdb828bf1c62854611be49085906135a1565b341015611c275760405162461bcd60e51b815260206004820152601160248201527056616c75652062656c6f7720707269636560781b604482015260640161082c565b600060015b858111611cd3576000600b546063611c449190613572565b611c4e8386613589565b611c589190613572565b9050611c643382612609565b601054610100900460ff168015611c7d5750610bb88111155b15611cc0573a5a611c8e9087613572565b611c9891906135a1565b925081600d54611ca891906135a1565b831115611cc05781600d54611cbd91906135a1565b92505b5080611ccb816135c0565b915050611c2c565b508015611ce457611ce43382612623565b5050505050565b6113bd338383612718565b611d0033836122e0565b611d665760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6044820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606482015260840161082c565b6115e7848484846127e7565b600a546001600160a01b03163314611dba5760405162461bcd60e51b81526020600482018190526024820152600080516020613763833981519152604482015260640161082c565b6000611dc560085490565b90506000825111611dd557600080fd5b600b5482511115611e285760405162461bcd60e51b815260206004820152601f60248201527f45786365656473207265736572766564206769766561776179206c696d697400604482015260640161082c565b61270f825182611e389190613589565b1115611e865760405162461bcd60e51b815260206004820152601f60248201527f45786365656473206d6178696d756d20536861726b43617473206c696d697400604482015260640161082c565b60005b8251811015611fbd576126ad838281518110611ea757611ea76135db565b602002602001015110158015611ed8575061270f838281518110611ecd57611ecd6135db565b602002602001015111155b611f245760405162461bcd60e51b815260206004820152601560248201527f546f6b656e204944206f7574206f662072616e67650000000000000000000000604482015260640161082c565b611f5e838281518110611f3957611f396135db565b60200260200101516000908152600260205260409020546001600160a01b0316151590565b15611fab5760405162461bcd60e51b815260206004820152601460248201527f546f6b656e20616c726561647920657869737473000000000000000000000000604482015260640161082c565b80611fb5816135c0565b915050611e89565b508151600b6000828254611fd19190613572565b90915550600090505b82518110156115e75761200684848381518110611ff957611ff96135db565b6020026020010151612609565b80612010816135c0565b915050611fda565b600f805461167190613521565b6000818152600260205260409020546060906001600160a01b03166120b25760405162461bcd60e51b815260206004820152603260248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420536861726b4361740000000000000000000000000000606482015260840161082c565b60006120bc612865565b905060008151116120dc576040518060200160405280600081525061210a565b806120e684612874565b600f6040516020016120fa939291906135f1565b6040516020818303038152906040525b9392505050565b600a546001600160a01b031633146121595760405162461bcd60e51b81526020600482018190526024820152600080516020613763833981519152604482015260640161082c565b80516113bd90600f906020840190612fa9565b600a546001600160a01b031633146121b45760405162461bcd60e51b81526020600482018190526024820152600080516020613763833981519152604482015260640161082c565b6001600160a01b0381166122195760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161082c565b6118cb816126c6565b60006001600160e01b031982166380ac58cd60e01b148061225357506001600160e01b03198216635b5e139f60e01b145b806107e257506301ffc9a760e01b6001600160e01b03198316146107e2565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906122a7826115ed565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166123595760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161082c565b6000612364836115ed565b9050806001600160a01b0316846001600160a01b0316148061239f5750836001600160a01b0316612394846108da565b6001600160a01b0316145b806123cf57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166123ea826115ed565b6001600160a01b0316146124525760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161082c565b6001600160a01b0382166124b45760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161082c565b6124bf83838361298a565b6124ca600082612272565b6001600160a01b03831660009081526003602052604081208054600192906124f3908490613572565b90915550506001600160a01b0382166000908152600360205260408120805460019290612521908490613589565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6040516bffffffffffffffffffffffff1930606090811b8216602084015233901b16603482015260009081906048016040516020818303038152906040528051906020012090506123cf83601260008760038111156125e3576125e36134c7565b60038111156125f4576125f46134c7565b81526020019081526020016000205483612a42565b6113bd828260405180602001604052806000815250612a58565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612670576040519150601f19603f3d011682016040523d82523d6000602084013e612675565b606091505b5050905080610a805760405162461bcd60e51b815260206004820152600f60248201527f5472616e73666572206661696c65640000000000000000000000000000000000604482015260640161082c565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b0316141561277a5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161082c565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6127f28484846123d7565b6127fe84848484612ad6565b6115e75760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606482015260840161082c565b6060600e805461085790613521565b6060816128985750506040805180820190915260018152600360fc1b602082015290565b8160005b81156128c257806128ac816135c0565b91506128bb9050600a836136cb565b915061289c565b60008167ffffffffffffffff8111156128dd576128dd613203565b6040519080825280601f01601f191660200182016040528015612907576020820181803683370190505b5090505b84156123cf5761291c600183613572565b9150612929600a866136df565b612934906030613589565b60f81b818381518110612949576129496135db565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612983600a866136cb565b945061290b565b6001600160a01b0383166129e5576129e081600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612a08565b816001600160a01b0316836001600160a01b031614612a0857612a088382612c1f565b6001600160a01b038216612a1f57610a8081612cbc565b826001600160a01b0316826001600160a01b031614610a8057610a808282612d6b565b600082612a4f8584612daf565b14949350505050565b612a628383612e5b565b612a6f6000848484612ad6565b610a805760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606482015260840161082c565b60006001600160a01b0384163b15612c1457604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612b1a9033908990889088906004016136f3565b6020604051808303816000875af1925050508015612b55575060408051601f3d908101601f19168201909252612b529181019061372f565b60015b612bfa573d808015612b83576040519150601f19603f3d011682016040523d82523d6000602084013e612b88565b606091505b508051612bf25760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606482015260840161082c565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506123cf565b506001949350505050565b60006001612c2c846116f2565b612c369190613572565b600083815260076020526040902054909150808214612c89576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090612cce90600190613572565b60008381526009602052604081205460088054939450909284908110612cf657612cf66135db565b906000526020600020015490508060088381548110612d1757612d176135db565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480612d4f57612d4f61374c565b6001900381819060005260206000200160009055905550505050565b6000612d76836116f2565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b600081815b8451811015612e53576000858281518110612dd157612dd16135db565b60200260200101519050808311612e13576040805160208101859052908101829052606001604051602081830303815290604052805190602001209250612e40565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b5080612e4b816135c0565b915050612db4565b509392505050565b6001600160a01b038216612eb15760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161082c565b6000818152600260205260409020546001600160a01b031615612f165760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161082c565b612f226000838361298a565b6001600160a01b0382166000908152600360205260408120805460019290612f4b908490613589565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054612fb590613521565b90600052602060002090601f016020900481019282612fd7576000855561301d565b82601f10612ff057805160ff191683800117855561301d565b8280016001018555821561301d579182015b8281111561301d578251825591602001919060010190613002565b5061302992915061302d565b5090565b5b80821115613029576000815560010161302e565b6001600160e01b0319811681146118cb57600080fd5b60006020828403121561306a57600080fd5b813561210a81613042565b8035801515811461308557600080fd5b919050565b60006020828403121561309c57600080fd5b61210a82613075565b60005b838110156130c05781810151838201526020016130a8565b838111156115e75750506000910152565b600081518084526130e98160208601602086016130a5565b601f01601f19169290920160200192915050565b60208152600061210a60208301846130d1565b60006020828403121561312257600080fd5b5035919050565b80356001600160a01b038116811461308557600080fd5b6000806040838503121561315357600080fd5b61315c83613129565b946020939093013593505050565b60008060006060848603121561317f57600080fd5b61318884613129565b925061319660208501613129565b9150604084013590509250925092565b80356004811061308557600080fd5b600080604083850312156131c857600080fd5b6131d1836131a6565b91506131df60208401613129565b90509250929050565b6000602082840312156131fa57600080fd5b61210a826131a6565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561324257613242613203565b604052919050565b600067ffffffffffffffff82111561326457613264613203565b5060051b60200190565b6000806040838503121561328157600080fd5b8235915060208084013567ffffffffffffffff8111156132a057600080fd5b8401601f810186136132b157600080fd5b80356132c46132bf8261324a565b613219565b81815260059190911b820183019083810190888311156132e357600080fd5b928401925b82841015613301578335825292840192908401906132e8565b80955050505050509250929050565b600067ffffffffffffffff83111561332a5761332a613203565b61333d601f8401601f1916602001613219565b905082815283838301111561335157600080fd5b828260208301376000602084830101529392505050565b60006020828403121561337a57600080fd5b813567ffffffffffffffff81111561339157600080fd5b8201601f810184136133a257600080fd5b6123cf84823560208401613310565b6000602082840312156133c357600080fd5b61210a82613129565b600080604083850312156133df57600080fd5b61315c836131a6565b600080604083850312156133fb57600080fd5b61340483613129565b91506131df60208401613075565b6000806000806080858703121561342857600080fd5b61343185613129565b935061343f60208601613129565b925060408501359150606085013567ffffffffffffffff81111561346257600080fd5b8501601f8101871361347357600080fd5b61348287823560208401613310565b91505092959194509250565b600080604083850312156134a157600080fd5b6134aa83613129565b915060208084013567ffffffffffffffff8111156132a057600080fd5b634e487b7160e01b600052602160045260246000fd5b60208101600483106134ff57634e487b7160e01b600052602160045260246000fd5b91905290565b6000806040838503121561351857600080fd5b6131d183613129565b600181811c9082168061353557607f821691505b6020821081141561355657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156135845761358461355c565b500390565b6000821982111561359c5761359c61355c565b500190565b60008160001904831182151516156135bb576135bb61355c565b500290565b60006000198214156135d4576135d461355c565b5060010190565b634e487b7160e01b600052603260045260246000fd5b6000845160206136048285838a016130a5565b8551918401916136178184848a016130a5565b8554920191600090600181811c908083168061363457607f831692505b85831081141561365257634e487b7160e01b85526022600452602485fd5b8080156136665760018114613677576136a4565b60ff198516885283880195506136a4565b60008b81526020902060005b8581101561369c5781548a820152908401908801613683565b505083880195505b50939b9a5050505050505050505050565b634e487b7160e01b600052601260045260246000fd5b6000826136da576136da6136b5565b500490565b6000826136ee576136ee6136b5565b500690565b60006001600160a01b0380871683528086166020840152508360408301526080606083015261372560808301846130d1565b9695505050505050565b60006020828403121561374157600080fd5b815161210a81613042565b634e487b7160e01b600052603160045260246000fdfe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220d8666ea32dd65a5b905ffafcc544d3cfc508eecfd0a2dedd0c2640d8889a741264736f6c634300080a00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65720000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000006a94d74f4300000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d4e7476353545375458356a326d776f336b51625971416870696872664a6b4a336b344a797677486a634d787a2f00000000000000000000
Deployed Bytecode
0x6080604052600436106102715760003560e01c80636c0360eb11610149578063a0712d68116100c6578063c66828621161008a578063e4e9275a11610064578063e4e9275a14610727578063e985e9c514610754578063f2fde38b1461079d57600080fd5b8063c6682862146106d2578063c87b56dd146106e7578063da3ef23f1461070757600080fd5b8063a0712d6814610649578063a22cb4651461065c578063b733b4b31461067c578063b88d4fde14610692578063bceaa5e5146106b257600080fd5b8063853828b61161010d578063853828b6146105ce5780638a2ad202146105d65780638da5cb5b146105f657806395d89b41146106145780639d95c9301461062957600080fd5b80636c0360eb1461054e57806370a0823114610563578063715018a6146105835780637677382e1461059857806377b116bb146105b857600080fd5b806332cb6b0c116101f2578063515b2d7f116101b65780635c975abb116101905780635c975abb146104f45780635daeab891461050e5780636352211e1461052e57600080fd5b8063515b2d7f1461049457806355f804b3146104b457806359a5e8bc146104d457600080fd5b806332cb6b0c146103fe57806338af39e81461041457806342842e0e146104415780634c220f6e146104615780634f6ccce71461047457600080fd5b806318160ddd1161023957806318160ddd1461034757806323b872dd1461036657806325756e851461038657806328c5e3a4146103a65780632f745c59146103de57600080fd5b806301ffc9a71461027657806302329a29146102ab57806306fdde03146102cd578063081812fc146102ef578063095ea7b314610327575b600080fd5b34801561028257600080fd5b50610296610291366004613058565b6107bd565b60405190151581526020015b60405180910390f35b3480156102b757600080fd5b506102cb6102c636600461308a565b6107e8565b005b3480156102d957600080fd5b506102e2610848565b6040516102a291906130fd565b3480156102fb57600080fd5b5061030f61030a366004613110565b6108da565b6040516001600160a01b0390911681526020016102a2565b34801561033357600080fd5b506102cb610342366004613140565b61096f565b34801561035357600080fd5b506008545b6040519081526020016102a2565b34801561037257600080fd5b506102cb61038136600461316a565b610a85565b34801561039257600080fd5b506102cb6103a1366004613110565b610b00565b3480156103b257600080fd5b506103586103c13660046131b5565b601360209081526000928352604080842090915290825290205481565b3480156103ea57600080fd5b506103586103f9366004613140565b610b4d565b34801561040a57600080fd5b5061035861270f81565b34801561042057600080fd5b5061035861042f3660046131e8565b60116020526000908152604090205481565b34801561044d57600080fd5b506102cb61045c36600461316a565b610be3565b6102cb61046f36600461326e565b610bfe565b34801561048057600080fd5b5061035861048f366004613110565b611282565b3480156104a057600080fd5b506102cb6104af366004613110565b611315565b3480156104c057600080fd5b506102cb6104cf366004613368565b611362565b3480156104e057600080fd5b506102cb6104ef3660046131e8565b6113c1565b34801561050057600080fd5b506010546102969060ff1681565b34801561051a57600080fd5b506102cb610529366004613140565b611434565b34801561053a57600080fd5b5061030f610549366004613110565b6115ed565b34801561055a57600080fd5b506102e2611664565b34801561056f57600080fd5b5061035861057e3660046133b1565b6116f2565b34801561058f57600080fd5b506102cb611779565b3480156105a457600080fd5b506102cb6105b336600461308a565b6117cd565b3480156105c457600080fd5b50610358600c5481565b6102cb61182f565b3480156105e257600080fd5b506102cb6105f13660046133cc565b6118ce565b34801561060257600080fd5b50600a546001600160a01b031661030f565b34801561062057600080fd5b506102e2611953565b34801561063557600080fd5b506102cb6106443660046133cc565b611962565b6102cb610657366004613110565b6119c1565b34801561066857600080fd5b506102cb6106773660046133e8565b611ceb565b34801561068857600080fd5b50610358600b5481565b34801561069e57600080fd5b506102cb6106ad366004613412565b611cf6565b3480156106be57600080fd5b506102cb6106cd36600461348e565b611d72565b3480156106de57600080fd5b506102e2612018565b3480156106f357600080fd5b506102e2610702366004613110565b612025565b34801561071357600080fd5b506102cb610722366004613368565b612111565b34801561073357600080fd5b506010546107479062010000900460ff1681565b6040516102a291906134dd565b34801561076057600080fd5b5061029661076f366004613505565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156107a957600080fd5b506102cb6107b83660046133b1565b61216c565b60006001600160e01b0319821663780e9d6360e01b14806107e257506107e282612222565b92915050565b600a546001600160a01b031633146108355760405162461bcd60e51b8152602060048201819052602482015260008051602061376383398151915260448201526064015b60405180910390fd5b6010805460ff1916911515919091179055565b60606000805461085790613521565b80601f016020809104026020016040519081016040528092919081815260200182805461088390613521565b80156108d05780601f106108a5576101008083540402835291602001916108d0565b820191906000526020600020905b8154815290600101906020018083116108b357829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166109535760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161082c565b506000908152600460205260409020546001600160a01b031690565b600061097a826115ed565b9050806001600160a01b0316836001600160a01b031614156109e85760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161082c565b336001600160a01b0382161480610a045750610a04813361076f565b610a765760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161082c565b610a808383612272565b505050565b610a8f33826122e0565b610af55760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6044820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606482015260840161082c565b610a808383836123d7565b600a546001600160a01b03163314610b485760405162461bcd60e51b81526020600482018190526024820152600080516020613763833981519152604482015260640161082c565b600c55565b6000610b58836116f2565b8210610bba5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b606482015260840161082c565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b610a8083838360405180602001604052806000815250611cf6565b601054829060ff1615610c425760405162461bcd60e51b815260206004820152600c60248201526b14d85b195cc81c185d5cd95960a21b604482015260640161082c565b600360105462010000900460ff166003811115610c6157610c616134c7565b1415610c9e5760405162461bcd60e51b815260206004820152600c60248201526b14d85b195cc818db1bdcd95960a21b604482015260640161082c565b600b54610cad9061270f613572565b81610cb760085490565b610cc19190613589565b1115610d0f5760405162461bcd60e51b815260206004820152601f60248201527f45786365656473206d6178696d756d20536861726b43617473206c696d697400604482015260640161082c565b600c5481111580610d205750600c54155b610d6c5760405162461bcd60e51b815260206004820152601e60248201527f4d696e7420536861726b43617473207065722074782065786365656465640000604482015260640161082c565b60005a90506000610d7c60085490565b9050600060105462010000900460ff166003811115610d9d57610d9d6134c7565b1480610dc55750600160105462010000900460ff166003811115610dc357610dc36134c7565b145b610e115760405162461bcd60e51b815260206004820152601260248201527f5072652073616c6573206e6f74206f70656e0000000000000000000000000000604482015260640161082c565b600060105462010000900460ff166003811115610e3057610e306134c7565b1415610f5957610e41600085612582565b610e7f5760405162461bcd60e51b815260206004820152600f60248201526e139bdd081dda1a5d195b1a5cdd1959608a1b604482015260640161082c565b60048560136000601060029054906101000a900460ff166003811115610ea757610ea76134c7565b6003811115610eb857610eb86134c7565b815260208082019290925260409081016000908120338252909252902054610ee09190613589565b1115610f545760405162461bcd60e51b815260206004820152603e60248201527f4d696e7420536861726b4361742070657220616464726573732065786365656460448201527f65642c20636f6d65206261636b20616761696e206e65787420726f756e640000606482015260840161082c565b6110ad565b600160105462010000900460ff166003811115610f7857610f786134c7565b14156110ad57610f89600185612582565b80610f9a5750610f9a600085612582565b610fd85760405162461bcd60e51b815260206004820152600f60248201526e139bdd081dda1a5d195b1a5cdd1959608a1b604482015260640161082c565b60028560136000601060029054906101000a900460ff166003811115611000576110006134c7565b6003811115611011576110116134c7565b8152602080820192909252604090810160009081203382529092529020546110399190613589565b11156110ad5760405162461bcd60e51b815260206004820152603e60248201527f4d696e7420536861726b4361742070657220616464726573732065786365656460448201527f65642c20636f6d65206261636b20616761696e206e65787420726f756e640000606482015260840161082c565b8460116000601060029054906101000a900460ff1660038111156110d3576110d36134c7565b60038111156110e4576110e46134c7565b8152602001908152602001600020546110fd91906135a1565b3410156111405760405162461bcd60e51b815260206004820152601160248201527056616c75652062656c6f7720707269636560781b604482015260640161082c565b8460136000601060029054906101000a900460ff166003811115611166576111666134c7565b6003811115611177576111776134c7565b81526020019081526020016000206000336001600160a01b03166001600160a01b0316815260200190815260200160002060008282546111b79190613589565b909155506000905060015b868111611269576000600b5460636111da9190613572565b6111e48386613589565b6111ee9190613572565b90506111fa3382612609565b601054610100900460ff1680156112135750610bb88111155b15611256573a5a6112249087613572565b61122e91906135a1565b925081600d5461123e91906135a1565b8311156112565781600d5461125391906135a1565b92505b5080611261816135c0565b9150506111c2565b50801561127a5761127a3382612623565b505050505050565b600061128d60085490565b82106112f05760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161082c565b60088281548110611303576113036135db565b90600052602060002001549050919050565b600a546001600160a01b0316331461135d5760405162461bcd60e51b81526020600482018190526024820152600080516020613763833981519152604482015260640161082c565b600d55565b600a546001600160a01b031633146113aa5760405162461bcd60e51b81526020600482018190526024820152600080516020613763833981519152604482015260640161082c565b80516113bd90600e906020840190612fa9565b5050565b600a546001600160a01b031633146114095760405162461bcd60e51b81526020600482018190526024820152600080516020613763833981519152604482015260640161082c565b6010805482919062ff000019166201000083600381111561142c5761142c6134c7565b021790555050565b600a546001600160a01b0316331461147c5760405162461bcd60e51b81526020600482018190526024820152600080516020613763833981519152604482015260640161082c565b600061148760085490565b60105490915060ff16156114c65760405162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015260640161082c565b600360105462010000900460ff1660038111156114e5576114e56134c7565b146115325760405162461bcd60e51b815260206004820152601060248201527f53616c6573206e6f7420636c6f73656400000000000000000000000000000000604482015260640161082c565b600b546115419061270f613572565b61154b8383613589565b11156115995760405162461bcd60e51b815260206004820152601f60248201527f45786365656473206d6178696d756d20536861726b43617473206c696d697400604482015260640161082c565b60015b8281116115e7576000600b5460636115b49190613572565b6115be8385613589565b6115c89190613572565b90506115d48582612609565b50806115df816135c0565b91505061159c565b50505050565b6000818152600260205260408120546001600160a01b0316806107e25760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161082c565b600e805461167190613521565b80601f016020809104026020016040519081016040528092919081815260200182805461169d90613521565b80156116ea5780601f106116bf576101008083540402835291602001916116ea565b820191906000526020600020905b8154815290600101906020018083116116cd57829003601f168201915b505050505081565b60006001600160a01b03821661175d5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161082c565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146117c15760405162461bcd60e51b81526020600482018190526024820152600080516020613763833981519152604482015260640161082c565b6117cb60006126c6565b565b600a546001600160a01b031633146118155760405162461bcd60e51b81526020600482018190526024820152600080516020613763833981519152604482015260640161082c565b601080549115156101000261ff0019909216919091179055565b600a546001600160a01b031633146118775760405162461bcd60e51b81526020600482018190526024820152600080516020613763833981519152604482015260640161082c565b47806118b05760405162461bcd60e51b815260206004820152600860248201526727379032ba3432b960c11b604482015260640161082c565b6118cb6118c5600a546001600160a01b031690565b82612623565b50565b600a546001600160a01b031633146119165760405162461bcd60e51b81526020600482018190526024820152600080516020613763833981519152604482015260640161082c565b806012600084600381111561192d5761192d6134c7565b600381111561193e5761193e6134c7565b81526020810191909152604001600020555050565b60606001805461085790613521565b600a546001600160a01b031633146119aa5760405162461bcd60e51b81526020600482018190526024820152600080516020613763833981519152604482015260640161082c565b806011600084600381111561192d5761192d6134c7565b601054819060ff1615611a055760405162461bcd60e51b815260206004820152600c60248201526b14d85b195cc81c185d5cd95960a21b604482015260640161082c565b600360105462010000900460ff166003811115611a2457611a246134c7565b1415611a615760405162461bcd60e51b815260206004820152600c60248201526b14d85b195cc818db1bdcd95960a21b604482015260640161082c565b600b54611a709061270f613572565b81611a7a60085490565b611a849190613589565b1115611ad25760405162461bcd60e51b815260206004820152601f60248201527f45786365656473206d6178696d756d20536861726b43617473206c696d697400604482015260640161082c565b600c5481111580611ae35750600c54155b611b2f5760405162461bcd60e51b815260206004820152601e60248201527f4d696e7420536861726b43617473207065722074782065786365656465640000604482015260640161082c565b60005a90506000611b3f60085490565b9050600260105462010000900460ff166003811115611b6057611b606134c7565b14611bad5760405162461bcd60e51b815260206004820152600e60248201527f53616c6573206e6f74206f70656e000000000000000000000000000000000000604482015260640161082c565b600260005260116020527f08037d7b151cc412d25674a4e66b334d9ae9d2e5517a7feaae5cdb828bf1c62854611be49085906135a1565b341015611c275760405162461bcd60e51b815260206004820152601160248201527056616c75652062656c6f7720707269636560781b604482015260640161082c565b600060015b858111611cd3576000600b546063611c449190613572565b611c4e8386613589565b611c589190613572565b9050611c643382612609565b601054610100900460ff168015611c7d5750610bb88111155b15611cc0573a5a611c8e9087613572565b611c9891906135a1565b925081600d54611ca891906135a1565b831115611cc05781600d54611cbd91906135a1565b92505b5080611ccb816135c0565b915050611c2c565b508015611ce457611ce43382612623565b5050505050565b6113bd338383612718565b611d0033836122e0565b611d665760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6044820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606482015260840161082c565b6115e7848484846127e7565b600a546001600160a01b03163314611dba5760405162461bcd60e51b81526020600482018190526024820152600080516020613763833981519152604482015260640161082c565b6000611dc560085490565b90506000825111611dd557600080fd5b600b5482511115611e285760405162461bcd60e51b815260206004820152601f60248201527f45786365656473207265736572766564206769766561776179206c696d697400604482015260640161082c565b61270f825182611e389190613589565b1115611e865760405162461bcd60e51b815260206004820152601f60248201527f45786365656473206d6178696d756d20536861726b43617473206c696d697400604482015260640161082c565b60005b8251811015611fbd576126ad838281518110611ea757611ea76135db565b602002602001015110158015611ed8575061270f838281518110611ecd57611ecd6135db565b602002602001015111155b611f245760405162461bcd60e51b815260206004820152601560248201527f546f6b656e204944206f7574206f662072616e67650000000000000000000000604482015260640161082c565b611f5e838281518110611f3957611f396135db565b60200260200101516000908152600260205260409020546001600160a01b0316151590565b15611fab5760405162461bcd60e51b815260206004820152601460248201527f546f6b656e20616c726561647920657869737473000000000000000000000000604482015260640161082c565b80611fb5816135c0565b915050611e89565b508151600b6000828254611fd19190613572565b90915550600090505b82518110156115e75761200684848381518110611ff957611ff96135db565b6020026020010151612609565b80612010816135c0565b915050611fda565b600f805461167190613521565b6000818152600260205260409020546060906001600160a01b03166120b25760405162461bcd60e51b815260206004820152603260248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420536861726b4361740000000000000000000000000000606482015260840161082c565b60006120bc612865565b905060008151116120dc576040518060200160405280600081525061210a565b806120e684612874565b600f6040516020016120fa939291906135f1565b6040516020818303038152906040525b9392505050565b600a546001600160a01b031633146121595760405162461bcd60e51b81526020600482018190526024820152600080516020613763833981519152604482015260640161082c565b80516113bd90600f906020840190612fa9565b600a546001600160a01b031633146121b45760405162461bcd60e51b81526020600482018190526024820152600080516020613763833981519152604482015260640161082c565b6001600160a01b0381166122195760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161082c565b6118cb816126c6565b60006001600160e01b031982166380ac58cd60e01b148061225357506001600160e01b03198216635b5e139f60e01b145b806107e257506301ffc9a760e01b6001600160e01b03198316146107e2565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906122a7826115ed565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166123595760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161082c565b6000612364836115ed565b9050806001600160a01b0316846001600160a01b0316148061239f5750836001600160a01b0316612394846108da565b6001600160a01b0316145b806123cf57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166123ea826115ed565b6001600160a01b0316146124525760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161082c565b6001600160a01b0382166124b45760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161082c565b6124bf83838361298a565b6124ca600082612272565b6001600160a01b03831660009081526003602052604081208054600192906124f3908490613572565b90915550506001600160a01b0382166000908152600360205260408120805460019290612521908490613589565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6040516bffffffffffffffffffffffff1930606090811b8216602084015233901b16603482015260009081906048016040516020818303038152906040528051906020012090506123cf83601260008760038111156125e3576125e36134c7565b60038111156125f4576125f46134c7565b81526020019081526020016000205483612a42565b6113bd828260405180602001604052806000815250612a58565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612670576040519150601f19603f3d011682016040523d82523d6000602084013e612675565b606091505b5050905080610a805760405162461bcd60e51b815260206004820152600f60248201527f5472616e73666572206661696c65640000000000000000000000000000000000604482015260640161082c565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b0316141561277a5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161082c565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6127f28484846123d7565b6127fe84848484612ad6565b6115e75760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606482015260840161082c565b6060600e805461085790613521565b6060816128985750506040805180820190915260018152600360fc1b602082015290565b8160005b81156128c257806128ac816135c0565b91506128bb9050600a836136cb565b915061289c565b60008167ffffffffffffffff8111156128dd576128dd613203565b6040519080825280601f01601f191660200182016040528015612907576020820181803683370190505b5090505b84156123cf5761291c600183613572565b9150612929600a866136df565b612934906030613589565b60f81b818381518110612949576129496135db565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612983600a866136cb565b945061290b565b6001600160a01b0383166129e5576129e081600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612a08565b816001600160a01b0316836001600160a01b031614612a0857612a088382612c1f565b6001600160a01b038216612a1f57610a8081612cbc565b826001600160a01b0316826001600160a01b031614610a8057610a808282612d6b565b600082612a4f8584612daf565b14949350505050565b612a628383612e5b565b612a6f6000848484612ad6565b610a805760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606482015260840161082c565b60006001600160a01b0384163b15612c1457604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612b1a9033908990889088906004016136f3565b6020604051808303816000875af1925050508015612b55575060408051601f3d908101601f19168201909252612b529181019061372f565b60015b612bfa573d808015612b83576040519150601f19603f3d011682016040523d82523d6000602084013e612b88565b606091505b508051612bf25760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606482015260840161082c565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506123cf565b506001949350505050565b60006001612c2c846116f2565b612c369190613572565b600083815260076020526040902054909150808214612c89576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090612cce90600190613572565b60008381526009602052604081205460088054939450909284908110612cf657612cf66135db565b906000526020600020015490508060088381548110612d1757612d176135db565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480612d4f57612d4f61374c565b6001900381819060005260206000200160009055905550505050565b6000612d76836116f2565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b600081815b8451811015612e53576000858281518110612dd157612dd16135db565b60200260200101519050808311612e13576040805160208101859052908101829052606001604051602081830303815290604052805190602001209250612e40565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b5080612e4b816135c0565b915050612db4565b509392505050565b6001600160a01b038216612eb15760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161082c565b6000818152600260205260409020546001600160a01b031615612f165760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161082c565b612f226000838361298a565b6001600160a01b0382166000908152600360205260408120805460019290612f4b908490613589565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054612fb590613521565b90600052602060002090601f016020900481019282612fd7576000855561301d565b82601f10612ff057805160ff191683800117855561301d565b8280016001018555821561301d579182015b8281111561301d578251825591602001919060010190613002565b5061302992915061302d565b5090565b5b80821115613029576000815560010161302e565b6001600160e01b0319811681146118cb57600080fd5b60006020828403121561306a57600080fd5b813561210a81613042565b8035801515811461308557600080fd5b919050565b60006020828403121561309c57600080fd5b61210a82613075565b60005b838110156130c05781810151838201526020016130a8565b838111156115e75750506000910152565b600081518084526130e98160208601602086016130a5565b601f01601f19169290920160200192915050565b60208152600061210a60208301846130d1565b60006020828403121561312257600080fd5b5035919050565b80356001600160a01b038116811461308557600080fd5b6000806040838503121561315357600080fd5b61315c83613129565b946020939093013593505050565b60008060006060848603121561317f57600080fd5b61318884613129565b925061319660208501613129565b9150604084013590509250925092565b80356004811061308557600080fd5b600080604083850312156131c857600080fd5b6131d1836131a6565b91506131df60208401613129565b90509250929050565b6000602082840312156131fa57600080fd5b61210a826131a6565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561324257613242613203565b604052919050565b600067ffffffffffffffff82111561326457613264613203565b5060051b60200190565b6000806040838503121561328157600080fd5b8235915060208084013567ffffffffffffffff8111156132a057600080fd5b8401601f810186136132b157600080fd5b80356132c46132bf8261324a565b613219565b81815260059190911b820183019083810190888311156132e357600080fd5b928401925b82841015613301578335825292840192908401906132e8565b80955050505050509250929050565b600067ffffffffffffffff83111561332a5761332a613203565b61333d601f8401601f1916602001613219565b905082815283838301111561335157600080fd5b828260208301376000602084830101529392505050565b60006020828403121561337a57600080fd5b813567ffffffffffffffff81111561339157600080fd5b8201601f810184136133a257600080fd5b6123cf84823560208401613310565b6000602082840312156133c357600080fd5b61210a82613129565b600080604083850312156133df57600080fd5b61315c836131a6565b600080604083850312156133fb57600080fd5b61340483613129565b91506131df60208401613075565b6000806000806080858703121561342857600080fd5b61343185613129565b935061343f60208601613129565b925060408501359150606085013567ffffffffffffffff81111561346257600080fd5b8501601f8101871361347357600080fd5b61348287823560208401613310565b91505092959194509250565b600080604083850312156134a157600080fd5b6134aa83613129565b915060208084013567ffffffffffffffff8111156132a057600080fd5b634e487b7160e01b600052602160045260246000fd5b60208101600483106134ff57634e487b7160e01b600052602160045260246000fd5b91905290565b6000806040838503121561351857600080fd5b6131d183613129565b600181811c9082168061353557607f821691505b6020821081141561355657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156135845761358461355c565b500390565b6000821982111561359c5761359c61355c565b500190565b60008160001904831182151516156135bb576135bb61355c565b500290565b60006000198214156135d4576135d461355c565b5060010190565b634e487b7160e01b600052603260045260246000fd5b6000845160206136048285838a016130a5565b8551918401916136178184848a016130a5565b8554920191600090600181811c908083168061363457607f831692505b85831081141561365257634e487b7160e01b85526022600452602485fd5b8080156136665760018114613677576136a4565b60ff198516885283880195506136a4565b60008b81526020902060005b8581101561369c5781548a820152908401908801613683565b505083880195505b50939b9a5050505050505050505050565b634e487b7160e01b600052601260045260246000fd5b6000826136da576136da6136b5565b500490565b6000826136ee576136ee6136b5565b500690565b60006001600160a01b0380871683528086166020840152508360408301526080606083015261372560808301846130d1565b9695505050505050565b60006020828403121561374157600080fd5b815161210a81613042565b634e487b7160e01b600052603160045260246000fdfe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220d8666ea32dd65a5b905ffafcc544d3cfc508eecfd0a2dedd0c2640d8889a741264736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000006a94d74f4300000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d4e7476353545375458356a326d776f336b51625971416870696872664a6b4a336b344a797677486a634d787a2f00000000000000000000
-----Decoded View---------------
Arg [0] : _initBaseURI (string): ipfs://QmNtv55E7TX5j2mwo3kQbYqAhpihrfJkJ3k4JyvwHjcMxz/
Arg [1] : _initMaxCashbackPerToken (uint256): 30000000000000000
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 000000000000000000000000000000000000000000000000006a94d74f430000
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [3] : 697066733a2f2f516d4e7476353545375458356a326d776f336b516259714168
Arg [4] : 70696872664a6b4a336b344a797677486a634d787a2f00000000000000000000
Deployed Bytecode Sourcemap
151:7791:12:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;909:222:4;;;;;;;;;;-1:-1:-1;909:222:4;;;;;:::i;:::-;;:::i;:::-;;;565:14:14;;558:22;540:41;;528:2;513:18;909:222:4;;;;;;;;7156:77:12;;;;;;;;;;-1:-1:-1;7156:77:12;;;;;:::i;:::-;;:::i;:::-;;2349:98:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;3860:217::-;;;;;;;;;;-1:-1:-1;3860:217:3;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2042:55:14;;;2024:74;;2012:2;1997:18;3860:217:3;1878:226:14;3398:401:3;;;;;;;;;;-1:-1:-1;3398:401:3;;;;;:::i;:::-;;:::i;1534:111:4:-;;;;;;;;;;-1:-1:-1;1621:10:4;:17;1534:111;;;2715:25:14;;;2703:2;2688:18;1534:111:4;2569:177:14;4587:330:3;;;;;;;;;;-1:-1:-1;4587:330:3;;;;;:::i;:::-;;:::i;6934:118:12:-;;;;;;;;;;-1:-1:-1;6934:118:12;;;;;:::i;:::-;;:::i;859:88::-;;;;;;;;;;-1:-1:-1;859:88:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1210:253:4;;;;;;;;;;-1:-1:-1;1210:253:4;;;;;:::i;:::-;;:::i;242:41:12:-;;;;;;;;;;;;279:4;242:41;;743:46;;;;;;;;;;-1:-1:-1;743:46:12;;;;;:::i;:::-;;;;;;;;;;;;;;4983:179:3;;;;;;;;;;-1:-1:-1;4983:179:3;;;;;:::i;:::-;;:::i;2038:1789:12:-;;;;;;:::i;:::-;;:::i;1717:230:4:-;;;;;;;;;;-1:-1:-1;1717:230:4;;;;;:::i;:::-;;:::i;7336:112:12:-;;;;;;;;;;-1:-1:-1;7336:112:12;;;;;:::i;:::-;;:::i;6552:102::-;;;;;;;;;;-1:-1:-1;6552:102:12;;;;;:::i;:::-;;:::i;7058:92::-;;;;;;;;;;-1:-1:-1;7058:92:12;;;;;:::i;:::-;;:::i;542:25::-;;;;;;;;;;-1:-1:-1;542:25:12;;;;;;;;4741:503;;;;;;;;;;-1:-1:-1;4741:503:12;;;;;:::i;:::-;;:::i;2052:235:3:-;;;;;;;;;;-1:-1:-1;2052:235:3;;;;;:::i;:::-;;:::i;472:21:12:-;;;;;;;;;;;;;:::i;1790:205:3:-;;;;;;;;;;-1:-1:-1;1790:205:3;;;;;:::i;:::-;;:::i;1607:101:11:-;;;;;;;;;;;;;:::i;7239:91:12:-;;;;;;;;;;-1:-1:-1;7239:91:12;;;;;:::i;:::-;;:::i;391:34::-;;;;;;;;;;;;;;;;7454:183;;;:::i;6792:136::-;;;;;;;;;;-1:-1:-1;6792:136:12;;;;;:::i;:::-;;:::i;975:85:11:-;;;;;;;;;;-1:-1:-1;1047:6:11;;-1:-1:-1;;;;;1047:6:11;975:85;;2511:102:3;;;;;;;;;;;;;:::i;6424:122:12:-;;;;;;;;;;-1:-1:-1;6424:122:12;;;;;:::i;:::-;;:::i;3833:902::-;;;;;;:::i;:::-;;:::i;4144:153:3:-;;;;;;;;;;-1:-1:-1;4144:153:3;;;;;:::i;:::-;;:::i;289:36:12:-;;;;;;;;;;;;;;;;5228:320:3;;;;;;;;;;-1:-1:-1;5228:320:3;;;;;:::i;:::-;;:::i;5250:736:12:-;;;;;;;;;;-1:-1:-1;5250:736:12;;;;;:::i;:::-;;:::i;499:37::-;;;;;;;;;;;;;:::i;5992:426::-;;;;;;;;;;-1:-1:-1;5992:426:12;;;;;:::i;:::-;;:::i;6660:126::-;;;;;;;;;;-1:-1:-1;6660:126:12;;;;;:::i;:::-;;:::i;691:45::-;;;;;;;;;;-1:-1:-1;691:45:12;;;;;;;;;;;;;;;;;;:::i;4363:162:3:-;;;;;;;;;;-1:-1:-1;4363:162:3;;;;;:::i;:::-;-1:-1:-1;;;;;4483:25:3;;;4460:4;4483:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;4363:162;1857:198:11;;;;;;;;;;-1:-1:-1;1857:198:11;;;;;:::i;:::-;;:::i;909:222:4:-;1011:4;-1:-1:-1;;;;;;1034:50:4;;-1:-1:-1;;;1034:50:4;;:90;;;1088:36;1112:11;1088:23;:36::i;:::-;1027:97;909:222;-1:-1:-1;;909:222:4:o;7156:77:12:-;1047:6:11;;-1:-1:-1;;;;;1047:6:11;666:10:1;1187:23:11;1179:68;;;;-1:-1:-1;;;1179:68:11;;9767:2:14;1179:68:11;;;9749:21:14;;;9786:18;;;9779:30;-1:-1:-1;;;;;;;;;;;9825:18:14;;;9818:62;9897:18;;1179:68:11;;;;;;;;;7211:6:12::1;:15:::0;;-1:-1:-1;;7211:15:12::1;::::0;::::1;;::::0;;;::::1;::::0;;7156:77::o;2349:98:3:-;2403:13;2435:5;2428:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2349:98;:::o;3860:217::-;3936:7;7108:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7108:16:3;3955:73;;;;-1:-1:-1;;;3955:73:3;;10513:2:14;3955:73:3;;;10495:21:14;10552:2;10532:18;;;10525:30;10591:34;10571:18;;;10564:62;-1:-1:-1;;;10642:18:14;;;10635:42;10694:19;;3955:73:3;10311:408:14;3955:73:3;-1:-1:-1;4046:24:3;;;;:15;:24;;;;;;-1:-1:-1;;;;;4046:24:3;;3860:217::o;3398:401::-;3478:13;3494:23;3509:7;3494:14;:23::i;:::-;3478:39;;3541:5;-1:-1:-1;;;;;3535:11:3;:2;-1:-1:-1;;;;;3535:11:3;;;3527:57;;;;-1:-1:-1;;;3527:57:3;;10926:2:14;3527:57:3;;;10908:21:14;10965:2;10945:18;;;10938:30;11004:34;10984:18;;;10977:62;-1:-1:-1;;;11055:18:14;;;11048:31;11096:19;;3527:57:3;10724:397:14;3527:57:3;666:10:1;-1:-1:-1;;;;;3616:21:3;;;;:62;;-1:-1:-1;3641:37:3;3658:5;666:10:1;4363:162:3;:::i;3641:37::-;3595:165;;;;-1:-1:-1;;;3595:165:3;;11328:2:14;3595:165:3;;;11310:21:14;11367:2;11347:18;;;11340:30;11406:34;11386:18;;;11379:62;11477:26;11457:18;;;11450:54;11521:19;;3595:165:3;11126:420:14;3595:165:3;3771:21;3780:2;3784:7;3771:8;:21::i;:::-;3468:331;3398:401;;:::o;4587:330::-;4776:41;666:10:1;4809:7:3;4776:18;:41::i;:::-;4768:103;;;;-1:-1:-1;;;4768:103:3;;11753:2:14;4768:103:3;;;11735:21:14;11792:2;11772:18;;;11765:30;11831:34;11811:18;;;11804:62;-1:-1:-1;;;11882:18:14;;;11875:47;11939:19;;4768:103:3;11551:413:14;4768:103:3;4882:28;4892:4;4898:2;4902:7;4882:9;:28::i;6934:118:12:-;1047:6:11;;-1:-1:-1;;;;;1047:6:11;666:10:1;1187:23:11;1179:68;;;;-1:-1:-1;;;1179:68:11;;9767:2:14;1179:68:11;;;9749:21:14;;;9786:18;;;9779:30;-1:-1:-1;;;;;;;;;;;9825:18:14;;;9818:62;9897:18;;1179:68:11;9565:356:14;1179:68:11;7013:14:12::1;:32:::0;6934:118::o;1210:253:4:-;1307:7;1342:23;1359:5;1342:16;:23::i;:::-;1334:5;:31;1326:87;;;;-1:-1:-1;;;1326:87:4;;12171:2:14;1326:87:4;;;12153:21:14;12210:2;12190:18;;;12183:30;12249:34;12229:18;;;12222:62;-1:-1:-1;;;12300:18:14;;;12293:41;12351:19;;1326:87:4;11969:407:14;1326:87:4;-1:-1:-1;;;;;;1430:19:4;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;1210:253::o;4983:179:3:-;5116:39;5133:4;5139:2;5143:7;5116:39;;;;;;;;;;;;:16;:39::i;2038:1789:12:-;1375:6;;2129:11;;1375:6;;1374:7;1366:32;;;;-1:-1:-1;;;1366:32:12;;12583:2:14;1366:32:12;;;12565:21:14;12622:2;12602:18;;;12595:30;-1:-1:-1;;;12641:18:14;;;12634:42;12693:18;;1366:32:12;12381:336:14;1366:32:12;1429:16;1416:9;;;;;;;:29;;;;;;;;:::i;:::-;;;1408:54;;;;-1:-1:-1;;;1408:54:12;;12924:2:14;1408:54:12;;;12906:21:14;12963:2;12943:18;;;12936:30;-1:-1:-1;;;12982:18:14;;;12975:42;13034:18;;1408:54:12;12722:336:14;1408:54:12;1537:16;;1524:29;;279:4;1524:29;:::i;:::-;1509:11;1493:13;1621:10:4;:17;;1534:111;1493:13:12;:27;;;;:::i;:::-;:60;;1472:138;;;;-1:-1:-1;;;1472:138:12;;13660:2:14;1472:138:12;;;13642:21:14;13699:2;13679:18;;;13672:30;13738:33;13718:18;;;13711:61;13789:18;;1472:138:12;13458:355:14;1472:138:12;1656:14;;1641:11;:29;;:52;;;-1:-1:-1;1674:14:12;;:19;1641:52;1620:129;;;;-1:-1:-1;;;1620:129:12;;14020:2:14;1620:129:12;;;14002:21:14;14059:2;14039:18;;;14032:30;14098:32;14078:18;;;14071:60;14148:18;;1620:129:12;13818:354:14;1620:129:12;2152:16:::1;2171:9;2152:28;;2190:14;2207:13;1621:10:4::0;:17;;1534:111;2207:13:12::1;2190:30:::0;-1:-1:-1;2251:12:12::1;2238:9;::::0;;;::::1;;;:25;::::0;::::1;;;;;;:::i;:::-;;:54;;;-1:-1:-1::0;2280:12:12::1;2267:9;::::0;;;::::1;;;:25;::::0;::::1;;;;;;:::i;:::-;;2238:54;2230:85;;;::::0;-1:-1:-1;;;2230:85:12;;14379:2:14;2230:85:12::1;::::0;::::1;14361:21:14::0;14418:2;14398:18;;;14391:30;14457:20;14437:18;;;14430:48;14495:18;;2230:85:12::1;14177:342:14::0;2230:85:12::1;2342:12;2329:9;::::0;;;::::1;;;:25;::::0;::::1;;;;;;:::i;:::-;;2325:745;;;2378:35;2392:12;2406:6;2378:13;:35::i;:::-;2370:63;;;::::0;-1:-1:-1;;;2370:63:12;;14726:2:14;2370:63:12::1;::::0;::::1;14708:21:14::0;14765:2;14745:18;;;14738:30;-1:-1:-1;;;14784:18:14;;;14777:45;14839:18;;2370:63:12::1;14524:339:14::0;2370:63:12::1;2544:1;2529:11;2472:31;:42;2504:9;;;;;;;;;;;2472:42;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;2472:42:12;;;2515:10:::1;2472:54:::0;;;;;;;;:68:::1;::::0;;::::1;:::i;:::-;:73;;2447:194;;;::::0;-1:-1:-1;;;2447:194:12;;15070:2:14;2447:194:12::1;::::0;::::1;15052:21:14::0;15109:2;15089:18;;;15082:30;15148:34;15128:18;;;15121:62;15219:32;15199:18;;;15192:60;15269:19;;2447:194:12::1;14868:426:14::0;2447:194:12::1;2325:745;;;2675:12;2662:9;::::0;;;::::1;;;:25;::::0;::::1;;;;;;:::i;:::-;;2658:412;;;2728:35;2742:12;2756:6;2728:13;:35::i;:::-;:74;;;;2767:35;2781:12;2795:6;2767:13;:35::i;:::-;2703:148;;;::::0;-1:-1:-1;;;2703:148:12;;14726:2:14;2703:148:12::1;::::0;::::1;14708:21:14::0;14765:2;14745:18;;;14738:30;-1:-1:-1;;;14784:18:14;;;14777:45;14839:18;;2703:148:12::1;14524:339:14::0;2703:148:12::1;2962:1;2947:11;2890:31;:42;2922:9;;;;;;;;;;;2890:42;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;2890:42:12;;;2933:10:::1;2890:54:::0;;;;;;;;:68:::1;::::0;;::::1;:::i;:::-;:73;;2865:194;;;::::0;-1:-1:-1;;;2865:194:12;;15070:2:14;2865:194:12::1;::::0;::::1;15052:21:14::0;15109:2;15089:18;;;15082:30;15148:34;15128:18;;;15121:62;15219:32;15199:18;;;15192:60;15269:19;;2865:194:12::1;14868:426:14::0;2865:194:12::1;3123:11;3100:9;:20;3110:9;;;;;;;;;;;3100:20;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:34;;;;:::i;:::-;3087:9;:47;;3079:77;;;::::0;-1:-1:-1;;;3079:77:12;;15674:2:14;3079:77:12::1;::::0;::::1;15656:21:14::0;15713:2;15693:18;;;15686:30;-1:-1:-1;;;15732:18:14;;;15725:47;15789:18;;3079:77:12::1;15472:341:14::0;3079:77:12::1;3225:11;3167:31;:42;3199:9;;;;;;;;;;;3167:42;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:54;3210:10;-1:-1:-1::0;;;;;3167:54:12::1;-1:-1:-1::0;;;;;3167:54:12::1;;;;;;;;;;;;;:69;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;3246:22:12::1;::::0;-1:-1:-1;3299:1:12::1;3282:443;3307:11;3302:1;:16;3282:443;;3339:15;3376:16;;3371:2;:21;;;;:::i;:::-;3357:10;3366:1:::0;3357:6;:10:::1;:::i;:::-;:36;;;;:::i;:::-;3339:54;;3407:30;3417:10;3429:7;3407:9;:30::i;:::-;3456:8;::::0;::::1;::::0;::::1;;;:27:::0;::::1;;;;3479:4;3468:7;:15;;3456:27;3452:263;;;3545:11;3532:9;3521:20;::::0;:8;:20:::1;:::i;:::-;3520:36;;;;:::i;:::-;3503:53;;3617:1;3595:19;;:23;;;;:::i;:::-;3578:14;:40;3574:127;;;3681:1;3659:19;;:23;;;;:::i;:::-;3642:40;;3574:127;-1:-1:-1::0;3320:3:12;::::1;::::0;::::1;:::i;:::-;;;;3282:443;;;-1:-1:-1::0;3739:18:12;;3735:86:::1;;3773:37;3783:10;3795:14;3773:9;:37::i;:::-;2142:1685;;;2038:1789:::0;;;:::o;1717:230:4:-;1792:7;1827:30;1621:10;:17;;1534:111;1827:30;1819:5;:38;1811:95;;;;-1:-1:-1;;;1811:95:4;;16160:2:14;1811:95:4;;;16142:21:14;16199:2;16179:18;;;16172:30;16238:34;16218:18;;;16211:62;-1:-1:-1;;;16289:18:14;;;16282:42;16341:19;;1811:95:4;15958:408:14;1811:95:4;1923:10;1934:5;1923:17;;;;;;;;:::i;:::-;;;;;;;;;1916:24;;1717:230;;;:::o;7336:112:12:-;1047:6:11;;-1:-1:-1;;;;;1047:6:11;666:10:1;1187:23:11;1179:68;;;;-1:-1:-1;;;1179:68:11;;9767:2:14;1179:68:11;;;9749:21:14;;;9786:18;;;9779:30;-1:-1:-1;;;;;;;;;;;9825:18:14;;;9818:62;9897:18;;1179:68:11;9565:356:14;1179:68:11;7412:19:12::1;:29:::0;7336:112::o;6552:102::-;1047:6:11;;-1:-1:-1;;;;;1047:6:11;666:10:1;1187:23:11;1179:68;;;;-1:-1:-1;;;1179:68:11;;9767:2:14;1179:68:11;;;9749:21:14;;;9786:18;;;9779:30;-1:-1:-1;;;;;;;;;;;9825:18:14;;;9818:62;9897:18;;1179:68:11;9565:356:14;1179:68:11;6626:21:12;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;6552:102:::0;:::o;7058:92::-;1047:6:11;;-1:-1:-1;;;;;1047:6:11;666:10:1;1187:23:11;1179:68;;;;-1:-1:-1;;;1179:68:11;;9767:2:14;1179:68:11;;;9749:21:14;;;9786:18;;;9779:30;-1:-1:-1;;;;;;;;;;;9825:18:14;;;9818:62;9897:18;;1179:68:11;9565:356:14;1179:68:11;7125:9:12::1;:18:::0;;7137:6;;7125:9;-1:-1:-1;;7125:18:12::1;::::0;7137:6;7125:18:::1;::::0;::::1;;;;;;:::i;:::-;;;;;;7058:92:::0;:::o;4741:503::-;1047:6:11;;-1:-1:-1;;;;;1047:6:11;666:10:1;1187:23:11;1179:68;;;;-1:-1:-1;;;1179:68:11;;9767:2:14;1179:68:11;;;9749:21:14;;;9786:18;;;9779:30;-1:-1:-1;;;;;;;;;;;9825:18:14;;;9818:62;9897:18;;1179:68:11;9565:356:14;1179:68:11;4827:14:12::1;4844:13;1621:10:4::0;:17;;1534:111;4844:13:12::1;4876:6;::::0;4827:30;;-1:-1:-1;4876:6:12::1;;4875:7;4867:26;;;::::0;-1:-1:-1;;;4867:26:12;;16705:2:14;4867:26:12::1;::::0;::::1;16687:21:14::0;16744:1;16724:18;;;16717:29;-1:-1:-1;;;16762:18:14;;;16755:36;16808:18;;4867:26:12::1;16503:329:14::0;4867:26:12::1;4924:16;4911:9;::::0;;;::::1;;;:29;::::0;::::1;;;;;;:::i;:::-;;4903:58;;;::::0;-1:-1:-1;;;4903:58:12;;17039:2:14;4903:58:12::1;::::0;::::1;17021:21:14::0;17078:2;17058:18;;;17051:30;17117:18;17097;;;17090:46;17153:18;;4903:58:12::1;16837:340:14::0;4903:58:12::1;5016:16;::::0;5003:29:::1;::::0;279:4:::1;5003:29;:::i;:::-;4979:20;4988:11:::0;4979:6;:20:::1;:::i;:::-;:53;;4971:97;;;::::0;-1:-1:-1;;;4971:97:12;;13660:2:14;4971:97:12::1;::::0;::::1;13642:21:14::0;13699:2;13679:18;;;13672:30;13738:33;13718:18;;;13711:61;13789:18;;4971:97:12::1;13458:355:14::0;4971:97:12::1;5096:1;5079:159;5104:11;5099:1;:16;5079:159;;5136:15;5173:16;;5168:2;:21;;;;:::i;:::-;5154:10;5163:1:::0;5154:6;:10:::1;:::i;:::-;:36;;;;:::i;:::-;5136:54;;5204:23;5214:3;5219:7;5204:9;:23::i;:::-;-1:-1:-1::0;5117:3:12;::::1;::::0;::::1;:::i;:::-;;;;5079:159;;;;4817:427;4741:503:::0;;:::o;2052:235:3:-;2124:7;2159:16;;;:7;:16;;;;;;-1:-1:-1;;;;;2159:16:3;2193:19;2185:73;;;;-1:-1:-1;;;2185:73:3;;17384:2:14;2185:73:3;;;17366:21:14;17423:2;17403:18;;;17396:30;17462:34;17442:18;;;17435:62;-1:-1:-1;;;17513:18:14;;;17506:39;17562:19;;2185:73:3;17182:405:14;472:21:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1790:205:3:-;1862:7;-1:-1:-1;;;;;1889:19:3;;1881:74;;;;-1:-1:-1;;;1881:74:3;;17794:2:14;1881:74:3;;;17776:21:14;17833:2;17813:18;;;17806:30;17872:34;17852:18;;;17845:62;-1:-1:-1;;;17923:18:14;;;17916:40;17973:19;;1881:74:3;17592:406:14;1881:74:3;-1:-1:-1;;;;;;1972:16:3;;;;;:9;:16;;;;;;;1790:205::o;1607:101:11:-;1047:6;;-1:-1:-1;;;;;1047:6:11;666:10:1;1187:23:11;1179:68;;;;-1:-1:-1;;;1179:68:11;;9767:2:14;1179:68:11;;;9749:21:14;;;9786:18;;;9779:30;-1:-1:-1;;;;;;;;;;;9825:18:14;;;9818:62;9897:18;;1179:68:11;9565:356:14;1179:68:11;1671:30:::1;1698:1;1671:18;:30::i;:::-;1607:101::o:0;7239:91:12:-;1047:6:11;;-1:-1:-1;;;;;1047:6:11;666:10:1;1187:23:11;1179:68;;;;-1:-1:-1;;;1179:68:11;;9767:2:14;1179:68:11;;;9749:21:14;;;9786:18;;;9779:30;-1:-1:-1;;;;;;;;;;;9825:18:14;;;9818:62;9897:18;;1179:68:11;9565:356:14;1179:68:11;7303:8:12::1;:20:::0;;;::::1;;;;-1:-1:-1::0;;7303:20:12;;::::1;::::0;;;::::1;::::0;;7239:91::o;7454:183::-;1047:6:11;;-1:-1:-1;;;;;1047:6:11;666:10:1;1187:23:11;1179:68;;;;-1:-1:-1;;;1179:68:11;;9767:2:14;1179:68:11;;;9749:21:14;;;9786:18;;;9779:30;-1:-1:-1;;;;;;;;;;;9825:18:14;;;9818:62;9897:18;;1179:68:11;9565:356:14;1179:68:11;7530:21:12::1;7569:11:::0;7561:32:::1;;;::::0;-1:-1:-1;;;7561:32:12;;18205:2:14;7561:32:12::1;::::0;::::1;18187:21:14::0;18244:1;18224:18;;;18217:29;-1:-1:-1;;;18262:18:14;;;18255:38;18310:18;;7561:32:12::1;18003:331:14::0;7561:32:12::1;7603:27;7613:7;1047:6:11::0;;-1:-1:-1;;;;;1047:6:11;;975:85;7613:7:12::1;7622;7603:9;:27::i;:::-;7502:135;7454:183::o:0;6792:136::-;1047:6:11;;-1:-1:-1;;;;;1047:6:11;666:10:1;1187:23:11;1179:68;;;;-1:-1:-1;;;1179:68:11;;9767:2:14;1179:68:11;;;9749:21:14;;;9786:18;;;9779:30;-1:-1:-1;;;;;;;;;;;9825:18:14;;;9818:62;9897:18;;1179:68:11;9565:356:14;1179:68:11;6916:5:12::1;6885:20;:28;6906:6;6885:28;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;6885:28:12;:36;-1:-1:-1;;6792:136:12:o;2511:102:3:-;2567:13;2599:7;2592:14;;;;;:::i;6424:122:12:-;1047:6:11;;-1:-1:-1;;;;;1047:6:11;666:10:1;1187:23:11;1179:68;;;;-1:-1:-1;;;1179:68:11;;9767:2:14;1179:68:11;;;9749:21:14;;;9786:18;;;9779:30;-1:-1:-1;;;;;;;;;;;9825:18:14;;;9818:62;9897:18;;1179:68:11;9565:356:14;1179:68:11;6530:9:12::1;6510;:17;6520:6;6510:17;;;;;;;;:::i;3833:902::-:0;1375:6;;3892:11;;1375:6;;1374:7;1366:32;;;;-1:-1:-1;;;1366:32:12;;12583:2:14;1366:32:12;;;12565:21:14;12622:2;12602:18;;;12595:30;-1:-1:-1;;;12641:18:14;;;12634:42;12693:18;;1366:32:12;12381:336:14;1366:32:12;1429:16;1416:9;;;;;;;:29;;;;;;;;:::i;:::-;;;1408:54;;;;-1:-1:-1;;;1408:54:12;;12924:2:14;1408:54:12;;;12906:21:14;12963:2;12943:18;;;12936:30;-1:-1:-1;;;12982:18:14;;;12975:42;13034:18;;1408:54:12;12722:336:14;1408:54:12;1537:16;;1524:29;;279:4;1524:29;:::i;:::-;1509:11;1493:13;1621:10:4;:17;;1534:111;1493:13:12;:27;;;;:::i;:::-;:60;;1472:138;;;;-1:-1:-1;;;1472:138:12;;13660:2:14;1472:138:12;;;13642:21:14;13699:2;13679:18;;;13672:30;13738:33;13718:18;;;13711:61;13789:18;;1472:138:12;13458:355:14;1472:138:12;1656:14;;1641:11;:29;;:52;;;-1:-1:-1;1674:14:12;;:19;1641:52;1620:129;;;;-1:-1:-1;;;1620:129:12;;14020:2:14;1620:129:12;;;14002:21:14;14059:2;14039:18;;;14032:30;14098:32;14078:18;;;14071:60;14148:18;;1620:129:12;13818:354:14;1620:129:12;3915:16:::1;3934:9;3915:28;;3953:14;3970:13;1621:10:4::0;:17;;1534:111;3970:13:12::1;3953:30:::0;-1:-1:-1;4014:16:12::1;4001:9;::::0;;;::::1;;;:29;::::0;::::1;;;;;;:::i;:::-;;3993:56;;;::::0;-1:-1:-1;;;3993:56:12;;18541:2:14;3993:56:12::1;::::0;::::1;18523:21:14::0;18580:2;18560:18;;;18553:30;18619:16;18599:18;;;18592:44;18653:18;;3993:56:12::1;18339:338:14::0;3993:56:12::1;4090:16;4080:27;::::0;:9:::1;:27;::::0;;;:41:::1;::::0;4110:11;;4080:41:::1;:::i;:::-;4067:9;:54;;4059:84;;;::::0;-1:-1:-1;;;4059:84:12;;15674:2:14;4059:84:12::1;::::0;::::1;15656:21:14::0;15713:2;15693:18;;;15686:30;-1:-1:-1;;;15732:18:14;;;15725:47;15789:18;;4059:84:12::1;15472:341:14::0;4059:84:12::1;4154:22;4207:1;4190:443;4215:11;4210:1;:16;4190:443;;4247:15;4284:16;;4279:2;:21;;;;:::i;:::-;4265:10;4274:1:::0;4265:6;:10:::1;:::i;:::-;:36;;;;:::i;:::-;4247:54;;4315:30;4325:10;4337:7;4315:9;:30::i;:::-;4364:8;::::0;::::1;::::0;::::1;;;:27:::0;::::1;;;;4387:4;4376:7;:15;;4364:27;4360:263;;;4453:11;4440:9;4429:20;::::0;:8;:20:::1;:::i;:::-;4428:36;;;;:::i;:::-;4411:53;;4525:1;4503:19;;:23;;;;:::i;:::-;4486:14;:40;4482:127;;;4589:1;4567:19;;:23;;;;:::i;:::-;4550:40;;4482:127;-1:-1:-1::0;4228:3:12;::::1;::::0;::::1;:::i;:::-;;;;4190:443;;;-1:-1:-1::0;4647:18:12;;4643:86:::1;;4681:37;4691:10;4703:14;4681:9;:37::i;:::-;3905:830;;;3833:902:::0;;:::o;4144:153:3:-;4238:52;666:10:1;4271:8:3;4281;4238:18;:52::i;5228:320::-;5397:41;666:10:1;5430:7:3;5397:18;:41::i;:::-;5389:103;;;;-1:-1:-1;;;5389:103:3;;11753:2:14;5389:103:3;;;11735:21:14;11792:2;11772:18;;;11765:30;11831:34;11811:18;;;11804:62;-1:-1:-1;;;11882:18:14;;;11875:47;11939:19;;5389:103:3;11551:413:14;5389:103:3;5502:39;5516:4;5522:2;5526:7;5535:5;5502:13;:39::i;5250:736:12:-;1047:6:11;;-1:-1:-1;;;;;1047:6:11;666:10:1;1187:23:11;1179:68;;;;-1:-1:-1;;;1179:68:11;;9767:2:14;1179:68:11;;;9749:21:14;;;9786:18;;;9779:30;-1:-1:-1;;;;;;;;;;;9825:18:14;;;9818:62;9897:18;;1179:68:11;9565:356:14;1179:68:11;5336:14:12::1;5353:13;1621:10:4::0;:17;;1534:111;5353:13:12::1;5336:30;;5403:1;5384:9;:16;:20;5376:29;;;::::0;::::1;;5443:16;;5423:9;:16;:36;;5415:80;;;::::0;-1:-1:-1;;;5415:80:12;;18884:2:14;5415:80:12::1;::::0;::::1;18866:21:14::0;18923:2;18903:18;;;18896:30;18962:33;18942:18;;;18935:61;19013:18;;5415:80:12::1;18682:355:14::0;5415:80:12::1;279:4;5522:9;:16;5513:6;:25;;;;:::i;:::-;:39;;5505:83;;;::::0;-1:-1:-1;;;5505:83:12;;13660:2:14;5505:83:12::1;::::0;::::1;13642:21:14::0;13699:2;13679:18;;;13672:30;13738:33;13718:18;;;13711:61;13789:18;;5505:83:12::1;13458:355:14::0;5505:83:12::1;5604:9;5599:225;5623:9;:16;5619:1;:20;5599:225;;;5684:4;5668:9;5678:1;5668:12;;;;;;;;:::i;:::-;;;;;;;:20;;:50;;;;;279:4;5692:9;5702:1;5692:12;;;;;;;;:::i;:::-;;;;;;;:26;;5668:50;5660:84;;;::::0;-1:-1:-1;;;5660:84:12;;19244:2:14;5660:84:12::1;::::0;::::1;19226:21:14::0;19283:2;19263:18;;;19256:30;19322:23;19302:18;;;19295:51;19363:18;;5660:84:12::1;19042:345:14::0;5660:84:12::1;5767:21;5775:9;5785:1;5775:12;;;;;;;;:::i;:::-;;;;;;;7085:4:3::0;7108:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7108:16:3;:30;;;7020:125;5767:21:12::1;5766:22;5758:55;;;::::0;-1:-1:-1;;;5758:55:12;;19594:2:14;5758:55:12::1;::::0;::::1;19576:21:14::0;19633:2;19613:18;;;19606:30;19672:22;19652:18;;;19645:50;19712:18;;5758:55:12::1;19392:344:14::0;5758:55:12::1;5641:3:::0;::::1;::::0;::::1;:::i;:::-;;;;5599:225;;;;5854:9;:16;5834;;:36;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;5885:9:12::1;::::0;-1:-1:-1;5880:100:12::1;5904:9;:16;5900:1;:20;5880:100;;;5941:28;5951:3;5956:9;5966:1;5956:12;;;;;;;;:::i;:::-;;;;;;;5941:9;:28::i;:::-;5922:3:::0;::::1;::::0;::::1;:::i;:::-;;;;5880:100;;499:37:::0;;;;;;;:::i;5992:426::-;7085:4:3;7108:16;;;:7;:16;;;;;;6065:13:12;;-1:-1:-1;;;;;7108:16:3;6090:113:12;;;;-1:-1:-1;;;6090:113:12;;19943:2:14;6090:113:12;;;19925:21:14;19982:2;19962:18;;;19955:30;20021:34;20001:18;;;19994:62;20092:20;20072:18;;;20065:48;20130:19;;6090:113:12;19741:414:14;6090:113:12;6214:28;6245:10;:8;:10::i;:::-;6214:41;;6303:1;6278:14;6272:28;:32;:139;;;;;;;;;;;;;;;;;6343:14;6359:18;:7;:16;:18::i;:::-;6379:13;6326:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6272:139;6265:146;5992:426;-1:-1:-1;;;5992:426:12:o;6660:126::-;1047:6:11;;-1:-1:-1;;;;;1047:6:11;666:10:1;1187:23:11;1179:68;;;;-1:-1:-1;;;1179:68:11;;9767:2:14;1179:68:11;;;9749:21:14;;;9786:18;;;9779:30;-1:-1:-1;;;;;;;;;;;9825:18:14;;;9818:62;9897:18;;1179:68:11;9565:356:14;1179:68:11;6746:33:12;;::::1;::::0;:13:::1;::::0;:33:::1;::::0;::::1;::::0;::::1;:::i;1857:198:11:-:0;1047:6;;-1:-1:-1;;;;;1047:6:11;666:10:1;1187:23:11;1179:68;;;;-1:-1:-1;;;1179:68:11;;9767:2:14;1179:68:11;;;9749:21:14;;;9786:18;;;9779:30;-1:-1:-1;;;;;;;;;;;9825:18:14;;;9818:62;9897:18;;1179:68:11;9565:356:14;1179:68:11;-1:-1:-1;;;;;1945:22:11;::::1;1937:73;;;::::0;-1:-1:-1;;;1937:73:11;;22020:2:14;1937:73:11::1;::::0;::::1;22002:21:14::0;22059:2;22039:18;;;22032:30;22098:34;22078:18;;;22071:62;-1:-1:-1;;;22149:18:14;;;22142:36;22195:19;;1937:73:11::1;21818:402:14::0;1937:73:11::1;2020:28;2039:8;2020:18;:28::i;1431:300:3:-:0;1533:4;-1:-1:-1;;;;;;1568:40:3;;-1:-1:-1;;;1568:40:3;;:104;;-1:-1:-1;;;;;;;1624:48:3;;-1:-1:-1;;;1624:48:3;1568:104;:156;;;-1:-1:-1;;;;;;;;;;871:40:2;;;1688:36:3;763:155:2;10871:171:3;10945:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;10945:29:3;-1:-1:-1;;;;;10945:29:3;;;;;;;;:24;;10998:23;10945:24;10998:14;:23::i;:::-;-1:-1:-1;;;;;10989:46:3;;;;;;;;;;;10871:171;;:::o;7303:344::-;7396:4;7108:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7108:16:3;7412:73;;;;-1:-1:-1;;;7412:73:3;;22427:2:14;7412:73:3;;;22409:21:14;22466:2;22446:18;;;22439:30;22505:34;22485:18;;;22478:62;-1:-1:-1;;;22556:18:14;;;22549:42;22608:19;;7412:73:3;22225:408:14;7412:73:3;7495:13;7511:23;7526:7;7511:14;:23::i;:::-;7495:39;;7563:5;-1:-1:-1;;;;;7552:16:3;:7;-1:-1:-1;;;;;7552:16:3;;:51;;;;7596:7;-1:-1:-1;;;;;7572:31:3;:20;7584:7;7572:11;:20::i;:::-;-1:-1:-1;;;;;7572:31:3;;7552:51;:87;;;-1:-1:-1;;;;;;4483:25:3;;;4460:4;4483:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;7607:32;7544:96;7303:344;-1:-1:-1;;;;7303:344:3:o;10200:560::-;10354:4;-1:-1:-1;;;;;10327:31:3;:23;10342:7;10327:14;:23::i;:::-;-1:-1:-1;;;;;10327:31:3;;10319:85;;;;-1:-1:-1;;;10319:85:3;;22840:2:14;10319:85:3;;;22822:21:14;22879:2;22859:18;;;22852:30;22918:34;22898:18;;;22891:62;-1:-1:-1;;;22969:18:14;;;22962:39;23018:19;;10319:85:3;22638:405:14;10319:85:3;-1:-1:-1;;;;;10422:16:3;;10414:65;;;;-1:-1:-1;;;10414:65:3;;23250:2:14;10414:65:3;;;23232:21:14;23289:2;23269:18;;;23262:30;23328:34;23308:18;;;23301:62;-1:-1:-1;;;23379:18:14;;;23372:34;23423:19;;10414:65:3;23048:400:14;10414:65:3;10490:39;10511:4;10517:2;10521:7;10490:20;:39::i;:::-;10591:29;10608:1;10612:7;10591:8;:29::i;:::-;-1:-1:-1;;;;;10631:15:3;;;;;;:9;:15;;;;;:20;;10650:1;;10631:15;:20;;10650:1;;10631:20;:::i;:::-;;;;-1:-1:-1;;;;;;;10661:13:3;;;;;;:9;:13;;;;;:18;;10678:1;;10661:13;:18;;10678:1;;10661:18;:::i;:::-;;;;-1:-1:-1;;10689:16:3;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;10689:21:3;-1:-1:-1;;;;;10689:21:3;;;;;;;;;10726:27;;10689:16;;10726:27;;;;;;;10200:560;;;:::o;1773:259:12:-;1902:43;;-1:-1:-1;;1927:4:12;23680:2:14;23676:15;;;23672:24;;1902:43:12;;;23660:37:14;1934:10:12;23731:15:14;;23727:24;23713:12;;;23706:46;1861:4:12;;;;23768:12:14;;1902:43:12;;;;;;;;;;;;1892:54;;;;;;1877:69;;1963:62;1982:6;1990:20;:28;2011:6;1990:28;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2020:4;1963:18;:62::i;7977:108:3:-;8052:26;8062:2;8066:7;8052:26;;;;;;;;;;;;:9;:26::i;7643:185:12:-;7716:12;7742:8;-1:-1:-1;;;;;7734:22:12;7764:7;7734:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7715:61;;;7794:7;7786:35;;;;-1:-1:-1;;;7786:35:12;;24203:2:14;7786:35:12;;;24185:21:14;24242:2;24222:18;;;24215:30;24281:17;24261:18;;;24254:45;24316:18;;7786:35:12;24001:339:14;2209:187:11;2301:6;;;-1:-1:-1;;;;;2317:17:11;;;-1:-1:-1;;;;;;2317:17:11;;;;;;;2349:40;;2301:6;;;2317:17;2301:6;;2349:40;;2282:16;;2349:40;2272:124;2209:187;:::o;11177:307:3:-;11327:8;-1:-1:-1;;;;;11318:17:3;:5;-1:-1:-1;;;;;11318:17:3;;;11310:55;;;;-1:-1:-1;;;11310:55:3;;24547:2:14;11310:55:3;;;24529:21:14;24586:2;24566:18;;;24559:30;24625:27;24605:18;;;24598:55;24670:18;;11310:55:3;24345:349:14;11310:55:3;-1:-1:-1;;;;;11375:25:3;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;11375:46:3;;;;;;;;;;11436:41;;540::14;;;11436::3;;513:18:14;11436:41:3;;;;;;;11177:307;;;:::o;6410:::-;6561:28;6571:4;6577:2;6581:7;6561:9;:28::i;:::-;6607:48;6630:4;6636:2;6640:7;6649:5;6607:22;:48::i;:::-;6599:111;;;;-1:-1:-1;;;6599:111:3;;24901:2:14;6599:111:3;;;24883:21:14;24940:2;24920:18;;;24913:30;24979:34;24959:18;;;24952:62;-1:-1:-1;;;25030:18:14;;;25023:48;25088:19;;6599:111:3;24699:414:14;7834:106:12;7894:13;7926:7;7919:14;;;;;:::i;275:703:13:-;331:13;548:10;544:51;;-1:-1:-1;;574:10:13;;;;;;;;;;;;-1:-1:-1;;;574:10:13;;;;;275:703::o;544:51::-;619:5;604:12;658:75;665:9;;658:75;;690:8;;;;:::i;:::-;;-1:-1:-1;712:10:13;;-1:-1:-1;720:2:13;712:10;;:::i;:::-;;;658:75;;;742:19;774:6;764:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;764:17:13;;742:39;;791:150;798:10;;791:150;;824:11;834:1;824:11;;:::i;:::-;;-1:-1:-1;892:10:13;900:2;892:5;:10;:::i;:::-;879:24;;:2;:24;:::i;:::-;866:39;;849:6;856;849:14;;;;;;;;:::i;:::-;;;;:56;;;;;;;;;;-1:-1:-1;919:11:13;928:2;919:11;;:::i;:::-;;;791:150;;2543:572:4;-1:-1:-1;;;;;2742:18:4;;2738:183;;2776:40;2808:7;3924:10;:17;;3897:24;;;;:15;:24;;;;;:44;;;3951:24;;;;;;;;;;;;3821:161;2776:40;2738:183;;;2845:2;-1:-1:-1;;;;;2837:10:4;:4;-1:-1:-1;;;;;2837:10:4;;2833:88;;2863:47;2896:4;2902:7;2863:32;:47::i;:::-;-1:-1:-1;;;;;2934:16:4;;2930:179;;2966:45;3003:7;2966:36;:45::i;2930:179::-;3038:4;-1:-1:-1;;;;;3032:10:4;:2;-1:-1:-1;;;;;3032:10:4;;3028:81;;3058:40;3086:2;3090:7;3058:27;:40::i;777:184:10:-;898:4;950;921:25;934:5;941:4;921:12;:25::i;:::-;:33;;777:184;-1:-1:-1;;;;777:184:10:o;8306:311:3:-;8431:18;8437:2;8441:7;8431:5;:18::i;:::-;8480:54;8511:1;8515:2;8519:7;8528:5;8480:22;:54::i;:::-;8459:151;;;;-1:-1:-1;;;8459:151:3;;24901:2:14;8459:151:3;;;24883:21:14;24940:2;24920:18;;;24913:30;24979:34;24959:18;;;24952:62;-1:-1:-1;;;25030:18:14;;;25023:48;25088:19;;8459:151:3;24699:414:14;12037:778:3;12187:4;-1:-1:-1;;;;;12207:13:3;;1034:20:0;1080:8;12203:606:3;;12242:72;;-1:-1:-1;;;12242:72:3;;-1:-1:-1;;;;;12242:36:3;;;;;:72;;666:10:1;;12293:4:3;;12299:7;;12308:5;;12242:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12242:72:3;;;;;;;;-1:-1:-1;;12242:72:3;;;;;;;;;;;;:::i;:::-;;;12238:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12481:13:3;;12477:266;;12523:60;;-1:-1:-1;;;12523:60:3;;24901:2:14;12523:60:3;;;24883:21:14;24940:2;24920:18;;;24913:30;24979:34;24959:18;;;24952:62;-1:-1:-1;;;25030:18:14;;;25023:48;25088:19;;12523:60:3;24699:414:14;12477:266:3;12695:6;12689:13;12680:6;12676:2;12672:15;12665:38;12238:519;-1:-1:-1;;;;;;12364:51:3;-1:-1:-1;;;12364:51:3;;-1:-1:-1;12357:58:3;;12203:606;-1:-1:-1;12794:4:3;12037:778;;;;;;:::o;4599:970:4:-;4861:22;4911:1;4886:22;4903:4;4886:16;:22::i;:::-;:26;;;;:::i;:::-;4922:18;4943:26;;;:17;:26;;;;;;4861:51;;-1:-1:-1;5073:28:4;;;5069:323;;-1:-1:-1;;;;;5139:18:4;;5117:19;5139:18;;;:12;:18;;;;;;;;:34;;;;;;;;;5188:30;;;;;;:44;;;5304:30;;:17;:30;;;;;:43;;;5069:323;-1:-1:-1;5485:26:4;;;;:17;:26;;;;;;;;5478:33;;;-1:-1:-1;;;;;5528:18:4;;;;;:12;:18;;;;;:34;;;;;;;5521:41;4599:970::o;5857:1061::-;6131:10;:17;6106:22;;6131:21;;6151:1;;6131:21;:::i;:::-;6162:18;6183:24;;;:15;:24;;;;;;6551:10;:26;;6106:46;;-1:-1:-1;6183:24:4;;6106:46;;6551:26;;;;;;:::i;:::-;;;;;;;;;6529:48;;6613:11;6588:10;6599;6588:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;6692:28;;;:15;:28;;;;;;;:41;;;6861:24;;;;;6854:31;6895:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;5928:990;;;5857:1061;:::o;3409:217::-;3493:14;3510:20;3527:2;3510:16;:20::i;:::-;-1:-1:-1;;;;;3540:16:4;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;3584:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;3409:217:4:o;1313:688:10:-;1396:7;1438:4;1396:7;1452:514;1476:5;:12;1472:1;:16;1452:514;;;1509:20;1532:5;1538:1;1532:8;;;;;;;;:::i;:::-;;;;;;;1509:31;;1574:12;1558;:28;1554:402;;1709:44;;;;;;26552:19:14;;;26587:12;;;26580:28;;;26624:12;;1709:44:10;;;;;;;;;;;;1699:55;;;;;;1684:70;;1554:402;;;1896:44;;;;;;26552:19:14;;;26587:12;;;26580:28;;;26624:12;;1896:44:10;;;;;;;;;;;;1886:55;;;;;;1871:70;;1554:402;-1:-1:-1;1490:3:10;;;;:::i;:::-;;;;1452:514;;;-1:-1:-1;1982:12:10;1313:688;-1:-1:-1;;;1313:688:10:o;8939:372:3:-;-1:-1:-1;;;;;9018:16:3;;9010:61;;;;-1:-1:-1;;;9010:61:3;;26849:2:14;9010:61:3;;;26831:21:14;;;26868:18;;;26861:30;26927:34;26907:18;;;26900:62;26979:18;;9010:61:3;26647:356:14;9010:61:3;7085:4;7108:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7108:16:3;:30;9081:58;;;;-1:-1:-1;;;9081:58:3;;27210:2:14;9081:58:3;;;27192:21:14;27249:2;27229:18;;;27222:30;27288;27268:18;;;27261:58;27336:18;;9081:58:3;27008:352:14;9081:58:3;9150:45;9179:1;9183:2;9187:7;9150:20;:45::i;:::-;-1:-1:-1;;;;;9206:13:3;;;;;;:9;:13;;;;;:18;;9223:1;;9206:13;:18;;9223:1;;9206:18;:::i;:::-;;;;-1:-1:-1;;9234:16:3;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;9234:21:3;-1:-1:-1;;;;;9234:21:3;;;;;;;;9271:33;;9234:16;;;9271:33;;9234:16;;9271:33;8939:372;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:14;-1:-1:-1;;;;;;88:32:14;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:160::-;657:20;;713:13;;706:21;696:32;;686:60;;742:1;739;732:12;686:60;592:160;;;:::o;757:180::-;813:6;866:2;854:9;845:7;841:23;837:32;834:52;;;882:1;879;872:12;834:52;905:26;921:9;905:26;:::i;942:258::-;1014:1;1024:113;1038:6;1035:1;1032:13;1024:113;;;1114:11;;;1108:18;1095:11;;;1088:39;1060:2;1053:10;1024:113;;;1155:6;1152:1;1149:13;1146:48;;;-1:-1:-1;;1190:1:14;1172:16;;1165:27;942:258::o;1205:::-;1247:3;1285:5;1279:12;1312:6;1307:3;1300:19;1328:63;1384:6;1377:4;1372:3;1368:14;1361:4;1354:5;1350:16;1328:63;:::i;:::-;1445:2;1424:15;-1:-1:-1;;1420:29:14;1411:39;;;;1452:4;1407:50;;1205:258;-1:-1:-1;;1205:258:14:o;1468:220::-;1617:2;1606:9;1599:21;1580:4;1637:45;1678:2;1667:9;1663:18;1655:6;1637:45;:::i;1693:180::-;1752:6;1805:2;1793:9;1784:7;1780:23;1776:32;1773:52;;;1821:1;1818;1811:12;1773:52;-1:-1:-1;1844:23:14;;1693:180;-1:-1:-1;1693:180:14:o;2109:196::-;2177:20;;-1:-1:-1;;;;;2226:54:14;;2216:65;;2206:93;;2295:1;2292;2285:12;2310:254;2378:6;2386;2439:2;2427:9;2418:7;2414:23;2410:32;2407:52;;;2455:1;2452;2445:12;2407:52;2478:29;2497:9;2478:29;:::i;:::-;2468:39;2554:2;2539:18;;;;2526:32;;-1:-1:-1;;;2310:254:14:o;2751:328::-;2828:6;2836;2844;2897:2;2885:9;2876:7;2872:23;2868:32;2865:52;;;2913:1;2910;2903:12;2865:52;2936:29;2955:9;2936:29;:::i;:::-;2926:39;;2984:38;3018:2;3007:9;3003:18;2984:38;:::i;:::-;2974:48;;3069:2;3058:9;3054:18;3041:32;3031:42;;2751:328;;;;;:::o;3084:150::-;3159:20;;3208:1;3198:12;;3188:40;;3224:1;3221;3214:12;3239:281;3321:6;3329;3382:2;3370:9;3361:7;3357:23;3353:32;3350:52;;;3398:1;3395;3388:12;3350:52;3421:36;3447:9;3421:36;:::i;:::-;3411:46;;3476:38;3510:2;3499:9;3495:18;3476:38;:::i;:::-;3466:48;;3239:281;;;;;:::o;3525:207::-;3598:6;3651:2;3639:9;3630:7;3626:23;3622:32;3619:52;;;3667:1;3664;3657:12;3619:52;3690:36;3716:9;3690:36;:::i;3737:127::-;3798:10;3793:3;3789:20;3786:1;3779:31;3829:4;3826:1;3819:15;3853:4;3850:1;3843:15;3869:275;3940:2;3934:9;4005:2;3986:13;;-1:-1:-1;;3982:27:14;3970:40;;4040:18;4025:34;;4061:22;;;4022:62;4019:88;;;4087:18;;:::i;:::-;4123:2;4116:22;3869:275;;-1:-1:-1;3869:275:14:o;4149:183::-;4209:4;4242:18;4234:6;4231:30;4228:56;;;4264:18;;:::i;:::-;-1:-1:-1;4309:1:14;4305:14;4321:4;4301:25;;4149:183::o;4337:959::-;4430:6;4438;4491:2;4479:9;4470:7;4466:23;4462:32;4459:52;;;4507:1;4504;4497:12;4459:52;4543:9;4530:23;4520:33;;4572:2;4625;4614:9;4610:18;4597:32;4652:18;4644:6;4641:30;4638:50;;;4684:1;4681;4674:12;4638:50;4707:22;;4760:4;4752:13;;4748:27;-1:-1:-1;4738:55:14;;4789:1;4786;4779:12;4738:55;4825:2;4812:16;4848:60;4864:43;4904:2;4864:43;:::i;:::-;4848:60;:::i;:::-;4942:15;;;5024:1;5020:10;;;;5012:19;;5008:28;;;4973:12;;;;5048:19;;;5045:39;;;5080:1;5077;5070:12;5045:39;5104:11;;;;5124:142;5140:6;5135:3;5132:15;5124:142;;;5206:17;;5194:30;;5157:12;;;;5244;;;;5124:142;;;5285:5;5275:15;;;;;;;4337:959;;;;;:::o;5301:407::-;5366:5;5400:18;5392:6;5389:30;5386:56;;;5422:18;;:::i;:::-;5460:57;5505:2;5484:15;;-1:-1:-1;;5480:29:14;5511:4;5476:40;5460:57;:::i;:::-;5451:66;;5540:6;5533:5;5526:21;5580:3;5571:6;5566:3;5562:16;5559:25;5556:45;;;5597:1;5594;5587:12;5556:45;5646:6;5641:3;5634:4;5627:5;5623:16;5610:43;5700:1;5693:4;5684:6;5677:5;5673:18;5669:29;5662:40;5301:407;;;;;:::o;5713:451::-;5782:6;5835:2;5823:9;5814:7;5810:23;5806:32;5803:52;;;5851:1;5848;5841:12;5803:52;5891:9;5878:23;5924:18;5916:6;5913:30;5910:50;;;5956:1;5953;5946:12;5910:50;5979:22;;6032:4;6024:13;;6020:27;-1:-1:-1;6010:55:14;;6061:1;6058;6051:12;6010:55;6084:74;6150:7;6145:2;6132:16;6127:2;6123;6119:11;6084:74;:::i;6169:186::-;6228:6;6281:2;6269:9;6260:7;6256:23;6252:32;6249:52;;;6297:1;6294;6287:12;6249:52;6320:29;6339:9;6320:29;:::i;6360:275::-;6442:6;6450;6503:2;6491:9;6482:7;6478:23;6474:32;6471:52;;;6519:1;6516;6509:12;6471:52;6542:36;6568:9;6542:36;:::i;6920:254::-;6985:6;6993;7046:2;7034:9;7025:7;7021:23;7017:32;7014:52;;;7062:1;7059;7052:12;7014:52;7085:29;7104:9;7085:29;:::i;:::-;7075:39;;7133:35;7164:2;7153:9;7149:18;7133:35;:::i;7179:667::-;7274:6;7282;7290;7298;7351:3;7339:9;7330:7;7326:23;7322:33;7319:53;;;7368:1;7365;7358:12;7319:53;7391:29;7410:9;7391:29;:::i;:::-;7381:39;;7439:38;7473:2;7462:9;7458:18;7439:38;:::i;:::-;7429:48;;7524:2;7513:9;7509:18;7496:32;7486:42;;7579:2;7568:9;7564:18;7551:32;7606:18;7598:6;7595:30;7592:50;;;7638:1;7635;7628:12;7592:50;7661:22;;7714:4;7706:13;;7702:27;-1:-1:-1;7692:55:14;;7743:1;7740;7733:12;7692:55;7766:74;7832:7;7827:2;7814:16;7809:2;7805;7801:11;7766:74;:::i;:::-;7756:84;;;7179:667;;;;;;;:::o;7851:965::-;7944:6;7952;8005:2;7993:9;7984:7;7980:23;7976:32;7973:52;;;8021:1;8018;8011:12;7973:52;8044:29;8063:9;8044:29;:::i;:::-;8034:39;;8092:2;8145;8134:9;8130:18;8117:32;8172:18;8164:6;8161:30;8158:50;;;8204:1;8201;8194:12;8821:127;8882:10;8877:3;8873:20;8870:1;8863:31;8913:4;8910:1;8903:15;8937:4;8934:1;8927:15;8953:342;9099:2;9084:18;;9132:1;9121:13;;9111:144;;9177:10;9172:3;9168:20;9165:1;9158:31;9212:4;9209:1;9202:15;9240:4;9237:1;9230:15;9111:144;9264:25;;;8953:342;:::o;9300:260::-;9368:6;9376;9429:2;9417:9;9408:7;9404:23;9400:32;9397:52;;;9445:1;9442;9435:12;9397:52;9468:29;9487:9;9468:29;:::i;9926:380::-;10005:1;10001:12;;;;10048;;;10069:61;;10123:4;10115:6;10111:17;10101:27;;10069:61;10176:2;10168:6;10165:14;10145:18;10142:38;10139:161;;;10222:10;10217:3;10213:20;10210:1;10203:31;10257:4;10254:1;10247:15;10285:4;10282:1;10275:15;10139:161;;9926:380;;;:::o;13063:127::-;13124:10;13119:3;13115:20;13112:1;13105:31;13155:4;13152:1;13145:15;13179:4;13176:1;13169:15;13195:125;13235:4;13263:1;13260;13257:8;13254:34;;;13268:18;;:::i;:::-;-1:-1:-1;13305:9:14;;13195:125::o;13325:128::-;13365:3;13396:1;13392:6;13389:1;13386:13;13383:39;;;13402:18;;:::i;:::-;-1:-1:-1;13438:9:14;;13325:128::o;15299:168::-;15339:7;15405:1;15401;15397:6;15393:14;15390:1;15387:21;15382:1;15375:9;15368:17;15364:45;15361:71;;;15412:18;;:::i;:::-;-1:-1:-1;15452:9:14;;15299:168::o;15818:135::-;15857:3;-1:-1:-1;;15878:17:14;;15875:43;;;15898:18;;:::i;:::-;-1:-1:-1;15945:1:14;15934:13;;15818:135::o;16371:127::-;16432:10;16427:3;16423:20;16420:1;16413:31;16463:4;16460:1;16453:15;16487:4;16484:1;16477:15;20286:1527;20510:3;20548:6;20542:13;20574:4;20587:51;20631:6;20626:3;20621:2;20613:6;20609:15;20587:51;:::i;:::-;20701:13;;20660:16;;;;20723:55;20701:13;20660:16;20745:15;;;20723:55;:::i;:::-;20867:13;;20800:20;;;20840:1;;20927;20949:18;;;;21002;;;;21029:93;;21107:4;21097:8;21093:19;21081:31;;21029:93;21170:2;21160:8;21157:16;21137:18;21134:40;21131:167;;;-1:-1:-1;;;21197:33:14;;21253:4;21250:1;21243:15;21283:4;21204:3;21271:17;21131:167;21314:18;21341:110;;;;21465:1;21460:328;;;;21307:481;;21341:110;-1:-1:-1;;21376:24:14;;21362:39;;21421:20;;;;-1:-1:-1;21341:110:14;;21460:328;20233:1;20226:14;;;20270:4;20257:18;;21555:1;21569:169;21583:8;21580:1;21577:15;21569:169;;;21665:14;;21650:13;;;21643:37;21708:16;;;;21600:10;;21569:169;;;21573:3;;21769:8;21762:5;21758:20;21751:27;;21307:481;-1:-1:-1;21804:3:14;;20286:1527;-1:-1:-1;;;;;;;;;;;20286:1527:14:o;25118:127::-;25179:10;25174:3;25170:20;25167:1;25160:31;25210:4;25207:1;25200:15;25234:4;25231:1;25224:15;25250:120;25290:1;25316;25306:35;;25321:18;;:::i;:::-;-1:-1:-1;25355:9:14;;25250:120::o;25375:112::-;25407:1;25433;25423:35;;25438:18;;:::i;:::-;-1:-1:-1;25472:9:14;;25375:112::o;25492:512::-;25686:4;-1:-1:-1;;;;;25796:2:14;25788:6;25784:15;25773:9;25766:34;25848:2;25840:6;25836:15;25831:2;25820:9;25816:18;25809:43;;25888:6;25883:2;25872:9;25868:18;25861:34;25931:3;25926:2;25915:9;25911:18;25904:31;25952:46;25993:3;25982:9;25978:19;25970:6;25952:46;:::i;:::-;25944:54;25492:512;-1:-1:-1;;;;;;25492:512:14:o;26009:249::-;26078:6;26131:2;26119:9;26110:7;26106:23;26102:32;26099:52;;;26147:1;26144;26137:12;26099:52;26179:9;26173:16;26198:30;26222:5;26198:30;:::i;26263:127::-;26324:10;26319:3;26315:20;26312:1;26305:31;26355:4;26352:1;26345:15;26379:4;26376:1;26369:15
Swarm Source
ipfs://d8666ea32dd65a5b905ffafcc544d3cfc508eecfd0a2dedd0c2640d8889a7412
Loading...
Loading
Loading...
Loading
[ 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.