ERC-721
Overview
Max Total Supply
3,099 DAP
Holders
265
Total Transfers
-
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Doodle_Ape_Planet
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-08 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.11; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } /** * @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 Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @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 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); } /** * @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 Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @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); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..). * * Does not support burning tokens to address(0). * * Assumes that an owner cannot have more than the 2**128 - 1 (max value of uint128) of supply */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 internal currentIndex = 1; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // 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; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), 'ERC721A: global index out of bounds'); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), 'ERC721A: owner index out of bounds'); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx = 0; address currOwnershipAddr = address(0); for (uint256 i = 0; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } revert('ERC721A: unable to get token of owner by index'); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require(owner != address(0), 'ERC721A: balance query for the zero address'); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require(owner != address(0), 'ERC721A: number minted query for the zero address'); return uint256(_addressData[owner].numberMinted); } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), 'ERC721A: owner query for nonexistent token'); for (uint256 curr = tokenId; ; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } revert('ERC721A: unable to determine the owner of token'); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), 'ERC721Metadata: URI query for nonexistent token'); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); require(to != owner, 'ERC721A: approval to current owner'); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), 'ERC721A: approve caller is not owner nor approved for all' ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), 'ERC721A: approved query for nonexistent token'); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), 'ERC721A: approve to caller'); _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 override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), 'ERC721A: transfer to non ERC721Receiver implementer' ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = currentIndex; require(to != address(0), 'ERC721A: mint to the zero address'); // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering. require(!_exists(startTokenId), 'ERC721A: token already minted'); require(quantity > 0, 'ERC721A: quantity must be greater than 0'); _beforeTokenTransfers(address(0), to, startTokenId, quantity); _addressData[to].balance += uint128(quantity); _addressData[to].numberMinted += uint128(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; for (uint256 i = 0; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); if (safe) { require( _checkOnERC721Received(address(0), to, updatedIndex, _data), 'ERC721A: transfer to non ERC721Receiver implementer' ); } updatedIndex++; } currentIndex = updatedIndex; _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * 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 ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require(isApprovedOrOwner, 'ERC721A: transfer caller is not owner nor approved'); require(prevOwnership.addr == from, 'ERC721A: transfer from incorrect owner'); require(to != address(0), 'ERC721A: transfer to the zero address'); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; } _ownerships[tokenId].addr = to; _ownerships[tokenId].startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp; } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, 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(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert('ERC721A: transfer to non ERC721Receiver implementer'); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * 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`. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } contract Doodle_Ape_Planet is ERC721A { mapping (address => uint8) public _minted; uint public salePrice; uint public reachedCapPrice; uint16 public maxSupply; uint8 public maxPerTx; uint8 public maxPerWallet; bool public publicMintStatus; string public baseURI; address private owner; function _baseURI() internal view override returns (string memory) { return baseURI; } function setBaseURI(string memory _newBaseURI) external onlyOwner { baseURI = _newBaseURI; } function setSalePrice(uint price) external onlyOwner { salePrice = price; } function setReachedCapPrice(uint price) external onlyOwner { reachedCapPrice = price; } function setMaxSupply(uint16 supply) external onlyOwner { maxSupply = supply; } function setMaxPerTx(uint8 max) external onlyOwner { maxPerTx = max; } function setMaxPerWallet(uint8 max) external onlyOwner { maxPerWallet = max; } function setPublicMintStatus() external onlyOwner { publicMintStatus = !publicMintStatus; } function withdraw() external onlyOwner { payable(msg.sender).transfer(address(this).balance); } modifier onlyOwner { require(owner == msg.sender, "Not the owner!"); _; } function transferOwnership(address newOwner) external onlyOwner { owner = newOwner; } constructor() ERC721A("Doodle Ape Palnet", "DAP") { owner = msg.sender; } function publicMint(uint8 amount) external payable { require(publicMintStatus, "Sale not active!"); require(currentIndex + amount <= maxSupply + 1, "Not enough tokens to sell!"); require(amount <= maxPerTx, "Incorrect amount!"); require(_minted[msg.sender] + amount <= maxPerWallet, "Incorrect amount!"); if(currentIndex + amount > 5000){ require(msg.value == reachedCapPrice * amount, "Incorrect amount!"); _safeMint(msg.sender, amount); _minted[msg.sender] += amount; }else{ require(msg.value == salePrice * amount, "Incorrect amount!"); _safeMint(msg.sender, amount); _minted[msg.sender] += amount; } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_minted","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":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"maxPerTx","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWallet","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"amount","type":"uint8"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicMintStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reachedCapPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"salePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"max","type":"uint8"}],"name":"setMaxPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"max","type":"uint8"}],"name":"setMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"supply","type":"uint16"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPublicMintStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setReachedCapPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setSalePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260016000553480156200001657600080fd5b506040518060400160405280601181526020017f446f6f646c65204170652050616c6e65740000000000000000000000000000008152506040518060400160405280600381526020017f444150000000000000000000000000000000000000000000000000000000000081525081600190805190602001906200009b929190620000fe565b508060029080519060200190620000b4929190620000fe565b50505033600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000213565b8280546200010c90620001dd565b90600052602060002090601f0160209004810192826200013057600085556200017c565b82601f106200014b57805160ff19168380011785556200017c565b828001600101855582156200017c579182015b828111156200017b5782518255916020019190600101906200015e565b5b5090506200018b91906200018f565b5090565b5b80821115620001aa57600081600090555060010162000190565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620001f657607f821691505b602082108114156200020d576200020c620001ae565b5b50919050565b6145d380620002236000396000f3fe6080604052600436106101f95760003560e01c80636c0360eb1161010d578063b88d4fde116100a0578063d5abeb011161006f578063d5abeb0114610720578063e985e9c51461074b578063f2fde38b14610788578063f51f96dd146107b1578063f968adbe146107dc576101f9565b8063b88d4fde1461067a578063b8da5561146106a3578063c219c2ef146106cc578063c87b56dd146106e3576101f9565b8063858e83b5116100dc578063858e83b5146105e157806395d89b41146105fd578063a22cb46514610628578063abf08ae114610651576101f9565b80636c0360eb146105135780636e34c7961461053e57806370a08231146105675780637de77ecc146105a4576101f9565b80632620237011610190578063453c23101161015f578063453c23101461041a5780634f6ccce71461044557806355f804b3146104825780636352211e146104ab57806367ede142146104e8576101f9565b806326202370146103725780632f745c591461039d5780633ccfd60b146103da57806342842e0e146103f1576101f9565b8063095ea7b3116101cc578063095ea7b3146102cc57806318160ddd146102f55780631919fed71461032057806323b872dd14610349576101f9565b806301ffc9a7146101fe57806306421c2f1461023b57806306fdde0314610264578063081812fc1461028f575b600080fd5b34801561020a57600080fd5b5061022560048036038101906102209190612e6a565b610807565b6040516102329190612eb2565b60405180910390f35b34801561024757600080fd5b50610262600480360381019061025d9190612f07565b610951565b005b34801561027057600080fd5b50610279610a01565b6040516102869190612fcd565b60405180910390f35b34801561029b57600080fd5b506102b660048036038101906102b19190613025565b610a93565b6040516102c39190613093565b60405180910390f35b3480156102d857600080fd5b506102f360048036038101906102ee91906130da565b610b18565b005b34801561030157600080fd5b5061030a610c31565b6040516103179190613129565b60405180910390f35b34801561032c57600080fd5b5061034760048036038101906103429190613025565b610c3a565b005b34801561035557600080fd5b50610370600480360381019061036b9190613144565b610cd4565b005b34801561037e57600080fd5b50610387610ce4565b6040516103949190612eb2565b60405180910390f35b3480156103a957600080fd5b506103c460048036038101906103bf91906130da565b610cf7565b6040516103d19190613129565b60405180910390f35b3480156103e657600080fd5b506103ef610ef5565b005b3480156103fd57600080fd5b5061041860048036038101906104139190613144565b610fce565b005b34801561042657600080fd5b5061042f610fee565b60405161043c91906131b3565b60405180910390f35b34801561045157600080fd5b5061046c60048036038101906104679190613025565b611001565b6040516104799190613129565b60405180910390f35b34801561048e57600080fd5b506104a960048036038101906104a49190613303565b611054565b005b3480156104b757600080fd5b506104d260048036038101906104cd9190613025565b6110fe565b6040516104df9190613093565b60405180910390f35b3480156104f457600080fd5b506104fd611114565b60405161050a9190613129565b60405180910390f35b34801561051f57600080fd5b5061052861111a565b6040516105359190612fcd565b60405180910390f35b34801561054a57600080fd5b5061056560048036038101906105609190613378565b6111a8565b005b34801561057357600080fd5b5061058e600480360381019061058991906133a5565b611256565b60405161059b9190613129565b60405180910390f35b3480156105b057600080fd5b506105cb60048036038101906105c691906133a5565b61133f565b6040516105d891906131b3565b60405180910390f35b6105fb60048036038101906105f69190613378565b61135f565b005b34801561060957600080fd5b506106126116ef565b60405161061f9190612fcd565b60405180910390f35b34801561063457600080fd5b5061064f600480360381019061064a91906133fe565b611781565b005b34801561065d57600080fd5b5061067860048036038101906106739190613378565b611902565b005b34801561068657600080fd5b506106a1600480360381019061069c91906134df565b6119b0565b005b3480156106af57600080fd5b506106ca60048036038101906106c59190613025565b611a0c565b005b3480156106d857600080fd5b506106e1611aa6565b005b3480156106ef57600080fd5b5061070a60048036038101906107059190613025565b611b62565b6040516107179190612fcd565b60405180910390f35b34801561072c57600080fd5b50610735611c09565b6040516107429190613571565b60405180910390f35b34801561075757600080fd5b50610772600480360381019061076d919061358c565b611c1d565b60405161077f9190612eb2565b60405180910390f35b34801561079457600080fd5b506107af60048036038101906107aa91906133a5565b611cb1565b005b3480156107bd57600080fd5b506107c6611d85565b6040516107d39190613129565b60405180910390f35b3480156107e857600080fd5b506107f1611d8b565b6040516107fe91906131b3565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108d257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061093a57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061094a575061094982611d9e565b5b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d890613618565b60405180910390fd5b80600a60006101000a81548161ffff021916908361ffff16021790555050565b606060018054610a1090613667565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3c90613667565b8015610a895780601f10610a5e57610100808354040283529160200191610a89565b820191906000526020600020905b815481529060010190602001808311610a6c57829003601f168201915b5050505050905090565b6000610a9e82611e08565b610add576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad49061370b565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b23826110fe565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8b9061379d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bb3611e15565b73ffffffffffffffffffffffffffffffffffffffff161480610be25750610be181610bdc611e15565b611c1d565b5b610c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c189061382f565b60405180910390fd5b610c2c838383611e1d565b505050565b60008054905090565b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc190613618565b60405180910390fd5b8060088190555050565b610cdf838383611ecf565b505050565b600a60049054906101000a900460ff1681565b6000610d0283611256565b8210610d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3a906138c1565b60405180910390fd5b6000610d4d610c31565b905060008060005b83811015610eb3576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610e4757806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e9f5786841415610e90578195505050505050610eef565b8380610e9b90613910565b9450505b508080610eab90613910565b915050610d55565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee6906139cb565b60405180910390fd5b92915050565b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7c90613618565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610fcb573d6000803e3d6000fd5b50565b610fe9838383604051806020016040528060008152506119b0565b505050565b600a60039054906101000a900460ff1681565b600061100b610c31565b821061104c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104390613a5d565b60405180910390fd5b819050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110db90613618565b60405180910390fd5b80600b90805190602001906110fa929190612d21565b5050565b600061110982612418565b600001519050919050565b60095481565b600b805461112790613667565b80601f016020809104026020016040519081016040528092919081815260200182805461115390613667565b80156111a05780601f10611175576101008083540402835291602001916111a0565b820191906000526020600020905b81548152906001019060200180831161118357829003601f168201915b505050505081565b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122f90613618565b60405180910390fd5b80600a60026101000a81548160ff021916908360ff16021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112be90613aef565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60076020528060005260406000206000915054906101000a900460ff1681565b600a60049054906101000a900460ff166113ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a590613b5b565b60405180910390fd5b6001600a60009054906101000a900461ffff166113cb9190613b7b565b61ffff168160ff166000546113e09190613bb3565b1115611421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141890613c55565b60405180910390fd5b600a60029054906101000a900460ff1660ff168160ff161115611479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147090613cc1565b60405180910390fd5b600a60039054906101000a900460ff1660ff1681600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166114e49190613ce1565b60ff161115611528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151f90613cc1565b60405180910390fd5b6113888160ff1660005461153c9190613bb3565b1115611619578060ff166009546115539190613d18565b3414611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158b90613cc1565b60405180910390fd5b6115a1338260ff16612573565b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a900460ff166115fc9190613ce1565b92506101000a81548160ff021916908360ff1602179055506116ec565b8060ff1660085461162a9190613d18565b341461166b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166290613cc1565b60405180910390fd5b611678338260ff16612573565b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a900460ff166116d39190613ce1565b92506101000a81548160ff021916908360ff1602179055505b50565b6060600280546116fe90613667565b80601f016020809104026020016040519081016040528092919081815260200182805461172a90613667565b80156117775780601f1061174c57610100808354040283529160200191611777565b820191906000526020600020905b81548152906001019060200180831161175a57829003601f168201915b5050505050905090565b611789611e15565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ee90613dbe565b60405180910390fd5b8060066000611804611e15565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118b1611e15565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118f69190612eb2565b60405180910390a35050565b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611992576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198990613618565b60405180910390fd5b80600a60036101000a81548160ff021916908360ff16021790555050565b6119bb848484611ecf565b6119c784848484612591565b611a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fd90613e50565b60405180910390fd5b50505050565b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9390613618565b60405180910390fd5b8060098190555050565b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2d90613618565b60405180910390fd5b600a60049054906101000a900460ff1615600a60046101000a81548160ff021916908315150217905550565b6060611b6d82611e08565b611bac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba390613ee2565b60405180910390fd5b6000611bb6612719565b90506000815111611bd65760405180602001604052806000815250611c01565b80611be0846127ab565b604051602001611bf1929190613f3e565b6040516020818303038152906040525b915050919050565b600a60009054906101000a900461ffff1681565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3890613618565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b600a60029054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611eda82612418565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611f01611e15565b73ffffffffffffffffffffffffffffffffffffffff161480611f5d5750611f26611e15565b73ffffffffffffffffffffffffffffffffffffffff16611f4584610a93565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f795750611f788260000151611f73611e15565b611c1d565b5b905080611fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb290613fd4565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461202d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202490614066565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561209d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612094906140f8565b60405180910390fd5b6120aa858585600161290c565b6120ba6000848460000151611e1d565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001846122919190613bb3565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156123a85761230781611e08565b156123a75782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124108686866001612912565b505050505050565b612420612da7565b61242982611e08565b612468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245f9061418a565b60405180910390fd5b60008290505b6000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461255a57809250505061256e565b508080612566906141aa565b91505061246e565b919050565b61258d828260405180602001604052806000815250612918565b5050565b60006125b28473ffffffffffffffffffffffffffffffffffffffff1661292a565b1561270c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026125db611e15565b8786866040518563ffffffff1660e01b81526004016125fd9493929190614229565b6020604051808303816000875af192505050801561263957506040513d601f19601f82011682018060405250810190612636919061428a565b60015b6126bc573d8060008114612669576040519150601f19603f3d011682016040523d82523d6000602084013e61266e565b606091505b506000815114156126b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ab90613e50565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612711565b600190505b949350505050565b6060600b805461272890613667565b80601f016020809104026020016040519081016040528092919081815260200182805461275490613667565b80156127a15780601f10612776576101008083540402835291602001916127a1565b820191906000526020600020905b81548152906001019060200180831161278457829003601f168201915b5050505050905090565b606060008214156127f3576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612907565b600082905060005b6000821461282557808061280e90613910565b915050600a8261281e91906142e6565b91506127fb565b60008167ffffffffffffffff811115612841576128406131d8565b5b6040519080825280601f01601f1916602001820160405280156128735781602001600182028036833780820191505090505b5090505b600085146129005760018261288c9190614317565b9150600a8561289b919061434b565b60306128a79190613bb3565b60f81b8183815181106128bd576128bc61437c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128f991906142e6565b9450612877565b8093505050505b919050565b50505050565b50505050565b612925838383600161293d565b505050565b600080823b905060008111915050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156129b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129aa9061441d565b60405180910390fd5b6129bc81611e08565b156129fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f390614489565b60405180910390fd5b60008411612a3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a369061451b565b60405180910390fd5b612a4c600086838761290c565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612ab99190614557565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff16612b5c9190614557565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015612d0457818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315612ce357612ca36000888488612591565b612ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd990613e50565b60405180910390fd5b5b8180612cee90613910565b9250508080612cfc90613910565b915050612c2c565b5080600081905550612d196000878488612912565b505050505050565b828054612d2d90613667565b90600052602060002090601f016020900481019282612d4f5760008555612d96565b82601f10612d6857805160ff1916838001178555612d96565b82800160010185558215612d96579182015b82811115612d95578251825591602001919060010190612d7a565b5b509050612da39190612de1565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612dfa576000816000905550600101612de2565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612e4781612e12565b8114612e5257600080fd5b50565b600081359050612e6481612e3e565b92915050565b600060208284031215612e8057612e7f612e08565b5b6000612e8e84828501612e55565b91505092915050565b60008115159050919050565b612eac81612e97565b82525050565b6000602082019050612ec76000830184612ea3565b92915050565b600061ffff82169050919050565b612ee481612ecd565b8114612eef57600080fd5b50565b600081359050612f0181612edb565b92915050565b600060208284031215612f1d57612f1c612e08565b5b6000612f2b84828501612ef2565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f6e578082015181840152602081019050612f53565b83811115612f7d576000848401525b50505050565b6000601f19601f8301169050919050565b6000612f9f82612f34565b612fa98185612f3f565b9350612fb9818560208601612f50565b612fc281612f83565b840191505092915050565b60006020820190508181036000830152612fe78184612f94565b905092915050565b6000819050919050565b61300281612fef565b811461300d57600080fd5b50565b60008135905061301f81612ff9565b92915050565b60006020828403121561303b5761303a612e08565b5b600061304984828501613010565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061307d82613052565b9050919050565b61308d81613072565b82525050565b60006020820190506130a86000830184613084565b92915050565b6130b781613072565b81146130c257600080fd5b50565b6000813590506130d4816130ae565b92915050565b600080604083850312156130f1576130f0612e08565b5b60006130ff858286016130c5565b925050602061311085828601613010565b9150509250929050565b61312381612fef565b82525050565b600060208201905061313e600083018461311a565b92915050565b60008060006060848603121561315d5761315c612e08565b5b600061316b868287016130c5565b935050602061317c868287016130c5565b925050604061318d86828701613010565b9150509250925092565b600060ff82169050919050565b6131ad81613197565b82525050565b60006020820190506131c860008301846131a4565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61321082612f83565b810181811067ffffffffffffffff8211171561322f5761322e6131d8565b5b80604052505050565b6000613242612dfe565b905061324e8282613207565b919050565b600067ffffffffffffffff82111561326e5761326d6131d8565b5b61327782612f83565b9050602081019050919050565b82818337600083830152505050565b60006132a66132a184613253565b613238565b9050828152602081018484840111156132c2576132c16131d3565b5b6132cd848285613284565b509392505050565b600082601f8301126132ea576132e96131ce565b5b81356132fa848260208601613293565b91505092915050565b60006020828403121561331957613318612e08565b5b600082013567ffffffffffffffff81111561333757613336612e0d565b5b613343848285016132d5565b91505092915050565b61335581613197565b811461336057600080fd5b50565b6000813590506133728161334c565b92915050565b60006020828403121561338e5761338d612e08565b5b600061339c84828501613363565b91505092915050565b6000602082840312156133bb576133ba612e08565b5b60006133c9848285016130c5565b91505092915050565b6133db81612e97565b81146133e657600080fd5b50565b6000813590506133f8816133d2565b92915050565b6000806040838503121561341557613414612e08565b5b6000613423858286016130c5565b9250506020613434858286016133e9565b9150509250929050565b600067ffffffffffffffff821115613459576134586131d8565b5b61346282612f83565b9050602081019050919050565b600061348261347d8461343e565b613238565b90508281526020810184848401111561349e5761349d6131d3565b5b6134a9848285613284565b509392505050565b600082601f8301126134c6576134c56131ce565b5b81356134d684826020860161346f565b91505092915050565b600080600080608085870312156134f9576134f8612e08565b5b6000613507878288016130c5565b9450506020613518878288016130c5565b935050604061352987828801613010565b925050606085013567ffffffffffffffff81111561354a57613549612e0d565b5b613556878288016134b1565b91505092959194509250565b61356b81612ecd565b82525050565b60006020820190506135866000830184613562565b92915050565b600080604083850312156135a3576135a2612e08565b5b60006135b1858286016130c5565b92505060206135c2858286016130c5565b9150509250929050565b7f4e6f7420746865206f776e657221000000000000000000000000000000000000600082015250565b6000613602600e83612f3f565b915061360d826135cc565b602082019050919050565b60006020820190508181036000830152613631816135f5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061367f57607f821691505b6020821081141561369357613692613638565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b60006136f5602d83612f3f565b915061370082613699565b604082019050919050565b60006020820190508181036000830152613724816136e8565b9050919050565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b6000613787602283612f3f565b91506137928261372b565b604082019050919050565b600060208201905081810360008301526137b68161377a565b9050919050565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b6000613819603983612f3f565b9150613824826137bd565b604082019050919050565b600060208201905081810360008301526138488161380c565b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b60006138ab602283612f3f565b91506138b68261384f565b604082019050919050565b600060208201905081810360008301526138da8161389e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061391b82612fef565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561394e5761394d6138e1565b5b600182019050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b60006139b5602e83612f3f565b91506139c082613959565b604082019050919050565b600060208201905081810360008301526139e4816139a8565b9050919050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b6000613a47602383612f3f565b9150613a52826139eb565b604082019050919050565b60006020820190508181036000830152613a7681613a3a565b9050919050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613ad9602b83612f3f565b9150613ae482613a7d565b604082019050919050565b60006020820190508181036000830152613b0881613acc565b9050919050565b7f53616c65206e6f74206163746976652100000000000000000000000000000000600082015250565b6000613b45601083612f3f565b9150613b5082613b0f565b602082019050919050565b60006020820190508181036000830152613b7481613b38565b9050919050565b6000613b8682612ecd565b9150613b9183612ecd565b92508261ffff03821115613ba857613ba76138e1565b5b828201905092915050565b6000613bbe82612fef565b9150613bc983612fef565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613bfe57613bfd6138e1565b5b828201905092915050565b7f4e6f7420656e6f75676820746f6b656e7320746f2073656c6c21000000000000600082015250565b6000613c3f601a83612f3f565b9150613c4a82613c09565b602082019050919050565b60006020820190508181036000830152613c6e81613c32565b9050919050565b7f496e636f727265637420616d6f756e7421000000000000000000000000000000600082015250565b6000613cab601183612f3f565b9150613cb682613c75565b602082019050919050565b60006020820190508181036000830152613cda81613c9e565b9050919050565b6000613cec82613197565b9150613cf783613197565b92508260ff03821115613d0d57613d0c6138e1565b5b828201905092915050565b6000613d2382612fef565b9150613d2e83612fef565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d6757613d666138e1565b5b828202905092915050565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b6000613da8601a83612f3f565b9150613db382613d72565b602082019050919050565b60006020820190508181036000830152613dd781613d9b565b9050919050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b6000613e3a603383612f3f565b9150613e4582613dde565b604082019050919050565b60006020820190508181036000830152613e6981613e2d565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613ecc602f83612f3f565b9150613ed782613e70565b604082019050919050565b60006020820190508181036000830152613efb81613ebf565b9050919050565b600081905092915050565b6000613f1882612f34565b613f228185613f02565b9350613f32818560208601612f50565b80840191505092915050565b6000613f4a8285613f0d565b9150613f568284613f0d565b91508190509392505050565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000613fbe603283612f3f565b9150613fc982613f62565b604082019050919050565b60006020820190508181036000830152613fed81613fb1565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b6000614050602683612f3f565b915061405b82613ff4565b604082019050919050565b6000602082019050818103600083015261407f81614043565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006140e2602583612f3f565b91506140ed82614086565b604082019050919050565b60006020820190508181036000830152614111816140d5565b9050919050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b6000614174602a83612f3f565b915061417f82614118565b604082019050919050565b600060208201905081810360008301526141a381614167565b9050919050565b60006141b582612fef565b915060008214156141c9576141c86138e1565b5b600182039050919050565b600081519050919050565b600082825260208201905092915050565b60006141fb826141d4565b61420581856141df565b9350614215818560208601612f50565b61421e81612f83565b840191505092915050565b600060808201905061423e6000830187613084565b61424b6020830186613084565b614258604083018561311a565b818103606083015261426a81846141f0565b905095945050505050565b60008151905061428481612e3e565b92915050565b6000602082840312156142a05761429f612e08565b5b60006142ae84828501614275565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006142f182612fef565b91506142fc83612fef565b92508261430c5761430b6142b7565b5b828204905092915050565b600061432282612fef565b915061432d83612fef565b9250828210156143405761433f6138e1565b5b828203905092915050565b600061435682612fef565b915061436183612fef565b925082614371576143706142b7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614407602183612f3f565b9150614412826143ab565b604082019050919050565b60006020820190508181036000830152614436816143fa565b9050919050565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b6000614473601d83612f3f565b915061447e8261443d565b602082019050919050565b600060208201905081810360008301526144a281614466565b9050919050565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b6000614505602883612f3f565b9150614510826144a9565b604082019050919050565b60006020820190508181036000830152614534816144f8565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b60006145628261453b565b915061456d8361453b565b9250826fffffffffffffffffffffffffffffffff03821115614592576145916138e1565b5b82820190509291505056fea2646970667358221220f55291fb6e8842f92bb0618643fadd8775a9157261c2607756786115f799bfe164736f6c634300080b0033
Deployed Bytecode
0x6080604052600436106101f95760003560e01c80636c0360eb1161010d578063b88d4fde116100a0578063d5abeb011161006f578063d5abeb0114610720578063e985e9c51461074b578063f2fde38b14610788578063f51f96dd146107b1578063f968adbe146107dc576101f9565b8063b88d4fde1461067a578063b8da5561146106a3578063c219c2ef146106cc578063c87b56dd146106e3576101f9565b8063858e83b5116100dc578063858e83b5146105e157806395d89b41146105fd578063a22cb46514610628578063abf08ae114610651576101f9565b80636c0360eb146105135780636e34c7961461053e57806370a08231146105675780637de77ecc146105a4576101f9565b80632620237011610190578063453c23101161015f578063453c23101461041a5780634f6ccce71461044557806355f804b3146104825780636352211e146104ab57806367ede142146104e8576101f9565b806326202370146103725780632f745c591461039d5780633ccfd60b146103da57806342842e0e146103f1576101f9565b8063095ea7b3116101cc578063095ea7b3146102cc57806318160ddd146102f55780631919fed71461032057806323b872dd14610349576101f9565b806301ffc9a7146101fe57806306421c2f1461023b57806306fdde0314610264578063081812fc1461028f575b600080fd5b34801561020a57600080fd5b5061022560048036038101906102209190612e6a565b610807565b6040516102329190612eb2565b60405180910390f35b34801561024757600080fd5b50610262600480360381019061025d9190612f07565b610951565b005b34801561027057600080fd5b50610279610a01565b6040516102869190612fcd565b60405180910390f35b34801561029b57600080fd5b506102b660048036038101906102b19190613025565b610a93565b6040516102c39190613093565b60405180910390f35b3480156102d857600080fd5b506102f360048036038101906102ee91906130da565b610b18565b005b34801561030157600080fd5b5061030a610c31565b6040516103179190613129565b60405180910390f35b34801561032c57600080fd5b5061034760048036038101906103429190613025565b610c3a565b005b34801561035557600080fd5b50610370600480360381019061036b9190613144565b610cd4565b005b34801561037e57600080fd5b50610387610ce4565b6040516103949190612eb2565b60405180910390f35b3480156103a957600080fd5b506103c460048036038101906103bf91906130da565b610cf7565b6040516103d19190613129565b60405180910390f35b3480156103e657600080fd5b506103ef610ef5565b005b3480156103fd57600080fd5b5061041860048036038101906104139190613144565b610fce565b005b34801561042657600080fd5b5061042f610fee565b60405161043c91906131b3565b60405180910390f35b34801561045157600080fd5b5061046c60048036038101906104679190613025565b611001565b6040516104799190613129565b60405180910390f35b34801561048e57600080fd5b506104a960048036038101906104a49190613303565b611054565b005b3480156104b757600080fd5b506104d260048036038101906104cd9190613025565b6110fe565b6040516104df9190613093565b60405180910390f35b3480156104f457600080fd5b506104fd611114565b60405161050a9190613129565b60405180910390f35b34801561051f57600080fd5b5061052861111a565b6040516105359190612fcd565b60405180910390f35b34801561054a57600080fd5b5061056560048036038101906105609190613378565b6111a8565b005b34801561057357600080fd5b5061058e600480360381019061058991906133a5565b611256565b60405161059b9190613129565b60405180910390f35b3480156105b057600080fd5b506105cb60048036038101906105c691906133a5565b61133f565b6040516105d891906131b3565b60405180910390f35b6105fb60048036038101906105f69190613378565b61135f565b005b34801561060957600080fd5b506106126116ef565b60405161061f9190612fcd565b60405180910390f35b34801561063457600080fd5b5061064f600480360381019061064a91906133fe565b611781565b005b34801561065d57600080fd5b5061067860048036038101906106739190613378565b611902565b005b34801561068657600080fd5b506106a1600480360381019061069c91906134df565b6119b0565b005b3480156106af57600080fd5b506106ca60048036038101906106c59190613025565b611a0c565b005b3480156106d857600080fd5b506106e1611aa6565b005b3480156106ef57600080fd5b5061070a60048036038101906107059190613025565b611b62565b6040516107179190612fcd565b60405180910390f35b34801561072c57600080fd5b50610735611c09565b6040516107429190613571565b60405180910390f35b34801561075757600080fd5b50610772600480360381019061076d919061358c565b611c1d565b60405161077f9190612eb2565b60405180910390f35b34801561079457600080fd5b506107af60048036038101906107aa91906133a5565b611cb1565b005b3480156107bd57600080fd5b506107c6611d85565b6040516107d39190613129565b60405180910390f35b3480156107e857600080fd5b506107f1611d8b565b6040516107fe91906131b3565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108d257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061093a57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061094a575061094982611d9e565b5b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d890613618565b60405180910390fd5b80600a60006101000a81548161ffff021916908361ffff16021790555050565b606060018054610a1090613667565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3c90613667565b8015610a895780601f10610a5e57610100808354040283529160200191610a89565b820191906000526020600020905b815481529060010190602001808311610a6c57829003601f168201915b5050505050905090565b6000610a9e82611e08565b610add576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad49061370b565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b23826110fe565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8b9061379d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bb3611e15565b73ffffffffffffffffffffffffffffffffffffffff161480610be25750610be181610bdc611e15565b611c1d565b5b610c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c189061382f565b60405180910390fd5b610c2c838383611e1d565b505050565b60008054905090565b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc190613618565b60405180910390fd5b8060088190555050565b610cdf838383611ecf565b505050565b600a60049054906101000a900460ff1681565b6000610d0283611256565b8210610d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3a906138c1565b60405180910390fd5b6000610d4d610c31565b905060008060005b83811015610eb3576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610e4757806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e9f5786841415610e90578195505050505050610eef565b8380610e9b90613910565b9450505b508080610eab90613910565b915050610d55565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee6906139cb565b60405180910390fd5b92915050565b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7c90613618565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610fcb573d6000803e3d6000fd5b50565b610fe9838383604051806020016040528060008152506119b0565b505050565b600a60039054906101000a900460ff1681565b600061100b610c31565b821061104c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104390613a5d565b60405180910390fd5b819050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110db90613618565b60405180910390fd5b80600b90805190602001906110fa929190612d21565b5050565b600061110982612418565b600001519050919050565b60095481565b600b805461112790613667565b80601f016020809104026020016040519081016040528092919081815260200182805461115390613667565b80156111a05780601f10611175576101008083540402835291602001916111a0565b820191906000526020600020905b81548152906001019060200180831161118357829003601f168201915b505050505081565b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122f90613618565b60405180910390fd5b80600a60026101000a81548160ff021916908360ff16021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112be90613aef565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60076020528060005260406000206000915054906101000a900460ff1681565b600a60049054906101000a900460ff166113ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a590613b5b565b60405180910390fd5b6001600a60009054906101000a900461ffff166113cb9190613b7b565b61ffff168160ff166000546113e09190613bb3565b1115611421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141890613c55565b60405180910390fd5b600a60029054906101000a900460ff1660ff168160ff161115611479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147090613cc1565b60405180910390fd5b600a60039054906101000a900460ff1660ff1681600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166114e49190613ce1565b60ff161115611528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151f90613cc1565b60405180910390fd5b6113888160ff1660005461153c9190613bb3565b1115611619578060ff166009546115539190613d18565b3414611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158b90613cc1565b60405180910390fd5b6115a1338260ff16612573565b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a900460ff166115fc9190613ce1565b92506101000a81548160ff021916908360ff1602179055506116ec565b8060ff1660085461162a9190613d18565b341461166b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166290613cc1565b60405180910390fd5b611678338260ff16612573565b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a900460ff166116d39190613ce1565b92506101000a81548160ff021916908360ff1602179055505b50565b6060600280546116fe90613667565b80601f016020809104026020016040519081016040528092919081815260200182805461172a90613667565b80156117775780601f1061174c57610100808354040283529160200191611777565b820191906000526020600020905b81548152906001019060200180831161175a57829003601f168201915b5050505050905090565b611789611e15565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ee90613dbe565b60405180910390fd5b8060066000611804611e15565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118b1611e15565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118f69190612eb2565b60405180910390a35050565b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611992576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198990613618565b60405180910390fd5b80600a60036101000a81548160ff021916908360ff16021790555050565b6119bb848484611ecf565b6119c784848484612591565b611a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fd90613e50565b60405180910390fd5b50505050565b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9390613618565b60405180910390fd5b8060098190555050565b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2d90613618565b60405180910390fd5b600a60049054906101000a900460ff1615600a60046101000a81548160ff021916908315150217905550565b6060611b6d82611e08565b611bac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba390613ee2565b60405180910390fd5b6000611bb6612719565b90506000815111611bd65760405180602001604052806000815250611c01565b80611be0846127ab565b604051602001611bf1929190613f3e565b6040516020818303038152906040525b915050919050565b600a60009054906101000a900461ffff1681565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3890613618565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b600a60029054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611eda82612418565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611f01611e15565b73ffffffffffffffffffffffffffffffffffffffff161480611f5d5750611f26611e15565b73ffffffffffffffffffffffffffffffffffffffff16611f4584610a93565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f795750611f788260000151611f73611e15565b611c1d565b5b905080611fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb290613fd4565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461202d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202490614066565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561209d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612094906140f8565b60405180910390fd5b6120aa858585600161290c565b6120ba6000848460000151611e1d565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001846122919190613bb3565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156123a85761230781611e08565b156123a75782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124108686866001612912565b505050505050565b612420612da7565b61242982611e08565b612468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245f9061418a565b60405180910390fd5b60008290505b6000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461255a57809250505061256e565b508080612566906141aa565b91505061246e565b919050565b61258d828260405180602001604052806000815250612918565b5050565b60006125b28473ffffffffffffffffffffffffffffffffffffffff1661292a565b1561270c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026125db611e15565b8786866040518563ffffffff1660e01b81526004016125fd9493929190614229565b6020604051808303816000875af192505050801561263957506040513d601f19601f82011682018060405250810190612636919061428a565b60015b6126bc573d8060008114612669576040519150601f19603f3d011682016040523d82523d6000602084013e61266e565b606091505b506000815114156126b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ab90613e50565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612711565b600190505b949350505050565b6060600b805461272890613667565b80601f016020809104026020016040519081016040528092919081815260200182805461275490613667565b80156127a15780601f10612776576101008083540402835291602001916127a1565b820191906000526020600020905b81548152906001019060200180831161278457829003601f168201915b5050505050905090565b606060008214156127f3576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612907565b600082905060005b6000821461282557808061280e90613910565b915050600a8261281e91906142e6565b91506127fb565b60008167ffffffffffffffff811115612841576128406131d8565b5b6040519080825280601f01601f1916602001820160405280156128735781602001600182028036833780820191505090505b5090505b600085146129005760018261288c9190614317565b9150600a8561289b919061434b565b60306128a79190613bb3565b60f81b8183815181106128bd576128bc61437c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128f991906142e6565b9450612877565b8093505050505b919050565b50505050565b50505050565b612925838383600161293d565b505050565b600080823b905060008111915050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156129b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129aa9061441d565b60405180910390fd5b6129bc81611e08565b156129fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f390614489565b60405180910390fd5b60008411612a3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a369061451b565b60405180910390fd5b612a4c600086838761290c565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612ab99190614557565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff16612b5c9190614557565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015612d0457818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315612ce357612ca36000888488612591565b612ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd990613e50565b60405180910390fd5b5b8180612cee90613910565b9250508080612cfc90613910565b915050612c2c565b5080600081905550612d196000878488612912565b505050505050565b828054612d2d90613667565b90600052602060002090601f016020900481019282612d4f5760008555612d96565b82601f10612d6857805160ff1916838001178555612d96565b82800160010185558215612d96579182015b82811115612d95578251825591602001919060010190612d7a565b5b509050612da39190612de1565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612dfa576000816000905550600101612de2565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612e4781612e12565b8114612e5257600080fd5b50565b600081359050612e6481612e3e565b92915050565b600060208284031215612e8057612e7f612e08565b5b6000612e8e84828501612e55565b91505092915050565b60008115159050919050565b612eac81612e97565b82525050565b6000602082019050612ec76000830184612ea3565b92915050565b600061ffff82169050919050565b612ee481612ecd565b8114612eef57600080fd5b50565b600081359050612f0181612edb565b92915050565b600060208284031215612f1d57612f1c612e08565b5b6000612f2b84828501612ef2565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f6e578082015181840152602081019050612f53565b83811115612f7d576000848401525b50505050565b6000601f19601f8301169050919050565b6000612f9f82612f34565b612fa98185612f3f565b9350612fb9818560208601612f50565b612fc281612f83565b840191505092915050565b60006020820190508181036000830152612fe78184612f94565b905092915050565b6000819050919050565b61300281612fef565b811461300d57600080fd5b50565b60008135905061301f81612ff9565b92915050565b60006020828403121561303b5761303a612e08565b5b600061304984828501613010565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061307d82613052565b9050919050565b61308d81613072565b82525050565b60006020820190506130a86000830184613084565b92915050565b6130b781613072565b81146130c257600080fd5b50565b6000813590506130d4816130ae565b92915050565b600080604083850312156130f1576130f0612e08565b5b60006130ff858286016130c5565b925050602061311085828601613010565b9150509250929050565b61312381612fef565b82525050565b600060208201905061313e600083018461311a565b92915050565b60008060006060848603121561315d5761315c612e08565b5b600061316b868287016130c5565b935050602061317c868287016130c5565b925050604061318d86828701613010565b9150509250925092565b600060ff82169050919050565b6131ad81613197565b82525050565b60006020820190506131c860008301846131a4565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61321082612f83565b810181811067ffffffffffffffff8211171561322f5761322e6131d8565b5b80604052505050565b6000613242612dfe565b905061324e8282613207565b919050565b600067ffffffffffffffff82111561326e5761326d6131d8565b5b61327782612f83565b9050602081019050919050565b82818337600083830152505050565b60006132a66132a184613253565b613238565b9050828152602081018484840111156132c2576132c16131d3565b5b6132cd848285613284565b509392505050565b600082601f8301126132ea576132e96131ce565b5b81356132fa848260208601613293565b91505092915050565b60006020828403121561331957613318612e08565b5b600082013567ffffffffffffffff81111561333757613336612e0d565b5b613343848285016132d5565b91505092915050565b61335581613197565b811461336057600080fd5b50565b6000813590506133728161334c565b92915050565b60006020828403121561338e5761338d612e08565b5b600061339c84828501613363565b91505092915050565b6000602082840312156133bb576133ba612e08565b5b60006133c9848285016130c5565b91505092915050565b6133db81612e97565b81146133e657600080fd5b50565b6000813590506133f8816133d2565b92915050565b6000806040838503121561341557613414612e08565b5b6000613423858286016130c5565b9250506020613434858286016133e9565b9150509250929050565b600067ffffffffffffffff821115613459576134586131d8565b5b61346282612f83565b9050602081019050919050565b600061348261347d8461343e565b613238565b90508281526020810184848401111561349e5761349d6131d3565b5b6134a9848285613284565b509392505050565b600082601f8301126134c6576134c56131ce565b5b81356134d684826020860161346f565b91505092915050565b600080600080608085870312156134f9576134f8612e08565b5b6000613507878288016130c5565b9450506020613518878288016130c5565b935050604061352987828801613010565b925050606085013567ffffffffffffffff81111561354a57613549612e0d565b5b613556878288016134b1565b91505092959194509250565b61356b81612ecd565b82525050565b60006020820190506135866000830184613562565b92915050565b600080604083850312156135a3576135a2612e08565b5b60006135b1858286016130c5565b92505060206135c2858286016130c5565b9150509250929050565b7f4e6f7420746865206f776e657221000000000000000000000000000000000000600082015250565b6000613602600e83612f3f565b915061360d826135cc565b602082019050919050565b60006020820190508181036000830152613631816135f5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061367f57607f821691505b6020821081141561369357613692613638565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b60006136f5602d83612f3f565b915061370082613699565b604082019050919050565b60006020820190508181036000830152613724816136e8565b9050919050565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b6000613787602283612f3f565b91506137928261372b565b604082019050919050565b600060208201905081810360008301526137b68161377a565b9050919050565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b6000613819603983612f3f565b9150613824826137bd565b604082019050919050565b600060208201905081810360008301526138488161380c565b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b60006138ab602283612f3f565b91506138b68261384f565b604082019050919050565b600060208201905081810360008301526138da8161389e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061391b82612fef565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561394e5761394d6138e1565b5b600182019050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b60006139b5602e83612f3f565b91506139c082613959565b604082019050919050565b600060208201905081810360008301526139e4816139a8565b9050919050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b6000613a47602383612f3f565b9150613a52826139eb565b604082019050919050565b60006020820190508181036000830152613a7681613a3a565b9050919050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613ad9602b83612f3f565b9150613ae482613a7d565b604082019050919050565b60006020820190508181036000830152613b0881613acc565b9050919050565b7f53616c65206e6f74206163746976652100000000000000000000000000000000600082015250565b6000613b45601083612f3f565b9150613b5082613b0f565b602082019050919050565b60006020820190508181036000830152613b7481613b38565b9050919050565b6000613b8682612ecd565b9150613b9183612ecd565b92508261ffff03821115613ba857613ba76138e1565b5b828201905092915050565b6000613bbe82612fef565b9150613bc983612fef565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613bfe57613bfd6138e1565b5b828201905092915050565b7f4e6f7420656e6f75676820746f6b656e7320746f2073656c6c21000000000000600082015250565b6000613c3f601a83612f3f565b9150613c4a82613c09565b602082019050919050565b60006020820190508181036000830152613c6e81613c32565b9050919050565b7f496e636f727265637420616d6f756e7421000000000000000000000000000000600082015250565b6000613cab601183612f3f565b9150613cb682613c75565b602082019050919050565b60006020820190508181036000830152613cda81613c9e565b9050919050565b6000613cec82613197565b9150613cf783613197565b92508260ff03821115613d0d57613d0c6138e1565b5b828201905092915050565b6000613d2382612fef565b9150613d2e83612fef565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d6757613d666138e1565b5b828202905092915050565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b6000613da8601a83612f3f565b9150613db382613d72565b602082019050919050565b60006020820190508181036000830152613dd781613d9b565b9050919050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b6000613e3a603383612f3f565b9150613e4582613dde565b604082019050919050565b60006020820190508181036000830152613e6981613e2d565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613ecc602f83612f3f565b9150613ed782613e70565b604082019050919050565b60006020820190508181036000830152613efb81613ebf565b9050919050565b600081905092915050565b6000613f1882612f34565b613f228185613f02565b9350613f32818560208601612f50565b80840191505092915050565b6000613f4a8285613f0d565b9150613f568284613f0d565b91508190509392505050565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000613fbe603283612f3f565b9150613fc982613f62565b604082019050919050565b60006020820190508181036000830152613fed81613fb1565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b6000614050602683612f3f565b915061405b82613ff4565b604082019050919050565b6000602082019050818103600083015261407f81614043565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006140e2602583612f3f565b91506140ed82614086565b604082019050919050565b60006020820190508181036000830152614111816140d5565b9050919050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b6000614174602a83612f3f565b915061417f82614118565b604082019050919050565b600060208201905081810360008301526141a381614167565b9050919050565b60006141b582612fef565b915060008214156141c9576141c86138e1565b5b600182039050919050565b600081519050919050565b600082825260208201905092915050565b60006141fb826141d4565b61420581856141df565b9350614215818560208601612f50565b61421e81612f83565b840191505092915050565b600060808201905061423e6000830187613084565b61424b6020830186613084565b614258604083018561311a565b818103606083015261426a81846141f0565b905095945050505050565b60008151905061428481612e3e565b92915050565b6000602082840312156142a05761429f612e08565b5b60006142ae84828501614275565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006142f182612fef565b91506142fc83612fef565b92508261430c5761430b6142b7565b5b828204905092915050565b600061432282612fef565b915061432d83612fef565b9250828210156143405761433f6138e1565b5b828203905092915050565b600061435682612fef565b915061436183612fef565b925082614371576143706142b7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614407602183612f3f565b9150614412826143ab565b604082019050919050565b60006020820190508181036000830152614436816143fa565b9050919050565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b6000614473601d83612f3f565b915061447e8261443d565b602082019050919050565b600060208201905081810360008301526144a281614466565b9050919050565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b6000614505602883612f3f565b9150614510826144a9565b604082019050919050565b60006020820190508181036000830152614534816144f8565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b60006145628261453b565b915061456d8361453b565b9250826fffffffffffffffffffffffffffffffff03821115614592576145916138e1565b5b82820190509291505056fea2646970667358221220f55291fb6e8842f92bb0618643fadd8775a9157261c2607756786115f799bfe164736f6c634300080b0033
Deployed Bytecode Sourcemap
35938:2365:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23152:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36718:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24973:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26534:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26055:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21593:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36512:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27410:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36189:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22257:823;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37126:109;;;;;;;;;;;;;:::i;:::-;;27643:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36155:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21770:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36398:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24782:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36063:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36226:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36821:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23588:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35985:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37549:751;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25142:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26820:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36913:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27891:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36609:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37013:105;;;;;;;;;;;;;:::i;:::-;;25317:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36097:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27179:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37347:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36035:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36127;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23152:372;23254:4;23306:25;23291:40;;;:11;:40;;;;:105;;;;23363:33;23348:48;;;:11;:48;;;;23291:105;:172;;;;23428:35;23413:50;;;:11;:50;;;;23291:172;:225;;;;23480:36;23504:11;23480:23;:36::i;:::-;23291:225;23271:245;;23152:372;;;:::o;36718:93::-;37290:10;37281:19;;:5;;;;;;;;;;;:19;;;37273:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;36797:6:::1;36785:9;;:18;;;;;;;;;;;;;;;;;;36718:93:::0;:::o;24973:100::-;25027:13;25060:5;25053:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24973:100;:::o;26534:214::-;26602:7;26630:16;26638:7;26630;:16::i;:::-;26622:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26716:15;:24;26732:7;26716:24;;;;;;;;;;;;;;;;;;;;;26709:31;;26534:214;;;:::o;26055:413::-;26128:13;26144:24;26160:7;26144:15;:24::i;:::-;26128:40;;26193:5;26187:11;;:2;:11;;;;26179:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;26288:5;26272:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26297:37;26314:5;26321:12;:10;:12::i;:::-;26297:16;:37::i;:::-;26272:62;26250:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;26432:28;26441:2;26445:7;26454:5;26432:8;:28::i;:::-;26117:351;26055:413;;:::o;21593:100::-;21646:7;21673:12;;21666:19;;21593:100;:::o;36512:89::-;37290:10;37281:19;;:5;;;;;;;;;;;:19;;;37273:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;36588:5:::1;36576:9;:17;;;;36512:89:::0;:::o;27410:162::-;27536:28;27546:4;27552:2;27556:7;27536:9;:28::i;:::-;27410:162;;;:::o;36189:28::-;;;;;;;;;;;;;:::o;22257:823::-;22346:7;22382:16;22392:5;22382:9;:16::i;:::-;22374:5;:24;22366:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;22448:22;22473:13;:11;:13::i;:::-;22448:38;;22497:19;22531:25;22585:9;22580:426;22604:14;22600:1;:18;22580:426;;;22640:31;22674:11;:14;22686:1;22674:14;;;;;;;;;;;22640:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22733:1;22707:28;;:9;:14;;;:28;;;22703:103;;22776:9;:14;;;22756:34;;22703:103;22845:5;22824:26;;:17;:26;;;22820:175;;;22890:5;22875:11;:20;22871:77;;;22927:1;22920:8;;;;;;;;;22871:77;22966:13;;;;;:::i;:::-;;;;22820:175;22625:381;22620:3;;;;;:::i;:::-;;;;22580:426;;;;23016:56;;;;;;;;;;:::i;:::-;;;;;;;;22257:823;;;;;:::o;37126:109::-;37290:10;37281:19;;:5;;;;;;;;;;;:19;;;37273:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;37184:10:::1;37176:28;;:51;37205:21;37176:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;37126:109::o:0;27643:177::-;27773:39;27790:4;27796:2;27800:7;27773:39;;;;;;;;;;;;:16;:39::i;:::-;27643:177;;;:::o;36155:25::-;;;;;;;;;;;;;:::o;21770:187::-;21837:7;21873:13;:11;:13::i;:::-;21865:5;:21;21857:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;21944:5;21937:12;;21770:187;;;:::o;36398:106::-;37290:10;37281:19;;:5;;;;;;;;;;;:19;;;37273:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;36485:11:::1;36475:7;:21;;;;;;;;;;;;:::i;:::-;;36398:106:::0;:::o;24782:124::-;24846:7;24873:20;24885:7;24873:11;:20::i;:::-;:25;;;24866:32;;24782:124;;;:::o;36063:27::-;;;;:::o;36226:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;36821:84::-;37290:10;37281:19;;:5;;;;;;;;;;;:19;;;37273:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;36894:3:::1;36883:8;;:14;;;;;;;;;;;;;;;;;;36821:84:::0;:::o;23588:221::-;23652:7;23697:1;23680:19;;:5;:19;;;;23672:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;23773:12;:19;23786:5;23773:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;23765:36;;23758:43;;23588:221;;;:::o;35985:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;37549:751::-;37619:16;;;;;;;;;;;37611:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;37712:1;37700:9;;;;;;;;;;;:13;;;;:::i;:::-;37675:38;;37690:6;37675:21;;:12;;:21;;;;:::i;:::-;:38;;37667:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;37773:8;;;;;;;;;;;37763:18;;:6;:18;;;;37755:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;37854:12;;;;;;;;;;;37822:44;;37844:6;37822:7;:19;37830:10;37822:19;;;;;;;;;;;;;;;;;;;;;;;;;:28;;;;:::i;:::-;:44;;;;37814:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;37926:4;37917:6;37902:21;;:12;;:21;;;;:::i;:::-;:28;37899:394;;;37985:6;37967:24;;:15;;:24;;;;:::i;:::-;37954:9;:37;37946:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38028:29;38038:10;38050:6;38028:29;;:9;:29::i;:::-;38095:6;38072:7;:19;38080:10;38072:19;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;37899:394;;;38165:6;38153:18;;:9;;:18;;;;:::i;:::-;38140:9;:31;38132:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;38208:29;38218:10;38230:6;38208:29;;:9;:29::i;:::-;38275:6;38252:7;:19;38260:10;38252:19;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;37899:394;37549:751;:::o;25142:104::-;25198:13;25231:7;25224:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25142:104;:::o;26820:288::-;26927:12;:10;:12::i;:::-;26915:24;;:8;:24;;;;26907:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;27028:8;26983:18;:32;27002:12;:10;:12::i;:::-;26983:32;;;;;;;;;;;;;;;:42;27016:8;26983:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;27081:8;27052:48;;27067:12;:10;:12::i;:::-;27052:48;;;27091:8;27052:48;;;;;;:::i;:::-;;;;;;;;26820:288;;:::o;36913:92::-;37290:10;37281:19;;:5;;;;;;;;;;;:19;;;37273:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;36994:3:::1;36979:12;;:18;;;;;;;;;;;;;;;;;;36913:92:::0;:::o;27891:355::-;28050:28;28060:4;28066:2;28070:7;28050:9;:28::i;:::-;28111:48;28134:4;28140:2;28144:7;28153:5;28111:22;:48::i;:::-;28089:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;27891:355;;;;:::o;36609:101::-;37290:10;37281:19;;:5;;;;;;;;;;;:19;;;37273:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;36697:5:::1;36679:15;:23;;;;36609:101:::0;:::o;37013:105::-;37290:10;37281:19;;:5;;;;;;;;;;;:19;;;37273:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;37094:16:::1;;;;;;;;;;;37093:17;37074:16;;:36;;;;;;;;;;;;;;;;;;37013:105::o:0;25317:334::-;25390:13;25424:16;25432:7;25424;:16::i;:::-;25416:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25505:21;25529:10;:8;:10::i;:::-;25505:34;;25581:1;25563:7;25557:21;:25;:86;;;;;;;;;;;;;;;;;25609:7;25618:18;:7;:16;:18::i;:::-;25592:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25557:86;25550:93;;;25317:334;;;:::o;36097:23::-;;;;;;;;;;;;;:::o;27179:164::-;27276:4;27300:18;:25;27319:5;27300:25;;;;;;;;;;;;;;;:35;27326:8;27300:35;;;;;;;;;;;;;;;;;;;;;;;;;27293:42;;27179:164;;;;:::o;37347:99::-;37290:10;37281:19;;:5;;;;;;;;;;;:19;;;37273:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;37430:8:::1;37422:5;;:16;;;;;;;;;;;;;;;;;;37347:99:::0;:::o;36035:21::-;;;;:::o;36127:::-;;;;;;;;;;;;;:::o;13124:157::-;13209:4;13248:25;13233:40;;;:11;:40;;;;13226:47;;13124:157;;;:::o;28501:111::-;28558:4;28592:12;;28582:7;:22;28575:29;;28501:111;;;:::o;2588:98::-;2641:7;2668:10;2661:17;;2588:98;:::o;33149:196::-;33291:2;33264:15;:24;33280:7;33264:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33329:7;33325:2;33309:28;;33318:5;33309:28;;;;;;;;;;;;33149:196;;;:::o;31164:1867::-;31279:35;31317:20;31329:7;31317:11;:20::i;:::-;31279:58;;31350:22;31392:13;:18;;;31376:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;31451:12;:10;:12::i;:::-;31427:36;;:20;31439:7;31427:11;:20::i;:::-;:36;;;31376:87;:154;;;;31480:50;31497:13;:18;;;31517:12;:10;:12::i;:::-;31480:16;:50::i;:::-;31376:154;31350:181;;31552:17;31544:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;31667:4;31645:26;;:13;:18;;;:26;;;31637:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;31747:1;31733:16;;:2;:16;;;;31725:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31804:43;31826:4;31832:2;31836:7;31845:1;31804:21;:43::i;:::-;31912:49;31929:1;31933:7;31942:13;:18;;;31912:8;:49::i;:::-;32196:1;32166:12;:18;32179:4;32166:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32240:1;32212:12;:16;32225:2;32212:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32293:2;32265:11;:20;32277:7;32265:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;32351:15;32306:11;:20;32318:7;32306:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;32607:19;32639:1;32629:7;:11;;;;:::i;:::-;32607:33;;32696:1;32655:43;;:11;:24;32667:11;32655:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;32651:275;;;32719:20;32727:11;32719:7;:20::i;:::-;32715:200;;;32792:13;:18;;;32760:11;:24;32772:11;32760:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;32871:13;:28;;;32829:11;:24;32841:11;32829:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;32715:200;32651:275;32962:7;32958:2;32943:27;;32952:4;32943:27;;;;;;;;;;;;32981:42;33002:4;33008:2;33012:7;33021:1;32981:20;:42::i;:::-;31268:1763;;;31164:1867;;;:::o;24248:472::-;24309:21;;:::i;:::-;24351:16;24359:7;24351;:16::i;:::-;24343:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24432:12;24447:7;24432:22;;24427:216;24481:31;24515:11;:17;24527:4;24515:17;;;;;;;;;;;24481:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24577:1;24551:28;;:9;:14;;;:28;;;24547:85;;24607:9;24600:16;;;;;;24547:85;24466:177;24458:6;;;;;:::i;:::-;;;;24427:216;;24248:472;;;;:::o;28620:104::-;28689:27;28699:2;28703:8;28689:27;;;;;;;;;;;;:9;:27::i;:::-;28620:104;;:::o;33910:804::-;34065:4;34086:15;:2;:13;;;:15::i;:::-;34082:625;;;34138:2;34122:36;;;34159:12;:10;:12::i;:::-;34173:4;34179:7;34188:5;34122:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34118:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34385:1;34368:6;:13;:18;34364:273;;;34411:61;;;;;;;;;;:::i;:::-;;;;;;;;34364:273;34587:6;34581:13;34572:6;34568:2;34564:15;34557:38;34118:534;34255:45;;;34245:55;;;:6;:55;;;;34238:62;;;;;34082:625;34691:4;34684:11;;33910:804;;;;;;;:::o;36286:100::-;36338:13;36371:7;36364:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36286:100;:::o;289:723::-;345:13;575:1;566:5;:10;562:53;;;593:10;;;;;;;;;;;;;;;;;;;;;562:53;625:12;640:5;625:20;;656:14;681:78;696:1;688:4;:9;681:78;;714:8;;;;;:::i;:::-;;;;745:2;737:10;;;;;:::i;:::-;;;681:78;;;769:19;801:6;791:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;769:39;;819:154;835:1;826:5;:10;819:154;;863:1;853:11;;;;;:::i;:::-;;;930:2;922:5;:10;;;;:::i;:::-;909:2;:24;;;;:::i;:::-;896:39;;879:6;886;879:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;959:2;950:11;;;;;:::i;:::-;;;819:154;;;997:6;983:21;;;;;289:723;;;;:::o;35202:159::-;;;;;:::o;35773:158::-;;;;;:::o;29087:163::-;29210:32;29216:2;29220:8;29230:5;29237:4;29210:5;:32::i;:::-;29087:163;;;:::o;3483:387::-;3543:4;3751:12;3818:7;3806:20;3798:28;;3861:1;3854:4;:8;3847:15;;;3483:387;;;:::o;29509:1401::-;29648:20;29671:12;;29648:35;;29716:1;29702:16;;:2;:16;;;;29694:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29901:21;29909:12;29901:7;:21::i;:::-;29900:22;29892:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29986:1;29975:8;:12;29967:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30045:61;30075:1;30079:2;30083:12;30097:8;30045:21;:61::i;:::-;30155:8;30119:12;:16;30132:2;30119:16;;;;;;;;;;;;;;;:24;;;:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30216:8;30175:12;:16;30188:2;30175:16;;;;;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30271:2;30238:11;:25;30250:12;30238:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;30334:15;30284:11;:25;30296:12;30284:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;30363:20;30386:12;30363:35;;30416:9;30411:381;30435:8;30431:1;:12;30411:381;;;30495:12;30491:2;30470:38;;30487:1;30470:38;;;;;;;;;;;;30527:4;30523:229;;;30582:59;30613:1;30617:2;30621:12;30635:5;30582:22;:59::i;:::-;30552:184;;;;;;;;;;;;:::i;:::-;;;;;;;;;30523:229;30766:14;;;;;:::i;:::-;;;;30445:3;;;;;:::i;:::-;;;;30411:381;;;;30819:12;30804;:27;;;;30842:60;30871:1;30875:2;30879:12;30893:8;30842:20;:60::i;:::-;29637:1273;;29509:1401;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:89::-;1554:7;1594:6;1587:5;1583:18;1572:29;;1518:89;;;:::o;1613:120::-;1685:23;1702:5;1685:23;:::i;:::-;1678:5;1675:34;1665:62;;1723:1;1720;1713:12;1665:62;1613:120;:::o;1739:137::-;1784:5;1822:6;1809:20;1800:29;;1838:32;1864:5;1838:32;:::i;:::-;1739:137;;;;:::o;1882:327::-;1940:6;1989:2;1977:9;1968:7;1964:23;1960:32;1957:119;;;1995:79;;:::i;:::-;1957:119;2115:1;2140:52;2184:7;2175:6;2164:9;2160:22;2140:52;:::i;:::-;2130:62;;2086:116;1882:327;;;;:::o;2215:99::-;2267:6;2301:5;2295:12;2285:22;;2215:99;;;:::o;2320:169::-;2404:11;2438:6;2433:3;2426:19;2478:4;2473:3;2469:14;2454:29;;2320:169;;;;:::o;2495:307::-;2563:1;2573:113;2587:6;2584:1;2581:13;2573:113;;;2672:1;2667:3;2663:11;2657:18;2653:1;2648:3;2644:11;2637:39;2609:2;2606:1;2602:10;2597:15;;2573:113;;;2704:6;2701:1;2698:13;2695:101;;;2784:1;2775:6;2770:3;2766:16;2759:27;2695:101;2544:258;2495:307;;;:::o;2808:102::-;2849:6;2900:2;2896:7;2891:2;2884:5;2880:14;2876:28;2866:38;;2808:102;;;:::o;2916:364::-;3004:3;3032:39;3065:5;3032:39;:::i;:::-;3087:71;3151:6;3146:3;3087:71;:::i;:::-;3080:78;;3167:52;3212:6;3207:3;3200:4;3193:5;3189:16;3167:52;:::i;:::-;3244:29;3266:6;3244:29;:::i;:::-;3239:3;3235:39;3228:46;;3008:272;2916:364;;;;:::o;3286:313::-;3399:4;3437:2;3426:9;3422:18;3414:26;;3486:9;3480:4;3476:20;3472:1;3461:9;3457:17;3450:47;3514:78;3587:4;3578:6;3514:78;:::i;:::-;3506:86;;3286:313;;;;:::o;3605:77::-;3642:7;3671:5;3660:16;;3605:77;;;:::o;3688:122::-;3761:24;3779:5;3761:24;:::i;:::-;3754:5;3751:35;3741:63;;3800:1;3797;3790:12;3741:63;3688:122;:::o;3816:139::-;3862:5;3900:6;3887:20;3878:29;;3916:33;3943:5;3916:33;:::i;:::-;3816:139;;;;:::o;3961:329::-;4020:6;4069:2;4057:9;4048:7;4044:23;4040:32;4037:119;;;4075:79;;:::i;:::-;4037:119;4195:1;4220:53;4265:7;4256:6;4245:9;4241:22;4220:53;:::i;:::-;4210:63;;4166:117;3961:329;;;;:::o;4296:126::-;4333:7;4373:42;4366:5;4362:54;4351:65;;4296:126;;;:::o;4428:96::-;4465:7;4494:24;4512:5;4494:24;:::i;:::-;4483:35;;4428:96;;;:::o;4530:118::-;4617:24;4635:5;4617:24;:::i;:::-;4612:3;4605:37;4530:118;;:::o;4654:222::-;4747:4;4785:2;4774:9;4770:18;4762:26;;4798:71;4866:1;4855:9;4851:17;4842:6;4798:71;:::i;:::-;4654:222;;;;:::o;4882:122::-;4955:24;4973:5;4955:24;:::i;:::-;4948:5;4945:35;4935:63;;4994:1;4991;4984:12;4935:63;4882:122;:::o;5010:139::-;5056:5;5094:6;5081:20;5072:29;;5110:33;5137:5;5110:33;:::i;:::-;5010:139;;;;:::o;5155:474::-;5223:6;5231;5280:2;5268:9;5259:7;5255:23;5251:32;5248:119;;;5286:79;;:::i;:::-;5248:119;5406:1;5431:53;5476:7;5467:6;5456:9;5452:22;5431:53;:::i;:::-;5421:63;;5377:117;5533:2;5559:53;5604:7;5595:6;5584:9;5580:22;5559:53;:::i;:::-;5549:63;;5504:118;5155:474;;;;;:::o;5635:118::-;5722:24;5740:5;5722:24;:::i;:::-;5717:3;5710:37;5635:118;;:::o;5759:222::-;5852:4;5890:2;5879:9;5875:18;5867:26;;5903:71;5971:1;5960:9;5956:17;5947:6;5903:71;:::i;:::-;5759:222;;;;:::o;5987:619::-;6064:6;6072;6080;6129:2;6117:9;6108:7;6104:23;6100:32;6097:119;;;6135:79;;:::i;:::-;6097:119;6255:1;6280:53;6325:7;6316:6;6305:9;6301:22;6280:53;:::i;:::-;6270:63;;6226:117;6382:2;6408:53;6453:7;6444:6;6433:9;6429:22;6408:53;:::i;:::-;6398:63;;6353:118;6510:2;6536:53;6581:7;6572:6;6561:9;6557:22;6536:53;:::i;:::-;6526:63;;6481:118;5987:619;;;;;:::o;6612:86::-;6647:7;6687:4;6680:5;6676:16;6665:27;;6612:86;;;:::o;6704:112::-;6787:22;6803:5;6787:22;:::i;:::-;6782:3;6775:35;6704:112;;:::o;6822:214::-;6911:4;6949:2;6938:9;6934:18;6926:26;;6962:67;7026:1;7015:9;7011:17;7002:6;6962:67;:::i;:::-;6822:214;;;;:::o;7042:117::-;7151:1;7148;7141:12;7165:117;7274:1;7271;7264:12;7288:180;7336:77;7333:1;7326:88;7433:4;7430:1;7423:15;7457:4;7454:1;7447:15;7474:281;7557:27;7579:4;7557:27;:::i;:::-;7549:6;7545:40;7687:6;7675:10;7672:22;7651:18;7639:10;7636:34;7633:62;7630:88;;;7698:18;;:::i;:::-;7630:88;7738:10;7734:2;7727:22;7517:238;7474:281;;:::o;7761:129::-;7795:6;7822:20;;:::i;:::-;7812:30;;7851:33;7879:4;7871:6;7851:33;:::i;:::-;7761:129;;;:::o;7896:308::-;7958:4;8048:18;8040:6;8037:30;8034:56;;;8070:18;;:::i;:::-;8034:56;8108:29;8130:6;8108:29;:::i;:::-;8100:37;;8192:4;8186;8182:15;8174:23;;7896:308;;;:::o;8210:154::-;8294:6;8289:3;8284;8271:30;8356:1;8347:6;8342:3;8338:16;8331:27;8210:154;;;:::o;8370:412::-;8448:5;8473:66;8489:49;8531:6;8489:49;:::i;:::-;8473:66;:::i;:::-;8464:75;;8562:6;8555:5;8548:21;8600:4;8593:5;8589:16;8638:3;8629:6;8624:3;8620:16;8617:25;8614:112;;;8645:79;;:::i;:::-;8614:112;8735:41;8769:6;8764:3;8759;8735:41;:::i;:::-;8454:328;8370:412;;;;;:::o;8802:340::-;8858:5;8907:3;8900:4;8892:6;8888:17;8884:27;8874:122;;8915:79;;:::i;:::-;8874:122;9032:6;9019:20;9057:79;9132:3;9124:6;9117:4;9109:6;9105:17;9057:79;:::i;:::-;9048:88;;8864:278;8802:340;;;;:::o;9148:509::-;9217:6;9266:2;9254:9;9245:7;9241:23;9237:32;9234:119;;;9272:79;;:::i;:::-;9234:119;9420:1;9409:9;9405:17;9392:31;9450:18;9442:6;9439:30;9436:117;;;9472:79;;:::i;:::-;9436:117;9577:63;9632:7;9623:6;9612:9;9608:22;9577:63;:::i;:::-;9567:73;;9363:287;9148:509;;;;:::o;9663:118::-;9734:22;9750:5;9734:22;:::i;:::-;9727:5;9724:33;9714:61;;9771:1;9768;9761:12;9714:61;9663:118;:::o;9787:135::-;9831:5;9869:6;9856:20;9847:29;;9885:31;9910:5;9885:31;:::i;:::-;9787:135;;;;:::o;9928:325::-;9985:6;10034:2;10022:9;10013:7;10009:23;10005:32;10002:119;;;10040:79;;:::i;:::-;10002:119;10160:1;10185:51;10228:7;10219:6;10208:9;10204:22;10185:51;:::i;:::-;10175:61;;10131:115;9928:325;;;;:::o;10259:329::-;10318:6;10367:2;10355:9;10346:7;10342:23;10338:32;10335:119;;;10373:79;;:::i;:::-;10335:119;10493:1;10518:53;10563:7;10554:6;10543:9;10539:22;10518:53;:::i;:::-;10508:63;;10464:117;10259:329;;;;:::o;10594:116::-;10664:21;10679:5;10664:21;:::i;:::-;10657:5;10654:32;10644:60;;10700:1;10697;10690:12;10644:60;10594:116;:::o;10716:133::-;10759:5;10797:6;10784:20;10775:29;;10813:30;10837:5;10813:30;:::i;:::-;10716:133;;;;:::o;10855:468::-;10920:6;10928;10977:2;10965:9;10956:7;10952:23;10948:32;10945:119;;;10983:79;;:::i;:::-;10945:119;11103:1;11128:53;11173:7;11164:6;11153:9;11149:22;11128:53;:::i;:::-;11118:63;;11074:117;11230:2;11256:50;11298:7;11289:6;11278:9;11274:22;11256:50;:::i;:::-;11246:60;;11201:115;10855:468;;;;;:::o;11329:307::-;11390:4;11480:18;11472:6;11469:30;11466:56;;;11502:18;;:::i;:::-;11466:56;11540:29;11562:6;11540:29;:::i;:::-;11532:37;;11624:4;11618;11614:15;11606:23;;11329:307;;;:::o;11642:410::-;11719:5;11744:65;11760:48;11801:6;11760:48;:::i;:::-;11744:65;:::i;:::-;11735:74;;11832:6;11825:5;11818:21;11870:4;11863:5;11859:16;11908:3;11899:6;11894:3;11890:16;11887:25;11884:112;;;11915:79;;:::i;:::-;11884:112;12005:41;12039:6;12034:3;12029;12005:41;:::i;:::-;11725:327;11642:410;;;;;:::o;12071:338::-;12126:5;12175:3;12168:4;12160:6;12156:17;12152:27;12142:122;;12183:79;;:::i;:::-;12142:122;12300:6;12287:20;12325:78;12399:3;12391:6;12384:4;12376:6;12372:17;12325:78;:::i;:::-;12316:87;;12132:277;12071:338;;;;:::o;12415:943::-;12510:6;12518;12526;12534;12583:3;12571:9;12562:7;12558:23;12554:33;12551:120;;;12590:79;;:::i;:::-;12551:120;12710:1;12735:53;12780:7;12771:6;12760:9;12756:22;12735:53;:::i;:::-;12725:63;;12681:117;12837:2;12863:53;12908:7;12899:6;12888:9;12884:22;12863:53;:::i;:::-;12853:63;;12808:118;12965:2;12991:53;13036:7;13027:6;13016:9;13012:22;12991:53;:::i;:::-;12981:63;;12936:118;13121:2;13110:9;13106:18;13093:32;13152:18;13144:6;13141:30;13138:117;;;13174:79;;:::i;:::-;13138:117;13279:62;13333:7;13324:6;13313:9;13309:22;13279:62;:::i;:::-;13269:72;;13064:287;12415:943;;;;;;;:::o;13364:115::-;13449:23;13466:5;13449:23;:::i;:::-;13444:3;13437:36;13364:115;;:::o;13485:218::-;13576:4;13614:2;13603:9;13599:18;13591:26;;13627:69;13693:1;13682:9;13678:17;13669:6;13627:69;:::i;:::-;13485:218;;;;:::o;13709:474::-;13777:6;13785;13834:2;13822:9;13813:7;13809:23;13805:32;13802:119;;;13840:79;;:::i;:::-;13802:119;13960:1;13985:53;14030:7;14021:6;14010:9;14006:22;13985:53;:::i;:::-;13975:63;;13931:117;14087:2;14113:53;14158:7;14149:6;14138:9;14134:22;14113:53;:::i;:::-;14103:63;;14058:118;13709:474;;;;;:::o;14189:164::-;14329:16;14325:1;14317:6;14313:14;14306:40;14189:164;:::o;14359:366::-;14501:3;14522:67;14586:2;14581:3;14522:67;:::i;:::-;14515:74;;14598:93;14687:3;14598:93;:::i;:::-;14716:2;14711:3;14707:12;14700:19;;14359:366;;;:::o;14731:419::-;14897:4;14935:2;14924:9;14920:18;14912:26;;14984:9;14978:4;14974:20;14970:1;14959:9;14955:17;14948:47;15012:131;15138:4;15012:131;:::i;:::-;15004:139;;14731:419;;;:::o;15156:180::-;15204:77;15201:1;15194:88;15301:4;15298:1;15291:15;15325:4;15322:1;15315:15;15342:320;15386:6;15423:1;15417:4;15413:12;15403:22;;15470:1;15464:4;15460:12;15491:18;15481:81;;15547:4;15539:6;15535:17;15525:27;;15481:81;15609:2;15601:6;15598:14;15578:18;15575:38;15572:84;;;15628:18;;:::i;:::-;15572:84;15393:269;15342:320;;;:::o;15668:232::-;15808:34;15804:1;15796:6;15792:14;15785:58;15877:15;15872:2;15864:6;15860:15;15853:40;15668:232;:::o;15906:366::-;16048:3;16069:67;16133:2;16128:3;16069:67;:::i;:::-;16062:74;;16145:93;16234:3;16145:93;:::i;:::-;16263:2;16258:3;16254:12;16247:19;;15906:366;;;:::o;16278:419::-;16444:4;16482:2;16471:9;16467:18;16459:26;;16531:9;16525:4;16521:20;16517:1;16506:9;16502:17;16495:47;16559:131;16685:4;16559:131;:::i;:::-;16551:139;;16278:419;;;:::o;16703:221::-;16843:34;16839:1;16831:6;16827:14;16820:58;16912:4;16907:2;16899:6;16895:15;16888:29;16703:221;:::o;16930:366::-;17072:3;17093:67;17157:2;17152:3;17093:67;:::i;:::-;17086:74;;17169:93;17258:3;17169:93;:::i;:::-;17287:2;17282:3;17278:12;17271:19;;16930:366;;;:::o;17302:419::-;17468:4;17506:2;17495:9;17491:18;17483:26;;17555:9;17549:4;17545:20;17541:1;17530:9;17526:17;17519:47;17583:131;17709:4;17583:131;:::i;:::-;17575:139;;17302:419;;;:::o;17727:244::-;17867:34;17863:1;17855:6;17851:14;17844:58;17936:27;17931:2;17923:6;17919:15;17912:52;17727:244;:::o;17977:366::-;18119:3;18140:67;18204:2;18199:3;18140:67;:::i;:::-;18133:74;;18216:93;18305:3;18216:93;:::i;:::-;18334:2;18329:3;18325:12;18318:19;;17977:366;;;:::o;18349:419::-;18515:4;18553:2;18542:9;18538:18;18530:26;;18602:9;18596:4;18592:20;18588:1;18577:9;18573:17;18566:47;18630:131;18756:4;18630:131;:::i;:::-;18622:139;;18349:419;;;:::o;18774:221::-;18914:34;18910:1;18902:6;18898:14;18891:58;18983:4;18978:2;18970:6;18966:15;18959:29;18774:221;:::o;19001:366::-;19143:3;19164:67;19228:2;19223:3;19164:67;:::i;:::-;19157:74;;19240:93;19329:3;19240:93;:::i;:::-;19358:2;19353:3;19349:12;19342:19;;19001:366;;;:::o;19373:419::-;19539:4;19577:2;19566:9;19562:18;19554:26;;19626:9;19620:4;19616:20;19612:1;19601:9;19597:17;19590:47;19654:131;19780:4;19654:131;:::i;:::-;19646:139;;19373:419;;;:::o;19798:180::-;19846:77;19843:1;19836:88;19943:4;19940:1;19933:15;19967:4;19964:1;19957:15;19984:233;20023:3;20046:24;20064:5;20046:24;:::i;:::-;20037:33;;20092:66;20085:5;20082:77;20079:103;;;20162:18;;:::i;:::-;20079:103;20209:1;20202:5;20198:13;20191:20;;19984:233;;;:::o;20223:::-;20363:34;20359:1;20351:6;20347:14;20340:58;20432:16;20427:2;20419:6;20415:15;20408:41;20223:233;:::o;20462:366::-;20604:3;20625:67;20689:2;20684:3;20625:67;:::i;:::-;20618:74;;20701:93;20790:3;20701:93;:::i;:::-;20819:2;20814:3;20810:12;20803:19;;20462:366;;;:::o;20834:419::-;21000:4;21038:2;21027:9;21023:18;21015:26;;21087:9;21081:4;21077:20;21073:1;21062:9;21058:17;21051:47;21115:131;21241:4;21115:131;:::i;:::-;21107:139;;20834:419;;;:::o;21259:222::-;21399:34;21395:1;21387:6;21383:14;21376:58;21468:5;21463:2;21455:6;21451:15;21444:30;21259:222;:::o;21487:366::-;21629:3;21650:67;21714:2;21709:3;21650:67;:::i;:::-;21643:74;;21726:93;21815:3;21726:93;:::i;:::-;21844:2;21839:3;21835:12;21828:19;;21487:366;;;:::o;21859:419::-;22025:4;22063:2;22052:9;22048:18;22040:26;;22112:9;22106:4;22102:20;22098:1;22087:9;22083:17;22076:47;22140:131;22266:4;22140:131;:::i;:::-;22132:139;;21859:419;;;:::o;22284:230::-;22424:34;22420:1;22412:6;22408:14;22401:58;22493:13;22488:2;22480:6;22476:15;22469:38;22284:230;:::o;22520:366::-;22662:3;22683:67;22747:2;22742:3;22683:67;:::i;:::-;22676:74;;22759:93;22848:3;22759:93;:::i;:::-;22877:2;22872:3;22868:12;22861:19;;22520:366;;;:::o;22892:419::-;23058:4;23096:2;23085:9;23081:18;23073:26;;23145:9;23139:4;23135:20;23131:1;23120:9;23116:17;23109:47;23173:131;23299:4;23173:131;:::i;:::-;23165:139;;22892:419;;;:::o;23317:166::-;23457:18;23453:1;23445:6;23441:14;23434:42;23317:166;:::o;23489:366::-;23631:3;23652:67;23716:2;23711:3;23652:67;:::i;:::-;23645:74;;23728:93;23817:3;23728:93;:::i;:::-;23846:2;23841:3;23837:12;23830:19;;23489:366;;;:::o;23861:419::-;24027:4;24065:2;24054:9;24050:18;24042:26;;24114:9;24108:4;24104:20;24100:1;24089:9;24085:17;24078:47;24142:131;24268:4;24142:131;:::i;:::-;24134:139;;23861:419;;;:::o;24286:242::-;24325:3;24344:19;24361:1;24344:19;:::i;:::-;24339:24;;24377:19;24394:1;24377:19;:::i;:::-;24372:24;;24470:1;24462:6;24458:14;24455:1;24452:21;24449:47;;;24476:18;;:::i;:::-;24449:47;24520:1;24517;24513:9;24506:16;;24286:242;;;;:::o;24534:305::-;24574:3;24593:20;24611:1;24593:20;:::i;:::-;24588:25;;24627:20;24645:1;24627:20;:::i;:::-;24622:25;;24781:1;24713:66;24709:74;24706:1;24703:81;24700:107;;;24787:18;;:::i;:::-;24700:107;24831:1;24828;24824:9;24817:16;;24534:305;;;;:::o;24845:176::-;24985:28;24981:1;24973:6;24969:14;24962:52;24845:176;:::o;25027:366::-;25169:3;25190:67;25254:2;25249:3;25190:67;:::i;:::-;25183:74;;25266:93;25355:3;25266:93;:::i;:::-;25384:2;25379:3;25375:12;25368:19;;25027:366;;;:::o;25399:419::-;25565:4;25603:2;25592:9;25588:18;25580:26;;25652:9;25646:4;25642:20;25638:1;25627:9;25623:17;25616:47;25680:131;25806:4;25680:131;:::i;:::-;25672:139;;25399:419;;;:::o;25824:167::-;25964:19;25960:1;25952:6;25948:14;25941:43;25824:167;:::o;25997:366::-;26139:3;26160:67;26224:2;26219:3;26160:67;:::i;:::-;26153:74;;26236:93;26325:3;26236:93;:::i;:::-;26354:2;26349:3;26345:12;26338:19;;25997:366;;;:::o;26369:419::-;26535:4;26573:2;26562:9;26558:18;26550:26;;26622:9;26616:4;26612:20;26608:1;26597:9;26593:17;26586:47;26650:131;26776:4;26650:131;:::i;:::-;26642:139;;26369:419;;;:::o;26794:237::-;26832:3;26851:18;26867:1;26851:18;:::i;:::-;26846:23;;26883:18;26899:1;26883:18;:::i;:::-;26878:23;;26973:1;26967:4;26963:12;26960:1;26957:19;26954:45;;;26979:18;;:::i;:::-;26954:45;27023:1;27020;27016:9;27009:16;;26794:237;;;;:::o;27037:348::-;27077:7;27100:20;27118:1;27100:20;:::i;:::-;27095:25;;27134:20;27152:1;27134:20;:::i;:::-;27129:25;;27322:1;27254:66;27250:74;27247:1;27244:81;27239:1;27232:9;27225:17;27221:105;27218:131;;;27329:18;;:::i;:::-;27218:131;27377:1;27374;27370:9;27359:20;;27037:348;;;;:::o;27391:176::-;27531:28;27527:1;27519:6;27515:14;27508:52;27391:176;:::o;27573:366::-;27715:3;27736:67;27800:2;27795:3;27736:67;:::i;:::-;27729:74;;27812:93;27901:3;27812:93;:::i;:::-;27930:2;27925:3;27921:12;27914:19;;27573:366;;;:::o;27945:419::-;28111:4;28149:2;28138:9;28134:18;28126:26;;28198:9;28192:4;28188:20;28184:1;28173:9;28169:17;28162:47;28226:131;28352:4;28226:131;:::i;:::-;28218:139;;27945:419;;;:::o;28370:238::-;28510:34;28506:1;28498:6;28494:14;28487:58;28579:21;28574:2;28566:6;28562:15;28555:46;28370:238;:::o;28614:366::-;28756:3;28777:67;28841:2;28836:3;28777:67;:::i;:::-;28770:74;;28853:93;28942:3;28853:93;:::i;:::-;28971:2;28966:3;28962:12;28955:19;;28614:366;;;:::o;28986:419::-;29152:4;29190:2;29179:9;29175:18;29167:26;;29239:9;29233:4;29229:20;29225:1;29214:9;29210:17;29203:47;29267:131;29393:4;29267:131;:::i;:::-;29259:139;;28986:419;;;:::o;29411:234::-;29551:34;29547:1;29539:6;29535:14;29528:58;29620:17;29615:2;29607:6;29603:15;29596:42;29411:234;:::o;29651:366::-;29793:3;29814:67;29878:2;29873:3;29814:67;:::i;:::-;29807:74;;29890:93;29979:3;29890:93;:::i;:::-;30008:2;30003:3;29999:12;29992:19;;29651:366;;;:::o;30023:419::-;30189:4;30227:2;30216:9;30212:18;30204:26;;30276:9;30270:4;30266:20;30262:1;30251:9;30247:17;30240:47;30304:131;30430:4;30304:131;:::i;:::-;30296:139;;30023:419;;;:::o;30448:148::-;30550:11;30587:3;30572:18;;30448:148;;;;:::o;30602:377::-;30708:3;30736:39;30769:5;30736:39;:::i;:::-;30791:89;30873:6;30868:3;30791:89;:::i;:::-;30784:96;;30889:52;30934:6;30929:3;30922:4;30915:5;30911:16;30889:52;:::i;:::-;30966:6;30961:3;30957:16;30950:23;;30712:267;30602:377;;;;:::o;30985:435::-;31165:3;31187:95;31278:3;31269:6;31187:95;:::i;:::-;31180:102;;31299:95;31390:3;31381:6;31299:95;:::i;:::-;31292:102;;31411:3;31404:10;;30985:435;;;;;:::o;31426:237::-;31566:34;31562:1;31554:6;31550:14;31543:58;31635:20;31630:2;31622:6;31618:15;31611:45;31426:237;:::o;31669:366::-;31811:3;31832:67;31896:2;31891:3;31832:67;:::i;:::-;31825:74;;31908:93;31997:3;31908:93;:::i;:::-;32026:2;32021:3;32017:12;32010:19;;31669:366;;;:::o;32041:419::-;32207:4;32245:2;32234:9;32230:18;32222:26;;32294:9;32288:4;32284:20;32280:1;32269:9;32265:17;32258:47;32322:131;32448:4;32322:131;:::i;:::-;32314:139;;32041:419;;;:::o;32466:225::-;32606:34;32602:1;32594:6;32590:14;32583:58;32675:8;32670:2;32662:6;32658:15;32651:33;32466:225;:::o;32697:366::-;32839:3;32860:67;32924:2;32919:3;32860:67;:::i;:::-;32853:74;;32936:93;33025:3;32936:93;:::i;:::-;33054:2;33049:3;33045:12;33038:19;;32697:366;;;:::o;33069:419::-;33235:4;33273:2;33262:9;33258:18;33250:26;;33322:9;33316:4;33312:20;33308:1;33297:9;33293:17;33286:47;33350:131;33476:4;33350:131;:::i;:::-;33342:139;;33069:419;;;:::o;33494:224::-;33634:34;33630:1;33622:6;33618:14;33611:58;33703:7;33698:2;33690:6;33686:15;33679:32;33494:224;:::o;33724:366::-;33866:3;33887:67;33951:2;33946:3;33887:67;:::i;:::-;33880:74;;33963:93;34052:3;33963:93;:::i;:::-;34081:2;34076:3;34072:12;34065:19;;33724:366;;;:::o;34096:419::-;34262:4;34300:2;34289:9;34285:18;34277:26;;34349:9;34343:4;34339:20;34335:1;34324:9;34320:17;34313:47;34377:131;34503:4;34377:131;:::i;:::-;34369:139;;34096:419;;;:::o;34521:229::-;34661:34;34657:1;34649:6;34645:14;34638:58;34730:12;34725:2;34717:6;34713:15;34706:37;34521:229;:::o;34756:366::-;34898:3;34919:67;34983:2;34978:3;34919:67;:::i;:::-;34912:74;;34995:93;35084:3;34995:93;:::i;:::-;35113:2;35108:3;35104:12;35097:19;;34756:366;;;:::o;35128:419::-;35294:4;35332:2;35321:9;35317:18;35309:26;;35381:9;35375:4;35371:20;35367:1;35356:9;35352:17;35345:47;35409:131;35535:4;35409:131;:::i;:::-;35401:139;;35128:419;;;:::o;35553:171::-;35592:3;35615:24;35633:5;35615:24;:::i;:::-;35606:33;;35661:4;35654:5;35651:15;35648:41;;;35669:18;;:::i;:::-;35648:41;35716:1;35709:5;35705:13;35698:20;;35553:171;;;:::o;36767:98::-;36818:6;36852:5;36846:12;36836:22;;36767:98;;;:::o;36871:168::-;36954:11;36988:6;36983:3;36976:19;37028:4;37023:3;37019:14;37004:29;;36871:168;;;;:::o;37045:360::-;37131:3;37159:38;37191:5;37159:38;:::i;:::-;37213:70;37276:6;37271:3;37213:70;:::i;:::-;37206:77;;37292:52;37337:6;37332:3;37325:4;37318:5;37314:16;37292:52;:::i;:::-;37369:29;37391:6;37369:29;:::i;:::-;37364:3;37360:39;37353:46;;37135:270;37045:360;;;;:::o;37411:640::-;37606:4;37644:3;37633:9;37629:19;37621:27;;37658:71;37726:1;37715:9;37711:17;37702:6;37658:71;:::i;:::-;37739:72;37807:2;37796:9;37792:18;37783:6;37739:72;:::i;:::-;37821;37889:2;37878:9;37874:18;37865:6;37821:72;:::i;:::-;37940:9;37934:4;37930:20;37925:2;37914:9;37910:18;37903:48;37968:76;38039:4;38030:6;37968:76;:::i;:::-;37960:84;;37411:640;;;;;;;:::o;38057:141::-;38113:5;38144:6;38138:13;38129:22;;38160:32;38186:5;38160:32;:::i;:::-;38057:141;;;;:::o;38204:349::-;38273:6;38322:2;38310:9;38301:7;38297:23;38293:32;38290:119;;;38328:79;;:::i;:::-;38290:119;38448:1;38473:63;38528:7;38519:6;38508:9;38504:22;38473:63;:::i;:::-;38463:73;;38419:127;38204:349;;;;:::o;38559:180::-;38607:77;38604:1;38597:88;38704:4;38701:1;38694:15;38728:4;38725:1;38718:15;38745:185;38785:1;38802:20;38820:1;38802:20;:::i;:::-;38797:25;;38836:20;38854:1;38836:20;:::i;:::-;38831:25;;38875:1;38865:35;;38880:18;;:::i;:::-;38865:35;38922:1;38919;38915:9;38910:14;;38745:185;;;;:::o;38936:191::-;38976:4;38996:20;39014:1;38996:20;:::i;:::-;38991:25;;39030:20;39048:1;39030:20;:::i;:::-;39025:25;;39069:1;39066;39063:8;39060:34;;;39074:18;;:::i;:::-;39060:34;39119:1;39116;39112:9;39104:17;;38936:191;;;;:::o;39133:176::-;39165:1;39182:20;39200:1;39182:20;:::i;:::-;39177:25;;39216:20;39234:1;39216:20;:::i;:::-;39211:25;;39255:1;39245:35;;39260:18;;:::i;:::-;39245:35;39301:1;39298;39294:9;39289:14;;39133:176;;;;:::o;39315:180::-;39363:77;39360:1;39353:88;39460:4;39457:1;39450:15;39484:4;39481:1;39474:15;39501:220;39641:34;39637:1;39629:6;39625:14;39618:58;39710:3;39705:2;39697:6;39693:15;39686:28;39501:220;:::o;39727:366::-;39869:3;39890:67;39954:2;39949:3;39890:67;:::i;:::-;39883:74;;39966:93;40055:3;39966:93;:::i;:::-;40084:2;40079:3;40075:12;40068:19;;39727:366;;;:::o;40099:419::-;40265:4;40303:2;40292:9;40288:18;40280:26;;40352:9;40346:4;40342:20;40338:1;40327:9;40323:17;40316:47;40380:131;40506:4;40380:131;:::i;:::-;40372:139;;40099:419;;;:::o;40524:179::-;40664:31;40660:1;40652:6;40648:14;40641:55;40524:179;:::o;40709:366::-;40851:3;40872:67;40936:2;40931:3;40872:67;:::i;:::-;40865:74;;40948:93;41037:3;40948:93;:::i;:::-;41066:2;41061:3;41057:12;41050:19;;40709:366;;;:::o;41081:419::-;41247:4;41285:2;41274:9;41270:18;41262:26;;41334:9;41328:4;41324:20;41320:1;41309:9;41305:17;41298:47;41362:131;41488:4;41362:131;:::i;:::-;41354:139;;41081:419;;;:::o;41506:227::-;41646:34;41642:1;41634:6;41630:14;41623:58;41715:10;41710:2;41702:6;41698:15;41691:35;41506:227;:::o;41739:366::-;41881:3;41902:67;41966:2;41961:3;41902:67;:::i;:::-;41895:74;;41978:93;42067:3;41978:93;:::i;:::-;42096:2;42091:3;42087:12;42080:19;;41739:366;;;:::o;42111:419::-;42277:4;42315:2;42304:9;42300:18;42292:26;;42364:9;42358:4;42354:20;42350:1;42339:9;42335:17;42328:47;42392:131;42518:4;42392:131;:::i;:::-;42384:139;;42111:419;;;:::o;42536:118::-;42573:7;42613:34;42606:5;42602:46;42591:57;;42536:118;;;:::o;42660:273::-;42700:3;42719:20;42737:1;42719:20;:::i;:::-;42714:25;;42753:20;42771:1;42753:20;:::i;:::-;42748:25;;42875:1;42839:34;42835:42;42832:1;42829:49;42826:75;;;42881:18;;:::i;:::-;42826:75;42925:1;42922;42918:9;42911:16;;42660:273;;;;:::o
Swarm Source
ipfs://f55291fb6e8842f92bb0618643fadd8775a9157261c2607756786115f799bfe1
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.