ERC-721
Overview
Max Total Supply
78 xM NFT
Holders
37
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 xM NFTLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
XMartians
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-11-15 */ // SPDX-License-Identifier: MIT. pragma solidity 0.8.7; /** ERROR TABLE (saves gas and contract size) ER1: Ownable: caller is not the owner ER2: "Ownable: new owner is the zero address" ER3: "Address: insufficient balance" ER4: "Address: unable to send value, recipient may have reverted" ER5: "Address: low-level call failed" ER6: "Address: low-level call with value failed" ER7: "Address: insufficient balance for call" ER8: "Address: call to non-contract" ER9: "Address: low-level static call failed" ER10: "Address: static call to non-contract" ER11: "Address: low-level delegate call failed" ER12: "Address: delegate call to non-contract" ER13: "Strings: hex length insufficient" ER14: "ERC721: balance query for the zero address" ER15: "ERC721: owner query for nonexistent token" ER16: ERC721Metadata: URI query for nonexistent token ER17: ERC721: approval to current owner ER18: ERC721: approve caller is not owner nor approved for all ER19: ERC721: approved query for nonexistent token ER20: ERC721: approve to caller ER21: ERC721: transfer caller is not owner nor approved ER22: ERC721: transfer caller is not owner nor approved ER23: ERC721: transfer to non ERC721Receiver implementer ER24: ERC721: operator query for nonexistent token ER25: ERC721: transfer to non ERC721Receiver implementer ER26: ERC721: mint to the zero address ER27: ERC721: token already minted ER28: ERC721: transfer of token that is not own ER29: ERC721: transfer to the zero address ER30: ERC721: transfer to non ERC721Receiver implementer ER31: ERC721Enumerable: owner index out of bounds ER32: ERC721Enumerable: global index out of bounds ER33: insufficient funds ER34: XMartianNFT: checkMintQty() Exceeds Max Mint QTY ER35: the contract is paused ER36: max NFT limit exceeded for collection ER37: max NFT limit exceeded for collection ER38: max NFT limit exceeded ER39: ERC721Metadata: URI query for nonexistent token / /** * @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; } } /** * @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() { _setOwner(_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(), "ER0"); _; } /** * @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 { _setOwner(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), "ER2"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @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); } /** * @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); } /** * @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; } /** * @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); } /** * @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, "ER3"); (bool success, ) = recipient.call{value: amount}(""); require(success, "ER4"); } /** * @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, "ER5"); } /** * @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, "ER6"); } /** * @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, "ER7"); require(isContract(target), "ER8"); (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, "ER9"); } /** * @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), "ER10"); (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, "ER11"); } /** * @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), "ER12"); (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); } } } } /** * @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, "ER13"); return string(buffer); } } /** * @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; } } /** * @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), "ER14"); 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), "ER15"); 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), "ER16"); 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, "ER17"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ER18" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ER19"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ER20"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ER21"); _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), "ER22"); _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), "ER23"); } /** * @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), "ER24"); 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), "ER25" ); } /** * @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), "ER26"); require(!_exists(tokenId), "ER27"); _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, "ER28"); require(to != address(0), "ER29"); _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 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("ER30"); } 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 {} } /** * @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); } /** * @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), "ER31"); 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(), "ER32"); 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(); } } contract XMartians is ERC721Enumerable, Ownable { using Strings for uint256; /* 1st mint cost payment split: 0 15% to 0xd00f26915108dF339BF9B63Bd34a305052EefffB 1 15% to 0x1fF99B8Ba496DCa54Dcf2dC923445B889cc08800 2 10% to surgeReleif temp wallet 0xcd00e0cA451967560cD492d4f7e35DCdc4B8D08f 3 29% to 0x9DCc8aac81d41FCB1e94461C55Ad23DC74b4b8FC nftPumps 4 30% to 0xa1Dc531aA00F24665d06Ee7d3614C502c08DD964 5 1% to 0xf1a455e6b5BA2303E37b81B258AF9D0110bCd700 iceCreamMan; Transfer fee split for resales: 50% xMoony 0xd00f26915108dF339BF9B63Bd34a305052EefffB 50% to 0xa1Dc531aA00F24665d06Ee7d3614C502c08DD964 */ uint16 public maxMintQty = 60; uint16 public constant MAX_SUPPLY = 10_000; bool public autoFloor = true; bool public paused = true; string public baseExtension = ".json"; string public placeHolderURL; string[] public baseURIs; /** @notice currentCollectionSupply holds current supply of each collection @notice currentCollectionSupply[COLLECTION NUMBER] = CURRENT QTY MINTED IN COLLECTION @dev currentCollectionSupply[0] galaxy supply @dev currentCollectionSupply[1] nebula supply @dev currentCollectionSupply[2] superNova supply @dev currentCollectionSupply[3] hyperRare supply @dev currentCollectionSupply[4] custom supply */ mapping(uint8 => uint32) public currentSubCollectionSupply; /** @notice cost holds current cost to mint an item from each subCollection @notice cost[COLLECTION NUMBER] = mint cost @dev cost[0] galaxy cost @dev cost[1] nebula cost @dev cost[2] superNova cost @dev cost[3] hyperRare cost @dev cost[4] custom cost */ mapping(uint8 => uint256) public cost; /** @notice maxSubCollectionMints holds MAX mintable for the sub collection @notice maxSubCollectionMints[COLLECTION NUMBER] = mint cost @dev maxSubCollectionMints[0] galaxy cost @dev maxSubCollectionMints[1] nebula cost @dev maxSubCollectionMints[2] superNova cost @dev maxSubCollectionMints[3] hyperRare cost @dev maxSubCollectionMints[4] custom cost */ mapping(uint8 => uint16) public maxSubCollectionMints; mapping(uint256 => uint8) public addressUrlType; mapping(uint256 => uint256) public urlToId; mapping(uint256 => string) public idUrlCustom; // USAGE: customMintables[address] = customMintableNFTS mapping(address => uint8) public customMintables; // USAGE: giveAwayAllowance[subCollectionNumber][address] = number address can claim mapping(uint8 => mapping(address => uint8)) public giveAwayAllowance; // USAGE: remainingReserved[subCollectionNumber] = number of remaining items reserved for presale addresses mapping(uint8 => uint16) public remainingReserved; // USAGE: holderReservedCount[subCollectionNumber][address] = number of reserved items for address mapping(uint8 => mapping(address => uint16)) public holderReservedCount; //galaxy 0 //nebula 1 //superNova 2 //hyper 3 function batchAddCustomMintables( address[] memory addr, uint8[] memory count ) external onlyOwner { /* checkEqualListLengths( uint16(addr.length), uint16(count.length), uint16(count.length) ); */ _iterateBatchAddCustomMintables(addr, count); } function _iterateBatchAddCustomMintables( address[] memory addr, uint8[] memory count ) internal { for (uint16 i = 0; i < addr.length; i++) { customMintables[addr[i]] = count[i]; } } function batchAddGiveAwayAllowance( address[] memory addr, uint8[] memory count, uint8[] memory collectionNumber ) external onlyOwner { /* checkEqualListLengths( uint16(addr.length), uint16(count.length), uint16(collectionNumber.length) ); */ _iterateBatchAddToGiveAway(addr,count,collectionNumber); } function _iterateBatchAddToGiveAway( address[] memory addr, uint8[] memory count, uint8[] memory collectionNumber ) internal { for (uint16 i = 0; i < addr.length; i++) { giveAwayAllowance[collectionNumber[i]][addr[i]] = count[i]; } } function batchAddHolderReservedCount( address[] memory addr, uint8[] memory count, uint8[] memory collectionNumber ) external onlyOwner { /* checkEqualListLengths( uint16(addr.length), uint16(count.length), uint16(collectionNumber.length) ); */ _iterateBatchAddHolderReservedCount(addr,count,collectionNumber); } function _iterateBatchAddHolderReservedCount( address[] memory addr, uint8[] memory count, uint8[] memory collectionNumber ) internal { for (uint16 i = 0; i < addr.length; i++) { holderReservedCount[collectionNumber[i]][addr[i]] = count[i]; remainingReserved[collectionNumber[i]] = remainingReserved[collectionNumber[i]] + count[i]; } } constructor( string memory _name, string memory _symbol, string[] memory _initBaseURIs, string memory _placeHolderURL ) ERC721(_name, _symbol) { setBaseURIs(_initBaseURIs); placeHolderURL = _placeHolderURL; cost[0] = 0.02 ether; cost[1] = 0.03 ether; cost[2] = 0.04 ether; cost[3] = 0.05 ether; cost[4] = 0.00 ether; maxSubCollectionMints[0] = 5700; maxSubCollectionMints[1] = 2500; maxSubCollectionMints[2] = 1450; maxSubCollectionMints[3] = 150; maxSubCollectionMints[4] = 200; } // internal function _baseURIs() public view virtual returns (string[] memory) { return baseURIs; } function mintGalaxy(uint8 mintQty) public payable { _iterateMint(0, mintQty); } function mintNebula(uint8 mintQty) public payable { _iterateMint(1, mintQty); } function mintSuperNova(uint8 mintQty) public payable { _iterateMint(2, mintQty); } function mintHyperRare(uint8 mintQty) public payable { _iterateMint(3, mintQty); } function mintCustom() public payable { _mintCustom(); } // public function _iterateMint(uint8 subCollection, uint8 mintQty) internal { checkPaused(); checkMintQty(mintQty, maxMintQty); uint256 _afterMintSupply = totalSupply() + mintQty; checkMaxSupply(_afterMintSupply); checkSupplyAndReserved(subCollection, mintQty); //update cost if(autoFloor){ _updateAutoFloorPrice(); } // if the msgSender has a free giveaway allowance if(mintQty <= giveAwayAllowance[subCollection][_msgSender()]){ // subtract mint qty from giveAway allowance giveAwayAllowance[subCollection][_msgSender()] - mintQty; } else { checkTxCost(msg.value, (cost[subCollection] * mintQty)); } for (uint256 i; i < mintQty; i++) { _mintTx(subCollection); } } function getTxCost(uint8 subCollection, uint8 mintQty) public view returns (uint256 value){ if(mintQty <= giveAwayAllowance[subCollection][_msgSender()]){ return 0; } else { return (cost[subCollection] * mintQty); } } function _mintTx(uint8 subCollection) internal { uint256 tokenId = totalSupply() + 1; addressUrlType[tokenId] = subCollection; currentSubCollectionSupply[subCollection]++; urlToId[tokenId] = currentSubCollectionSupply[subCollection]; _safeMint(_msgSender(), tokenId); distributePayment(); } function _mintCustom() internal { checkPaused(); if(customMintables[_msgSender()] > 0 || _msgSender() == owner()){ if (_msgSender() != owner()) { customMintables[_msgSender()]--; require(msg.value >= cost[4] , "insufficient funds"); } uint256 tokenId = totalSupply() + 1; currentSubCollectionSupply[4]++; addressUrlType[tokenId] = 4; _safeMint(_msgSender(), tokenId); idUrlCustom[tokenId] = placeHolderURL; } } function _updateAutoFloorPrice() internal { uint256 _totalSupply = totalSupply(); if(_totalSupply > 1000) { _setPrice(0.022 ether, 0.033 ether, 0.044 ether, 0.055 ether); } else if(_totalSupply > 2000) { _setPrice(0.0242 ether, 0.0363 ether, 0.0484 ether, 0.0605 ether); } else if(_totalSupply > 3000) { _setPrice(0.0266 ether, 0.0399 ether, 0.0532 ether, 0.0666 ether); } else if(_totalSupply > 4000) { _setPrice(0.0293 ether, 0.0439 ether, 0.0585 ether, 0.0733 ether); } else if(_totalSupply > 5000) { _setPrice(0.0322 ether, 0.0483 ether, 0.0644 ether, 0.0806 ether); } else if(_totalSupply > 6000) { _setPrice(0.0354 ether, 0.0531 ether, 0.0708 ether, 0.0887 ether); } else if(_totalSupply > 7000) { _setPrice(0.0389 ether, 0.0584 ether, 0.0779 ether, 0.0976 ether); } else if(_totalSupply > 8000) { _setPrice(0.0428 ether, 0.0642 ether, 0.0857 ether, 0.1074 ether); } else if(_totalSupply > 8000) { _setPrice(0.0471 ether, 0.0706 ether, 0.0943 ether, 0.1181 ether); } } function _setPrice( uint256 costSubCol0, uint256 costSubCol1, uint256 costSubCol2, uint256 costSubCol3 ) internal { cost[0] = costSubCol0; cost[1] = costSubCol1; cost[2] = costSubCol2; cost[3] = costSubCol3; } function setPrice( uint256 galaxyCost_, uint256 nebulaCost_, uint256 superNovaCost_, uint256 hyperRareCost_, uint256 customCost_ ) external onlyOwner { cost[0] = galaxyCost_; cost[1] = nebulaCost_; cost[2] = superNovaCost_; cost[3] = hyperRareCost_; cost[4] = customCost_; } 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), "ER39" ); string[] memory currentBaseURI = _baseURIs(); if (addressUrlType[tokenId] == 4) { return bytes(idUrlCustom[tokenId]).length > 0 ? string(abi.encodePacked(idUrlCustom[tokenId], baseExtension)) : ""; } else { return bytes(currentBaseURI[addressUrlType[tokenId]]).length > 0 ? string(abi.encodePacked(currentBaseURI[addressUrlType[tokenId]], urlToId[tokenId].toString(), baseExtension)) : ""; } } //only owner function togglePaused() external onlyOwner { paused? paused = false: paused = true; } function toggleAutoFloor() external onlyOwner { autoFloor? autoFloor = false: autoFloor = true; } function setBaseURIs(string[] memory _newBaseURIs) public onlyOwner {baseURIs = _newBaseURIs;} function setMaxMintQty(uint16 new_maxMintQty) public onlyOwner {maxMintQty = new_maxMintQty;} function setCustomUrl(uint256 tokenId, string memory newUrl) public onlyOwner {idUrlCustom[tokenId] = newUrl;} function setBaseExtension(string memory _newBaseExtension) public onlyOwner {baseExtension = _newBaseExtension;} // check functions with Revert statements function checkMaxSupply(uint256 afterMintSupply_) internal pure { require(afterMintSupply_ <= MAX_SUPPLY, "ER38"); } function checkSupplyAndReserved(uint8 collectionNumber, uint16 mintQty) internal { address sender = _msgSender(); uint16 holderReserved_ = holderReservedCount[collectionNumber][sender]; uint16 remainingReserved_ = remainingReserved[collectionNumber]; uint16 maxSubCollectionMints_ = maxSubCollectionMints[collectionNumber]; if(holderReserved_ == 0) { require( currentSubCollectionSupply[collectionNumber] + mintQty <= maxSubCollectionMints_ - remainingReserved_, "ER36" ); } else { require( currentSubCollectionSupply[collectionNumber] + mintQty <= maxSubCollectionMints_, "ER37" ); if(mintQty >= holderReserved_) { remainingReserved[collectionNumber] = remainingReserved_ - holderReserved_; holderReservedCount[collectionNumber][sender] = 0; } else { remainingReserved[collectionNumber] = remainingReserved_ - mintQty; holderReservedCount[collectionNumber][sender] = holderReserved_ - mintQty; } } } function checkTxCost(uint256 msgValue, uint256 totalMintCost) internal pure { require(msgValue >= totalMintCost, "ER33"); } function checkMintQty(uint8 mintQty, uint16 maxMintQty_) internal pure { require(mintQty <= maxMintQty_, "ER34"); } function checkPaused() internal view { require(!paused || _msgSender() == owner(), "ER35"); } function distributePayment() internal { uint256 splitA = address(this).balance*15/100; uint256 splitB = address(this).balance*15/100; uint256 splitC = address(this).balance*10/100; uint256 splitD = address(this).balance*29/100; uint256 splitE = address(this).balance*30/100; uint256 splitF = address(this).balance*1/100; Address.sendValue(payable(0xd00f26915108dF339BF9B63Bd34a305052EefffB), splitA); Address.sendValue(payable(0x1fF99B8Ba496DCa54Dcf2dC923445B889cc08800), splitB); Address.sendValue(payable(0xcd00e0cA451967560cD492d4f7e35DCdc4B8D08f), splitC); Address.sendValue(payable(0x9DCc8aac81d41FCB1e94461C55Ad23DC74b4b8FC), splitD); Address.sendValue(payable(0xa1Dc531aA00F24665d06Ee7d3614C502c08DD964), splitE); Address.sendValue(payable(0xf1a455e6b5BA2303E37b81B258AF9D0110bCd700), splitF); } function sendResalePayments() internal { uint256 splitA = address(this).balance*1/100; uint256 splitB = address(this).balance*495/1000; uint256 splitC = address(this).balance*495/1000; Address.sendValue(payable(0xf1a455e6b5BA2303E37b81B258AF9D0110bCd700), splitA); Address.sendValue(payable(0xd00f26915108dF339BF9B63Bd34a305052EefffB), splitB); Address.sendValue(payable(0xa1Dc531aA00F24665d06Ee7d3614C502c08DD964), splitC); } fallback() external payable { sendResalePayments(); } receive() external payable { sendResalePayments(); } } /** ["ipfs://0.","ipfs://1.","ipfs://2.","ipfs://3.","ipfs://Custom"] ["0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2", "0xCA35b7d915458EF540aDe6068dFe2F44E8fa733c"] ["0x4B20993Bc481177ec7E8f571ceCaE8A9e22C02db"]["0x5B38Da6a701c568545dCfcB03FcB875f56beddC4"] "0x7b96aF9Bd211cBf6BA5b0dd53aa61Dc5806b6AcE" */
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":"_initBaseURIs","type":"string[]"},{"internalType":"string","name":"_placeHolderURL","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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_baseURIs","outputs":[{"internalType":"string[]","name":"","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"addressUrlType","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"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":[],"name":"autoFloor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"baseURIs","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addr","type":"address[]"},{"internalType":"uint8[]","name":"count","type":"uint8[]"}],"name":"batchAddCustomMintables","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addr","type":"address[]"},{"internalType":"uint8[]","name":"count","type":"uint8[]"},{"internalType":"uint8[]","name":"collectionNumber","type":"uint8[]"}],"name":"batchAddGiveAwayAllowance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addr","type":"address[]"},{"internalType":"uint8[]","name":"count","type":"uint8[]"},{"internalType":"uint8[]","name":"collectionNumber","type":"uint8[]"}],"name":"batchAddHolderReservedCount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"currentSubCollectionSupply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"customMintables","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"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":"uint8","name":"subCollection","type":"uint8"},{"internalType":"uint8","name":"mintQty","type":"uint8"}],"name":"getTxCost","outputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"address","name":"","type":"address"}],"name":"giveAwayAllowance","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"address","name":"","type":"address"}],"name":"holderReservedCount","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"idUrlCustom","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintQty","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"maxSubCollectionMints","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintCustom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint8","name":"mintQty","type":"uint8"}],"name":"mintGalaxy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint8","name":"mintQty","type":"uint8"}],"name":"mintHyperRare","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint8","name":"mintQty","type":"uint8"}],"name":"mintNebula","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint8","name":"mintQty","type":"uint8"}],"name":"mintSuperNova","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"placeHolderURL","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"remainingReserved","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[]","name":"_newBaseURIs","type":"string[]"}],"name":"setBaseURIs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"newUrl","type":"string"}],"name":"setCustomUrl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"new_maxMintQty","type":"uint16"}],"name":"setMaxMintQty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"galaxyCost_","type":"uint256"},{"internalType":"uint256","name":"nebulaCost_","type":"uint256"},{"internalType":"uint256","name":"superNovaCost_","type":"uint256"},{"internalType":"uint256","name":"hyperRareCost_","type":"uint256"},{"internalType":"uint256","name":"customCost_","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleAutoFloor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"urlToId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
600a805463ffffffff60a01b19166240400f60a21b17905560c06040526005608081905264173539b7b760d91b60a09081526200004091600b919062000350565b503480156200004e57600080fd5b50604051620052233803806200522383398101604081905262000071916200054e565b8351849084906200008a90600090602085019062000350565b508051620000a090600190602084019062000350565b505050620000bd620000b76200029c60201b60201c565b620002a0565b620000c882620002f2565b8051620000dd90600c90602084019062000350565b505066470de4df8200007ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec375555050666a94d74f4300007f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f88f5550668e1bc9bf0400007fa74ba3945261e09fde15ba3db55005b205e61eeb4ad811ac0faa2b315bffeead5566b1a2bc2ec500007f45f76dafbbad695564362934e24d72eedc57f9fc1a65f39bca62176cc82968285560007f367ccd2d0ac16bf7110a5dffe0801fdc9452a95a1adb7e1a12fe97dd3e9a4edd81905560106020527f6e0956cda88cad152e89927e53611735b61a5c762d1428573c6931b0a5efcb01805461ffff19908116611644179091557f8c6065603763fec3f5742441d3833f3f43b982453612d76adb39a885e3006b5f805482166109c41790557f853b2fefe141400fef543280f93d98bd49996069f632d0d20236afeeed8e46a2805482166105aa1790557fb3edd0d534d647cffdae9f1294f11ad21f3fcf2814bea44c92bbb8d384a57d9e80548216609617905560049091527f1588ac671d87f82adc0e6ae8ab009c0de98f92a20243897597e566bc59b9c126805490911660c81790556200071e565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600a546001600160a01b03163314620003375760405162461bcd60e51b815260206004820152600360248201526204552360ec1b604482015260640160405180910390fd5b80516200034c90600d906020840190620003df565b5050565b8280546200035e90620006cb565b90600052602060002090601f016020900481019282620003825760008555620003cd565b82601f106200039d57805160ff1916838001178555620003cd565b82800160010185558215620003cd579182015b82811115620003cd578251825591602001919060010190620003b0565b50620003db9291506200043f565b5090565b82805482825590600052602060002090810192821562000431579160200282015b828111156200043157825180516200042091849160209091019062000350565b509160200191906001019062000400565b50620003db92915062000456565b5b80821115620003db576000815560010162000440565b80821115620003db5760006200046d828262000477565b5060010162000456565b5080546200048590620006cb565b6000825580601f1062000496575050565b601f016020900490600052602060002090810190620004b691906200043f565b50565b600082601f830112620004cb57600080fd5b81516001600160401b03811115620004e757620004e762000708565b6020620004fd601f8301601f1916820162000698565b82815285828487010111156200051257600080fd5b60005b838110156200053257858101830151828201840152820162000515565b83811115620005445760008385840101525b5095945050505050565b600080600080608085870312156200056557600080fd5b84516001600160401b03808211156200057d57600080fd5b6200058b88838901620004b9565b9550602091508187015181811115620005a357600080fd5b620005b189828a01620004b9565b955050604087015181811115620005c757600080fd5b8701601f81018913620005d957600080fd5b805182811115620005ee57620005ee62000708565b8060051b620005ff85820162000698565b8281528581019084870183860188018e10156200061b57600080fd5b600093505b848410156200065f578051878111156200063957600080fd5b620006498f8a838a0101620004b9565b8452506001939093019291870191870162000620565b50809850505050505060608701519150808211156200067d57600080fd5b506200068c87828801620004b9565b91505092959194509250565b604051601f8201601f191681016001600160401b0381118282101715620006c357620006c362000708565b604052919050565b600181811c90821680620006e057607f821691505b602082108114156200070257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b614af5806200072e6000396000f3fe6080604052600436106103595760003560e01c806370a08231116101bb578063b87af862116100f7578063d0124af511610095578063e985e9c51161006f578063e985e9c514610a6e578063ee74f03514610ab7578063f2fde38b14610acc578063f45f511214610aec57610368565b8063d0124af514610a1b578063d9c446de14610a3b578063da3ef23f14610a4e57610368565b8063c87b56dd116100d1578063c87b56dd14610997578063cd07a561146109b7578063cd5e9e14146109d9578063cea7149914610a0657610368565b8063b87af8621461092e578063b88d4fde14610962578063c66828621461098257610368565b806391564206116101645780639a637df71161013e5780639a637df71461089d578063a0d8b06e146108bd578063a22cb465146108ee578063b4f47cc41461090e57610368565b8063915642061461082d57806393a7d3191461084d57806395d89b411461088857610368565b80638ce1c736116101955780638ce1c736146107cf5780638da5cb5b146107e25780638fae83ea1461080057610368565b806370a082311461077a578063715018a61461079a578063895ab7bb146107af57610368565b806332cb6b0c116102955780635578900e116102335780635c975abb1161020d5780635c975abb146106e15780636352211e146107165780636890631f1461073657806368ed8ffc1461074957610368565b80635578900e146106a65780635a7426eb146106b95780635b3ebe3c146106d957610368565b806342842e0e1161026f57806342842e0e146105fd578063438b63001461061d5780634afa87501461064a5780634f6ccce71461068657610368565b806332cb6b0c1461058c57806336566f06146105b55780633688236d146105ca57610368565b806310ec73741161030257806323b872dd116102dc57806323b872dd1461050c57806328c7ab461461052c5780632f43f4fb1461054c5780632f745c591461056c57610368565b806310ec73741461049557806312e8f18b146104b557806318160ddd146104f757610368565b80630904a876116103335780630904a876146103ff578063095ea7b31461042d5780630fee97e61461044d57610368565b806301ffc9a71461037057806306fdde03146103a5578063081812fc146103c757610368565b3661036857610366610b1c565b005b610366610b1c565b34801561037c57600080fd5b5061039061038b3660046142e5565b610bd0565b60405190151581526020015b60405180910390f35b3480156103b157600080fd5b506103ba610c2c565b60405161039c91906146d7565b3480156103d357600080fd5b506103e76103e2366004614378565b610cbe565b6040516001600160a01b03909116815260200161039c565b34801561040b57600080fd5b5061041f61041a366004614440565b610d49565b60405190815260200161039c565b34801561043957600080fd5b50610366610448366004614117565b610da4565b34801561045957600080fd5b50610480610468366004614409565b600e6020526000908152604090205463ffffffff1681565b60405163ffffffff909116815260200161039c565b3480156104a157600080fd5b506103666104b0366004614354565b610e89565b3480156104c157600080fd5b506104e56104d0366004613fd5565b60146020526000908152604090205460ff1681565b60405160ff909116815260200161039c565b34801561050357600080fd5b5060085461041f565b34801561051857600080fd5b50610366610527366004614023565b610f16565b34801561053857600080fd5b506103666105473660046141a5565b610f79565b34801561055857600080fd5b506103666105673660046143ce565b610fc4565b34801561057857600080fd5b5061041f610587366004614117565b6110c0565b34801561059857600080fd5b506105a261271081565b60405161ffff909116815260200161039c565b3480156105c157600080fd5b50610366611144565b3480156105d657600080fd5b50600a546105a29074010000000000000000000000000000000000000000900461ffff1681565b34801561060957600080fd5b50610366610618366004614023565b61121b565b34801561062957600080fd5b5061063d610638366004613fd5565b611236565b60405161039c9190614693565b34801561065657600080fd5b506105a2610665366004614424565b601760209081526000928352604080842090915290825290205461ffff1681565b34801561069257600080fd5b5061041f6106a1366004614378565b6112d8565b6103666106b4366004614409565b611358565b3480156106c557600080fd5b506103ba6106d4366004614378565b611363565b6103666113fd565b3480156106ed57600080fd5b50600a546103909077010000000000000000000000000000000000000000000000900460ff1681565b34801561072257600080fd5b506103e7610731366004614378565b611407565b610366610744366004614409565b61146e565b34801561075557600080fd5b506105a2610764366004614409565b60106020526000908152604090205461ffff1681565b34801561078657600080fd5b5061041f610795366004613fd5565b611479565b3480156107a657600080fd5b506103666114ef565b3480156107bb57600080fd5b506103666107ca366004614141565b611539565b6103666107dd366004614409565b611587565b3480156107ee57600080fd5b50600a546001600160a01b03166103e7565b34801561080c57600080fd5b5061041f61081b366004614409565b600f6020526000908152604090205481565b34801561083957600080fd5b506103ba610848366004614378565b611592565b34801561085957600080fd5b506104e5610868366004614424565b601560209081526000928352604080842090915290825290205460ff1681565b34801561089457600080fd5b506103ba6115bd565b3480156108a957600080fd5b506103666108b8366004614391565b6115cc565b3480156108c957600080fd5b506105a26108d8366004614409565b60166020526000908152604090205461ffff1681565b3480156108fa57600080fd5b506103666109093660046140db565b61162b565b34801561091a57600080fd5b5061036661092936600461422d565b611710565b34801561093a57600080fd5b50600a5461039090760100000000000000000000000000000000000000000000900460ff1681565b34801561096e57600080fd5b5061036661097d36600461405f565b611763565b34801561098e57600080fd5b506103ba6117cd565b3480156109a357600080fd5b506103ba6109b2366004614378565b6117da565b3480156109c357600080fd5b506109cc611982565b60405161039c9190614613565b3480156109e557600080fd5b5061041f6109f4366004614378565b60126020526000908152604090205481565b348015610a1257600080fd5b50610366611a5b565b348015610a2757600080fd5b50610366610a363660046141a5565b611b2c565b610366610a49366004614409565b611b77565b348015610a5a57600080fd5b50610366610a6936600461431f565b611b82565b348015610a7a57600080fd5b50610390610a89366004613ff0565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b348015610ac357600080fd5b506103ba611bd5565b348015610ad857600080fd5b50610366610ae7366004613fd5565b611be2565b348015610af857600080fd5b506104e5610b07366004614378565b60116020526000908152604090205460ff1681565b60006064610b2b4760016147ce565b610b3591906147ba565b905060006103e8610b48476101ef6147ce565b610b5291906147ba565b905060006103e8610b65476101ef6147ce565b610b6f91906147ba565b9050610b8f73f1a455e6b5ba2303e37b81b258af9d0110bcd70084611c81565b610bad73d00f26915108df339bf9b63bd34a305052eefffb83611c81565b610bcb73a1dc531aa00f24665d06ee7d3614c502c08dd96482611c81565b505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d63000000000000000000000000000000000000000000000000000000001480610c265750610c2682611d74565b92915050565b606060008054610c3b906148cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610c67906148cf565b8015610cb45780601f10610c8957610100808354040283529160200191610cb4565b820191906000526020600020905b815481529060010190602001808311610c9757829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610d2d5760405162461bcd60e51b8152600401610d249060208082526004908201527f4552313900000000000000000000000000000000000000000000000000000000604082015260600190565b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60ff8281166000908152601560209081526040808320338452909152812054909190811690831611610d7d57506000610c26565b60ff8381166000908152600f6020526040902054610d9d918416906147ce565b9392505050565b6000610daf82611407565b9050806001600160a01b0316836001600160a01b03161415610e155760405162461bcd60e51b8152600401610d249060208082526004908201527f4552313700000000000000000000000000000000000000000000000000000000604082015260600190565b336001600160a01b0382161480610e315750610e318133610a89565b610e7f5760405162461bcd60e51b8152600401610d249060208082526004908201527f4552313800000000000000000000000000000000000000000000000000000000604082015260600190565b610bcb8383611e57565b600a546001600160a01b03163314610ec95760405162461bcd60e51b815260206004820152600360248201526204552360ec1b6044820152606401610d24565b600a805461ffff90921674010000000000000000000000000000000000000000027fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff909216919091179055565b610f203382611edd565b610f6e5760405162461bcd60e51b8152600401610d249060208082526004908201527f4552323100000000000000000000000000000000000000000000000000000000604082015260600190565b610bcb838383611fc1565b600a546001600160a01b03163314610fb95760405162461bcd60e51b815260206004820152600360248201526204552360ec1b6044820152606401610d24565b610bcb83838361216a565b600a546001600160a01b031633146110045760405162461bcd60e51b815260206004820152600360248201526204552360ec1b6044820152606401610d24565b600f6020527ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec375949094557f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f88f929092557fa74ba3945261e09fde15ba3db55005b205e61eeb4ad811ac0faa2b315bffeead557f45f76dafbbad695564362934e24d72eedc57f9fc1a65f39bca62176cc82968285560046000527f367ccd2d0ac16bf7110a5dffe0801fdc9452a95a1adb7e1a12fe97dd3e9a4edd55565b60006110cb83611479565b821061111b5760405162461bcd60e51b8152600401610d249060208082526004908201527f4552333100000000000000000000000000000000000000000000000000000000604082015260600190565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b031633146111845760405162461bcd60e51b815260206004820152600360248201526204552360ec1b6044820152606401610d24565b600a5477010000000000000000000000000000000000000000000000900460ff166111ed57600a80547fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff1677010000000000000000000000000000000000000000000000179055565b600a80547fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff16905560005b50565b610bcb83838360405180602001604052806000815250611763565b6060600061124383611479565b905060008167ffffffffffffffff81111561126057611260614a62565b604051908082528060200260200182016040528015611289578160200160208202803683370190505b50905060005b828110156112d0576112a185826110c0565b8282815181106112b3576112b3614a33565b6020908102919091010152806112c88161493f565b91505061128f565b509392505050565b60006112e360085490565b82106113335760405162461bcd60e51b8152600401610d249060208082526004908201527f4552333200000000000000000000000000000000000000000000000000000000604082015260600190565b6008828154811061134657611346614a33565b90600052602060002001549050919050565b611218600182612302565b6013602052600090815260409020805461137c906148cf565b80601f01602080910402602001604051908101604052809291908181526020018280546113a8906148cf565b80156113f55780601f106113ca576101008083540402835291602001916113f5565b820191906000526020600020905b8154815290600101906020018083116113d857829003601f168201915b505050505081565b611405612440565b565b6000818152600260205260408120546001600160a01b031680610c265760405162461bcd60e51b8152600401610d249060208082526004908201527f4552313500000000000000000000000000000000000000000000000000000000604082015260600190565b611218600282612302565b60006001600160a01b0382166114d35760405162461bcd60e51b8152600401610d249060208082526004908201527f4552313400000000000000000000000000000000000000000000000000000000604082015260600190565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b0316331461152f5760405162461bcd60e51b815260206004820152600360248201526204552360ec1b6044820152606401610d24565b6114056000612627565b600a546001600160a01b031633146115795760405162461bcd60e51b815260206004820152600360248201526204552360ec1b6044820152606401610d24565b6115838282612691565b5050565b611218600082612302565b600d81815481106115a257600080fd5b90600052602060002001600091509050805461137c906148cf565b606060018054610c3b906148cf565b600a546001600160a01b0316331461160c5760405162461bcd60e51b815260206004820152600360248201526204552360ec1b6044820152606401610d24565b60008281526013602090815260409091208251610bcb92840190613c6e565b6001600160a01b0382163314156116865760405162461bcd60e51b8152600401610d249060208082526004908201527f4552323000000000000000000000000000000000000000000000000000000000604082015260600190565b3360008181526005602090815260408083206001600160a01b0387168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a546001600160a01b031633146117505760405162461bcd60e51b815260206004820152600360248201526204552360ec1b6044820152606401610d24565b805161158390600d906020840190613cf2565b61176d3383611edd565b6117bb5760405162461bcd60e51b8152600401610d249060208082526004908201527f4552323200000000000000000000000000000000000000000000000000000000604082015260600190565b6117c78484848461272c565b50505050565b600b805461137c906148cf565b6000818152600260205260409020546060906001600160a01b03166118435760405162461bcd60e51b8152600401610d249060208082526004908201527f4552333900000000000000000000000000000000000000000000000000000000604082015260600190565b600061184d611982565b60008481526011602052604090205490915060ff16600414156118d75760008381526013602052604081208054611883906148cf565b90501161189f5760405180602001604052806000815250610d9d565b60008381526013602090815260409182902091516118c19291600b91016145c2565b6040516020818303038152906040529392505050565b6000838152601160205260408120548251839160ff169081106118fc576118fc614a33565b6020026020010151511161191f5760405180602001604052806000815250610d9d565b6000838152601160205260409020548151829160ff1690811061194457611944614a33565b60200260200101516119686012600086815260200190815260200160002054612791565b600b6040516020016118c193929190614585565b50919050565b6060600d805480602002602001604051908101604052809291908181526020016000905b82821015611a525783829060005260206000200180546119c5906148cf565b80601f01602080910402602001604051908101604052809291908181526020018280546119f1906148cf565b8015611a3e5780601f10611a1357610100808354040283529160200191611a3e565b820191906000526020600020905b815481529060010190602001808311611a2157829003601f168201915b5050505050815260200190600101906119a6565b50505050905090565b600a546001600160a01b03163314611a9b5760405162461bcd60e51b815260206004820152600360248201526204552360ec1b6044820152606401610d24565b600a54760100000000000000000000000000000000000000000000900460ff16611b0257600a80547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16760100000000000000000000000000000000000000000000179055565b600a80547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff169055565b600a546001600160a01b03163314611b6c5760405162461bcd60e51b815260206004820152600360248201526204552360ec1b6044820152606401610d24565b610bcb8383836128c3565b611218600382612302565b600a546001600160a01b03163314611bc25760405162461bcd60e51b815260206004820152600360248201526204552360ec1b6044820152606401610d24565b805161158390600b906020840190613c6e565b600c805461137c906148cf565b600a546001600160a01b03163314611c225760405162461bcd60e51b815260206004820152600360248201526204552360ec1b6044820152606401610d24565b6001600160a01b038116611c785760405162461bcd60e51b815260206004820152600360248201527f45523200000000000000000000000000000000000000000000000000000000006044820152606401610d24565b61121881612627565b80471015611cd15760405162461bcd60e51b815260206004820152600360248201527f45523300000000000000000000000000000000000000000000000000000000006044820152606401610d24565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611d1e576040519150601f19603f3d011682016040523d82523d6000602084013e611d23565b606091505b5050905080610bcb5760405162461bcd60e51b815260206004820152600360248201527f45523400000000000000000000000000000000000000000000000000000000006044820152606401610d24565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd000000000000000000000000000000000000000000000000000000001480611e0757507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80610c2657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610c26565b600081815260046020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091558190611ea482611407565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b0316611f435760405162461bcd60e51b8152600401610d249060208082526004908201527f4552323400000000000000000000000000000000000000000000000000000000604082015260600190565b6000611f4e83611407565b9050806001600160a01b0316846001600160a01b03161480611f895750836001600160a01b0316611f7e84610cbe565b6001600160a01b0316145b80611fb957506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611fd482611407565b6001600160a01b03161461202c5760405162461bcd60e51b8152600401610d249060208082526004908201527f4552323800000000000000000000000000000000000000000000000000000000604082015260600190565b6001600160a01b0382166120845760405162461bcd60e51b8152600401610d249060208082526004908201527f4552323900000000000000000000000000000000000000000000000000000000604082015260600190565b61208f838383612992565b61209a600082611e57565b6001600160a01b03831660009081526003602052604081208054600192906120c390849061482e565b90915550506001600160a01b03821660009081526003602052604081208054600192906120f1908490614783565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60005b83518161ffff1610156117c757828161ffff168151811061219057612190614a33565b602002602001015160ff1660176000848461ffff16815181106121b5576121b5614a33565b602002602001015160ff1660ff1681526020019081526020016000206000868461ffff16815181106121e9576121e9614a33565b6020908102919091018101516001600160a01b0316825281019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff92831617905583518491831690811061224e5761224e614a33565b602002602001015160ff1660166000848461ffff168151811061227357612273614a33565b60209081029190910181015160ff1682528101919091526040016000205461229f919061ffff1661475d565b60166000848461ffff16815181106122b9576122b9614a33565b602002602001015160ff1660ff16815260200190815260200160002060006101000a81548161ffff021916908361ffff16021790555080806122fa9061491d565b91505061216d565b61230a612a4a565b600a5461233490829074010000000000000000000000000000000000000000900461ffff16612acf565b60008160ff1661234360085490565b61234d9190614783565b905061235881612b28565b612365838360ff16612b7c565b600a54760100000000000000000000000000000000000000000000900460ff161561239257612392612e0f565b60ff83811660009081526015602090815260408083203384529091529020548116908316116123ec5760ff83811660009081526015602090815260408083203384529091529020546123e691849116614845565b50612417565b60ff8381166000908152600f6020526040902054612417913491612412918616906147ce565b6134dc565b60005b8260ff168110156117c75761242e8461352e565b806124388161493f565b91505061241a565b612448612a4a565b3360009081526014602052604090205460ff161515806124725750600a546001600160a01b031633145b1561140557600a546001600160a01b0316331461253f57336000908152601460205260408120805460ff16916124a783614894565b825460ff9182166101009390930a9283029190920219909116179055506004600052600f6020527f367ccd2d0ac16bf7110a5dffe0801fdc9452a95a1adb7e1a12fe97dd3e9a4edd5434101561253f5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742066756e647300000000000000000000000000006044820152606401610d24565b600061254a60085490565b612555906001614783565b60046000908152600e6020527fa1d6913cd9e08c872be3e7525cca82e4fc0fc298a783f19022be725b19be685a805492935063ffffffff909216919061259a83614978565b825463ffffffff9182166101009390930a928302919092021990911617905550600081815260116020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660041790556126016125fb3390565b826135f8565b6000818152601360205260409020600c805461261c906148cf565b611583929190613d4b565b600a80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60005b82518161ffff161015610bcb57818161ffff16815181106126b7576126b7614a33565b602002602001015160146000858461ffff16815181106126d9576126d9614a33565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908360ff16021790555080806127249061491d565b915050612694565b612737848484611fc1565b61274384848484613612565b6117c75760405162461bcd60e51b8152600401610d249060208082526004908201527f4552323300000000000000000000000000000000000000000000000000000000604082015260600190565b6060816127d157505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156127fb57806127e58161493f565b91506127f49050600a836147ba565b91506127d5565b60008167ffffffffffffffff81111561281657612816614a62565b6040519080825280601f01601f191660200182016040528015612840576020820181803683370190505b5090505b8415611fb95761285560018361482e565b9150612862600a86614992565b61286d906030614783565b60f81b81838151811061288257612882614a33565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506128bc600a866147ba565b9450612844565b60005b83518161ffff1610156117c757828161ffff16815181106128e9576128e9614a33565b602002602001015160156000848461ffff168151811061290b5761290b614a33565b602002602001015160ff1660ff1681526020019081526020016000206000868461ffff168151811061293f5761293f614a33565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908360ff160217905550808061298a9061491d565b9150506128c6565b6001600160a01b0383166129ed576129e881600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612a10565b816001600160a01b0316836001600160a01b031614612a1057612a1083826137b9565b6001600160a01b038216612a2757610bcb81613856565b826001600160a01b0316826001600160a01b031614610bcb57610bcb8282613905565b600a5477010000000000000000000000000000000000000000000000900460ff161580612a815750600a546001600160a01b031633145b6114055760405162461bcd60e51b8152600401610d249060208082526004908201527f4552333500000000000000000000000000000000000000000000000000000000604082015260600190565b8061ffff168260ff1611156115835760405162461bcd60e51b8152600401610d249060208082526004908201527f4552333400000000000000000000000000000000000000000000000000000000604082015260600190565b6127108111156112185760405162461bcd60e51b8152600401610d249060208082526004908201527f4552333800000000000000000000000000000000000000000000000000000000604082015260600190565b60ff82166000818152601760209081526040808320338085529083528184205494845260168352818420546010909352922054919261ffff90811692918116911682612c5457612bcc828261480b565b60ff87166000908152600e602052604090205461ffff91821691612bf9919088169063ffffffff1661479b565b63ffffffff161115612c4f5760405162461bcd60e51b8152600401610d249060208082526004908201527f4552333600000000000000000000000000000000000000000000000000000000604082015260600190565b612e07565b60ff86166000908152600e602052604090205461ffff80831691612c809188169063ffffffff1661479b565b63ffffffff161115612cd65760405162461bcd60e51b8152600401610d249060208082526004908201527f4552333700000000000000000000000000000000000000000000000000000000604082015260600190565b8261ffff168561ffff1610612d5857612cef838361480b565b60ff87166000908152601660209081526040808320805461ffff959095167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000958616179055601782528083206001600160a01b0389168452909152902080549091169055612e07565b612d62858361480b565b60ff8716600090815260166020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff92909216919091179055612daf858461480b565b60ff871660009081526017602090815260408083206001600160a01b0389168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff929092169190911790555b505050505050565b6000612e1a60085490565b90506103e8811115612edb57600f602052664e28e2290f00007ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec3755566753d533d9680007f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f88f55669c51c4521e00007fa74ba3945261e09fde15ba3db55005b205e61eeb4ad811ac0faa2b315bffeead55600360005266c3663566a580007f45f76dafbbad695564362934e24d72eedc57f9fc1a65f39bca62176cc82968285550565b6107d0811115612f9a57600f6020526655f9c5939080007ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec375556680f6a85d58c0007f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f88f5566abf38b272100007fa74ba3945261e09fde15ba3db55005b205e61eeb4ad811ac0faa2b315bffeead55600360005266d6f06df0e940007f45f76dafbbad695564362934e24d72eedc57f9fc1a65f39bca62176cc82968285550565b610bb881111561305957600f602052665e808f1f0680007ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec37555668dc0d6ae89c0007f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f88f5566bd011e3e0d00007fa74ba3945261e09fde15ba3db55005b205e61eeb4ad811ac0faa2b315bffeead55600360005266ec9c58de0a80007f45f76dafbbad695564362934e24d72eedc57f9fc1a65f39bca62176cc82968285550565b610fa081111561311957600f60205266681831dbeb40007ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec37555669bf6d141a3c0007f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f88f5566cfd570a75c40007fa74ba3945261e09fde15ba3db55005b205e61eeb4ad811ac0faa2b315bffeead55600360005267010469f62e0940007f45f76dafbbad695564362934e24d72eedc57f9fc1a65f39bca62176cc82968285550565b6113888111156131d957600f602052667265bab9c480007ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec3755566ab989816a6c0007f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f88f5566e4cb75738900007fa74ba3945261e09fde15ba3db55005b205e61eeb4ad811ac0faa2b315bffeead55600360005267011e5945e0e580007f45f76dafbbad695564362934e24d72eedc57f9fc1a65f39bca62176cc82968285550565b61177081111561329957600f602052667dc41cc90c80007ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec3755566bca62b2d92c0007f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f88f5566fb8839921900007fa74ba3945261e09fde15ba3db55005b205e61eeb4ad811ac0faa2b315bffeead55600360005267013b202e1793c0007f45f76dafbbad695564362934e24d72eedc57f9fc1a65f39bca62176cc82968285550565b611b5881111561335a57600f602052668a335809c340007ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec3755566cf7a7d96e200007f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f88f55670114c1a32400c0007fa74ba3945261e09fde15ba3db55005b205e61eeb4ad811ac0faa2b315bffeead55600360005267015abeaed21400007f45f76dafbbad695564362934e24d72eedc57f9fc1a65f39bca62176cc82968285550565b611f4081111561341b57600f60205266980e5f8c6300007ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec3755566e4158f529480007f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f88f5567013077b2294040007fa74ba3945261e09fde15ba3db55005b205e61eeb4ad811ac0faa2b315bffeead55600360005267017d8fbb20e080007f45f76dafbbad695564362934e24d72eedc57f9fc1a65f39bca62176cc82968285550565b611f4081111561121857600f60205266a7553350ebc0007ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec3755566fad253712480007f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f88f5567014f0559b251c0007fa74ba3945261e09fde15ba3db55005b205e61eeb4ad811ac0faa2b315bffeead5560036000526701a3935303f940007f45f76dafbbad695564362934e24d72eedc57f9fc1a65f39bca62176cc82968285550565b808210156115835760405162461bcd60e51b8152600401610d249060208082526004908201527f4552333300000000000000000000000000000000000000000000000000000000604082015260600190565b600061353960085490565b613544906001614783565b600081815260116020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff88169081179091558352600e9091528120805492935063ffffffff90921691906135a483614978565b82546101009290920a63ffffffff81810219909316918316021790915560ff84166000908152600e6020908152604080832054868452601290925290912091169055506135f0336125fb565b611583613949565b611583828260405180602001604052806000815250613a9f565b60006001600160a01b0384163b156137ae576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a029061366f9033908990889088906004016145d7565b602060405180830381600087803b15801561368957600080fd5b505af19250505080156136d7575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526136d491810190614302565b60015b613763573d808015613705576040519150601f19603f3d011682016040523d82523d6000602084013e61370a565b606091505b50805161375b5760405162461bcd60e51b8152600401610d249060208082526004908201527f4552333000000000000000000000000000000000000000000000000000000000604082015260600190565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050611fb9565b506001949350505050565b600060016137c684611479565b6137d0919061482e565b600083815260076020526040902054909150808214613823576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906138689060019061482e565b6000838152600960205260408120546008805493945090928490811061389057613890614a33565b9060005260206000200154905080600883815481106138b1576138b1614a33565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806138e9576138e9614a04565b6001900381819060005260206000200160009055905550505050565b600061391083611479565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6000606461395847600f6147ce565b61396291906147ba565b90506000606461397347600f6147ce565b61397d91906147ba565b90506000606461398e47600a6147ce565b61399891906147ba565b9050600060646139a947601d6147ce565b6139b391906147ba565b9050600060646139c447601e6147ce565b6139ce91906147ba565b9050600060646139df4760016147ce565b6139e991906147ba565b9050613a0973d00f26915108df339bf9b63bd34a305052eefffb87611c81565b613a27731ff99b8ba496dca54dcf2dc923445b889cc0880086611c81565b613a4573cd00e0ca451967560cd492d4f7e35dcdc4b8d08f85611c81565b613a63739dcc8aac81d41fcb1e94461c55ad23dc74b4b8fc84611c81565b613a8173a1dc531aa00f24665d06ee7d3614c502c08dd96483611c81565b612e0773f1a455e6b5ba2303e37b81b258af9d0110bcd70082611c81565b613aa98383613b04565b613ab66000848484613612565b610bcb5760405162461bcd60e51b8152600401610d249060208082526004908201527f4552323500000000000000000000000000000000000000000000000000000000604082015260600190565b6001600160a01b038216613b5c5760405162461bcd60e51b8152600401610d249060208082526004908201527f4552323600000000000000000000000000000000000000000000000000000000604082015260600190565b6000818152600260205260409020546001600160a01b031615613bc35760405162461bcd60e51b8152600401610d249060208082526004908201527f4552323700000000000000000000000000000000000000000000000000000000604082015260600190565b613bcf60008383612992565b6001600160a01b0382166000908152600360205260408120805460019290613bf8908490614783565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054613c7a906148cf565b90600052602060002090601f016020900481019282613c9c5760008555613ce2565b82601f10613cb557805160ff1916838001178555613ce2565b82800160010185558215613ce2579182015b82811115613ce2578251825591602001919060010190613cc7565b50613cee929150613dc6565b5090565b828054828255906000526020600020908101928215613d3f579160200282015b82811115613d3f5782518051613d2f918491602090910190613c6e565b5091602001919060010190613d12565b50613cee929150613ddb565b828054613d57906148cf565b90600052602060002090601f016020900481019282613d795760008555613ce2565b82601f10613d8a5780548555613ce2565b82800160010185558215613ce257600052602060002091601f016020900482015b82811115613ce2578254825591600101919060010190613dab565b5b80821115613cee5760008155600101613dc7565b80821115613cee576000613def8282613df8565b50600101613ddb565b508054613e04906148cf565b6000825580601f10613e14575050565b601f0160209004906000526020600020908101906112189190613dc6565b600067ffffffffffffffff831115613e4c57613e4c614a62565b613e7d60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116016146ea565b9050828152838383011115613e9157600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b0381168114613ebf57600080fd5b919050565b600082601f830112613ed557600080fd5b81356020613eea613ee583614739565b6146ea565b80838252828201915082860187848660051b8901011115613f0a57600080fd5b60005b85811015613f3057613f1e82613ea8565b84529284019290840190600101613f0d565b5090979650505050505050565b600082601f830112613f4e57600080fd5b81356020613f5e613ee583614739565b80838252828201915082860187848660051b8901011115613f7e57600080fd5b60005b85811015613f3057613f9282613fc4565b84529284019290840190600101613f81565b600082601f830112613fb557600080fd5b610d9d83833560208501613e32565b803560ff81168114613ebf57600080fd5b600060208284031215613fe757600080fd5b610d9d82613ea8565b6000806040838503121561400357600080fd5b61400c83613ea8565b915061401a60208401613ea8565b90509250929050565b60008060006060848603121561403857600080fd5b61404184613ea8565b925061404f60208501613ea8565b9150604084013590509250925092565b6000806000806080858703121561407557600080fd5b61407e85613ea8565b935061408c60208601613ea8565b925060408501359150606085013567ffffffffffffffff8111156140af57600080fd5b8501601f810187136140c057600080fd5b6140cf87823560208401613e32565b91505092959194509250565b600080604083850312156140ee57600080fd5b6140f783613ea8565b91506020830135801515811461410c57600080fd5b809150509250929050565b6000806040838503121561412a57600080fd5b61413383613ea8565b946020939093013593505050565b6000806040838503121561415457600080fd5b823567ffffffffffffffff8082111561416c57600080fd5b61417886838701613ec4565b9350602085013591508082111561418e57600080fd5b5061419b85828601613f3d565b9150509250929050565b6000806000606084860312156141ba57600080fd5b833567ffffffffffffffff808211156141d257600080fd5b6141de87838801613ec4565b945060208601359150808211156141f457600080fd5b61420087838801613f3d565b9350604086013591508082111561421657600080fd5b5061422386828701613f3d565b9150509250925092565b6000602080838503121561424057600080fd5b823567ffffffffffffffff8082111561425857600080fd5b818501915085601f83011261426c57600080fd5b813561427a613ee582614739565b80828252858201915085850189878560051b880101111561429a57600080fd5b6000805b858110156142d5578235878111156142b4578283fd5b6142c28d8b838c0101613fa4565b865250938801939188019160010161429e565b50919a9950505050505050505050565b6000602082840312156142f757600080fd5b8135610d9d81614a91565b60006020828403121561431457600080fd5b8151610d9d81614a91565b60006020828403121561433157600080fd5b813567ffffffffffffffff81111561434857600080fd5b611fb984828501613fa4565b60006020828403121561436657600080fd5b813561ffff81168114610d9d57600080fd5b60006020828403121561438a57600080fd5b5035919050565b600080604083850312156143a457600080fd5b82359150602083013567ffffffffffffffff8111156143c257600080fd5b61419b85828601613fa4565b600080600080600060a086880312156143e657600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60006020828403121561441b57600080fd5b610d9d82613fc4565b6000806040838503121561443757600080fd5b61400c83613fc4565b6000806040838503121561445357600080fd5b61445c83613fc4565b915061401a60208401613fc4565b60008151808452614482816020860160208601614868565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8054600090600181811c90808316806144ce57607f831692505b6020808410821415614509577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b81801561451d576001811461454c57614579565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00861689528489019650614579565b60008881526020902060005b868110156145715781548b820152908501908301614558565b505084890196505b50505050505092915050565b60008451614597818460208901614868565b8451908301906145ab818360208901614868565b6145b7818301866144b4565b979650505050505050565b6000611fb96145d183866144b4565b846144b4565b60006001600160a01b03808716835280861660208401525083604083015260806060830152614609608083018461446a565b9695505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015614686577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261467485835161446a565b9450928501929085019060010161463a565b5092979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156146cb578351835292840192918401916001016146af565b50909695505050505050565b602081526000610d9d602083018461446a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561473157614731614a62565b604052919050565b600067ffffffffffffffff82111561475357614753614a62565b5060051b60200190565b600061ffff80831681851680830382111561477a5761477a6149a6565b01949350505050565b60008219821115614796576147966149a6565b500190565b600063ffffffff80831681851680830382111561477a5761477a6149a6565b6000826147c9576147c96149d5565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614806576148066149a6565b500290565b600061ffff83811690831681811015614826576148266149a6565b039392505050565b600082821015614840576148406149a6565b500390565b600060ff821660ff84168082101561485f5761485f6149a6565b90039392505050565b60005b8381101561488357818101518382015260200161486b565b838111156117c75750506000910152565b600060ff8216806148a7576148a76149a6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b600181811c908216806148e357607f821691505b6020821081141561197c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600061ffff80831681811415614935576149356149a6565b6001019392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614971576149716149a6565b5060010190565b600063ffffffff80831681811415614935576149356149a6565b6000826149a1576149a16149d5565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7fffffffff000000000000000000000000000000000000000000000000000000008116811461121857600080fdfea26469706673582212201cb6b507cf47f8a4efce195f5439899a20a05c0984df8d42df1fb00c117e987564736f6c63430008070033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000009784d61727469616e7300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006784d204e46540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d6344524d6f31713973633642506a386864723933683754663467585475346b39316f57485035364d5a6342532f000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d617163486b63767351565a51705742744e776f6a667a4c3777327a377674433332357636464e5a34523638552f000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d58424643316b5754754c676f69723342564b4e66327a6872725a457871535646626b5537397275734e5172522f000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d6258353734774152456f726665585a535850364c58754a6f6d48555541674669686970624a7658743265564c2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000e697066733a2f2f437573746f6d2f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d537a4b324642334858364c664e417450436a4b576e68554e5046487869636a7077754334364568435641645a2f00000000000000000000
Deployed Bytecode
0x6080604052600436106103595760003560e01c806370a08231116101bb578063b87af862116100f7578063d0124af511610095578063e985e9c51161006f578063e985e9c514610a6e578063ee74f03514610ab7578063f2fde38b14610acc578063f45f511214610aec57610368565b8063d0124af514610a1b578063d9c446de14610a3b578063da3ef23f14610a4e57610368565b8063c87b56dd116100d1578063c87b56dd14610997578063cd07a561146109b7578063cd5e9e14146109d9578063cea7149914610a0657610368565b8063b87af8621461092e578063b88d4fde14610962578063c66828621461098257610368565b806391564206116101645780639a637df71161013e5780639a637df71461089d578063a0d8b06e146108bd578063a22cb465146108ee578063b4f47cc41461090e57610368565b8063915642061461082d57806393a7d3191461084d57806395d89b411461088857610368565b80638ce1c736116101955780638ce1c736146107cf5780638da5cb5b146107e25780638fae83ea1461080057610368565b806370a082311461077a578063715018a61461079a578063895ab7bb146107af57610368565b806332cb6b0c116102955780635578900e116102335780635c975abb1161020d5780635c975abb146106e15780636352211e146107165780636890631f1461073657806368ed8ffc1461074957610368565b80635578900e146106a65780635a7426eb146106b95780635b3ebe3c146106d957610368565b806342842e0e1161026f57806342842e0e146105fd578063438b63001461061d5780634afa87501461064a5780634f6ccce71461068657610368565b806332cb6b0c1461058c57806336566f06146105b55780633688236d146105ca57610368565b806310ec73741161030257806323b872dd116102dc57806323b872dd1461050c57806328c7ab461461052c5780632f43f4fb1461054c5780632f745c591461056c57610368565b806310ec73741461049557806312e8f18b146104b557806318160ddd146104f757610368565b80630904a876116103335780630904a876146103ff578063095ea7b31461042d5780630fee97e61461044d57610368565b806301ffc9a71461037057806306fdde03146103a5578063081812fc146103c757610368565b3661036857610366610b1c565b005b610366610b1c565b34801561037c57600080fd5b5061039061038b3660046142e5565b610bd0565b60405190151581526020015b60405180910390f35b3480156103b157600080fd5b506103ba610c2c565b60405161039c91906146d7565b3480156103d357600080fd5b506103e76103e2366004614378565b610cbe565b6040516001600160a01b03909116815260200161039c565b34801561040b57600080fd5b5061041f61041a366004614440565b610d49565b60405190815260200161039c565b34801561043957600080fd5b50610366610448366004614117565b610da4565b34801561045957600080fd5b50610480610468366004614409565b600e6020526000908152604090205463ffffffff1681565b60405163ffffffff909116815260200161039c565b3480156104a157600080fd5b506103666104b0366004614354565b610e89565b3480156104c157600080fd5b506104e56104d0366004613fd5565b60146020526000908152604090205460ff1681565b60405160ff909116815260200161039c565b34801561050357600080fd5b5060085461041f565b34801561051857600080fd5b50610366610527366004614023565b610f16565b34801561053857600080fd5b506103666105473660046141a5565b610f79565b34801561055857600080fd5b506103666105673660046143ce565b610fc4565b34801561057857600080fd5b5061041f610587366004614117565b6110c0565b34801561059857600080fd5b506105a261271081565b60405161ffff909116815260200161039c565b3480156105c157600080fd5b50610366611144565b3480156105d657600080fd5b50600a546105a29074010000000000000000000000000000000000000000900461ffff1681565b34801561060957600080fd5b50610366610618366004614023565b61121b565b34801561062957600080fd5b5061063d610638366004613fd5565b611236565b60405161039c9190614693565b34801561065657600080fd5b506105a2610665366004614424565b601760209081526000928352604080842090915290825290205461ffff1681565b34801561069257600080fd5b5061041f6106a1366004614378565b6112d8565b6103666106b4366004614409565b611358565b3480156106c557600080fd5b506103ba6106d4366004614378565b611363565b6103666113fd565b3480156106ed57600080fd5b50600a546103909077010000000000000000000000000000000000000000000000900460ff1681565b34801561072257600080fd5b506103e7610731366004614378565b611407565b610366610744366004614409565b61146e565b34801561075557600080fd5b506105a2610764366004614409565b60106020526000908152604090205461ffff1681565b34801561078657600080fd5b5061041f610795366004613fd5565b611479565b3480156107a657600080fd5b506103666114ef565b3480156107bb57600080fd5b506103666107ca366004614141565b611539565b6103666107dd366004614409565b611587565b3480156107ee57600080fd5b50600a546001600160a01b03166103e7565b34801561080c57600080fd5b5061041f61081b366004614409565b600f6020526000908152604090205481565b34801561083957600080fd5b506103ba610848366004614378565b611592565b34801561085957600080fd5b506104e5610868366004614424565b601560209081526000928352604080842090915290825290205460ff1681565b34801561089457600080fd5b506103ba6115bd565b3480156108a957600080fd5b506103666108b8366004614391565b6115cc565b3480156108c957600080fd5b506105a26108d8366004614409565b60166020526000908152604090205461ffff1681565b3480156108fa57600080fd5b506103666109093660046140db565b61162b565b34801561091a57600080fd5b5061036661092936600461422d565b611710565b34801561093a57600080fd5b50600a5461039090760100000000000000000000000000000000000000000000900460ff1681565b34801561096e57600080fd5b5061036661097d36600461405f565b611763565b34801561098e57600080fd5b506103ba6117cd565b3480156109a357600080fd5b506103ba6109b2366004614378565b6117da565b3480156109c357600080fd5b506109cc611982565b60405161039c9190614613565b3480156109e557600080fd5b5061041f6109f4366004614378565b60126020526000908152604090205481565b348015610a1257600080fd5b50610366611a5b565b348015610a2757600080fd5b50610366610a363660046141a5565b611b2c565b610366610a49366004614409565b611b77565b348015610a5a57600080fd5b50610366610a6936600461431f565b611b82565b348015610a7a57600080fd5b50610390610a89366004613ff0565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b348015610ac357600080fd5b506103ba611bd5565b348015610ad857600080fd5b50610366610ae7366004613fd5565b611be2565b348015610af857600080fd5b506104e5610b07366004614378565b60116020526000908152604090205460ff1681565b60006064610b2b4760016147ce565b610b3591906147ba565b905060006103e8610b48476101ef6147ce565b610b5291906147ba565b905060006103e8610b65476101ef6147ce565b610b6f91906147ba565b9050610b8f73f1a455e6b5ba2303e37b81b258af9d0110bcd70084611c81565b610bad73d00f26915108df339bf9b63bd34a305052eefffb83611c81565b610bcb73a1dc531aa00f24665d06ee7d3614c502c08dd96482611c81565b505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d63000000000000000000000000000000000000000000000000000000001480610c265750610c2682611d74565b92915050565b606060008054610c3b906148cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610c67906148cf565b8015610cb45780601f10610c8957610100808354040283529160200191610cb4565b820191906000526020600020905b815481529060010190602001808311610c9757829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610d2d5760405162461bcd60e51b8152600401610d249060208082526004908201527f4552313900000000000000000000000000000000000000000000000000000000604082015260600190565b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60ff8281166000908152601560209081526040808320338452909152812054909190811690831611610d7d57506000610c26565b60ff8381166000908152600f6020526040902054610d9d918416906147ce565b9392505050565b6000610daf82611407565b9050806001600160a01b0316836001600160a01b03161415610e155760405162461bcd60e51b8152600401610d249060208082526004908201527f4552313700000000000000000000000000000000000000000000000000000000604082015260600190565b336001600160a01b0382161480610e315750610e318133610a89565b610e7f5760405162461bcd60e51b8152600401610d249060208082526004908201527f4552313800000000000000000000000000000000000000000000000000000000604082015260600190565b610bcb8383611e57565b600a546001600160a01b03163314610ec95760405162461bcd60e51b815260206004820152600360248201526204552360ec1b6044820152606401610d24565b600a805461ffff90921674010000000000000000000000000000000000000000027fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff909216919091179055565b610f203382611edd565b610f6e5760405162461bcd60e51b8152600401610d249060208082526004908201527f4552323100000000000000000000000000000000000000000000000000000000604082015260600190565b610bcb838383611fc1565b600a546001600160a01b03163314610fb95760405162461bcd60e51b815260206004820152600360248201526204552360ec1b6044820152606401610d24565b610bcb83838361216a565b600a546001600160a01b031633146110045760405162461bcd60e51b815260206004820152600360248201526204552360ec1b6044820152606401610d24565b600f6020527ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec375949094557f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f88f929092557fa74ba3945261e09fde15ba3db55005b205e61eeb4ad811ac0faa2b315bffeead557f45f76dafbbad695564362934e24d72eedc57f9fc1a65f39bca62176cc82968285560046000527f367ccd2d0ac16bf7110a5dffe0801fdc9452a95a1adb7e1a12fe97dd3e9a4edd55565b60006110cb83611479565b821061111b5760405162461bcd60e51b8152600401610d249060208082526004908201527f4552333100000000000000000000000000000000000000000000000000000000604082015260600190565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b031633146111845760405162461bcd60e51b815260206004820152600360248201526204552360ec1b6044820152606401610d24565b600a5477010000000000000000000000000000000000000000000000900460ff166111ed57600a80547fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff1677010000000000000000000000000000000000000000000000179055565b600a80547fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff16905560005b50565b610bcb83838360405180602001604052806000815250611763565b6060600061124383611479565b905060008167ffffffffffffffff81111561126057611260614a62565b604051908082528060200260200182016040528015611289578160200160208202803683370190505b50905060005b828110156112d0576112a185826110c0565b8282815181106112b3576112b3614a33565b6020908102919091010152806112c88161493f565b91505061128f565b509392505050565b60006112e360085490565b82106113335760405162461bcd60e51b8152600401610d249060208082526004908201527f4552333200000000000000000000000000000000000000000000000000000000604082015260600190565b6008828154811061134657611346614a33565b90600052602060002001549050919050565b611218600182612302565b6013602052600090815260409020805461137c906148cf565b80601f01602080910402602001604051908101604052809291908181526020018280546113a8906148cf565b80156113f55780601f106113ca576101008083540402835291602001916113f5565b820191906000526020600020905b8154815290600101906020018083116113d857829003601f168201915b505050505081565b611405612440565b565b6000818152600260205260408120546001600160a01b031680610c265760405162461bcd60e51b8152600401610d249060208082526004908201527f4552313500000000000000000000000000000000000000000000000000000000604082015260600190565b611218600282612302565b60006001600160a01b0382166114d35760405162461bcd60e51b8152600401610d249060208082526004908201527f4552313400000000000000000000000000000000000000000000000000000000604082015260600190565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b0316331461152f5760405162461bcd60e51b815260206004820152600360248201526204552360ec1b6044820152606401610d24565b6114056000612627565b600a546001600160a01b031633146115795760405162461bcd60e51b815260206004820152600360248201526204552360ec1b6044820152606401610d24565b6115838282612691565b5050565b611218600082612302565b600d81815481106115a257600080fd5b90600052602060002001600091509050805461137c906148cf565b606060018054610c3b906148cf565b600a546001600160a01b0316331461160c5760405162461bcd60e51b815260206004820152600360248201526204552360ec1b6044820152606401610d24565b60008281526013602090815260409091208251610bcb92840190613c6e565b6001600160a01b0382163314156116865760405162461bcd60e51b8152600401610d249060208082526004908201527f4552323000000000000000000000000000000000000000000000000000000000604082015260600190565b3360008181526005602090815260408083206001600160a01b0387168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a546001600160a01b031633146117505760405162461bcd60e51b815260206004820152600360248201526204552360ec1b6044820152606401610d24565b805161158390600d906020840190613cf2565b61176d3383611edd565b6117bb5760405162461bcd60e51b8152600401610d249060208082526004908201527f4552323200000000000000000000000000000000000000000000000000000000604082015260600190565b6117c78484848461272c565b50505050565b600b805461137c906148cf565b6000818152600260205260409020546060906001600160a01b03166118435760405162461bcd60e51b8152600401610d249060208082526004908201527f4552333900000000000000000000000000000000000000000000000000000000604082015260600190565b600061184d611982565b60008481526011602052604090205490915060ff16600414156118d75760008381526013602052604081208054611883906148cf565b90501161189f5760405180602001604052806000815250610d9d565b60008381526013602090815260409182902091516118c19291600b91016145c2565b6040516020818303038152906040529392505050565b6000838152601160205260408120548251839160ff169081106118fc576118fc614a33565b6020026020010151511161191f5760405180602001604052806000815250610d9d565b6000838152601160205260409020548151829160ff1690811061194457611944614a33565b60200260200101516119686012600086815260200190815260200160002054612791565b600b6040516020016118c193929190614585565b50919050565b6060600d805480602002602001604051908101604052809291908181526020016000905b82821015611a525783829060005260206000200180546119c5906148cf565b80601f01602080910402602001604051908101604052809291908181526020018280546119f1906148cf565b8015611a3e5780601f10611a1357610100808354040283529160200191611a3e565b820191906000526020600020905b815481529060010190602001808311611a2157829003601f168201915b5050505050815260200190600101906119a6565b50505050905090565b600a546001600160a01b03163314611a9b5760405162461bcd60e51b815260206004820152600360248201526204552360ec1b6044820152606401610d24565b600a54760100000000000000000000000000000000000000000000900460ff16611b0257600a80547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16760100000000000000000000000000000000000000000000179055565b600a80547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff169055565b600a546001600160a01b03163314611b6c5760405162461bcd60e51b815260206004820152600360248201526204552360ec1b6044820152606401610d24565b610bcb8383836128c3565b611218600382612302565b600a546001600160a01b03163314611bc25760405162461bcd60e51b815260206004820152600360248201526204552360ec1b6044820152606401610d24565b805161158390600b906020840190613c6e565b600c805461137c906148cf565b600a546001600160a01b03163314611c225760405162461bcd60e51b815260206004820152600360248201526204552360ec1b6044820152606401610d24565b6001600160a01b038116611c785760405162461bcd60e51b815260206004820152600360248201527f45523200000000000000000000000000000000000000000000000000000000006044820152606401610d24565b61121881612627565b80471015611cd15760405162461bcd60e51b815260206004820152600360248201527f45523300000000000000000000000000000000000000000000000000000000006044820152606401610d24565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611d1e576040519150601f19603f3d011682016040523d82523d6000602084013e611d23565b606091505b5050905080610bcb5760405162461bcd60e51b815260206004820152600360248201527f45523400000000000000000000000000000000000000000000000000000000006044820152606401610d24565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd000000000000000000000000000000000000000000000000000000001480611e0757507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80610c2657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610c26565b600081815260046020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091558190611ea482611407565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b0316611f435760405162461bcd60e51b8152600401610d249060208082526004908201527f4552323400000000000000000000000000000000000000000000000000000000604082015260600190565b6000611f4e83611407565b9050806001600160a01b0316846001600160a01b03161480611f895750836001600160a01b0316611f7e84610cbe565b6001600160a01b0316145b80611fb957506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611fd482611407565b6001600160a01b03161461202c5760405162461bcd60e51b8152600401610d249060208082526004908201527f4552323800000000000000000000000000000000000000000000000000000000604082015260600190565b6001600160a01b0382166120845760405162461bcd60e51b8152600401610d249060208082526004908201527f4552323900000000000000000000000000000000000000000000000000000000604082015260600190565b61208f838383612992565b61209a600082611e57565b6001600160a01b03831660009081526003602052604081208054600192906120c390849061482e565b90915550506001600160a01b03821660009081526003602052604081208054600192906120f1908490614783565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60005b83518161ffff1610156117c757828161ffff168151811061219057612190614a33565b602002602001015160ff1660176000848461ffff16815181106121b5576121b5614a33565b602002602001015160ff1660ff1681526020019081526020016000206000868461ffff16815181106121e9576121e9614a33565b6020908102919091018101516001600160a01b0316825281019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff92831617905583518491831690811061224e5761224e614a33565b602002602001015160ff1660166000848461ffff168151811061227357612273614a33565b60209081029190910181015160ff1682528101919091526040016000205461229f919061ffff1661475d565b60166000848461ffff16815181106122b9576122b9614a33565b602002602001015160ff1660ff16815260200190815260200160002060006101000a81548161ffff021916908361ffff16021790555080806122fa9061491d565b91505061216d565b61230a612a4a565b600a5461233490829074010000000000000000000000000000000000000000900461ffff16612acf565b60008160ff1661234360085490565b61234d9190614783565b905061235881612b28565b612365838360ff16612b7c565b600a54760100000000000000000000000000000000000000000000900460ff161561239257612392612e0f565b60ff83811660009081526015602090815260408083203384529091529020548116908316116123ec5760ff83811660009081526015602090815260408083203384529091529020546123e691849116614845565b50612417565b60ff8381166000908152600f6020526040902054612417913491612412918616906147ce565b6134dc565b60005b8260ff168110156117c75761242e8461352e565b806124388161493f565b91505061241a565b612448612a4a565b3360009081526014602052604090205460ff161515806124725750600a546001600160a01b031633145b1561140557600a546001600160a01b0316331461253f57336000908152601460205260408120805460ff16916124a783614894565b825460ff9182166101009390930a9283029190920219909116179055506004600052600f6020527f367ccd2d0ac16bf7110a5dffe0801fdc9452a95a1adb7e1a12fe97dd3e9a4edd5434101561253f5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742066756e647300000000000000000000000000006044820152606401610d24565b600061254a60085490565b612555906001614783565b60046000908152600e6020527fa1d6913cd9e08c872be3e7525cca82e4fc0fc298a783f19022be725b19be685a805492935063ffffffff909216919061259a83614978565b825463ffffffff9182166101009390930a928302919092021990911617905550600081815260116020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660041790556126016125fb3390565b826135f8565b6000818152601360205260409020600c805461261c906148cf565b611583929190613d4b565b600a80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60005b82518161ffff161015610bcb57818161ffff16815181106126b7576126b7614a33565b602002602001015160146000858461ffff16815181106126d9576126d9614a33565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908360ff16021790555080806127249061491d565b915050612694565b612737848484611fc1565b61274384848484613612565b6117c75760405162461bcd60e51b8152600401610d249060208082526004908201527f4552323300000000000000000000000000000000000000000000000000000000604082015260600190565b6060816127d157505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156127fb57806127e58161493f565b91506127f49050600a836147ba565b91506127d5565b60008167ffffffffffffffff81111561281657612816614a62565b6040519080825280601f01601f191660200182016040528015612840576020820181803683370190505b5090505b8415611fb95761285560018361482e565b9150612862600a86614992565b61286d906030614783565b60f81b81838151811061288257612882614a33565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506128bc600a866147ba565b9450612844565b60005b83518161ffff1610156117c757828161ffff16815181106128e9576128e9614a33565b602002602001015160156000848461ffff168151811061290b5761290b614a33565b602002602001015160ff1660ff1681526020019081526020016000206000868461ffff168151811061293f5761293f614a33565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908360ff160217905550808061298a9061491d565b9150506128c6565b6001600160a01b0383166129ed576129e881600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612a10565b816001600160a01b0316836001600160a01b031614612a1057612a1083826137b9565b6001600160a01b038216612a2757610bcb81613856565b826001600160a01b0316826001600160a01b031614610bcb57610bcb8282613905565b600a5477010000000000000000000000000000000000000000000000900460ff161580612a815750600a546001600160a01b031633145b6114055760405162461bcd60e51b8152600401610d249060208082526004908201527f4552333500000000000000000000000000000000000000000000000000000000604082015260600190565b8061ffff168260ff1611156115835760405162461bcd60e51b8152600401610d249060208082526004908201527f4552333400000000000000000000000000000000000000000000000000000000604082015260600190565b6127108111156112185760405162461bcd60e51b8152600401610d249060208082526004908201527f4552333800000000000000000000000000000000000000000000000000000000604082015260600190565b60ff82166000818152601760209081526040808320338085529083528184205494845260168352818420546010909352922054919261ffff90811692918116911682612c5457612bcc828261480b565b60ff87166000908152600e602052604090205461ffff91821691612bf9919088169063ffffffff1661479b565b63ffffffff161115612c4f5760405162461bcd60e51b8152600401610d249060208082526004908201527f4552333600000000000000000000000000000000000000000000000000000000604082015260600190565b612e07565b60ff86166000908152600e602052604090205461ffff80831691612c809188169063ffffffff1661479b565b63ffffffff161115612cd65760405162461bcd60e51b8152600401610d249060208082526004908201527f4552333700000000000000000000000000000000000000000000000000000000604082015260600190565b8261ffff168561ffff1610612d5857612cef838361480b565b60ff87166000908152601660209081526040808320805461ffff959095167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000958616179055601782528083206001600160a01b0389168452909152902080549091169055612e07565b612d62858361480b565b60ff8716600090815260166020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff92909216919091179055612daf858461480b565b60ff871660009081526017602090815260408083206001600160a01b0389168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff929092169190911790555b505050505050565b6000612e1a60085490565b90506103e8811115612edb57600f602052664e28e2290f00007ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec3755566753d533d9680007f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f88f55669c51c4521e00007fa74ba3945261e09fde15ba3db55005b205e61eeb4ad811ac0faa2b315bffeead55600360005266c3663566a580007f45f76dafbbad695564362934e24d72eedc57f9fc1a65f39bca62176cc82968285550565b6107d0811115612f9a57600f6020526655f9c5939080007ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec375556680f6a85d58c0007f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f88f5566abf38b272100007fa74ba3945261e09fde15ba3db55005b205e61eeb4ad811ac0faa2b315bffeead55600360005266d6f06df0e940007f45f76dafbbad695564362934e24d72eedc57f9fc1a65f39bca62176cc82968285550565b610bb881111561305957600f602052665e808f1f0680007ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec37555668dc0d6ae89c0007f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f88f5566bd011e3e0d00007fa74ba3945261e09fde15ba3db55005b205e61eeb4ad811ac0faa2b315bffeead55600360005266ec9c58de0a80007f45f76dafbbad695564362934e24d72eedc57f9fc1a65f39bca62176cc82968285550565b610fa081111561311957600f60205266681831dbeb40007ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec37555669bf6d141a3c0007f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f88f5566cfd570a75c40007fa74ba3945261e09fde15ba3db55005b205e61eeb4ad811ac0faa2b315bffeead55600360005267010469f62e0940007f45f76dafbbad695564362934e24d72eedc57f9fc1a65f39bca62176cc82968285550565b6113888111156131d957600f602052667265bab9c480007ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec3755566ab989816a6c0007f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f88f5566e4cb75738900007fa74ba3945261e09fde15ba3db55005b205e61eeb4ad811ac0faa2b315bffeead55600360005267011e5945e0e580007f45f76dafbbad695564362934e24d72eedc57f9fc1a65f39bca62176cc82968285550565b61177081111561329957600f602052667dc41cc90c80007ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec3755566bca62b2d92c0007f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f88f5566fb8839921900007fa74ba3945261e09fde15ba3db55005b205e61eeb4ad811ac0faa2b315bffeead55600360005267013b202e1793c0007f45f76dafbbad695564362934e24d72eedc57f9fc1a65f39bca62176cc82968285550565b611b5881111561335a57600f602052668a335809c340007ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec3755566cf7a7d96e200007f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f88f55670114c1a32400c0007fa74ba3945261e09fde15ba3db55005b205e61eeb4ad811ac0faa2b315bffeead55600360005267015abeaed21400007f45f76dafbbad695564362934e24d72eedc57f9fc1a65f39bca62176cc82968285550565b611f4081111561341b57600f60205266980e5f8c6300007ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec3755566e4158f529480007f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f88f5567013077b2294040007fa74ba3945261e09fde15ba3db55005b205e61eeb4ad811ac0faa2b315bffeead55600360005267017d8fbb20e080007f45f76dafbbad695564362934e24d72eedc57f9fc1a65f39bca62176cc82968285550565b611f4081111561121857600f60205266a7553350ebc0007ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec3755566fad253712480007f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f88f5567014f0559b251c0007fa74ba3945261e09fde15ba3db55005b205e61eeb4ad811ac0faa2b315bffeead5560036000526701a3935303f940007f45f76dafbbad695564362934e24d72eedc57f9fc1a65f39bca62176cc82968285550565b808210156115835760405162461bcd60e51b8152600401610d249060208082526004908201527f4552333300000000000000000000000000000000000000000000000000000000604082015260600190565b600061353960085490565b613544906001614783565b600081815260116020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff88169081179091558352600e9091528120805492935063ffffffff90921691906135a483614978565b82546101009290920a63ffffffff81810219909316918316021790915560ff84166000908152600e6020908152604080832054868452601290925290912091169055506135f0336125fb565b611583613949565b611583828260405180602001604052806000815250613a9f565b60006001600160a01b0384163b156137ae576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a029061366f9033908990889088906004016145d7565b602060405180830381600087803b15801561368957600080fd5b505af19250505080156136d7575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526136d491810190614302565b60015b613763573d808015613705576040519150601f19603f3d011682016040523d82523d6000602084013e61370a565b606091505b50805161375b5760405162461bcd60e51b8152600401610d249060208082526004908201527f4552333000000000000000000000000000000000000000000000000000000000604082015260600190565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050611fb9565b506001949350505050565b600060016137c684611479565b6137d0919061482e565b600083815260076020526040902054909150808214613823576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906138689060019061482e565b6000838152600960205260408120546008805493945090928490811061389057613890614a33565b9060005260206000200154905080600883815481106138b1576138b1614a33565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806138e9576138e9614a04565b6001900381819060005260206000200160009055905550505050565b600061391083611479565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6000606461395847600f6147ce565b61396291906147ba565b90506000606461397347600f6147ce565b61397d91906147ba565b90506000606461398e47600a6147ce565b61399891906147ba565b9050600060646139a947601d6147ce565b6139b391906147ba565b9050600060646139c447601e6147ce565b6139ce91906147ba565b9050600060646139df4760016147ce565b6139e991906147ba565b9050613a0973d00f26915108df339bf9b63bd34a305052eefffb87611c81565b613a27731ff99b8ba496dca54dcf2dc923445b889cc0880086611c81565b613a4573cd00e0ca451967560cd492d4f7e35dcdc4b8d08f85611c81565b613a63739dcc8aac81d41fcb1e94461c55ad23dc74b4b8fc84611c81565b613a8173a1dc531aa00f24665d06ee7d3614c502c08dd96483611c81565b612e0773f1a455e6b5ba2303e37b81b258af9d0110bcd70082611c81565b613aa98383613b04565b613ab66000848484613612565b610bcb5760405162461bcd60e51b8152600401610d249060208082526004908201527f4552323500000000000000000000000000000000000000000000000000000000604082015260600190565b6001600160a01b038216613b5c5760405162461bcd60e51b8152600401610d249060208082526004908201527f4552323600000000000000000000000000000000000000000000000000000000604082015260600190565b6000818152600260205260409020546001600160a01b031615613bc35760405162461bcd60e51b8152600401610d249060208082526004908201527f4552323700000000000000000000000000000000000000000000000000000000604082015260600190565b613bcf60008383612992565b6001600160a01b0382166000908152600360205260408120805460019290613bf8908490614783565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054613c7a906148cf565b90600052602060002090601f016020900481019282613c9c5760008555613ce2565b82601f10613cb557805160ff1916838001178555613ce2565b82800160010185558215613ce2579182015b82811115613ce2578251825591602001919060010190613cc7565b50613cee929150613dc6565b5090565b828054828255906000526020600020908101928215613d3f579160200282015b82811115613d3f5782518051613d2f918491602090910190613c6e565b5091602001919060010190613d12565b50613cee929150613ddb565b828054613d57906148cf565b90600052602060002090601f016020900481019282613d795760008555613ce2565b82601f10613d8a5780548555613ce2565b82800160010185558215613ce257600052602060002091601f016020900482015b82811115613ce2578254825591600101919060010190613dab565b5b80821115613cee5760008155600101613dc7565b80821115613cee576000613def8282613df8565b50600101613ddb565b508054613e04906148cf565b6000825580601f10613e14575050565b601f0160209004906000526020600020908101906112189190613dc6565b600067ffffffffffffffff831115613e4c57613e4c614a62565b613e7d60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116016146ea565b9050828152838383011115613e9157600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b0381168114613ebf57600080fd5b919050565b600082601f830112613ed557600080fd5b81356020613eea613ee583614739565b6146ea565b80838252828201915082860187848660051b8901011115613f0a57600080fd5b60005b85811015613f3057613f1e82613ea8565b84529284019290840190600101613f0d565b5090979650505050505050565b600082601f830112613f4e57600080fd5b81356020613f5e613ee583614739565b80838252828201915082860187848660051b8901011115613f7e57600080fd5b60005b85811015613f3057613f9282613fc4565b84529284019290840190600101613f81565b600082601f830112613fb557600080fd5b610d9d83833560208501613e32565b803560ff81168114613ebf57600080fd5b600060208284031215613fe757600080fd5b610d9d82613ea8565b6000806040838503121561400357600080fd5b61400c83613ea8565b915061401a60208401613ea8565b90509250929050565b60008060006060848603121561403857600080fd5b61404184613ea8565b925061404f60208501613ea8565b9150604084013590509250925092565b6000806000806080858703121561407557600080fd5b61407e85613ea8565b935061408c60208601613ea8565b925060408501359150606085013567ffffffffffffffff8111156140af57600080fd5b8501601f810187136140c057600080fd5b6140cf87823560208401613e32565b91505092959194509250565b600080604083850312156140ee57600080fd5b6140f783613ea8565b91506020830135801515811461410c57600080fd5b809150509250929050565b6000806040838503121561412a57600080fd5b61413383613ea8565b946020939093013593505050565b6000806040838503121561415457600080fd5b823567ffffffffffffffff8082111561416c57600080fd5b61417886838701613ec4565b9350602085013591508082111561418e57600080fd5b5061419b85828601613f3d565b9150509250929050565b6000806000606084860312156141ba57600080fd5b833567ffffffffffffffff808211156141d257600080fd5b6141de87838801613ec4565b945060208601359150808211156141f457600080fd5b61420087838801613f3d565b9350604086013591508082111561421657600080fd5b5061422386828701613f3d565b9150509250925092565b6000602080838503121561424057600080fd5b823567ffffffffffffffff8082111561425857600080fd5b818501915085601f83011261426c57600080fd5b813561427a613ee582614739565b80828252858201915085850189878560051b880101111561429a57600080fd5b6000805b858110156142d5578235878111156142b4578283fd5b6142c28d8b838c0101613fa4565b865250938801939188019160010161429e565b50919a9950505050505050505050565b6000602082840312156142f757600080fd5b8135610d9d81614a91565b60006020828403121561431457600080fd5b8151610d9d81614a91565b60006020828403121561433157600080fd5b813567ffffffffffffffff81111561434857600080fd5b611fb984828501613fa4565b60006020828403121561436657600080fd5b813561ffff81168114610d9d57600080fd5b60006020828403121561438a57600080fd5b5035919050565b600080604083850312156143a457600080fd5b82359150602083013567ffffffffffffffff8111156143c257600080fd5b61419b85828601613fa4565b600080600080600060a086880312156143e657600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60006020828403121561441b57600080fd5b610d9d82613fc4565b6000806040838503121561443757600080fd5b61400c83613fc4565b6000806040838503121561445357600080fd5b61445c83613fc4565b915061401a60208401613fc4565b60008151808452614482816020860160208601614868565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8054600090600181811c90808316806144ce57607f831692505b6020808410821415614509577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b81801561451d576001811461454c57614579565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00861689528489019650614579565b60008881526020902060005b868110156145715781548b820152908501908301614558565b505084890196505b50505050505092915050565b60008451614597818460208901614868565b8451908301906145ab818360208901614868565b6145b7818301866144b4565b979650505050505050565b6000611fb96145d183866144b4565b846144b4565b60006001600160a01b03808716835280861660208401525083604083015260806060830152614609608083018461446a565b9695505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015614686577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261467485835161446a565b9450928501929085019060010161463a565b5092979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156146cb578351835292840192918401916001016146af565b50909695505050505050565b602081526000610d9d602083018461446a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561473157614731614a62565b604052919050565b600067ffffffffffffffff82111561475357614753614a62565b5060051b60200190565b600061ffff80831681851680830382111561477a5761477a6149a6565b01949350505050565b60008219821115614796576147966149a6565b500190565b600063ffffffff80831681851680830382111561477a5761477a6149a6565b6000826147c9576147c96149d5565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614806576148066149a6565b500290565b600061ffff83811690831681811015614826576148266149a6565b039392505050565b600082821015614840576148406149a6565b500390565b600060ff821660ff84168082101561485f5761485f6149a6565b90039392505050565b60005b8381101561488357818101518382015260200161486b565b838111156117c75750506000910152565b600060ff8216806148a7576148a76149a6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b600181811c908216806148e357607f821691505b6020821081141561197c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600061ffff80831681811415614935576149356149a6565b6001019392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614971576149716149a6565b5060010190565b600063ffffffff80831681811415614935576149356149a6565b6000826149a1576149a16149d5565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7fffffffff000000000000000000000000000000000000000000000000000000008116811461121857600080fdfea26469706673582212201cb6b507cf47f8a4efce195f5439899a20a05c0984df8d42df1fb00c117e987564736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000009784d61727469616e7300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006784d204e46540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d6344524d6f31713973633642506a386864723933683754663467585475346b39316f57485035364d5a6342532f000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d617163486b63767351565a51705742744e776f6a667a4c3777327a377674433332357636464e5a34523638552f000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d58424643316b5754754c676f69723342564b4e66327a6872725a457871535646626b5537397275734e5172522f000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d6258353734774152456f726665585a535850364c58754a6f6d48555541674669686970624a7658743265564c2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000e697066733a2f2f437573746f6d2f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d537a4b324642334858364c664e417450436a4b576e68554e5046487869636a7077754334364568435641645a2f00000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): xMartians
Arg [1] : _symbol (string): xM NFT
Arg [2] : _initBaseURIs (string[]): ipfs://QmcDRMo1q9sc6BPj8hdr93h7Tf4gXTu4k91oWHP56MZcBS/,ipfs://QmaqcHkcvsQVZQpWBtNwojfzL7w2z7vtC325v6FNZ4R68U/,ipfs://QmXBFC1kWTuLgoir3BVKNf2zhrrZExqSVFbkU79rusNQrR/,ipfs://QmbX574wAREorfeXZSXP6LXuJomHUUAgFihipbJvXt2eVL/,ipfs://Custom/
Arg [3] : _placeHolderURL (string): ipfs://QmSzK2FB3HX6LfNAtPCjKWnhUNPFHxicjpwuC46EhCVAdZ/
-----Encoded View---------------
31 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000380
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [5] : 784d61727469616e730000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [7] : 784d204e46540000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [9] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [12] : 00000000000000000000000000000000000000000000000000000000000001c0
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000220
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [15] : 697066733a2f2f516d6344524d6f31713973633642506a386864723933683754
Arg [16] : 663467585475346b39316f57485035364d5a6342532f00000000000000000000
Arg [17] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [18] : 697066733a2f2f516d617163486b63767351565a51705742744e776f6a667a4c
Arg [19] : 3777327a377674433332357636464e5a34523638552f00000000000000000000
Arg [20] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [21] : 697066733a2f2f516d58424643316b5754754c676f69723342564b4e66327a68
Arg [22] : 72725a457871535646626b5537397275734e5172522f00000000000000000000
Arg [23] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [24] : 697066733a2f2f516d6258353734774152456f726665585a535850364c58754a
Arg [25] : 6f6d48555541674669686970624a7658743265564c2f00000000000000000000
Arg [26] : 000000000000000000000000000000000000000000000000000000000000000e
Arg [27] : 697066733a2f2f437573746f6d2f000000000000000000000000000000000000
Arg [28] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [29] : 697066733a2f2f516d537a4b324642334858364c664e417450436a4b576e6855
Arg [30] : 4e5046487869636a7077754334364568435641645a2f00000000000000000000
Deployed Bytecode Sourcemap
42909:15774:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58657:20;:18;:20::i;:::-;42909:15774;;58599:20;:18;:20::i;36836:224::-;;;;;;;;;;-1:-1:-1;36836:224:0;;;;;:::i;:::-;;:::i;:::-;;;14755:14:1;;14748:22;14730:41;;14718:2;14703:18;36836:224:0;;;;;;;;24536:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;25971:181::-;;;;;;;;;;-1:-1:-1;25971:181:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;12504:55:1;;;12486:74;;12474:2;12459:18;25971:181:0;12340:226:1;50500:275:0;;;;;;;;;;-1:-1:-1;50500:275:0;;;;;:::i;:::-;;:::i;:::-;;;25316:25:1;;;25304:2;25289:18;50500:275:0;25170:177:1;25575:330:0;;;;;;;;;;-1:-1:-1;25575:330:0;;;;;:::i;:::-;;:::i;44425:58::-;;;;;;;;;;-1:-1:-1;44425:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25526:10:1;25514:23;;;25496:42;;25484:2;25469:18;44425:58:0;25352:192:1;55021:93:0;;;;;;;;;;-1:-1:-1;55021:93:0;;;;;:::i;:::-;;:::i;45587:48::-;;;;;;;;;;-1:-1:-1;45587:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25721:4:1;25709:17;;;25691:36;;25679:2;25664:18;45587:48:0;25549:184:1;37437:113:0;;;;;;;;;;-1:-1:-1;37525:10:0;:17;37437:113;;26800:294;;;;;;;;;;-1:-1:-1;26800:294:0;;;;;:::i;:::-;;:::i;47591:433::-;;;;;;;;;;-1:-1:-1;47591:433:0;;;;;:::i;:::-;;:::i;53100:374::-;;;;;;;;;;-1:-1:-1;53100:374:0;;;;;:::i;:::-;;:::i;37144:217::-;;;;;;;;;;-1:-1:-1;37144:217:0;;;;;:::i;:::-;;:::i;43720:42::-;;;;;;;;;;;;43756:6;43720:42;;;;;25151:6:1;25139:19;;;25121:38;;25109:2;25094:18;43720:42:0;24977:188:1;54659:117:0;;;;;;;;;;;;;:::i;43684:29::-;;;;;;;;;;-1:-1:-1;43684:29:0;;;;;;;;;;;27165:185;;;;;;;;;;-1:-1:-1;27165:185:0;;;;;:::i;:::-;;:::i;53486:388::-;;;;;;;;;;-1:-1:-1;53486:388:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;46083:71::-;;;;;;;;;;-1:-1:-1;46083:71:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;37627:193;;;;;;;;;;-1:-1:-1;37627:193:0;;;;;:::i;:::-;;:::i;49321:79::-;;;;;;:::i;:::-;;:::i;45472:45::-;;;;;;;;;;-1:-1:-1;45472:45:0;;;;;:::i;:::-;;:::i;49582:55::-;;;:::i;43804:25::-;;;;;;;;;;-1:-1:-1;43804:25:0;;;;;;;;;;;24267:202;;;;;;;;;;-1:-1:-1;24267:202:0;;;;;:::i;:::-;;:::i;49406:82::-;;;;;;:::i;:::-;;:::i;45309:53::-;;;;;;;;;;-1:-1:-1;45309:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;24035:170;;;;;;;;;;-1:-1:-1;24035:170:0;;;;;:::i;:::-;;:::i;4407:94::-;;;;;;;;;;;;;:::i;46231:356::-;;;;;;;;;;-1:-1:-1;46231:356:0;;;;;:::i;:::-;;:::i;49236:79::-;;;;;;:::i;:::-;;:::i;3785:87::-;;;;;;;;;;-1:-1:-1;3858:6:0;;-1:-1:-1;;;;;3858:6:0;3785:87;;44820:37;;;;;;;;;;-1:-1:-1;44820:37:0;;;;;:::i;:::-;;;;;;;;;;;;;;43917:24;;;;;;;;;;-1:-1:-1;43917:24:0;;;;;:::i;:::-;;:::i;45734:68::-;;;;;;;;;;-1:-1:-1;45734:68:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;24705:104;;;;;;;;;;;;;:::i;55120:111::-;;;;;;;;;;-1:-1:-1;55120:111:0;;;;;:::i;:::-;;:::i;45922:49::-;;;;;;;;;;-1:-1:-1;45922:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26224:274;;;;;;;;;;-1:-1:-1;26224:274:0;;;;;:::i;:::-;;:::i;54921:94::-;;;;;;;;;;-1:-1:-1;54921:94:0;;;;;:::i;:::-;;:::i;43769:28::-;;;;;;;;;;-1:-1:-1;43769:28:0;;;;;;;;;;;27421:283;;;;;;;;;;-1:-1:-1;27421:283:0;;;;;:::i;:::-;;:::i;43838:37::-;;;;;;;;;;;;;:::i;53882:751::-;;;;;;;;;;-1:-1:-1;53882:751:0;;;;;:::i;:::-;;:::i;49127:101::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;45423:42::-;;;;;;;;;;-1:-1:-1;45423:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;54784:129;;;;;;;;;;;;;:::i;46848:422::-;;;;;;;;;;-1:-1:-1;46848:422:0;;;;;:::i;:::-;;:::i;49494:82::-;;;;;;:::i;:::-;;:::i;55237:112::-;;;;;;;;;;-1:-1:-1;55237:112:0;;;;;:::i;:::-;;:::i;26569:164::-;;;;;;;;;;-1:-1:-1;26569:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;26690:25:0;;;26666:4;26690:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;26569:164;43882:28;;;;;;;;;;;;;:::i;4656:157::-;;;;;;;;;;-1:-1:-1;4656:157:0;;;;;:::i;:::-;;:::i;45369:47::-;;;;;;;;;;-1:-1:-1;45369:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;58074:487;58124:14;58165:3;58141:23;:21;58163:1;58141:23;:::i;:::-;:27;;;;:::i;:::-;58124:44;-1:-1:-1;58179:14:0;58222:4;58196:25;:21;58218:3;58196:25;:::i;:::-;:30;;;;:::i;:::-;58179:47;-1:-1:-1;58237:14:0;58280:4;58254:25;:21;58276:3;58254:25;:::i;:::-;:30;;;;:::i;:::-;58237:47;;58297:78;58323:42;58368:6;58297:17;:78::i;:::-;58386;58412:42;58457:6;58386:17;:78::i;:::-;58475;58501:42;58546:6;58475:17;:78::i;:::-;58113:448;;;58074:487::o;36836:224::-;36938:4;36962:50;;;36977:35;36962:50;;:90;;;37016:36;37040:11;37016:23;:36::i;:::-;36955:97;36836:224;-1:-1:-1;;36836:224:0:o;24536:100::-;24590:13;24623:5;24616:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24536:100;:::o;25971:181::-;26047:7;29257:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29257:16:0;26067:33;;;;-1:-1:-1;;;26067:33:0;;;;;;18195:2:1;18177:21;;;18234:1;18214:18;;;18207:29;18272:6;18267:2;18252:18;;18245:34;18311:2;18296:18;;17993:327;26067:33:0;;;;;;;;;-1:-1:-1;26120:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;26120:24:0;;25971:181::o;50500:275::-;50615:32;;;;50576:13;50615:32;;;:17;:32;;;;;;;;2739:10;50615:46;;;;;;;;50576:13;;50615:46;;;50604:57;;;;50601:167;;-1:-1:-1;50684:1:0;50677:8;;50601:167;50726:29;:19;;;;;;;:4;:19;;;;;;:29;;;;;;:::i;:::-;50718:38;50500:275;-1:-1:-1;;;50500:275:0:o;25575:330::-;25656:13;25672:23;25687:7;25672:14;:23::i;:::-;25656:39;;25720:5;-1:-1:-1;;;;;25714:11:0;:2;-1:-1:-1;;;;;25714:11:0;;;25706:28;;;;-1:-1:-1;;;25706:28:0;;;;;;18858:2:1;18840:21;;;18897:1;18877:18;;;18870:29;18935:6;18930:2;18915:18;;18908:34;18974:2;18959:18;;18656:327;25706:28:0;2739:10;-1:-1:-1;;;;;25769:21:0;;;;:62;;-1:-1:-1;25794:37:0;25811:5;2739:10;26569:164;:::i;25794:37::-;25747:116;;;;-1:-1:-1;;;25747:116:0;;;;;;22508:2:1;22490:21;;;22547:1;22527:18;;;22520:29;22585:6;22580:2;22565:18;;22558:34;22624:2;22609:18;;22306:327;25747:116:0;25876:21;25885:2;25889:7;25876:8;:21::i;55021:93::-;3858:6;;-1:-1:-1;;;;;3858:6:0;2739:10;4005:23;3997:39;;;;-1:-1:-1;;;3997:39:0;;16868:2:1;3997:39:0;;;16850:21:1;16907:1;16887:18;;;16880:29;-1:-1:-1;;;16925:18:1;;;16918:33;16968:18;;3997:39:0;16666:326:1;3997:39:0;55085:10:::1;:27:::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;55021:93::o;26800:294::-;26995:41;2739:10;27028:7;26995:18;:41::i;:::-;26987:58;;;;-1:-1:-1;;;26987:58:0;;;;;;17863:2:1;17845:21;;;17902:1;17882:18;;;17875:29;17940:6;17935:2;17920:18;;17913:34;17979:2;17964:18;;17661:327;26987:58:0;27058:28;27068:4;27074:2;27078:7;27058:9;:28::i;47591:433::-;3858:6;;-1:-1:-1;;;;;3858:6:0;2739:10;4005:23;3997:39;;;;-1:-1:-1;;;3997:39:0;;16868:2:1;3997:39:0;;;16850:21:1;16907:1;16887:18;;;16880:29;-1:-1:-1;;;16925:18:1;;;16918:33;16968:18;;3997:39:0;16666:326:1;3997:39:0;47952:64:::1;47988:4;47993:5;47999:16;47952:35;:64::i;53100:374::-:0;3858:6;;-1:-1:-1;;;;;3858:6:0;2739:10;4005:23;3997:39;;;;-1:-1:-1;;;3997:39:0;;16868:2:1;3997:39:0;;;16850:21:1;16907:1;16887:18;;;16880:29;-1:-1:-1;;;16925:18:1;;;16918:33;16968:18;;3997:39:0;16666:326:1;3997:39:0;53311:4:::1;:7;::::0;;:21;;;;53343:7;:21;;;;53375:7;:24;53410:7;:24;53450:1:::1;53311:7;53445::::0;;:21;53100:374::o;37144:217::-;37241:7;37277:23;37294:5;37277:16;:23::i;:::-;37269:5;:31;37261:48;;;;-1:-1:-1;;;37261:48:0;;;;;;23172:2:1;23154:21;;;23211:1;23191:18;;;23184:29;23249:6;23244:2;23229:18;;23222:34;23288:2;23273:18;;22970:327;37261:48:0;-1:-1:-1;;;;;;37327:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;37144:217::o;54659:117::-;3858:6;;-1:-1:-1;;;;;3858:6:0;2739:10;4005:23;3997:39;;;;-1:-1:-1;;;3997:39:0;;16868:2:1;3997:39:0;;;16850:21:1;16907:1;16887:18;;;16880:29;-1:-1:-1;;;16925:18:1;;;16918:33;16968:18;;3997:39:0;16666:326:1;3997:39:0;54713:6:::1;::::0;;;::::1;;;:55;;54755:6;:13:::0;;;::::1;::::0;::::1;::::0;;54659:117::o;54713:55::-:1;54730:6;:14:::0;;;::::1;::::0;;54739:5:::1;54713:55;;54659:117::o:0;27165:185::-;27303:39;27320:4;27326:2;27330:7;27303:39;;;;;;;;;;;;:16;:39::i;53486:388::-;53573:16;53607:23;53633:17;53643:6;53633:9;:17::i;:::-;53607:43;;53661:25;53703:15;53689:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53689:30:0;;53661:58;;53735:9;53730:111;53750:15;53746:1;:19;53730:111;;;53799:30;53819:6;53827:1;53799:19;:30::i;:::-;53785:8;53794:1;53785:11;;;;;;;;:::i;:::-;;;;;;;;;;:44;53767:3;;;;:::i;:::-;;;;53730:111;;;-1:-1:-1;53858:8:0;53486:388;-1:-1:-1;;;53486:388:0:o;37627:193::-;37702:7;37738:30;37525:10;:17;;37437:113;37738:30;37730:5;:38;37722:55;;;;-1:-1:-1;;;37722:55:0;;;;;;19522:2:1;19504:21;;;19561:1;19541:18;;;19534:29;19599:6;19594:2;19579:18;;19572:34;19638:2;19623:18;;19320:327;37722:55:0;37795:10;37806:5;37795:17;;;;;;;;:::i;:::-;;;;;;;;;37788:24;;37627:193;;;:::o;49321:79::-;49373:24;49386:1;49389:7;49373:12;:24::i;45472:45::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49582:55::-;49621:13;:11;:13::i;:::-;49582:55::o;24267:202::-;24339:7;24375:16;;;:7;:16;;;;;;-1:-1:-1;;;;;24375:16:0;24410:19;24402:36;;;;-1:-1:-1;;;24402:36:0;;;;;;21181:2:1;21163:21;;;21220:1;21200:18;;;21193:29;21258:6;21253:2;21238:18;;21231:34;21297:2;21282:18;;20979:327;49406:82:0;49461:24;49474:1;49477:7;49461:12;:24::i;24035:170::-;24107:7;-1:-1:-1;;;;;24135:19:0;;24127:36;;;;-1:-1:-1;;;24127:36:0;;;;;;19190:2:1;19172:21;;;19229:1;19209:18;;;19202:29;19267:6;19262:2;19247:18;;19240:34;19306:2;19291:18;;18988:327;24127:36:0;-1:-1:-1;;;;;;24181:16:0;;;;;:9;:16;;;;;;;24035:170::o;4407:94::-;3858:6;;-1:-1:-1;;;;;3858:6:0;2739:10;4005:23;3997:39;;;;-1:-1:-1;;;3997:39:0;;16868:2:1;3997:39:0;;;16850:21:1;16907:1;16887:18;;;16880:29;-1:-1:-1;;;16925:18:1;;;16918:33;16968:18;;3997:39:0;16666:326:1;3997:39:0;4472:21:::1;4490:1;4472:9;:21::i;46231:356::-:0;3858:6;;-1:-1:-1;;;;;3858:6:0;2739:10;4005:23;3997:39;;;;-1:-1:-1;;;3997:39:0;;16868:2:1;3997:39:0;;;16850:21:1;16907:1;16887:18;;;16880:29;-1:-1:-1;;;16925:18:1;;;16918:33;16968:18;;3997:39:0;16666:326:1;3997:39:0;46535:44:::1;46567:4;46573:5;46535:31;:44::i;:::-;46231:356:::0;;:::o;49236:79::-;49288:24;49301:1;49304:7;49288:12;:24::i;43917:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24705:104::-;24761:13;24794:7;24787:14;;;;;:::i;55120:111::-;3858:6;;-1:-1:-1;;;;;3858:6:0;2739:10;4005:23;3997:39;;;;-1:-1:-1;;;3997:39:0;;16868:2:1;3997:39:0;;;16850:21:1;16907:1;16887:18;;;16880:29;-1:-1:-1;;;16925:18:1;;;16918:33;16968:18;;3997:39:0;16666:326:1;3997:39:0;55200:20:::1;::::0;;;:11:::1;:20;::::0;;;;;;;:29;;::::1;::::0;;::::1;::::0;::::1;:::i;26224:274::-:0;-1:-1:-1;;;;;26327:24:0;;2739:10;26327:24;;26319:41;;;;-1:-1:-1;;;26319:41:0;;;;;;16536:2:1;16518:21;;;16575:1;16555:18;;;16548:29;16613:6;16608:2;16593:18;;16586:34;16652:2;16637:18;;16334:327;26319:41:0;2739:10;26373:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;26373:42:0;;;;;;;;;;;;:53;;;;;;;;;;;;;26442:48;;14730:41:1;;;26373:42:0;;2739:10;26442:48;;14703:18:1;26442:48:0;;;;;;;26224:274;;:::o;54921:94::-;3858:6;;-1:-1:-1;;;;;3858:6:0;2739:10;4005:23;3997:39;;;;-1:-1:-1;;;3997:39:0;;16868:2:1;3997:39:0;;;16850:21:1;16907:1;16887:18;;;16880:29;-1:-1:-1;;;16925:18:1;;;16918:33;16968:18;;3997:39:0;16666:326:1;3997:39:0;54990:23;;::::1;::::0;:8:::1;::::0;:23:::1;::::0;::::1;::::0;::::1;:::i;27421:283::-:0;27596:41;2739:10;27629:7;27596:18;:41::i;:::-;27588:58;;;;-1:-1:-1;;;27588:58:0;;;;;;21513:2:1;21495:21;;;21552:1;21532:18;;;21525:29;21590:6;21585:2;21570:18;;21563:34;21629:2;21614:18;;21311:327;27588:58:0;27657:39;27671:4;27677:2;27681:7;27690:5;27657:13;:39::i;:::-;27421:283;;;;:::o;43838:37::-;;;;;;;:::i;53882:751::-;29233:4;29257:16;;;:7;:16;;;;;;54000:13;;-1:-1:-1;;;;;29257:16:0;54031:70;;;;-1:-1:-1;;;54031:70:0;;;;;;24183:2:1;24165:21;;;24222:1;24202:18;;;24195:29;24260:6;24255:2;24240:18;;24233:34;24299:2;24284:18;;23981:327;54031:70:0;54114:30;54147:11;:9;:11::i;:::-;54173:23;;;;:14;:23;;;;;;54114:44;;-1:-1:-1;54173:23:0;;54200:1;54173:28;54169:457;;;54262:1;54231:20;;;:11;:20;;;;;54225:34;;;;;:::i;:::-;;;:38;:141;;;;;;;;;;;;;;;;;54307:20;;;;:11;:20;;;;;;;;;54290:53;;;;54307:20;54329:13;;54290:53;;:::i;:::-;;;;;;;;;;;;;54218:148;53882:751;-1:-1:-1;;;53882:751:0:o;54169:457::-;54462:1;54427:23;;;:14;:23;;;;;;54412:39;;:14;;54427:23;;;54412:39;;;;;;:::i;:::-;;;;;;;54406:53;:57;:208;;;;;;;;;;;;;;;;;54522:23;;;;:14;:23;;;;;;54507:39;;:14;;54522:23;;;54507:39;;;;;;:::i;:::-;;;;;;;54548:27;:7;:16;54556:7;54548:16;;;;;;;;;;;;:25;:27::i;:::-;54577:13;54490:101;;;;;;;;;;:::i;54169:457::-;54020:613;53882:751;;;:::o;49127:101::-;49177:15;49212:8;49205:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49127:101;:::o;54784:129::-;3858:6;;-1:-1:-1;;;;;3858:6:0;2739:10;4005:23;3997:39;;;;-1:-1:-1;;;3997:39:0;;16868:2:1;3997:39:0;;;16850:21:1;16907:1;16887:18;;;16880:29;-1:-1:-1;;;16925:18:1;;;16918:33;16968:18;;3997:39:0;16666:326:1;3997:39:0;54841:9:::1;::::0;;;::::1;;;:64;;54889:9;:16:::0;;;::::1;::::0;::::1;::::0;;54659:117::o;54841:64::-:1;54861:9;:17:::0;;;::::1;::::0;;54784:129::o;46848:422::-;3858:6;;-1:-1:-1;;;;;3858:6:0;2739:10;4005:23;3997:39;;;;-1:-1:-1;;;3997:39:0;;16868:2:1;3997:39:0;;;16850:21:1;16907:1;16887:18;;;16880:29;-1:-1:-1;;;16925:18:1;;;16918:33;16968:18;;3997:39:0;16666:326:1;3997:39:0;47207:55:::1;47234:4;47239:5;47245:16;47207:26;:55::i;49494:82::-:0;49549:24;49562:1;49565:7;49549:12;:24::i;55237:112::-;3858:6;;-1:-1:-1;;;;;3858:6:0;2739:10;4005:23;3997:39;;;;-1:-1:-1;;;3997:39:0;;16868:2:1;3997:39:0;;;16850:21:1;16907:1;16887:18;;;16880:29;-1:-1:-1;;;16925:18:1;;;16918:33;16968:18;;3997:39:0;16666:326:1;3997:39:0;55314:33;;::::1;::::0;:13:::1;::::0;:33:::1;::::0;::::1;::::0;::::1;:::i;43882:28::-:0;;;;;;;:::i;4656:157::-;3858:6;;-1:-1:-1;;;;;3858:6:0;2739:10;4005:23;3997:39;;;;-1:-1:-1;;;3997:39:0;;16868:2:1;3997:39:0;;;16850:21:1;16907:1;16887:18;;;16880:29;-1:-1:-1;;;16925:18:1;;;16918:33;16968:18;;3997:39:0;16666:326:1;3997:39:0;-1:-1:-1;;;;;4745:22:0;::::1;4737:38;;;::::0;-1:-1:-1;;;4737:38:0;;21845:2:1;4737:38:0::1;::::0;::::1;21827:21:1::0;21884:1;21864:18;;;21857:29;21922:5;21902:18;;;21895:33;21945:18;;4737:38:0::1;21643:326:1::0;4737:38:0::1;4786:19;4796:8;4786:9;:19::i;13951:236::-:0;14066:6;14041:21;:31;;14033:47;;;;-1:-1:-1;;;14033:47:0;;20518:2:1;14033:47:0;;;20500:21:1;20557:1;20537:18;;;20530:29;20595:5;20575:18;;;20568:33;20618:18;;14033:47:0;20316:326:1;14033:47:0;14094:12;14112:9;-1:-1:-1;;;;;14112:14:0;14134:6;14112:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14093:52;;;14164:7;14156:23;;;;-1:-1:-1;;;14156:23:0;;18527:2:1;14156:23:0;;;18509:21:1;18566:1;18546:18;;;18539:29;18604:5;18584:18;;;18577:33;18627:18;;14156:23:0;18325:326:1;23666:305:0;23768:4;23805:40;;;23820:25;23805:40;;:105;;-1:-1:-1;23862:48:0;;;23877:33;23862:48;23805:105;:158;;;-1:-1:-1;22397:25:0;22382:40;;;;23927:36;22273:157;32943:174;33018:24;;;;:15;:24;;;;;:29;;;;-1:-1:-1;;;;;33018:29:0;;;;;;;;:24;;33072:23;33018:24;33072:14;:23::i;:::-;-1:-1:-1;;;;;33063:46:0;;;;;;;;;;;32943:174;;:::o;29462:308::-;29555:4;29257:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29257:16:0;29572:33;;;;-1:-1:-1;;;29572:33:0;;;;;;15208:2:1;15190:21;;;15247:1;15227:18;;;15220:29;15285:6;15280:2;15265:18;;15258:34;15324:2;15309:18;;15006:327;29572:33:0;29616:13;29632:23;29647:7;29632:14;:23::i;:::-;29616:39;;29685:5;-1:-1:-1;;;;;29674:16:0;:7;-1:-1:-1;;;;;29674:16:0;;:51;;;;29718:7;-1:-1:-1;;;;;29694:31:0;:20;29706:7;29694:11;:20::i;:::-;-1:-1:-1;;;;;29694:31:0;;29674:51;:87;;;-1:-1:-1;;;;;;26690:25:0;;;26666:4;26690:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;29729:32;29666:96;29462:308;-1:-1:-1;;;;29462:308:0:o;32316:509::-;32475:4;-1:-1:-1;;;;;32448:31:0;:23;32463:7;32448:14;:23::i;:::-;-1:-1:-1;;;;;32448:31:0;;32440:48;;;;-1:-1:-1;;;32440:48:0;;;;;;15540:2:1;15522:21;;;15579:1;15559:18;;;15552:29;15617:6;15612:2;15597:18;;15590:34;15656:2;15641:18;;15338:327;32440:48:0;-1:-1:-1;;;;;32507:16:0;;32499:33;;;;-1:-1:-1;;;32499:33:0;;;;;;17531:2:1;17513:21;;;17570:1;17550:18;;;17543:29;17608:6;17603:2;17588:18;;17581:34;17647:2;17632:18;;17329:327;32499:33:0;32545:39;32566:4;32572:2;32576:7;32545:20;:39::i;:::-;32649:29;32666:1;32670:7;32649:8;:29::i;:::-;-1:-1:-1;;;;;32691:15:0;;;;;;:9;:15;;;;;:20;;32710:1;;32691:15;:20;;32710:1;;32691:20;:::i;:::-;;;;-1:-1:-1;;;;;;;32722:13:0;;;;;;:9;:13;;;;;:18;;32739:1;;32722:13;:18;;32739:1;;32722:18;:::i;:::-;;;;-1:-1:-1;;32751:16:0;;;;:7;:16;;;;;;:21;;;;-1:-1:-1;;;;;32751:21:0;;;;;;;;;32790:27;;32751:16;;32790:27;;;;;;;32316:509;;;:::o;48036:417::-;48218:8;48213:233;48236:4;:11;48232:1;:15;;;48213:233;;;48321:5;48327:1;48321:8;;;;;;;;;;:::i;:::-;;;;;;;48269:60;;:19;:40;48289:16;48306:1;48289:19;;;;;;;;;;:::i;:::-;;;;;;;48269:40;;;;;;;;;;;;;;;:49;48310:4;48315:1;48310:7;;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;48269:49:0;;;;;;;;;;;-1:-1:-1;48269:49:0;:60;;;;;;;;;;;48426:8;;;;;;;;;;;;;:::i;:::-;;;;;;;48385:49;;:17;:38;48403:16;48420:1;48403:19;;;;;;;;;;:::i;:::-;;;;;;;;;;;;48385:38;;;;;;;;;;;;-1:-1:-1;48385:38:0;;:49;;;:38;;:49;:::i;:::-;48344:17;:38;48362:16;48379:1;48362:19;;;;;;;;;;:::i;:::-;;;;;;;48344:38;;;;;;;;;;;;;;;;:90;;;;;;;;;;;;;;;;;;48249:3;;;;;:::i;:::-;;;;48213:233;;49658:834;49736:13;:11;:13::i;:::-;49782:10;;49760:33;;49773:7;;49782:10;;;;;49760:12;:33::i;:::-;49804:24;49847:7;49831:23;;:13;37525:10;:17;;37437:113;49831:13;:23;;;;:::i;:::-;49804:50;;49865:32;49880:16;49865:14;:32::i;:::-;49908:46;49931:13;49946:7;49908:46;;:22;:46::i;:::-;49991:9;;;;;;;49988:41;;;50003:23;:21;:23::i;:::-;50114:32;;;;;;;;:17;:32;;;;;;;;2739:10;50114:46;;;;;;;;;;50103:57;;;;50100:290;;50234:32;;;;;;;;:17;:32;;;;;;;;2739:10;50234:46;;;;;;;;:56;;50283:7;;50234:46;:56;:::i;:::-;;50100:290;;;50347:29;:19;;;;;;;:4;:19;;;;;;50323:55;;50335:9;;50347:29;;;;;;:::i;:::-;50323:11;:55::i;:::-;50407:9;50402:83;50422:7;50418:11;;:1;:11;50402:83;;;50451:22;50459:13;50451:7;:22::i;:::-;50431:3;;;;:::i;:::-;;;;50402:83;;51148:567;51191:13;:11;:13::i;:::-;2739:10;51250:1;51218:29;;;:15;:29;;;;;;;;:33;;;:60;;-1:-1:-1;3858:6:0;;-1:-1:-1;;;;;3858:6:0;2739:10;51255:23;51218:60;51215:493;;;3858:6;;-1:-1:-1;;;;;3858:6:0;2739:10;51298:23;51294:166;;2739:10;51342:29;;;;:15;:29;;;;;:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51418:1:0;-1:-1:-1;51413:7:0;:4;:7;;;;51400:9;:20;;51392:52;;;;-1:-1:-1;;;51392:52:0;;23504:2:1;51392:52:0;;;23486:21:1;23543:2;23523:18;;;23516:30;23582:20;23562:18;;;23555:48;23620:18;;51392:52:0;23302:342:1;51392:52:0;51474:15;51492:13;37525:10;:17;;37437:113;51492:13;:17;;51508:1;51492:17;:::i;:::-;51551:1;51524:29;;;;:26;:29;;;:31;;51474:35;;-1:-1:-1;51524:31:0;;;;;:29;:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;51570:23:0;;;:14;:23;;;;;:27;;;;51596:1;51570:27;;;51612:32;51622:12;2739:10;;2659:98;51622:12;51636:7;51612:9;:32::i;:::-;51659:20;;;;:11;:20;;;;;51682:14;51659:37;;;;;:::i;:::-;;;;;;:::i;4821:173::-;4896:6;;;-1:-1:-1;;;;;4913:17:0;;;;;;;;;;;4946:40;;4896:6;;;4913:17;4896:6;;4946:40;;4877:16;;4946:40;4866:128;4821:173;:::o;46599:241::-;46735:8;46730:103;46753:4;:11;46749:1;:15;;;46730:103;;;46813:5;46819:1;46813:8;;;;;;;;;;:::i;:::-;;;;;;;46786:15;:24;46802:4;46807:1;46802:7;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;46786:24:0;-1:-1:-1;;;;;46786:24:0;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;46766:3;;;;;:::i;:::-;;;;46730:103;;28586:269;28743:28;28753:4;28759:2;28763:7;28743:9;:28::i;:::-;28790:48;28813:4;28819:2;28823:7;28832:5;28790:22;:48::i;:::-;28782:65;;;;-1:-1:-1;;;28782:65:0;;;;;;19854:2:1;19836:21;;;19893:1;19873:18;;;19866:29;19931:6;19926:2;19911:18;;19904:34;19970:2;19955:18;;19652:327;19844:723:0;19900:13;20121:10;20117:53;;-1:-1:-1;;20148:10:0;;;;;;;;;;;;;;;;;;19844:723::o;20117:53::-;20195:5;20180:12;20236:78;20243:9;;20236:78;;20269:8;;;;:::i;:::-;;-1:-1:-1;20292:10:0;;-1:-1:-1;20300:2:0;20292:10;;:::i;:::-;;;20236:78;;;20324:19;20356:6;20346:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20346:17:0;;20324:39;;20374:154;20381:10;;20374:154;;20408:11;20418:1;20408:11;;:::i;:::-;;-1:-1:-1;20477:10:0;20485:2;20477:5;:10;:::i;:::-;20464:24;;:2;:24;:::i;:::-;20451:39;;20434:6;20441;20434:14;;;;;;;;:::i;:::-;;;;:56;;;;;;;;;;-1:-1:-1;20505:11:0;20514:2;20505:11;;:::i;:::-;;;20374:154;;47282:301;47455:8;47450:126;47473:4;:11;47469:1;:15;;;47450:126;;;47556:5;47562:1;47556:8;;;;;;;;;;:::i;:::-;;;;;;;47506:17;:38;47524:16;47541:1;47524:19;;;;;;;;;;:::i;:::-;;;;;;;47506:38;;;;;;;;;;;;;;;:47;47545:4;47550:1;47545:7;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;47506:47:0;-1:-1:-1;;;;;47506:47:0;;;;;;;;;;;;;:58;;;;;;;;;;;;;;;;;;47486:3;;;;;:::i;:::-;;;;47450:126;;38433:589;-1:-1:-1;;;;;38639:18:0;;38635:187;;38674:40;38706:7;39849:10;:17;;39822:24;;;;:15;:24;;;;;:44;;;39877:24;;;;;;;;;;;;39745:164;38674:40;38635:187;;;38744:2;-1:-1:-1;;;;;38736:10:0;:4;-1:-1:-1;;;;;38736:10:0;;38732:90;;38763:47;38796:4;38802:7;38763:32;:47::i;:::-;-1:-1:-1;;;;;38836:16:0;;38832:183;;38869:45;38906:7;38869:36;:45::i;38832:183::-;38942:4;-1:-1:-1;;;;;38936:10:0;:2;-1:-1:-1;;;;;38936:10:0;;38932:83;;38963:40;38991:2;38995:7;38963:27;:40::i;57027:107::-;57084:6;;;;;;;57083:7;;:34;;-1:-1:-1;3858:6:0;;-1:-1:-1;;;;;3858:6:0;2739:10;57094:23;57083:34;57075:51;;;;-1:-1:-1;;;57075:51:0;;;;;;20186:2:1;20168:21;;;20225:1;20205:18;;;20198:29;20263:6;20258:2;20243:18;;20236:34;20302:2;20287:18;;19984:327;56890:129:0;56991:11;56980:22;;:7;:22;;;;56972:39;;;;-1:-1:-1;;;56972:39:0;;;;;;22840:2:1;22822:21;;;22879:1;22859:18;;;22852:29;22917:6;22912:2;22897:18;;22890:34;22956:2;22941:18;;22638:327;55404:130:0;43756:6;55487:30;;;55479:47;;;;-1:-1:-1;;;55479:47:0;;;;;;16204:2:1;16186:21;;;16243:1;16223:18;;;16216:29;16281:6;16276:2;16261:18;;16254:34;16320:2;16305:18;;16002:327;55542:1195:0;55699:37;;;55634:14;55699:37;;;:19;:37;;;;;;;;2739:10;55699:45;;;;;;;;;;55783:35;;;:17;:35;;;;;;55861:21;:39;;;;;;2739:10;;55699:45;;;;;55783:35;;;;55861:39;55699:45;55911:819;;56035:43;56060:18;56035:22;:43;:::i;:::-;55977:44;;;;;;;:26;:44;;;;;;:101;;;;;:54;;;;;;:44;;:54;:::i;:::-;:101;;;;55951:167;;;;-1:-1:-1;;;55951:167:0;;;;;;17199:2:1;17181:21;;;17238:1;17218:18;;;17211:29;17276:6;17271:2;17256:18;;17249:34;17315:2;17300:18;;16997:327;55951:167:0;55911:819;;;56177:44;;;;;;;:26;:44;;;;;;:80;;;;;:54;;;;;:44;;:54;:::i;:::-;:80;;;;56151:146;;;;-1:-1:-1;;;56151:146:0;;;;;;24847:2:1;24829:21;;;24886:1;24866:18;;;24859:29;24924:6;24919:2;24904:18;;24897:34;24963:2;24948:18;;24645:327;56151:146:0;56326:15;56315:26;;:7;:26;;;56312:407;;56400:36;56421:15;56400:18;:36;:::i;:::-;56362:35;;;;;;;:17;:35;;;;;;;;:74;;;;;;;;;;;;;;56455:19;:37;;;;;-1:-1:-1;;;;;56455:45:0;;;;;;;;;:49;;;;;;;56312:407;;;56583:28;56604:7;56583:18;:28;:::i;:::-;56545:35;;;;;;;:17;:35;;;;;:66;;;;;;;;;;;;;;;56678:25;56696:7;56678:15;:25;:::i;:::-;56630:37;;;;;;;:19;:37;;;;;;;;-1:-1:-1;;;;;56630:45:0;;;;;;;;;:73;;;;;;;;;;;;;;;56312:407;55623:1114;;;;55542:1195;;:::o;51723:1069::-;51776:20;51799:13;37525:10;:17;;37437:113;51799:13;51776:36;;51841:4;51826:12;:19;51823:962;;;52966:4;:7;;51859:11;52966:7;:21;51872:11;52998:7;:21;51885:11;53030:7;:21;53067:1;-1:-1:-1;53062:7:0;51898:11;53062:7;:21;54713:55:::1;54659:117::o:0;51823:962::-;51946:4;51931:12;:19;51928:857;;;52966:4;:7;;51964:12;52966:7;:21;51978:12;52998:7;:21;51992:12;53030:7;:21;53067:1;-1:-1:-1;53062:7:0;52006:12;53062:7;:21;54713:55:::1;54659:117::o:0;51928:857::-;52055:4;52040:12;:19;52037:748;;;52966:4;:7;;52073:12;52966:7;:21;52087:12;52998:7;:21;52101:12;53030:7;:21;53067:1;-1:-1:-1;53062:7:0;52115:12;53062:7;:21;54713:55:::1;54659:117::o:0;52037:748::-;52164:4;52149:12;:19;52146:639;;;52966:4;:7;;52182:12;52966:7;:21;52196:12;52998:7;:21;52210:12;53030:7;:21;53067:1;-1:-1:-1;53062:7:0;52224:12;53062:7;:21;54713:55:::1;54659:117::o:0;52146:639::-;52273:4;52258:12;:19;52255:530;;;52966:4;:7;;52291:12;52966:7;:21;52305:12;52998:7;:21;52319:12;53030:7;:21;53067:1;-1:-1:-1;53062:7:0;52333:12;53062:7;:21;54713:55:::1;54659:117::o:0;52255:530::-;52382:4;52367:12;:19;52364:421;;;52966:4;:7;;52400:12;52966:7;:21;52414:12;52998:7;:21;52428:12;53030:7;:21;53067:1;-1:-1:-1;53062:7:0;52442:12;53062:7;:21;54713:55:::1;54659:117::o:0;52364:421::-;52491:4;52476:12;:19;52473:312;;;52966:4;:7;;52509:12;52966:7;:21;52523:12;52998:7;:21;52537:12;53030:7;:21;53067:1;-1:-1:-1;53062:7:0;52551:12;53062:7;:21;54713:55:::1;54659:117::o:0;52473:312::-;52600:4;52585:12;:19;52582:203;;;52966:4;:7;;52618:12;52966:7;:21;52632:12;52998:7;:21;52646:12;53030:7;:21;53067:1;-1:-1:-1;53062:7:0;52660:12;53062:7;:21;54713:55:::1;54659:117::o:0;52582:203::-;52709:4;52694:12;:19;52691:94;;;52966:4;:7;;52727:12;52966:7;:21;52741:12;52998:7;:21;52755:12;53030:7;:21;53067:1;-1:-1:-1;53062:7:0;52769:12;53062:7;:21;54713:55:::1;54659:117::o:0;56745:137::-;56852:13;56840:8;:25;;56832:42;;;;-1:-1:-1;;;56832:42:0;;;;;;23851:2:1;23833:21;;;23890:1;23870:18;;;23863:29;23928:6;23923:2;23908:18;;23901:34;23967:2;23952:18;;23649:327;50785:349:0;50843:15;50861:13;37525:10;:17;;37437:113;50861:13;:17;;50877:1;50861:17;:::i;:::-;50889:23;;;;:14;:23;;;;;;;;:39;;;;;;;;;;;;;50939:41;;:26;:41;;;;;:43;;50889:23;;-1:-1:-1;50939:43:0;;;;;:41;:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;51012:41;;;-1:-1:-1;51012:41:0;;;:26;:41;;;;;;;;;50993:16;;;:7;:16;;;;;;51012:41;;50993:60;;-1:-1:-1;51064:32:0;2739:10;51074:12;2659:98;51064:32;51107:19;:17;:19::i;30112:110::-;30188:26;30198:2;30202:7;30188:26;;;;;;;;;;;;:9;:26::i;33682:753::-;33837:4;-1:-1:-1;;;;;33858:13:0;;12952:20;13000:8;33854:574;;33894:72;;;;;-1:-1:-1;;;;;33894:36:0;;;;;:72;;2739:10;;33945:4;;33951:7;;33960:5;;33894:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33894:72:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33890:483;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34136:13:0;;34132:226;;34179:14;;-1:-1:-1;;;34179:14:0;;;;;;24515:2:1;24497:21;;;24554:1;24534:18;;;24527:29;24592:6;24587:2;24572:18;;24565:34;24631:2;24616:18;;24313:327;34132:226:0;34308:6;34302:13;34293:6;34289:2;34285:15;34278:38;33890:483;34017:51;;34027:41;34017:51;;-1:-1:-1;34010:58:0;;33854:574;-1:-1:-1;34412:4:0;33682:753;;;;;;:::o;40536:988::-;40802:22;40852:1;40827:22;40844:4;40827:16;:22::i;:::-;:26;;;;:::i;:::-;40864:18;40885:26;;;:17;:26;;;;;;40802:51;;-1:-1:-1;41018:28:0;;;41014:328;;-1:-1:-1;;;;;41085:18:0;;41063:19;41085:18;;;:12;:18;;;;;;;;:34;;;;;;;;;41136:30;;;;;;:44;;;41253:30;;:17;:30;;;;;:43;;;41014:328;-1:-1:-1;41438:26:0;;;;:17;:26;;;;;;;;41431:33;;;-1:-1:-1;;;;;41482:18:0;;;;;:12;:18;;;;;:34;;;;;;;41475:41;40536:988::o;41819:1079::-;42097:10;:17;42072:22;;42097:21;;42117:1;;42097:21;:::i;:::-;42129:18;42150:24;;;:15;:24;;;;;;42523:10;:26;;42072:46;;-1:-1:-1;42150:24:0;;42072:46;;42523:26;;;;;;:::i;:::-;;;;;;;;;42501:48;;42587:11;42562:10;42573;42562:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;42667:28;;;:15;:28;;;;;;;:41;;;42839:24;;;;;42832:31;42874:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;41890:1008;;;41819:1079;:::o;39323:221::-;39408:14;39425:20;39442:2;39425:16;:20::i;:::-;-1:-1:-1;;;;;39456:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;39501:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;39323:221:0:o;57149:917::-;57198:14;57240:3;57215:24;:21;57237:2;57215:24;:::i;:::-;:28;;;;:::i;:::-;57198:45;-1:-1:-1;57254:14:0;57296:3;57271:24;:21;57293:2;57271:24;:::i;:::-;:28;;;;:::i;:::-;57254:45;-1:-1:-1;57310:14:0;57352:3;57327:24;:21;57349:2;57327:24;:::i;:::-;:28;;;;:::i;:::-;57310:45;-1:-1:-1;57366:14:0;57408:3;57383:24;:21;57405:2;57383:24;:::i;:::-;:28;;;;:::i;:::-;57366:45;-1:-1:-1;57422:14:0;57464:3;57439:24;:21;57461:2;57439:24;:::i;:::-;:28;;;;:::i;:::-;57422:45;-1:-1:-1;57478:14:0;57519:3;57495:23;:21;57517:1;57495:23;:::i;:::-;:27;;;;:::i;:::-;57478:44;;57535:78;57561:42;57606:6;57535:17;:78::i;:::-;57624;57650:42;57695:6;57624:17;:78::i;:::-;57713;57739:42;57784:6;57713:17;:78::i;:::-;57802;57828:42;57873:6;57802:17;:78::i;:::-;57891;57917:42;57962:6;57891:17;:78::i;:::-;57980;58006:42;58051:6;57980:17;:78::i;30449:275::-;30579:18;30585:2;30589:7;30579:5;:18::i;:::-;30630:54;30661:1;30665:2;30669:7;30678:5;30630:22;:54::i;:::-;30608:108;;;;-1:-1:-1;;;30608:108:0;;;;;;22176:2:1;22158:21;;;22215:1;22195:18;;;22188:29;22253:6;22248:2;22233:18;;22226:34;22292:2;22277:18;;21974:327;31060:330:0;-1:-1:-1;;;;;31140:16:0;;31132:33;;;;-1:-1:-1;;;31132:33:0;;;;;;15872:2:1;15854:21;;;15911:1;15891:18;;;15884:29;15949:6;15944:2;15929:18;;15922:34;15988:2;15973:18;;15670:327;31132:33:0;29233:4;29257:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29257:16:0;:30;31176:34;;;;-1:-1:-1;;;31176:34:0;;;;;;20849:2:1;20831:21;;;20888:1;20868:18;;;20861:29;20926:6;20921:2;20906:18;;20899:34;20965:2;20950:18;;20647:327;31176:34:0;31223:45;31252:1;31256:2;31260:7;31223:20;:45::i;:::-;-1:-1:-1;;;;;31281:13:0;;;;;;:9;:13;;;;;:18;;31298:1;;31281:13;:18;;31298:1;;31281:18;:::i;:::-;;;;-1:-1:-1;;31310:16:0;;;;:7;:16;;;;;;:21;;;;-1:-1:-1;;;;;31310:21:0;;;;;;;;31349:33;;31310:16;;;31349:33;;31310:16;;31349:33;31060:330;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::i;14:465:1:-;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;172:116;282:4;213:66;208:2;200:6;196:15;192:88;188:99;172:116;:::i;:::-;163:125;;311:6;304:5;297:21;351:3;342:6;337:3;333:16;330:25;327:45;;;368:1;365;358:12;327:45;417:6;412:3;405:4;398:5;394:16;381:43;471:1;464:4;455:6;448:5;444:18;440:29;433:40;14:465;;;;;:::o;484:196::-;552:20;;-1:-1:-1;;;;;601:54:1;;591:65;;581:93;;670:1;667;660:12;581:93;484:196;;;:::o;685:679::-;739:5;792:3;785:4;777:6;773:17;769:27;759:55;;810:1;807;800:12;759:55;846:6;833:20;872:4;896:60;912:43;952:2;912:43;:::i;:::-;896:60;:::i;:::-;978:3;1002:2;997:3;990:15;1030:2;1025:3;1021:12;1014:19;;1065:2;1057:6;1053:15;1117:3;1112:2;1106;1103:1;1099:10;1091:6;1087:23;1083:32;1080:41;1077:61;;;1134:1;1131;1124:12;1077:61;1156:1;1166:169;1180:2;1177:1;1174:9;1166:169;;;1237:23;1256:3;1237:23;:::i;:::-;1225:36;;1281:12;;;;1313;;;;1198:1;1191:9;1166:169;;;-1:-1:-1;1353:5:1;;685:679;-1:-1:-1;;;;;;;685:679:1:o;1369:675::-;1421:5;1474:3;1467:4;1459:6;1455:17;1451:27;1441:55;;1492:1;1489;1482:12;1441:55;1528:6;1515:20;1554:4;1578:60;1594:43;1634:2;1594:43;:::i;1578:60::-;1660:3;1684:2;1679:3;1672:15;1712:2;1707:3;1703:12;1696:19;;1747:2;1739:6;1735:15;1799:3;1794:2;1788;1785:1;1781:10;1773:6;1769:23;1765:32;1762:41;1759:61;;;1816:1;1813;1806:12;1759:61;1838:1;1848:167;1862:2;1859:1;1856:9;1848:167;;;1919:21;1936:3;1919:21;:::i;:::-;1907:34;;1961:12;;;;1993;;;;1880:1;1873:9;1848:167;;2049:221;2092:5;2145:3;2138:4;2130:6;2126:17;2122:27;2112:55;;2163:1;2160;2153:12;2112:55;2185:79;2260:3;2251:6;2238:20;2231:4;2223:6;2219:17;2185:79;:::i;2275:156::-;2341:20;;2401:4;2390:16;;2380:27;;2370:55;;2421:1;2418;2411:12;2436:186;2495:6;2548:2;2536:9;2527:7;2523:23;2519:32;2516:52;;;2564:1;2561;2554:12;2516:52;2587:29;2606:9;2587:29;:::i;2627:260::-;2695:6;2703;2756:2;2744:9;2735:7;2731:23;2727:32;2724:52;;;2772:1;2769;2762:12;2724:52;2795:29;2814:9;2795:29;:::i;:::-;2785:39;;2843:38;2877:2;2866:9;2862:18;2843:38;:::i;:::-;2833:48;;2627:260;;;;;:::o;2892:328::-;2969:6;2977;2985;3038:2;3026:9;3017:7;3013:23;3009:32;3006:52;;;3054:1;3051;3044:12;3006:52;3077:29;3096:9;3077:29;:::i;:::-;3067:39;;3125:38;3159:2;3148:9;3144:18;3125:38;:::i;:::-;3115:48;;3210:2;3199:9;3195:18;3182:32;3172:42;;2892:328;;;;;:::o;3225:666::-;3320:6;3328;3336;3344;3397:3;3385:9;3376:7;3372:23;3368:33;3365:53;;;3414:1;3411;3404:12;3365:53;3437:29;3456:9;3437:29;:::i;:::-;3427:39;;3485:38;3519:2;3508:9;3504:18;3485:38;:::i;:::-;3475:48;;3570:2;3559:9;3555:18;3542:32;3532:42;;3625:2;3614:9;3610:18;3597:32;3652:18;3644:6;3641:30;3638:50;;;3684:1;3681;3674:12;3638:50;3707:22;;3760:4;3752:13;;3748:27;-1:-1:-1;3738:55:1;;3789:1;3786;3779:12;3738:55;3812:73;3877:7;3872:2;3859:16;3854:2;3850;3846:11;3812:73;:::i;:::-;3802:83;;;3225:666;;;;;;;:::o;3896:347::-;3961:6;3969;4022:2;4010:9;4001:7;3997:23;3993:32;3990:52;;;4038:1;4035;4028:12;3990:52;4061:29;4080:9;4061:29;:::i;:::-;4051:39;;4140:2;4129:9;4125:18;4112:32;4187:5;4180:13;4173:21;4166:5;4163:32;4153:60;;4209:1;4206;4199:12;4153:60;4232:5;4222:15;;;3896:347;;;;;:::o;4248:254::-;4316:6;4324;4377:2;4365:9;4356:7;4352:23;4348:32;4345:52;;;4393:1;4390;4383:12;4345:52;4416:29;4435:9;4416:29;:::i;:::-;4406:39;4492:2;4477:18;;;;4464:32;;-1:-1:-1;;;4248:254:1:o;4507:591::-;4623:6;4631;4684:2;4672:9;4663:7;4659:23;4655:32;4652:52;;;4700:1;4697;4690:12;4652:52;4740:9;4727:23;4769:18;4810:2;4802:6;4799:14;4796:34;;;4826:1;4823;4816:12;4796:34;4849:61;4902:7;4893:6;4882:9;4878:22;4849:61;:::i;:::-;4839:71;;4963:2;4952:9;4948:18;4935:32;4919:48;;4992:2;4982:8;4979:16;4976:36;;;5008:1;5005;4998:12;4976:36;;5031:61;5084:7;5073:8;5062:9;5058:24;5031:61;:::i;:::-;5021:71;;;4507:591;;;;;:::o;5103:813::-;5251:6;5259;5267;5320:2;5308:9;5299:7;5295:23;5291:32;5288:52;;;5336:1;5333;5326:12;5288:52;5376:9;5363:23;5405:18;5446:2;5438:6;5435:14;5432:34;;;5462:1;5459;5452:12;5432:34;5485:61;5538:7;5529:6;5518:9;5514:22;5485:61;:::i;:::-;5475:71;;5599:2;5588:9;5584:18;5571:32;5555:48;;5628:2;5618:8;5615:16;5612:36;;;5644:1;5641;5634:12;5612:36;5667:61;5720:7;5709:8;5698:9;5694:24;5667:61;:::i;:::-;5657:71;;5781:2;5770:9;5766:18;5753:32;5737:48;;5810:2;5800:8;5797:16;5794:36;;;5826:1;5823;5816:12;5794:36;;5849:61;5902:7;5891:8;5880:9;5876:24;5849:61;:::i;:::-;5839:71;;;5103:813;;;;;:::o;5921:1101::-;6015:6;6046:2;6089;6077:9;6068:7;6064:23;6060:32;6057:52;;;6105:1;6102;6095:12;6057:52;6145:9;6132:23;6174:18;6215:2;6207:6;6204:14;6201:34;;;6231:1;6228;6221:12;6201:34;6269:6;6258:9;6254:22;6244:32;;6314:7;6307:4;6303:2;6299:13;6295:27;6285:55;;6336:1;6333;6326:12;6285:55;6372:2;6359:16;6395:60;6411:43;6451:2;6411:43;:::i;6395:60::-;6477:3;6501:2;6496:3;6489:15;6529:2;6524:3;6520:12;6513:19;;6560:2;6556;6552:11;6608:7;6603:2;6597;6594:1;6590:10;6586:2;6582:19;6578:28;6575:41;6572:61;;;6629:1;6626;6619:12;6572:61;6651:1;6672;6682:310;6698:2;6693:3;6690:11;6682:310;;;6779:3;6766:17;6815:2;6802:11;6799:19;6796:39;;;6831:1;6828;6821:12;6796:39;6860:57;6909:7;6904:2;6890:11;6886:2;6882:20;6878:29;6860:57;:::i;:::-;6848:70;;-1:-1:-1;6938:12:1;;;;6970;;;;6720:1;6711:11;6682:310;;;-1:-1:-1;7011:5:1;;5921:1101;-1:-1:-1;;;;;;;;;;5921:1101:1:o;7027:245::-;7085:6;7138:2;7126:9;7117:7;7113:23;7109:32;7106:52;;;7154:1;7151;7144:12;7106:52;7193:9;7180:23;7212:30;7236:5;7212:30;:::i;7277:249::-;7346:6;7399:2;7387:9;7378:7;7374:23;7370:32;7367:52;;;7415:1;7412;7405:12;7367:52;7447:9;7441:16;7466:30;7490:5;7466:30;:::i;7531:322::-;7600:6;7653:2;7641:9;7632:7;7628:23;7624:32;7621:52;;;7669:1;7666;7659:12;7621:52;7709:9;7696:23;7742:18;7734:6;7731:30;7728:50;;;7774:1;7771;7764:12;7728:50;7797;7839:7;7830:6;7819:9;7815:22;7797:50;:::i;7858:272::-;7916:6;7969:2;7957:9;7948:7;7944:23;7940:32;7937:52;;;7985:1;7982;7975:12;7937:52;8024:9;8011:23;8074:6;8067:5;8063:18;8056:5;8053:29;8043:57;;8096:1;8093;8086:12;8135:180;8194:6;8247:2;8235:9;8226:7;8222:23;8218:32;8215:52;;;8263:1;8260;8253:12;8215:52;-1:-1:-1;8286:23:1;;8135:180;-1:-1:-1;8135:180:1:o;8320:390::-;8398:6;8406;8459:2;8447:9;8438:7;8434:23;8430:32;8427:52;;;8475:1;8472;8465:12;8427:52;8511:9;8498:23;8488:33;;8572:2;8561:9;8557:18;8544:32;8599:18;8591:6;8588:30;8585:50;;;8631:1;8628;8621:12;8585:50;8654;8696:7;8687:6;8676:9;8672:22;8654:50;:::i;8715:454::-;8810:6;8818;8826;8834;8842;8895:3;8883:9;8874:7;8870:23;8866:33;8863:53;;;8912:1;8909;8902:12;8863:53;-1:-1:-1;;8935:23:1;;;9005:2;8990:18;;8977:32;;-1:-1:-1;9056:2:1;9041:18;;9028:32;;9107:2;9092:18;;9079:32;;-1:-1:-1;9158:3:1;9143:19;9130:33;;-1:-1:-1;8715:454:1;-1:-1:-1;8715:454:1:o;9174:182::-;9231:6;9284:2;9272:9;9263:7;9259:23;9255:32;9252:52;;;9300:1;9297;9290:12;9252:52;9323:27;9340:9;9323:27;:::i;9361:256::-;9427:6;9435;9488:2;9476:9;9467:7;9463:23;9459:32;9456:52;;;9504:1;9501;9494:12;9456:52;9527:27;9544:9;9527:27;:::i;9622:252::-;9686:6;9694;9747:2;9735:9;9726:7;9722:23;9718:32;9715:52;;;9763:1;9760;9753:12;9715:52;9786:27;9803:9;9786:27;:::i;:::-;9776:37;;9832:36;9864:2;9853:9;9849:18;9832:36;:::i;9879:316::-;9920:3;9958:5;9952:12;9985:6;9980:3;9973:19;10001:63;10057:6;10050:4;10045:3;10041:14;10034:4;10027:5;10023:16;10001:63;:::i;:::-;10109:2;10097:15;10114:66;10093:88;10084:98;;;;10184:4;10080:109;;9879:316;-1:-1:-1;;9879:316:1:o;10200:1088::-;10285:12;;10250:3;;10340:1;10360:18;;;;10413;;;;10440:61;;10494:4;10486:6;10482:17;10472:27;;10440:61;10520:2;10568;10560:6;10557:14;10537:18;10534:38;10531:218;;;10605:77;10602:1;10595:88;10706:4;10703:1;10696:15;10734:4;10731:1;10724:15;10531:218;10765:18;10792:162;;;;10968:1;10963:319;;;;10758:524;;10792:162;10840:66;10829:9;10825:82;10820:3;10813:95;10937:6;10932:3;10928:16;10921:23;;10792:162;;10963:319;26338:1;26331:14;;;26375:4;26362:18;;11057:1;11071:165;11085:6;11082:1;11079:13;11071:165;;;11163:14;;11150:11;;;11143:35;11206:16;;;;11100:10;;11071:165;;;11075:3;;11265:6;11260:3;11256:16;11249:23;;10758:524;;;;;;;10200:1088;;;;:::o;11293:550::-;11517:3;11555:6;11549:13;11571:53;11617:6;11612:3;11605:4;11597:6;11593:17;11571:53;:::i;:::-;11687:13;;11646:16;;;;11709:57;11687:13;11646:16;11743:4;11731:17;;11709:57;:::i;:::-;11782:55;11827:8;11820:5;11816:20;11808:6;11782:55;:::i;:::-;11775:62;11293:550;-1:-1:-1;;;;;;;11293:550:1:o;11848:277::-;12021:3;12046:73;12080:38;12114:3;12106:6;12080:38;:::i;:::-;12072:6;12046:73;:::i;12571:511::-;12765:4;-1:-1:-1;;;;;12875:2:1;12867:6;12863:15;12852:9;12845:34;12927:2;12919:6;12915:15;12910:2;12899:9;12895:18;12888:43;;12967:6;12962:2;12951:9;12947:18;12940:34;13010:3;13005:2;12994:9;12990:18;12983:31;13031:45;13071:3;13060:9;13056:19;13048:6;13031:45;:::i;:::-;13023:53;12571:511;-1:-1:-1;;;;;;12571:511:1:o;13087:861::-;13249:4;13278:2;13318;13307:9;13303:18;13348:2;13337:9;13330:21;13371:6;13406;13400:13;13437:6;13429;13422:22;13475:2;13464:9;13460:18;13453:25;;13537:2;13527:6;13524:1;13520:14;13509:9;13505:30;13501:39;13487:53;;13575:2;13567:6;13563:15;13596:1;13606:313;13620:6;13617:1;13614:13;13606:313;;;13709:66;13697:9;13689:6;13685:22;13681:95;13676:3;13669:108;13800:39;13832:6;13823;13817:13;13800:39;:::i;:::-;13790:49;-1:-1:-1;13897:12:1;;;;13862:15;;;;13642:1;13635:9;13606:313;;;-1:-1:-1;13936:6:1;;13087:861;-1:-1:-1;;;;;;;13087:861:1:o;13953:632::-;14124:2;14176:21;;;14246:13;;14149:18;;;14268:22;;;14095:4;;14124:2;14347:15;;;;14321:2;14306:18;;;14095:4;14390:169;14404:6;14401:1;14398:13;14390:169;;;14465:13;;14453:26;;14534:15;;;;14499:12;;;;14426:1;14419:9;14390:169;;;-1:-1:-1;14576:3:1;;13953:632;-1:-1:-1;;;;;;13953:632:1:o;14782:219::-;14931:2;14920:9;14913:21;14894:4;14951:44;14991:2;14980:9;14976:18;14968:6;14951:44;:::i;25738:334::-;25809:2;25803:9;25865:2;25855:13;;25870:66;25851:86;25839:99;;25968:18;25953:34;;25989:22;;;25950:62;25947:88;;;26015:18;;:::i;:::-;26051:2;26044:22;25738:334;;-1:-1:-1;25738:334:1:o;26077:183::-;26137:4;26170:18;26162:6;26159:30;26156:56;;;26192:18;;:::i;:::-;-1:-1:-1;26237:1:1;26233:14;26249:4;26229:25;;26077:183::o;26391:224::-;26430:3;26458:6;26491:2;26488:1;26484:10;26521:2;26518:1;26514:10;26552:3;26548:2;26544:12;26539:3;26536:21;26533:47;;;26560:18;;:::i;:::-;26596:13;;26391:224;-1:-1:-1;;;;26391:224:1:o;26620:128::-;26660:3;26691:1;26687:6;26684:1;26681:13;26678:39;;;26697:18;;:::i;:::-;-1:-1:-1;26733:9:1;;26620:128::o;26753:228::-;26792:3;26820:10;26857:2;26854:1;26850:10;26887:2;26884:1;26880:10;26918:3;26914:2;26910:12;26905:3;26902:21;26899:47;;;26926:18;;:::i;26986:120::-;27026:1;27052;27042:35;;27057:18;;:::i;:::-;-1:-1:-1;27091:9:1;;26986:120::o;27111:228::-;27151:7;27277:1;27209:66;27205:74;27202:1;27199:81;27194:1;27187:9;27180:17;27176:105;27173:131;;;27284:18;;:::i;:::-;-1:-1:-1;27324:9:1;;27111:228::o;27344:217::-;27383:4;27412:6;27468:10;;;;27438;;27490:12;;;27487:38;;;27505:18;;:::i;:::-;27542:13;;27344:217;-1:-1:-1;;;27344:217:1:o;27566:125::-;27606:4;27634:1;27631;27628:8;27625:34;;;27639:18;;:::i;:::-;-1:-1:-1;27676:9:1;;27566:125::o;27696:195::-;27734:4;27771;27768:1;27764:12;27803:4;27800:1;27796:12;27828:3;27823;27820:12;27817:38;;;27835:18;;:::i;:::-;27872:13;;;27696:195;-1:-1:-1;;;27696:195:1:o;27896:258::-;27968:1;27978:113;27992:6;27989:1;27986:13;27978:113;;;28068:11;;;28062:18;28049:11;;;28042:39;28014:2;28007:10;27978:113;;;28109:6;28106:1;28103:13;28100:48;;;-1:-1:-1;;28144:1:1;28126:16;;28119:27;27896:258::o;28159:238::-;28196:3;28240:4;28233:5;28229:16;28264:7;28254:41;;28275:18;;:::i;:::-;28324:66;28311:80;;28159:238;-1:-1:-1;;28159:238:1:o;28402:437::-;28481:1;28477:12;;;;28524;;;28545:61;;28599:4;28591:6;28587:17;28577:27;;28545:61;28652:2;28644:6;28641:14;28621:18;28618:38;28615:218;;;28689:77;28686:1;28679:88;28790:4;28787:1;28780:15;28818:4;28815:1;28808:15;28844:197;28882:3;28910:6;28951:2;28944:5;28940:14;28978:2;28969:7;28966:15;28963:41;;;28984:18;;:::i;:::-;29033:1;29020:15;;28844:197;-1:-1:-1;;;28844:197:1:o;29046:195::-;29085:3;29116:66;29109:5;29106:77;29103:103;;;29186:18;;:::i;:::-;-1:-1:-1;29233:1:1;29222:13;;29046:195::o;29246:201::-;29284:3;29312:10;29357:2;29350:5;29346:14;29384:2;29375:7;29372:15;29369:41;;;29390:18;;:::i;29452:112::-;29484:1;29510;29500:35;;29515:18;;:::i;:::-;-1:-1:-1;29549:9:1;;29452:112::o;29569:184::-;29621:77;29618:1;29611:88;29718:4;29715:1;29708:15;29742:4;29739:1;29732:15;29758:184;29810:77;29807:1;29800:88;29907:4;29904:1;29897:15;29931:4;29928:1;29921:15;29947:184;29999:77;29996:1;29989:88;30096:4;30093:1;30086:15;30120:4;30117:1;30110:15;30136:184;30188:77;30185:1;30178:88;30285:4;30282:1;30275:15;30309:4;30306:1;30299:15;30325:184;30377:77;30374:1;30367:88;30474:4;30471:1;30464:15;30498:4;30495:1;30488:15;30514:177;30599:66;30592:5;30588:78;30581:5;30578:89;30568:117;;30681:1;30678;30671:12
Swarm Source
ipfs://1cb6b507cf47f8a4efce195f5439899a20a05c0984df8d42df1fb00c117e9875
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.