ERC-721
Overview
Max Total Supply
1,234 MMSH
Holders
135
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
6 MMSHLoading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
MadMetaSenseisHonorary
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-04-11 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @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; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @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/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); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: contracts/MMSH.sol pragma solidity >=0.7.0 <0.9.0; contract MadMetaSenseisHonorary is ERC721, Ownable { using Strings for uint256; using Counters for Counters.Counter; Counters.Counter private supply; string public uriPrefix = ""; string public uriSuffix = ".json"; uint256 public cost = 100000000000000000000; uint256 public maxSupply = 1234; constructor() ERC721("Mad Meta Senseis Honorary", "MMSH") { } modifier mintCompliance(uint256 _mintAmount) { require(_mintAmount > 0, "Invalid mint amount!"); require(supply.current() + _mintAmount <= maxSupply, "Max supply exceeded!"); _; } function airdrop(uint256 amount) public onlyOwner { IERC721 token = IERC721(0x2F5705006F241ED1Ea682aec4fd25b8aD6BA5196); address _receiver; for (uint256 i = 0; i < amount; i++) { supply.increment(); _receiver = token.ownerOf(supply.current()); _safeMint(_receiver, supply.current()); } } function totalSupply() public view returns (uint256) { return supply.current(); } function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) { require(msg.value >= cost * _mintAmount, "Insufficient funds!"); _mintLoop(msg.sender, _mintAmount); } function mintForAddress(uint256 _mintAmount, address _receiver) public mintCompliance(_mintAmount) onlyOwner { _mintLoop(_receiver, _mintAmount); } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount); uint256 currentTokenId = 1; uint256 ownedTokenIndex = 0; while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) { address currentTokenOwner = ownerOf(currentTokenId); if (currentTokenOwner == _owner) { ownedTokenIds[ownedTokenIndex] = currentTokenId; ownedTokenIndex++; } currentTokenId++; } return ownedTokenIds; } function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require( _exists(_tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix)) : ""; } function setCost(uint256 _cost) public onlyOwner { cost = _cost; } function setUriPrefix(string memory _uriPrefix) public onlyOwner { uriPrefix = _uriPrefix; } function setUriSuffix(string memory _uriSuffix) public onlyOwner { uriSuffix = _uriSuffix; } function withdraw() public onlyOwner { (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); } function _mintLoop(address _receiver, uint256 _mintAmount) internal { for (uint256 i = 0; i < _mintAmount; i++) { supply.increment(); _safeMint(_receiver, supply.current()); } } function _baseURI() internal view virtual override returns (string memory) { return uriPrefix; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","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":"_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":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260405180602001604052806000815250600890805190602001906200002b9291906200022f565b506040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060099080519060200190620000799291906200022f565b5068056bc75e2d63100000600a556104d2600b553480156200009a57600080fd5b506040518060400160405280601981526020017f4d6164204d6574612053656e7365697320486f6e6f72617279000000000000008152506040518060400160405280600481526020017f4d4d53480000000000000000000000000000000000000000000000000000000081525081600090805190602001906200011f9291906200022f565b508060019080519060200190620001389291906200022f565b5050506200015b6200014f6200016160201b60201c565b6200016960201b60201c565b62000344565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200023d90620002df565b90600052602060002090601f016020900481019282620002615760008555620002ad565b82601f106200027c57805160ff1916838001178555620002ad565b82800160010185558215620002ad579182015b82811115620002ac5782518255916020019190600101906200028f565b5b509050620002bc9190620002c0565b5090565b5b80821115620002db576000816000905550600101620002c1565b5090565b60006002820490506001821680620002f857607f821691505b602082108114156200030f576200030e62000315565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b613d7c80620003546000396000f3fe6080604052600436106101c25760003560e01c80636352211e116100f7578063a0712d6811610095578063d5abeb0111610064578063d5abeb011461061d578063e985e9c514610648578063efbd73f414610685578063f2fde38b146106ae576101c2565b8063a0712d6814610572578063a22cb4651461058e578063b88d4fde146105b7578063c87b56dd146105e0576101c2565b80637ec4a659116100d15780637ec4a659146104ca5780638da5cb5b146104f357806395d89b411461051e57806397dc4a1314610549576101c2565b80636352211e1461043957806370a0823114610476578063715018a6146104b3576101c2565b806323b872dd11610164578063438b63001161013e578063438b63001461037d57806344a0d68a146103ba5780635503a0e8146103e357806362b99ad41461040e576101c2565b806323b872dd146103145780633ccfd60b1461033d57806342842e0e14610354576101c2565b8063095ea7b3116101a0578063095ea7b31461026c57806313faede61461029557806316ba10e0146102c057806318160ddd146102e9576101c2565b806301ffc9a7146101c757806306fdde0314610204578063081812fc1461022f575b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e99190612a12565b6106d7565b6040516101fb9190613081565b60405180910390f35b34801561021057600080fd5b506102196107b9565b604051610226919061309c565b60405180910390f35b34801561023b57600080fd5b5061025660048036038101906102519190612ab5565b61084b565b6040516102639190612ff8565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e91906129d2565b6108d0565b005b3480156102a157600080fd5b506102aa6109e8565b6040516102b7919061331e565b60405180910390f35b3480156102cc57600080fd5b506102e760048036038101906102e29190612a6c565b6109ee565b005b3480156102f557600080fd5b506102fe610a84565b60405161030b919061331e565b60405180910390f35b34801561032057600080fd5b5061033b600480360381019061033691906128bc565b610a95565b005b34801561034957600080fd5b50610352610af5565b005b34801561036057600080fd5b5061037b600480360381019061037691906128bc565b610bf1565b005b34801561038957600080fd5b506103a4600480360381019061039f9190612822565b610c11565b6040516103b1919061305f565b60405180910390f35b3480156103c657600080fd5b506103e160048036038101906103dc9190612ab5565b610d1c565b005b3480156103ef57600080fd5b506103f8610da2565b604051610405919061309c565b60405180910390f35b34801561041a57600080fd5b50610423610e30565b604051610430919061309c565b60405180910390f35b34801561044557600080fd5b50610460600480360381019061045b9190612ab5565b610ebe565b60405161046d9190612ff8565b60405180910390f35b34801561048257600080fd5b5061049d60048036038101906104989190612822565b610f70565b6040516104aa919061331e565b60405180910390f35b3480156104bf57600080fd5b506104c8611028565b005b3480156104d657600080fd5b506104f160048036038101906104ec9190612a6c565b6110b0565b005b3480156104ff57600080fd5b50610508611146565b6040516105159190612ff8565b60405180910390f35b34801561052a57600080fd5b50610533611170565b604051610540919061309c565b60405180910390f35b34801561055557600080fd5b50610570600480360381019061056b9190612ab5565b611202565b005b61058c60048036038101906105879190612ab5565b611371565b005b34801561059a57600080fd5b506105b560048036038101906105b09190612992565b61146c565b005b3480156105c357600080fd5b506105de60048036038101906105d9919061290f565b611482565b005b3480156105ec57600080fd5b5061060760048036038101906106029190612ab5565b6114e4565b604051610614919061309c565b60405180910390f35b34801561062957600080fd5b5061063261158e565b60405161063f919061331e565b60405180910390f35b34801561065457600080fd5b5061066f600480360381019061066a919061287c565b611594565b60405161067c9190613081565b60405180910390f35b34801561069157600080fd5b506106ac60048036038101906106a79190612ae2565b611628565b005b3480156106ba57600080fd5b506106d560048036038101906106d09190612822565b611750565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107a257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107b257506107b182611848565b5b9050919050565b6060600080546107c890613627565b80601f01602080910402602001604051908101604052809291908181526020018280546107f490613627565b80156108415780601f1061081657610100808354040283529160200191610841565b820191906000526020600020905b81548152906001019060200180831161082457829003601f168201915b5050505050905090565b6000610856826118b2565b610895576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088c9061323e565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108db82610ebe565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561094c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109439061329e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661096b61191e565b73ffffffffffffffffffffffffffffffffffffffff16148061099a57506109998161099461191e565b611594565b5b6109d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d0906131be565b60405180910390fd5b6109e38383611926565b505050565b600a5481565b6109f661191e565b73ffffffffffffffffffffffffffffffffffffffff16610a14611146565b73ffffffffffffffffffffffffffffffffffffffff1614610a6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a619061325e565b60405180910390fd5b8060099080519060200190610a80929190612621565b5050565b6000610a9060076119df565b905090565b610aa6610aa061191e565b826119ed565b610ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610adc906132de565b60405180910390fd5b610af0838383611acb565b505050565b610afd61191e565b73ffffffffffffffffffffffffffffffffffffffff16610b1b611146565b73ffffffffffffffffffffffffffffffffffffffff1614610b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b689061325e565b60405180910390fd5b6000610b7b611146565b73ffffffffffffffffffffffffffffffffffffffff1647604051610b9e90612fe3565b60006040518083038185875af1925050503d8060008114610bdb576040519150601f19603f3d011682016040523d82523d6000602084013e610be0565b606091505b5050905080610bee57600080fd5b50565b610c0c83838360405180602001604052806000815250611482565b505050565b60606000610c1e83610f70565b905060008167ffffffffffffffff811115610c3c57610c3b6137c0565b5b604051908082528060200260200182016040528015610c6a5781602001602082028036833780820191505090505b50905060006001905060005b8381108015610c875750600b548211155b15610d10576000610c9783610ebe565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610cfc5782848381518110610ce157610ce0613791565b5b6020026020010181815250508180610cf89061368a565b9250505b8280610d079061368a565b93505050610c76565b82945050505050919050565b610d2461191e565b73ffffffffffffffffffffffffffffffffffffffff16610d42611146565b73ffffffffffffffffffffffffffffffffffffffff1614610d98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8f9061325e565b60405180910390fd5b80600a8190555050565b60098054610daf90613627565b80601f0160208091040260200160405190810160405280929190818152602001828054610ddb90613627565b8015610e285780601f10610dfd57610100808354040283529160200191610e28565b820191906000526020600020905b815481529060010190602001808311610e0b57829003601f168201915b505050505081565b60088054610e3d90613627565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6990613627565b8015610eb65780601f10610e8b57610100808354040283529160200191610eb6565b820191906000526020600020905b815481529060010190602001808311610e9957829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5e906131fe565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd8906131de565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61103061191e565b73ffffffffffffffffffffffffffffffffffffffff1661104e611146565b73ffffffffffffffffffffffffffffffffffffffff16146110a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109b9061325e565b60405180910390fd5b6110ae6000611d32565b565b6110b861191e565b73ffffffffffffffffffffffffffffffffffffffff166110d6611146565b73ffffffffffffffffffffffffffffffffffffffff161461112c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111239061325e565b60405180910390fd5b8060089080519060200190611142929190612621565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461117f90613627565b80601f01602080910402602001604051908101604052809291908181526020018280546111ab90613627565b80156111f85780601f106111cd576101008083540402835291602001916111f8565b820191906000526020600020905b8154815290600101906020018083116111db57829003601f168201915b5050505050905090565b61120a61191e565b73ffffffffffffffffffffffffffffffffffffffff16611228611146565b73ffffffffffffffffffffffffffffffffffffffff161461127e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112759061325e565b60405180910390fd5b6000732f5705006f241ed1ea682aec4fd25b8ad6ba51969050600080600090505b8381101561136b576112b16007611df8565b8273ffffffffffffffffffffffffffffffffffffffff16636352211e6112d760076119df565b6040518263ffffffff1660e01b81526004016112f3919061331e565b60206040518083038186803b15801561130b57600080fd5b505afa15801561131f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611343919061284f565b91506113588261135360076119df565b611e0e565b80806113639061368a565b91505061129f565b50505050565b80600081116113b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ac9061313e565b60405180910390fd5b600b54816113c360076119df565b6113cd919061345c565b111561140e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611405906132be565b60405180910390fd5b81600a5461141c91906134e3565b34101561145e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611455906132fe565b60405180910390fd5b6114683383611e2c565b5050565b61147e61147761191e565b8383611e6c565b5050565b61149361148d61191e565b836119ed565b6114d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c9906132de565b60405180910390fd5b6114de84848484611fd9565b50505050565b60606114ef826118b2565b61152e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115259061327e565b60405180910390fd5b6000611538612035565b905060008151116115585760405180602001604052806000815250611586565b80611562846120c7565b600960405160200161157693929190612fb2565b6040516020818303038152906040525b915050919050565b600b5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b816000811161166c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116639061313e565b60405180910390fd5b600b548161167a60076119df565b611684919061345c565b11156116c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bc906132be565b60405180910390fd5b6116cd61191e565b73ffffffffffffffffffffffffffffffffffffffff166116eb611146565b73ffffffffffffffffffffffffffffffffffffffff1614611741576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117389061325e565b60405180910390fd5b61174b8284611e2c565b505050565b61175861191e565b73ffffffffffffffffffffffffffffffffffffffff16611776611146565b73ffffffffffffffffffffffffffffffffffffffff16146117cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c39061325e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561183c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611833906130de565b60405180910390fd5b61184581611d32565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661199983610ebe565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b60006119f8826118b2565b611a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2e9061319e565b60405180910390fd5b6000611a4283610ebe565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611ab157508373ffffffffffffffffffffffffffffffffffffffff16611a998461084b565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ac25750611ac18185611594565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611aeb82610ebe565b73ffffffffffffffffffffffffffffffffffffffff1614611b41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b38906130fe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba89061315e565b60405180910390fd5b611bbc838383612228565b611bc7600082611926565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c17919061353d565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c6e919061345c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611d2d83838361222d565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001816000016000828254019250508190555050565b611e28828260405180602001604052806000815250612232565b5050565b60005b81811015611e6757611e416007611df8565b611e5483611e4f60076119df565b611e0e565b8080611e5f9061368a565b915050611e2f565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed29061317e565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611fcc9190613081565b60405180910390a3505050565b611fe4848484611acb565b611ff08484848461228d565b61202f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612026906130be565b60405180910390fd5b50505050565b60606008805461204490613627565b80601f016020809104026020016040519081016040528092919081815260200182805461207090613627565b80156120bd5780601f10612092576101008083540402835291602001916120bd565b820191906000526020600020905b8154815290600101906020018083116120a057829003601f168201915b5050505050905090565b6060600082141561210f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612223565b600082905060005b6000821461214157808061212a9061368a565b915050600a8261213a91906134b2565b9150612117565b60008167ffffffffffffffff81111561215d5761215c6137c0565b5b6040519080825280601f01601f19166020018201604052801561218f5781602001600182028036833780820191505090505b5090505b6000851461221c576001826121a8919061353d565b9150600a856121b791906136d3565b60306121c3919061345c565b60f81b8183815181106121d9576121d8613791565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561221591906134b2565b9450612193565b8093505050505b919050565b505050565b505050565b61223c8383612424565b612249600084848461228d565b612288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227f906130be565b60405180910390fd5b505050565b60006122ae8473ffffffffffffffffffffffffffffffffffffffff166125fe565b15612417578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026122d761191e565b8786866040518563ffffffff1660e01b81526004016122f99493929190613013565b602060405180830381600087803b15801561231357600080fd5b505af192505050801561234457506040513d601f19601f820116820180604052508101906123419190612a3f565b60015b6123c7573d8060008114612374576040519150601f19603f3d011682016040523d82523d6000602084013e612379565b606091505b506000815114156123bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b6906130be565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061241c565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248b9061321e565b60405180910390fd5b61249d816118b2565b156124dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d49061311e565b60405180910390fd5b6124e960008383612228565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612539919061345c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125fa6000838361222d565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461262d90613627565b90600052602060002090601f01602090048101928261264f5760008555612696565b82601f1061266857805160ff1916838001178555612696565b82800160010185558215612696579182015b8281111561269557825182559160200191906001019061267a565b5b5090506126a391906126a7565b5090565b5b808211156126c05760008160009055506001016126a8565b5090565b60006126d76126d28461335e565b613339565b9050828152602081018484840111156126f3576126f26137f4565b5b6126fe8482856135e5565b509392505050565b60006127196127148461338f565b613339565b905082815260208101848484011115612735576127346137f4565b5b6127408482856135e5565b509392505050565b60008135905061275781613cea565b92915050565b60008151905061276c81613cea565b92915050565b60008135905061278181613d01565b92915050565b60008135905061279681613d18565b92915050565b6000815190506127ab81613d18565b92915050565b600082601f8301126127c6576127c56137ef565b5b81356127d68482602086016126c4565b91505092915050565b600082601f8301126127f4576127f36137ef565b5b8135612804848260208601612706565b91505092915050565b60008135905061281c81613d2f565b92915050565b600060208284031215612838576128376137fe565b5b600061284684828501612748565b91505092915050565b600060208284031215612865576128646137fe565b5b60006128738482850161275d565b91505092915050565b60008060408385031215612893576128926137fe565b5b60006128a185828601612748565b92505060206128b285828601612748565b9150509250929050565b6000806000606084860312156128d5576128d46137fe565b5b60006128e386828701612748565b93505060206128f486828701612748565b92505060406129058682870161280d565b9150509250925092565b60008060008060808587031215612929576129286137fe565b5b600061293787828801612748565b945050602061294887828801612748565b93505060406129598782880161280d565b925050606085013567ffffffffffffffff81111561297a576129796137f9565b5b612986878288016127b1565b91505092959194509250565b600080604083850312156129a9576129a86137fe565b5b60006129b785828601612748565b92505060206129c885828601612772565b9150509250929050565b600080604083850312156129e9576129e86137fe565b5b60006129f785828601612748565b9250506020612a088582860161280d565b9150509250929050565b600060208284031215612a2857612a276137fe565b5b6000612a3684828501612787565b91505092915050565b600060208284031215612a5557612a546137fe565b5b6000612a638482850161279c565b91505092915050565b600060208284031215612a8257612a816137fe565b5b600082013567ffffffffffffffff811115612aa057612a9f6137f9565b5b612aac848285016127df565b91505092915050565b600060208284031215612acb57612aca6137fe565b5b6000612ad98482850161280d565b91505092915050565b60008060408385031215612af957612af86137fe565b5b6000612b078582860161280d565b9250506020612b1885828601612748565b9150509250929050565b6000612b2e8383612f94565b60208301905092915050565b612b4381613571565b82525050565b6000612b54826133e5565b612b5e8185613413565b9350612b69836133c0565b8060005b83811015612b9a578151612b818882612b22565b9750612b8c83613406565b925050600181019050612b6d565b5085935050505092915050565b612bb081613583565b82525050565b6000612bc1826133f0565b612bcb8185613424565b9350612bdb8185602086016135f4565b612be481613803565b840191505092915050565b6000612bfa826133fb565b612c048185613440565b9350612c148185602086016135f4565b612c1d81613803565b840191505092915050565b6000612c33826133fb565b612c3d8185613451565b9350612c4d8185602086016135f4565b80840191505092915050565b60008154612c6681613627565b612c708186613451565b94506001821660008114612c8b5760018114612c9c57612ccf565b60ff19831686528186019350612ccf565b612ca5856133d0565b60005b83811015612cc757815481890152600182019150602081019050612ca8565b838801955050505b50505092915050565b6000612ce5603283613440565b9150612cf082613814565b604082019050919050565b6000612d08602683613440565b9150612d1382613863565b604082019050919050565b6000612d2b602583613440565b9150612d36826138b2565b604082019050919050565b6000612d4e601c83613440565b9150612d5982613901565b602082019050919050565b6000612d71601483613440565b9150612d7c8261392a565b602082019050919050565b6000612d94602483613440565b9150612d9f82613953565b604082019050919050565b6000612db7601983613440565b9150612dc2826139a2565b602082019050919050565b6000612dda602c83613440565b9150612de5826139cb565b604082019050919050565b6000612dfd603883613440565b9150612e0882613a1a565b604082019050919050565b6000612e20602a83613440565b9150612e2b82613a69565b604082019050919050565b6000612e43602983613440565b9150612e4e82613ab8565b604082019050919050565b6000612e66602083613440565b9150612e7182613b07565b602082019050919050565b6000612e89602c83613440565b9150612e9482613b30565b604082019050919050565b6000612eac602083613440565b9150612eb782613b7f565b602082019050919050565b6000612ecf602f83613440565b9150612eda82613ba8565b604082019050919050565b6000612ef2602183613440565b9150612efd82613bf7565b604082019050919050565b6000612f15600083613435565b9150612f2082613c46565b600082019050919050565b6000612f38601483613440565b9150612f4382613c49565b602082019050919050565b6000612f5b603183613440565b9150612f6682613c72565b604082019050919050565b6000612f7e601383613440565b9150612f8982613cc1565b602082019050919050565b612f9d816135db565b82525050565b612fac816135db565b82525050565b6000612fbe8286612c28565b9150612fca8285612c28565b9150612fd68284612c59565b9150819050949350505050565b6000612fee82612f08565b9150819050919050565b600060208201905061300d6000830184612b3a565b92915050565b60006080820190506130286000830187612b3a565b6130356020830186612b3a565b6130426040830185612fa3565b81810360608301526130548184612bb6565b905095945050505050565b600060208201905081810360008301526130798184612b49565b905092915050565b60006020820190506130966000830184612ba7565b92915050565b600060208201905081810360008301526130b68184612bef565b905092915050565b600060208201905081810360008301526130d781612cd8565b9050919050565b600060208201905081810360008301526130f781612cfb565b9050919050565b6000602082019050818103600083015261311781612d1e565b9050919050565b6000602082019050818103600083015261313781612d41565b9050919050565b6000602082019050818103600083015261315781612d64565b9050919050565b6000602082019050818103600083015261317781612d87565b9050919050565b6000602082019050818103600083015261319781612daa565b9050919050565b600060208201905081810360008301526131b781612dcd565b9050919050565b600060208201905081810360008301526131d781612df0565b9050919050565b600060208201905081810360008301526131f781612e13565b9050919050565b6000602082019050818103600083015261321781612e36565b9050919050565b6000602082019050818103600083015261323781612e59565b9050919050565b6000602082019050818103600083015261325781612e7c565b9050919050565b6000602082019050818103600083015261327781612e9f565b9050919050565b6000602082019050818103600083015261329781612ec2565b9050919050565b600060208201905081810360008301526132b781612ee5565b9050919050565b600060208201905081810360008301526132d781612f2b565b9050919050565b600060208201905081810360008301526132f781612f4e565b9050919050565b6000602082019050818103600083015261331781612f71565b9050919050565b60006020820190506133336000830184612fa3565b92915050565b6000613343613354565b905061334f8282613659565b919050565b6000604051905090565b600067ffffffffffffffff821115613379576133786137c0565b5b61338282613803565b9050602081019050919050565b600067ffffffffffffffff8211156133aa576133a96137c0565b5b6133b382613803565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613467826135db565b9150613472836135db565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156134a7576134a6613704565b5b828201905092915050565b60006134bd826135db565b91506134c8836135db565b9250826134d8576134d7613733565b5b828204905092915050565b60006134ee826135db565b91506134f9836135db565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561353257613531613704565b5b828202905092915050565b6000613548826135db565b9150613553836135db565b92508282101561356657613565613704565b5b828203905092915050565b600061357c826135bb565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156136125780820151818401526020810190506135f7565b83811115613621576000848401525b50505050565b6000600282049050600182168061363f57607f821691505b6020821081141561365357613652613762565b5b50919050565b61366282613803565b810181811067ffffffffffffffff82111715613681576136806137c0565b5b80604052505050565b6000613695826135db565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156136c8576136c7613704565b5b600182019050919050565b60006136de826135db565b91506136e9836135db565b9250826136f9576136f8613733565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b613cf381613571565b8114613cfe57600080fd5b50565b613d0a81613583565b8114613d1557600080fd5b50565b613d218161358f565b8114613d2c57600080fd5b50565b613d38816135db565b8114613d4357600080fd5b5056fea2646970667358221220b7ed2fc8c1046cdadeb3ae767a3f0f6a7959a6b6ad380d61aa0ff8b71545a00764736f6c63430008070033
Deployed Bytecode
0x6080604052600436106101c25760003560e01c80636352211e116100f7578063a0712d6811610095578063d5abeb0111610064578063d5abeb011461061d578063e985e9c514610648578063efbd73f414610685578063f2fde38b146106ae576101c2565b8063a0712d6814610572578063a22cb4651461058e578063b88d4fde146105b7578063c87b56dd146105e0576101c2565b80637ec4a659116100d15780637ec4a659146104ca5780638da5cb5b146104f357806395d89b411461051e57806397dc4a1314610549576101c2565b80636352211e1461043957806370a0823114610476578063715018a6146104b3576101c2565b806323b872dd11610164578063438b63001161013e578063438b63001461037d57806344a0d68a146103ba5780635503a0e8146103e357806362b99ad41461040e576101c2565b806323b872dd146103145780633ccfd60b1461033d57806342842e0e14610354576101c2565b8063095ea7b3116101a0578063095ea7b31461026c57806313faede61461029557806316ba10e0146102c057806318160ddd146102e9576101c2565b806301ffc9a7146101c757806306fdde0314610204578063081812fc1461022f575b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e99190612a12565b6106d7565b6040516101fb9190613081565b60405180910390f35b34801561021057600080fd5b506102196107b9565b604051610226919061309c565b60405180910390f35b34801561023b57600080fd5b5061025660048036038101906102519190612ab5565b61084b565b6040516102639190612ff8565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e91906129d2565b6108d0565b005b3480156102a157600080fd5b506102aa6109e8565b6040516102b7919061331e565b60405180910390f35b3480156102cc57600080fd5b506102e760048036038101906102e29190612a6c565b6109ee565b005b3480156102f557600080fd5b506102fe610a84565b60405161030b919061331e565b60405180910390f35b34801561032057600080fd5b5061033b600480360381019061033691906128bc565b610a95565b005b34801561034957600080fd5b50610352610af5565b005b34801561036057600080fd5b5061037b600480360381019061037691906128bc565b610bf1565b005b34801561038957600080fd5b506103a4600480360381019061039f9190612822565b610c11565b6040516103b1919061305f565b60405180910390f35b3480156103c657600080fd5b506103e160048036038101906103dc9190612ab5565b610d1c565b005b3480156103ef57600080fd5b506103f8610da2565b604051610405919061309c565b60405180910390f35b34801561041a57600080fd5b50610423610e30565b604051610430919061309c565b60405180910390f35b34801561044557600080fd5b50610460600480360381019061045b9190612ab5565b610ebe565b60405161046d9190612ff8565b60405180910390f35b34801561048257600080fd5b5061049d60048036038101906104989190612822565b610f70565b6040516104aa919061331e565b60405180910390f35b3480156104bf57600080fd5b506104c8611028565b005b3480156104d657600080fd5b506104f160048036038101906104ec9190612a6c565b6110b0565b005b3480156104ff57600080fd5b50610508611146565b6040516105159190612ff8565b60405180910390f35b34801561052a57600080fd5b50610533611170565b604051610540919061309c565b60405180910390f35b34801561055557600080fd5b50610570600480360381019061056b9190612ab5565b611202565b005b61058c60048036038101906105879190612ab5565b611371565b005b34801561059a57600080fd5b506105b560048036038101906105b09190612992565b61146c565b005b3480156105c357600080fd5b506105de60048036038101906105d9919061290f565b611482565b005b3480156105ec57600080fd5b5061060760048036038101906106029190612ab5565b6114e4565b604051610614919061309c565b60405180910390f35b34801561062957600080fd5b5061063261158e565b60405161063f919061331e565b60405180910390f35b34801561065457600080fd5b5061066f600480360381019061066a919061287c565b611594565b60405161067c9190613081565b60405180910390f35b34801561069157600080fd5b506106ac60048036038101906106a79190612ae2565b611628565b005b3480156106ba57600080fd5b506106d560048036038101906106d09190612822565b611750565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107a257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107b257506107b182611848565b5b9050919050565b6060600080546107c890613627565b80601f01602080910402602001604051908101604052809291908181526020018280546107f490613627565b80156108415780601f1061081657610100808354040283529160200191610841565b820191906000526020600020905b81548152906001019060200180831161082457829003601f168201915b5050505050905090565b6000610856826118b2565b610895576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088c9061323e565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108db82610ebe565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561094c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109439061329e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661096b61191e565b73ffffffffffffffffffffffffffffffffffffffff16148061099a57506109998161099461191e565b611594565b5b6109d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d0906131be565b60405180910390fd5b6109e38383611926565b505050565b600a5481565b6109f661191e565b73ffffffffffffffffffffffffffffffffffffffff16610a14611146565b73ffffffffffffffffffffffffffffffffffffffff1614610a6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a619061325e565b60405180910390fd5b8060099080519060200190610a80929190612621565b5050565b6000610a9060076119df565b905090565b610aa6610aa061191e565b826119ed565b610ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610adc906132de565b60405180910390fd5b610af0838383611acb565b505050565b610afd61191e565b73ffffffffffffffffffffffffffffffffffffffff16610b1b611146565b73ffffffffffffffffffffffffffffffffffffffff1614610b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b689061325e565b60405180910390fd5b6000610b7b611146565b73ffffffffffffffffffffffffffffffffffffffff1647604051610b9e90612fe3565b60006040518083038185875af1925050503d8060008114610bdb576040519150601f19603f3d011682016040523d82523d6000602084013e610be0565b606091505b5050905080610bee57600080fd5b50565b610c0c83838360405180602001604052806000815250611482565b505050565b60606000610c1e83610f70565b905060008167ffffffffffffffff811115610c3c57610c3b6137c0565b5b604051908082528060200260200182016040528015610c6a5781602001602082028036833780820191505090505b50905060006001905060005b8381108015610c875750600b548211155b15610d10576000610c9783610ebe565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610cfc5782848381518110610ce157610ce0613791565b5b6020026020010181815250508180610cf89061368a565b9250505b8280610d079061368a565b93505050610c76565b82945050505050919050565b610d2461191e565b73ffffffffffffffffffffffffffffffffffffffff16610d42611146565b73ffffffffffffffffffffffffffffffffffffffff1614610d98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8f9061325e565b60405180910390fd5b80600a8190555050565b60098054610daf90613627565b80601f0160208091040260200160405190810160405280929190818152602001828054610ddb90613627565b8015610e285780601f10610dfd57610100808354040283529160200191610e28565b820191906000526020600020905b815481529060010190602001808311610e0b57829003601f168201915b505050505081565b60088054610e3d90613627565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6990613627565b8015610eb65780601f10610e8b57610100808354040283529160200191610eb6565b820191906000526020600020905b815481529060010190602001808311610e9957829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5e906131fe565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd8906131de565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61103061191e565b73ffffffffffffffffffffffffffffffffffffffff1661104e611146565b73ffffffffffffffffffffffffffffffffffffffff16146110a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109b9061325e565b60405180910390fd5b6110ae6000611d32565b565b6110b861191e565b73ffffffffffffffffffffffffffffffffffffffff166110d6611146565b73ffffffffffffffffffffffffffffffffffffffff161461112c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111239061325e565b60405180910390fd5b8060089080519060200190611142929190612621565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461117f90613627565b80601f01602080910402602001604051908101604052809291908181526020018280546111ab90613627565b80156111f85780601f106111cd576101008083540402835291602001916111f8565b820191906000526020600020905b8154815290600101906020018083116111db57829003601f168201915b5050505050905090565b61120a61191e565b73ffffffffffffffffffffffffffffffffffffffff16611228611146565b73ffffffffffffffffffffffffffffffffffffffff161461127e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112759061325e565b60405180910390fd5b6000732f5705006f241ed1ea682aec4fd25b8ad6ba51969050600080600090505b8381101561136b576112b16007611df8565b8273ffffffffffffffffffffffffffffffffffffffff16636352211e6112d760076119df565b6040518263ffffffff1660e01b81526004016112f3919061331e565b60206040518083038186803b15801561130b57600080fd5b505afa15801561131f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611343919061284f565b91506113588261135360076119df565b611e0e565b80806113639061368a565b91505061129f565b50505050565b80600081116113b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ac9061313e565b60405180910390fd5b600b54816113c360076119df565b6113cd919061345c565b111561140e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611405906132be565b60405180910390fd5b81600a5461141c91906134e3565b34101561145e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611455906132fe565b60405180910390fd5b6114683383611e2c565b5050565b61147e61147761191e565b8383611e6c565b5050565b61149361148d61191e565b836119ed565b6114d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c9906132de565b60405180910390fd5b6114de84848484611fd9565b50505050565b60606114ef826118b2565b61152e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115259061327e565b60405180910390fd5b6000611538612035565b905060008151116115585760405180602001604052806000815250611586565b80611562846120c7565b600960405160200161157693929190612fb2565b6040516020818303038152906040525b915050919050565b600b5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b816000811161166c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116639061313e565b60405180910390fd5b600b548161167a60076119df565b611684919061345c565b11156116c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bc906132be565b60405180910390fd5b6116cd61191e565b73ffffffffffffffffffffffffffffffffffffffff166116eb611146565b73ffffffffffffffffffffffffffffffffffffffff1614611741576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117389061325e565b60405180910390fd5b61174b8284611e2c565b505050565b61175861191e565b73ffffffffffffffffffffffffffffffffffffffff16611776611146565b73ffffffffffffffffffffffffffffffffffffffff16146117cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c39061325e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561183c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611833906130de565b60405180910390fd5b61184581611d32565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661199983610ebe565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b60006119f8826118b2565b611a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2e9061319e565b60405180910390fd5b6000611a4283610ebe565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611ab157508373ffffffffffffffffffffffffffffffffffffffff16611a998461084b565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ac25750611ac18185611594565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611aeb82610ebe565b73ffffffffffffffffffffffffffffffffffffffff1614611b41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b38906130fe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba89061315e565b60405180910390fd5b611bbc838383612228565b611bc7600082611926565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c17919061353d565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c6e919061345c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611d2d83838361222d565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001816000016000828254019250508190555050565b611e28828260405180602001604052806000815250612232565b5050565b60005b81811015611e6757611e416007611df8565b611e5483611e4f60076119df565b611e0e565b8080611e5f9061368a565b915050611e2f565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed29061317e565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611fcc9190613081565b60405180910390a3505050565b611fe4848484611acb565b611ff08484848461228d565b61202f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612026906130be565b60405180910390fd5b50505050565b60606008805461204490613627565b80601f016020809104026020016040519081016040528092919081815260200182805461207090613627565b80156120bd5780601f10612092576101008083540402835291602001916120bd565b820191906000526020600020905b8154815290600101906020018083116120a057829003601f168201915b5050505050905090565b6060600082141561210f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612223565b600082905060005b6000821461214157808061212a9061368a565b915050600a8261213a91906134b2565b9150612117565b60008167ffffffffffffffff81111561215d5761215c6137c0565b5b6040519080825280601f01601f19166020018201604052801561218f5781602001600182028036833780820191505090505b5090505b6000851461221c576001826121a8919061353d565b9150600a856121b791906136d3565b60306121c3919061345c565b60f81b8183815181106121d9576121d8613791565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561221591906134b2565b9450612193565b8093505050505b919050565b505050565b505050565b61223c8383612424565b612249600084848461228d565b612288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227f906130be565b60405180910390fd5b505050565b60006122ae8473ffffffffffffffffffffffffffffffffffffffff166125fe565b15612417578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026122d761191e565b8786866040518563ffffffff1660e01b81526004016122f99493929190613013565b602060405180830381600087803b15801561231357600080fd5b505af192505050801561234457506040513d601f19601f820116820180604052508101906123419190612a3f565b60015b6123c7573d8060008114612374576040519150601f19603f3d011682016040523d82523d6000602084013e612379565b606091505b506000815114156123bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b6906130be565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061241c565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248b9061321e565b60405180910390fd5b61249d816118b2565b156124dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d49061311e565b60405180910390fd5b6124e960008383612228565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612539919061345c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125fa6000838361222d565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461262d90613627565b90600052602060002090601f01602090048101928261264f5760008555612696565b82601f1061266857805160ff1916838001178555612696565b82800160010185558215612696579182015b8281111561269557825182559160200191906001019061267a565b5b5090506126a391906126a7565b5090565b5b808211156126c05760008160009055506001016126a8565b5090565b60006126d76126d28461335e565b613339565b9050828152602081018484840111156126f3576126f26137f4565b5b6126fe8482856135e5565b509392505050565b60006127196127148461338f565b613339565b905082815260208101848484011115612735576127346137f4565b5b6127408482856135e5565b509392505050565b60008135905061275781613cea565b92915050565b60008151905061276c81613cea565b92915050565b60008135905061278181613d01565b92915050565b60008135905061279681613d18565b92915050565b6000815190506127ab81613d18565b92915050565b600082601f8301126127c6576127c56137ef565b5b81356127d68482602086016126c4565b91505092915050565b600082601f8301126127f4576127f36137ef565b5b8135612804848260208601612706565b91505092915050565b60008135905061281c81613d2f565b92915050565b600060208284031215612838576128376137fe565b5b600061284684828501612748565b91505092915050565b600060208284031215612865576128646137fe565b5b60006128738482850161275d565b91505092915050565b60008060408385031215612893576128926137fe565b5b60006128a185828601612748565b92505060206128b285828601612748565b9150509250929050565b6000806000606084860312156128d5576128d46137fe565b5b60006128e386828701612748565b93505060206128f486828701612748565b92505060406129058682870161280d565b9150509250925092565b60008060008060808587031215612929576129286137fe565b5b600061293787828801612748565b945050602061294887828801612748565b93505060406129598782880161280d565b925050606085013567ffffffffffffffff81111561297a576129796137f9565b5b612986878288016127b1565b91505092959194509250565b600080604083850312156129a9576129a86137fe565b5b60006129b785828601612748565b92505060206129c885828601612772565b9150509250929050565b600080604083850312156129e9576129e86137fe565b5b60006129f785828601612748565b9250506020612a088582860161280d565b9150509250929050565b600060208284031215612a2857612a276137fe565b5b6000612a3684828501612787565b91505092915050565b600060208284031215612a5557612a546137fe565b5b6000612a638482850161279c565b91505092915050565b600060208284031215612a8257612a816137fe565b5b600082013567ffffffffffffffff811115612aa057612a9f6137f9565b5b612aac848285016127df565b91505092915050565b600060208284031215612acb57612aca6137fe565b5b6000612ad98482850161280d565b91505092915050565b60008060408385031215612af957612af86137fe565b5b6000612b078582860161280d565b9250506020612b1885828601612748565b9150509250929050565b6000612b2e8383612f94565b60208301905092915050565b612b4381613571565b82525050565b6000612b54826133e5565b612b5e8185613413565b9350612b69836133c0565b8060005b83811015612b9a578151612b818882612b22565b9750612b8c83613406565b925050600181019050612b6d565b5085935050505092915050565b612bb081613583565b82525050565b6000612bc1826133f0565b612bcb8185613424565b9350612bdb8185602086016135f4565b612be481613803565b840191505092915050565b6000612bfa826133fb565b612c048185613440565b9350612c148185602086016135f4565b612c1d81613803565b840191505092915050565b6000612c33826133fb565b612c3d8185613451565b9350612c4d8185602086016135f4565b80840191505092915050565b60008154612c6681613627565b612c708186613451565b94506001821660008114612c8b5760018114612c9c57612ccf565b60ff19831686528186019350612ccf565b612ca5856133d0565b60005b83811015612cc757815481890152600182019150602081019050612ca8565b838801955050505b50505092915050565b6000612ce5603283613440565b9150612cf082613814565b604082019050919050565b6000612d08602683613440565b9150612d1382613863565b604082019050919050565b6000612d2b602583613440565b9150612d36826138b2565b604082019050919050565b6000612d4e601c83613440565b9150612d5982613901565b602082019050919050565b6000612d71601483613440565b9150612d7c8261392a565b602082019050919050565b6000612d94602483613440565b9150612d9f82613953565b604082019050919050565b6000612db7601983613440565b9150612dc2826139a2565b602082019050919050565b6000612dda602c83613440565b9150612de5826139cb565b604082019050919050565b6000612dfd603883613440565b9150612e0882613a1a565b604082019050919050565b6000612e20602a83613440565b9150612e2b82613a69565b604082019050919050565b6000612e43602983613440565b9150612e4e82613ab8565b604082019050919050565b6000612e66602083613440565b9150612e7182613b07565b602082019050919050565b6000612e89602c83613440565b9150612e9482613b30565b604082019050919050565b6000612eac602083613440565b9150612eb782613b7f565b602082019050919050565b6000612ecf602f83613440565b9150612eda82613ba8565b604082019050919050565b6000612ef2602183613440565b9150612efd82613bf7565b604082019050919050565b6000612f15600083613435565b9150612f2082613c46565b600082019050919050565b6000612f38601483613440565b9150612f4382613c49565b602082019050919050565b6000612f5b603183613440565b9150612f6682613c72565b604082019050919050565b6000612f7e601383613440565b9150612f8982613cc1565b602082019050919050565b612f9d816135db565b82525050565b612fac816135db565b82525050565b6000612fbe8286612c28565b9150612fca8285612c28565b9150612fd68284612c59565b9150819050949350505050565b6000612fee82612f08565b9150819050919050565b600060208201905061300d6000830184612b3a565b92915050565b60006080820190506130286000830187612b3a565b6130356020830186612b3a565b6130426040830185612fa3565b81810360608301526130548184612bb6565b905095945050505050565b600060208201905081810360008301526130798184612b49565b905092915050565b60006020820190506130966000830184612ba7565b92915050565b600060208201905081810360008301526130b68184612bef565b905092915050565b600060208201905081810360008301526130d781612cd8565b9050919050565b600060208201905081810360008301526130f781612cfb565b9050919050565b6000602082019050818103600083015261311781612d1e565b9050919050565b6000602082019050818103600083015261313781612d41565b9050919050565b6000602082019050818103600083015261315781612d64565b9050919050565b6000602082019050818103600083015261317781612d87565b9050919050565b6000602082019050818103600083015261319781612daa565b9050919050565b600060208201905081810360008301526131b781612dcd565b9050919050565b600060208201905081810360008301526131d781612df0565b9050919050565b600060208201905081810360008301526131f781612e13565b9050919050565b6000602082019050818103600083015261321781612e36565b9050919050565b6000602082019050818103600083015261323781612e59565b9050919050565b6000602082019050818103600083015261325781612e7c565b9050919050565b6000602082019050818103600083015261327781612e9f565b9050919050565b6000602082019050818103600083015261329781612ec2565b9050919050565b600060208201905081810360008301526132b781612ee5565b9050919050565b600060208201905081810360008301526132d781612f2b565b9050919050565b600060208201905081810360008301526132f781612f4e565b9050919050565b6000602082019050818103600083015261331781612f71565b9050919050565b60006020820190506133336000830184612fa3565b92915050565b6000613343613354565b905061334f8282613659565b919050565b6000604051905090565b600067ffffffffffffffff821115613379576133786137c0565b5b61338282613803565b9050602081019050919050565b600067ffffffffffffffff8211156133aa576133a96137c0565b5b6133b382613803565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613467826135db565b9150613472836135db565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156134a7576134a6613704565b5b828201905092915050565b60006134bd826135db565b91506134c8836135db565b9250826134d8576134d7613733565b5b828204905092915050565b60006134ee826135db565b91506134f9836135db565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561353257613531613704565b5b828202905092915050565b6000613548826135db565b9150613553836135db565b92508282101561356657613565613704565b5b828203905092915050565b600061357c826135bb565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156136125780820151818401526020810190506135f7565b83811115613621576000848401525b50505050565b6000600282049050600182168061363f57607f821691505b6020821081141561365357613652613762565b5b50919050565b61366282613803565b810181811067ffffffffffffffff82111715613681576136806137c0565b5b80604052505050565b6000613695826135db565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156136c8576136c7613704565b5b600182019050919050565b60006136de826135db565b91506136e9836135db565b9250826136f9576136f8613733565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b613cf381613571565b8114613cfe57600080fd5b50565b613d0a81613583565b8114613d1557600080fd5b50565b613d218161358f565b8114613d2c57600080fd5b50565b613d38816135db565b8114613d4357600080fd5b5056fea2646970667358221220b7ed2fc8c1046cdadeb3ae767a3f0f6a7959a6b6ad380d61aa0ff8b71545a00764736f6c63430008070033
Deployed Bytecode Sourcemap
38795:3240:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25607:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26552:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28111:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27634:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39036:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41469:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39753:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28861:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41575:137;;;;;;;;;;;;;:::i;:::-;;29271:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40214:635;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41283:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38994:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38961:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26246:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25976:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6228:103;;;;;;;;;;;;;:::i;:::-;;41363:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5577:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26721:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39395:352;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39848:197;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28404:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29527:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40855:422;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39084:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28630:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40053:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6486:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25607:305;25709:4;25761:25;25746:40;;;:11;:40;;;;:105;;;;25818:33;25803:48;;;:11;:48;;;;25746:105;:158;;;;25868:36;25892:11;25868:23;:36::i;:::-;25746:158;25726:178;;25607:305;;;:::o;26552:100::-;26606:13;26639:5;26632:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26552:100;:::o;28111:221::-;28187:7;28215:16;28223:7;28215;:16::i;:::-;28207:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28300:15;:24;28316:7;28300:24;;;;;;;;;;;;;;;;;;;;;28293:31;;28111:221;;;:::o;27634:411::-;27715:13;27731:23;27746:7;27731:14;:23::i;:::-;27715:39;;27779:5;27773:11;;:2;:11;;;;27765:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27873:5;27857:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27882:37;27899:5;27906:12;:10;:12::i;:::-;27882:16;:37::i;:::-;27857:62;27835:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;28016:21;28025:2;28029:7;28016:8;:21::i;:::-;27704:341;27634:411;;:::o;39036:43::-;;;;:::o;41469:100::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41553:10:::1;41541:9;:22;;;;;;;;;;;;:::i;:::-;;41469:100:::0;:::o;39753:89::-;39797:7;39820:16;:6;:14;:16::i;:::-;39813:23;;39753:89;:::o;28861:339::-;29056:41;29075:12;:10;:12::i;:::-;29089:7;29056:18;:41::i;:::-;29048:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29164:28;29174:4;29180:2;29184:7;29164:9;:28::i;:::-;28861:339;;;:::o;41575:137::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41620:7:::1;41641;:5;:7::i;:::-;41633:21;;41662;41633:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41619:69;;;41703:2;41695:11;;;::::0;::::1;;41612:100;41575:137::o:0;29271:185::-;29409:39;29426:4;29432:2;29436:7;29409:39;;;;;;;;;;;;:16;:39::i;:::-;29271:185;;;:::o;40214:635::-;40289:16;40317:23;40343:17;40353:6;40343:9;:17::i;:::-;40317:43;;40367:30;40414:15;40400:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40367:63;;40437:22;40462:1;40437:26;;40470:23;40506:309;40531:15;40513;:33;:64;;;;;40568:9;;40550:14;:27;;40513:64;40506:309;;;40588:25;40616:23;40624:14;40616:7;:23::i;:::-;40588:51;;40675:6;40654:27;;:17;:27;;;40650:131;;;40727:14;40694:13;40708:15;40694:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;40754:17;;;;;:::i;:::-;;;;40650:131;40791:16;;;;;:::i;:::-;;;;40579:236;40506:309;;;40830:13;40823:20;;;;;;40214:635;;;:::o;41283:74::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41346:5:::1;41339:4;:12;;;;41283:74:::0;:::o;38994:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38961:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26246:239::-;26318:7;26338:13;26354:7;:16;26362:7;26354:16;;;;;;;;;;;;;;;;;;;;;26338:32;;26406:1;26389:19;;:5;:19;;;;26381:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26472:5;26465:12;;;26246:239;;;:::o;25976:208::-;26048:7;26093:1;26076:19;;:5;:19;;;;26068:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26160:9;:16;26170:5;26160:16;;;;;;;;;;;;;;;;26153:23;;25976:208;;;:::o;6228:103::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6293:30:::1;6320:1;6293:18;:30::i;:::-;6228:103::o:0;41363:100::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41447:10:::1;41435:9;:22;;;;;;;;;;;;:::i;:::-;;41363:100:::0;:::o;5577:87::-;5623:7;5650:6;;;;;;;;;;;5643:13;;5577:87;:::o;26721:104::-;26777:13;26810:7;26803:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26721:104;:::o;39395:352::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39454:13:::1;39478:42;39454:67;;39531:17;39562:9:::0;39574:1:::1;39562:13;;39557:185;39581:6;39577:1;:10;39557:185;;;39605:18;:6;:16;:18::i;:::-;39645:5;:13;;;39659:16;:6;:14;:16::i;:::-;39645:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39633:43;;39696:38;39706:9;39717:16;:6;:14;:16::i;:::-;39696:9;:38::i;:::-;39589:3;;;;;:::i;:::-;;;;39557:185;;;;39445:302;;39395:352:::0;:::o;39848:197::-;39913:11;39266:1;39252:11;:15;39244:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;39341:9;;39326:11;39307:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;39299:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;39961:11:::1;39954:4;;:18;;;;:::i;:::-;39941:9;:31;;39933:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;40005:34;40015:10;40027:11;40005:9;:34::i;:::-;39848:197:::0;;:::o;28404:155::-;28499:52;28518:12;:10;:12::i;:::-;28532:8;28542;28499:18;:52::i;:::-;28404:155;;:::o;29527:328::-;29702:41;29721:12;:10;:12::i;:::-;29735:7;29702:18;:41::i;:::-;29694:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29808:39;29822:4;29828:2;29832:7;29841:5;29808:13;:39::i;:::-;29527:328;;;;:::o;40855:422::-;40954:13;40995:17;41003:8;40995:7;:17::i;:::-;40979:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;41086:28;41117:10;:8;:10::i;:::-;41086:41;;41172:1;41147:14;41141:28;:32;:130;;;;;;;;;;;;;;;;;41209:14;41225:19;:8;:17;:19::i;:::-;41246:9;41192:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41141:130;41134:137;;;40855:422;;;:::o;39084:31::-;;;;:::o;28630:164::-;28727:4;28751:18;:25;28770:5;28751:25;;;;;;;;;;;;;;;:35;28777:8;28751:35;;;;;;;;;;;;;;;;;;;;;;;;;28744:42;;28630:164;;;;:::o;40053:155::-;40139:11;39266:1;39252:11;:15;39244:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;39341:9;;39326:11;39307:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;39299:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;5808:12:::1;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40169:33:::2;40179:9;40190:11;40169:9;:33::i;:::-;40053:155:::0;;;:::o;6486:201::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6595:1:::1;6575:22;;:8;:22;;;;6567:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6651:28;6670:8;6651:18;:28::i;:::-;6486:201:::0;:::o;18361:157::-;18446:4;18485:25;18470:40;;;:11;:40;;;;18463:47;;18361:157;;;:::o;31365:127::-;31430:4;31482:1;31454:30;;:7;:16;31462:7;31454:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31447:37;;31365:127;;;:::o;4301:98::-;4354:7;4381:10;4374:17;;4301:98;:::o;35511:174::-;35613:2;35586:15;:24;35602:7;35586:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35669:7;35665:2;35631:46;;35640:23;35655:7;35640:14;:23::i;:::-;35631:46;;;;;;;;;;;;35511:174;;:::o;905:114::-;970:7;997;:14;;;990:21;;905:114;;;:::o;31659:348::-;31752:4;31777:16;31785:7;31777;:16::i;:::-;31769:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31853:13;31869:23;31884:7;31869:14;:23::i;:::-;31853:39;;31922:5;31911:16;;:7;:16;;;:51;;;;31955:7;31931:31;;:20;31943:7;31931:11;:20::i;:::-;:31;;;31911:51;:87;;;;31966:32;31983:5;31990:7;31966:16;:32::i;:::-;31911:87;31903:96;;;31659:348;;;;:::o;34768:625::-;34927:4;34900:31;;:23;34915:7;34900:14;:23::i;:::-;:31;;;34892:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;35006:1;34992:16;;:2;:16;;;;34984:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35062:39;35083:4;35089:2;35093:7;35062:20;:39::i;:::-;35166:29;35183:1;35187:7;35166:8;:29::i;:::-;35227:1;35208:9;:15;35218:4;35208:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35256:1;35239:9;:13;35249:2;35239:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35287:2;35268:7;:16;35276:7;35268:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35326:7;35322:2;35307:27;;35316:4;35307:27;;;;;;;;;;;;35347:38;35367:4;35373:2;35377:7;35347:19;:38::i;:::-;34768:625;;;:::o;6847:191::-;6921:16;6940:6;;;;;;;;;;;6921:25;;6966:8;6957:6;;:17;;;;;;;;;;;;;;;;;;7021:8;6990:40;;7011:8;6990:40;;;;;;;;;;;;6910:128;6847:191;:::o;1027:127::-;1134:1;1116:7;:14;;;:19;;;;;;;;;;;1027:127;:::o;32349:110::-;32425:26;32435:2;32439:7;32425:26;;;;;;;;;;;;:9;:26::i;:::-;32349:110;;:::o;41718:204::-;41798:9;41793:124;41817:11;41813:1;:15;41793:124;;;41844:18;:6;:16;:18::i;:::-;41871:38;41881:9;41892:16;:6;:14;:16::i;:::-;41871:9;:38::i;:::-;41830:3;;;;;:::i;:::-;;;;41793:124;;;;41718:204;;:::o;35827:315::-;35982:8;35973:17;;:5;:17;;;;35965:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36069:8;36031:18;:25;36050:5;36031:25;;;;;;;;;;;;;;;:35;36057:8;36031:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36115:8;36093:41;;36108:5;36093:41;;;36125:8;36093:41;;;;;;:::i;:::-;;;;;;;;35827:315;;;:::o;30737:::-;30894:28;30904:4;30910:2;30914:7;30894:9;:28::i;:::-;30941:48;30964:4;30970:2;30974:7;30983:5;30941:22;:48::i;:::-;30933:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30737:315;;;;:::o;41928:104::-;41988:13;42017:9;42010:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41928:104;:::o;1863:723::-;1919:13;2149:1;2140:5;:10;2136:53;;;2167:10;;;;;;;;;;;;;;;;;;;;;2136:53;2199:12;2214:5;2199:20;;2230:14;2255:78;2270:1;2262:4;:9;2255:78;;2288:8;;;;;:::i;:::-;;;;2319:2;2311:10;;;;;:::i;:::-;;;2255:78;;;2343:19;2375:6;2365:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2343:39;;2393:154;2409:1;2400:5;:10;2393:154;;2437:1;2427:11;;;;;:::i;:::-;;;2504:2;2496:5;:10;;;;:::i;:::-;2483:2;:24;;;;:::i;:::-;2470:39;;2453:6;2460;2453:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2533:2;2524:11;;;;;:::i;:::-;;;2393:154;;;2571:6;2557:21;;;;;1863:723;;;;:::o;38078:126::-;;;;:::o;38589:125::-;;;;:::o;32686:321::-;32816:18;32822:2;32826:7;32816:5;:18::i;:::-;32867:54;32898:1;32902:2;32906:7;32915:5;32867:22;:54::i;:::-;32845:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32686:321;;;:::o;36707:799::-;36862:4;36883:15;:2;:13;;;:15::i;:::-;36879:620;;;36935:2;36919:36;;;36956:12;:10;:12::i;:::-;36970:4;36976:7;36985:5;36919:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36915:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37178:1;37161:6;:13;:18;37157:272;;;37204:60;;;;;;;;;;:::i;:::-;;;;;;;;37157:272;37379:6;37373:13;37364:6;37360:2;37356:15;37349:38;36915:529;37052:41;;;37042:51;;;:6;:51;;;;37035:58;;;;;36879:620;37483:4;37476:11;;36707:799;;;;;;;:::o;33343:439::-;33437:1;33423:16;;:2;:16;;;;33415:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33496:16;33504:7;33496;:16::i;:::-;33495:17;33487:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33558:45;33587:1;33591:2;33595:7;33558:20;:45::i;:::-;33633:1;33616:9;:13;33626:2;33616:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33664:2;33645:7;:16;33653:7;33645:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33709:7;33705:2;33684:33;;33701:1;33684:33;;;;;;;;;;;;33730:44;33758:1;33762:2;33766:7;33730:19;:44::i;:::-;33343:439;;:::o;8278:326::-;8338:4;8595:1;8573:7;:19;;;:23;8566:30;;8278:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:143::-;1043:5;1074:6;1068:13;1059:22;;1090:33;1117:5;1090:33;:::i;:::-;986:143;;;;:::o;1135:133::-;1178:5;1216:6;1203:20;1194:29;;1232:30;1256:5;1232:30;:::i;:::-;1135:133;;;;:::o;1274:137::-;1319:5;1357:6;1344:20;1335:29;;1373:32;1399:5;1373:32;:::i;:::-;1274:137;;;;:::o;1417:141::-;1473:5;1504:6;1498:13;1489:22;;1520:32;1546:5;1520:32;:::i;:::-;1417:141;;;;:::o;1577:338::-;1632:5;1681:3;1674:4;1666:6;1662:17;1658:27;1648:122;;1689:79;;:::i;:::-;1648:122;1806:6;1793:20;1831:78;1905:3;1897:6;1890:4;1882:6;1878:17;1831:78;:::i;:::-;1822:87;;1638:277;1577:338;;;;:::o;1935:340::-;1991:5;2040:3;2033:4;2025:6;2021:17;2017:27;2007:122;;2048:79;;:::i;:::-;2007:122;2165:6;2152:20;2190:79;2265:3;2257:6;2250:4;2242:6;2238:17;2190:79;:::i;:::-;2181:88;;1997:278;1935:340;;;;:::o;2281:139::-;2327:5;2365:6;2352:20;2343:29;;2381:33;2408:5;2381:33;:::i;:::-;2281:139;;;;:::o;2426:329::-;2485:6;2534:2;2522:9;2513:7;2509:23;2505:32;2502:119;;;2540:79;;:::i;:::-;2502:119;2660:1;2685:53;2730:7;2721:6;2710:9;2706:22;2685:53;:::i;:::-;2675:63;;2631:117;2426:329;;;;:::o;2761:351::-;2831:6;2880:2;2868:9;2859:7;2855:23;2851:32;2848:119;;;2886:79;;:::i;:::-;2848:119;3006:1;3031:64;3087:7;3078:6;3067:9;3063:22;3031:64;:::i;:::-;3021:74;;2977:128;2761:351;;;;:::o;3118:474::-;3186:6;3194;3243:2;3231:9;3222:7;3218:23;3214:32;3211:119;;;3249:79;;:::i;:::-;3211:119;3369:1;3394:53;3439:7;3430:6;3419:9;3415:22;3394:53;:::i;:::-;3384:63;;3340:117;3496:2;3522:53;3567:7;3558:6;3547:9;3543:22;3522:53;:::i;:::-;3512:63;;3467:118;3118:474;;;;;:::o;3598:619::-;3675:6;3683;3691;3740:2;3728:9;3719:7;3715:23;3711:32;3708:119;;;3746:79;;:::i;:::-;3708:119;3866:1;3891:53;3936:7;3927:6;3916:9;3912:22;3891:53;:::i;:::-;3881:63;;3837:117;3993:2;4019:53;4064:7;4055:6;4044:9;4040:22;4019:53;:::i;:::-;4009:63;;3964:118;4121:2;4147:53;4192:7;4183:6;4172:9;4168:22;4147:53;:::i;:::-;4137:63;;4092:118;3598:619;;;;;:::o;4223:943::-;4318:6;4326;4334;4342;4391:3;4379:9;4370:7;4366:23;4362:33;4359:120;;;4398:79;;:::i;:::-;4359:120;4518:1;4543:53;4588:7;4579:6;4568:9;4564:22;4543:53;:::i;:::-;4533:63;;4489:117;4645:2;4671:53;4716:7;4707:6;4696:9;4692:22;4671:53;:::i;:::-;4661:63;;4616:118;4773:2;4799:53;4844:7;4835:6;4824:9;4820:22;4799:53;:::i;:::-;4789:63;;4744:118;4929:2;4918:9;4914:18;4901:32;4960:18;4952:6;4949:30;4946:117;;;4982:79;;:::i;:::-;4946:117;5087:62;5141:7;5132:6;5121:9;5117:22;5087:62;:::i;:::-;5077:72;;4872:287;4223:943;;;;;;;:::o;5172:468::-;5237:6;5245;5294:2;5282:9;5273:7;5269:23;5265:32;5262:119;;;5300:79;;:::i;:::-;5262:119;5420:1;5445:53;5490:7;5481:6;5470:9;5466:22;5445:53;:::i;:::-;5435:63;;5391:117;5547:2;5573:50;5615:7;5606:6;5595:9;5591:22;5573:50;:::i;:::-;5563:60;;5518:115;5172:468;;;;;:::o;5646:474::-;5714:6;5722;5771:2;5759:9;5750:7;5746:23;5742:32;5739:119;;;5777:79;;:::i;:::-;5739:119;5897:1;5922:53;5967:7;5958:6;5947:9;5943:22;5922:53;:::i;:::-;5912:63;;5868:117;6024:2;6050:53;6095:7;6086:6;6075:9;6071:22;6050:53;:::i;:::-;6040:63;;5995:118;5646:474;;;;;:::o;6126:327::-;6184:6;6233:2;6221:9;6212:7;6208:23;6204:32;6201:119;;;6239:79;;:::i;:::-;6201:119;6359:1;6384:52;6428:7;6419:6;6408:9;6404:22;6384:52;:::i;:::-;6374:62;;6330:116;6126:327;;;;:::o;6459:349::-;6528:6;6577:2;6565:9;6556:7;6552:23;6548:32;6545:119;;;6583:79;;:::i;:::-;6545:119;6703:1;6728:63;6783:7;6774:6;6763:9;6759:22;6728:63;:::i;:::-;6718:73;;6674:127;6459:349;;;;:::o;6814:509::-;6883:6;6932:2;6920:9;6911:7;6907:23;6903:32;6900:119;;;6938:79;;:::i;:::-;6900:119;7086:1;7075:9;7071:17;7058:31;7116:18;7108:6;7105:30;7102:117;;;7138:79;;:::i;:::-;7102:117;7243:63;7298:7;7289:6;7278:9;7274:22;7243:63;:::i;:::-;7233:73;;7029:287;6814:509;;;;:::o;7329:329::-;7388:6;7437:2;7425:9;7416:7;7412:23;7408:32;7405:119;;;7443:79;;:::i;:::-;7405:119;7563:1;7588:53;7633:7;7624:6;7613:9;7609:22;7588:53;:::i;:::-;7578:63;;7534:117;7329:329;;;;:::o;7664:474::-;7732:6;7740;7789:2;7777:9;7768:7;7764:23;7760:32;7757:119;;;7795:79;;:::i;:::-;7757:119;7915:1;7940:53;7985:7;7976:6;7965:9;7961:22;7940:53;:::i;:::-;7930:63;;7886:117;8042:2;8068:53;8113:7;8104:6;8093:9;8089:22;8068:53;:::i;:::-;8058:63;;8013:118;7664:474;;;;;:::o;8144:179::-;8213:10;8234:46;8276:3;8268:6;8234:46;:::i;:::-;8312:4;8307:3;8303:14;8289:28;;8144:179;;;;:::o;8329:118::-;8416:24;8434:5;8416:24;:::i;:::-;8411:3;8404:37;8329:118;;:::o;8483:732::-;8602:3;8631:54;8679:5;8631:54;:::i;:::-;8701:86;8780:6;8775:3;8701:86;:::i;:::-;8694:93;;8811:56;8861:5;8811:56;:::i;:::-;8890:7;8921:1;8906:284;8931:6;8928:1;8925:13;8906:284;;;9007:6;9001:13;9034:63;9093:3;9078:13;9034:63;:::i;:::-;9027:70;;9120:60;9173:6;9120:60;:::i;:::-;9110:70;;8966:224;8953:1;8950;8946:9;8941:14;;8906:284;;;8910:14;9206:3;9199:10;;8607:608;;;8483:732;;;;:::o;9221:109::-;9302:21;9317:5;9302:21;:::i;:::-;9297:3;9290:34;9221:109;;:::o;9336:360::-;9422:3;9450:38;9482:5;9450:38;:::i;:::-;9504:70;9567:6;9562:3;9504:70;:::i;:::-;9497:77;;9583:52;9628:6;9623:3;9616:4;9609:5;9605:16;9583:52;:::i;:::-;9660:29;9682:6;9660:29;:::i;:::-;9655:3;9651:39;9644:46;;9426:270;9336:360;;;;:::o;9702:364::-;9790:3;9818:39;9851:5;9818:39;:::i;:::-;9873:71;9937:6;9932:3;9873:71;:::i;:::-;9866:78;;9953:52;9998:6;9993:3;9986:4;9979:5;9975:16;9953:52;:::i;:::-;10030:29;10052:6;10030:29;:::i;:::-;10025:3;10021:39;10014:46;;9794:272;9702:364;;;;:::o;10072:377::-;10178:3;10206:39;10239:5;10206:39;:::i;:::-;10261:89;10343:6;10338:3;10261:89;:::i;:::-;10254:96;;10359:52;10404:6;10399:3;10392:4;10385:5;10381:16;10359:52;:::i;:::-;10436:6;10431:3;10427:16;10420:23;;10182:267;10072:377;;;;:::o;10479:845::-;10582:3;10619:5;10613:12;10648:36;10674:9;10648:36;:::i;:::-;10700:89;10782:6;10777:3;10700:89;:::i;:::-;10693:96;;10820:1;10809:9;10805:17;10836:1;10831:137;;;;10982:1;10977:341;;;;10798:520;;10831:137;10915:4;10911:9;10900;10896:25;10891:3;10884:38;10951:6;10946:3;10942:16;10935:23;;10831:137;;10977:341;11044:38;11076:5;11044:38;:::i;:::-;11104:1;11118:154;11132:6;11129:1;11126:13;11118:154;;;11206:7;11200:14;11196:1;11191:3;11187:11;11180:35;11256:1;11247:7;11243:15;11232:26;;11154:4;11151:1;11147:12;11142:17;;11118:154;;;11301:6;11296:3;11292:16;11285:23;;10984:334;;10798:520;;10586:738;;10479:845;;;;:::o;11330:366::-;11472:3;11493:67;11557:2;11552:3;11493:67;:::i;:::-;11486:74;;11569:93;11658:3;11569:93;:::i;:::-;11687:2;11682:3;11678:12;11671:19;;11330:366;;;:::o;11702:::-;11844:3;11865:67;11929:2;11924:3;11865:67;:::i;:::-;11858:74;;11941:93;12030:3;11941:93;:::i;:::-;12059:2;12054:3;12050:12;12043:19;;11702:366;;;:::o;12074:::-;12216:3;12237:67;12301:2;12296:3;12237:67;:::i;:::-;12230:74;;12313:93;12402:3;12313:93;:::i;:::-;12431:2;12426:3;12422:12;12415:19;;12074:366;;;:::o;12446:::-;12588:3;12609:67;12673:2;12668:3;12609:67;:::i;:::-;12602:74;;12685:93;12774:3;12685:93;:::i;:::-;12803:2;12798:3;12794:12;12787:19;;12446:366;;;:::o;12818:::-;12960:3;12981:67;13045:2;13040:3;12981:67;:::i;:::-;12974:74;;13057:93;13146:3;13057:93;:::i;:::-;13175:2;13170:3;13166:12;13159:19;;12818:366;;;:::o;13190:::-;13332:3;13353:67;13417:2;13412:3;13353:67;:::i;:::-;13346:74;;13429:93;13518:3;13429:93;:::i;:::-;13547:2;13542:3;13538:12;13531:19;;13190:366;;;:::o;13562:::-;13704:3;13725:67;13789:2;13784:3;13725:67;:::i;:::-;13718:74;;13801:93;13890:3;13801:93;:::i;:::-;13919:2;13914:3;13910:12;13903:19;;13562:366;;;:::o;13934:::-;14076:3;14097:67;14161:2;14156:3;14097:67;:::i;:::-;14090:74;;14173:93;14262:3;14173:93;:::i;:::-;14291:2;14286:3;14282:12;14275:19;;13934:366;;;:::o;14306:::-;14448:3;14469:67;14533:2;14528:3;14469:67;:::i;:::-;14462:74;;14545:93;14634:3;14545:93;:::i;:::-;14663:2;14658:3;14654:12;14647:19;;14306:366;;;:::o;14678:::-;14820:3;14841:67;14905:2;14900:3;14841:67;:::i;:::-;14834:74;;14917:93;15006:3;14917:93;:::i;:::-;15035:2;15030:3;15026:12;15019:19;;14678:366;;;:::o;15050:::-;15192:3;15213:67;15277:2;15272:3;15213:67;:::i;:::-;15206:74;;15289:93;15378:3;15289:93;:::i;:::-;15407:2;15402:3;15398:12;15391:19;;15050:366;;;:::o;15422:::-;15564:3;15585:67;15649:2;15644:3;15585:67;:::i;:::-;15578:74;;15661:93;15750:3;15661:93;:::i;:::-;15779:2;15774:3;15770:12;15763:19;;15422:366;;;:::o;15794:::-;15936:3;15957:67;16021:2;16016:3;15957:67;:::i;:::-;15950:74;;16033:93;16122:3;16033:93;:::i;:::-;16151:2;16146:3;16142:12;16135:19;;15794:366;;;:::o;16166:::-;16308:3;16329:67;16393:2;16388:3;16329:67;:::i;:::-;16322:74;;16405:93;16494:3;16405:93;:::i;:::-;16523:2;16518:3;16514:12;16507:19;;16166:366;;;:::o;16538:::-;16680:3;16701:67;16765:2;16760:3;16701:67;:::i;:::-;16694:74;;16777:93;16866:3;16777:93;:::i;:::-;16895:2;16890:3;16886:12;16879:19;;16538:366;;;:::o;16910:::-;17052:3;17073:67;17137:2;17132:3;17073:67;:::i;:::-;17066:74;;17149:93;17238:3;17149:93;:::i;:::-;17267:2;17262:3;17258:12;17251:19;;16910:366;;;:::o;17282:398::-;17441:3;17462:83;17543:1;17538:3;17462:83;:::i;:::-;17455:90;;17554:93;17643:3;17554:93;:::i;:::-;17672:1;17667:3;17663:11;17656:18;;17282:398;;;:::o;17686:366::-;17828:3;17849:67;17913:2;17908:3;17849:67;:::i;:::-;17842:74;;17925:93;18014:3;17925:93;:::i;:::-;18043:2;18038:3;18034:12;18027:19;;17686:366;;;:::o;18058:::-;18200:3;18221:67;18285:2;18280:3;18221:67;:::i;:::-;18214:74;;18297:93;18386:3;18297:93;:::i;:::-;18415:2;18410:3;18406:12;18399:19;;18058:366;;;:::o;18430:::-;18572:3;18593:67;18657:2;18652:3;18593:67;:::i;:::-;18586:74;;18669:93;18758:3;18669:93;:::i;:::-;18787:2;18782:3;18778:12;18771:19;;18430:366;;;:::o;18802:108::-;18879:24;18897:5;18879:24;:::i;:::-;18874:3;18867:37;18802:108;;:::o;18916:118::-;19003:24;19021:5;19003:24;:::i;:::-;18998:3;18991:37;18916:118;;:::o;19040:589::-;19265:3;19287:95;19378:3;19369:6;19287:95;:::i;:::-;19280:102;;19399:95;19490:3;19481:6;19399:95;:::i;:::-;19392:102;;19511:92;19599:3;19590:6;19511:92;:::i;:::-;19504:99;;19620:3;19613:10;;19040:589;;;;;;:::o;19635:379::-;19819:3;19841:147;19984:3;19841:147;:::i;:::-;19834:154;;20005:3;19998:10;;19635:379;;;:::o;20020:222::-;20113:4;20151:2;20140:9;20136:18;20128:26;;20164:71;20232:1;20221:9;20217:17;20208:6;20164:71;:::i;:::-;20020:222;;;;:::o;20248:640::-;20443:4;20481:3;20470:9;20466:19;20458:27;;20495:71;20563:1;20552:9;20548:17;20539:6;20495:71;:::i;:::-;20576:72;20644:2;20633:9;20629:18;20620:6;20576:72;:::i;:::-;20658;20726:2;20715:9;20711:18;20702:6;20658:72;:::i;:::-;20777:9;20771:4;20767:20;20762:2;20751:9;20747:18;20740:48;20805:76;20876:4;20867:6;20805:76;:::i;:::-;20797:84;;20248:640;;;;;;;:::o;20894:373::-;21037:4;21075:2;21064:9;21060:18;21052:26;;21124:9;21118:4;21114:20;21110:1;21099:9;21095:17;21088:47;21152:108;21255:4;21246:6;21152:108;:::i;:::-;21144:116;;20894:373;;;;:::o;21273:210::-;21360:4;21398:2;21387:9;21383:18;21375:26;;21411:65;21473:1;21462:9;21458:17;21449:6;21411:65;:::i;:::-;21273:210;;;;:::o;21489:313::-;21602:4;21640:2;21629:9;21625:18;21617:26;;21689:9;21683:4;21679:20;21675:1;21664:9;21660:17;21653:47;21717:78;21790:4;21781:6;21717:78;:::i;:::-;21709:86;;21489:313;;;;:::o;21808:419::-;21974:4;22012:2;22001:9;21997:18;21989:26;;22061:9;22055:4;22051:20;22047:1;22036:9;22032:17;22025:47;22089:131;22215:4;22089:131;:::i;:::-;22081:139;;21808:419;;;:::o;22233:::-;22399:4;22437:2;22426:9;22422:18;22414:26;;22486:9;22480:4;22476:20;22472:1;22461:9;22457:17;22450:47;22514:131;22640:4;22514:131;:::i;:::-;22506:139;;22233:419;;;:::o;22658:::-;22824:4;22862:2;22851:9;22847:18;22839:26;;22911:9;22905:4;22901:20;22897:1;22886:9;22882:17;22875:47;22939:131;23065:4;22939:131;:::i;:::-;22931:139;;22658:419;;;:::o;23083:::-;23249:4;23287:2;23276:9;23272:18;23264:26;;23336:9;23330:4;23326:20;23322:1;23311:9;23307:17;23300:47;23364:131;23490:4;23364:131;:::i;:::-;23356:139;;23083:419;;;:::o;23508:::-;23674:4;23712:2;23701:9;23697:18;23689:26;;23761:9;23755:4;23751:20;23747:1;23736:9;23732:17;23725:47;23789:131;23915:4;23789:131;:::i;:::-;23781:139;;23508:419;;;:::o;23933:::-;24099:4;24137:2;24126:9;24122:18;24114:26;;24186:9;24180:4;24176:20;24172:1;24161:9;24157:17;24150:47;24214:131;24340:4;24214:131;:::i;:::-;24206:139;;23933:419;;;:::o;24358:::-;24524:4;24562:2;24551:9;24547:18;24539:26;;24611:9;24605:4;24601:20;24597:1;24586:9;24582:17;24575:47;24639:131;24765:4;24639:131;:::i;:::-;24631:139;;24358:419;;;:::o;24783:::-;24949:4;24987:2;24976:9;24972:18;24964:26;;25036:9;25030:4;25026:20;25022:1;25011:9;25007:17;25000:47;25064:131;25190:4;25064:131;:::i;:::-;25056:139;;24783:419;;;:::o;25208:::-;25374:4;25412:2;25401:9;25397:18;25389:26;;25461:9;25455:4;25451:20;25447:1;25436:9;25432:17;25425:47;25489:131;25615:4;25489:131;:::i;:::-;25481:139;;25208:419;;;:::o;25633:::-;25799:4;25837:2;25826:9;25822:18;25814:26;;25886:9;25880:4;25876:20;25872:1;25861:9;25857:17;25850:47;25914:131;26040:4;25914:131;:::i;:::-;25906:139;;25633:419;;;:::o;26058:::-;26224:4;26262:2;26251:9;26247:18;26239:26;;26311:9;26305:4;26301:20;26297:1;26286:9;26282:17;26275:47;26339:131;26465:4;26339:131;:::i;:::-;26331:139;;26058:419;;;:::o;26483:::-;26649:4;26687:2;26676:9;26672:18;26664:26;;26736:9;26730:4;26726:20;26722:1;26711:9;26707:17;26700:47;26764:131;26890:4;26764:131;:::i;:::-;26756:139;;26483:419;;;:::o;26908:::-;27074:4;27112:2;27101:9;27097:18;27089:26;;27161:9;27155:4;27151:20;27147:1;27136:9;27132:17;27125:47;27189:131;27315:4;27189:131;:::i;:::-;27181:139;;26908:419;;;:::o;27333:::-;27499:4;27537:2;27526:9;27522:18;27514:26;;27586:9;27580:4;27576:20;27572:1;27561:9;27557:17;27550:47;27614:131;27740:4;27614:131;:::i;:::-;27606:139;;27333:419;;;:::o;27758:::-;27924:4;27962:2;27951:9;27947:18;27939:26;;28011:9;28005:4;28001:20;27997:1;27986:9;27982:17;27975:47;28039:131;28165:4;28039:131;:::i;:::-;28031:139;;27758:419;;;:::o;28183:::-;28349:4;28387:2;28376:9;28372:18;28364:26;;28436:9;28430:4;28426:20;28422:1;28411:9;28407:17;28400:47;28464:131;28590:4;28464:131;:::i;:::-;28456:139;;28183:419;;;:::o;28608:::-;28774:4;28812:2;28801:9;28797:18;28789:26;;28861:9;28855:4;28851:20;28847:1;28836:9;28832:17;28825:47;28889:131;29015:4;28889:131;:::i;:::-;28881:139;;28608:419;;;:::o;29033:::-;29199:4;29237:2;29226:9;29222:18;29214:26;;29286:9;29280:4;29276:20;29272:1;29261:9;29257:17;29250:47;29314:131;29440:4;29314:131;:::i;:::-;29306:139;;29033:419;;;:::o;29458:::-;29624:4;29662:2;29651:9;29647:18;29639:26;;29711:9;29705:4;29701:20;29697:1;29686:9;29682:17;29675:47;29739:131;29865:4;29739:131;:::i;:::-;29731:139;;29458:419;;;:::o;29883:222::-;29976:4;30014:2;30003:9;29999:18;29991:26;;30027:71;30095:1;30084:9;30080:17;30071:6;30027:71;:::i;:::-;29883:222;;;;:::o;30111:129::-;30145:6;30172:20;;:::i;:::-;30162:30;;30201:33;30229:4;30221:6;30201:33;:::i;:::-;30111:129;;;:::o;30246:75::-;30279:6;30312:2;30306:9;30296:19;;30246:75;:::o;30327:307::-;30388:4;30478:18;30470:6;30467:30;30464:56;;;30500:18;;:::i;:::-;30464:56;30538:29;30560:6;30538:29;:::i;:::-;30530:37;;30622:4;30616;30612:15;30604:23;;30327:307;;;:::o;30640:308::-;30702:4;30792:18;30784:6;30781:30;30778:56;;;30814:18;;:::i;:::-;30778:56;30852:29;30874:6;30852:29;:::i;:::-;30844:37;;30936:4;30930;30926:15;30918:23;;30640:308;;;:::o;30954:132::-;31021:4;31044:3;31036:11;;31074:4;31069:3;31065:14;31057:22;;30954:132;;;:::o;31092:141::-;31141:4;31164:3;31156:11;;31187:3;31184:1;31177:14;31221:4;31218:1;31208:18;31200:26;;31092:141;;;:::o;31239:114::-;31306:6;31340:5;31334:12;31324:22;;31239:114;;;:::o;31359:98::-;31410:6;31444:5;31438:12;31428:22;;31359:98;;;:::o;31463:99::-;31515:6;31549:5;31543:12;31533:22;;31463:99;;;:::o;31568:113::-;31638:4;31670;31665:3;31661:14;31653:22;;31568:113;;;:::o;31687:184::-;31786:11;31820:6;31815:3;31808:19;31860:4;31855:3;31851:14;31836:29;;31687:184;;;;:::o;31877:168::-;31960:11;31994:6;31989:3;31982:19;32034:4;32029:3;32025:14;32010:29;;31877:168;;;;:::o;32051:147::-;32152:11;32189:3;32174:18;;32051:147;;;;:::o;32204:169::-;32288:11;32322:6;32317:3;32310:19;32362:4;32357:3;32353:14;32338:29;;32204:169;;;;:::o;32379:148::-;32481:11;32518:3;32503:18;;32379:148;;;;:::o;32533:305::-;32573:3;32592:20;32610:1;32592:20;:::i;:::-;32587:25;;32626:20;32644:1;32626:20;:::i;:::-;32621:25;;32780:1;32712:66;32708:74;32705:1;32702:81;32699:107;;;32786:18;;:::i;:::-;32699:107;32830:1;32827;32823:9;32816:16;;32533:305;;;;:::o;32844:185::-;32884:1;32901:20;32919:1;32901:20;:::i;:::-;32896:25;;32935:20;32953:1;32935:20;:::i;:::-;32930:25;;32974:1;32964:35;;32979:18;;:::i;:::-;32964:35;33021:1;33018;33014:9;33009:14;;32844:185;;;;:::o;33035:348::-;33075:7;33098:20;33116:1;33098:20;:::i;:::-;33093:25;;33132:20;33150:1;33132:20;:::i;:::-;33127:25;;33320:1;33252:66;33248:74;33245:1;33242:81;33237:1;33230:9;33223:17;33219:105;33216:131;;;33327:18;;:::i;:::-;33216:131;33375:1;33372;33368:9;33357:20;;33035:348;;;;:::o;33389:191::-;33429:4;33449:20;33467:1;33449:20;:::i;:::-;33444:25;;33483:20;33501:1;33483:20;:::i;:::-;33478:25;;33522:1;33519;33516:8;33513:34;;;33527:18;;:::i;:::-;33513:34;33572:1;33569;33565:9;33557:17;;33389:191;;;;:::o;33586:96::-;33623:7;33652:24;33670:5;33652:24;:::i;:::-;33641:35;;33586:96;;;:::o;33688:90::-;33722:7;33765:5;33758:13;33751:21;33740:32;;33688:90;;;:::o;33784:149::-;33820:7;33860:66;33853:5;33849:78;33838:89;;33784:149;;;:::o;33939:126::-;33976:7;34016:42;34009:5;34005:54;33994:65;;33939:126;;;:::o;34071:77::-;34108:7;34137:5;34126:16;;34071:77;;;:::o;34154:154::-;34238:6;34233:3;34228;34215:30;34300:1;34291:6;34286:3;34282:16;34275:27;34154:154;;;:::o;34314:307::-;34382:1;34392:113;34406:6;34403:1;34400:13;34392:113;;;34491:1;34486:3;34482:11;34476:18;34472:1;34467:3;34463:11;34456:39;34428:2;34425:1;34421:10;34416:15;;34392:113;;;34523:6;34520:1;34517:13;34514:101;;;34603:1;34594:6;34589:3;34585:16;34578:27;34514:101;34363:258;34314:307;;;:::o;34627:320::-;34671:6;34708:1;34702:4;34698:12;34688:22;;34755:1;34749:4;34745:12;34776:18;34766:81;;34832:4;34824:6;34820:17;34810:27;;34766:81;34894:2;34886:6;34883:14;34863:18;34860:38;34857:84;;;34913:18;;:::i;:::-;34857:84;34678:269;34627:320;;;:::o;34953:281::-;35036:27;35058:4;35036:27;:::i;:::-;35028:6;35024:40;35166:6;35154:10;35151:22;35130:18;35118:10;35115:34;35112:62;35109:88;;;35177:18;;:::i;:::-;35109:88;35217:10;35213:2;35206:22;34996:238;34953:281;;:::o;35240:233::-;35279:3;35302:24;35320:5;35302:24;:::i;:::-;35293:33;;35348:66;35341:5;35338:77;35335:103;;;35418:18;;:::i;:::-;35335:103;35465:1;35458:5;35454:13;35447:20;;35240:233;;;:::o;35479:176::-;35511:1;35528:20;35546:1;35528:20;:::i;:::-;35523:25;;35562:20;35580:1;35562:20;:::i;:::-;35557:25;;35601:1;35591:35;;35606:18;;:::i;:::-;35591:35;35647:1;35644;35640:9;35635:14;;35479:176;;;;:::o;35661:180::-;35709:77;35706:1;35699:88;35806:4;35803:1;35796:15;35830:4;35827:1;35820:15;35847:180;35895:77;35892:1;35885:88;35992:4;35989:1;35982:15;36016:4;36013:1;36006:15;36033:180;36081:77;36078:1;36071:88;36178:4;36175:1;36168:15;36202:4;36199:1;36192:15;36219:180;36267:77;36264:1;36257:88;36364:4;36361:1;36354:15;36388:4;36385:1;36378:15;36405:180;36453:77;36450:1;36443:88;36550:4;36547:1;36540:15;36574:4;36571:1;36564:15;36591:117;36700:1;36697;36690:12;36714:117;36823:1;36820;36813:12;36837:117;36946:1;36943;36936:12;36960:117;37069:1;37066;37059:12;37083:102;37124:6;37175:2;37171:7;37166:2;37159:5;37155:14;37151:28;37141:38;;37083:102;;;:::o;37191:237::-;37331:34;37327:1;37319:6;37315:14;37308:58;37400:20;37395:2;37387:6;37383:15;37376:45;37191:237;:::o;37434:225::-;37574:34;37570:1;37562:6;37558:14;37551:58;37643:8;37638:2;37630:6;37626:15;37619:33;37434:225;:::o;37665:224::-;37805:34;37801:1;37793:6;37789:14;37782:58;37874:7;37869:2;37861:6;37857:15;37850:32;37665:224;:::o;37895:178::-;38035:30;38031:1;38023:6;38019:14;38012:54;37895:178;:::o;38079:170::-;38219:22;38215:1;38207:6;38203:14;38196:46;38079:170;:::o;38255:223::-;38395:34;38391:1;38383:6;38379:14;38372:58;38464:6;38459:2;38451:6;38447:15;38440:31;38255:223;:::o;38484:175::-;38624:27;38620:1;38612:6;38608:14;38601:51;38484:175;:::o;38665:231::-;38805:34;38801:1;38793:6;38789:14;38782:58;38874:14;38869:2;38861:6;38857:15;38850:39;38665:231;:::o;38902:243::-;39042:34;39038:1;39030:6;39026:14;39019:58;39111:26;39106:2;39098:6;39094:15;39087:51;38902:243;:::o;39151:229::-;39291:34;39287:1;39279:6;39275:14;39268:58;39360:12;39355:2;39347:6;39343:15;39336:37;39151:229;:::o;39386:228::-;39526:34;39522:1;39514:6;39510:14;39503:58;39595:11;39590:2;39582:6;39578:15;39571:36;39386:228;:::o;39620:182::-;39760:34;39756:1;39748:6;39744:14;39737:58;39620:182;:::o;39808:231::-;39948:34;39944:1;39936:6;39932:14;39925:58;40017:14;40012:2;40004:6;40000:15;39993:39;39808:231;:::o;40045:182::-;40185:34;40181:1;40173:6;40169:14;40162:58;40045:182;:::o;40233:234::-;40373:34;40369:1;40361:6;40357:14;40350:58;40442:17;40437:2;40429:6;40425:15;40418:42;40233:234;:::o;40473:220::-;40613:34;40609:1;40601:6;40597:14;40590:58;40682:3;40677:2;40669:6;40665:15;40658:28;40473:220;:::o;40699:114::-;;:::o;40819:170::-;40959:22;40955:1;40947:6;40943:14;40936:46;40819:170;:::o;40995:236::-;41135:34;41131:1;41123:6;41119:14;41112:58;41204:19;41199:2;41191:6;41187:15;41180:44;40995:236;:::o;41237:169::-;41377:21;41373:1;41365:6;41361:14;41354:45;41237:169;:::o;41412:122::-;41485:24;41503:5;41485:24;:::i;:::-;41478:5;41475:35;41465:63;;41524:1;41521;41514:12;41465:63;41412:122;:::o;41540:116::-;41610:21;41625:5;41610:21;:::i;:::-;41603:5;41600:32;41590:60;;41646:1;41643;41636:12;41590:60;41540:116;:::o;41662:120::-;41734:23;41751:5;41734:23;:::i;:::-;41727:5;41724:34;41714:62;;41772:1;41769;41762:12;41714:62;41662:120;:::o;41788:122::-;41861:24;41879:5;41861:24;:::i;:::-;41854:5;41851:35;41841:63;;41900:1;41897;41890:12;41841:63;41788:122;:::o
Swarm Source
ipfs://b7ed2fc8c1046cdadeb3ae767a3f0f6a7959a6b6ad380d61aa0ff8b71545a007
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.