Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 416 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 21352694 | 21 days ago | IN | 0 ETH | 0.00075369 | ||||
Set Approval For... | 21131453 | 52 days ago | IN | 0 ETH | 0.00113965 | ||||
Set Approval For... | 19392216 | 295 days ago | IN | 0 ETH | 0.00313762 | ||||
Set Approval For... | 18607273 | 405 days ago | IN | 0 ETH | 0.00103779 | ||||
Set Approval For... | 18509052 | 419 days ago | IN | 0 ETH | 0.00101344 | ||||
Set Approval For... | 17122883 | 614 days ago | IN | 0 ETH | 0.00162936 | ||||
Set Approval For... | 16878196 | 648 days ago | IN | 0 ETH | 0.000494 | ||||
Set Approval For... | 16646539 | 681 days ago | IN | 0 ETH | 0.00116559 | ||||
Set Approval For... | 16576359 | 691 days ago | IN | 0 ETH | 0.0005137 | ||||
Set Approval For... | 16500298 | 701 days ago | IN | 0 ETH | 0.00106369 | ||||
Set Approval For... | 16320114 | 726 days ago | IN | 0 ETH | 0.00077764 | ||||
Set Approval For... | 16300439 | 729 days ago | IN | 0 ETH | 0.00086344 | ||||
Transfer From | 16299142 | 729 days ago | IN | 0 ETH | 0.00184587 | ||||
Transfer From | 16298501 | 729 days ago | IN | 0 ETH | 0.00164635 | ||||
Set Approval For... | 16298439 | 729 days ago | IN | 0 ETH | 0.00090629 | ||||
Set Approval For... | 16263760 | 734 days ago | IN | 0 ETH | 0.00035369 | ||||
Set Approval For... | 16039517 | 765 days ago | IN | 0 ETH | 0.0005876 | ||||
Set Approval For... | 16009806 | 770 days ago | IN | 0 ETH | 0.00056892 | ||||
Transfer From | 15991530 | 772 days ago | IN | 0 ETH | 0.00222637 | ||||
Safe Transfer Fr... | 15991464 | 772 days ago | IN | 0 ETH | 0.0025549 | ||||
Transfer From | 15991418 | 772 days ago | IN | 0 ETH | 0.00163372 | ||||
Safe Transfer Fr... | 15991201 | 772 days ago | IN | 0 ETH | 0.00174848 | ||||
Transfer From | 15991165 | 772 days ago | IN | 0 ETH | 0.00171129 | ||||
Safe Transfer Fr... | 15991115 | 772 days ago | IN | 0 ETH | 0.00233036 | ||||
Set Approval For... | 15968256 | 775 days ago | IN | 0 ETH | 0.00043322 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
XOXO_Love_stories_By_Maya_and_Yehuda_Devir
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT // @author: Exotic Technology LTD pragma solidity ^0.8.0; import "./ERC721.sol"; import "./ownable.sol"; import "./ERC721enumerable.sol"; contract XOXO_Love_stories_By_Maya_and_Yehuda_Devir is Ownable, ERC721, ERC721Enumerable { string public PROVENANCE; bool public saleIsActive = false; uint256 constant public MAX_TOKEN = 101; uint256 constant public MAX_PUBLIC_MINT = 1; uint256 public royalty = 80; uint256 public startingIndex = 0; uint256 public startingIndexBlock = 0; string private _baseURIextended; mapping(address => bool) private minters; mapping(address => bool) private senders; constructor() ERC721("XOXOLVS", "LVS") { _doMint(1, msg.sender); _baseURIextended = "ipfs://Qmact5RDcmfLizG4HY1t2uZPeDNLnSiyAYrDL8rQoZiTwH/"; //cover senders[msg.sender] = true; // add owner } function SetStartingIndexBlock() public onlyOwner { require(startingIndex == 0, "Starting index is already set"); startingIndexBlock = block.number; } function setStartingIndex() public onlyOwner { require(startingIndex == 0, "Starting index is already set"); require(startingIndexBlock != 0, "Starting index block must be set"); startingIndex = uint(blockhash(startingIndexBlock)) % (MAX_TOKEN); // Just a sanity case in the worst case if this function is called late (EVM only stores last 256 block hashes) if (block.number - startingIndexBlock > 255) { startingIndex = uint(blockhash(block.number - 1)) % (MAX_TOKEN); } // Prevent default sequence if (startingIndex == 0) { startingIndex++; } } function addSender(address _address) public onlyOwner { require(_address != address(0)); senders[_address] = true; } function removeSender(address _address) public onlyOwner { require(_address != address(0)); senders[_address] = false; } function getStartingIndex() public view returns(uint){ return startingIndex; } function getStartingblock() public view returns(uint){ return startingIndexBlock; } function royaltyInfo( uint256 _tokenId, uint256 _salePrice ) external view override returns ( address receiver, uint256 royaltyAmount ){ require(_exists(_tokenId)); return (owner(), uint256(royalty * _salePrice / 1000)); } function flipSaleState() public { require(senders[_msgSender()], "not confirmed"); saleIsActive = !saleIsActive; } function updateRoyalty(uint newRoyalty) public onlyOwner { royalty = newRoyalty ; } function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721, ERC721Enumerable) { super._beforeTokenTransfer(from, to, tokenId); } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); } function setBaseURI(string memory baseURI_) external { require(senders[_msgSender()], "not confirmed to send"); _baseURIextended = baseURI_; } function _baseURI() internal view virtual override returns (string memory) { return _baseURIextended; } function setProvenance(string memory provenance) public onlyOwner { PROVENANCE = provenance; } function getSaleState() public view returns (bool) { return saleIsActive; } function _doMint(uint numberOfTokens, address _target)private { minters[_msgSender()]= true; uint256 t = totalSupply(); for (uint256 i = 0; i < numberOfTokens; i++) { _safeMint(_target, t + i); } } function _confirmMint() private view returns (bool) { uint256 ts = totalSupply(); uint256 msBalance = balanceOf(_msgSender()); require(!minters[_msgSender()],"already minted"); require(!Address.isContract(_msgSender()),"no contract"); require(msBalance < MAX_PUBLIC_MINT, "only 1"); require(saleIsActive, "sale closed"); require(ts + 1 <= MAX_TOKEN, "max tokens"); return true; } function AnotherStoryBorn() public payable { require(_confirmMint(), "sale closed"); _doMint(1, _msgSender()); } function withdraw() public onlyOwner { uint balance = address(this).balance; payable(msg.sender).transfer(balance); } function transferOwnership(address newOwner) public override onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } } /* %%%%%* /%%%%* %%% %% .%% %% %% % %% % %% % .% @@@@@@@@@@@@@@@@@@@@@ @@@@ %% @@@ @@@ @@@ , % @@@ @@@ @@@ %% &&& &@@@ @@@ % % &&& @@@@ @@@ ,% &&&&&&&&&&&&&&&&&&&%%(. @@@@@ % %%% @@@@@@@ % %%% @@@@ @@@@ %% %%% @@@@ @@@ % %% %%% @@@ @@@ % %% %%% @@@ @@@ % %% %%%%%%%%%%%%%%%%@@@ @@@@ % %% % %% % %% % %%% %% %%% %%# #%%%%%%% */
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// 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 // OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; import "./ERC165.sol"; import "./IERC721.sol"; import "./IERC721receiver.sol"; import "./IERC721metadata.sol"; import "./IERC2981.sol"; import "./address.sol"; import "./context.sol"; import "./strings.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, IERC2981 { 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 || interfaceId == type(IERC2981).interfaceId || interfaceId == type(IERC165).interfaceId; } function royaltyInfo( uint256 _tokenId, uint256 _salePrice ) external view virtual override returns ( address receiver, uint256 royaltyAmount ){ } /** * @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); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits 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 {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} }
// 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 // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /// /// @dev Interface for the NFT Royalty Standard /// interface IERC2981 is IERC165 { /// ERC165 bytes to add to interface array - set in parent contract /// implementing this standard /// /// bytes4(keccak256("royaltyInfo(uint256,uint256)")) == 0x2a55205a /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a; /// _registerInterface(_INTERFACE_ID_ERC2981); /// @notice Called with the sale price to determine how much royalty // is owed and to whom. /// @param _tokenId - the NFT asset queried for royalty information /// @param _salePrice - the sale price of the NFT asset specified by _tokenId /// @return receiver - address of who should be sent the royalty payment /// @return royaltyAmount - the royalty payment amount for _salePrice function royaltyInfo( uint256 _tokenId, uint256 _salePrice ) external view returns ( address receiver, uint256 royaltyAmount ); }
// 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; interface IERC721Metadata { /** * @dev Returns a descriptive name for a collection of NFTs in this contract. * @return _name Representing name. */ function name() external view returns (string memory _name); /** * @dev Returns a abbreviated name for a collection of NFTs in this contract. * @return _symbol Representing symbol. */ function symbol() external view returns (string memory _symbol); /** * @dev Returns a distinct Uniform Resource Identifier (URI) for a given asset. It Throws if * `_tokenId` is not a valid NFT. URIs are defined in RFC3986. The URI may point to a JSON file * that conforms to the "ERC721 Metadata JSON Schema". * @return URI of _tokenId. */ function tokenURI(uint256 _tokenId) external view returns (string memory); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.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; 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 // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"AnotherStoryBorn","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"MAX_PUBLIC_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOKEN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROVENANCE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SetStartingIndexBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addSender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSaleState","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStartingIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStartingblock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeSender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"royalty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"provenance","type":"string"}],"name":"setProvenance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setStartingIndex","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startingIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startingIndexBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"uint256","name":"newRoyalty","type":"uint256"}],"name":"updateRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600c60006101000a81548160ff0219169083151502179055506050600d556000600e556000600f553480156200003b57600080fd5b506040518060400160405280600781526020017f584f584f4c5653000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4c56530000000000000000000000000000000000000000000000000000000000815250620000c8620000bc6200019f60201b60201c565b620001a760201b60201c565b8160019080519060200190620000e092919062000d68565b508060029080519060200190620000f992919062000d68565b5050506200010f6001336200026b60201b60201c565b60405180606001604052806036815260200162005ecb60369139601090805190602001906200014092919062000d68565b506001601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062001401565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600160116000620002816200019f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000620002e46200032d60201b60201c565b905060005b8381101562000327576200031183828462000305919062001069565b6200033a60201b60201c565b80806200031e90620011d7565b915050620002e9565b50505050565b6000600980549050905090565b6200035c8282604051806020016040528060008152506200036060201b60201c565b5050565b620003728383620003ce60201b60201c565b620003876000848484620005c860201b60201c565b620003c9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003c09062000fb4565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000438906200101a565b60405180910390fd5b62000452816200078260201b60201c565b1562000495576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200048c9062000fd6565b60405180910390fd5b620004a960008383620007ee60201b60201c565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620004fb919062001069565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4620005c4600083836200080b60201b60201c565b5050565b6000620005f68473ffffffffffffffffffffffffffffffffffffffff166200081060201b62001b811760201c565b1562000775578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620006286200019f60201b60201c565b8786866040518563ffffffff1660e01b81526004016200064c949392919062000f60565b602060405180830381600087803b1580156200066757600080fd5b505af19250505080156200069b57506040513d601f19601f8201168201806040525081019062000698919062000e2f565b60015b62000724573d8060008114620006ce576040519150601f19603f3d011682016040523d82523d6000602084013e620006d3565b606091505b506000815114156200071c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007139062000fb4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506200077a565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b620008068383836200083360201b62001ba41760201c565b505050565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6200084b8383836200097a60201b62001cb81760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620008985762000892816200097f60201b60201c565b620008e0565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614620008df57620008de8382620009c860201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200092d57620009278162000b4560201b60201c565b62000975565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620009745762000973828262000c2160201b60201c565b5b5b505050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001620009e28462000cad60201b6200112a1760201c565b620009ee9190620010c6565b905060006008600084815260200190815260200160002054905081811462000ad4576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160098054905062000b5b9190620010c6565b90506000600a600084815260200190815260200160002054905060006009838154811062000b8e5762000b8d620012b2565b5b90600052602060002001549050806009838154811062000bb35762000bb2620012b2565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a600085815260200190815260200160002060009055600980548062000c055762000c0462001283565b5b6001900381819060005260206000200160009055905550505050565b600062000c398362000cad60201b6200112a1760201c565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000d21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d189062000ff8565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000d7690620011a1565b90600052602060002090601f01602090048101928262000d9a576000855562000de6565b82601f1062000db557805160ff191683800117855562000de6565b8280016001018555821562000de6579182015b8281111562000de557825182559160200191906001019062000dc8565b5b50905062000df5919062000df9565b5090565b5b8082111562000e1457600081600090555060010162000dfa565b5090565b60008151905062000e2981620013e7565b92915050565b60006020828403121562000e485762000e47620012e1565b5b600062000e588482850162000e18565b91505092915050565b62000e6c8162001101565b82525050565b600062000e7f826200103c565b62000e8b818562001047565b935062000e9d8185602086016200116b565b62000ea881620012e6565b840191505092915050565b600062000ec260328362001058565b915062000ecf82620012f7565b604082019050919050565b600062000ee9601c8362001058565b915062000ef68262001346565b602082019050919050565b600062000f10602a8362001058565b915062000f1d826200136f565b604082019050919050565b600062000f3760208362001058565b915062000f4482620013be565b602082019050919050565b62000f5a8162001161565b82525050565b600060808201905062000f77600083018762000e61565b62000f86602083018662000e61565b62000f95604083018562000f4f565b818103606083015262000fa9818462000e72565b905095945050505050565b6000602082019050818103600083015262000fcf8162000eb3565b9050919050565b6000602082019050818103600083015262000ff18162000eda565b9050919050565b60006020820190508181036000830152620010138162000f01565b9050919050565b60006020820190508181036000830152620010358162000f28565b9050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000620010768262001161565b9150620010838362001161565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620010bb57620010ba62001225565b5b828201905092915050565b6000620010d38262001161565b9150620010e08362001161565b925082821015620010f657620010f562001225565b5b828203905092915050565b60006200110e8262001141565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200118b5780820151818401526020810190506200116e565b838111156200119b576000848401525b50505050565b60006002820490506001821680620011ba57607f821691505b60208210811415620011d157620011d062001254565b5b50919050565b6000620011e48262001161565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156200121a576200121962001225565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b620013f28162001115565b8114620013fe57600080fd5b50565b614aba80620014116000396000f3fe60806040526004361061023b5760003560e01c80636e1bd3231161012e578063bc82ebe0116100ab578063e985e9c51161006f578063e985e9c51461082f578063e98665501461086c578063eb8d244414610883578063f2fde38b146108ae578063ffe630b5146108d75761023b565b8063bc82ebe01461075a578063c87b56dd14610771578063cb774d47146107ae578063cc221a46146107d9578063e36d6498146108045761023b565b806395d89b41116100f257806395d89b411461068b578063a22cb465146106b6578063b2f87643146106df578063b697f53114610708578063b88d4fde146107315761023b565b80636e1bd323146105b857806370a08231146105e3578063715018a6146106205780638da5cb5b146106375780638fffd8b5146106625761023b565b80632f745c59116101bc57806355f804b31161018057806355f804b3146104f25780635c00135a1461051b5780636352211e146105255780636373a6b11461056257806365f130971461058d5761023b565b80632f745c591461042157806334918dfd1461045e5780633ccfd60b1461047557806342842e0e1461048c5780634f6ccce7146104b55761023b565b80632313a436116102035780632313a4361461033957806323b872dd1461036457806325bdb2a81461038d57806329ee566c146103b85780632a55205a146103e35761023b565b806301ffc9a71461024057806306fdde031461027d578063081812fc146102a8578063095ea7b3146102e557806318160ddd1461030e575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190613513565b610900565b6040516102749190613b58565b60405180910390f35b34801561028957600080fd5b50610292610912565b60405161029f9190613b73565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca91906135b6565b6109a4565b6040516102dc9190613ac8565b60405180910390f35b3480156102f157600080fd5b5061030c600480360381019061030791906134d3565b610a29565b005b34801561031a57600080fd5b50610323610b41565b6040516103309190613ef5565b60405180910390f35b34801561034557600080fd5b5061034e610b4e565b60405161035b9190613ef5565b60405180910390f35b34801561037057600080fd5b5061038b600480360381019061038691906133bd565b610b58565b005b34801561039957600080fd5b506103a2610bb8565b6040516103af9190613b58565b60405180910390f35b3480156103c457600080fd5b506103cd610bcf565b6040516103da9190613ef5565b60405180910390f35b3480156103ef57600080fd5b5061040a600480360381019061040591906135e3565b610bd5565b604051610418929190613b2f565b60405180910390f35b34801561042d57600080fd5b50610448600480360381019061044391906134d3565b610c18565b6040516104559190613ef5565b60405180910390f35b34801561046a57600080fd5b50610473610cbd565b005b34801561048157600080fd5b5061048a610d7c565b005b34801561049857600080fd5b506104b360048036038101906104ae91906133bd565b610e47565b005b3480156104c157600080fd5b506104dc60048036038101906104d791906135b6565b610e67565b6040516104e99190613ef5565b60405180910390f35b3480156104fe57600080fd5b506105196004803603810190610514919061356d565b610ed8565b005b610523610f85565b005b34801561053157600080fd5b5061054c600480360381019061054791906135b6565b610fe0565b6040516105599190613ac8565b60405180910390f35b34801561056e57600080fd5b50610577611092565b6040516105849190613b73565b60405180910390f35b34801561059957600080fd5b506105a2611120565b6040516105af9190613ef5565b60405180910390f35b3480156105c457600080fd5b506105cd611125565b6040516105da9190613ef5565b60405180910390f35b3480156105ef57600080fd5b5061060a60048036038101906106059190613350565b61112a565b6040516106179190613ef5565b60405180910390f35b34801561062c57600080fd5b506106356111e2565b005b34801561064357600080fd5b5061064c61126a565b6040516106599190613ac8565b60405180910390f35b34801561066e57600080fd5b50610689600480360381019061068491906135b6565b611293565b005b34801561069757600080fd5b506106a0611319565b6040516106ad9190613b73565b60405180910390f35b3480156106c257600080fd5b506106dd60048036038101906106d89190613493565b6113ab565b005b3480156106eb57600080fd5b5061070660048036038101906107019190613350565b6113c1565b005b34801561071457600080fd5b5061072f600480360381019061072a9190613350565b6114d2565b005b34801561073d57600080fd5b5061075860048036038101906107539190613410565b6115e3565b005b34801561076657600080fd5b5061076f611645565b005b34801561077d57600080fd5b50610798600480360381019061079391906135b6565b61170f565b6040516107a59190613b73565b60405180910390f35b3480156107ba57600080fd5b506107c36117b6565b6040516107d09190613ef5565b60405180910390f35b3480156107e557600080fd5b506107ee6117bc565b6040516107fb9190613ef5565b60405180910390f35b34801561081057600080fd5b506108196117c6565b6040516108269190613ef5565b60405180910390f35b34801561083b57600080fd5b506108566004803603810190610851919061337d565b6117cc565b6040516108639190613b58565b60405180910390f35b34801561087857600080fd5b50610881611860565b005b34801561088f57600080fd5b506108986119e0565b6040516108a59190613b58565b60405180910390f35b3480156108ba57600080fd5b506108d560048036038101906108d09190613350565b6119f3565b005b3480156108e357600080fd5b506108fe60048036038101906108f9919061356d565b611aeb565b005b600061090b82611cbd565b9050919050565b606060018054610921906141a5565b80601f016020809104026020016040519081016040528092919081815260200182805461094d906141a5565b801561099a5780601f1061096f5761010080835404028352916020019161099a565b820191906000526020600020905b81548152906001019060200180831161097d57829003601f168201915b5050505050905090565b60006109af82611d37565b6109ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e590613dd5565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a3482610fe0565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9c90613e35565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ac4611da3565b73ffffffffffffffffffffffffffffffffffffffff161480610af35750610af281610aed611da3565b6117cc565b5b610b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2990613d55565b60405180910390fd5b610b3c8383611dab565b505050565b6000600980549050905090565b6000600f54905090565b610b69610b63611da3565b82611e64565b610ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9f90613e95565b60405180910390fd5b610bb3838383611f42565b505050565b6000600c60009054906101000a900460ff16905090565b600d5481565b600080610be184611d37565b610bea57600080fd5b610bf261126a565b6103e884600d54610c039190614061565b610c0d9190614030565b915091509250929050565b6000610c238361112a565b8210610c64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5b90613bf5565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60126000610cc9611da3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4790613c95565b60405180910390fd5b600c60009054906101000a900460ff1615600c60006101000a81548160ff021916908315150217905550565b610d84611da3565b73ffffffffffffffffffffffffffffffffffffffff16610da261126a565b73ffffffffffffffffffffffffffffffffffffffff1614610df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610def90613df5565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e43573d6000803e3d6000fd5b5050565b610e62838383604051806020016040528060008152506115e3565b505050565b6000610e71610b41565b8210610eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea990613eb5565b60405180910390fd5b60098281548110610ec657610ec561433e565b5b90600052602060002001549050919050565b60126000610ee4611da3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6290613b95565b60405180910390fd5b8060109080519060200190610f81929190613164565b5050565b610f8d6121a9565b610fcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc390613cb5565b60405180910390fd5b610fde6001610fd9611da3565b612399565b565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611089576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108090613d95565b60405180910390fd5b80915050919050565b600b805461109f906141a5565b80601f01602080910402602001604051908101604052809291908181526020018280546110cb906141a5565b80156111185780601f106110ed57610100808354040283529160200191611118565b820191906000526020600020905b8154815290600101906020018083116110fb57829003601f168201915b505050505081565b600181565b606581565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561119b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119290613d75565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111ea611da3565b73ffffffffffffffffffffffffffffffffffffffff1661120861126a565b73ffffffffffffffffffffffffffffffffffffffff161461125e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125590613df5565b60405180910390fd5b611268600061243d565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61129b611da3565b73ffffffffffffffffffffffffffffffffffffffff166112b961126a565b73ffffffffffffffffffffffffffffffffffffffff161461130f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130690613df5565b60405180910390fd5b80600d8190555050565b606060028054611328906141a5565b80601f0160208091040260200160405190810160405280929190818152602001828054611354906141a5565b80156113a15780601f10611376576101008083540402835291602001916113a1565b820191906000526020600020905b81548152906001019060200180831161138457829003601f168201915b5050505050905090565b6113bd6113b6611da3565b8383612501565b5050565b6113c9611da3565b73ffffffffffffffffffffffffffffffffffffffff166113e761126a565b73ffffffffffffffffffffffffffffffffffffffff161461143d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143490613df5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561147757600080fd5b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6114da611da3565b73ffffffffffffffffffffffffffffffffffffffff166114f861126a565b73ffffffffffffffffffffffffffffffffffffffff161461154e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154590613df5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561158857600080fd5b6001601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6115f46115ee611da3565b83611e64565b611633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162a90613e95565b60405180910390fd5b61163f8484848461266e565b50505050565b61164d611da3565b73ffffffffffffffffffffffffffffffffffffffff1661166b61126a565b73ffffffffffffffffffffffffffffffffffffffff16146116c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b890613df5565b60405180910390fd5b6000600e5414611706576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fd90613d35565b60405180910390fd5b43600f81905550565b606061171a82611d37565b611759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175090613e15565b60405180910390fd5b60006117636126ca565b9050600081511161178357604051806020016040528060008152506117ae565b8061178d8461275c565b60405160200161179e929190613aa4565b6040516020818303038152906040525b915050919050565b600e5481565b6000600e54905090565b600f5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611868611da3565b73ffffffffffffffffffffffffffffffffffffffff1661188661126a565b73ffffffffffffffffffffffffffffffffffffffff16146118dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d390613df5565b60405180910390fd5b6000600e5414611921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191890613d35565b60405180910390fd5b6000600f541415611967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195e90613e75565b60405180910390fd5b6065600f544060001c61197a9190614251565b600e8190555060ff600f544361199091906140bb565b11156119ba5760656001436119a591906140bb565b4060001c6119b39190614251565b600e819055505b6000600e5414156119de57600e60008154809291906119d890614208565b91905055505b565b600c60009054906101000a900460ff1681565b6119fb611da3565b73ffffffffffffffffffffffffffffffffffffffff16611a1961126a565b73ffffffffffffffffffffffffffffffffffffffff1614611a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6690613df5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad690613c35565b60405180910390fd5b611ae88161243d565b50565b611af3611da3565b73ffffffffffffffffffffffffffffffffffffffff16611b1161126a565b73ffffffffffffffffffffffffffffffffffffffff1614611b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5e90613df5565b60405180910390fd5b80600b9080519060200190611b7d929190613164565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b611baf838383611cb8565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611bf257611bed816128bd565b611c31565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611c3057611c2f8382612906565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c7457611c6f81612a73565b611cb3565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611cb257611cb18282612b44565b5b5b505050565b505050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d305750611d2f82612bc3565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611e1e83610fe0565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e6f82611d37565b611eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea590613d15565b60405180910390fd5b6000611eb983610fe0565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611f2857508373ffffffffffffffffffffffffffffffffffffffff16611f10846109a4565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f395750611f3881856117cc565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611f6282610fe0565b73ffffffffffffffffffffffffffffffffffffffff1614611fb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611faf90613c55565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201f90613cd5565b60405180910390fd5b612033838383612d65565b61203e600082611dab565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461208e91906140bb565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120e59190613fda565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121a4838383612d75565b505050565b6000806121b4610b41565b905060006121c86121c3611da3565b61112a565b9050601160006121d6611da3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561225e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225590613ed5565b60405180910390fd5b61226e612269611da3565b611b81565b156122ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a590613bb5565b60405180910390fd5b600181106122f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e890613bd5565b60405180910390fd5b600c60009054906101000a900460ff16612340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233790613cb5565b60405180910390fd5b606560018361234f9190613fda565b1115612390576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238790613e55565b60405180910390fd5b60019250505090565b6001601160006123a7611da3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000612402610b41565b905060005b838110156124375761242483828461241f9190613fda565b612d7a565b808061242f90614208565b915050612407565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256790613cf5565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516126619190613b58565b60405180910390a3505050565b612679848484611f42565b61268584848484612d98565b6126c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bb90613c15565b60405180910390fd5b50505050565b6060601080546126d9906141a5565b80601f0160208091040260200160405190810160405280929190818152602001828054612705906141a5565b80156127525780601f1061272757610100808354040283529160200191612752565b820191906000526020600020905b81548152906001019060200180831161273557829003601f168201915b5050505050905090565b606060008214156127a4576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506128b8565b600082905060005b600082146127d65780806127bf90614208565b915050600a826127cf9190614030565b91506127ac565b60008167ffffffffffffffff8111156127f2576127f161436d565b5b6040519080825280601f01601f1916602001820160405280156128245781602001600182028036833780820191505090505b5090505b600085146128b15760018261283d91906140bb565b9150600a8561284c9190614251565b60306128589190613fda565b60f81b81838151811061286e5761286d61433e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128aa9190614030565b9450612828565b8093505050505b919050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016129138461112a565b61291d91906140bb565b9050600060086000848152602001908152602001600020549050818114612a02576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600980549050612a8791906140bb565b90506000600a6000848152602001908152602001600020549050600060098381548110612ab757612ab661433e565b5b906000526020600020015490508060098381548110612ad957612ad861433e565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a6000858152602001908152602001600020600090556009805480612b2857612b2761430f565b5b6001900381819060005260206000200160009055905550505050565b6000612b4f8361112a565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612c8e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612cf657507f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612d5e57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b612d70838383611ba4565b505050565b505050565b612d94828260405180602001604052806000815250612f2f565b5050565b6000612db98473ffffffffffffffffffffffffffffffffffffffff16611b81565b15612f22578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612de2611da3565b8786866040518563ffffffff1660e01b8152600401612e049493929190613ae3565b602060405180830381600087803b158015612e1e57600080fd5b505af1925050508015612e4f57506040513d601f19601f82011682018060405250810190612e4c9190613540565b60015b612ed2573d8060008114612e7f576040519150601f19603f3d011682016040523d82523d6000602084013e612e84565b606091505b50600081511415612eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec190613c15565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f27565b600190505b949350505050565b612f398383612f8a565b612f466000848484612d98565b612f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7c90613c15565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff190613db5565b60405180910390fd5b61300381611d37565b15613043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303a90613c75565b60405180910390fd5b61304f60008383612d65565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461309f9190613fda565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461316060008383612d75565b5050565b828054613170906141a5565b90600052602060002090601f01602090048101928261319257600085556131d9565b82601f106131ab57805160ff19168380011785556131d9565b828001600101855582156131d9579182015b828111156131d85782518255916020019190600101906131bd565b5b5090506131e691906131ea565b5090565b5b808211156132035760008160009055506001016131eb565b5090565b600061321a61321584613f35565b613f10565b905082815260208101848484011115613236576132356143a1565b5b613241848285614163565b509392505050565b600061325c61325784613f66565b613f10565b905082815260208101848484011115613278576132776143a1565b5b613283848285614163565b509392505050565b60008135905061329a81614a28565b92915050565b6000813590506132af81614a3f565b92915050565b6000813590506132c481614a56565b92915050565b6000815190506132d981614a56565b92915050565b600082601f8301126132f4576132f361439c565b5b8135613304848260208601613207565b91505092915050565b600082601f8301126133225761332161439c565b5b8135613332848260208601613249565b91505092915050565b60008135905061334a81614a6d565b92915050565b600060208284031215613366576133656143ab565b5b60006133748482850161328b565b91505092915050565b60008060408385031215613394576133936143ab565b5b60006133a28582860161328b565b92505060206133b38582860161328b565b9150509250929050565b6000806000606084860312156133d6576133d56143ab565b5b60006133e48682870161328b565b93505060206133f58682870161328b565b92505060406134068682870161333b565b9150509250925092565b6000806000806080858703121561342a576134296143ab565b5b60006134388782880161328b565b94505060206134498782880161328b565b935050604061345a8782880161333b565b925050606085013567ffffffffffffffff81111561347b5761347a6143a6565b5b613487878288016132df565b91505092959194509250565b600080604083850312156134aa576134a96143ab565b5b60006134b88582860161328b565b92505060206134c9858286016132a0565b9150509250929050565b600080604083850312156134ea576134e96143ab565b5b60006134f88582860161328b565b92505060206135098582860161333b565b9150509250929050565b600060208284031215613529576135286143ab565b5b6000613537848285016132b5565b91505092915050565b600060208284031215613556576135556143ab565b5b6000613564848285016132ca565b91505092915050565b600060208284031215613583576135826143ab565b5b600082013567ffffffffffffffff8111156135a1576135a06143a6565b5b6135ad8482850161330d565b91505092915050565b6000602082840312156135cc576135cb6143ab565b5b60006135da8482850161333b565b91505092915050565b600080604083850312156135fa576135f96143ab565b5b60006136088582860161333b565b92505060206136198582860161333b565b9150509250929050565b61362c816140ef565b82525050565b61363b81614101565b82525050565b600061364c82613f97565b6136568185613fad565b9350613666818560208601614172565b61366f816143b0565b840191505092915050565b600061368582613fa2565b61368f8185613fbe565b935061369f818560208601614172565b6136a8816143b0565b840191505092915050565b60006136be82613fa2565b6136c88185613fcf565b93506136d8818560208601614172565b80840191505092915050565b60006136f1601583613fbe565b91506136fc826143c1565b602082019050919050565b6000613714600b83613fbe565b915061371f826143ea565b602082019050919050565b6000613737600683613fbe565b915061374282614413565b602082019050919050565b600061375a602b83613fbe565b91506137658261443c565b604082019050919050565b600061377d603283613fbe565b91506137888261448b565b604082019050919050565b60006137a0602683613fbe565b91506137ab826144da565b604082019050919050565b60006137c3602583613fbe565b91506137ce82614529565b604082019050919050565b60006137e6601c83613fbe565b91506137f182614578565b602082019050919050565b6000613809600d83613fbe565b9150613814826145a1565b602082019050919050565b600061382c600b83613fbe565b9150613837826145ca565b602082019050919050565b600061384f602483613fbe565b915061385a826145f3565b604082019050919050565b6000613872601983613fbe565b915061387d82614642565b602082019050919050565b6000613895602c83613fbe565b91506138a08261466b565b604082019050919050565b60006138b8601d83613fbe565b91506138c3826146ba565b602082019050919050565b60006138db603883613fbe565b91506138e6826146e3565b604082019050919050565b60006138fe602a83613fbe565b915061390982614732565b604082019050919050565b6000613921602983613fbe565b915061392c82614781565b604082019050919050565b6000613944602083613fbe565b915061394f826147d0565b602082019050919050565b6000613967602c83613fbe565b9150613972826147f9565b604082019050919050565b600061398a602083613fbe565b915061399582614848565b602082019050919050565b60006139ad602f83613fbe565b91506139b882614871565b604082019050919050565b60006139d0602183613fbe565b91506139db826148c0565b604082019050919050565b60006139f3600a83613fbe565b91506139fe8261490f565b602082019050919050565b6000613a16602083613fbe565b9150613a2182614938565b602082019050919050565b6000613a39603183613fbe565b9150613a4482614961565b604082019050919050565b6000613a5c602c83613fbe565b9150613a67826149b0565b604082019050919050565b6000613a7f600e83613fbe565b9150613a8a826149ff565b602082019050919050565b613a9e81614159565b82525050565b6000613ab082856136b3565b9150613abc82846136b3565b91508190509392505050565b6000602082019050613add6000830184613623565b92915050565b6000608082019050613af86000830187613623565b613b056020830186613623565b613b126040830185613a95565b8181036060830152613b248184613641565b905095945050505050565b6000604082019050613b446000830185613623565b613b516020830184613a95565b9392505050565b6000602082019050613b6d6000830184613632565b92915050565b60006020820190508181036000830152613b8d818461367a565b905092915050565b60006020820190508181036000830152613bae816136e4565b9050919050565b60006020820190508181036000830152613bce81613707565b9050919050565b60006020820190508181036000830152613bee8161372a565b9050919050565b60006020820190508181036000830152613c0e8161374d565b9050919050565b60006020820190508181036000830152613c2e81613770565b9050919050565b60006020820190508181036000830152613c4e81613793565b9050919050565b60006020820190508181036000830152613c6e816137b6565b9050919050565b60006020820190508181036000830152613c8e816137d9565b9050919050565b60006020820190508181036000830152613cae816137fc565b9050919050565b60006020820190508181036000830152613cce8161381f565b9050919050565b60006020820190508181036000830152613cee81613842565b9050919050565b60006020820190508181036000830152613d0e81613865565b9050919050565b60006020820190508181036000830152613d2e81613888565b9050919050565b60006020820190508181036000830152613d4e816138ab565b9050919050565b60006020820190508181036000830152613d6e816138ce565b9050919050565b60006020820190508181036000830152613d8e816138f1565b9050919050565b60006020820190508181036000830152613dae81613914565b9050919050565b60006020820190508181036000830152613dce81613937565b9050919050565b60006020820190508181036000830152613dee8161395a565b9050919050565b60006020820190508181036000830152613e0e8161397d565b9050919050565b60006020820190508181036000830152613e2e816139a0565b9050919050565b60006020820190508181036000830152613e4e816139c3565b9050919050565b60006020820190508181036000830152613e6e816139e6565b9050919050565b60006020820190508181036000830152613e8e81613a09565b9050919050565b60006020820190508181036000830152613eae81613a2c565b9050919050565b60006020820190508181036000830152613ece81613a4f565b9050919050565b60006020820190508181036000830152613eee81613a72565b9050919050565b6000602082019050613f0a6000830184613a95565b92915050565b6000613f1a613f2b565b9050613f2682826141d7565b919050565b6000604051905090565b600067ffffffffffffffff821115613f5057613f4f61436d565b5b613f59826143b0565b9050602081019050919050565b600067ffffffffffffffff821115613f8157613f8061436d565b5b613f8a826143b0565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613fe582614159565b9150613ff083614159565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561402557614024614282565b5b828201905092915050565b600061403b82614159565b915061404683614159565b925082614056576140556142b1565b5b828204905092915050565b600061406c82614159565b915061407783614159565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156140b0576140af614282565b5b828202905092915050565b60006140c682614159565b91506140d183614159565b9250828210156140e4576140e3614282565b5b828203905092915050565b60006140fa82614139565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614190578082015181840152602081019050614175565b8381111561419f576000848401525b50505050565b600060028204905060018216806141bd57607f821691505b602082108114156141d1576141d06142e0565b5b50919050565b6141e0826143b0565b810181811067ffffffffffffffff821117156141ff576141fe61436d565b5b80604052505050565b600061421382614159565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561424657614245614282565b5b600182019050919050565b600061425c82614159565b915061426783614159565b925082614277576142766142b1565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f6e6f7420636f6e6669726d656420746f2073656e640000000000000000000000600082015250565b7f6e6f20636f6e7472616374000000000000000000000000000000000000000000600082015250565b7f6f6e6c7920310000000000000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6e6f7420636f6e6669726d656400000000000000000000000000000000000000600082015250565b7f73616c6520636c6f736564000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5374617274696e6720696e64657820697320616c726561647920736574000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f6d617820746f6b656e7300000000000000000000000000000000000000000000600082015250565b7f5374617274696e6720696e64657820626c6f636b206d75737420626520736574600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f616c7265616479206d696e746564000000000000000000000000000000000000600082015250565b614a31816140ef565b8114614a3c57600080fd5b50565b614a4881614101565b8114614a5357600080fd5b50565b614a5f8161410d565b8114614a6a57600080fd5b50565b614a7681614159565b8114614a8157600080fd5b5056fea2646970667358221220207e25e304f17b07fa765d137646330f97cf7c2e45f8dbfd8a2972541ee7689a64736f6c63430008070033697066733a2f2f516d616374355244636d664c697a47344859317432755a5065444e4c6e536979415972444c3872516f5a695477482f
Deployed Bytecode
0x60806040526004361061023b5760003560e01c80636e1bd3231161012e578063bc82ebe0116100ab578063e985e9c51161006f578063e985e9c51461082f578063e98665501461086c578063eb8d244414610883578063f2fde38b146108ae578063ffe630b5146108d75761023b565b8063bc82ebe01461075a578063c87b56dd14610771578063cb774d47146107ae578063cc221a46146107d9578063e36d6498146108045761023b565b806395d89b41116100f257806395d89b411461068b578063a22cb465146106b6578063b2f87643146106df578063b697f53114610708578063b88d4fde146107315761023b565b80636e1bd323146105b857806370a08231146105e3578063715018a6146106205780638da5cb5b146106375780638fffd8b5146106625761023b565b80632f745c59116101bc57806355f804b31161018057806355f804b3146104f25780635c00135a1461051b5780636352211e146105255780636373a6b11461056257806365f130971461058d5761023b565b80632f745c591461042157806334918dfd1461045e5780633ccfd60b1461047557806342842e0e1461048c5780634f6ccce7146104b55761023b565b80632313a436116102035780632313a4361461033957806323b872dd1461036457806325bdb2a81461038d57806329ee566c146103b85780632a55205a146103e35761023b565b806301ffc9a71461024057806306fdde031461027d578063081812fc146102a8578063095ea7b3146102e557806318160ddd1461030e575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190613513565b610900565b6040516102749190613b58565b60405180910390f35b34801561028957600080fd5b50610292610912565b60405161029f9190613b73565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca91906135b6565b6109a4565b6040516102dc9190613ac8565b60405180910390f35b3480156102f157600080fd5b5061030c600480360381019061030791906134d3565b610a29565b005b34801561031a57600080fd5b50610323610b41565b6040516103309190613ef5565b60405180910390f35b34801561034557600080fd5b5061034e610b4e565b60405161035b9190613ef5565b60405180910390f35b34801561037057600080fd5b5061038b600480360381019061038691906133bd565b610b58565b005b34801561039957600080fd5b506103a2610bb8565b6040516103af9190613b58565b60405180910390f35b3480156103c457600080fd5b506103cd610bcf565b6040516103da9190613ef5565b60405180910390f35b3480156103ef57600080fd5b5061040a600480360381019061040591906135e3565b610bd5565b604051610418929190613b2f565b60405180910390f35b34801561042d57600080fd5b50610448600480360381019061044391906134d3565b610c18565b6040516104559190613ef5565b60405180910390f35b34801561046a57600080fd5b50610473610cbd565b005b34801561048157600080fd5b5061048a610d7c565b005b34801561049857600080fd5b506104b360048036038101906104ae91906133bd565b610e47565b005b3480156104c157600080fd5b506104dc60048036038101906104d791906135b6565b610e67565b6040516104e99190613ef5565b60405180910390f35b3480156104fe57600080fd5b506105196004803603810190610514919061356d565b610ed8565b005b610523610f85565b005b34801561053157600080fd5b5061054c600480360381019061054791906135b6565b610fe0565b6040516105599190613ac8565b60405180910390f35b34801561056e57600080fd5b50610577611092565b6040516105849190613b73565b60405180910390f35b34801561059957600080fd5b506105a2611120565b6040516105af9190613ef5565b60405180910390f35b3480156105c457600080fd5b506105cd611125565b6040516105da9190613ef5565b60405180910390f35b3480156105ef57600080fd5b5061060a60048036038101906106059190613350565b61112a565b6040516106179190613ef5565b60405180910390f35b34801561062c57600080fd5b506106356111e2565b005b34801561064357600080fd5b5061064c61126a565b6040516106599190613ac8565b60405180910390f35b34801561066e57600080fd5b50610689600480360381019061068491906135b6565b611293565b005b34801561069757600080fd5b506106a0611319565b6040516106ad9190613b73565b60405180910390f35b3480156106c257600080fd5b506106dd60048036038101906106d89190613493565b6113ab565b005b3480156106eb57600080fd5b5061070660048036038101906107019190613350565b6113c1565b005b34801561071457600080fd5b5061072f600480360381019061072a9190613350565b6114d2565b005b34801561073d57600080fd5b5061075860048036038101906107539190613410565b6115e3565b005b34801561076657600080fd5b5061076f611645565b005b34801561077d57600080fd5b50610798600480360381019061079391906135b6565b61170f565b6040516107a59190613b73565b60405180910390f35b3480156107ba57600080fd5b506107c36117b6565b6040516107d09190613ef5565b60405180910390f35b3480156107e557600080fd5b506107ee6117bc565b6040516107fb9190613ef5565b60405180910390f35b34801561081057600080fd5b506108196117c6565b6040516108269190613ef5565b60405180910390f35b34801561083b57600080fd5b506108566004803603810190610851919061337d565b6117cc565b6040516108639190613b58565b60405180910390f35b34801561087857600080fd5b50610881611860565b005b34801561088f57600080fd5b506108986119e0565b6040516108a59190613b58565b60405180910390f35b3480156108ba57600080fd5b506108d560048036038101906108d09190613350565b6119f3565b005b3480156108e357600080fd5b506108fe60048036038101906108f9919061356d565b611aeb565b005b600061090b82611cbd565b9050919050565b606060018054610921906141a5565b80601f016020809104026020016040519081016040528092919081815260200182805461094d906141a5565b801561099a5780601f1061096f5761010080835404028352916020019161099a565b820191906000526020600020905b81548152906001019060200180831161097d57829003601f168201915b5050505050905090565b60006109af82611d37565b6109ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e590613dd5565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a3482610fe0565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9c90613e35565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ac4611da3565b73ffffffffffffffffffffffffffffffffffffffff161480610af35750610af281610aed611da3565b6117cc565b5b610b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2990613d55565b60405180910390fd5b610b3c8383611dab565b505050565b6000600980549050905090565b6000600f54905090565b610b69610b63611da3565b82611e64565b610ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9f90613e95565b60405180910390fd5b610bb3838383611f42565b505050565b6000600c60009054906101000a900460ff16905090565b600d5481565b600080610be184611d37565b610bea57600080fd5b610bf261126a565b6103e884600d54610c039190614061565b610c0d9190614030565b915091509250929050565b6000610c238361112a565b8210610c64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5b90613bf5565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60126000610cc9611da3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4790613c95565b60405180910390fd5b600c60009054906101000a900460ff1615600c60006101000a81548160ff021916908315150217905550565b610d84611da3565b73ffffffffffffffffffffffffffffffffffffffff16610da261126a565b73ffffffffffffffffffffffffffffffffffffffff1614610df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610def90613df5565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e43573d6000803e3d6000fd5b5050565b610e62838383604051806020016040528060008152506115e3565b505050565b6000610e71610b41565b8210610eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea990613eb5565b60405180910390fd5b60098281548110610ec657610ec561433e565b5b90600052602060002001549050919050565b60126000610ee4611da3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6290613b95565b60405180910390fd5b8060109080519060200190610f81929190613164565b5050565b610f8d6121a9565b610fcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc390613cb5565b60405180910390fd5b610fde6001610fd9611da3565b612399565b565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611089576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108090613d95565b60405180910390fd5b80915050919050565b600b805461109f906141a5565b80601f01602080910402602001604051908101604052809291908181526020018280546110cb906141a5565b80156111185780601f106110ed57610100808354040283529160200191611118565b820191906000526020600020905b8154815290600101906020018083116110fb57829003601f168201915b505050505081565b600181565b606581565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561119b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119290613d75565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111ea611da3565b73ffffffffffffffffffffffffffffffffffffffff1661120861126a565b73ffffffffffffffffffffffffffffffffffffffff161461125e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125590613df5565b60405180910390fd5b611268600061243d565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61129b611da3565b73ffffffffffffffffffffffffffffffffffffffff166112b961126a565b73ffffffffffffffffffffffffffffffffffffffff161461130f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130690613df5565b60405180910390fd5b80600d8190555050565b606060028054611328906141a5565b80601f0160208091040260200160405190810160405280929190818152602001828054611354906141a5565b80156113a15780601f10611376576101008083540402835291602001916113a1565b820191906000526020600020905b81548152906001019060200180831161138457829003601f168201915b5050505050905090565b6113bd6113b6611da3565b8383612501565b5050565b6113c9611da3565b73ffffffffffffffffffffffffffffffffffffffff166113e761126a565b73ffffffffffffffffffffffffffffffffffffffff161461143d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143490613df5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561147757600080fd5b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6114da611da3565b73ffffffffffffffffffffffffffffffffffffffff166114f861126a565b73ffffffffffffffffffffffffffffffffffffffff161461154e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154590613df5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561158857600080fd5b6001601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6115f46115ee611da3565b83611e64565b611633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162a90613e95565b60405180910390fd5b61163f8484848461266e565b50505050565b61164d611da3565b73ffffffffffffffffffffffffffffffffffffffff1661166b61126a565b73ffffffffffffffffffffffffffffffffffffffff16146116c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b890613df5565b60405180910390fd5b6000600e5414611706576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fd90613d35565b60405180910390fd5b43600f81905550565b606061171a82611d37565b611759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175090613e15565b60405180910390fd5b60006117636126ca565b9050600081511161178357604051806020016040528060008152506117ae565b8061178d8461275c565b60405160200161179e929190613aa4565b6040516020818303038152906040525b915050919050565b600e5481565b6000600e54905090565b600f5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611868611da3565b73ffffffffffffffffffffffffffffffffffffffff1661188661126a565b73ffffffffffffffffffffffffffffffffffffffff16146118dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d390613df5565b60405180910390fd5b6000600e5414611921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191890613d35565b60405180910390fd5b6000600f541415611967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195e90613e75565b60405180910390fd5b6065600f544060001c61197a9190614251565b600e8190555060ff600f544361199091906140bb565b11156119ba5760656001436119a591906140bb565b4060001c6119b39190614251565b600e819055505b6000600e5414156119de57600e60008154809291906119d890614208565b91905055505b565b600c60009054906101000a900460ff1681565b6119fb611da3565b73ffffffffffffffffffffffffffffffffffffffff16611a1961126a565b73ffffffffffffffffffffffffffffffffffffffff1614611a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6690613df5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad690613c35565b60405180910390fd5b611ae88161243d565b50565b611af3611da3565b73ffffffffffffffffffffffffffffffffffffffff16611b1161126a565b73ffffffffffffffffffffffffffffffffffffffff1614611b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5e90613df5565b60405180910390fd5b80600b9080519060200190611b7d929190613164565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b611baf838383611cb8565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611bf257611bed816128bd565b611c31565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611c3057611c2f8382612906565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c7457611c6f81612a73565b611cb3565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611cb257611cb18282612b44565b5b5b505050565b505050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d305750611d2f82612bc3565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611e1e83610fe0565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e6f82611d37565b611eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea590613d15565b60405180910390fd5b6000611eb983610fe0565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611f2857508373ffffffffffffffffffffffffffffffffffffffff16611f10846109a4565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f395750611f3881856117cc565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611f6282610fe0565b73ffffffffffffffffffffffffffffffffffffffff1614611fb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611faf90613c55565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201f90613cd5565b60405180910390fd5b612033838383612d65565b61203e600082611dab565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461208e91906140bb565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120e59190613fda565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121a4838383612d75565b505050565b6000806121b4610b41565b905060006121c86121c3611da3565b61112a565b9050601160006121d6611da3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561225e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225590613ed5565b60405180910390fd5b61226e612269611da3565b611b81565b156122ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a590613bb5565b60405180910390fd5b600181106122f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e890613bd5565b60405180910390fd5b600c60009054906101000a900460ff16612340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233790613cb5565b60405180910390fd5b606560018361234f9190613fda565b1115612390576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238790613e55565b60405180910390fd5b60019250505090565b6001601160006123a7611da3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000612402610b41565b905060005b838110156124375761242483828461241f9190613fda565b612d7a565b808061242f90614208565b915050612407565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256790613cf5565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516126619190613b58565b60405180910390a3505050565b612679848484611f42565b61268584848484612d98565b6126c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bb90613c15565b60405180910390fd5b50505050565b6060601080546126d9906141a5565b80601f0160208091040260200160405190810160405280929190818152602001828054612705906141a5565b80156127525780601f1061272757610100808354040283529160200191612752565b820191906000526020600020905b81548152906001019060200180831161273557829003601f168201915b5050505050905090565b606060008214156127a4576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506128b8565b600082905060005b600082146127d65780806127bf90614208565b915050600a826127cf9190614030565b91506127ac565b60008167ffffffffffffffff8111156127f2576127f161436d565b5b6040519080825280601f01601f1916602001820160405280156128245781602001600182028036833780820191505090505b5090505b600085146128b15760018261283d91906140bb565b9150600a8561284c9190614251565b60306128589190613fda565b60f81b81838151811061286e5761286d61433e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128aa9190614030565b9450612828565b8093505050505b919050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016129138461112a565b61291d91906140bb565b9050600060086000848152602001908152602001600020549050818114612a02576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600980549050612a8791906140bb565b90506000600a6000848152602001908152602001600020549050600060098381548110612ab757612ab661433e565b5b906000526020600020015490508060098381548110612ad957612ad861433e565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a6000858152602001908152602001600020600090556009805480612b2857612b2761430f565b5b6001900381819060005260206000200160009055905550505050565b6000612b4f8361112a565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612c8e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612cf657507f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612d5e57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b612d70838383611ba4565b505050565b505050565b612d94828260405180602001604052806000815250612f2f565b5050565b6000612db98473ffffffffffffffffffffffffffffffffffffffff16611b81565b15612f22578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612de2611da3565b8786866040518563ffffffff1660e01b8152600401612e049493929190613ae3565b602060405180830381600087803b158015612e1e57600080fd5b505af1925050508015612e4f57506040513d601f19601f82011682018060405250810190612e4c9190613540565b60015b612ed2573d8060008114612e7f576040519150601f19603f3d011682016040523d82523d6000602084013e612e84565b606091505b50600081511415612eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec190613c15565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f27565b600190505b949350505050565b612f398383612f8a565b612f466000848484612d98565b612f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7c90613c15565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff190613db5565b60405180910390fd5b61300381611d37565b15613043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303a90613c75565b60405180910390fd5b61304f60008383612d65565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461309f9190613fda565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461316060008383612d75565b5050565b828054613170906141a5565b90600052602060002090601f01602090048101928261319257600085556131d9565b82601f106131ab57805160ff19168380011785556131d9565b828001600101855582156131d9579182015b828111156131d85782518255916020019190600101906131bd565b5b5090506131e691906131ea565b5090565b5b808211156132035760008160009055506001016131eb565b5090565b600061321a61321584613f35565b613f10565b905082815260208101848484011115613236576132356143a1565b5b613241848285614163565b509392505050565b600061325c61325784613f66565b613f10565b905082815260208101848484011115613278576132776143a1565b5b613283848285614163565b509392505050565b60008135905061329a81614a28565b92915050565b6000813590506132af81614a3f565b92915050565b6000813590506132c481614a56565b92915050565b6000815190506132d981614a56565b92915050565b600082601f8301126132f4576132f361439c565b5b8135613304848260208601613207565b91505092915050565b600082601f8301126133225761332161439c565b5b8135613332848260208601613249565b91505092915050565b60008135905061334a81614a6d565b92915050565b600060208284031215613366576133656143ab565b5b60006133748482850161328b565b91505092915050565b60008060408385031215613394576133936143ab565b5b60006133a28582860161328b565b92505060206133b38582860161328b565b9150509250929050565b6000806000606084860312156133d6576133d56143ab565b5b60006133e48682870161328b565b93505060206133f58682870161328b565b92505060406134068682870161333b565b9150509250925092565b6000806000806080858703121561342a576134296143ab565b5b60006134388782880161328b565b94505060206134498782880161328b565b935050604061345a8782880161333b565b925050606085013567ffffffffffffffff81111561347b5761347a6143a6565b5b613487878288016132df565b91505092959194509250565b600080604083850312156134aa576134a96143ab565b5b60006134b88582860161328b565b92505060206134c9858286016132a0565b9150509250929050565b600080604083850312156134ea576134e96143ab565b5b60006134f88582860161328b565b92505060206135098582860161333b565b9150509250929050565b600060208284031215613529576135286143ab565b5b6000613537848285016132b5565b91505092915050565b600060208284031215613556576135556143ab565b5b6000613564848285016132ca565b91505092915050565b600060208284031215613583576135826143ab565b5b600082013567ffffffffffffffff8111156135a1576135a06143a6565b5b6135ad8482850161330d565b91505092915050565b6000602082840312156135cc576135cb6143ab565b5b60006135da8482850161333b565b91505092915050565b600080604083850312156135fa576135f96143ab565b5b60006136088582860161333b565b92505060206136198582860161333b565b9150509250929050565b61362c816140ef565b82525050565b61363b81614101565b82525050565b600061364c82613f97565b6136568185613fad565b9350613666818560208601614172565b61366f816143b0565b840191505092915050565b600061368582613fa2565b61368f8185613fbe565b935061369f818560208601614172565b6136a8816143b0565b840191505092915050565b60006136be82613fa2565b6136c88185613fcf565b93506136d8818560208601614172565b80840191505092915050565b60006136f1601583613fbe565b91506136fc826143c1565b602082019050919050565b6000613714600b83613fbe565b915061371f826143ea565b602082019050919050565b6000613737600683613fbe565b915061374282614413565b602082019050919050565b600061375a602b83613fbe565b91506137658261443c565b604082019050919050565b600061377d603283613fbe565b91506137888261448b565b604082019050919050565b60006137a0602683613fbe565b91506137ab826144da565b604082019050919050565b60006137c3602583613fbe565b91506137ce82614529565b604082019050919050565b60006137e6601c83613fbe565b91506137f182614578565b602082019050919050565b6000613809600d83613fbe565b9150613814826145a1565b602082019050919050565b600061382c600b83613fbe565b9150613837826145ca565b602082019050919050565b600061384f602483613fbe565b915061385a826145f3565b604082019050919050565b6000613872601983613fbe565b915061387d82614642565b602082019050919050565b6000613895602c83613fbe565b91506138a08261466b565b604082019050919050565b60006138b8601d83613fbe565b91506138c3826146ba565b602082019050919050565b60006138db603883613fbe565b91506138e6826146e3565b604082019050919050565b60006138fe602a83613fbe565b915061390982614732565b604082019050919050565b6000613921602983613fbe565b915061392c82614781565b604082019050919050565b6000613944602083613fbe565b915061394f826147d0565b602082019050919050565b6000613967602c83613fbe565b9150613972826147f9565b604082019050919050565b600061398a602083613fbe565b915061399582614848565b602082019050919050565b60006139ad602f83613fbe565b91506139b882614871565b604082019050919050565b60006139d0602183613fbe565b91506139db826148c0565b604082019050919050565b60006139f3600a83613fbe565b91506139fe8261490f565b602082019050919050565b6000613a16602083613fbe565b9150613a2182614938565b602082019050919050565b6000613a39603183613fbe565b9150613a4482614961565b604082019050919050565b6000613a5c602c83613fbe565b9150613a67826149b0565b604082019050919050565b6000613a7f600e83613fbe565b9150613a8a826149ff565b602082019050919050565b613a9e81614159565b82525050565b6000613ab082856136b3565b9150613abc82846136b3565b91508190509392505050565b6000602082019050613add6000830184613623565b92915050565b6000608082019050613af86000830187613623565b613b056020830186613623565b613b126040830185613a95565b8181036060830152613b248184613641565b905095945050505050565b6000604082019050613b446000830185613623565b613b516020830184613a95565b9392505050565b6000602082019050613b6d6000830184613632565b92915050565b60006020820190508181036000830152613b8d818461367a565b905092915050565b60006020820190508181036000830152613bae816136e4565b9050919050565b60006020820190508181036000830152613bce81613707565b9050919050565b60006020820190508181036000830152613bee8161372a565b9050919050565b60006020820190508181036000830152613c0e8161374d565b9050919050565b60006020820190508181036000830152613c2e81613770565b9050919050565b60006020820190508181036000830152613c4e81613793565b9050919050565b60006020820190508181036000830152613c6e816137b6565b9050919050565b60006020820190508181036000830152613c8e816137d9565b9050919050565b60006020820190508181036000830152613cae816137fc565b9050919050565b60006020820190508181036000830152613cce8161381f565b9050919050565b60006020820190508181036000830152613cee81613842565b9050919050565b60006020820190508181036000830152613d0e81613865565b9050919050565b60006020820190508181036000830152613d2e81613888565b9050919050565b60006020820190508181036000830152613d4e816138ab565b9050919050565b60006020820190508181036000830152613d6e816138ce565b9050919050565b60006020820190508181036000830152613d8e816138f1565b9050919050565b60006020820190508181036000830152613dae81613914565b9050919050565b60006020820190508181036000830152613dce81613937565b9050919050565b60006020820190508181036000830152613dee8161395a565b9050919050565b60006020820190508181036000830152613e0e8161397d565b9050919050565b60006020820190508181036000830152613e2e816139a0565b9050919050565b60006020820190508181036000830152613e4e816139c3565b9050919050565b60006020820190508181036000830152613e6e816139e6565b9050919050565b60006020820190508181036000830152613e8e81613a09565b9050919050565b60006020820190508181036000830152613eae81613a2c565b9050919050565b60006020820190508181036000830152613ece81613a4f565b9050919050565b60006020820190508181036000830152613eee81613a72565b9050919050565b6000602082019050613f0a6000830184613a95565b92915050565b6000613f1a613f2b565b9050613f2682826141d7565b919050565b6000604051905090565b600067ffffffffffffffff821115613f5057613f4f61436d565b5b613f59826143b0565b9050602081019050919050565b600067ffffffffffffffff821115613f8157613f8061436d565b5b613f8a826143b0565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613fe582614159565b9150613ff083614159565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561402557614024614282565b5b828201905092915050565b600061403b82614159565b915061404683614159565b925082614056576140556142b1565b5b828204905092915050565b600061406c82614159565b915061407783614159565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156140b0576140af614282565b5b828202905092915050565b60006140c682614159565b91506140d183614159565b9250828210156140e4576140e3614282565b5b828203905092915050565b60006140fa82614139565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614190578082015181840152602081019050614175565b8381111561419f576000848401525b50505050565b600060028204905060018216806141bd57607f821691505b602082108114156141d1576141d06142e0565b5b50919050565b6141e0826143b0565b810181811067ffffffffffffffff821117156141ff576141fe61436d565b5b80604052505050565b600061421382614159565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561424657614245614282565b5b600182019050919050565b600061425c82614159565b915061426783614159565b925082614277576142766142b1565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f6e6f7420636f6e6669726d656420746f2073656e640000000000000000000000600082015250565b7f6e6f20636f6e7472616374000000000000000000000000000000000000000000600082015250565b7f6f6e6c7920310000000000000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6e6f7420636f6e6669726d656400000000000000000000000000000000000000600082015250565b7f73616c6520636c6f736564000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5374617274696e6720696e64657820697320616c726561647920736574000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f6d617820746f6b656e7300000000000000000000000000000000000000000000600082015250565b7f5374617274696e6720696e64657820626c6f636b206d75737420626520736574600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f616c7265616479206d696e746564000000000000000000000000000000000000600082015250565b614a31816140ef565b8114614a3c57600080fd5b50565b614a4881614101565b8114614a5357600080fd5b50565b614a5f8161410d565b8114614a6a57600080fd5b50565b614a7681614159565b8114614a8157600080fd5b5056fea2646970667358221220207e25e304f17b07fa765d137646330f97cf7c2e45f8dbfd8a2972541ee7689a64736f6c63430008070033
Deployed Bytecode Sourcemap
177:4949:11:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3066:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2708:98:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4220:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3758:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1536:111:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2234:97:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4947:330:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3682:91:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;453:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2336:284;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;1212:253:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2627:135:11;;;;;;;;;;;;;:::i;:::-;;4767:137;;;;;;;;;;;;;:::i;:::-;;5343:179:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1719:230:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3249:176:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4595:165;;;:::i;:::-;;2411:235:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;277:24:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;399:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;347:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2149:205:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1608:101:12;;;;;;;;;;;;;:::i;:::-;;976:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2769:95:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2870:102:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4504:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1980:149:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1816:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5588:320:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;970:179:11;;;;;;;;;;;;;:::i;:::-;;3039:329:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;488:33:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2136:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;528:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4723:162:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1155:655:11;;;;;;;;;;;;;:::i;:::-;;307:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4911:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3560:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3066:177;3169:4;3196:36;3220:11;3196:23;:36::i;:::-;3189:43;;3066:177;;;:::o;2708:98:1:-;2762:13;2794:5;2787:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2708:98;:::o;4220:217::-;4296:7;4323:16;4331:7;4323;:16::i;:::-;4315:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4406:15;:24;4422:7;4406:24;;;;;;;;;;;;;;;;;;;;;4399:31;;4220:217;;;:::o;3758:401::-;3838:13;3854:23;3869:7;3854:14;:23::i;:::-;3838:39;;3901:5;3895:11;;:2;:11;;;;3887:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3992:5;3976:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;4001:37;4018:5;4025:12;:10;:12::i;:::-;4001:16;:37::i;:::-;3976:62;3955:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;4131:21;4140:2;4144:7;4131:8;:21::i;:::-;3828:331;3758:401;;:::o;1536:111:2:-;1597:7;1623:10;:17;;;;1616:24;;1536:111;:::o;2234:97:11:-;2282:4;2305:18;;2298:25;;2234:97;:::o;4947:330:1:-;5136:41;5155:12;:10;:12::i;:::-;5169:7;5136:18;:41::i;:::-;5128:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5242:28;5252:4;5258:2;5262:7;5242:9;:28::i;:::-;4947:330;;;:::o;3682:91:11:-;3727:4;3754:12;;;;;;;;;;;3747:19;;3682:91;:::o;453:28::-;;;;:::o;2336:284::-;2459:16;2485:21;2530:17;2538:8;2530:7;:17::i;:::-;2522:26;;;;;;2566:7;:5;:7::i;:::-;2606:4;2593:10;2583:7;;:20;;;;:::i;:::-;:27;;;;:::i;:::-;2558:54;;;;2336:284;;;;;:::o;1212:253:2:-;1309:7;1344:23;1361:5;1344:16;:23::i;:::-;1336:5;:31;1328:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;1432:12;:19;1445:5;1432:19;;;;;;;;;;;;;;;:26;1452:5;1432:26;;;;;;;;;;;;1425:33;;1212:253;;;;:::o;2627:135:11:-;2678:7;:21;2686:12;:10;:12::i;:::-;2678:21;;;;;;;;;;;;;;;;;;;;;;;;;2670:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;2743:12;;;;;;;;;;;2742:13;2727:12;;:28;;;;;;;;;;;;;;;;;;2627:135::o;4767:137::-;1199:12:12;:10;:12::i;:::-;1188:23;;:7;:5;:7::i;:::-;:23;;;1180:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4814:12:11::1;4829:21;4814:36;;4868:10;4860:28;;:37;4889:7;4860:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;4804:100;4767:137::o:0;5343:179:1:-;5476:39;5493:4;5499:2;5503:7;5476:39;;;;;;;;;;;;:16;:39::i;:::-;5343:179;;;:::o;1719:230:2:-;1794:7;1829:30;:28;:30::i;:::-;1821:5;:38;1813:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;1925:10;1936:5;1925:17;;;;;;;;:::i;:::-;;;;;;;;;;1918:24;;1719:230;;;:::o;3249:176:11:-;3326:7;:21;3334:12;:10;:12::i;:::-;3326:21;;;;;;;;;;;;;;;;;;;;;;;;;3318:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;3406:8;3387:16;:27;;;;;;;;;;;;:::i;:::-;;3249:176;:::o;4595:165::-;4665:14;:12;:14::i;:::-;4657:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;4724:24;4732:1;4735:12;:10;:12::i;:::-;4724:7;:24::i;:::-;4595:165::o;2411:235:1:-;2483:7;2502:13;2518:7;:16;2526:7;2518:16;;;;;;;;;;;;;;;;;;;;;2502:32;;2569:1;2552:19;;:5;:19;;;;2544:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2634:5;2627:12;;;2411:235;;;:::o;277:24:11:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;399:43::-;441:1;399:43;:::o;347:40::-;384:3;347:40;:::o;2149:205:1:-;2221:7;2265:1;2248:19;;:5;:19;;;;2240:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;2331:9;:16;2341:5;2331:16;;;;;;;;;;;;;;;;2324:23;;2149:205;;;:::o;1608:101:12:-;1199:12;:10;:12::i;:::-;1188:23;;:7;:5;:7::i;:::-;:23;;;1180:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1672:30:::1;1699:1;1672:18;:30::i;:::-;1608:101::o:0;976:85::-;1022:7;1048:6;;;;;;;;;;;1041:13;;976:85;:::o;2769:95:11:-;1199:12:12;:10;:12::i;:::-;1188:23;;:7;:5;:7::i;:::-;:23;;;1180:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2846:10:11::1;2836:7;:20;;;;2769:95:::0;:::o;2870:102:1:-;2926:13;2958:7;2951:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2870:102;:::o;4504:153::-;4598:52;4617:12;:10;:12::i;:::-;4631:8;4641;4598:18;:52::i;:::-;4504:153;;:::o;1980:149:11:-;1199:12:12;:10;:12::i;:::-;1188:23;;:7;:5;:7::i;:::-;:23;;;1180:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2075:1:11::1;2055:22;;:8;:22;;;;2047:31;;;::::0;::::1;;2108:5;2088:7;:17;2096:8;2088:17;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;1980:149:::0;:::o;1816:154::-;1199:12:12;:10;:12::i;:::-;1188:23;;:7;:5;:7::i;:::-;:23;;;1180:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1918:1:11::1;1898:22;;:8;:22;;;;1890:31;;;::::0;::::1;;1951:4;1931:7;:17;1939:8;1931:17;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;1816:154:::0;:::o;5588:320:1:-;5757:41;5776:12;:10;:12::i;:::-;5790:7;5757:18;:41::i;:::-;5749:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5862:39;5876:4;5882:2;5886:7;5895:5;5862:13;:39::i;:::-;5588:320;;;;:::o;970:179:11:-;1199:12:12;:10;:12::i;:::-;1188:23;;:7;:5;:7::i;:::-;:23;;;1180:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1055:1:11::1;1038:13;;:18;1030:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;1130:12;1109:18;:33;;;;970:179::o:0;3039:329:1:-;3112:13;3145:16;3153:7;3145;:16::i;:::-;3137:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;3224:21;3248:10;:8;:10::i;:::-;3224:34;;3299:1;3281:7;3275:21;:25;:86;;;;;;;;;;;;;;;;;3327:7;3336:18;:7;:16;:18::i;:::-;3310:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3275:86;3268:93;;;3039:329;;;:::o;488:33:11:-;;;;:::o;2136:92::-;2184:4;2207:13;;2200:20;;2136:92;:::o;528:38::-;;;;:::o;4723:162:1:-;4820:4;4843:18;:25;4862:5;4843:25;;;;;;;;;;;;;;;:35;4869:8;4843:35;;;;;;;;;;;;;;;;;;;;;;;;;4836:42;;4723:162;;;;:::o;1155:655:11:-;1199:12:12;:10;:12::i;:::-;1188:23;;:7;:5;:7::i;:::-;:23;;;1180:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1235:1:11::1;1218:13;;:18;1210:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;1310:1;1288:18;;:23;;1280:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;384:3;1398:18;;1388:29;1383:35;;:49;;;;:::i;:::-;1367:13;:65;;;;1602:3;1581:18;;1566:12;:33;;;;:::i;:::-;:39;1562:133;;;384:3;1667:1;1652:12;:16;;;;:::i;:::-;1642:27;1637:33;;:47;;;;:::i;:::-;1621:13;:63;;;;1562:133;1761:1;1744:13;;:18;1740:64;;;1778:13;;:15;;;;;;;;;:::i;:::-;;;;;;1740:64;1155:655::o:0;307:32::-;;;;;;;;;;;;;:::o;4911:208::-;1199:12:12;:10;:12::i;:::-;1188:23;;:7;:5;:7::i;:::-;:23;;;1180:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5020:1:11::1;5000:22;;:8;:22;;;;4992:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5083:28;5102:8;5083:18;:28::i;:::-;4911:208:::0;:::o;3560:114::-;1199:12:12;:10;:12::i;:::-;1188:23;;:7;:5;:7::i;:::-;:23;;;1180:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3653:10:11::1;3640;:23;;;;;;;;;;;;:::i;:::-;;3560:114:::0;:::o;1160:320:9:-;1220:4;1472:1;1450:7;:19;;;:23;1443:30;;1160:320;;;:::o;2545:572:2:-;2684:45;2711:4;2717:2;2721:7;2684:26;:45::i;:::-;2760:1;2744:18;;:4;:18;;;2740:183;;;2778:40;2810:7;2778:31;:40::i;:::-;2740:183;;;2847:2;2839:10;;:4;:10;;;2835:88;;2865:47;2898:4;2904:7;2865:32;:47::i;:::-;2835:88;2740:183;2950:1;2936:16;;:2;:16;;;2932:179;;;2968:45;3005:7;2968:36;:45::i;:::-;2932:179;;;3040:4;3034:10;;:2;:10;;;3030:81;;3060:40;3088:2;3092:7;3060:27;:40::i;:::-;3030:81;2932:179;2545:572;;;:::o;13895:122:1:-;;;;:::o;911:222:2:-;1013:4;1051:35;1036:50;;;:11;:50;;;;:90;;;;1090:36;1114:11;1090:23;:36::i;:::-;1036:90;1029:97;;911:222;;;:::o;7380:125:1:-;7445:4;7496:1;7468:30;;:7;:16;7476:7;7468:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7461:37;;7380:125;;;:::o;640:96:10:-;693:7;719:10;712:17;;640:96;:::o;11389:171:1:-;11490:2;11463:15;:24;11479:7;11463:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11545:7;11541:2;11507:46;;11516:23;11531:7;11516:14;:23::i;:::-;11507:46;;;;;;;;;;;;11389:171;;:::o;7663:344::-;7756:4;7780:16;7788:7;7780;:16::i;:::-;7772:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7855:13;7871:23;7886:7;7871:14;:23::i;:::-;7855:39;;7923:5;7912:16;;:7;:16;;;:51;;;;7956:7;7932:31;;:20;7944:7;7932:11;:20::i;:::-;:31;;;7912:51;:87;;;;7967:32;7984:5;7991:7;7967:16;:32::i;:::-;7912:87;7904:96;;;7663:344;;;;:::o;10673:605::-;10827:4;10800:31;;:23;10815:7;10800:14;:23::i;:::-;:31;;;10792:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;10905:1;10891:16;;:2;:16;;;;10883:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10959:39;10980:4;10986:2;10990:7;10959:20;:39::i;:::-;11060:29;11077:1;11081:7;11060:8;:29::i;:::-;11119:1;11100:9;:15;11110:4;11100:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;11147:1;11130:9;:13;11140:2;11130:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;11177:2;11158:7;:16;11166:7;11158:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;11214:7;11210:2;11195:27;;11204:4;11195:27;;;;;;;;;;;;11233:38;11253:4;11259:2;11263:7;11233:19;:38::i;:::-;10673:605;;;:::o;4120:467:11:-;4166:4;4191:10;4204:13;:11;:13::i;:::-;4191:26;;4227:17;4247:23;4257:12;:10;:12::i;:::-;4247:9;:23::i;:::-;4227:43;;4290:7;:21;4298:12;:10;:12::i;:::-;4290:21;;;;;;;;;;;;;;;;;;;;;;;;;4289:22;4281:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;4348:32;4367:12;:10;:12::i;:::-;4348:18;:32::i;:::-;4347:33;4339:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;441:1;4413:9;:27;4405:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;4469:12;;;;;;;;;;;4461:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;384:3;4520:1;4515:2;:6;;;;:::i;:::-;:19;;4507:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;4576:4;4569:11;;;;4120:467;:::o;3781:332::-;3889:4;3866:7;:21;3874:12;:10;:12::i;:::-;3866:21;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;3911:9;3923:13;:11;:13::i;:::-;3911:25;;3956:9;3951:130;3975:14;3971:1;:18;3951:130;;;4018:25;4028:7;4041:1;4037;:5;;;;:::i;:::-;4018:9;:25::i;:::-;3991:3;;;;;:::i;:::-;;;;3951:130;;;;3843:270;3781:332;;:::o;2210:187:12:-;2283:16;2302:6;;;;;;;;;;;2283:25;;2327:8;2318:6;;:17;;;;;;;;;;;;;;;;;;2381:8;2350:40;;2371:8;2350:40;;;;;;;;;;;;2273:124;2210:187;:::o;11695:307:1:-;11845:8;11836:17;;:5;:17;;;;11828:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;11931:8;11893:18;:25;11912:5;11893:25;;;;;;;;;;;;;;;:35;11919:8;11893:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;11976:8;11954:41;;11969:5;11954:41;;;11986:8;11954:41;;;;;;:::i;:::-;;;;;;;;11695:307;;;:::o;6770:::-;6921:28;6931:4;6937:2;6941:7;6921:9;:28::i;:::-;6967:48;6990:4;6996:2;7000:7;7009:5;6967:22;:48::i;:::-;6959:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6770:307;;;;:::o;3431:123:11:-;3491:13;3527:16;3520:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3431:123;:::o;328:703:13:-;384:13;610:1;601:5;:10;597:51;;;627:10;;;;;;;;;;;;;;;;;;;;;597:51;657:12;672:5;657:20;;687:14;711:75;726:1;718:4;:9;711:75;;743:8;;;;;:::i;:::-;;;;773:2;765:10;;;;;:::i;:::-;;;711:75;;;795:19;827:6;817:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;795:39;;844:150;860:1;851:5;:10;844:150;;887:1;877:11;;;;;:::i;:::-;;;953:2;945:5;:10;;;;:::i;:::-;932:2;:24;;;;:::i;:::-;919:39;;902:6;909;902:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;981:2;972:11;;;;;:::i;:::-;;;844:150;;;1017:6;1003:21;;;;;328:703;;;;:::o;3823:161:2:-;3926:10;:17;;;;3899:15;:24;3915:7;3899:24;;;;;;;;;;;:44;;;;3953:10;3969:7;3953:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3823:161;:::o;4601:970::-;4863:22;4913:1;4888:22;4905:4;4888:16;:22::i;:::-;:26;;;;:::i;:::-;4863:51;;4924:18;4945:17;:26;4963:7;4945:26;;;;;;;;;;;;4924:47;;5089:14;5075:10;:28;5071:323;;5119:19;5141:12;:18;5154:4;5141:18;;;;;;;;;;;;;;;:34;5160:14;5141:34;;;;;;;;;;;;5119:56;;5223:11;5190:12;:18;5203:4;5190:18;;;;;;;;;;;;;;;:30;5209:10;5190:30;;;;;;;;;;;:44;;;;5339:10;5306:17;:30;5324:11;5306:30;;;;;;;;;;;:43;;;;5105:289;5071:323;5487:17;:26;5505:7;5487:26;;;;;;;;;;;5480:33;;;5530:12;:18;5543:4;5530:18;;;;;;;;;;;;;;;:34;5549:14;5530:34;;;;;;;;;;;5523:41;;;4682:889;;4601:970;;:::o;5859:1061::-;6108:22;6153:1;6133:10;:17;;;;:21;;;;:::i;:::-;6108:46;;6164:18;6185:15;:24;6201:7;6185:24;;;;;;;;;;;;6164:45;;6531:19;6553:10;6564:14;6553:26;;;;;;;;:::i;:::-;;;;;;;;;;6531:48;;6615:11;6590:10;6601;6590:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;6725:10;6694:15;:28;6710:11;6694:28;;;;;;;;;;;:41;;;;6863:15;:24;6879:7;6863:24;;;;;;;;;;;6856:31;;;6897:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5930:990;;;5859:1061;:::o;3411:217::-;3495:14;3512:20;3529:2;3512:16;:20::i;:::-;3495:37;;3569:7;3542:12;:16;3555:2;3542:16;;;;;;;;;;;;;;;:24;3559:6;3542:24;;;;;;;;;;;:34;;;;3615:6;3586:17;:26;3604:7;3586:26;;;;;;;;;;;:35;;;;3485:143;3411:217;;:::o;1532:361:1:-;1634:4;1684:25;1669:40;;;:11;:40;;;;:104;;;;1740:33;1725:48;;;:11;:48;;;;1669:104;:161;;;;1804:26;1789:41;;;:11;:41;;;;1669:161;:217;;;;1861:25;1846:40;;;:11;:40;;;;1669:217;1650:236;;1532:361;;;:::o;2873:187:11:-;3004:45;3031:4;3037:2;3041:7;3004:26;:45::i;:::-;2873:187;;;:::o;14397:121:1:-;;;;:::o;8337:108::-;8412:26;8422:2;8426:7;8412:26;;;;;;;;;;;;:9;:26::i;:::-;8337:108;;:::o;12555:778::-;12705:4;12725:15;:2;:13;;;:15::i;:::-;12721:606;;;12776:2;12760:36;;;12797:12;:10;:12::i;:::-;12811:4;12817:7;12826:5;12760:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;12756:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13016:1;12999:6;:13;:18;12995:266;;;13041:60;;;;;;;;;;:::i;:::-;;;;;;;;12995:266;13213:6;13207:13;13198:6;13194:2;13190:15;13183:38;12756:519;12892:41;;;12882:51;;;:6;:51;;;;12875:58;;;;;12721:606;13312:4;13305:11;;12555:778;;;;;;;:::o;8666:311::-;8791:18;8797:2;8801:7;8791:5;:18::i;:::-;8840:54;8871:1;8875:2;8879:7;8888:5;8840:22;:54::i;:::-;8819:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;8666:311;;;:::o;9299:427::-;9392:1;9378:16;;:2;:16;;;;9370:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9450:16;9458:7;9450;:16::i;:::-;9449:17;9441:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9510:45;9539:1;9543:2;9547:7;9510:20;:45::i;:::-;9583:1;9566:9;:13;9576:2;9566:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;9613:2;9594:7;:16;9602:7;9594:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9656:7;9652:2;9631:33;;9648:1;9631:33;;;;;;;;;;;;9675:44;9703:1;9707:2;9711:7;9675:19;:44::i;:::-;9299:427;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:14:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:327::-;5678:6;5727:2;5715:9;5706:7;5702:23;5698:32;5695:119;;;5733:79;;:::i;:::-;5695:119;5853:1;5878:52;5922:7;5913:6;5902:9;5898:22;5878:52;:::i;:::-;5868:62;;5824:116;5620:327;;;;:::o;5953:349::-;6022:6;6071:2;6059:9;6050:7;6046:23;6042:32;6039:119;;;6077:79;;:::i;:::-;6039:119;6197:1;6222:63;6277:7;6268:6;6257:9;6253:22;6222:63;:::i;:::-;6212:73;;6168:127;5953:349;;;;:::o;6308:509::-;6377:6;6426:2;6414:9;6405:7;6401:23;6397:32;6394:119;;;6432:79;;:::i;:::-;6394:119;6580:1;6569:9;6565:17;6552:31;6610:18;6602:6;6599:30;6596:117;;;6632:79;;:::i;:::-;6596:117;6737:63;6792:7;6783:6;6772:9;6768:22;6737:63;:::i;:::-;6727:73;;6523:287;6308:509;;;;:::o;6823:329::-;6882:6;6931:2;6919:9;6910:7;6906:23;6902:32;6899:119;;;6937:79;;:::i;:::-;6899:119;7057:1;7082:53;7127:7;7118:6;7107:9;7103:22;7082:53;:::i;:::-;7072:63;;7028:117;6823:329;;;;:::o;7158:474::-;7226:6;7234;7283:2;7271:9;7262:7;7258:23;7254:32;7251:119;;;7289:79;;:::i;:::-;7251:119;7409:1;7434:53;7479:7;7470:6;7459:9;7455:22;7434:53;:::i;:::-;7424:63;;7380:117;7536:2;7562:53;7607:7;7598:6;7587:9;7583:22;7562:53;:::i;:::-;7552:63;;7507:118;7158:474;;;;;:::o;7638:118::-;7725:24;7743:5;7725:24;:::i;:::-;7720:3;7713:37;7638:118;;:::o;7762:109::-;7843:21;7858:5;7843:21;:::i;:::-;7838:3;7831:34;7762:109;;:::o;7877:360::-;7963:3;7991:38;8023:5;7991:38;:::i;:::-;8045:70;8108:6;8103:3;8045:70;:::i;:::-;8038:77;;8124:52;8169:6;8164:3;8157:4;8150:5;8146:16;8124:52;:::i;:::-;8201:29;8223:6;8201:29;:::i;:::-;8196:3;8192:39;8185:46;;7967:270;7877:360;;;;:::o;8243:364::-;8331:3;8359:39;8392:5;8359:39;:::i;:::-;8414:71;8478:6;8473:3;8414:71;:::i;:::-;8407:78;;8494:52;8539:6;8534:3;8527:4;8520:5;8516:16;8494:52;:::i;:::-;8571:29;8593:6;8571:29;:::i;:::-;8566:3;8562:39;8555:46;;8335:272;8243:364;;;;:::o;8613:377::-;8719:3;8747:39;8780:5;8747:39;:::i;:::-;8802:89;8884:6;8879:3;8802:89;:::i;:::-;8795:96;;8900:52;8945:6;8940:3;8933:4;8926:5;8922:16;8900:52;:::i;:::-;8977:6;8972:3;8968:16;8961:23;;8723:267;8613:377;;;;:::o;8996:366::-;9138:3;9159:67;9223:2;9218:3;9159:67;:::i;:::-;9152:74;;9235:93;9324:3;9235:93;:::i;:::-;9353:2;9348:3;9344:12;9337:19;;8996:366;;;:::o;9368:::-;9510:3;9531:67;9595:2;9590:3;9531:67;:::i;:::-;9524:74;;9607:93;9696:3;9607:93;:::i;:::-;9725:2;9720:3;9716:12;9709:19;;9368:366;;;:::o;9740:365::-;9882:3;9903:66;9967:1;9962:3;9903:66;:::i;:::-;9896:73;;9978:93;10067:3;9978:93;:::i;:::-;10096:2;10091:3;10087:12;10080:19;;9740:365;;;:::o;10111:366::-;10253:3;10274:67;10338:2;10333:3;10274:67;:::i;:::-;10267:74;;10350:93;10439:3;10350:93;:::i;:::-;10468:2;10463:3;10459:12;10452:19;;10111:366;;;:::o;10483:::-;10625:3;10646:67;10710:2;10705:3;10646:67;:::i;:::-;10639:74;;10722:93;10811:3;10722:93;:::i;:::-;10840:2;10835:3;10831:12;10824:19;;10483:366;;;:::o;10855:::-;10997:3;11018:67;11082:2;11077:3;11018:67;:::i;:::-;11011:74;;11094:93;11183:3;11094:93;:::i;:::-;11212:2;11207:3;11203:12;11196:19;;10855:366;;;:::o;11227:::-;11369:3;11390:67;11454:2;11449:3;11390:67;:::i;:::-;11383:74;;11466:93;11555:3;11466:93;:::i;:::-;11584:2;11579:3;11575:12;11568:19;;11227:366;;;:::o;11599:::-;11741:3;11762:67;11826:2;11821:3;11762:67;:::i;:::-;11755:74;;11838:93;11927:3;11838:93;:::i;:::-;11956:2;11951:3;11947:12;11940:19;;11599:366;;;:::o;11971:::-;12113:3;12134:67;12198:2;12193:3;12134:67;:::i;:::-;12127:74;;12210:93;12299:3;12210:93;:::i;:::-;12328:2;12323:3;12319:12;12312:19;;11971:366;;;:::o;12343:::-;12485:3;12506:67;12570:2;12565:3;12506:67;:::i;:::-;12499:74;;12582:93;12671:3;12582:93;:::i;:::-;12700:2;12695:3;12691:12;12684:19;;12343:366;;;:::o;12715:::-;12857:3;12878:67;12942:2;12937:3;12878:67;:::i;:::-;12871:74;;12954:93;13043:3;12954:93;:::i;:::-;13072:2;13067:3;13063:12;13056:19;;12715:366;;;:::o;13087:::-;13229:3;13250:67;13314:2;13309:3;13250:67;:::i;:::-;13243:74;;13326:93;13415:3;13326:93;:::i;:::-;13444:2;13439:3;13435:12;13428:19;;13087:366;;;:::o;13459:::-;13601:3;13622:67;13686:2;13681:3;13622:67;:::i;:::-;13615:74;;13698:93;13787:3;13698:93;:::i;:::-;13816:2;13811:3;13807:12;13800:19;;13459:366;;;:::o;13831:::-;13973:3;13994:67;14058:2;14053:3;13994:67;:::i;:::-;13987:74;;14070:93;14159:3;14070:93;:::i;:::-;14188:2;14183:3;14179:12;14172:19;;13831:366;;;:::o;14203:::-;14345:3;14366:67;14430:2;14425:3;14366:67;:::i;:::-;14359:74;;14442:93;14531:3;14442:93;:::i;:::-;14560:2;14555:3;14551:12;14544:19;;14203:366;;;:::o;14575:::-;14717:3;14738:67;14802:2;14797:3;14738:67;:::i;:::-;14731:74;;14814:93;14903:3;14814:93;:::i;:::-;14932:2;14927:3;14923:12;14916:19;;14575:366;;;:::o;14947:::-;15089:3;15110:67;15174:2;15169:3;15110:67;:::i;:::-;15103:74;;15186:93;15275:3;15186:93;:::i;:::-;15304:2;15299:3;15295:12;15288:19;;14947:366;;;:::o;15319:::-;15461:3;15482:67;15546:2;15541:3;15482:67;:::i;:::-;15475:74;;15558:93;15647:3;15558:93;:::i;:::-;15676:2;15671:3;15667:12;15660:19;;15319:366;;;:::o;15691:::-;15833:3;15854:67;15918:2;15913:3;15854:67;:::i;:::-;15847:74;;15930:93;16019:3;15930:93;:::i;:::-;16048:2;16043:3;16039:12;16032:19;;15691:366;;;:::o;16063:::-;16205:3;16226:67;16290:2;16285:3;16226:67;:::i;:::-;16219:74;;16302:93;16391:3;16302:93;:::i;:::-;16420:2;16415:3;16411:12;16404:19;;16063:366;;;:::o;16435:::-;16577:3;16598:67;16662:2;16657:3;16598:67;:::i;:::-;16591:74;;16674:93;16763:3;16674:93;:::i;:::-;16792:2;16787:3;16783:12;16776:19;;16435:366;;;:::o;16807:::-;16949:3;16970:67;17034:2;17029:3;16970:67;:::i;:::-;16963:74;;17046:93;17135:3;17046:93;:::i;:::-;17164:2;17159:3;17155:12;17148:19;;16807:366;;;:::o;17179:::-;17321:3;17342:67;17406:2;17401:3;17342:67;:::i;:::-;17335:74;;17418:93;17507:3;17418:93;:::i;:::-;17536:2;17531:3;17527:12;17520:19;;17179:366;;;:::o;17551:::-;17693:3;17714:67;17778:2;17773:3;17714:67;:::i;:::-;17707:74;;17790:93;17879:3;17790:93;:::i;:::-;17908:2;17903:3;17899:12;17892:19;;17551:366;;;:::o;17923:::-;18065:3;18086:67;18150:2;18145:3;18086:67;:::i;:::-;18079:74;;18162:93;18251:3;18162:93;:::i;:::-;18280:2;18275:3;18271:12;18264:19;;17923:366;;;:::o;18295:::-;18437:3;18458:67;18522:2;18517:3;18458:67;:::i;:::-;18451:74;;18534:93;18623:3;18534:93;:::i;:::-;18652:2;18647:3;18643:12;18636:19;;18295:366;;;:::o;18667:::-;18809:3;18830:67;18894:2;18889:3;18830:67;:::i;:::-;18823:74;;18906:93;18995:3;18906:93;:::i;:::-;19024:2;19019:3;19015:12;19008:19;;18667:366;;;:::o;19039:118::-;19126:24;19144:5;19126:24;:::i;:::-;19121:3;19114:37;19039:118;;:::o;19163:435::-;19343:3;19365:95;19456:3;19447:6;19365:95;:::i;:::-;19358:102;;19477:95;19568:3;19559:6;19477:95;:::i;:::-;19470:102;;19589:3;19582:10;;19163:435;;;;;:::o;19604:222::-;19697:4;19735:2;19724:9;19720:18;19712:26;;19748:71;19816:1;19805:9;19801:17;19792:6;19748:71;:::i;:::-;19604:222;;;;:::o;19832:640::-;20027:4;20065:3;20054:9;20050:19;20042:27;;20079:71;20147:1;20136:9;20132:17;20123:6;20079:71;:::i;:::-;20160:72;20228:2;20217:9;20213:18;20204:6;20160:72;:::i;:::-;20242;20310:2;20299:9;20295:18;20286:6;20242:72;:::i;:::-;20361:9;20355:4;20351:20;20346:2;20335:9;20331:18;20324:48;20389:76;20460:4;20451:6;20389:76;:::i;:::-;20381:84;;19832:640;;;;;;;:::o;20478:332::-;20599:4;20637:2;20626:9;20622:18;20614:26;;20650:71;20718:1;20707:9;20703:17;20694:6;20650:71;:::i;:::-;20731:72;20799:2;20788:9;20784:18;20775:6;20731:72;:::i;:::-;20478:332;;;;;:::o;20816:210::-;20903:4;20941:2;20930:9;20926:18;20918:26;;20954:65;21016:1;21005:9;21001:17;20992:6;20954:65;:::i;:::-;20816:210;;;;:::o;21032:313::-;21145:4;21183:2;21172:9;21168:18;21160:26;;21232:9;21226:4;21222:20;21218:1;21207:9;21203:17;21196:47;21260:78;21333:4;21324:6;21260:78;:::i;:::-;21252:86;;21032:313;;;;:::o;21351:419::-;21517:4;21555:2;21544:9;21540:18;21532:26;;21604:9;21598:4;21594:20;21590:1;21579:9;21575:17;21568:47;21632:131;21758:4;21632:131;:::i;:::-;21624:139;;21351:419;;;:::o;21776:::-;21942:4;21980:2;21969:9;21965:18;21957:26;;22029:9;22023:4;22019:20;22015:1;22004:9;22000:17;21993:47;22057:131;22183:4;22057:131;:::i;:::-;22049:139;;21776:419;;;:::o;22201:::-;22367:4;22405:2;22394:9;22390:18;22382:26;;22454:9;22448:4;22444:20;22440:1;22429:9;22425:17;22418:47;22482:131;22608:4;22482:131;:::i;:::-;22474:139;;22201:419;;;:::o;22626:::-;22792:4;22830:2;22819:9;22815:18;22807:26;;22879:9;22873:4;22869:20;22865:1;22854:9;22850:17;22843:47;22907:131;23033:4;22907:131;:::i;:::-;22899:139;;22626:419;;;:::o;23051:::-;23217:4;23255:2;23244:9;23240:18;23232:26;;23304:9;23298:4;23294:20;23290:1;23279:9;23275:17;23268:47;23332:131;23458:4;23332:131;:::i;:::-;23324:139;;23051:419;;;:::o;23476:::-;23642:4;23680:2;23669:9;23665:18;23657:26;;23729:9;23723:4;23719:20;23715:1;23704:9;23700:17;23693:47;23757:131;23883:4;23757:131;:::i;:::-;23749:139;;23476:419;;;:::o;23901:::-;24067:4;24105:2;24094:9;24090:18;24082:26;;24154:9;24148:4;24144:20;24140:1;24129:9;24125:17;24118:47;24182:131;24308:4;24182:131;:::i;:::-;24174:139;;23901:419;;;:::o;24326:::-;24492:4;24530:2;24519:9;24515:18;24507:26;;24579:9;24573:4;24569:20;24565:1;24554:9;24550:17;24543:47;24607:131;24733:4;24607:131;:::i;:::-;24599:139;;24326:419;;;:::o;24751:::-;24917:4;24955:2;24944:9;24940:18;24932:26;;25004:9;24998:4;24994:20;24990:1;24979:9;24975:17;24968:47;25032:131;25158:4;25032:131;:::i;:::-;25024:139;;24751:419;;;:::o;25176:::-;25342:4;25380:2;25369:9;25365:18;25357:26;;25429:9;25423:4;25419:20;25415:1;25404:9;25400:17;25393:47;25457:131;25583:4;25457:131;:::i;:::-;25449:139;;25176:419;;;:::o;25601:::-;25767:4;25805:2;25794:9;25790:18;25782:26;;25854:9;25848:4;25844:20;25840:1;25829:9;25825:17;25818:47;25882:131;26008:4;25882:131;:::i;:::-;25874:139;;25601:419;;;:::o;26026:::-;26192:4;26230:2;26219:9;26215:18;26207:26;;26279:9;26273:4;26269:20;26265:1;26254:9;26250:17;26243:47;26307:131;26433:4;26307:131;:::i;:::-;26299:139;;26026:419;;;:::o;26451:::-;26617:4;26655:2;26644:9;26640:18;26632:26;;26704:9;26698:4;26694:20;26690:1;26679:9;26675:17;26668:47;26732:131;26858:4;26732:131;:::i;:::-;26724:139;;26451:419;;;:::o;26876:::-;27042:4;27080:2;27069:9;27065:18;27057:26;;27129:9;27123:4;27119:20;27115:1;27104:9;27100:17;27093:47;27157:131;27283:4;27157:131;:::i;:::-;27149:139;;26876:419;;;:::o;27301:::-;27467:4;27505:2;27494:9;27490:18;27482:26;;27554:9;27548:4;27544:20;27540:1;27529:9;27525:17;27518:47;27582:131;27708:4;27582:131;:::i;:::-;27574:139;;27301:419;;;:::o;27726:::-;27892:4;27930:2;27919:9;27915:18;27907:26;;27979:9;27973:4;27969:20;27965:1;27954:9;27950:17;27943:47;28007:131;28133:4;28007:131;:::i;:::-;27999:139;;27726:419;;;:::o;28151:::-;28317:4;28355:2;28344:9;28340:18;28332:26;;28404:9;28398:4;28394:20;28390:1;28379:9;28375:17;28368:47;28432:131;28558:4;28432:131;:::i;:::-;28424:139;;28151:419;;;:::o;28576:::-;28742:4;28780:2;28769:9;28765:18;28757:26;;28829:9;28823:4;28819:20;28815:1;28804:9;28800:17;28793:47;28857:131;28983:4;28857:131;:::i;:::-;28849:139;;28576:419;;;:::o;29001:::-;29167:4;29205:2;29194:9;29190:18;29182:26;;29254:9;29248:4;29244:20;29240:1;29229:9;29225:17;29218:47;29282:131;29408:4;29282:131;:::i;:::-;29274:139;;29001:419;;;:::o;29426:::-;29592:4;29630:2;29619:9;29615:18;29607:26;;29679:9;29673:4;29669:20;29665:1;29654:9;29650:17;29643:47;29707:131;29833:4;29707:131;:::i;:::-;29699:139;;29426:419;;;:::o;29851:::-;30017:4;30055:2;30044:9;30040:18;30032:26;;30104:9;30098:4;30094:20;30090:1;30079:9;30075:17;30068:47;30132:131;30258:4;30132:131;:::i;:::-;30124:139;;29851:419;;;:::o;30276:::-;30442:4;30480:2;30469:9;30465:18;30457:26;;30529:9;30523:4;30519:20;30515:1;30504:9;30500:17;30493:47;30557:131;30683:4;30557:131;:::i;:::-;30549:139;;30276:419;;;:::o;30701:::-;30867:4;30905:2;30894:9;30890:18;30882:26;;30954:9;30948:4;30944:20;30940:1;30929:9;30925:17;30918:47;30982:131;31108:4;30982:131;:::i;:::-;30974:139;;30701:419;;;:::o;31126:::-;31292:4;31330:2;31319:9;31315:18;31307:26;;31379:9;31373:4;31369:20;31365:1;31354:9;31350:17;31343:47;31407:131;31533:4;31407:131;:::i;:::-;31399:139;;31126:419;;;:::o;31551:::-;31717:4;31755:2;31744:9;31740:18;31732:26;;31804:9;31798:4;31794:20;31790:1;31779:9;31775:17;31768:47;31832:131;31958:4;31832:131;:::i;:::-;31824:139;;31551:419;;;:::o;31976:::-;32142:4;32180:2;32169:9;32165:18;32157:26;;32229:9;32223:4;32219:20;32215:1;32204:9;32200:17;32193:47;32257:131;32383:4;32257:131;:::i;:::-;32249:139;;31976:419;;;:::o;32401:::-;32567:4;32605:2;32594:9;32590:18;32582:26;;32654:9;32648:4;32644:20;32640:1;32629:9;32625:17;32618:47;32682:131;32808:4;32682:131;:::i;:::-;32674:139;;32401:419;;;:::o;32826:222::-;32919:4;32957:2;32946:9;32942:18;32934:26;;32970:71;33038:1;33027:9;33023:17;33014:6;32970:71;:::i;:::-;32826:222;;;;:::o;33054:129::-;33088:6;33115:20;;:::i;:::-;33105:30;;33144:33;33172:4;33164:6;33144:33;:::i;:::-;33054:129;;;:::o;33189:75::-;33222:6;33255:2;33249:9;33239:19;;33189:75;:::o;33270:307::-;33331:4;33421:18;33413:6;33410:30;33407:56;;;33443:18;;:::i;:::-;33407:56;33481:29;33503:6;33481:29;:::i;:::-;33473:37;;33565:4;33559;33555:15;33547:23;;33270:307;;;:::o;33583:308::-;33645:4;33735:18;33727:6;33724:30;33721:56;;;33757:18;;:::i;:::-;33721:56;33795:29;33817:6;33795:29;:::i;:::-;33787:37;;33879:4;33873;33869:15;33861:23;;33583:308;;;:::o;33897:98::-;33948:6;33982:5;33976:12;33966:22;;33897:98;;;:::o;34001:99::-;34053:6;34087:5;34081:12;34071:22;;34001:99;;;:::o;34106:168::-;34189:11;34223:6;34218:3;34211:19;34263:4;34258:3;34254:14;34239:29;;34106:168;;;;:::o;34280:169::-;34364:11;34398:6;34393:3;34386:19;34438:4;34433:3;34429:14;34414:29;;34280:169;;;;:::o;34455:148::-;34557:11;34594:3;34579:18;;34455:148;;;;:::o;34609:305::-;34649:3;34668:20;34686:1;34668:20;:::i;:::-;34663:25;;34702:20;34720:1;34702:20;:::i;:::-;34697:25;;34856:1;34788:66;34784:74;34781:1;34778:81;34775:107;;;34862:18;;:::i;:::-;34775:107;34906:1;34903;34899:9;34892:16;;34609:305;;;;:::o;34920:185::-;34960:1;34977:20;34995:1;34977:20;:::i;:::-;34972:25;;35011:20;35029:1;35011:20;:::i;:::-;35006:25;;35050:1;35040:35;;35055:18;;:::i;:::-;35040:35;35097:1;35094;35090:9;35085:14;;34920:185;;;;:::o;35111:348::-;35151:7;35174:20;35192:1;35174:20;:::i;:::-;35169:25;;35208:20;35226:1;35208:20;:::i;:::-;35203:25;;35396:1;35328:66;35324:74;35321:1;35318:81;35313:1;35306:9;35299:17;35295:105;35292:131;;;35403:18;;:::i;:::-;35292:131;35451:1;35448;35444:9;35433:20;;35111:348;;;;:::o;35465:191::-;35505:4;35525:20;35543:1;35525:20;:::i;:::-;35520:25;;35559:20;35577:1;35559:20;:::i;:::-;35554:25;;35598:1;35595;35592:8;35589:34;;;35603:18;;:::i;:::-;35589:34;35648:1;35645;35641:9;35633:17;;35465:191;;;;:::o;35662:96::-;35699:7;35728:24;35746:5;35728:24;:::i;:::-;35717:35;;35662:96;;;:::o;35764:90::-;35798:7;35841:5;35834:13;35827:21;35816:32;;35764:90;;;:::o;35860:149::-;35896:7;35936:66;35929:5;35925:78;35914:89;;35860:149;;;:::o;36015:126::-;36052:7;36092:42;36085:5;36081:54;36070:65;;36015:126;;;:::o;36147:77::-;36184:7;36213:5;36202:16;;36147:77;;;:::o;36230:154::-;36314:6;36309:3;36304;36291:30;36376:1;36367:6;36362:3;36358:16;36351:27;36230:154;;;:::o;36390:307::-;36458:1;36468:113;36482:6;36479:1;36476:13;36468:113;;;36567:1;36562:3;36558:11;36552:18;36548:1;36543:3;36539:11;36532:39;36504:2;36501:1;36497:10;36492:15;;36468:113;;;36599:6;36596:1;36593:13;36590:101;;;36679:1;36670:6;36665:3;36661:16;36654:27;36590:101;36439:258;36390:307;;;:::o;36703:320::-;36747:6;36784:1;36778:4;36774:12;36764:22;;36831:1;36825:4;36821:12;36852:18;36842:81;;36908:4;36900:6;36896:17;36886:27;;36842:81;36970:2;36962:6;36959:14;36939:18;36936:38;36933:84;;;36989:18;;:::i;:::-;36933:84;36754:269;36703:320;;;:::o;37029:281::-;37112:27;37134:4;37112:27;:::i;:::-;37104:6;37100:40;37242:6;37230:10;37227:22;37206:18;37194:10;37191:34;37188:62;37185:88;;;37253:18;;:::i;:::-;37185:88;37293:10;37289:2;37282:22;37072:238;37029:281;;:::o;37316:233::-;37355:3;37378:24;37396:5;37378:24;:::i;:::-;37369:33;;37424:66;37417:5;37414:77;37411:103;;;37494:18;;:::i;:::-;37411:103;37541:1;37534:5;37530:13;37523:20;;37316:233;;;:::o;37555:176::-;37587:1;37604:20;37622:1;37604:20;:::i;:::-;37599:25;;37638:20;37656:1;37638:20;:::i;:::-;37633:25;;37677:1;37667:35;;37682:18;;:::i;:::-;37667:35;37723:1;37720;37716:9;37711:14;;37555:176;;;;:::o;37737:180::-;37785:77;37782:1;37775:88;37882:4;37879:1;37872:15;37906:4;37903:1;37896:15;37923:180;37971:77;37968:1;37961:88;38068:4;38065:1;38058:15;38092:4;38089:1;38082:15;38109:180;38157:77;38154:1;38147:88;38254:4;38251:1;38244:15;38278:4;38275:1;38268:15;38295:180;38343:77;38340:1;38333:88;38440:4;38437:1;38430:15;38464:4;38461:1;38454:15;38481:180;38529:77;38526:1;38519:88;38626:4;38623:1;38616:15;38650:4;38647:1;38640:15;38667:180;38715:77;38712:1;38705:88;38812:4;38809:1;38802:15;38836:4;38833:1;38826:15;38853:117;38962:1;38959;38952:12;38976:117;39085:1;39082;39075:12;39099:117;39208:1;39205;39198:12;39222:117;39331:1;39328;39321:12;39345:102;39386:6;39437:2;39433:7;39428:2;39421:5;39417:14;39413:28;39403:38;;39345:102;;;:::o;39453:171::-;39593:23;39589:1;39581:6;39577:14;39570:47;39453:171;:::o;39630:161::-;39770:13;39766:1;39758:6;39754:14;39747:37;39630:161;:::o;39797:156::-;39937:8;39933:1;39925:6;39921:14;39914:32;39797:156;:::o;39959:230::-;40099:34;40095:1;40087:6;40083:14;40076:58;40168:13;40163:2;40155:6;40151:15;40144:38;39959:230;:::o;40195:237::-;40335:34;40331:1;40323:6;40319:14;40312:58;40404:20;40399:2;40391:6;40387:15;40380:45;40195:237;:::o;40438:225::-;40578:34;40574:1;40566:6;40562:14;40555:58;40647:8;40642:2;40634:6;40630:15;40623:33;40438:225;:::o;40669:224::-;40809:34;40805:1;40797:6;40793:14;40786:58;40878:7;40873:2;40865:6;40861:15;40854:32;40669:224;:::o;40899:178::-;41039:30;41035:1;41027:6;41023:14;41016:54;40899:178;:::o;41083:163::-;41223:15;41219:1;41211:6;41207:14;41200:39;41083:163;:::o;41252:161::-;41392:13;41388:1;41380:6;41376:14;41369:37;41252:161;:::o;41419:223::-;41559:34;41555:1;41547:6;41543:14;41536:58;41628:6;41623:2;41615:6;41611:15;41604:31;41419:223;:::o;41648:175::-;41788:27;41784:1;41776:6;41772:14;41765:51;41648:175;:::o;41829:231::-;41969:34;41965:1;41957:6;41953:14;41946:58;42038:14;42033:2;42025:6;42021:15;42014:39;41829:231;:::o;42066:179::-;42206:31;42202:1;42194:6;42190:14;42183:55;42066:179;:::o;42251:243::-;42391:34;42387:1;42379:6;42375:14;42368:58;42460:26;42455:2;42447:6;42443:15;42436:51;42251:243;:::o;42500:229::-;42640:34;42636:1;42628:6;42624:14;42617:58;42709:12;42704:2;42696:6;42692:15;42685:37;42500:229;:::o;42735:228::-;42875:34;42871:1;42863:6;42859:14;42852:58;42944:11;42939:2;42931:6;42927:15;42920:36;42735:228;:::o;42969:182::-;43109:34;43105:1;43097:6;43093:14;43086:58;42969:182;:::o;43157:231::-;43297:34;43293:1;43285:6;43281:14;43274:58;43366:14;43361:2;43353:6;43349:15;43342:39;43157:231;:::o;43394:182::-;43534:34;43530:1;43522:6;43518:14;43511:58;43394:182;:::o;43582:234::-;43722:34;43718:1;43710:6;43706:14;43699:58;43791:17;43786:2;43778:6;43774:15;43767:42;43582:234;:::o;43822:220::-;43962:34;43958:1;43950:6;43946:14;43939:58;44031:3;44026:2;44018:6;44014:15;44007:28;43822:220;:::o;44048:160::-;44188:12;44184:1;44176:6;44172:14;44165:36;44048:160;:::o;44214:182::-;44354:34;44350:1;44342:6;44338:14;44331:58;44214:182;:::o;44402:236::-;44542:34;44538:1;44530:6;44526:14;44519:58;44611:19;44606:2;44598:6;44594:15;44587:44;44402:236;:::o;44644:231::-;44784:34;44780:1;44772:6;44768:14;44761:58;44853:14;44848:2;44840:6;44836:15;44829:39;44644:231;:::o;44881:164::-;45021:16;45017:1;45009:6;45005:14;44998:40;44881:164;:::o;45051:122::-;45124:24;45142:5;45124:24;:::i;:::-;45117:5;45114:35;45104:63;;45163:1;45160;45153:12;45104:63;45051:122;:::o;45179:116::-;45249:21;45264:5;45249:21;:::i;:::-;45242:5;45239:32;45229:60;;45285:1;45282;45275:12;45229:60;45179:116;:::o;45301:120::-;45373:23;45390:5;45373:23;:::i;:::-;45366:5;45363:34;45353:62;;45411:1;45408;45401:12;45353:62;45301:120;:::o;45427:122::-;45500:24;45518:5;45500:24;:::i;:::-;45493:5;45490:35;45480:63;;45539:1;45536;45529:12;45480:63;45427:122;:::o
Swarm Source
ipfs://207e25e304f17b07fa765d137646330f97cf7c2e45f8dbfd8a2972541ee7689a
Loading...
Loading
Loading...
Loading
OVERVIEW
Maya and Yehuda Devir’s Genesis collection from the XOXO project. 101 Exclusive non-perfect couples, that were handpicked by the Devirs, with a one-of-a-kind background love story - a special narrative that makes them so unique and was crafted and written by Maya and Yehuda th...Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.