ERC-721
Overview
Max Total Supply
1,165 DRC
Holders
867
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 DRCLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
DragonRichClub
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity >=0.7.0 <0.9.0; import "ERC721Enumerable.sol"; import "Ownable.sol"; contract DragonRichClub is ERC721Enumerable, Ownable { using Strings for uint256; string public baseURI; string public notRevealedUri; uint256 public cost = 0.1 ether; uint256 public maxSupply = 10014; uint256 public maxMintAmount = 5; uint256 public nftPerAddressLimit = 5; bool public paused = false; bool public revealed = false; bool public onlyWhitelisted = true; mapping(address => bool) public whitelistedAddresses; mapping(address => uint256) public addressMintedBalance; mapping(address => bool) public airdropList; constructor( string memory _name, string memory _symbol, string memory _initBaseURI, string memory _initNotRevealedUri ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); setNotRevealedURI(_initNotRevealedUri); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint(uint256 _mintAmount) public payable { require(!paused, "the contract is paused"); uint256 supply = totalSupply(); require(_mintAmount > 0, "need to mint at least 1 NFT"); require(supply + _mintAmount <= maxSupply, "max NFT limit exceeded"); if (msg.sender != owner()) { uint256 ownerMintedCount = addressMintedBalance[msg.sender]; if(onlyWhitelisted == true) { require(isWhitelisted(msg.sender), "user is not whitelisted"); require(_mintAmount <= 1, "max mint amount per session exceeded"); require(ownerMintedCount + _mintAmount <= 1, "max NFT per address exceeded"); whitelistedAddresses[msg.sender] = false; } else{ require(ownerMintedCount + _mintAmount <= nftPerAddressLimit, "max NFT per address exceeded"); require(_mintAmount <= maxMintAmount, "max mint amount per session exceeded"); } if (airdropList[msg.sender]){ require(_mintAmount <= 1, "max mint amount per session exceeded"); airdropList[msg.sender] = false; } else{ require(msg.value >= cost * _mintAmount, "insufficient funds"); } } for (uint256 i = 1; i <= _mintAmount; i++) { addressMintedBalance[msg.sender]++; _safeMint(msg.sender, supply + i); } } function isWhitelisted(address _user) public view returns (bool) { return whitelistedAddresses[_user]; } function haveAirdrop(address _user) public view returns (bool) { return airdropList[_user]; } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); if(revealed == false) { return bytes(notRevealedUri).length > 0 ? string(abi.encodePacked(notRevealedUri, tokenId.toString(),".json")) : ""; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString())) : ""; } //only owner function reveal() public onlyOwner { revealed = true; } function setNftPerAddressLimit(uint256 _limit) public onlyOwner { nftPerAddressLimit = _limit; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setmaxSupply(uint256 _newmaxSupply) public onlyOwner { maxSupply = _newmaxSupply; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function pause(bool _state) public onlyOwner { paused = _state; } function setOnlyWhitelisted(bool _state) public onlyOwner { onlyWhitelisted = _state; } function unsetWhitelistUsers(address[] calldata _users) public onlyOwner { for (uint i = 0; i < _users.length; i++) { whitelistedAddresses[_users[i]] = false; } } function whitelistUsers(address[] calldata _users) public onlyOwner { for (uint i = 0; i < _users.length; i++) { whitelistedAddresses[_users[i]] = true; } } function airdrop(address[] calldata _users) public onlyOwner { for (uint i = 0; i < _users.length; i++) { airdropList[_users[i]] = true; } } function unsetAirdrop(address[] calldata _users) public onlyOwner { for (uint i = 0; i < _users.length; i++) { airdropList[_users[i]] = false; } } function withdraw(uint256 _partial) public payable onlyOwner { uint256 _total = address(this).balance / _partial; (bool l, ) = payable(0xE554050cE6d1a4091D697746C2d6C93E6D27Edc9).call{value: _total * 125 / 10000}(""); require(l); (bool t, ) = payable(0xf6F0D5ACC732Baf6CB630686583d0b2d8F8E726d).call{value: _total * 125 / 10000}(""); require(t); uint256 _total_owner = address(this).balance / _partial; (bool all1, ) = payable(0xC87AbA45fCcC8Ad40105Fc146329A5BA808640d8).call{value: _total_owner * 1/5}(""); require(all1); (bool all2, ) = payable(0xe00aB2F5770945303877CC851a9eDEb910b4D5Bf).call{value: _total_owner * 1/5}(""); require(all2); (bool all3, ) = payable(0x765e099451C67db3A038eEEd0def3970d95119E1).call{value: _total_owner * 1/5}(""); require(all3); (bool all4, ) = payable(0x30FB1C12f994EccdCf0567b56f15aC8F6655882a).call{value: _total_owner * 1/5}(""); require(all4); (bool all5, ) = payable(0x248bDB6908282A7F444A20F91ab1CF25de3C7bfE).call{value: _total_owner * 1/5}(""); require(all5); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (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 // OpenZeppelin Contracts v4.4.0 (utils/introspection/ERC165.sol) 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.0 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; import "IERC721.sol"; import "IERC721Receiver.sol"; import "IERC721Metadata.sol"; import "Address.sol"; import "Context.sol"; import "Strings.sol"; import "ERC165.sol"; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/ERC721Enumerable.sol) 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.0 (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 // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721.sol) 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 // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Enumerable.sol) 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 // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; import "IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (access/Ownable.sol) 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.0 (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":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"airdropList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"haveAirdrop","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setNftPerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxSupply","type":"uint256"}],"name":"setmaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"unsetAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"unsetWhitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"whitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistedAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_partial","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
608060405267016345785d8a0000600d5561271e600e556005600f5560056010556000601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff0219169083151502179055503480156200007e57600080fd5b50604051620061cd380380620061cd8339818101604052810190620000a49190620004a2565b83838160009080519060200190620000be92919062000374565b508060019080519060200190620000d792919062000374565b505050620000fa620000ee6200012660201b60201c565b6200012e60201b60201c565b6200010b82620001f460201b60201c565b6200011c816200029f60201b60201c565b5050505062000797565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002046200012660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200022a6200034a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000283576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200027a90620005b7565b60405180910390fd5b80600b90805190602001906200029b92919062000374565b5050565b620002af6200012660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002d56200034a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200032e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200032590620005b7565b60405180910390fd5b80600c90805190602001906200034692919062000374565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b82805462000382906200067f565b90600052602060002090601f016020900481019282620003a65760008555620003f2565b82601f10620003c157805160ff1916838001178555620003f2565b82800160010185558215620003f2579182015b82811115620003f1578251825591602001919060010190620003d4565b5b50905062000401919062000405565b5090565b5b808211156200042057600081600090555060010162000406565b5090565b60006200043b620004358462000602565b620005d9565b9050828152602081018484840111156200045a57620004596200074e565b5b6200046784828562000649565b509392505050565b600082601f83011262000487576200048662000749565b5b81516200049984826020860162000424565b91505092915050565b60008060008060808587031215620004bf57620004be62000758565b5b600085015167ffffffffffffffff811115620004e057620004df62000753565b5b620004ee878288016200046f565b945050602085015167ffffffffffffffff81111562000512576200051162000753565b5b62000520878288016200046f565b935050604085015167ffffffffffffffff81111562000544576200054362000753565b5b62000552878288016200046f565b925050606085015167ffffffffffffffff81111562000576576200057562000753565b5b62000584878288016200046f565b91505092959194509250565b60006200059f60208362000638565b9150620005ac826200076e565b602082019050919050565b60006020820190508181036000830152620005d28162000590565b9050919050565b6000620005e5620005f8565b9050620005f38282620006b5565b919050565b6000604051905090565b600067ffffffffffffffff82111562000620576200061f6200071a565b5b6200062b826200075d565b9050602081019050919050565b600082825260208201905092915050565b60005b83811015620006695780820151818401526020810190506200064c565b8381111562000679576000848401525b50505050565b600060028204905060018216806200069857607f821691505b60208210811415620006af57620006ae620006eb565b5b50919050565b620006c0826200075d565b810181811067ffffffffffffffff82111715620006e257620006e16200071a565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b615a2680620007a76000396000f3fe6080604052600436106102ae5760003560e01c806351830227116101755780639c70b512116100dc578063c87b56dd11610095578063e985e9c51161006f578063e985e9c514610ac8578063edec5f2714610b05578063f2c4ce1e14610b2e578063f2fde38b14610b57576102ae565b8063c87b56dd14610a37578063d0eb26b014610a74578063d5abeb0114610a9d576102ae565b80639c70b5121461095c578063a0712d6814610987578063a22cb465146109a3578063a475b5dd146109cc578063b88d4fde146109e3578063ba7d2c7614610a0c576102ae565b806370a082311161012e57806370a0823114610860578063715018a61461089d578063729ad39e146108b45780637f00c7a6146108dd5780638da5cb5b1461090657806395d89b4114610931576102ae565b8063518302271461073c57806355f804b31461076757806358cf77fa146107905780635c975abb146107cd5780636352211e146107f85780636c0360eb14610835576102ae565b8063239c70ae116102195780633c952764116101d25780633c9527641461061e57806342842e0e14610647578063438b63001461067057806344a0d68a146106ad57806345950358146106d65780634f6ccce7146106ff576102ae565b8063239c70ae1461050b57806323b872dd14610536578063284bf0511461055f5780632e1a7d4d146105885780632f745c59146105a45780633af32abf146105e1576102ae565b8063081c8c441161026b578063081c8c44146103fb578063095ea7b31461042657806313faede61461044f57806318160ddd1461047a57806318cae269146104a5578063228025e8146104e2576102ae565b806301ffc9a7146102b357806302329a29146102f057806306c933d81461031957806306fdde03146103565780630791ec6a14610381578063081812fc146103be575b600080fd5b3480156102bf57600080fd5b506102da60048036038101906102d5919061435b565b610b80565b6040516102e79190614aa1565b60405180910390f35b3480156102fc57600080fd5b506103176004803603810190610312919061432e565b610bfa565b005b34801561032557600080fd5b50610340600480360381019061033b919061411e565b610c93565b60405161034d9190614aa1565b60405180910390f35b34801561036257600080fd5b5061036b610cb3565b6040516103789190614abc565b60405180910390f35b34801561038d57600080fd5b506103a860048036038101906103a3919061411e565b610d45565b6040516103b59190614aa1565b60405180910390f35b3480156103ca57600080fd5b506103e560048036038101906103e091906143fe565b610d9b565b6040516103f29190614a18565b60405180910390f35b34801561040757600080fd5b50610410610e20565b60405161041d9190614abc565b60405180910390f35b34801561043257600080fd5b5061044d600480360381019061044891906142a1565b610eae565b005b34801561045b57600080fd5b50610464610fc6565b6040516104719190614dfe565b60405180910390f35b34801561048657600080fd5b5061048f610fcc565b60405161049c9190614dfe565b60405180910390f35b3480156104b157600080fd5b506104cc60048036038101906104c7919061411e565b610fd9565b6040516104d99190614dfe565b60405180910390f35b3480156104ee57600080fd5b50610509600480360381019061050491906143fe565b610ff1565b005b34801561051757600080fd5b50610520611077565b60405161052d9190614dfe565b60405180910390f35b34801561054257600080fd5b5061055d6004803603810190610558919061418b565b61107d565b005b34801561056b57600080fd5b50610586600480360381019061058191906142e1565b6110dd565b005b6105a2600480360381019061059d91906143fe565b6111fe565b005b3480156105b057600080fd5b506105cb60048036038101906105c691906142a1565b611716565b6040516105d89190614dfe565b60405180910390f35b3480156105ed57600080fd5b506106086004803603810190610603919061411e565b6117bb565b6040516106159190614aa1565b60405180910390f35b34801561062a57600080fd5b506106456004803603810190610640919061432e565b611811565b005b34801561065357600080fd5b5061066e6004803603810190610669919061418b565b6118aa565b005b34801561067c57600080fd5b506106976004803603810190610692919061411e565b6118ca565b6040516106a49190614a7f565b60405180910390f35b3480156106b957600080fd5b506106d460048036038101906106cf91906143fe565b611978565b005b3480156106e257600080fd5b506106fd60048036038101906106f891906142e1565b6119fe565b005b34801561070b57600080fd5b50610726600480360381019061072191906143fe565b611b1f565b6040516107339190614dfe565b60405180910390f35b34801561074857600080fd5b50610751611b90565b60405161075e9190614aa1565b60405180910390f35b34801561077357600080fd5b5061078e600480360381019061078991906143b5565b611ba3565b005b34801561079c57600080fd5b506107b760048036038101906107b2919061411e565b611c39565b6040516107c49190614aa1565b60405180910390f35b3480156107d957600080fd5b506107e2611c59565b6040516107ef9190614aa1565b60405180910390f35b34801561080457600080fd5b5061081f600480360381019061081a91906143fe565b611c6c565b60405161082c9190614a18565b60405180910390f35b34801561084157600080fd5b5061084a611d1e565b6040516108579190614abc565b60405180910390f35b34801561086c57600080fd5b506108876004803603810190610882919061411e565b611dac565b6040516108949190614dfe565b60405180910390f35b3480156108a957600080fd5b506108b2611e64565b005b3480156108c057600080fd5b506108db60048036038101906108d691906142e1565b611eec565b005b3480156108e957600080fd5b5061090460048036038101906108ff91906143fe565b61200d565b005b34801561091257600080fd5b5061091b612093565b6040516109289190614a18565b60405180910390f35b34801561093d57600080fd5b506109466120bd565b6040516109539190614abc565b60405180910390f35b34801561096857600080fd5b5061097161214f565b60405161097e9190614aa1565b60405180910390f35b6109a1600480360381019061099c91906143fe565b612162565b005b3480156109af57600080fd5b506109ca60048036038101906109c59190614261565b61268f565b005b3480156109d857600080fd5b506109e16126a5565b005b3480156109ef57600080fd5b50610a0a6004803603810190610a0591906141de565b61273e565b005b348015610a1857600080fd5b50610a216127a0565b604051610a2e9190614dfe565b60405180910390f35b348015610a4357600080fd5b50610a5e6004803603810190610a5991906143fe565b6127a6565b604051610a6b9190614abc565b60405180910390f35b348015610a8057600080fd5b50610a9b6004803603810190610a9691906143fe565b6128c8565b005b348015610aa957600080fd5b50610ab261294e565b604051610abf9190614dfe565b60405180910390f35b348015610ad457600080fd5b50610aef6004803603810190610aea919061414b565b612954565b604051610afc9190614aa1565b60405180910390f35b348015610b1157600080fd5b50610b2c6004803603810190610b2791906142e1565b6129e8565b005b348015610b3a57600080fd5b50610b556004803603810190610b5091906143b5565b612b09565b005b348015610b6357600080fd5b50610b7e6004803603810190610b79919061411e565b612b9f565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610bf35750610bf282612c97565b5b9050919050565b610c02612d79565b73ffffffffffffffffffffffffffffffffffffffff16610c20612093565b73ffffffffffffffffffffffffffffffffffffffff1614610c76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6d90614cbe565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b60126020528060005260406000206000915054906101000a900460ff1681565b606060008054610cc290615107565b80601f0160208091040260200160405190810160405280929190818152602001828054610cee90615107565b8015610d3b5780601f10610d1057610100808354040283529160200191610d3b565b820191906000526020600020905b815481529060010190602001808311610d1e57829003601f168201915b5050505050905090565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000610da682612d81565b610de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddc90614c9e565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600c8054610e2d90615107565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5990615107565b8015610ea65780601f10610e7b57610100808354040283529160200191610ea6565b820191906000526020600020905b815481529060010190602001808311610e8957829003601f168201915b505050505081565b6000610eb982611c6c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2190614d3e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f49612d79565b73ffffffffffffffffffffffffffffffffffffffff161480610f785750610f7781610f72612d79565b612954565b5b610fb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fae90614bde565b60405180910390fd5b610fc18383612ded565b505050565b600d5481565b6000600880549050905090565b60136020528060005260406000206000915090505481565b610ff9612d79565b73ffffffffffffffffffffffffffffffffffffffff16611017612093565b73ffffffffffffffffffffffffffffffffffffffff161461106d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106490614cbe565b60405180910390fd5b80600e8190555050565b600f5481565b61108e611088612d79565b82612ea6565b6110cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c490614d7e565b60405180910390fd5b6110d8838383612f84565b505050565b6110e5612d79565b73ffffffffffffffffffffffffffffffffffffffff16611103612093565b73ffffffffffffffffffffffffffffffffffffffff1614611159576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115090614cbe565b60405180910390fd5b60005b828290508110156111f9576000601460008585858181106111805761117f6152a0565b5b9050602002016020810190611195919061411e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806111f19061516a565b91505061115c565b505050565b611206612d79565b73ffffffffffffffffffffffffffffffffffffffff16611224612093565b73ffffffffffffffffffffffffffffffffffffffff161461127a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127190614cbe565b60405180910390fd5b600081476112889190614f92565b9050600073e554050ce6d1a4091d697746c2d6c93e6d27edc973ffffffffffffffffffffffffffffffffffffffff16612710607d846112c79190614fc3565b6112d19190614f92565b6040516112dd90614a03565b60006040518083038185875af1925050503d806000811461131a576040519150601f19603f3d011682016040523d82523d6000602084013e61131f565b606091505b505090508061132d57600080fd5b600073f6f0d5acc732baf6cb630686583d0b2d8f8e726d73ffffffffffffffffffffffffffffffffffffffff16612710607d8561136a9190614fc3565b6113749190614f92565b60405161138090614a03565b60006040518083038185875af1925050503d80600081146113bd576040519150601f19603f3d011682016040523d82523d6000602084013e6113c2565b606091505b50509050806113d057600080fd5b600084476113de9190614f92565b9050600073c87aba45fccc8ad40105fc146329a5ba808640d873ffffffffffffffffffffffffffffffffffffffff16600560018461141c9190614fc3565b6114269190614f92565b60405161143290614a03565b60006040518083038185875af1925050503d806000811461146f576040519150601f19603f3d011682016040523d82523d6000602084013e611474565b606091505b505090508061148257600080fd5b600073e00ab2f5770945303877cc851a9edeb910b4d5bf73ffffffffffffffffffffffffffffffffffffffff1660056001856114be9190614fc3565b6114c89190614f92565b6040516114d490614a03565b60006040518083038185875af1925050503d8060008114611511576040519150601f19603f3d011682016040523d82523d6000602084013e611516565b606091505b505090508061152457600080fd5b600073765e099451c67db3a038eeed0def3970d95119e173ffffffffffffffffffffffffffffffffffffffff1660056001866115609190614fc3565b61156a9190614f92565b60405161157690614a03565b60006040518083038185875af1925050503d80600081146115b3576040519150601f19603f3d011682016040523d82523d6000602084013e6115b8565b606091505b50509050806115c657600080fd5b60007330fb1c12f994eccdcf0567b56f15ac8f6655882a73ffffffffffffffffffffffffffffffffffffffff1660056001876116029190614fc3565b61160c9190614f92565b60405161161890614a03565b60006040518083038185875af1925050503d8060008114611655576040519150601f19603f3d011682016040523d82523d6000602084013e61165a565b606091505b505090508061166857600080fd5b600073248bdb6908282a7f444a20f91ab1cf25de3c7bfe73ffffffffffffffffffffffffffffffffffffffff1660056001886116a49190614fc3565b6116ae9190614f92565b6040516116ba90614a03565b60006040518083038185875af1925050503d80600081146116f7576040519150601f19603f3d011682016040523d82523d6000602084013e6116fc565b606091505b505090508061170a57600080fd5b50505050505050505050565b600061172183611dac565b8210611762576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175990614ade565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611819612d79565b73ffffffffffffffffffffffffffffffffffffffff16611837612093565b73ffffffffffffffffffffffffffffffffffffffff161461188d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188490614cbe565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b6118c58383836040518060200160405280600081525061273e565b505050565b606060006118d783611dac565b905060008167ffffffffffffffff8111156118f5576118f46152cf565b5b6040519080825280602002602001820160405280156119235781602001602082028036833780820191505090505b50905060005b8281101561196d5761193b8582611716565b82828151811061194e5761194d6152a0565b5b60200260200101818152505080806119659061516a565b915050611929565b508092505050919050565b611980612d79565b73ffffffffffffffffffffffffffffffffffffffff1661199e612093565b73ffffffffffffffffffffffffffffffffffffffff16146119f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119eb90614cbe565b60405180910390fd5b80600d8190555050565b611a06612d79565b73ffffffffffffffffffffffffffffffffffffffff16611a24612093565b73ffffffffffffffffffffffffffffffffffffffff1614611a7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7190614cbe565b60405180910390fd5b60005b82829050811015611b1a57600060126000858585818110611aa157611aa06152a0565b5b9050602002016020810190611ab6919061411e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611b129061516a565b915050611a7d565b505050565b6000611b29610fcc565b8210611b6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6190614d9e565b60405180910390fd5b60088281548110611b7e57611b7d6152a0565b5b90600052602060002001549050919050565b601160019054906101000a900460ff1681565b611bab612d79565b73ffffffffffffffffffffffffffffffffffffffff16611bc9612093565b73ffffffffffffffffffffffffffffffffffffffff1614611c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1690614cbe565b60405180910390fd5b80600b9080519060200190611c35929190613edc565b5050565b60146020528060005260406000206000915054906101000a900460ff1681565b601160009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0c90614c1e565b60405180910390fd5b80915050919050565b600b8054611d2b90615107565b80601f0160208091040260200160405190810160405280929190818152602001828054611d5790615107565b8015611da45780601f10611d7957610100808354040283529160200191611da4565b820191906000526020600020905b815481529060010190602001808311611d8757829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1490614bfe565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611e6c612d79565b73ffffffffffffffffffffffffffffffffffffffff16611e8a612093565b73ffffffffffffffffffffffffffffffffffffffff1614611ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed790614cbe565b60405180910390fd5b611eea60006131e0565b565b611ef4612d79565b73ffffffffffffffffffffffffffffffffffffffff16611f12612093565b73ffffffffffffffffffffffffffffffffffffffff1614611f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5f90614cbe565b60405180910390fd5b60005b8282905081101561200857600160146000858585818110611f8f57611f8e6152a0565b5b9050602002016020810190611fa4919061411e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806120009061516a565b915050611f6b565b505050565b612015612d79565b73ffffffffffffffffffffffffffffffffffffffff16612033612093565b73ffffffffffffffffffffffffffffffffffffffff1614612089576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208090614cbe565b60405180910390fd5b80600f8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546120cc90615107565b80601f01602080910402602001604051908101604052809291908181526020018280546120f890615107565b80156121455780601f1061211a57610100808354040283529160200191612145565b820191906000526020600020905b81548152906001019060200180831161212857829003601f168201915b5050505050905090565b601160029054906101000a900460ff1681565b601160009054906101000a900460ff16156121b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a990614cde565b60405180910390fd5b60006121bc610fcc565b905060008211612201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f890614dde565b60405180910390fd5b600e5482826122109190614f3c565b1115612251576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224890614c3e565b60405180910390fd5b612259612093565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146125ff576000601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060011515601160029054906101000a900460ff1615151415612423576122f4336117bb565b612333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232a90614dbe565b60405180910390fd5b6001831115612377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236e90614c5e565b60405180910390fd5b600183826123859190614f3c565b11156123c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bd90614b5e565b60405180910390fd5b6000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506124b9565b60105483826124329190614f3c565b1115612473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246a90614b5e565b60405180910390fd5b600f548311156124b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124af90614c5e565b60405180910390fd5b5b601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156125ac57600183111561254f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254690614c5e565b60405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506125fd565b82600d546125ba9190614fc3565b3410156125fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f390614d5e565b60405180910390fd5b5b505b6000600190505b82811161268a57601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061265d9061516a565b91905055506126773382846126729190614f3c565b6132a6565b80806126829061516a565b915050612606565b505050565b6126a161269a612d79565b83836132c4565b5050565b6126ad612d79565b73ffffffffffffffffffffffffffffffffffffffff166126cb612093565b73ffffffffffffffffffffffffffffffffffffffff1614612721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271890614cbe565b60405180910390fd5b6001601160016101000a81548160ff021916908315150217905550565b61274f612749612d79565b83612ea6565b61278e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278590614d7e565b60405180910390fd5b61279a84848484613431565b50505050565b60105481565b60606127b182612d81565b6127f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e790614d1e565b60405180910390fd5b60001515601160019054906101000a900460ff161515141561286a576000600c805461281b90615107565b9050116128375760405180602001604052806000815250612863565b600c6128428361348d565b6040516020016128539291906149d4565b6040516020818303038152906040525b90506128c3565b60006128746135ee565b9050600081511161289457604051806020016040528060008152506128bf565b8061289e8461348d565b6040516020016128af9291906149b0565b6040516020818303038152906040525b9150505b919050565b6128d0612d79565b73ffffffffffffffffffffffffffffffffffffffff166128ee612093565b73ffffffffffffffffffffffffffffffffffffffff1614612944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293b90614cbe565b60405180910390fd5b8060108190555050565b600e5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6129f0612d79565b73ffffffffffffffffffffffffffffffffffffffff16612a0e612093565b73ffffffffffffffffffffffffffffffffffffffff1614612a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5b90614cbe565b60405180910390fd5b60005b82829050811015612b0457600160126000858585818110612a8b57612a8a6152a0565b5b9050602002016020810190612aa0919061411e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080612afc9061516a565b915050612a67565b505050565b612b11612d79565b73ffffffffffffffffffffffffffffffffffffffff16612b2f612093565b73ffffffffffffffffffffffffffffffffffffffff1614612b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7c90614cbe565b60405180910390fd5b80600c9080519060200190612b9b929190613edc565b5050565b612ba7612d79565b73ffffffffffffffffffffffffffffffffffffffff16612bc5612093565b73ffffffffffffffffffffffffffffffffffffffff1614612c1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1290614cbe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612c8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8290614b1e565b60405180910390fd5b612c94816131e0565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612d6257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612d725750612d7182613680565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612e6083611c6c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612eb182612d81565b612ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee790614bbe565b60405180910390fd5b6000612efb83611c6c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612f6a57508373ffffffffffffffffffffffffffffffffffffffff16612f5284610d9b565b73ffffffffffffffffffffffffffffffffffffffff16145b80612f7b5750612f7a8185612954565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612fa482611c6c565b73ffffffffffffffffffffffffffffffffffffffff1614612ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff190614cfe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561306a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306190614b7e565b60405180910390fd5b6130758383836136ea565b613080600082612ded565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130d0919061501d565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131279190614f3c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6132c08282604051806020016040528060008152506137fe565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332a90614b9e565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516134249190614aa1565b60405180910390a3505050565b61343c848484612f84565b61344884848484613859565b613487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161347e90614afe565b60405180910390fd5b50505050565b606060008214156134d5576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506135e9565b600082905060005b600082146135075780806134f09061516a565b915050600a826135009190614f92565b91506134dd565b60008167ffffffffffffffff811115613523576135226152cf565b5b6040519080825280601f01601f1916602001820160405280156135555781602001600182028036833780820191505090505b5090505b600085146135e25760018261356e919061501d565b9150600a8561357d91906151b3565b60306135899190614f3c565b60f81b81838151811061359f5761359e6152a0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856135db9190614f92565b9450613559565b8093505050505b919050565b6060600b80546135fd90615107565b80601f016020809104026020016040519081016040528092919081815260200182805461362990615107565b80156136765780601f1061364b57610100808354040283529160200191613676565b820191906000526020600020905b81548152906001019060200180831161365957829003601f168201915b5050505050905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6136f58383836139f0565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561373857613733816139f5565b613777565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613776576137758382613a3e565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156137ba576137b581613bab565b6137f9565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146137f8576137f78282613c7c565b5b5b505050565b6138088383613cfb565b6138156000848484613859565b613854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161384b90614afe565b60405180910390fd5b505050565b600061387a8473ffffffffffffffffffffffffffffffffffffffff16613ec9565b156139e3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026138a3612d79565b8786866040518563ffffffff1660e01b81526004016138c59493929190614a33565b602060405180830381600087803b1580156138df57600080fd5b505af192505050801561391057506040513d601f19601f8201168201806040525081019061390d9190614388565b60015b613993573d8060008114613940576040519150601f19603f3d011682016040523d82523d6000602084013e613945565b606091505b5060008151141561398b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161398290614afe565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506139e8565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613a4b84611dac565b613a55919061501d565b9050600060076000848152602001908152602001600020549050818114613b3a576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613bbf919061501d565b9050600060096000848152602001908152602001600020549050600060088381548110613bef57613bee6152a0565b5b906000526020600020015490508060088381548110613c1157613c106152a0565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613c6057613c5f615271565b5b6001900381819060005260206000200160009055905550505050565b6000613c8783611dac565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613d6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d6290614c7e565b60405180910390fd5b613d7481612d81565b15613db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dab90614b3e565b60405180910390fd5b613dc0600083836136ea565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613e109190614f3c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054613ee890615107565b90600052602060002090601f016020900481019282613f0a5760008555613f51565b82601f10613f2357805160ff1916838001178555613f51565b82800160010185558215613f51579182015b82811115613f50578251825591602001919060010190613f35565b5b509050613f5e9190613f62565b5090565b5b80821115613f7b576000816000905550600101613f63565b5090565b6000613f92613f8d84614e3e565b614e19565b905082815260208101848484011115613fae57613fad61530d565b5b613fb98482856150c5565b509392505050565b6000613fd4613fcf84614e6f565b614e19565b905082815260208101848484011115613ff057613fef61530d565b5b613ffb8482856150c5565b509392505050565b60008135905061401281615994565b92915050565b60008083601f84011261402e5761402d615303565b5b8235905067ffffffffffffffff81111561404b5761404a6152fe565b5b60208301915083602082028301111561406757614066615308565b5b9250929050565b60008135905061407d816159ab565b92915050565b600081359050614092816159c2565b92915050565b6000815190506140a7816159c2565b92915050565b600082601f8301126140c2576140c1615303565b5b81356140d2848260208601613f7f565b91505092915050565b600082601f8301126140f0576140ef615303565b5b8135614100848260208601613fc1565b91505092915050565b600081359050614118816159d9565b92915050565b60006020828403121561413457614133615317565b5b600061414284828501614003565b91505092915050565b6000806040838503121561416257614161615317565b5b600061417085828601614003565b925050602061418185828601614003565b9150509250929050565b6000806000606084860312156141a4576141a3615317565b5b60006141b286828701614003565b93505060206141c386828701614003565b92505060406141d486828701614109565b9150509250925092565b600080600080608085870312156141f8576141f7615317565b5b600061420687828801614003565b945050602061421787828801614003565b935050604061422887828801614109565b925050606085013567ffffffffffffffff81111561424957614248615312565b5b614255878288016140ad565b91505092959194509250565b6000806040838503121561427857614277615317565b5b600061428685828601614003565b92505060206142978582860161406e565b9150509250929050565b600080604083850312156142b8576142b7615317565b5b60006142c685828601614003565b92505060206142d785828601614109565b9150509250929050565b600080602083850312156142f8576142f7615317565b5b600083013567ffffffffffffffff81111561431657614315615312565b5b61432285828601614018565b92509250509250929050565b60006020828403121561434457614343615317565b5b60006143528482850161406e565b91505092915050565b60006020828403121561437157614370615317565b5b600061437f84828501614083565b91505092915050565b60006020828403121561439e5761439d615317565b5b60006143ac84828501614098565b91505092915050565b6000602082840312156143cb576143ca615317565b5b600082013567ffffffffffffffff8111156143e9576143e8615312565b5b6143f5848285016140db565b91505092915050565b60006020828403121561441457614413615317565b5b600061442284828501614109565b91505092915050565b60006144378383614992565b60208301905092915050565b61444c81615051565b82525050565b600061445d82614ec5565b6144678185614ef3565b935061447283614ea0565b8060005b838110156144a357815161448a888261442b565b975061449583614ee6565b925050600181019050614476565b5085935050505092915050565b6144b981615063565b82525050565b60006144ca82614ed0565b6144d48185614f04565b93506144e48185602086016150d4565b6144ed8161531c565b840191505092915050565b600061450382614edb565b61450d8185614f20565b935061451d8185602086016150d4565b6145268161531c565b840191505092915050565b600061453c82614edb565b6145468185614f31565b93506145568185602086016150d4565b80840191505092915050565b6000815461456f81615107565b6145798186614f31565b9450600182166000811461459457600181146145a5576145d8565b60ff198316865281860193506145d8565b6145ae85614eb0565b60005b838110156145d0578154818901526001820191506020810190506145b1565b838801955050505b50505092915050565b60006145ee602b83614f20565b91506145f98261532d565b604082019050919050565b6000614611603283614f20565b915061461c8261537c565b604082019050919050565b6000614634602683614f20565b915061463f826153cb565b604082019050919050565b6000614657601c83614f20565b91506146628261541a565b602082019050919050565b600061467a601c83614f20565b915061468582615443565b602082019050919050565b600061469d602483614f20565b91506146a88261546c565b604082019050919050565b60006146c0601983614f20565b91506146cb826154bb565b602082019050919050565b60006146e3602c83614f20565b91506146ee826154e4565b604082019050919050565b6000614706603883614f20565b915061471182615533565b604082019050919050565b6000614729602a83614f20565b915061473482615582565b604082019050919050565b600061474c602983614f20565b9150614757826155d1565b604082019050919050565b600061476f601683614f20565b915061477a82615620565b602082019050919050565b6000614792602483614f20565b915061479d82615649565b604082019050919050565b60006147b5602083614f20565b91506147c082615698565b602082019050919050565b60006147d8602c83614f20565b91506147e3826156c1565b604082019050919050565b60006147fb600583614f31565b915061480682615710565b600582019050919050565b600061481e602083614f20565b915061482982615739565b602082019050919050565b6000614841601683614f20565b915061484c82615762565b602082019050919050565b6000614864602983614f20565b915061486f8261578b565b604082019050919050565b6000614887602f83614f20565b9150614892826157da565b604082019050919050565b60006148aa602183614f20565b91506148b582615829565b604082019050919050565b60006148cd600083614f15565b91506148d882615878565b600082019050919050565b60006148f0601283614f20565b91506148fb8261587b565b602082019050919050565b6000614913603183614f20565b915061491e826158a4565b604082019050919050565b6000614936602c83614f20565b9150614941826158f3565b604082019050919050565b6000614959601783614f20565b915061496482615942565b602082019050919050565b600061497c601b83614f20565b91506149878261596b565b602082019050919050565b61499b816150bb565b82525050565b6149aa816150bb565b82525050565b60006149bc8285614531565b91506149c88284614531565b91508190509392505050565b60006149e08285614562565b91506149ec8284614531565b91506149f7826147ee565b91508190509392505050565b6000614a0e826148c0565b9150819050919050565b6000602082019050614a2d6000830184614443565b92915050565b6000608082019050614a486000830187614443565b614a556020830186614443565b614a6260408301856149a1565b8181036060830152614a7481846144bf565b905095945050505050565b60006020820190508181036000830152614a998184614452565b905092915050565b6000602082019050614ab660008301846144b0565b92915050565b60006020820190508181036000830152614ad681846144f8565b905092915050565b60006020820190508181036000830152614af7816145e1565b9050919050565b60006020820190508181036000830152614b1781614604565b9050919050565b60006020820190508181036000830152614b3781614627565b9050919050565b60006020820190508181036000830152614b578161464a565b9050919050565b60006020820190508181036000830152614b778161466d565b9050919050565b60006020820190508181036000830152614b9781614690565b9050919050565b60006020820190508181036000830152614bb7816146b3565b9050919050565b60006020820190508181036000830152614bd7816146d6565b9050919050565b60006020820190508181036000830152614bf7816146f9565b9050919050565b60006020820190508181036000830152614c178161471c565b9050919050565b60006020820190508181036000830152614c378161473f565b9050919050565b60006020820190508181036000830152614c5781614762565b9050919050565b60006020820190508181036000830152614c7781614785565b9050919050565b60006020820190508181036000830152614c97816147a8565b9050919050565b60006020820190508181036000830152614cb7816147cb565b9050919050565b60006020820190508181036000830152614cd781614811565b9050919050565b60006020820190508181036000830152614cf781614834565b9050919050565b60006020820190508181036000830152614d1781614857565b9050919050565b60006020820190508181036000830152614d378161487a565b9050919050565b60006020820190508181036000830152614d578161489d565b9050919050565b60006020820190508181036000830152614d77816148e3565b9050919050565b60006020820190508181036000830152614d9781614906565b9050919050565b60006020820190508181036000830152614db781614929565b9050919050565b60006020820190508181036000830152614dd78161494c565b9050919050565b60006020820190508181036000830152614df78161496f565b9050919050565b6000602082019050614e1360008301846149a1565b92915050565b6000614e23614e34565b9050614e2f8282615139565b919050565b6000604051905090565b600067ffffffffffffffff821115614e5957614e586152cf565b5b614e628261531c565b9050602081019050919050565b600067ffffffffffffffff821115614e8a57614e896152cf565b5b614e938261531c565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614f47826150bb565b9150614f52836150bb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614f8757614f866151e4565b5b828201905092915050565b6000614f9d826150bb565b9150614fa8836150bb565b925082614fb857614fb7615213565b5b828204905092915050565b6000614fce826150bb565b9150614fd9836150bb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615012576150116151e4565b5b828202905092915050565b6000615028826150bb565b9150615033836150bb565b925082821015615046576150456151e4565b5b828203905092915050565b600061505c8261509b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156150f25780820151818401526020810190506150d7565b83811115615101576000848401525b50505050565b6000600282049050600182168061511f57607f821691505b6020821081141561513357615132615242565b5b50919050565b6151428261531c565b810181811067ffffffffffffffff82111715615161576151606152cf565b5b80604052505050565b6000615175826150bb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151a8576151a76151e4565b5b600182019050919050565b60006151be826150bb565b91506151c9836150bb565b9250826151d9576151d8615213565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f74686520636f6e74726163742069732070617573656400000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f75736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b7f6e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b61599d81615051565b81146159a857600080fd5b50565b6159b481615063565b81146159bf57600080fd5b50565b6159cb8161506f565b81146159d657600080fd5b50565b6159e2816150bb565b81146159ed57600080fd5b5056fea2646970667358221220828d8051a57c7a7823f3cf809e7fbd9689fb5e578721c714667d3ad050ea340f64736f6c63430008070033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000e447261676f6e52696368436c75620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003445243000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102ae5760003560e01c806351830227116101755780639c70b512116100dc578063c87b56dd11610095578063e985e9c51161006f578063e985e9c514610ac8578063edec5f2714610b05578063f2c4ce1e14610b2e578063f2fde38b14610b57576102ae565b8063c87b56dd14610a37578063d0eb26b014610a74578063d5abeb0114610a9d576102ae565b80639c70b5121461095c578063a0712d6814610987578063a22cb465146109a3578063a475b5dd146109cc578063b88d4fde146109e3578063ba7d2c7614610a0c576102ae565b806370a082311161012e57806370a0823114610860578063715018a61461089d578063729ad39e146108b45780637f00c7a6146108dd5780638da5cb5b1461090657806395d89b4114610931576102ae565b8063518302271461073c57806355f804b31461076757806358cf77fa146107905780635c975abb146107cd5780636352211e146107f85780636c0360eb14610835576102ae565b8063239c70ae116102195780633c952764116101d25780633c9527641461061e57806342842e0e14610647578063438b63001461067057806344a0d68a146106ad57806345950358146106d65780634f6ccce7146106ff576102ae565b8063239c70ae1461050b57806323b872dd14610536578063284bf0511461055f5780632e1a7d4d146105885780632f745c59146105a45780633af32abf146105e1576102ae565b8063081c8c441161026b578063081c8c44146103fb578063095ea7b31461042657806313faede61461044f57806318160ddd1461047a57806318cae269146104a5578063228025e8146104e2576102ae565b806301ffc9a7146102b357806302329a29146102f057806306c933d81461031957806306fdde03146103565780630791ec6a14610381578063081812fc146103be575b600080fd5b3480156102bf57600080fd5b506102da60048036038101906102d5919061435b565b610b80565b6040516102e79190614aa1565b60405180910390f35b3480156102fc57600080fd5b506103176004803603810190610312919061432e565b610bfa565b005b34801561032557600080fd5b50610340600480360381019061033b919061411e565b610c93565b60405161034d9190614aa1565b60405180910390f35b34801561036257600080fd5b5061036b610cb3565b6040516103789190614abc565b60405180910390f35b34801561038d57600080fd5b506103a860048036038101906103a3919061411e565b610d45565b6040516103b59190614aa1565b60405180910390f35b3480156103ca57600080fd5b506103e560048036038101906103e091906143fe565b610d9b565b6040516103f29190614a18565b60405180910390f35b34801561040757600080fd5b50610410610e20565b60405161041d9190614abc565b60405180910390f35b34801561043257600080fd5b5061044d600480360381019061044891906142a1565b610eae565b005b34801561045b57600080fd5b50610464610fc6565b6040516104719190614dfe565b60405180910390f35b34801561048657600080fd5b5061048f610fcc565b60405161049c9190614dfe565b60405180910390f35b3480156104b157600080fd5b506104cc60048036038101906104c7919061411e565b610fd9565b6040516104d99190614dfe565b60405180910390f35b3480156104ee57600080fd5b50610509600480360381019061050491906143fe565b610ff1565b005b34801561051757600080fd5b50610520611077565b60405161052d9190614dfe565b60405180910390f35b34801561054257600080fd5b5061055d6004803603810190610558919061418b565b61107d565b005b34801561056b57600080fd5b50610586600480360381019061058191906142e1565b6110dd565b005b6105a2600480360381019061059d91906143fe565b6111fe565b005b3480156105b057600080fd5b506105cb60048036038101906105c691906142a1565b611716565b6040516105d89190614dfe565b60405180910390f35b3480156105ed57600080fd5b506106086004803603810190610603919061411e565b6117bb565b6040516106159190614aa1565b60405180910390f35b34801561062a57600080fd5b506106456004803603810190610640919061432e565b611811565b005b34801561065357600080fd5b5061066e6004803603810190610669919061418b565b6118aa565b005b34801561067c57600080fd5b506106976004803603810190610692919061411e565b6118ca565b6040516106a49190614a7f565b60405180910390f35b3480156106b957600080fd5b506106d460048036038101906106cf91906143fe565b611978565b005b3480156106e257600080fd5b506106fd60048036038101906106f891906142e1565b6119fe565b005b34801561070b57600080fd5b50610726600480360381019061072191906143fe565b611b1f565b6040516107339190614dfe565b60405180910390f35b34801561074857600080fd5b50610751611b90565b60405161075e9190614aa1565b60405180910390f35b34801561077357600080fd5b5061078e600480360381019061078991906143b5565b611ba3565b005b34801561079c57600080fd5b506107b760048036038101906107b2919061411e565b611c39565b6040516107c49190614aa1565b60405180910390f35b3480156107d957600080fd5b506107e2611c59565b6040516107ef9190614aa1565b60405180910390f35b34801561080457600080fd5b5061081f600480360381019061081a91906143fe565b611c6c565b60405161082c9190614a18565b60405180910390f35b34801561084157600080fd5b5061084a611d1e565b6040516108579190614abc565b60405180910390f35b34801561086c57600080fd5b506108876004803603810190610882919061411e565b611dac565b6040516108949190614dfe565b60405180910390f35b3480156108a957600080fd5b506108b2611e64565b005b3480156108c057600080fd5b506108db60048036038101906108d691906142e1565b611eec565b005b3480156108e957600080fd5b5061090460048036038101906108ff91906143fe565b61200d565b005b34801561091257600080fd5b5061091b612093565b6040516109289190614a18565b60405180910390f35b34801561093d57600080fd5b506109466120bd565b6040516109539190614abc565b60405180910390f35b34801561096857600080fd5b5061097161214f565b60405161097e9190614aa1565b60405180910390f35b6109a1600480360381019061099c91906143fe565b612162565b005b3480156109af57600080fd5b506109ca60048036038101906109c59190614261565b61268f565b005b3480156109d857600080fd5b506109e16126a5565b005b3480156109ef57600080fd5b50610a0a6004803603810190610a0591906141de565b61273e565b005b348015610a1857600080fd5b50610a216127a0565b604051610a2e9190614dfe565b60405180910390f35b348015610a4357600080fd5b50610a5e6004803603810190610a5991906143fe565b6127a6565b604051610a6b9190614abc565b60405180910390f35b348015610a8057600080fd5b50610a9b6004803603810190610a9691906143fe565b6128c8565b005b348015610aa957600080fd5b50610ab261294e565b604051610abf9190614dfe565b60405180910390f35b348015610ad457600080fd5b50610aef6004803603810190610aea919061414b565b612954565b604051610afc9190614aa1565b60405180910390f35b348015610b1157600080fd5b50610b2c6004803603810190610b2791906142e1565b6129e8565b005b348015610b3a57600080fd5b50610b556004803603810190610b5091906143b5565b612b09565b005b348015610b6357600080fd5b50610b7e6004803603810190610b79919061411e565b612b9f565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610bf35750610bf282612c97565b5b9050919050565b610c02612d79565b73ffffffffffffffffffffffffffffffffffffffff16610c20612093565b73ffffffffffffffffffffffffffffffffffffffff1614610c76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6d90614cbe565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b60126020528060005260406000206000915054906101000a900460ff1681565b606060008054610cc290615107565b80601f0160208091040260200160405190810160405280929190818152602001828054610cee90615107565b8015610d3b5780601f10610d1057610100808354040283529160200191610d3b565b820191906000526020600020905b815481529060010190602001808311610d1e57829003601f168201915b5050505050905090565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000610da682612d81565b610de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddc90614c9e565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600c8054610e2d90615107565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5990615107565b8015610ea65780601f10610e7b57610100808354040283529160200191610ea6565b820191906000526020600020905b815481529060010190602001808311610e8957829003601f168201915b505050505081565b6000610eb982611c6c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2190614d3e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f49612d79565b73ffffffffffffffffffffffffffffffffffffffff161480610f785750610f7781610f72612d79565b612954565b5b610fb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fae90614bde565b60405180910390fd5b610fc18383612ded565b505050565b600d5481565b6000600880549050905090565b60136020528060005260406000206000915090505481565b610ff9612d79565b73ffffffffffffffffffffffffffffffffffffffff16611017612093565b73ffffffffffffffffffffffffffffffffffffffff161461106d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106490614cbe565b60405180910390fd5b80600e8190555050565b600f5481565b61108e611088612d79565b82612ea6565b6110cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c490614d7e565b60405180910390fd5b6110d8838383612f84565b505050565b6110e5612d79565b73ffffffffffffffffffffffffffffffffffffffff16611103612093565b73ffffffffffffffffffffffffffffffffffffffff1614611159576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115090614cbe565b60405180910390fd5b60005b828290508110156111f9576000601460008585858181106111805761117f6152a0565b5b9050602002016020810190611195919061411e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806111f19061516a565b91505061115c565b505050565b611206612d79565b73ffffffffffffffffffffffffffffffffffffffff16611224612093565b73ffffffffffffffffffffffffffffffffffffffff161461127a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127190614cbe565b60405180910390fd5b600081476112889190614f92565b9050600073e554050ce6d1a4091d697746c2d6c93e6d27edc973ffffffffffffffffffffffffffffffffffffffff16612710607d846112c79190614fc3565b6112d19190614f92565b6040516112dd90614a03565b60006040518083038185875af1925050503d806000811461131a576040519150601f19603f3d011682016040523d82523d6000602084013e61131f565b606091505b505090508061132d57600080fd5b600073f6f0d5acc732baf6cb630686583d0b2d8f8e726d73ffffffffffffffffffffffffffffffffffffffff16612710607d8561136a9190614fc3565b6113749190614f92565b60405161138090614a03565b60006040518083038185875af1925050503d80600081146113bd576040519150601f19603f3d011682016040523d82523d6000602084013e6113c2565b606091505b50509050806113d057600080fd5b600084476113de9190614f92565b9050600073c87aba45fccc8ad40105fc146329a5ba808640d873ffffffffffffffffffffffffffffffffffffffff16600560018461141c9190614fc3565b6114269190614f92565b60405161143290614a03565b60006040518083038185875af1925050503d806000811461146f576040519150601f19603f3d011682016040523d82523d6000602084013e611474565b606091505b505090508061148257600080fd5b600073e00ab2f5770945303877cc851a9edeb910b4d5bf73ffffffffffffffffffffffffffffffffffffffff1660056001856114be9190614fc3565b6114c89190614f92565b6040516114d490614a03565b60006040518083038185875af1925050503d8060008114611511576040519150601f19603f3d011682016040523d82523d6000602084013e611516565b606091505b505090508061152457600080fd5b600073765e099451c67db3a038eeed0def3970d95119e173ffffffffffffffffffffffffffffffffffffffff1660056001866115609190614fc3565b61156a9190614f92565b60405161157690614a03565b60006040518083038185875af1925050503d80600081146115b3576040519150601f19603f3d011682016040523d82523d6000602084013e6115b8565b606091505b50509050806115c657600080fd5b60007330fb1c12f994eccdcf0567b56f15ac8f6655882a73ffffffffffffffffffffffffffffffffffffffff1660056001876116029190614fc3565b61160c9190614f92565b60405161161890614a03565b60006040518083038185875af1925050503d8060008114611655576040519150601f19603f3d011682016040523d82523d6000602084013e61165a565b606091505b505090508061166857600080fd5b600073248bdb6908282a7f444a20f91ab1cf25de3c7bfe73ffffffffffffffffffffffffffffffffffffffff1660056001886116a49190614fc3565b6116ae9190614f92565b6040516116ba90614a03565b60006040518083038185875af1925050503d80600081146116f7576040519150601f19603f3d011682016040523d82523d6000602084013e6116fc565b606091505b505090508061170a57600080fd5b50505050505050505050565b600061172183611dac565b8210611762576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175990614ade565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611819612d79565b73ffffffffffffffffffffffffffffffffffffffff16611837612093565b73ffffffffffffffffffffffffffffffffffffffff161461188d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188490614cbe565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b6118c58383836040518060200160405280600081525061273e565b505050565b606060006118d783611dac565b905060008167ffffffffffffffff8111156118f5576118f46152cf565b5b6040519080825280602002602001820160405280156119235781602001602082028036833780820191505090505b50905060005b8281101561196d5761193b8582611716565b82828151811061194e5761194d6152a0565b5b60200260200101818152505080806119659061516a565b915050611929565b508092505050919050565b611980612d79565b73ffffffffffffffffffffffffffffffffffffffff1661199e612093565b73ffffffffffffffffffffffffffffffffffffffff16146119f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119eb90614cbe565b60405180910390fd5b80600d8190555050565b611a06612d79565b73ffffffffffffffffffffffffffffffffffffffff16611a24612093565b73ffffffffffffffffffffffffffffffffffffffff1614611a7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7190614cbe565b60405180910390fd5b60005b82829050811015611b1a57600060126000858585818110611aa157611aa06152a0565b5b9050602002016020810190611ab6919061411e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611b129061516a565b915050611a7d565b505050565b6000611b29610fcc565b8210611b6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6190614d9e565b60405180910390fd5b60088281548110611b7e57611b7d6152a0565b5b90600052602060002001549050919050565b601160019054906101000a900460ff1681565b611bab612d79565b73ffffffffffffffffffffffffffffffffffffffff16611bc9612093565b73ffffffffffffffffffffffffffffffffffffffff1614611c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1690614cbe565b60405180910390fd5b80600b9080519060200190611c35929190613edc565b5050565b60146020528060005260406000206000915054906101000a900460ff1681565b601160009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0c90614c1e565b60405180910390fd5b80915050919050565b600b8054611d2b90615107565b80601f0160208091040260200160405190810160405280929190818152602001828054611d5790615107565b8015611da45780601f10611d7957610100808354040283529160200191611da4565b820191906000526020600020905b815481529060010190602001808311611d8757829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1490614bfe565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611e6c612d79565b73ffffffffffffffffffffffffffffffffffffffff16611e8a612093565b73ffffffffffffffffffffffffffffffffffffffff1614611ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed790614cbe565b60405180910390fd5b611eea60006131e0565b565b611ef4612d79565b73ffffffffffffffffffffffffffffffffffffffff16611f12612093565b73ffffffffffffffffffffffffffffffffffffffff1614611f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5f90614cbe565b60405180910390fd5b60005b8282905081101561200857600160146000858585818110611f8f57611f8e6152a0565b5b9050602002016020810190611fa4919061411e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806120009061516a565b915050611f6b565b505050565b612015612d79565b73ffffffffffffffffffffffffffffffffffffffff16612033612093565b73ffffffffffffffffffffffffffffffffffffffff1614612089576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208090614cbe565b60405180910390fd5b80600f8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546120cc90615107565b80601f01602080910402602001604051908101604052809291908181526020018280546120f890615107565b80156121455780601f1061211a57610100808354040283529160200191612145565b820191906000526020600020905b81548152906001019060200180831161212857829003601f168201915b5050505050905090565b601160029054906101000a900460ff1681565b601160009054906101000a900460ff16156121b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a990614cde565b60405180910390fd5b60006121bc610fcc565b905060008211612201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f890614dde565b60405180910390fd5b600e5482826122109190614f3c565b1115612251576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224890614c3e565b60405180910390fd5b612259612093565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146125ff576000601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060011515601160029054906101000a900460ff1615151415612423576122f4336117bb565b612333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232a90614dbe565b60405180910390fd5b6001831115612377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236e90614c5e565b60405180910390fd5b600183826123859190614f3c565b11156123c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bd90614b5e565b60405180910390fd5b6000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506124b9565b60105483826124329190614f3c565b1115612473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246a90614b5e565b60405180910390fd5b600f548311156124b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124af90614c5e565b60405180910390fd5b5b601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156125ac57600183111561254f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254690614c5e565b60405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506125fd565b82600d546125ba9190614fc3565b3410156125fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f390614d5e565b60405180910390fd5b5b505b6000600190505b82811161268a57601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061265d9061516a565b91905055506126773382846126729190614f3c565b6132a6565b80806126829061516a565b915050612606565b505050565b6126a161269a612d79565b83836132c4565b5050565b6126ad612d79565b73ffffffffffffffffffffffffffffffffffffffff166126cb612093565b73ffffffffffffffffffffffffffffffffffffffff1614612721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271890614cbe565b60405180910390fd5b6001601160016101000a81548160ff021916908315150217905550565b61274f612749612d79565b83612ea6565b61278e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278590614d7e565b60405180910390fd5b61279a84848484613431565b50505050565b60105481565b60606127b182612d81565b6127f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e790614d1e565b60405180910390fd5b60001515601160019054906101000a900460ff161515141561286a576000600c805461281b90615107565b9050116128375760405180602001604052806000815250612863565b600c6128428361348d565b6040516020016128539291906149d4565b6040516020818303038152906040525b90506128c3565b60006128746135ee565b9050600081511161289457604051806020016040528060008152506128bf565b8061289e8461348d565b6040516020016128af9291906149b0565b6040516020818303038152906040525b9150505b919050565b6128d0612d79565b73ffffffffffffffffffffffffffffffffffffffff166128ee612093565b73ffffffffffffffffffffffffffffffffffffffff1614612944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293b90614cbe565b60405180910390fd5b8060108190555050565b600e5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6129f0612d79565b73ffffffffffffffffffffffffffffffffffffffff16612a0e612093565b73ffffffffffffffffffffffffffffffffffffffff1614612a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5b90614cbe565b60405180910390fd5b60005b82829050811015612b0457600160126000858585818110612a8b57612a8a6152a0565b5b9050602002016020810190612aa0919061411e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080612afc9061516a565b915050612a67565b505050565b612b11612d79565b73ffffffffffffffffffffffffffffffffffffffff16612b2f612093565b73ffffffffffffffffffffffffffffffffffffffff1614612b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7c90614cbe565b60405180910390fd5b80600c9080519060200190612b9b929190613edc565b5050565b612ba7612d79565b73ffffffffffffffffffffffffffffffffffffffff16612bc5612093565b73ffffffffffffffffffffffffffffffffffffffff1614612c1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1290614cbe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612c8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8290614b1e565b60405180910390fd5b612c94816131e0565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612d6257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612d725750612d7182613680565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612e6083611c6c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612eb182612d81565b612ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee790614bbe565b60405180910390fd5b6000612efb83611c6c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612f6a57508373ffffffffffffffffffffffffffffffffffffffff16612f5284610d9b565b73ffffffffffffffffffffffffffffffffffffffff16145b80612f7b5750612f7a8185612954565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612fa482611c6c565b73ffffffffffffffffffffffffffffffffffffffff1614612ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff190614cfe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561306a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306190614b7e565b60405180910390fd5b6130758383836136ea565b613080600082612ded565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130d0919061501d565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131279190614f3c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6132c08282604051806020016040528060008152506137fe565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332a90614b9e565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516134249190614aa1565b60405180910390a3505050565b61343c848484612f84565b61344884848484613859565b613487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161347e90614afe565b60405180910390fd5b50505050565b606060008214156134d5576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506135e9565b600082905060005b600082146135075780806134f09061516a565b915050600a826135009190614f92565b91506134dd565b60008167ffffffffffffffff811115613523576135226152cf565b5b6040519080825280601f01601f1916602001820160405280156135555781602001600182028036833780820191505090505b5090505b600085146135e25760018261356e919061501d565b9150600a8561357d91906151b3565b60306135899190614f3c565b60f81b81838151811061359f5761359e6152a0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856135db9190614f92565b9450613559565b8093505050505b919050565b6060600b80546135fd90615107565b80601f016020809104026020016040519081016040528092919081815260200182805461362990615107565b80156136765780601f1061364b57610100808354040283529160200191613676565b820191906000526020600020905b81548152906001019060200180831161365957829003601f168201915b5050505050905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6136f58383836139f0565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561373857613733816139f5565b613777565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613776576137758382613a3e565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156137ba576137b581613bab565b6137f9565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146137f8576137f78282613c7c565b5b5b505050565b6138088383613cfb565b6138156000848484613859565b613854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161384b90614afe565b60405180910390fd5b505050565b600061387a8473ffffffffffffffffffffffffffffffffffffffff16613ec9565b156139e3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026138a3612d79565b8786866040518563ffffffff1660e01b81526004016138c59493929190614a33565b602060405180830381600087803b1580156138df57600080fd5b505af192505050801561391057506040513d601f19601f8201168201806040525081019061390d9190614388565b60015b613993573d8060008114613940576040519150601f19603f3d011682016040523d82523d6000602084013e613945565b606091505b5060008151141561398b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161398290614afe565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506139e8565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613a4b84611dac565b613a55919061501d565b9050600060076000848152602001908152602001600020549050818114613b3a576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613bbf919061501d565b9050600060096000848152602001908152602001600020549050600060088381548110613bef57613bee6152a0565b5b906000526020600020015490508060088381548110613c1157613c106152a0565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613c6057613c5f615271565b5b6001900381819060005260206000200160009055905550505050565b6000613c8783611dac565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613d6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d6290614c7e565b60405180910390fd5b613d7481612d81565b15613db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dab90614b3e565b60405180910390fd5b613dc0600083836136ea565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613e109190614f3c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054613ee890615107565b90600052602060002090601f016020900481019282613f0a5760008555613f51565b82601f10613f2357805160ff1916838001178555613f51565b82800160010185558215613f51579182015b82811115613f50578251825591602001919060010190613f35565b5b509050613f5e9190613f62565b5090565b5b80821115613f7b576000816000905550600101613f63565b5090565b6000613f92613f8d84614e3e565b614e19565b905082815260208101848484011115613fae57613fad61530d565b5b613fb98482856150c5565b509392505050565b6000613fd4613fcf84614e6f565b614e19565b905082815260208101848484011115613ff057613fef61530d565b5b613ffb8482856150c5565b509392505050565b60008135905061401281615994565b92915050565b60008083601f84011261402e5761402d615303565b5b8235905067ffffffffffffffff81111561404b5761404a6152fe565b5b60208301915083602082028301111561406757614066615308565b5b9250929050565b60008135905061407d816159ab565b92915050565b600081359050614092816159c2565b92915050565b6000815190506140a7816159c2565b92915050565b600082601f8301126140c2576140c1615303565b5b81356140d2848260208601613f7f565b91505092915050565b600082601f8301126140f0576140ef615303565b5b8135614100848260208601613fc1565b91505092915050565b600081359050614118816159d9565b92915050565b60006020828403121561413457614133615317565b5b600061414284828501614003565b91505092915050565b6000806040838503121561416257614161615317565b5b600061417085828601614003565b925050602061418185828601614003565b9150509250929050565b6000806000606084860312156141a4576141a3615317565b5b60006141b286828701614003565b93505060206141c386828701614003565b92505060406141d486828701614109565b9150509250925092565b600080600080608085870312156141f8576141f7615317565b5b600061420687828801614003565b945050602061421787828801614003565b935050604061422887828801614109565b925050606085013567ffffffffffffffff81111561424957614248615312565b5b614255878288016140ad565b91505092959194509250565b6000806040838503121561427857614277615317565b5b600061428685828601614003565b92505060206142978582860161406e565b9150509250929050565b600080604083850312156142b8576142b7615317565b5b60006142c685828601614003565b92505060206142d785828601614109565b9150509250929050565b600080602083850312156142f8576142f7615317565b5b600083013567ffffffffffffffff81111561431657614315615312565b5b61432285828601614018565b92509250509250929050565b60006020828403121561434457614343615317565b5b60006143528482850161406e565b91505092915050565b60006020828403121561437157614370615317565b5b600061437f84828501614083565b91505092915050565b60006020828403121561439e5761439d615317565b5b60006143ac84828501614098565b91505092915050565b6000602082840312156143cb576143ca615317565b5b600082013567ffffffffffffffff8111156143e9576143e8615312565b5b6143f5848285016140db565b91505092915050565b60006020828403121561441457614413615317565b5b600061442284828501614109565b91505092915050565b60006144378383614992565b60208301905092915050565b61444c81615051565b82525050565b600061445d82614ec5565b6144678185614ef3565b935061447283614ea0565b8060005b838110156144a357815161448a888261442b565b975061449583614ee6565b925050600181019050614476565b5085935050505092915050565b6144b981615063565b82525050565b60006144ca82614ed0565b6144d48185614f04565b93506144e48185602086016150d4565b6144ed8161531c565b840191505092915050565b600061450382614edb565b61450d8185614f20565b935061451d8185602086016150d4565b6145268161531c565b840191505092915050565b600061453c82614edb565b6145468185614f31565b93506145568185602086016150d4565b80840191505092915050565b6000815461456f81615107565b6145798186614f31565b9450600182166000811461459457600181146145a5576145d8565b60ff198316865281860193506145d8565b6145ae85614eb0565b60005b838110156145d0578154818901526001820191506020810190506145b1565b838801955050505b50505092915050565b60006145ee602b83614f20565b91506145f98261532d565b604082019050919050565b6000614611603283614f20565b915061461c8261537c565b604082019050919050565b6000614634602683614f20565b915061463f826153cb565b604082019050919050565b6000614657601c83614f20565b91506146628261541a565b602082019050919050565b600061467a601c83614f20565b915061468582615443565b602082019050919050565b600061469d602483614f20565b91506146a88261546c565b604082019050919050565b60006146c0601983614f20565b91506146cb826154bb565b602082019050919050565b60006146e3602c83614f20565b91506146ee826154e4565b604082019050919050565b6000614706603883614f20565b915061471182615533565b604082019050919050565b6000614729602a83614f20565b915061473482615582565b604082019050919050565b600061474c602983614f20565b9150614757826155d1565b604082019050919050565b600061476f601683614f20565b915061477a82615620565b602082019050919050565b6000614792602483614f20565b915061479d82615649565b604082019050919050565b60006147b5602083614f20565b91506147c082615698565b602082019050919050565b60006147d8602c83614f20565b91506147e3826156c1565b604082019050919050565b60006147fb600583614f31565b915061480682615710565b600582019050919050565b600061481e602083614f20565b915061482982615739565b602082019050919050565b6000614841601683614f20565b915061484c82615762565b602082019050919050565b6000614864602983614f20565b915061486f8261578b565b604082019050919050565b6000614887602f83614f20565b9150614892826157da565b604082019050919050565b60006148aa602183614f20565b91506148b582615829565b604082019050919050565b60006148cd600083614f15565b91506148d882615878565b600082019050919050565b60006148f0601283614f20565b91506148fb8261587b565b602082019050919050565b6000614913603183614f20565b915061491e826158a4565b604082019050919050565b6000614936602c83614f20565b9150614941826158f3565b604082019050919050565b6000614959601783614f20565b915061496482615942565b602082019050919050565b600061497c601b83614f20565b91506149878261596b565b602082019050919050565b61499b816150bb565b82525050565b6149aa816150bb565b82525050565b60006149bc8285614531565b91506149c88284614531565b91508190509392505050565b60006149e08285614562565b91506149ec8284614531565b91506149f7826147ee565b91508190509392505050565b6000614a0e826148c0565b9150819050919050565b6000602082019050614a2d6000830184614443565b92915050565b6000608082019050614a486000830187614443565b614a556020830186614443565b614a6260408301856149a1565b8181036060830152614a7481846144bf565b905095945050505050565b60006020820190508181036000830152614a998184614452565b905092915050565b6000602082019050614ab660008301846144b0565b92915050565b60006020820190508181036000830152614ad681846144f8565b905092915050565b60006020820190508181036000830152614af7816145e1565b9050919050565b60006020820190508181036000830152614b1781614604565b9050919050565b60006020820190508181036000830152614b3781614627565b9050919050565b60006020820190508181036000830152614b578161464a565b9050919050565b60006020820190508181036000830152614b778161466d565b9050919050565b60006020820190508181036000830152614b9781614690565b9050919050565b60006020820190508181036000830152614bb7816146b3565b9050919050565b60006020820190508181036000830152614bd7816146d6565b9050919050565b60006020820190508181036000830152614bf7816146f9565b9050919050565b60006020820190508181036000830152614c178161471c565b9050919050565b60006020820190508181036000830152614c378161473f565b9050919050565b60006020820190508181036000830152614c5781614762565b9050919050565b60006020820190508181036000830152614c7781614785565b9050919050565b60006020820190508181036000830152614c97816147a8565b9050919050565b60006020820190508181036000830152614cb7816147cb565b9050919050565b60006020820190508181036000830152614cd781614811565b9050919050565b60006020820190508181036000830152614cf781614834565b9050919050565b60006020820190508181036000830152614d1781614857565b9050919050565b60006020820190508181036000830152614d378161487a565b9050919050565b60006020820190508181036000830152614d578161489d565b9050919050565b60006020820190508181036000830152614d77816148e3565b9050919050565b60006020820190508181036000830152614d9781614906565b9050919050565b60006020820190508181036000830152614db781614929565b9050919050565b60006020820190508181036000830152614dd78161494c565b9050919050565b60006020820190508181036000830152614df78161496f565b9050919050565b6000602082019050614e1360008301846149a1565b92915050565b6000614e23614e34565b9050614e2f8282615139565b919050565b6000604051905090565b600067ffffffffffffffff821115614e5957614e586152cf565b5b614e628261531c565b9050602081019050919050565b600067ffffffffffffffff821115614e8a57614e896152cf565b5b614e938261531c565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614f47826150bb565b9150614f52836150bb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614f8757614f866151e4565b5b828201905092915050565b6000614f9d826150bb565b9150614fa8836150bb565b925082614fb857614fb7615213565b5b828204905092915050565b6000614fce826150bb565b9150614fd9836150bb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615012576150116151e4565b5b828202905092915050565b6000615028826150bb565b9150615033836150bb565b925082821015615046576150456151e4565b5b828203905092915050565b600061505c8261509b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156150f25780820151818401526020810190506150d7565b83811115615101576000848401525b50505050565b6000600282049050600182168061511f57607f821691505b6020821081141561513357615132615242565b5b50919050565b6151428261531c565b810181811067ffffffffffffffff82111715615161576151606152cf565b5b80604052505050565b6000615175826150bb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151a8576151a76151e4565b5b600182019050919050565b60006151be826150bb565b91506151c9836150bb565b9250826151d9576151d8615213565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f74686520636f6e74726163742069732070617573656400000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f75736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b7f6e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b61599d81615051565b81146159a857600080fd5b50565b6159b481615063565b81146159bf57600080fd5b50565b6159cb8161506f565b81146159d657600080fd5b50565b6159e2816150bb565b81146159ed57600080fd5b5056fea2646970667358221220828d8051a57c7a7823f3cf809e7fbd9689fb5e578721c714667d3ad050ea340f64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000e447261676f6e52696368436c75620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003445243000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): DragonRichClub
Arg [1] : _symbol (string): DRC
Arg [2] : _initBaseURI (string):
Arg [3] : _initNotRevealedUri (string):
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000e
Arg [5] : 447261676f6e52696368436c7562000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [7] : 4452430000000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
127:6208:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1014:224:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4342:73:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;531:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2472:100:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2560:101:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4031:221:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;243:28:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3554:411:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;276:31:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1654:113:5;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;588:55:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4006:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;349:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4781:339:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5066:168:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5240:1092;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1322:256:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2442:112:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4421:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5191:185:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2667:342:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3798:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4522:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1844:233:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;459:28:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4112:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;648:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;428:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2166:239:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;217:21:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1896:208:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1712:103:11;;;;;;;;;;;;;:::i;:::-;;4898:162:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3884:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1061:87:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2641:104:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;492:34:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1089:1347;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4324:155:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3619:63:2;;;;;;;;;;;;;:::i;:::-;;5447:328:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;386:37:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3015:582;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3688:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;312:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4550:164:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4713:179:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4216:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1970:201:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1014:224:5;1116:4;1155:35;1140:50;;;:11;:50;;;;:90;;;;1194:36;1218:11;1194:23;:36::i;:::-;1140:90;1133:97;;1014:224;;;:::o;4342:73:2:-;1292:12:11;:10;:12::i;:::-;1281:23;;:7;:5;:7::i;:::-;:23;;;1273:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4403:6:2::1;4394;;:15;;;;;;;;;;;;;;;;;;4342:73:::0;:::o;531:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;2472:100:4:-;2526:13;2559:5;2552:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2472:100;:::o;2560:101:2:-;2617:4;2637:11;:18;2649:5;2637:18;;;;;;;;;;;;;;;;;;;;;;;;;2630:25;;2560:101;;;:::o;4031:221:4:-;4107:7;4135:16;4143:7;4135;:16::i;:::-;4127:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4220:15;:24;4236:7;4220:24;;;;;;;;;;;;;;;;;;;;;4213:31;;4031:221;;;:::o;243:28:2:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3554:411:4:-;3635:13;3651:23;3666:7;3651:14;:23::i;:::-;3635:39;;3699:5;3693:11;;:2;:11;;;;3685:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3793:5;3777:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3802:37;3819:5;3826:12;:10;:12::i;:::-;3802:16;:37::i;:::-;3777:62;3755:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;3936:21;3945:2;3949:7;3936:8;:21::i;:::-;3624:341;3554:411;;:::o;276:31:2:-;;;;:::o;1654:113:5:-;1715:7;1742:10;:17;;;;1735:24;;1654:113;:::o;588:55:2:-;;;;;;;;;;;;;;;;;:::o;4006:100::-;1292:12:11;:10;:12::i;:::-;1281:23;;:7;:5;:7::i;:::-;:23;;;1273:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4087:13:2::1;4075:9;:25;;;;4006:100:::0;:::o;349:32::-;;;;:::o;4781:339:4:-;4976:41;4995:12;:10;:12::i;:::-;5009:7;4976:18;:41::i;:::-;4968:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5084:28;5094:4;5100:2;5104:7;5084:9;:28::i;:::-;4781:339;;;:::o;5066:168:2:-;1292:12:11;:10;:12::i;:::-;1281:23;;:7;:5;:7::i;:::-;:23;;;1273:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5144:6:2::1;5139:90;5160:6;;:13;;5156:1;:17;5139:90;;;5216:5;5191:11;:22;5203:6;;5210:1;5203:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;5191:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;5175:3;;;;;:::i;:::-;;;;5139:90;;;;5066:168:::0;;:::o;5240:1092::-;1292:12:11;:10;:12::i;:::-;1281:23;;:7;:5;:7::i;:::-;:23;;;1273:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5308:14:2::1;5349:8;5325:21;:32;;;;:::i;:::-;5308:49;;5365:6;5385:42;5377:56;;5456:5;5450:3;5441:6;:12;;;;:::i;:::-;:20;;;;:::i;:::-;5377:89;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5364:102;;;5481:1;5473:10;;;::::0;::::1;;5491:6;5511:42;5503:56;;5582:5;5576:3;5567:6;:12;;;;:::i;:::-;:20;;;;:::i;:::-;5503:89;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5490:102;;;5607:1;5599:10;;;::::0;::::1;;5617:20;5664:8;5640:21;:32;;;;:::i;:::-;5617:55;;5680:9;5703:42;5695:56;;5776:1;5774;5759:12;:16;;;;:::i;:::-;:18;;;;:::i;:::-;5695:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5679:103;;;5797:4;5789:13;;;::::0;::::1;;5810:9;5833:42;5825:56;;5907:1;5905;5890:12;:16;;;;:::i;:::-;:18;;;;:::i;:::-;5825:88;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5809:104;;;5928:4;5920:13;;;::::0;::::1;;5941:9;5964:42;5956:56;;6038:1;6036;6021:12;:16;;;;:::i;:::-;:18;;;;:::i;:::-;5956:88;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5940:104;;;6059:4;6051:13;;;::::0;::::1;;6072:9;6095:42;6087:56;;6169:1;6167;6152:12;:16;;;;:::i;:::-;:18;;;;:::i;:::-;6087:88;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6071:104;;;6190:4;6182:13;;;::::0;::::1;;6203:9;6226:42;6218:56;;6300:1;6298;6283:12;:16;;;;:::i;:::-;:18;;;;:::i;:::-;6218:88;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6202:104;;;6321:4;6313:13;;;::::0;::::1;;5301:1031;;;;;;;;;5240:1092:::0;:::o;1322:256:5:-;1419:7;1455:23;1472:5;1455:16;:23::i;:::-;1447:5;:31;1439:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;1544:12;:19;1557:5;1544:19;;;;;;;;;;;;;;;:26;1564:5;1544:26;;;;;;;;;;;;1537:33;;1322:256;;;;:::o;2442:112:2:-;2501:4;2521:20;:27;2542:5;2521:27;;;;;;;;;;;;;;;;;;;;;;;;;2514:34;;2442:112;;;:::o;4421:95::-;1292:12:11;:10;:12::i;:::-;1281:23;;:7;:5;:7::i;:::-;:23;;;1273:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4504:6:2::1;4486:15;;:24;;;;;;;;;;;;;;;;;;4421:95:::0;:::o;5191:185:4:-;5329:39;5346:4;5352:2;5356:7;5329:39;;;;;;;;;;;;:16;:39::i;:::-;5191:185;;;:::o;2667:342:2:-;2736:16;2764:23;2790:17;2800:6;2790:9;:17::i;:::-;2764:43;;2814:25;2856:15;2842:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2814:58;;2884:9;2879:103;2899:15;2895:1;:19;2879:103;;;2944:30;2964:6;2972:1;2944:19;:30::i;:::-;2930:8;2939:1;2930:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;2916:3;;;;;:::i;:::-;;;;2879:103;;;;2995:8;2988:15;;;;2667:342;;;:::o;3798:80::-;1292:12:11;:10;:12::i;:::-;1281:23;;:7;:5;:7::i;:::-;:23;;;1273:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3864:8:2::1;3857:4;:15;;;;3798:80:::0;:::o;4522:185::-;1292:12:11;:10;:12::i;:::-;1281:23;;:7;:5;:7::i;:::-;:23;;;1273:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4607:6:2::1;4602:100;4623:6;;:13;;4619:1;:17;4602:100;;;4689:5;4654:20;:31;4675:6;;4682:1;4675:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;4654:31;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;4638:3;;;;;:::i;:::-;;;;4602:100;;;;4522:185:::0;;:::o;1844:233:5:-;1919:7;1955:30;:28;:30::i;:::-;1947:5;:38;1939:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;2052:10;2063:5;2052:17;;;;;;;;:::i;:::-;;;;;;;;;;2045:24;;1844:233;;;:::o;459:28:2:-;;;;;;;;;;;;;:::o;4112:98::-;1292:12:11;:10;:12::i;:::-;1281:23;;:7;:5;:7::i;:::-;:23;;;1273:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4193:11:2::1;4183:7;:21;;;;;;;;;;;;:::i;:::-;;4112:98:::0;:::o;648:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;428:26::-;;;;;;;;;;;;;:::o;2166:239:4:-;2238:7;2258:13;2274:7;:16;2282:7;2274:16;;;;;;;;;;;;;;;;;;;;;2258:32;;2326:1;2309:19;;:5;:19;;;;2301:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2392:5;2385:12;;;2166:239;;;:::o;217:21:2:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1896:208:4:-;1968:7;2013:1;1996:19;;:5;:19;;;;1988:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;2080:9;:16;2090:5;2080:16;;;;;;;;;;;;;;;;2073:23;;1896:208;;;:::o;1712:103:11:-;1292:12;:10;:12::i;:::-;1281:23;;:7;:5;:7::i;:::-;:23;;;1273:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1777:30:::1;1804:1;1777:18;:30::i;:::-;1712:103::o:0;4898:162:2:-;1292:12:11;:10;:12::i;:::-;1281:23;;:7;:5;:7::i;:::-;:23;;;1273:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4971:6:2::1;4966:89;4987:6;;:13;;4983:1;:17;4966:89;;;5043:4;5018:11;:22;5030:6;;5037:1;5030:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;5018:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;5002:3;;;;;:::i;:::-;;;;4966:89;;;;4898:162:::0;;:::o;3884:116::-;1292:12:11;:10;:12::i;:::-;1281:23;;:7;:5;:7::i;:::-;:23;;;1273:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3977:17:2::1;3961:13;:33;;;;3884:116:::0;:::o;1061:87:11:-;1107:7;1134:6;;;;;;;;;;;1127:13;;1061:87;:::o;2641:104:4:-;2697:13;2730:7;2723:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2641:104;:::o;492:34:2:-;;;;;;;;;;;;;:::o;1089:1347::-;1155:6;;;;;;;;;;;1154:7;1146:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;1195:14;1212:13;:11;:13::i;:::-;1195:30;;1254:1;1240:11;:15;1232:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;1326:9;;1311:11;1302:6;:20;;;;:::i;:::-;:33;;1294:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1389:7;:5;:7::i;:::-;1375:21;;:10;:21;;;1371:916;;1407:24;1434:20;:32;1455:10;1434:32;;;;;;;;;;;;;;;;1407:59;;1497:4;1478:23;;:15;;;;;;;;;;;:23;;;1475:538;;;1522:25;1536:10;1522:13;:25::i;:::-;1514:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;1609:1;1594:11;:16;;1586:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;1704:1;1689:11;1670:16;:30;;;;:::i;:::-;:35;;1662:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;1784:5;1749:20;:32;1770:10;1749:32;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;1475:538;;;1864:18;;1849:11;1830:16;:30;;;;:::i;:::-;:52;;1822:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;1949:13;;1934:11;:28;;1926:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;1475:538;2025:11;:23;2037:10;2025:23;;;;;;;;;;;;;;;;;;;;;;;;;2021:251;;;2083:1;2068:11;:16;;2060:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;2162:5;2136:11;:23;2148:10;2136:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;2021:251;;;2228:11;2221:4;;:18;;;;:::i;:::-;2208:9;:31;;2200:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;2021:251;1398:889;1371:916;2300:9;2312:1;2300:13;;2295:136;2320:11;2315:1;:16;2295:136;;2347:20;:32;2368:10;2347:32;;;;;;;;;;;;;;;;:34;;;;;;;;;:::i;:::-;;;;;;2390:33;2400:10;2421:1;2412:6;:10;;;;:::i;:::-;2390:9;:33::i;:::-;2333:3;;;;;:::i;:::-;;;;2295:136;;;;1139:1297;1089:1347;:::o;4324:155:4:-;4419:52;4438:12;:10;:12::i;:::-;4452:8;4462;4419:18;:52::i;:::-;4324:155;;:::o;3619:63:2:-;1292:12:11;:10;:12::i;:::-;1281:23;;:7;:5;:7::i;:::-;:23;;;1273:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3672:4:2::1;3661:8;;:15;;;;;;;;;;;;;;;;;;3619:63::o:0;5447:328:4:-;5622:41;5641:12;:10;:12::i;:::-;5655:7;5622:18;:41::i;:::-;5614:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5728:39;5742:4;5748:2;5752:7;5761:5;5728:13;:39::i;:::-;5447:328;;;;:::o;386:37:2:-;;;;:::o;3015:582::-;3113:13;3156:16;3164:7;3156;:16::i;:::-;3140:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;3261:5;3249:17;;:8;;;;;;;;;;;:17;;;3246:168;;;3315:1;3290:14;3284:28;;;;;:::i;:::-;;;:32;:122;;;;;;;;;;;;;;;;;3350:14;3366:18;:7;:16;:18::i;:::-;3333:60;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3284:122;3277:129;;;;3246:168;3422:28;3453:10;:8;:10::i;:::-;3422:41;;3508:1;3483:14;3477:28;:32;:114;;;;;;;;;;;;;;;;;3543:14;3559:18;:7;:16;:18::i;:::-;3526:52;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3477:114;3470:121;;;3015:582;;;;:::o;3688:104::-;1292:12:11;:10;:12::i;:::-;1281:23;;:7;:5;:7::i;:::-;:23;;;1273:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3780:6:2::1;3759:18;:27;;;;3688:104:::0;:::o;312:32::-;;;;:::o;4550:164:4:-;4647:4;4671:18;:25;4690:5;4671:25;;;;;;;;;;;;;;;:35;4697:8;4671:35;;;;;;;;;;;;;;;;;;;;;;;;;4664:42;;4550:164;;;;:::o;4713:179:2:-;1292:12:11;:10;:12::i;:::-;1281:23;;:7;:5;:7::i;:::-;:23;;;1273:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4793:6:2::1;4788:99;4809:6;;:13;;4805:1;:17;4788:99;;;4875:4;4840:20;:31;4861:6;;4868:1;4861:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;4840:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;4824:3;;;;;:::i;:::-;;;;4788:99;;;;4713:179:::0;;:::o;4216:120::-;1292:12:11;:10;:12::i;:::-;1281:23;;:7;:5;:7::i;:::-;:23;;;1273:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4315:15:2::1;4298:14;:32;;;;;;;;;;;;:::i;:::-;;4216:120:::0;:::o;1970:201:11:-;1292:12;:10;:12::i;:::-;1281:23;;:7;:5;:7::i;:::-;:23;;;1273:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2079:1:::1;2059:22;;:8;:22;;;;2051:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2135:28;2154:8;2135:18;:28::i;:::-;1970:201:::0;:::o;1527:305:4:-;1629:4;1681:25;1666:40;;;:11;:40;;;;:105;;;;1738:33;1723:48;;;:11;:48;;;;1666:105;:158;;;;1788:36;1812:11;1788:23;:36::i;:::-;1666:158;1646:178;;1527:305;;;:::o;656:98:1:-;709:7;736:10;729:17;;656:98;:::o;7285:127:4:-;7350:4;7402:1;7374:30;;:7;:16;7382:7;7374:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7367:37;;7285:127;;;:::o;11267:174::-;11369:2;11342:15;:24;11358:7;11342:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11425:7;11421:2;11387:46;;11396:23;11411:7;11396:14;:23::i;:::-;11387:46;;;;;;;;;;;;11267:174;;:::o;7579:348::-;7672:4;7697:16;7705:7;7697;:16::i;:::-;7689:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7773:13;7789:23;7804:7;7789:14;:23::i;:::-;7773:39;;7842:5;7831:16;;:7;:16;;;:51;;;;7875:7;7851:31;;:20;7863:7;7851:11;:20::i;:::-;:31;;;7831:51;:87;;;;7886:32;7903:5;7910:7;7886:16;:32::i;:::-;7831:87;7823:96;;;7579:348;;;;:::o;10571:578::-;10730:4;10703:31;;:23;10718:7;10703:14;:23::i;:::-;:31;;;10695:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10813:1;10799:16;;:2;:16;;;;10791:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10869:39;10890:4;10896:2;10900:7;10869:20;:39::i;:::-;10973:29;10990:1;10994:7;10973:8;:29::i;:::-;11034:1;11015:9;:15;11025:4;11015:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;11063:1;11046:9;:13;11056:2;11046:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;11094:2;11075:7;:16;11083:7;11075:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;11133:7;11129:2;11114:27;;11123:4;11114:27;;;;;;;;;;;;10571:578;;;:::o;2331:191:11:-;2405:16;2424:6;;;;;;;;;;;2405:25;;2450:8;2441:6;;:17;;;;;;;;;;;;;;;;;;2505:8;2474:40;;2495:8;2474:40;;;;;;;;;;;;2394:128;2331:191;:::o;8269:110:4:-;8345:26;8355:2;8359:7;8345:26;;;;;;;;;;;;:9;:26::i;:::-;8269:110;;:::o;11583:315::-;11738:8;11729:17;;:5;:17;;;;11721:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;11825:8;11787:18;:25;11806:5;11787:25;;;;;;;;;;;;;;;:35;11813:8;11787:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;11871:8;11849:41;;11864:5;11849:41;;;11881:8;11849:41;;;;;;:::i;:::-;;;;;;;;11583:315;;;:::o;6657:::-;6814:28;6824:4;6830:2;6834:7;6814:9;:28::i;:::-;6861:48;6884:4;6890:2;6894:7;6903:5;6861:22;:48::i;:::-;6853:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6657:315;;;;:::o;342:723:12:-;398:13;628:1;619:5;:10;615:53;;;646:10;;;;;;;;;;;;;;;;;;;;;615:53;678:12;693:5;678:20;;709:14;734:78;749:1;741:4;:9;734:78;;767:8;;;;;:::i;:::-;;;;798:2;790:10;;;;;:::i;:::-;;;734:78;;;822:19;854:6;844:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;822:39;;872:154;888:1;879:5;:10;872:154;;916:1;906:11;;;;;:::i;:::-;;;983:2;975:5;:10;;;;:::i;:::-;962:2;:24;;;;:::i;:::-;949:39;;932:6;939;932:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1012:2;1003:11;;;;;:::i;:::-;;;872:154;;;1050:6;1036:21;;;;;342:723;;;;:::o;968:102:2:-;1028:13;1057:7;1050:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;968:102;:::o;852:157:3:-;937:4;976:25;961:40;;;:11;:40;;;;954:47;;852:157;;;:::o;2690:589:5:-;2834:45;2861:4;2867:2;2871:7;2834:26;:45::i;:::-;2912:1;2896:18;;:4;:18;;;2892:187;;;2931:40;2963:7;2931:31;:40::i;:::-;2892:187;;;3001:2;2993:10;;:4;:10;;;2989:90;;3020:47;3053:4;3059:7;3020:32;:47::i;:::-;2989:90;2892:187;3107:1;3093:16;;:2;:16;;;3089:183;;;3126:45;3163:7;3126:36;:45::i;:::-;3089:183;;;3199:4;3193:10;;:2;:10;;;3189:83;;3220:40;3248:2;3252:7;3220:27;:40::i;:::-;3189:83;3089:183;2690:589;;;:::o;8606:321:4:-;8736:18;8742:2;8746:7;8736:5;:18::i;:::-;8787:54;8818:1;8822:2;8826:7;8835:5;8787:22;:54::i;:::-;8765:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;8606:321;;;:::o;12463:799::-;12618:4;12639:15;:2;:13;;;:15::i;:::-;12635:620;;;12691:2;12675:36;;;12712:12;:10;:12::i;:::-;12726:4;12732:7;12741:5;12675:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;12671:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12934:1;12917:6;:13;:18;12913:272;;;12960:60;;;;;;;;;;:::i;:::-;;;;;;;;12913:272;13135:6;13129:13;13120:6;13116:2;13112:15;13105:38;12671:529;12808:41;;;12798:51;;;:6;:51;;;;12791:58;;;;;12635:620;13239:4;13232:11;;12463:799;;;;;;;:::o;13834:126::-;;;;:::o;4002:164:5:-;4106:10;:17;;;;4079:15;:24;4095:7;4079:24;;;;;;;;;;;:44;;;;4134:10;4150:7;4134:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4002:164;:::o;4793:988::-;5059:22;5109:1;5084:22;5101:4;5084:16;:22::i;:::-;:26;;;;:::i;:::-;5059:51;;5121:18;5142:17;:26;5160:7;5142:26;;;;;;;;;;;;5121:47;;5289:14;5275:10;:28;5271:328;;5320:19;5342:12;:18;5355:4;5342:18;;;;;;;;;;;;;;;:34;5361:14;5342:34;;;;;;;;;;;;5320:56;;5426:11;5393:12;:18;5406:4;5393:18;;;;;;;;;;;;;;;:30;5412:10;5393:30;;;;;;;;;;;:44;;;;5543:10;5510:17;:30;5528:11;5510:30;;;;;;;;;;;:43;;;;5305:294;5271:328;5695:17;:26;5713:7;5695:26;;;;;;;;;;;5688:33;;;5739:12;:18;5752:4;5739:18;;;;;;;;;;;;;;;:34;5758:14;5739:34;;;;;;;;;;;5732:41;;;4874:907;;4793:988;;:::o;6076:1079::-;6329:22;6374:1;6354:10;:17;;;;:21;;;;:::i;:::-;6329:46;;6386:18;6407:15;:24;6423:7;6407:24;;;;;;;;;;;;6386:45;;6758:19;6780:10;6791:14;6780:26;;;;;;;;:::i;:::-;;;;;;;;;;6758:48;;6844:11;6819:10;6830;6819:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;6955:10;6924:15;:28;6940:11;6924:28;;;;;;;;;;;:41;;;;7096:15;:24;7112:7;7096:24;;;;;;;;;;;7089:31;;;7131:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6147:1008;;;6076:1079;:::o;3580:221::-;3665:14;3682:20;3699:2;3682:16;:20::i;:::-;3665:37;;3740:7;3713:12;:16;3726:2;3713:16;;;;;;;;;;;;;;;:24;3730:6;3713:24;;;;;;;;;;;:34;;;;3787:6;3758:17;:26;3776:7;3758:26;;;;;;;;;;;:35;;;;3654:147;3580:221;;:::o;9263:382:4:-;9357:1;9343:16;;:2;:16;;;;9335:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9416:16;9424:7;9416;:16::i;:::-;9415:17;9407:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9478:45;9507:1;9511:2;9515:7;9478:20;:45::i;:::-;9553:1;9536:9;:13;9546:2;9536:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;9584:2;9565:7;:16;9573:7;9565:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9629:7;9625:2;9604:33;;9621:1;9604:33;;;;;;;;;;;;9263:382;;:::o;797:387:0:-;857:4;1065:12;1132:7;1120:20;1112:28;;1175:1;1168:4;:8;1161:15;;;797:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:13:-;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;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:139::-;2769:5;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2723:139;;;;:::o;2868:329::-;2927:6;2976:2;2964:9;2955:7;2951:23;2947:32;2944:119;;;2982:79;;:::i;:::-;2944:119;3102:1;3127:53;3172:7;3163:6;3152:9;3148:22;3127:53;:::i;:::-;3117:63;;3073:117;2868:329;;;;:::o;3203:474::-;3271:6;3279;3328:2;3316:9;3307:7;3303:23;3299:32;3296:119;;;3334:79;;:::i;:::-;3296:119;3454:1;3479:53;3524:7;3515:6;3504:9;3500:22;3479:53;:::i;:::-;3469:63;;3425:117;3581:2;3607:53;3652:7;3643:6;3632:9;3628:22;3607:53;:::i;:::-;3597:63;;3552:118;3203:474;;;;;:::o;3683:619::-;3760:6;3768;3776;3825:2;3813:9;3804:7;3800:23;3796:32;3793:119;;;3831:79;;:::i;:::-;3793:119;3951:1;3976:53;4021:7;4012:6;4001:9;3997:22;3976:53;:::i;:::-;3966:63;;3922:117;4078:2;4104:53;4149:7;4140:6;4129:9;4125:22;4104:53;:::i;:::-;4094:63;;4049:118;4206:2;4232:53;4277:7;4268:6;4257:9;4253:22;4232:53;:::i;:::-;4222:63;;4177:118;3683:619;;;;;:::o;4308:943::-;4403:6;4411;4419;4427;4476:3;4464:9;4455:7;4451:23;4447:33;4444:120;;;4483:79;;:::i;:::-;4444:120;4603:1;4628:53;4673:7;4664:6;4653:9;4649:22;4628:53;:::i;:::-;4618:63;;4574:117;4730:2;4756:53;4801:7;4792:6;4781:9;4777:22;4756:53;:::i;:::-;4746:63;;4701:118;4858:2;4884:53;4929:7;4920:6;4909:9;4905:22;4884:53;:::i;:::-;4874:63;;4829:118;5014:2;5003:9;4999:18;4986:32;5045:18;5037:6;5034:30;5031:117;;;5067:79;;:::i;:::-;5031:117;5172:62;5226:7;5217:6;5206:9;5202:22;5172:62;:::i;:::-;5162:72;;4957:287;4308:943;;;;;;;:::o;5257:468::-;5322:6;5330;5379:2;5367:9;5358:7;5354:23;5350:32;5347:119;;;5385:79;;:::i;:::-;5347:119;5505:1;5530:53;5575:7;5566:6;5555:9;5551:22;5530:53;:::i;:::-;5520:63;;5476:117;5632:2;5658:50;5700:7;5691:6;5680:9;5676:22;5658:50;:::i;:::-;5648:60;;5603:115;5257:468;;;;;:::o;5731:474::-;5799:6;5807;5856:2;5844:9;5835:7;5831:23;5827:32;5824:119;;;5862:79;;:::i;:::-;5824:119;5982:1;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5953:117;6109:2;6135:53;6180:7;6171:6;6160:9;6156:22;6135:53;:::i;:::-;6125:63;;6080:118;5731:474;;;;;:::o;6211:559::-;6297:6;6305;6354:2;6342:9;6333:7;6329:23;6325:32;6322:119;;;6360:79;;:::i;:::-;6322:119;6508:1;6497:9;6493:17;6480:31;6538:18;6530:6;6527:30;6524:117;;;6560:79;;:::i;:::-;6524:117;6673:80;6745:7;6736:6;6725:9;6721:22;6673:80;:::i;:::-;6655:98;;;;6451:312;6211:559;;;;;:::o;6776:323::-;6832:6;6881:2;6869:9;6860:7;6856:23;6852:32;6849:119;;;6887:79;;:::i;:::-;6849:119;7007:1;7032:50;7074:7;7065:6;7054:9;7050:22;7032:50;:::i;:::-;7022:60;;6978:114;6776:323;;;;:::o;7105:327::-;7163:6;7212:2;7200:9;7191:7;7187:23;7183:32;7180:119;;;7218:79;;:::i;:::-;7180:119;7338:1;7363:52;7407:7;7398:6;7387:9;7383:22;7363:52;:::i;:::-;7353:62;;7309:116;7105:327;;;;:::o;7438:349::-;7507:6;7556:2;7544:9;7535:7;7531:23;7527:32;7524:119;;;7562:79;;:::i;:::-;7524:119;7682:1;7707:63;7762:7;7753:6;7742:9;7738:22;7707:63;:::i;:::-;7697:73;;7653:127;7438:349;;;;:::o;7793:509::-;7862:6;7911:2;7899:9;7890:7;7886:23;7882:32;7879:119;;;7917:79;;:::i;:::-;7879:119;8065:1;8054:9;8050:17;8037:31;8095:18;8087:6;8084:30;8081:117;;;8117:79;;:::i;:::-;8081:117;8222:63;8277:7;8268:6;8257:9;8253:22;8222:63;:::i;:::-;8212:73;;8008:287;7793:509;;;;:::o;8308:329::-;8367:6;8416:2;8404:9;8395:7;8391:23;8387:32;8384:119;;;8422:79;;:::i;:::-;8384:119;8542:1;8567:53;8612:7;8603:6;8592:9;8588:22;8567:53;:::i;:::-;8557:63;;8513:117;8308:329;;;;:::o;8643:179::-;8712:10;8733:46;8775:3;8767:6;8733:46;:::i;:::-;8811:4;8806:3;8802:14;8788:28;;8643:179;;;;:::o;8828:118::-;8915:24;8933:5;8915:24;:::i;:::-;8910:3;8903:37;8828:118;;:::o;8982:732::-;9101:3;9130:54;9178:5;9130:54;:::i;:::-;9200:86;9279:6;9274:3;9200:86;:::i;:::-;9193:93;;9310:56;9360:5;9310:56;:::i;:::-;9389:7;9420:1;9405:284;9430:6;9427:1;9424:13;9405:284;;;9506:6;9500:13;9533:63;9592:3;9577:13;9533:63;:::i;:::-;9526:70;;9619:60;9672:6;9619:60;:::i;:::-;9609:70;;9465:224;9452:1;9449;9445:9;9440:14;;9405:284;;;9409:14;9705:3;9698:10;;9106:608;;;8982:732;;;;:::o;9720:109::-;9801:21;9816:5;9801:21;:::i;:::-;9796:3;9789:34;9720:109;;:::o;9835:360::-;9921:3;9949:38;9981:5;9949:38;:::i;:::-;10003:70;10066:6;10061:3;10003:70;:::i;:::-;9996:77;;10082:52;10127:6;10122:3;10115:4;10108:5;10104:16;10082:52;:::i;:::-;10159:29;10181:6;10159:29;:::i;:::-;10154:3;10150:39;10143:46;;9925:270;9835:360;;;;:::o;10201:364::-;10289:3;10317:39;10350:5;10317:39;:::i;:::-;10372:71;10436:6;10431:3;10372:71;:::i;:::-;10365:78;;10452:52;10497:6;10492:3;10485:4;10478:5;10474:16;10452:52;:::i;:::-;10529:29;10551:6;10529:29;:::i;:::-;10524:3;10520:39;10513:46;;10293:272;10201:364;;;;:::o;10571:377::-;10677:3;10705:39;10738:5;10705:39;:::i;:::-;10760:89;10842:6;10837:3;10760:89;:::i;:::-;10753:96;;10858:52;10903:6;10898:3;10891:4;10884:5;10880:16;10858:52;:::i;:::-;10935:6;10930:3;10926:16;10919:23;;10681:267;10571:377;;;;:::o;10978:845::-;11081:3;11118:5;11112:12;11147:36;11173:9;11147:36;:::i;:::-;11199:89;11281:6;11276:3;11199:89;:::i;:::-;11192:96;;11319:1;11308:9;11304:17;11335:1;11330:137;;;;11481:1;11476:341;;;;11297:520;;11330:137;11414:4;11410:9;11399;11395:25;11390:3;11383:38;11450:6;11445:3;11441:16;11434:23;;11330:137;;11476:341;11543:38;11575:5;11543:38;:::i;:::-;11603:1;11617:154;11631:6;11628:1;11625:13;11617:154;;;11705:7;11699:14;11695:1;11690:3;11686:11;11679:35;11755:1;11746:7;11742:15;11731:26;;11653:4;11650:1;11646:12;11641:17;;11617:154;;;11800:6;11795:3;11791:16;11784:23;;11483:334;;11297:520;;11085:738;;10978:845;;;;:::o;11829:366::-;11971:3;11992:67;12056:2;12051:3;11992:67;:::i;:::-;11985:74;;12068:93;12157:3;12068:93;:::i;:::-;12186:2;12181:3;12177:12;12170:19;;11829:366;;;:::o;12201:::-;12343:3;12364:67;12428:2;12423:3;12364:67;:::i;:::-;12357:74;;12440:93;12529:3;12440:93;:::i;:::-;12558:2;12553:3;12549:12;12542:19;;12201:366;;;:::o;12573:::-;12715:3;12736:67;12800:2;12795:3;12736:67;:::i;:::-;12729:74;;12812:93;12901:3;12812:93;:::i;:::-;12930:2;12925:3;12921:12;12914:19;;12573:366;;;:::o;12945:::-;13087:3;13108:67;13172:2;13167:3;13108:67;:::i;:::-;13101:74;;13184:93;13273:3;13184:93;:::i;:::-;13302:2;13297:3;13293:12;13286:19;;12945:366;;;:::o;13317:::-;13459:3;13480:67;13544:2;13539:3;13480:67;:::i;:::-;13473:74;;13556:93;13645:3;13556:93;:::i;:::-;13674:2;13669:3;13665:12;13658:19;;13317:366;;;:::o;13689:::-;13831:3;13852:67;13916:2;13911:3;13852:67;:::i;:::-;13845:74;;13928:93;14017:3;13928:93;:::i;:::-;14046:2;14041:3;14037:12;14030:19;;13689:366;;;:::o;14061:::-;14203:3;14224:67;14288:2;14283:3;14224:67;:::i;:::-;14217:74;;14300:93;14389:3;14300:93;:::i;:::-;14418:2;14413:3;14409:12;14402:19;;14061:366;;;:::o;14433:::-;14575:3;14596:67;14660:2;14655:3;14596:67;:::i;:::-;14589:74;;14672:93;14761:3;14672:93;:::i;:::-;14790:2;14785:3;14781:12;14774:19;;14433:366;;;:::o;14805:::-;14947:3;14968:67;15032:2;15027:3;14968:67;:::i;:::-;14961:74;;15044:93;15133:3;15044:93;:::i;:::-;15162:2;15157:3;15153:12;15146:19;;14805:366;;;:::o;15177:::-;15319:3;15340:67;15404:2;15399:3;15340:67;:::i;:::-;15333:74;;15416:93;15505:3;15416:93;:::i;:::-;15534:2;15529:3;15525:12;15518:19;;15177:366;;;:::o;15549:::-;15691:3;15712:67;15776:2;15771:3;15712:67;:::i;:::-;15705:74;;15788:93;15877:3;15788:93;:::i;:::-;15906:2;15901:3;15897:12;15890:19;;15549:366;;;:::o;15921:::-;16063:3;16084:67;16148:2;16143:3;16084:67;:::i;:::-;16077:74;;16160:93;16249:3;16160:93;:::i;:::-;16278:2;16273:3;16269:12;16262:19;;15921:366;;;:::o;16293:::-;16435:3;16456:67;16520:2;16515:3;16456:67;:::i;:::-;16449:74;;16532:93;16621:3;16532:93;:::i;:::-;16650:2;16645:3;16641:12;16634:19;;16293:366;;;:::o;16665:::-;16807:3;16828:67;16892:2;16887:3;16828:67;:::i;:::-;16821:74;;16904:93;16993:3;16904:93;:::i;:::-;17022:2;17017:3;17013:12;17006:19;;16665:366;;;:::o;17037:::-;17179:3;17200:67;17264:2;17259:3;17200:67;:::i;:::-;17193:74;;17276:93;17365:3;17276:93;:::i;:::-;17394:2;17389:3;17385:12;17378:19;;17037:366;;;:::o;17409:400::-;17569:3;17590:84;17672:1;17667:3;17590:84;:::i;:::-;17583:91;;17683:93;17772:3;17683:93;:::i;:::-;17801:1;17796:3;17792:11;17785:18;;17409:400;;;:::o;17815:366::-;17957:3;17978:67;18042:2;18037:3;17978:67;:::i;:::-;17971:74;;18054:93;18143:3;18054:93;:::i;:::-;18172:2;18167:3;18163:12;18156:19;;17815:366;;;:::o;18187:::-;18329:3;18350:67;18414:2;18409:3;18350:67;:::i;:::-;18343:74;;18426:93;18515:3;18426:93;:::i;:::-;18544:2;18539:3;18535:12;18528:19;;18187:366;;;:::o;18559:::-;18701:3;18722:67;18786:2;18781:3;18722:67;:::i;:::-;18715:74;;18798:93;18887:3;18798:93;:::i;:::-;18916:2;18911:3;18907:12;18900:19;;18559:366;;;:::o;18931:::-;19073:3;19094:67;19158:2;19153:3;19094:67;:::i;:::-;19087:74;;19170:93;19259:3;19170:93;:::i;:::-;19288:2;19283:3;19279:12;19272:19;;18931:366;;;:::o;19303:::-;19445:3;19466:67;19530:2;19525:3;19466:67;:::i;:::-;19459:74;;19542:93;19631:3;19542:93;:::i;:::-;19660:2;19655:3;19651:12;19644:19;;19303:366;;;:::o;19675:398::-;19834:3;19855:83;19936:1;19931:3;19855:83;:::i;:::-;19848:90;;19947:93;20036:3;19947:93;:::i;:::-;20065:1;20060:3;20056:11;20049:18;;19675:398;;;:::o;20079:366::-;20221:3;20242:67;20306:2;20301:3;20242:67;:::i;:::-;20235:74;;20318:93;20407:3;20318:93;:::i;:::-;20436:2;20431:3;20427:12;20420:19;;20079:366;;;:::o;20451:::-;20593:3;20614:67;20678:2;20673:3;20614:67;:::i;:::-;20607:74;;20690:93;20779:3;20690:93;:::i;:::-;20808:2;20803:3;20799:12;20792:19;;20451:366;;;:::o;20823:::-;20965:3;20986:67;21050:2;21045:3;20986:67;:::i;:::-;20979:74;;21062:93;21151:3;21062:93;:::i;:::-;21180:2;21175:3;21171:12;21164:19;;20823:366;;;:::o;21195:::-;21337:3;21358:67;21422:2;21417:3;21358:67;:::i;:::-;21351:74;;21434:93;21523:3;21434:93;:::i;:::-;21552:2;21547:3;21543:12;21536:19;;21195:366;;;:::o;21567:::-;21709:3;21730:67;21794:2;21789:3;21730:67;:::i;:::-;21723:74;;21806:93;21895:3;21806:93;:::i;:::-;21924:2;21919:3;21915:12;21908:19;;21567:366;;;:::o;21939:108::-;22016:24;22034:5;22016:24;:::i;:::-;22011:3;22004:37;21939:108;;:::o;22053:118::-;22140:24;22158:5;22140:24;:::i;:::-;22135:3;22128:37;22053:118;;:::o;22177:435::-;22357:3;22379:95;22470:3;22461:6;22379:95;:::i;:::-;22372:102;;22491:95;22582:3;22573:6;22491:95;:::i;:::-;22484:102;;22603:3;22596:10;;22177:435;;;;;:::o;22618:695::-;22896:3;22918:92;23006:3;22997:6;22918:92;:::i;:::-;22911:99;;23027:95;23118:3;23109:6;23027:95;:::i;:::-;23020:102;;23139:148;23283:3;23139:148;:::i;:::-;23132:155;;23304:3;23297:10;;22618:695;;;;;:::o;23319:379::-;23503:3;23525:147;23668:3;23525:147;:::i;:::-;23518:154;;23689:3;23682:10;;23319:379;;;:::o;23704:222::-;23797:4;23835:2;23824:9;23820:18;23812:26;;23848:71;23916:1;23905:9;23901:17;23892:6;23848:71;:::i;:::-;23704:222;;;;:::o;23932:640::-;24127:4;24165:3;24154:9;24150:19;24142:27;;24179:71;24247:1;24236:9;24232:17;24223:6;24179:71;:::i;:::-;24260:72;24328:2;24317:9;24313:18;24304:6;24260:72;:::i;:::-;24342;24410:2;24399:9;24395:18;24386:6;24342:72;:::i;:::-;24461:9;24455:4;24451:20;24446:2;24435:9;24431:18;24424:48;24489:76;24560:4;24551:6;24489:76;:::i;:::-;24481:84;;23932:640;;;;;;;:::o;24578:373::-;24721:4;24759:2;24748:9;24744:18;24736:26;;24808:9;24802:4;24798:20;24794:1;24783:9;24779:17;24772:47;24836:108;24939:4;24930:6;24836:108;:::i;:::-;24828:116;;24578:373;;;;:::o;24957:210::-;25044:4;25082:2;25071:9;25067:18;25059:26;;25095:65;25157:1;25146:9;25142:17;25133:6;25095:65;:::i;:::-;24957:210;;;;:::o;25173:313::-;25286:4;25324:2;25313:9;25309:18;25301:26;;25373:9;25367:4;25363:20;25359:1;25348:9;25344:17;25337:47;25401:78;25474:4;25465:6;25401:78;:::i;:::-;25393:86;;25173:313;;;;:::o;25492:419::-;25658:4;25696:2;25685:9;25681:18;25673:26;;25745:9;25739:4;25735:20;25731:1;25720:9;25716:17;25709:47;25773:131;25899:4;25773:131;:::i;:::-;25765:139;;25492:419;;;:::o;25917:::-;26083:4;26121:2;26110:9;26106:18;26098:26;;26170:9;26164:4;26160:20;26156:1;26145:9;26141:17;26134:47;26198:131;26324:4;26198:131;:::i;:::-;26190:139;;25917:419;;;:::o;26342:::-;26508:4;26546:2;26535:9;26531:18;26523:26;;26595:9;26589:4;26585:20;26581:1;26570:9;26566:17;26559:47;26623:131;26749:4;26623:131;:::i;:::-;26615:139;;26342:419;;;:::o;26767:::-;26933:4;26971:2;26960:9;26956:18;26948:26;;27020:9;27014:4;27010:20;27006:1;26995:9;26991:17;26984:47;27048:131;27174:4;27048:131;:::i;:::-;27040:139;;26767:419;;;:::o;27192:::-;27358:4;27396:2;27385:9;27381:18;27373:26;;27445:9;27439:4;27435:20;27431:1;27420:9;27416:17;27409:47;27473:131;27599:4;27473:131;:::i;:::-;27465:139;;27192:419;;;:::o;27617:::-;27783:4;27821:2;27810:9;27806:18;27798:26;;27870:9;27864:4;27860:20;27856:1;27845:9;27841:17;27834:47;27898:131;28024:4;27898:131;:::i;:::-;27890:139;;27617:419;;;:::o;28042:::-;28208:4;28246:2;28235:9;28231:18;28223:26;;28295:9;28289:4;28285:20;28281:1;28270:9;28266:17;28259:47;28323:131;28449:4;28323:131;:::i;:::-;28315:139;;28042:419;;;:::o;28467:::-;28633:4;28671:2;28660:9;28656:18;28648:26;;28720:9;28714:4;28710:20;28706:1;28695:9;28691:17;28684:47;28748:131;28874:4;28748:131;:::i;:::-;28740:139;;28467:419;;;:::o;28892:::-;29058:4;29096:2;29085:9;29081:18;29073:26;;29145:9;29139:4;29135:20;29131:1;29120:9;29116:17;29109:47;29173:131;29299:4;29173:131;:::i;:::-;29165:139;;28892:419;;;:::o;29317:::-;29483:4;29521:2;29510:9;29506:18;29498:26;;29570:9;29564:4;29560:20;29556:1;29545:9;29541:17;29534:47;29598:131;29724:4;29598:131;:::i;:::-;29590:139;;29317:419;;;:::o;29742:::-;29908:4;29946:2;29935:9;29931:18;29923:26;;29995:9;29989:4;29985:20;29981:1;29970:9;29966:17;29959:47;30023:131;30149:4;30023:131;:::i;:::-;30015:139;;29742:419;;;:::o;30167:::-;30333:4;30371:2;30360:9;30356:18;30348:26;;30420:9;30414:4;30410:20;30406:1;30395:9;30391:17;30384:47;30448:131;30574:4;30448:131;:::i;:::-;30440:139;;30167:419;;;:::o;30592:::-;30758:4;30796:2;30785:9;30781:18;30773:26;;30845:9;30839:4;30835:20;30831:1;30820:9;30816:17;30809:47;30873:131;30999:4;30873:131;:::i;:::-;30865:139;;30592:419;;;:::o;31017:::-;31183:4;31221:2;31210:9;31206:18;31198:26;;31270:9;31264:4;31260:20;31256:1;31245:9;31241:17;31234:47;31298:131;31424:4;31298:131;:::i;:::-;31290:139;;31017:419;;;:::o;31442:::-;31608:4;31646:2;31635:9;31631:18;31623:26;;31695:9;31689:4;31685:20;31681:1;31670:9;31666:17;31659:47;31723:131;31849:4;31723:131;:::i;:::-;31715:139;;31442:419;;;:::o;31867:::-;32033:4;32071:2;32060:9;32056:18;32048:26;;32120:9;32114:4;32110:20;32106:1;32095:9;32091:17;32084:47;32148:131;32274:4;32148:131;:::i;:::-;32140:139;;31867:419;;;:::o;32292:::-;32458:4;32496:2;32485:9;32481:18;32473:26;;32545:9;32539:4;32535:20;32531:1;32520:9;32516:17;32509:47;32573:131;32699:4;32573:131;:::i;:::-;32565:139;;32292:419;;;:::o;32717:::-;32883:4;32921:2;32910:9;32906:18;32898:26;;32970:9;32964:4;32960:20;32956:1;32945:9;32941:17;32934:47;32998:131;33124:4;32998:131;:::i;:::-;32990:139;;32717:419;;;:::o;33142:::-;33308:4;33346:2;33335:9;33331:18;33323:26;;33395:9;33389:4;33385:20;33381:1;33370:9;33366:17;33359:47;33423:131;33549:4;33423:131;:::i;:::-;33415:139;;33142:419;;;:::o;33567:::-;33733:4;33771:2;33760:9;33756:18;33748:26;;33820:9;33814:4;33810:20;33806:1;33795:9;33791:17;33784:47;33848:131;33974:4;33848:131;:::i;:::-;33840:139;;33567:419;;;:::o;33992:::-;34158:4;34196:2;34185:9;34181:18;34173:26;;34245:9;34239:4;34235:20;34231:1;34220:9;34216:17;34209:47;34273:131;34399:4;34273:131;:::i;:::-;34265:139;;33992:419;;;:::o;34417:::-;34583:4;34621:2;34610:9;34606:18;34598:26;;34670:9;34664:4;34660:20;34656:1;34645:9;34641:17;34634:47;34698:131;34824:4;34698:131;:::i;:::-;34690:139;;34417:419;;;:::o;34842:::-;35008:4;35046:2;35035:9;35031:18;35023:26;;35095:9;35089:4;35085:20;35081:1;35070:9;35066:17;35059:47;35123:131;35249:4;35123:131;:::i;:::-;35115:139;;34842:419;;;:::o;35267:::-;35433:4;35471:2;35460:9;35456:18;35448:26;;35520:9;35514:4;35510:20;35506:1;35495:9;35491:17;35484:47;35548:131;35674:4;35548:131;:::i;:::-;35540:139;;35267:419;;;:::o;35692:::-;35858:4;35896:2;35885:9;35881:18;35873:26;;35945:9;35939:4;35935:20;35931:1;35920:9;35916:17;35909:47;35973:131;36099:4;35973:131;:::i;:::-;35965:139;;35692:419;;;:::o;36117:222::-;36210:4;36248:2;36237:9;36233:18;36225:26;;36261:71;36329:1;36318:9;36314:17;36305:6;36261:71;:::i;:::-;36117:222;;;;:::o;36345:129::-;36379:6;36406:20;;:::i;:::-;36396:30;;36435:33;36463:4;36455:6;36435:33;:::i;:::-;36345:129;;;:::o;36480:75::-;36513:6;36546:2;36540:9;36530:19;;36480:75;:::o;36561:307::-;36622:4;36712:18;36704:6;36701:30;36698:56;;;36734:18;;:::i;:::-;36698:56;36772:29;36794:6;36772:29;:::i;:::-;36764:37;;36856:4;36850;36846:15;36838:23;;36561:307;;;:::o;36874:308::-;36936:4;37026:18;37018:6;37015:30;37012:56;;;37048:18;;:::i;:::-;37012:56;37086:29;37108:6;37086:29;:::i;:::-;37078:37;;37170:4;37164;37160:15;37152:23;;36874:308;;;:::o;37188:132::-;37255:4;37278:3;37270:11;;37308:4;37303:3;37299:14;37291:22;;37188:132;;;:::o;37326:141::-;37375:4;37398:3;37390:11;;37421:3;37418:1;37411:14;37455:4;37452:1;37442:18;37434:26;;37326:141;;;:::o;37473:114::-;37540:6;37574:5;37568:12;37558:22;;37473:114;;;:::o;37593:98::-;37644:6;37678:5;37672:12;37662:22;;37593:98;;;:::o;37697:99::-;37749:6;37783:5;37777:12;37767:22;;37697:99;;;:::o;37802:113::-;37872:4;37904;37899:3;37895:14;37887:22;;37802:113;;;:::o;37921:184::-;38020:11;38054:6;38049:3;38042:19;38094:4;38089:3;38085:14;38070:29;;37921:184;;;;:::o;38111:168::-;38194:11;38228:6;38223:3;38216:19;38268:4;38263:3;38259:14;38244:29;;38111:168;;;;:::o;38285:147::-;38386:11;38423:3;38408:18;;38285:147;;;;:::o;38438:169::-;38522:11;38556:6;38551:3;38544:19;38596:4;38591:3;38587:14;38572:29;;38438:169;;;;:::o;38613:148::-;38715:11;38752:3;38737:18;;38613:148;;;;:::o;38767:305::-;38807:3;38826:20;38844:1;38826:20;:::i;:::-;38821:25;;38860:20;38878:1;38860:20;:::i;:::-;38855:25;;39014:1;38946:66;38942:74;38939:1;38936:81;38933:107;;;39020:18;;:::i;:::-;38933:107;39064:1;39061;39057:9;39050:16;;38767:305;;;;:::o;39078:185::-;39118:1;39135:20;39153:1;39135:20;:::i;:::-;39130:25;;39169:20;39187:1;39169:20;:::i;:::-;39164:25;;39208:1;39198:35;;39213:18;;:::i;:::-;39198:35;39255:1;39252;39248:9;39243:14;;39078:185;;;;:::o;39269:348::-;39309:7;39332:20;39350:1;39332:20;:::i;:::-;39327:25;;39366:20;39384:1;39366:20;:::i;:::-;39361:25;;39554:1;39486:66;39482:74;39479:1;39476:81;39471:1;39464:9;39457:17;39453:105;39450:131;;;39561:18;;:::i;:::-;39450:131;39609:1;39606;39602:9;39591:20;;39269:348;;;;:::o;39623:191::-;39663:4;39683:20;39701:1;39683:20;:::i;:::-;39678:25;;39717:20;39735:1;39717:20;:::i;:::-;39712:25;;39756:1;39753;39750:8;39747:34;;;39761:18;;:::i;:::-;39747:34;39806:1;39803;39799:9;39791:17;;39623:191;;;;:::o;39820:96::-;39857:7;39886:24;39904:5;39886:24;:::i;:::-;39875:35;;39820:96;;;:::o;39922:90::-;39956:7;39999:5;39992:13;39985:21;39974:32;;39922:90;;;:::o;40018:149::-;40054:7;40094:66;40087:5;40083:78;40072:89;;40018:149;;;:::o;40173:126::-;40210:7;40250:42;40243:5;40239:54;40228:65;;40173:126;;;:::o;40305:77::-;40342:7;40371:5;40360:16;;40305:77;;;:::o;40388:154::-;40472:6;40467:3;40462;40449:30;40534:1;40525:6;40520:3;40516:16;40509:27;40388:154;;;:::o;40548:307::-;40616:1;40626:113;40640:6;40637:1;40634:13;40626:113;;;40725:1;40720:3;40716:11;40710:18;40706:1;40701:3;40697:11;40690:39;40662:2;40659:1;40655:10;40650:15;;40626:113;;;40757:6;40754:1;40751:13;40748:101;;;40837:1;40828:6;40823:3;40819:16;40812:27;40748:101;40597:258;40548:307;;;:::o;40861:320::-;40905:6;40942:1;40936:4;40932:12;40922:22;;40989:1;40983:4;40979:12;41010:18;41000:81;;41066:4;41058:6;41054:17;41044:27;;41000:81;41128:2;41120:6;41117:14;41097:18;41094:38;41091:84;;;41147:18;;:::i;:::-;41091:84;40912:269;40861:320;;;:::o;41187:281::-;41270:27;41292:4;41270:27;:::i;:::-;41262:6;41258:40;41400:6;41388:10;41385:22;41364:18;41352:10;41349:34;41346:62;41343:88;;;41411:18;;:::i;:::-;41343:88;41451:10;41447:2;41440:22;41230:238;41187:281;;:::o;41474:233::-;41513:3;41536:24;41554:5;41536:24;:::i;:::-;41527:33;;41582:66;41575:5;41572:77;41569:103;;;41652:18;;:::i;:::-;41569:103;41699:1;41692:5;41688:13;41681:20;;41474:233;;;:::o;41713:176::-;41745:1;41762:20;41780:1;41762:20;:::i;:::-;41757:25;;41796:20;41814:1;41796:20;:::i;:::-;41791:25;;41835:1;41825:35;;41840:18;;:::i;:::-;41825:35;41881:1;41878;41874:9;41869:14;;41713:176;;;;:::o;41895:180::-;41943:77;41940:1;41933:88;42040:4;42037:1;42030:15;42064:4;42061:1;42054:15;42081:180;42129:77;42126:1;42119:88;42226:4;42223:1;42216:15;42250:4;42247:1;42240:15;42267:180;42315:77;42312:1;42305:88;42412:4;42409:1;42402:15;42436:4;42433:1;42426:15;42453:180;42501:77;42498:1;42491:88;42598:4;42595:1;42588:15;42622:4;42619:1;42612:15;42639:180;42687:77;42684:1;42677:88;42784:4;42781:1;42774:15;42808:4;42805:1;42798:15;42825:180;42873:77;42870:1;42863:88;42970:4;42967:1;42960:15;42994:4;42991:1;42984:15;43011:117;43120:1;43117;43110:12;43134:117;43243:1;43240;43233:12;43257:117;43366:1;43363;43356:12;43380:117;43489:1;43486;43479:12;43503:117;43612:1;43609;43602:12;43626:117;43735:1;43732;43725:12;43749:102;43790:6;43841:2;43837:7;43832:2;43825:5;43821:14;43817:28;43807:38;;43749:102;;;:::o;43857:230::-;43997:34;43993:1;43985:6;43981:14;43974:58;44066:13;44061:2;44053:6;44049:15;44042:38;43857:230;:::o;44093:237::-;44233:34;44229:1;44221:6;44217:14;44210:58;44302:20;44297:2;44289:6;44285:15;44278:45;44093:237;:::o;44336:225::-;44476:34;44472:1;44464:6;44460:14;44453:58;44545:8;44540:2;44532:6;44528:15;44521:33;44336:225;:::o;44567:178::-;44707:30;44703:1;44695:6;44691:14;44684:54;44567:178;:::o;44751:::-;44891:30;44887:1;44879:6;44875:14;44868:54;44751:178;:::o;44935:223::-;45075:34;45071:1;45063:6;45059:14;45052:58;45144:6;45139:2;45131:6;45127:15;45120:31;44935:223;:::o;45164:175::-;45304:27;45300:1;45292:6;45288:14;45281:51;45164:175;:::o;45345:231::-;45485:34;45481:1;45473:6;45469:14;45462:58;45554:14;45549:2;45541:6;45537:15;45530:39;45345:231;:::o;45582:243::-;45722:34;45718:1;45710:6;45706:14;45699:58;45791:26;45786:2;45778:6;45774:15;45767:51;45582:243;:::o;45831:229::-;45971:34;45967:1;45959:6;45955:14;45948:58;46040:12;46035:2;46027:6;46023:15;46016:37;45831:229;:::o;46066:228::-;46206:34;46202:1;46194:6;46190:14;46183:58;46275:11;46270:2;46262:6;46258:15;46251:36;46066:228;:::o;46300:172::-;46440:24;46436:1;46428:6;46424:14;46417:48;46300:172;:::o;46478:223::-;46618:34;46614:1;46606:6;46602:14;46595:58;46687:6;46682:2;46674:6;46670:15;46663:31;46478:223;:::o;46707:182::-;46847:34;46843:1;46835:6;46831:14;46824:58;46707:182;:::o;46895:231::-;47035:34;47031:1;47023:6;47019:14;47012:58;47104:14;47099:2;47091:6;47087:15;47080:39;46895:231;:::o;47132:155::-;47272:7;47268:1;47260:6;47256:14;47249:31;47132:155;:::o;47293:182::-;47433:34;47429:1;47421:6;47417:14;47410:58;47293:182;:::o;47481:172::-;47621:24;47617:1;47609:6;47605:14;47598:48;47481:172;:::o;47659:228::-;47799:34;47795:1;47787:6;47783:14;47776:58;47868:11;47863:2;47855:6;47851:15;47844:36;47659:228;:::o;47893:234::-;48033:34;48029:1;48021:6;48017:14;48010:58;48102:17;48097:2;48089:6;48085:15;48078:42;47893:234;:::o;48133:220::-;48273:34;48269:1;48261:6;48257:14;48250:58;48342:3;48337:2;48329:6;48325:15;48318:28;48133:220;:::o;48359:114::-;;:::o;48479:168::-;48619:20;48615:1;48607:6;48603:14;48596:44;48479:168;:::o;48653:236::-;48793:34;48789:1;48781:6;48777:14;48770:58;48862:19;48857:2;48849:6;48845:15;48838:44;48653:236;:::o;48895:231::-;49035:34;49031:1;49023:6;49019:14;49012:58;49104:14;49099:2;49091:6;49087:15;49080:39;48895:231;:::o;49132:173::-;49272:25;49268:1;49260:6;49256:14;49249:49;49132:173;:::o;49311:177::-;49451:29;49447:1;49439:6;49435:14;49428:53;49311:177;:::o;49494:122::-;49567:24;49585:5;49567:24;:::i;:::-;49560:5;49557:35;49547:63;;49606:1;49603;49596:12;49547:63;49494:122;:::o;49622:116::-;49692:21;49707:5;49692:21;:::i;:::-;49685:5;49682:32;49672:60;;49728:1;49725;49718:12;49672:60;49622:116;:::o;49744:120::-;49816:23;49833:5;49816:23;:::i;:::-;49809:5;49806:34;49796:62;;49854:1;49851;49844:12;49796:62;49744:120;:::o;49870:122::-;49943:24;49961:5;49943:24;:::i;:::-;49936:5;49933:35;49923:63;;49982:1;49979;49972:12;49923:63;49870:122;:::o
Swarm Source
ipfs://828d8051a57c7a7823f3cf809e7fbd9689fb5e578721c714667d3ad050ea340f
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.