Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
NFT
Overview
Max Total Supply
500 BHZ
Holders
235
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 BHZLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BreadHeads
Compiler Version
v0.8.6+commit.11564f7e
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.6; /** * @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. // SPDX-License-Identifier: MIT */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } /** * @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, // SPDX-License-Identifier: MIT bytes calldata data ) external; } /** * @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, // SPDX-License-Identifier: MIT bytes calldata data ) external returns (bytes4); } /** * @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. // SPDX-License-Identifier: MIT */ function tokenURI(uint256 tokenId) external view returns (string memory); } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "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); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } // SPDX-License-Identifier: MIT } } } /* * @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) { // SPDX-License-Identifier: MIT return msg.data; } } /** * @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"); // SPDX-License-Identifier: MIT return string(buffer); } } /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { // SPDX-License-Identifier: MIT return interfaceId == type(IERC165).interfaceId; } } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "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 { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("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, // SPDX-License-Identifier: MIT uint256 tokenId ) internal virtual {} } /** * @dev ERC721 token with storage based token URI management. */ abstract contract ERC721URIStorage is ERC721 { using Strings for uint256; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token"); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } return super.tokenURI(tokenId); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } /** * @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 override { super._burn(tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; // SPDX-License-Identifier: MIT } } } /** * @title ERC721 Burnable Token * @dev ERC721 Token that can be irreversibly burned (destroyed). */ abstract contract ERC721Burnable is Context, ERC721 { /** * @dev Burns `tokenId`. See {ERC721-_burn}. * * Requirements: * * - The caller must own `tokenId` or be an approved operator. */ function burn(uint256 tokenId) public virtual { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved"); // SPDX-License-Identifier: MIT _burn(tokenId); } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "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 { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; // SPDX-License-Identifier: MIT emit OwnershipTransferred(oldOwner, newOwner); } } /** * @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 { // SPDX-License-Identifier: MIT counter._value = 0; } } /** * @title BreadHeads * BreadHeads - Base smart contract for ERC721 on Ethereum */ contract BreadHeads is ERC721, ERC721URIStorage, ERC721Burnable, Ownable { mapping (string => address) private _creatorsMapping; mapping (uint256 => string) private _tokenIdsMapping; mapping (string => uint256) private _tokenIdsToHashMapping; address openseaProxyAddress; string public contract_ipfs_json; string private baseURI; using Counters for Counters.Counter; Counters.Counter private _tokenIdCounter; uint256 MAX_NFTS = 500; string public notrevealed_nft = "bafkreihnxrqotq4gsr4rml4lpjqhcnqor6io4xrhu37w2ifebwaohpyq74"; uint256 minting_price = 40000000000000000; bool collection_locked = false; constructor ( address _openseaProxyAddress, string memory _name, string memory _ticker, string memory _contract_ipfs, string memory _base_uri ) ERC721(_name, _ticker) { openseaProxyAddress = _openseaProxyAddress; contract_ipfs_json = _contract_ipfs; baseURI = _base_uri; } function _baseURI() internal override view returns (string memory) { return baseURI; } function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) { super._burn(tokenId); } function tokenURI(uint256 tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory) { return super.tokenURI(tokenId); } function contractURI() public view returns (string memory) { return contract_ipfs_json; } function totalSupply() public view returns (uint256) { return _tokenIdCounter.current(); } function nftExists(string memory tokenHash) internal view returns (bool) { address owner = _creatorsMapping[tokenHash]; return owner != address(0); } function returnTokenIdByHash(string memory tokenHash) public view returns (uint256) { return _tokenIdsToHashMapping[tokenHash]; } function returnTokenURI(uint256 tokenId) public view returns (string memory) { return _tokenIdsMapping[tokenId]; } function returnCreatorByNftHash(string memory hash) public view returns (address) { return _creatorsMapping[hash]; } /* This method will first mint the token to the address. */ function mintNFT() public payable { require(msg.value % minting_price == 0, 'BreadHeads: Amount should be a multiple of minting cost'); uint256 amount = msg.value / minting_price; require(amount >= 1, 'BreadHeads: Amount should be at least 1'); require(amount <= 10, 'BreadHeads: Amount must be less or equal to 10'); uint256 reached = amount + _tokenIdCounter.current(); require(reached <= MAX_NFTS, "BreadHeads: Hard cap reached."); uint j = 0; for (j = 0; j < amount; j++) { uint256 tokenId = mintTo(msg.sender, notrevealed_nft); _tokenIdsMapping[tokenId] = notrevealed_nft; } } /* Private method that mints the token */ function mintTo(address _to, string memory _tokenURI) private returns (uint256){ _tokenIdCounter.increment(); uint256 newTokenId = _tokenIdCounter.current(); _mint(_to, newTokenId); _setTokenURI(newTokenId, _tokenURI); return newTokenId; } /* This method will reveal the NFT */ function revealNFT(string memory _tokenURI, uint256 tokenId) public onlyOwner returns (bool) { require(!collection_locked, "BreadHeads: Collection is locked."); require(!nftExists(_tokenURI), "BreadHeads: Trying to mint existent nft"); _setTokenURI(tokenId, _tokenURI); _creatorsMapping[_tokenURI] = msg.sender; _tokenIdsMapping[tokenId] = _tokenURI; _tokenIdsToHashMapping[_tokenURI] = tokenId; return true; } /* This method will allow owner to fix the contract details */ function fixContractDescription(string memory newDescription) public onlyOwner { contract_ipfs_json = newDescription; } /* This method will allow owner to lock the collection */ function lockCollection() public onlyOwner { collection_locked = true; } /* This method will allow owner to get the balance of the smart contract */ function getBalance() public view returns (uint256) { return address(this).balance; } /* This method will allow owner tow withdraw all ethers */ function withdrawEther() public onlyOwner { uint256 balance = address(this).balance; require(balance > 0, 'BreadHeads: Nothing to withdraw!'); payable(msg.sender).transfer(balance); } /* This method is used by OpenSea to automate the sell. */ function isApprovedForAll( address _owner, address _operator ) public view override returns (bool isOperator) { if (_operator == address(openseaProxyAddress)) { return true; } return super.isApprovedForAll(_owner, _operator); } }
pragma solidity >=0.4.21 <=0.8.6; // SPDX-License-Identifier: MIT contract Migrations { address public owner; uint public last_completed_migration; constructor() public { owner = msg.sender; } modifier restricted() { if (msg.sender == owner) _; } function setCompleted(uint completed) public restricted { last_completed_migration = completed; } function upgrade(address new_address) public restricted { Migrations upgraded = Migrations(new_address); upgraded.setCompleted(last_completed_migration); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_openseaProxyAddress","type":"address"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_ticker","type":"string"},{"internalType":"string","name":"_contract_ipfs","type":"string"},{"internalType":"string","name":"_base_uri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contract_ipfs_json","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"newDescription","type":"string"}],"name":"fixContractDescription","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"isOperator","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockCollection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notrevealed_nft","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":"string","name":"hash","type":"string"}],"name":"returnCreatorByNftHash","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"tokenHash","type":"string"}],"name":"returnTokenIdByHash","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"returnTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_tokenURI","type":"string"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"revealNFT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"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":"withdrawEther","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526101f4600f556040518060600160405280603b815260200162004b67603b9139601090805190602001906200003b92919062000237565b50668e1bc9bf0400006011556000601260006101000a81548160ff0219169083151502179055503480156200006f57600080fd5b5060405162004ba238038062004ba283398181016040528101906200009591906200037c565b83838160009080519060200190620000af92919062000237565b508060019080519060200190620000c892919062000237565b505050620000eb620000df6200016960201b60201c565b6200017160201b60201c565b84600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600c90805190602001906200014492919062000237565b5080600d90805190602001906200015d92919062000237565b50505050505062000652565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002459062000549565b90600052602060002090601f016020900481019282620002695760008555620002b5565b82601f106200028457805160ff1916838001178555620002b5565b82800160010185558215620002b5579182015b82811115620002b457825182559160200191906001019062000297565b5b509050620002c49190620002c8565b5090565b5b80821115620002e3576000816000905550600101620002c9565b5090565b6000620002fe620002f884620004a9565b62000480565b9050828152602081018484840111156200031d576200031c62000618565b5b6200032a84828562000513565b509392505050565b600081519050620003438162000638565b92915050565b600082601f83011262000361576200036062000613565b5b815162000373848260208601620002e7565b91505092915050565b600080600080600060a086880312156200039b576200039a62000622565b5b6000620003ab8882890162000332565b955050602086015167ffffffffffffffff811115620003cf57620003ce6200061d565b5b620003dd8882890162000349565b945050604086015167ffffffffffffffff8111156200040157620004006200061d565b5b6200040f8882890162000349565b935050606086015167ffffffffffffffff8111156200043357620004326200061d565b5b620004418882890162000349565b925050608086015167ffffffffffffffff8111156200046557620004646200061d565b5b620004738882890162000349565b9150509295509295909350565b60006200048c6200049f565b90506200049a82826200057f565b919050565b6000604051905090565b600067ffffffffffffffff821115620004c757620004c6620005e4565b5b620004d28262000627565b9050602081019050919050565b6000620004ec82620004f3565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b838110156200053357808201518184015260208101905062000516565b8381111562000543576000848401525b50505050565b600060028204905060018216806200056257607f821691505b60208210811415620005795762000578620005b5565b5b50919050565b6200058a8262000627565b810181811067ffffffffffffffff82111715620005ac57620005ab620005e4565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6200064381620004df565b81146200064f57600080fd5b50565b61450580620006626000396000f3fe6080604052600436106101cd5760003560e01c806342842e0e116100f757806395d89b4111610095578063c87b56dd11610064578063c87b56dd14610655578063e8a3d48514610692578063e985e9c5146106bd578063f2fde38b146106fa576101cd565b806395d89b41146105ad578063a0073b88146105d8578063a22cb46514610603578063b88d4fde1461062c576101cd565b806370a08231116100d157806370a0823114610517578063715018a6146105545780637362377b1461056b5780638da5cb5b14610582576101cd565b806342842e0e1461048857806342966c68146104b15780636352211e146104da576101cd565b80630ee83a711161016f57806318160ddd1161013e57806318160ddd146103ce5780631a4fba6c146103f957806323b872dd14610422578063354470191461044b576101cd565b80630ee83a711461034557806312065fe01461035c578063123bfbb41461038757806314f710fe146103c4576101cd565b8063081812fc116101ab578063081812fc14610265578063095ea7b3146102a25780630c008af6146102cb5780630eb73b5f14610308576101cd565b806301ffc9a7146101d25780630346f18f1461020f57806306fdde031461023a575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f49190612f65565b610723565b6040516102069190613591565b60405180910390f35b34801561021b57600080fd5b50610224610805565b60405161023191906135ac565b60405180910390f35b34801561024657600080fd5b5061024f610893565b60405161025c91906135ac565b60405180910390f35b34801561027157600080fd5b5061028c60048036038101906102879190613064565b610925565b604051610299919061352a565b60405180910390f35b3480156102ae57600080fd5b506102c960048036038101906102c49190612f25565b6109aa565b005b3480156102d757600080fd5b506102f260048036038101906102ed9190612fbf565b610ac2565b6040516102ff919061352a565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a9190613008565b610b0a565b60405161033c9190613591565b60405180910390f35b34801561035157600080fd5b5061035a610cdd565b005b34801561036857600080fd5b50610371610d76565b60405161037e919061390e565b60405180910390f35b34801561039357600080fd5b506103ae60048036038101906103a99190613064565b610d7e565b6040516103bb91906135ac565b60405180910390f35b6103cc610e23565b005b3480156103da57600080fd5b506103e3611054565b6040516103f0919061390e565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b9190612fbf565b611065565b005b34801561042e57600080fd5b5061044960048036038101906104449190612e0f565b6110fb565b005b34801561045757600080fd5b50610472600480360381019061046d9190612fbf565b61115b565b60405161047f919061390e565b60405180910390f35b34801561049457600080fd5b506104af60048036038101906104aa9190612e0f565b611183565b005b3480156104bd57600080fd5b506104d860048036038101906104d39190613064565b6111a3565b005b3480156104e657600080fd5b5061050160048036038101906104fc9190613064565b6111ff565b60405161050e919061352a565b60405180910390f35b34801561052357600080fd5b5061053e60048036038101906105399190612da2565b6112b1565b60405161054b919061390e565b60405180910390f35b34801561056057600080fd5b50610569611369565b005b34801561057757600080fd5b506105806113f1565b005b34801561058e57600080fd5b506105976114ff565b6040516105a4919061352a565b60405180910390f35b3480156105b957600080fd5b506105c2611529565b6040516105cf91906135ac565b60405180910390f35b3480156105e457600080fd5b506105ed6115bb565b6040516105fa91906135ac565b60405180910390f35b34801561060f57600080fd5b5061062a60048036038101906106259190612ee5565b611649565b005b34801561063857600080fd5b50610653600480360381019061064e9190612e62565b6117ca565b005b34801561066157600080fd5b5061067c60048036038101906106779190613064565b61182c565b60405161068991906135ac565b60405180910390f35b34801561069e57600080fd5b506106a761183e565b6040516106b491906135ac565b60405180910390f35b3480156106c957600080fd5b506106e460048036038101906106df9190612dcf565b6118d0565b6040516106f19190613591565b60405180910390f35b34801561070657600080fd5b50610721600480360381019061071c9190612da2565b611944565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107ee57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107fe57506107fd82611a3c565b5b9050919050565b600c805461081290613b64565b80601f016020809104026020016040519081016040528092919081815260200182805461083e90613b64565b801561088b5780601f106108605761010080835404028352916020019161088b565b820191906000526020600020905b81548152906001019060200180831161086e57829003601f168201915b505050505081565b6060600080546108a290613b64565b80601f01602080910402602001604051908101604052809291908181526020018280546108ce90613b64565b801561091b5780601f106108f05761010080835404028352916020019161091b565b820191906000526020600020905b8154815290600101906020018083116108fe57829003601f168201915b5050505050905090565b600061093082611aa6565b61096f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610966906137ae565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109b5826111ff565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1d9061382e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a45611b12565b73ffffffffffffffffffffffffffffffffffffffff161480610a745750610a7381610a6e611b12565b6118d0565b5b610ab3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aaa906136ee565b60405180910390fd5b610abd8383611b1a565b505050565b6000600882604051610ad491906134ef565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b14611b12565b73ffffffffffffffffffffffffffffffffffffffff16610b326114ff565b73ffffffffffffffffffffffffffffffffffffffff1614610b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7f906137ce565b60405180910390fd5b601260009054906101000a900460ff1615610bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcf9061366e565b60405180910390fd5b610be183611bd3565b15610c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c18906138ee565b60405180910390fd5b610c2b8284611c50565b33600884604051610c3c91906134ef565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600960008481526020019081526020016000209080519060200190610caf929190612ae9565b5081600a84604051610cc191906134ef565b9081526020016040518091039020819055506001905092915050565b610ce5611b12565b73ffffffffffffffffffffffffffffffffffffffff16610d036114ff565b73ffffffffffffffffffffffffffffffffffffffff1614610d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d50906137ce565b60405180910390fd5b6001601260006101000a81548160ff021916908315150217905550565b600047905090565b6060600960008381526020019081526020016000208054610d9e90613b64565b80601f0160208091040260200160405190810160405280929190818152602001828054610dca90613b64565b8015610e175780601f10610dec57610100808354040283529160200191610e17565b820191906000526020600020905b815481529060010190602001808311610dfa57829003601f168201915b50505050509050919050565b600060115434610e339190613c10565b14610e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6a9061362e565b60405180910390fd5b600060115434610e839190613a49565b90506001811015610ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec0906135ee565b60405180910390fd5b600a811115610f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f049061388e565b60405180910390fd5b6000610f19600e611cc4565b82610f2491906139f3565b9050600f54811115610f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f62906138ae565b60405180910390fd5b60005b8281101561104f57600061100c3360108054610f8990613b64565b80601f0160208091040260200160405190810160405280929190818152602001828054610fb590613b64565b80156110025780601f10610fd757610100808354040283529160200191611002565b820191906000526020600020905b815481529060010190602001808311610fe557829003601f168201915b5050505050611cd2565b905060106009600083815260200190815260200160002090805461102f90613b64565b61103a929190612b6f565b5050808061104790613bc7565b915050610f6e565b505050565b6000611060600e611cc4565b905090565b61106d611b12565b73ffffffffffffffffffffffffffffffffffffffff1661108b6114ff565b73ffffffffffffffffffffffffffffffffffffffff16146110e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d8906137ce565b60405180910390fd5b80600c90805190602001906110f7929190612ae9565b5050565b61110c611106611b12565b82611d0a565b61114b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111429061386e565b60405180910390fd5b611156838383611de8565b505050565b6000600a8260405161116d91906134ef565b9081526020016040518091039020549050919050565b61119e838383604051806020016040528060008152506117ca565b505050565b6111b46111ae611b12565b82611d0a565b6111f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ea906138ce565b60405180910390fd5b6111fc81612044565b50565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129f9061372e565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611322576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113199061370e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611371611b12565b73ffffffffffffffffffffffffffffffffffffffff1661138f6114ff565b73ffffffffffffffffffffffffffffffffffffffff16146113e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113dc906137ce565b60405180910390fd5b6113ef6000612050565b565b6113f9611b12565b73ffffffffffffffffffffffffffffffffffffffff166114176114ff565b73ffffffffffffffffffffffffffffffffffffffff161461146d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611464906137ce565b60405180910390fd5b6000479050600081116114b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ac9061384e565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156114fb573d6000803e3d6000fd5b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461153890613b64565b80601f016020809104026020016040519081016040528092919081815260200182805461156490613b64565b80156115b15780601f10611586576101008083540402835291602001916115b1565b820191906000526020600020905b81548152906001019060200180831161159457829003601f168201915b5050505050905090565b601080546115c890613b64565b80601f01602080910402602001604051908101604052809291908181526020018280546115f490613b64565b80156116415780601f1061161657610100808354040283529160200191611641565b820191906000526020600020905b81548152906001019060200180831161162457829003601f168201915b505050505081565b611651611b12565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b6906136ae565b60405180910390fd5b80600560006116cc611b12565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611779611b12565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117be9190613591565b60405180910390a35050565b6117db6117d5611b12565b83611d0a565b61181a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118119061386e565b60405180910390fd5b61182684848484612116565b50505050565b606061183782612172565b9050919050565b6060600c805461184d90613b64565b80601f016020809104026020016040519081016040528092919081815260200182805461187990613b64565b80156118c65780601f1061189b576101008083540402835291602001916118c6565b820191906000526020600020905b8154815290600101906020018083116118a957829003601f168201915b5050505050905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611931576001905061193e565b61193b83836122c4565b90505b92915050565b61194c611b12565b73ffffffffffffffffffffffffffffffffffffffff1661196a6114ff565b73ffffffffffffffffffffffffffffffffffffffff16146119c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b7906137ce565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a279061360e565b60405180910390fd5b611a3981612050565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b8d836111ff565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080600883604051611be691906134ef565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b611c5982611aa6565b611c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8f9061374e565b60405180910390fd5b80600660008481526020019081526020016000209080519060200190611cbf929190612ae9565b505050565b600081600001549050919050565b6000611cde600e612358565b6000611cea600e611cc4565b9050611cf6848261236e565b611d008184611c50565b8091505092915050565b6000611d1582611aa6565b611d54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4b906136ce565b60405180910390fd5b6000611d5f836111ff565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611dce57508373ffffffffffffffffffffffffffffffffffffffff16611db684610925565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ddf5750611dde81856118d0565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611e08826111ff565b73ffffffffffffffffffffffffffffffffffffffff1614611e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e55906137ee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ece576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec59061368e565b60405180910390fd5b611ed983838361253c565b611ee4600082611b1a565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f349190613a7a565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f8b91906139f3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61204d81612541565b50565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612121848484611de8565b61212d84848484612594565b61216c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612163906135ce565b60405180910390fd5b50505050565b606061217d82611aa6565b6121bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b39061378e565b60405180910390fd5b60006006600084815260200190815260200160002080546121dc90613b64565b80601f016020809104026020016040519081016040528092919081815260200182805461220890613b64565b80156122555780601f1061222a57610100808354040283529160200191612255565b820191906000526020600020905b81548152906001019060200180831161223857829003601f168201915b50505050509050600061226661272b565b905060008151141561227c5781925050506122bf565b6000825111156122b1578082604051602001612299929190613506565b604051602081830303815290604052925050506122bf565b6122ba846127bd565b925050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6001816000016000828254019250508190555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d59061376e565b60405180910390fd5b6123e781611aa6565b15612427576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241e9061364e565b60405180910390fd5b6124336000838361253c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461248391906139f3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b61254a81612864565b600060066000838152602001908152602001600020805461256a90613b64565b905014612591576006600082815260200190815260200160002060006125909190612bfc565b5b50565b60006125b58473ffffffffffffffffffffffffffffffffffffffff16612975565b1561271e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026125de611b12565b8786866040518563ffffffff1660e01b81526004016126009493929190613545565b602060405180830381600087803b15801561261a57600080fd5b505af192505050801561264b57506040513d601f19601f820116820180604052508101906126489190612f92565b60015b6126ce573d806000811461267b576040519150601f19603f3d011682016040523d82523d6000602084013e612680565b606091505b506000815114156126c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bd906135ce565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612723565b600190505b949350505050565b6060600d805461273a90613b64565b80601f016020809104026020016040519081016040528092919081815260200182805461276690613b64565b80156127b35780601f10612788576101008083540402835291602001916127b3565b820191906000526020600020905b81548152906001019060200180831161279657829003601f168201915b5050505050905090565b60606127c882611aa6565b612807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fe9061380e565b60405180910390fd5b600061281161272b565b90506000815111612831576040518060200160405280600081525061285c565b8061283b84612988565b60405160200161284c929190613506565b6040516020818303038152906040525b915050919050565b600061286f826111ff565b905061287d8160008461253c565b612888600083611b1a565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128d89190613a7a565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b606060008214156129d0576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612ae4565b600082905060005b60008214612a025780806129eb90613bc7565b915050600a826129fb9190613a49565b91506129d8565b60008167ffffffffffffffff811115612a1e57612a1d613cfd565b5b6040519080825280601f01601f191660200182016040528015612a505781602001600182028036833780820191505090505b5090505b60008514612add57600182612a699190613a7a565b9150600a85612a789190613c10565b6030612a8491906139f3565b60f81b818381518110612a9a57612a99613cce565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612ad69190613a49565b9450612a54565b8093505050505b919050565b828054612af590613b64565b90600052602060002090601f016020900481019282612b175760008555612b5e565b82601f10612b3057805160ff1916838001178555612b5e565b82800160010185558215612b5e579182015b82811115612b5d578251825591602001919060010190612b42565b5b509050612b6b9190612c3c565b5090565b828054612b7b90613b64565b90600052602060002090601f016020900481019282612b9d5760008555612beb565b82601f10612bae5780548555612beb565b82800160010185558215612beb57600052602060002091601f016020900482015b82811115612bea578254825591600101919060010190612bcf565b5b509050612bf89190612c3c565b5090565b508054612c0890613b64565b6000825580601f10612c1a5750612c39565b601f016020900490600052602060002090810190612c389190612c3c565b5b50565b5b80821115612c55576000816000905550600101612c3d565b5090565b6000612c6c612c678461394e565b613929565b905082815260208101848484011115612c8857612c87613d31565b5b612c93848285613b22565b509392505050565b6000612cae612ca98461397f565b613929565b905082815260208101848484011115612cca57612cc9613d31565b5b612cd5848285613b22565b509392505050565b600081359050612cec81614473565b92915050565b600081359050612d018161448a565b92915050565b600081359050612d16816144a1565b92915050565b600081519050612d2b816144a1565b92915050565b600082601f830112612d4657612d45613d2c565b5b8135612d56848260208601612c59565b91505092915050565b600082601f830112612d7457612d73613d2c565b5b8135612d84848260208601612c9b565b91505092915050565b600081359050612d9c816144b8565b92915050565b600060208284031215612db857612db7613d3b565b5b6000612dc684828501612cdd565b91505092915050565b60008060408385031215612de657612de5613d3b565b5b6000612df485828601612cdd565b9250506020612e0585828601612cdd565b9150509250929050565b600080600060608486031215612e2857612e27613d3b565b5b6000612e3686828701612cdd565b9350506020612e4786828701612cdd565b9250506040612e5886828701612d8d565b9150509250925092565b60008060008060808587031215612e7c57612e7b613d3b565b5b6000612e8a87828801612cdd565b9450506020612e9b87828801612cdd565b9350506040612eac87828801612d8d565b925050606085013567ffffffffffffffff811115612ecd57612ecc613d36565b5b612ed987828801612d31565b91505092959194509250565b60008060408385031215612efc57612efb613d3b565b5b6000612f0a85828601612cdd565b9250506020612f1b85828601612cf2565b9150509250929050565b60008060408385031215612f3c57612f3b613d3b565b5b6000612f4a85828601612cdd565b9250506020612f5b85828601612d8d565b9150509250929050565b600060208284031215612f7b57612f7a613d3b565b5b6000612f8984828501612d07565b91505092915050565b600060208284031215612fa857612fa7613d3b565b5b6000612fb684828501612d1c565b91505092915050565b600060208284031215612fd557612fd4613d3b565b5b600082013567ffffffffffffffff811115612ff357612ff2613d36565b5b612fff84828501612d5f565b91505092915050565b6000806040838503121561301f5761301e613d3b565b5b600083013567ffffffffffffffff81111561303d5761303c613d36565b5b61304985828601612d5f565b925050602061305a85828601612d8d565b9150509250929050565b60006020828403121561307a57613079613d3b565b5b600061308884828501612d8d565b91505092915050565b61309a81613aae565b82525050565b6130a981613ac0565b82525050565b60006130ba826139b0565b6130c481856139c6565b93506130d4818560208601613b31565b6130dd81613d40565b840191505092915050565b60006130f3826139bb565b6130fd81856139d7565b935061310d818560208601613b31565b61311681613d40565b840191505092915050565b600061312c826139bb565b61313681856139e8565b9350613146818560208601613b31565b80840191505092915050565b600061315f6032836139d7565b915061316a82613d51565b604082019050919050565b60006131826027836139d7565b915061318d82613da0565b604082019050919050565b60006131a56026836139d7565b91506131b082613def565b604082019050919050565b60006131c86037836139d7565b91506131d382613e3e565b604082019050919050565b60006131eb601c836139d7565b91506131f682613e8d565b602082019050919050565b600061320e6021836139d7565b915061321982613eb6565b604082019050919050565b60006132316024836139d7565b915061323c82613f05565b604082019050919050565b60006132546019836139d7565b915061325f82613f54565b602082019050919050565b6000613277602c836139d7565b915061328282613f7d565b604082019050919050565b600061329a6038836139d7565b91506132a582613fcc565b604082019050919050565b60006132bd602a836139d7565b91506132c88261401b565b604082019050919050565b60006132e06029836139d7565b91506132eb8261406a565b604082019050919050565b6000613303602e836139d7565b915061330e826140b9565b604082019050919050565b60006133266020836139d7565b915061333182614108565b602082019050919050565b60006133496031836139d7565b915061335482614131565b604082019050919050565b600061336c602c836139d7565b915061337782614180565b604082019050919050565b600061338f6020836139d7565b915061339a826141cf565b602082019050919050565b60006133b26029836139d7565b91506133bd826141f8565b604082019050919050565b60006133d5602f836139d7565b91506133e082614247565b604082019050919050565b60006133f86021836139d7565b915061340382614296565b604082019050919050565b600061341b6020836139d7565b9150613426826142e5565b602082019050919050565b600061343e6031836139d7565b91506134498261430e565b604082019050919050565b6000613461602e836139d7565b915061346c8261435d565b604082019050919050565b6000613484601d836139d7565b915061348f826143ac565b602082019050919050565b60006134a76030836139d7565b91506134b2826143d5565b604082019050919050565b60006134ca6027836139d7565b91506134d582614424565b604082019050919050565b6134e981613b18565b82525050565b60006134fb8284613121565b915081905092915050565b60006135128285613121565b915061351e8284613121565b91508190509392505050565b600060208201905061353f6000830184613091565b92915050565b600060808201905061355a6000830187613091565b6135676020830186613091565b61357460408301856134e0565b818103606083015261358681846130af565b905095945050505050565b60006020820190506135a660008301846130a0565b92915050565b600060208201905081810360008301526135c681846130e8565b905092915050565b600060208201905081810360008301526135e781613152565b9050919050565b6000602082019050818103600083015261360781613175565b9050919050565b6000602082019050818103600083015261362781613198565b9050919050565b60006020820190508181036000830152613647816131bb565b9050919050565b60006020820190508181036000830152613667816131de565b9050919050565b6000602082019050818103600083015261368781613201565b9050919050565b600060208201905081810360008301526136a781613224565b9050919050565b600060208201905081810360008301526136c781613247565b9050919050565b600060208201905081810360008301526136e78161326a565b9050919050565b600060208201905081810360008301526137078161328d565b9050919050565b60006020820190508181036000830152613727816132b0565b9050919050565b60006020820190508181036000830152613747816132d3565b9050919050565b60006020820190508181036000830152613767816132f6565b9050919050565b6000602082019050818103600083015261378781613319565b9050919050565b600060208201905081810360008301526137a78161333c565b9050919050565b600060208201905081810360008301526137c78161335f565b9050919050565b600060208201905081810360008301526137e781613382565b9050919050565b60006020820190508181036000830152613807816133a5565b9050919050565b60006020820190508181036000830152613827816133c8565b9050919050565b60006020820190508181036000830152613847816133eb565b9050919050565b600060208201905081810360008301526138678161340e565b9050919050565b6000602082019050818103600083015261388781613431565b9050919050565b600060208201905081810360008301526138a781613454565b9050919050565b600060208201905081810360008301526138c781613477565b9050919050565b600060208201905081810360008301526138e78161349a565b9050919050565b60006020820190508181036000830152613907816134bd565b9050919050565b600060208201905061392360008301846134e0565b92915050565b6000613933613944565b905061393f8282613b96565b919050565b6000604051905090565b600067ffffffffffffffff82111561396957613968613cfd565b5b61397282613d40565b9050602081019050919050565b600067ffffffffffffffff82111561399a57613999613cfd565b5b6139a382613d40565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006139fe82613b18565b9150613a0983613b18565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613a3e57613a3d613c41565b5b828201905092915050565b6000613a5482613b18565b9150613a5f83613b18565b925082613a6f57613a6e613c70565b5b828204905092915050565b6000613a8582613b18565b9150613a9083613b18565b925082821015613aa357613aa2613c41565b5b828203905092915050565b6000613ab982613af8565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613b4f578082015181840152602081019050613b34565b83811115613b5e576000848401525b50505050565b60006002820490506001821680613b7c57607f821691505b60208210811415613b9057613b8f613c9f565b5b50919050565b613b9f82613d40565b810181811067ffffffffffffffff82111715613bbe57613bbd613cfd565b5b80604052505050565b6000613bd282613b18565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c0557613c04613c41565b5b600182019050919050565b6000613c1b82613b18565b9150613c2683613b18565b925082613c3657613c35613c70565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f427265616448656164733a20416d6f756e742073686f756c642062652061742060008201527f6c65617374203100000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f427265616448656164733a20416d6f756e742073686f756c642062652061206d60008201527f756c7469706c65206f66206d696e74696e6720636f7374000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f427265616448656164733a20436f6c6c656374696f6e206973206c6f636b656460008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f427265616448656164733a204e6f7468696e6720746f20776974686472617721600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f427265616448656164733a20416d6f756e74206d757374206265206c6573732060008201527f6f7220657175616c20746f203130000000000000000000000000000000000000602082015250565b7f427265616448656164733a20486172642063617020726561636865642e000000600082015250565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b7f427265616448656164733a20547279696e6720746f206d696e7420657869737460008201527f656e74206e667400000000000000000000000000000000000000000000000000602082015250565b61447c81613aae565b811461448757600080fd5b50565b61449381613ac0565b811461449e57600080fd5b50565b6144aa81613acc565b81146144b557600080fd5b50565b6144c181613b18565b81146144cc57600080fd5b5056fea26469706673582212208c26d5d134b1c7b45df4bbf3860156f5d9750c849f111b4917ff2ae67316046064736f6c634300080600336261666b726569686e7872716f74713467737234726d6c346c706a7168636e716f7236696f3478726875333777326966656277616f687079713734000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000000a4272656164486561647300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000342485a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005068747470733a2f2f697066732e696f2f697066732f6261666b726569646a356e767a366a7662647a356467357a6d7a6f777979703767686b6867763633617a646833686468326f7479706c706f616d7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001568747470733a2f2f697066732e696f2f697066732f0000000000000000000000
Deployed Bytecode
0x6080604052600436106101cd5760003560e01c806342842e0e116100f757806395d89b4111610095578063c87b56dd11610064578063c87b56dd14610655578063e8a3d48514610692578063e985e9c5146106bd578063f2fde38b146106fa576101cd565b806395d89b41146105ad578063a0073b88146105d8578063a22cb46514610603578063b88d4fde1461062c576101cd565b806370a08231116100d157806370a0823114610517578063715018a6146105545780637362377b1461056b5780638da5cb5b14610582576101cd565b806342842e0e1461048857806342966c68146104b15780636352211e146104da576101cd565b80630ee83a711161016f57806318160ddd1161013e57806318160ddd146103ce5780631a4fba6c146103f957806323b872dd14610422578063354470191461044b576101cd565b80630ee83a711461034557806312065fe01461035c578063123bfbb41461038757806314f710fe146103c4576101cd565b8063081812fc116101ab578063081812fc14610265578063095ea7b3146102a25780630c008af6146102cb5780630eb73b5f14610308576101cd565b806301ffc9a7146101d25780630346f18f1461020f57806306fdde031461023a575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f49190612f65565b610723565b6040516102069190613591565b60405180910390f35b34801561021b57600080fd5b50610224610805565b60405161023191906135ac565b60405180910390f35b34801561024657600080fd5b5061024f610893565b60405161025c91906135ac565b60405180910390f35b34801561027157600080fd5b5061028c60048036038101906102879190613064565b610925565b604051610299919061352a565b60405180910390f35b3480156102ae57600080fd5b506102c960048036038101906102c49190612f25565b6109aa565b005b3480156102d757600080fd5b506102f260048036038101906102ed9190612fbf565b610ac2565b6040516102ff919061352a565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a9190613008565b610b0a565b60405161033c9190613591565b60405180910390f35b34801561035157600080fd5b5061035a610cdd565b005b34801561036857600080fd5b50610371610d76565b60405161037e919061390e565b60405180910390f35b34801561039357600080fd5b506103ae60048036038101906103a99190613064565b610d7e565b6040516103bb91906135ac565b60405180910390f35b6103cc610e23565b005b3480156103da57600080fd5b506103e3611054565b6040516103f0919061390e565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b9190612fbf565b611065565b005b34801561042e57600080fd5b5061044960048036038101906104449190612e0f565b6110fb565b005b34801561045757600080fd5b50610472600480360381019061046d9190612fbf565b61115b565b60405161047f919061390e565b60405180910390f35b34801561049457600080fd5b506104af60048036038101906104aa9190612e0f565b611183565b005b3480156104bd57600080fd5b506104d860048036038101906104d39190613064565b6111a3565b005b3480156104e657600080fd5b5061050160048036038101906104fc9190613064565b6111ff565b60405161050e919061352a565b60405180910390f35b34801561052357600080fd5b5061053e60048036038101906105399190612da2565b6112b1565b60405161054b919061390e565b60405180910390f35b34801561056057600080fd5b50610569611369565b005b34801561057757600080fd5b506105806113f1565b005b34801561058e57600080fd5b506105976114ff565b6040516105a4919061352a565b60405180910390f35b3480156105b957600080fd5b506105c2611529565b6040516105cf91906135ac565b60405180910390f35b3480156105e457600080fd5b506105ed6115bb565b6040516105fa91906135ac565b60405180910390f35b34801561060f57600080fd5b5061062a60048036038101906106259190612ee5565b611649565b005b34801561063857600080fd5b50610653600480360381019061064e9190612e62565b6117ca565b005b34801561066157600080fd5b5061067c60048036038101906106779190613064565b61182c565b60405161068991906135ac565b60405180910390f35b34801561069e57600080fd5b506106a761183e565b6040516106b491906135ac565b60405180910390f35b3480156106c957600080fd5b506106e460048036038101906106df9190612dcf565b6118d0565b6040516106f19190613591565b60405180910390f35b34801561070657600080fd5b50610721600480360381019061071c9190612da2565b611944565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107ee57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107fe57506107fd82611a3c565b5b9050919050565b600c805461081290613b64565b80601f016020809104026020016040519081016040528092919081815260200182805461083e90613b64565b801561088b5780601f106108605761010080835404028352916020019161088b565b820191906000526020600020905b81548152906001019060200180831161086e57829003601f168201915b505050505081565b6060600080546108a290613b64565b80601f01602080910402602001604051908101604052809291908181526020018280546108ce90613b64565b801561091b5780601f106108f05761010080835404028352916020019161091b565b820191906000526020600020905b8154815290600101906020018083116108fe57829003601f168201915b5050505050905090565b600061093082611aa6565b61096f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610966906137ae565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109b5826111ff565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1d9061382e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a45611b12565b73ffffffffffffffffffffffffffffffffffffffff161480610a745750610a7381610a6e611b12565b6118d0565b5b610ab3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aaa906136ee565b60405180910390fd5b610abd8383611b1a565b505050565b6000600882604051610ad491906134ef565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b14611b12565b73ffffffffffffffffffffffffffffffffffffffff16610b326114ff565b73ffffffffffffffffffffffffffffffffffffffff1614610b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7f906137ce565b60405180910390fd5b601260009054906101000a900460ff1615610bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcf9061366e565b60405180910390fd5b610be183611bd3565b15610c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c18906138ee565b60405180910390fd5b610c2b8284611c50565b33600884604051610c3c91906134ef565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600960008481526020019081526020016000209080519060200190610caf929190612ae9565b5081600a84604051610cc191906134ef565b9081526020016040518091039020819055506001905092915050565b610ce5611b12565b73ffffffffffffffffffffffffffffffffffffffff16610d036114ff565b73ffffffffffffffffffffffffffffffffffffffff1614610d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d50906137ce565b60405180910390fd5b6001601260006101000a81548160ff021916908315150217905550565b600047905090565b6060600960008381526020019081526020016000208054610d9e90613b64565b80601f0160208091040260200160405190810160405280929190818152602001828054610dca90613b64565b8015610e175780601f10610dec57610100808354040283529160200191610e17565b820191906000526020600020905b815481529060010190602001808311610dfa57829003601f168201915b50505050509050919050565b600060115434610e339190613c10565b14610e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6a9061362e565b60405180910390fd5b600060115434610e839190613a49565b90506001811015610ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec0906135ee565b60405180910390fd5b600a811115610f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f049061388e565b60405180910390fd5b6000610f19600e611cc4565b82610f2491906139f3565b9050600f54811115610f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f62906138ae565b60405180910390fd5b60005b8281101561104f57600061100c3360108054610f8990613b64565b80601f0160208091040260200160405190810160405280929190818152602001828054610fb590613b64565b80156110025780601f10610fd757610100808354040283529160200191611002565b820191906000526020600020905b815481529060010190602001808311610fe557829003601f168201915b5050505050611cd2565b905060106009600083815260200190815260200160002090805461102f90613b64565b61103a929190612b6f565b5050808061104790613bc7565b915050610f6e565b505050565b6000611060600e611cc4565b905090565b61106d611b12565b73ffffffffffffffffffffffffffffffffffffffff1661108b6114ff565b73ffffffffffffffffffffffffffffffffffffffff16146110e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d8906137ce565b60405180910390fd5b80600c90805190602001906110f7929190612ae9565b5050565b61110c611106611b12565b82611d0a565b61114b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111429061386e565b60405180910390fd5b611156838383611de8565b505050565b6000600a8260405161116d91906134ef565b9081526020016040518091039020549050919050565b61119e838383604051806020016040528060008152506117ca565b505050565b6111b46111ae611b12565b82611d0a565b6111f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ea906138ce565b60405180910390fd5b6111fc81612044565b50565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129f9061372e565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611322576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113199061370e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611371611b12565b73ffffffffffffffffffffffffffffffffffffffff1661138f6114ff565b73ffffffffffffffffffffffffffffffffffffffff16146113e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113dc906137ce565b60405180910390fd5b6113ef6000612050565b565b6113f9611b12565b73ffffffffffffffffffffffffffffffffffffffff166114176114ff565b73ffffffffffffffffffffffffffffffffffffffff161461146d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611464906137ce565b60405180910390fd5b6000479050600081116114b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ac9061384e565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156114fb573d6000803e3d6000fd5b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461153890613b64565b80601f016020809104026020016040519081016040528092919081815260200182805461156490613b64565b80156115b15780601f10611586576101008083540402835291602001916115b1565b820191906000526020600020905b81548152906001019060200180831161159457829003601f168201915b5050505050905090565b601080546115c890613b64565b80601f01602080910402602001604051908101604052809291908181526020018280546115f490613b64565b80156116415780601f1061161657610100808354040283529160200191611641565b820191906000526020600020905b81548152906001019060200180831161162457829003601f168201915b505050505081565b611651611b12565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b6906136ae565b60405180910390fd5b80600560006116cc611b12565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611779611b12565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117be9190613591565b60405180910390a35050565b6117db6117d5611b12565b83611d0a565b61181a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118119061386e565b60405180910390fd5b61182684848484612116565b50505050565b606061183782612172565b9050919050565b6060600c805461184d90613b64565b80601f016020809104026020016040519081016040528092919081815260200182805461187990613b64565b80156118c65780601f1061189b576101008083540402835291602001916118c6565b820191906000526020600020905b8154815290600101906020018083116118a957829003601f168201915b5050505050905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611931576001905061193e565b61193b83836122c4565b90505b92915050565b61194c611b12565b73ffffffffffffffffffffffffffffffffffffffff1661196a6114ff565b73ffffffffffffffffffffffffffffffffffffffff16146119c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b7906137ce565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a279061360e565b60405180910390fd5b611a3981612050565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b8d836111ff565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080600883604051611be691906134ef565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b611c5982611aa6565b611c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8f9061374e565b60405180910390fd5b80600660008481526020019081526020016000209080519060200190611cbf929190612ae9565b505050565b600081600001549050919050565b6000611cde600e612358565b6000611cea600e611cc4565b9050611cf6848261236e565b611d008184611c50565b8091505092915050565b6000611d1582611aa6565b611d54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4b906136ce565b60405180910390fd5b6000611d5f836111ff565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611dce57508373ffffffffffffffffffffffffffffffffffffffff16611db684610925565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ddf5750611dde81856118d0565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611e08826111ff565b73ffffffffffffffffffffffffffffffffffffffff1614611e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e55906137ee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ece576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec59061368e565b60405180910390fd5b611ed983838361253c565b611ee4600082611b1a565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f349190613a7a565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f8b91906139f3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61204d81612541565b50565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612121848484611de8565b61212d84848484612594565b61216c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612163906135ce565b60405180910390fd5b50505050565b606061217d82611aa6565b6121bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b39061378e565b60405180910390fd5b60006006600084815260200190815260200160002080546121dc90613b64565b80601f016020809104026020016040519081016040528092919081815260200182805461220890613b64565b80156122555780601f1061222a57610100808354040283529160200191612255565b820191906000526020600020905b81548152906001019060200180831161223857829003601f168201915b50505050509050600061226661272b565b905060008151141561227c5781925050506122bf565b6000825111156122b1578082604051602001612299929190613506565b604051602081830303815290604052925050506122bf565b6122ba846127bd565b925050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6001816000016000828254019250508190555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d59061376e565b60405180910390fd5b6123e781611aa6565b15612427576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241e9061364e565b60405180910390fd5b6124336000838361253c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461248391906139f3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b61254a81612864565b600060066000838152602001908152602001600020805461256a90613b64565b905014612591576006600082815260200190815260200160002060006125909190612bfc565b5b50565b60006125b58473ffffffffffffffffffffffffffffffffffffffff16612975565b1561271e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026125de611b12565b8786866040518563ffffffff1660e01b81526004016126009493929190613545565b602060405180830381600087803b15801561261a57600080fd5b505af192505050801561264b57506040513d601f19601f820116820180604052508101906126489190612f92565b60015b6126ce573d806000811461267b576040519150601f19603f3d011682016040523d82523d6000602084013e612680565b606091505b506000815114156126c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bd906135ce565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612723565b600190505b949350505050565b6060600d805461273a90613b64565b80601f016020809104026020016040519081016040528092919081815260200182805461276690613b64565b80156127b35780601f10612788576101008083540402835291602001916127b3565b820191906000526020600020905b81548152906001019060200180831161279657829003601f168201915b5050505050905090565b60606127c882611aa6565b612807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fe9061380e565b60405180910390fd5b600061281161272b565b90506000815111612831576040518060200160405280600081525061285c565b8061283b84612988565b60405160200161284c929190613506565b6040516020818303038152906040525b915050919050565b600061286f826111ff565b905061287d8160008461253c565b612888600083611b1a565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128d89190613a7a565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b606060008214156129d0576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612ae4565b600082905060005b60008214612a025780806129eb90613bc7565b915050600a826129fb9190613a49565b91506129d8565b60008167ffffffffffffffff811115612a1e57612a1d613cfd565b5b6040519080825280601f01601f191660200182016040528015612a505781602001600182028036833780820191505090505b5090505b60008514612add57600182612a699190613a7a565b9150600a85612a789190613c10565b6030612a8491906139f3565b60f81b818381518110612a9a57612a99613cce565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612ad69190613a49565b9450612a54565b8093505050505b919050565b828054612af590613b64565b90600052602060002090601f016020900481019282612b175760008555612b5e565b82601f10612b3057805160ff1916838001178555612b5e565b82800160010185558215612b5e579182015b82811115612b5d578251825591602001919060010190612b42565b5b509050612b6b9190612c3c565b5090565b828054612b7b90613b64565b90600052602060002090601f016020900481019282612b9d5760008555612beb565b82601f10612bae5780548555612beb565b82800160010185558215612beb57600052602060002091601f016020900482015b82811115612bea578254825591600101919060010190612bcf565b5b509050612bf89190612c3c565b5090565b508054612c0890613b64565b6000825580601f10612c1a5750612c39565b601f016020900490600052602060002090810190612c389190612c3c565b5b50565b5b80821115612c55576000816000905550600101612c3d565b5090565b6000612c6c612c678461394e565b613929565b905082815260208101848484011115612c8857612c87613d31565b5b612c93848285613b22565b509392505050565b6000612cae612ca98461397f565b613929565b905082815260208101848484011115612cca57612cc9613d31565b5b612cd5848285613b22565b509392505050565b600081359050612cec81614473565b92915050565b600081359050612d018161448a565b92915050565b600081359050612d16816144a1565b92915050565b600081519050612d2b816144a1565b92915050565b600082601f830112612d4657612d45613d2c565b5b8135612d56848260208601612c59565b91505092915050565b600082601f830112612d7457612d73613d2c565b5b8135612d84848260208601612c9b565b91505092915050565b600081359050612d9c816144b8565b92915050565b600060208284031215612db857612db7613d3b565b5b6000612dc684828501612cdd565b91505092915050565b60008060408385031215612de657612de5613d3b565b5b6000612df485828601612cdd565b9250506020612e0585828601612cdd565b9150509250929050565b600080600060608486031215612e2857612e27613d3b565b5b6000612e3686828701612cdd565b9350506020612e4786828701612cdd565b9250506040612e5886828701612d8d565b9150509250925092565b60008060008060808587031215612e7c57612e7b613d3b565b5b6000612e8a87828801612cdd565b9450506020612e9b87828801612cdd565b9350506040612eac87828801612d8d565b925050606085013567ffffffffffffffff811115612ecd57612ecc613d36565b5b612ed987828801612d31565b91505092959194509250565b60008060408385031215612efc57612efb613d3b565b5b6000612f0a85828601612cdd565b9250506020612f1b85828601612cf2565b9150509250929050565b60008060408385031215612f3c57612f3b613d3b565b5b6000612f4a85828601612cdd565b9250506020612f5b85828601612d8d565b9150509250929050565b600060208284031215612f7b57612f7a613d3b565b5b6000612f8984828501612d07565b91505092915050565b600060208284031215612fa857612fa7613d3b565b5b6000612fb684828501612d1c565b91505092915050565b600060208284031215612fd557612fd4613d3b565b5b600082013567ffffffffffffffff811115612ff357612ff2613d36565b5b612fff84828501612d5f565b91505092915050565b6000806040838503121561301f5761301e613d3b565b5b600083013567ffffffffffffffff81111561303d5761303c613d36565b5b61304985828601612d5f565b925050602061305a85828601612d8d565b9150509250929050565b60006020828403121561307a57613079613d3b565b5b600061308884828501612d8d565b91505092915050565b61309a81613aae565b82525050565b6130a981613ac0565b82525050565b60006130ba826139b0565b6130c481856139c6565b93506130d4818560208601613b31565b6130dd81613d40565b840191505092915050565b60006130f3826139bb565b6130fd81856139d7565b935061310d818560208601613b31565b61311681613d40565b840191505092915050565b600061312c826139bb565b61313681856139e8565b9350613146818560208601613b31565b80840191505092915050565b600061315f6032836139d7565b915061316a82613d51565b604082019050919050565b60006131826027836139d7565b915061318d82613da0565b604082019050919050565b60006131a56026836139d7565b91506131b082613def565b604082019050919050565b60006131c86037836139d7565b91506131d382613e3e565b604082019050919050565b60006131eb601c836139d7565b91506131f682613e8d565b602082019050919050565b600061320e6021836139d7565b915061321982613eb6565b604082019050919050565b60006132316024836139d7565b915061323c82613f05565b604082019050919050565b60006132546019836139d7565b915061325f82613f54565b602082019050919050565b6000613277602c836139d7565b915061328282613f7d565b604082019050919050565b600061329a6038836139d7565b91506132a582613fcc565b604082019050919050565b60006132bd602a836139d7565b91506132c88261401b565b604082019050919050565b60006132e06029836139d7565b91506132eb8261406a565b604082019050919050565b6000613303602e836139d7565b915061330e826140b9565b604082019050919050565b60006133266020836139d7565b915061333182614108565b602082019050919050565b60006133496031836139d7565b915061335482614131565b604082019050919050565b600061336c602c836139d7565b915061337782614180565b604082019050919050565b600061338f6020836139d7565b915061339a826141cf565b602082019050919050565b60006133b26029836139d7565b91506133bd826141f8565b604082019050919050565b60006133d5602f836139d7565b91506133e082614247565b604082019050919050565b60006133f86021836139d7565b915061340382614296565b604082019050919050565b600061341b6020836139d7565b9150613426826142e5565b602082019050919050565b600061343e6031836139d7565b91506134498261430e565b604082019050919050565b6000613461602e836139d7565b915061346c8261435d565b604082019050919050565b6000613484601d836139d7565b915061348f826143ac565b602082019050919050565b60006134a76030836139d7565b91506134b2826143d5565b604082019050919050565b60006134ca6027836139d7565b91506134d582614424565b604082019050919050565b6134e981613b18565b82525050565b60006134fb8284613121565b915081905092915050565b60006135128285613121565b915061351e8284613121565b91508190509392505050565b600060208201905061353f6000830184613091565b92915050565b600060808201905061355a6000830187613091565b6135676020830186613091565b61357460408301856134e0565b818103606083015261358681846130af565b905095945050505050565b60006020820190506135a660008301846130a0565b92915050565b600060208201905081810360008301526135c681846130e8565b905092915050565b600060208201905081810360008301526135e781613152565b9050919050565b6000602082019050818103600083015261360781613175565b9050919050565b6000602082019050818103600083015261362781613198565b9050919050565b60006020820190508181036000830152613647816131bb565b9050919050565b60006020820190508181036000830152613667816131de565b9050919050565b6000602082019050818103600083015261368781613201565b9050919050565b600060208201905081810360008301526136a781613224565b9050919050565b600060208201905081810360008301526136c781613247565b9050919050565b600060208201905081810360008301526136e78161326a565b9050919050565b600060208201905081810360008301526137078161328d565b9050919050565b60006020820190508181036000830152613727816132b0565b9050919050565b60006020820190508181036000830152613747816132d3565b9050919050565b60006020820190508181036000830152613767816132f6565b9050919050565b6000602082019050818103600083015261378781613319565b9050919050565b600060208201905081810360008301526137a78161333c565b9050919050565b600060208201905081810360008301526137c78161335f565b9050919050565b600060208201905081810360008301526137e781613382565b9050919050565b60006020820190508181036000830152613807816133a5565b9050919050565b60006020820190508181036000830152613827816133c8565b9050919050565b60006020820190508181036000830152613847816133eb565b9050919050565b600060208201905081810360008301526138678161340e565b9050919050565b6000602082019050818103600083015261388781613431565b9050919050565b600060208201905081810360008301526138a781613454565b9050919050565b600060208201905081810360008301526138c781613477565b9050919050565b600060208201905081810360008301526138e78161349a565b9050919050565b60006020820190508181036000830152613907816134bd565b9050919050565b600060208201905061392360008301846134e0565b92915050565b6000613933613944565b905061393f8282613b96565b919050565b6000604051905090565b600067ffffffffffffffff82111561396957613968613cfd565b5b61397282613d40565b9050602081019050919050565b600067ffffffffffffffff82111561399a57613999613cfd565b5b6139a382613d40565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006139fe82613b18565b9150613a0983613b18565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613a3e57613a3d613c41565b5b828201905092915050565b6000613a5482613b18565b9150613a5f83613b18565b925082613a6f57613a6e613c70565b5b828204905092915050565b6000613a8582613b18565b9150613a9083613b18565b925082821015613aa357613aa2613c41565b5b828203905092915050565b6000613ab982613af8565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613b4f578082015181840152602081019050613b34565b83811115613b5e576000848401525b50505050565b60006002820490506001821680613b7c57607f821691505b60208210811415613b9057613b8f613c9f565b5b50919050565b613b9f82613d40565b810181811067ffffffffffffffff82111715613bbe57613bbd613cfd565b5b80604052505050565b6000613bd282613b18565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c0557613c04613c41565b5b600182019050919050565b6000613c1b82613b18565b9150613c2683613b18565b925082613c3657613c35613c70565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f427265616448656164733a20416d6f756e742073686f756c642062652061742060008201527f6c65617374203100000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f427265616448656164733a20416d6f756e742073686f756c642062652061206d60008201527f756c7469706c65206f66206d696e74696e6720636f7374000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f427265616448656164733a20436f6c6c656374696f6e206973206c6f636b656460008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f427265616448656164733a204e6f7468696e6720746f20776974686472617721600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f427265616448656164733a20416d6f756e74206d757374206265206c6573732060008201527f6f7220657175616c20746f203130000000000000000000000000000000000000602082015250565b7f427265616448656164733a20486172642063617020726561636865642e000000600082015250565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b7f427265616448656164733a20547279696e6720746f206d696e7420657869737460008201527f656e74206e667400000000000000000000000000000000000000000000000000602082015250565b61447c81613aae565b811461448757600080fd5b50565b61449381613ac0565b811461449e57600080fd5b50565b6144aa81613acc565b81146144b557600080fd5b50565b6144c181613b18565b81146144cc57600080fd5b5056fea26469706673582212208c26d5d134b1c7b45df4bbf3860156f5d9750c849f111b4917ff2ae67316046064736f6c63430008060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000000a4272656164486561647300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000342485a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005068747470733a2f2f697066732e696f2f697066732f6261666b726569646a356e767a366a7662647a356467357a6d7a6f777979703767686b6867763633617a646833686468326f7479706c706f616d7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001568747470733a2f2f697066732e696f2f697066732f0000000000000000000000
-----Decoded View---------------
Arg [0] : _openseaProxyAddress (address): 0xa5409ec958C83C3f309868babACA7c86DCB077c1
Arg [1] : _name (string): BreadHeads
Arg [2] : _ticker (string): BHZ
Arg [3] : _contract_ipfs (string): https://ipfs.io/ipfs/bafkreidj5nvz6jvbdz5dg5zmzowyyp7ghkhgv63azdh3hdh2otyplpoamq
Arg [4] : _base_uri (string): https://ipfs.io/ipfs/
-----Encoded View---------------
15 Constructor Arguments found :
Arg [0] : 000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [4] : 00000000000000000000000000000000000000000000000000000000000001a0
Arg [5] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [6] : 4272656164486561647300000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [8] : 42485a0000000000000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000050
Arg [10] : 68747470733a2f2f697066732e696f2f697066732f6261666b726569646a356e
Arg [11] : 767a366a7662647a356467357a6d7a6f777979703767686b6867763633617a64
Arg [12] : 6833686468326f7479706c706f616d7100000000000000000000000000000000
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000015
Arg [14] : 68747470733a2f2f697066732e696f2f697066732f0000000000000000000000
Deployed Bytecode Sourcemap
37068:5111:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19321:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37361:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20239:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21750:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21288:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39166:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40464:470;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41234:84;;;;;;;;;;;;;:::i;:::-;;41418:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39034:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39376:681;;;:::i;:::-;;38604:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41021:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22614:330;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38887:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23010:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33230:273;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19942:235;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19680:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35022:92;;;;;;;;;;;;;:::i;:::-;;41598:211;;;;;;;;;;;;;:::i;:::-;;34390:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20401:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37542:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22034:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23255:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38302:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38497:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41890:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35263:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19321:300;19423:4;19473:25;19458:40;;;:11;:40;;;;:104;;;;19529:33;19514:48;;;:11;:48;;;;19458:104;:156;;;;19578:36;19602:11;19578:23;:36::i;:::-;19458:156;19439:175;;19321:300;;;:::o;37361:32::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20239:98::-;20293:13;20325:5;20318:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20239:98;:::o;21750:217::-;21826:7;21853:16;21861:7;21853;:16::i;:::-;21845:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21936:15;:24;21952:7;21936:24;;;;;;;;;;;;;;;;;;;;;21929:31;;21750:217;;;:::o;21288:401::-;21368:13;21384:23;21399:7;21384:14;:23::i;:::-;21368:39;;21431:5;21425:11;;:2;:11;;;;21417:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;21522:5;21506:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;21531:37;21548:5;21555:12;:10;:12::i;:::-;21531:16;:37::i;:::-;21506:62;21485:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;21661:21;21670:2;21674:7;21661:8;:21::i;:::-;21358:331;21288:401;;:::o;39166:128::-;39239:7;39265:16;39282:4;39265:22;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;39258:29;;39166:128;;;:::o;40464:470::-;40551:4;34613:12;:10;:12::i;:::-;34602:23;;:7;:5;:7::i;:::-;:23;;;34594:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40576:17:::1;;;;;;;;;;;40575:18;40567:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;40650:20;40660:9;40650;:20::i;:::-;40649:21;40641:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;40724:32;40737:7;40746:9;40724:12;:32::i;:::-;40796:10;40766:16;40783:9;40766:27;;;;;;:::i;:::-;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;40844:9;40816:16;:25;40833:7;40816:25;;;;;;;;;;;:37;;;;;;;;;;;;:::i;:::-;;40899:7;40863:22;40886:9;40863:33;;;;;;:::i;:::-;;;;;;;;;;;;;:43;;;;40923:4;40916:11;;40464:470:::0;;;;:::o;41234:84::-;34613:12;:10;:12::i;:::-;34602:23;;:7;:5;:7::i;:::-;:23;;;34594:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41307:4:::1;41287:17;;:24;;;;;;;;;;;;;;;;;;41234:84::o:0;41418:97::-;41461:7;41487:21;41480:28;;41418:97;:::o;39034:126::-;39096:13;39128:16;:25;39145:7;39128:25;;;;;;;;;;;39121:32;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39034:126;;;:::o;39376:681::-;39457:1;39440:13;;39428:9;:25;;;;:::i;:::-;:30;39420:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;39528:14;39557:13;;39545:9;:25;;;;:::i;:::-;39528:42;;39598:1;39588:6;:11;;39580:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;39671:2;39661:6;:12;;39653:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;39734:15;39761:25;:15;:23;:25::i;:::-;39752:6;:34;;;;:::i;:::-;39734:52;;39815:8;;39804:7;:19;;39796:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;39867:6;39887:164;39903:6;39899:1;:10;39887:164;;;39930:15;39948:35;39955:10;39967:15;39948:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:6;:35::i;:::-;39930:53;;40025:15;39997:16;:25;40014:7;39997:25;;;;;;;;;;;:43;;;;;;:::i;:::-;;;;;;:::i;:::-;;39916:135;39911:3;;;;;:::i;:::-;;;;39887:164;;;39410:647;;;39376:681::o;38604:102::-;38648:7;38674:25;:15;:23;:25::i;:::-;38667:32;;38604:102;:::o;41021:131::-;34613:12;:10;:12::i;:::-;34602:23;;:7;:5;:7::i;:::-;:23;;;34594:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41131:14:::1;41110:18;:35;;;;;;;;;;;;:::i;:::-;;41021:131:::0;:::o;22614:330::-;22803:41;22822:12;:10;:12::i;:::-;22836:7;22803:18;:41::i;:::-;22795:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;22909:28;22919:4;22925:2;22929:7;22909:9;:28::i;:::-;22614:330;;;:::o;38887:141::-;38962:7;38988:22;39011:9;38988:33;;;;;;:::i;:::-;;;;;;;;;;;;;;38981:40;;38887:141;;;:::o;23010:179::-;23143:39;23160:4;23166:2;23170:7;23143:39;;;;;;;;;;;;:16;:39::i;:::-;23010:179;;;:::o;33230:273::-;33346:41;33365:12;:10;:12::i;:::-;33379:7;33346:18;:41::i;:::-;33338:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;33482:14;33488:7;33482:5;:14::i;:::-;33230:273;:::o;19942:235::-;20014:7;20033:13;20049:7;:16;20057:7;20049:16;;;;;;;;;;;;;;;;;;;;;20033:32;;20100:1;20083:19;;:5;:19;;;;20075:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20165:5;20158:12;;;19942:235;;;:::o;19680:205::-;19752:7;19796:1;19779:19;;:5;:19;;;;19771:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;19862:9;:16;19872:5;19862:16;;;;;;;;;;;;;;;;19855:23;;19680:205;;;:::o;35022:92::-;34613:12;:10;:12::i;:::-;34602:23;;:7;:5;:7::i;:::-;:23;;;34594:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35086:21:::1;35104:1;35086:9;:21::i;:::-;35022:92::o:0;41598:211::-;34613:12;:10;:12::i;:::-;34602:23;;:7;:5;:7::i;:::-;:23;;;34594:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41650:15:::1;41668:21;41650:39;;41717:1;41707:7;:11;41699:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;41773:10;41765:28;;:37;41794:7;41765:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;41640:169;41598:211::o:0;34390:85::-;34436:7;34462:6;;;;;;;;;;;34455:13;;34390:85;:::o;20401:102::-;20457:13;20489:7;20482:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20401:102;:::o;37542:93::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22034:290::-;22148:12;:10;:12::i;:::-;22136:24;;:8;:24;;;;22128:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;22246:8;22201:18;:32;22220:12;:10;:12::i;:::-;22201:32;;;;;;;;;;;;;;;:42;22234:8;22201:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;22298:8;22269:48;;22284:12;:10;:12::i;:::-;22269:48;;;22308:8;22269:48;;;;;;:::i;:::-;;;;;;;;22034:290;;:::o;23255:320::-;23424:41;23443:12;:10;:12::i;:::-;23457:7;23424:18;:41::i;:::-;23416:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23529:39;23543:4;23549:2;23553:7;23562:5;23529:13;:39::i;:::-;23255:320;;;;:::o;38302:189::-;38425:13;38461:23;38476:7;38461:14;:23::i;:::-;38454:30;;38302:189;;;:::o;38497:101::-;38541:13;38573:18;38566:25;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38497:101;:::o;41890:287::-;42003:15;42055:19;;;;;;;;;;;42034:41;;:9;:41;;;42030:83;;;42098:4;42091:11;;;;42030:83;42129:41;42152:6;42160:9;42129:22;:41::i;:::-;42122:48;;41890:287;;;;;:::o;35263:189::-;34613:12;:10;:12::i;:::-;34602:23;;:7;:5;:7::i;:::-;:23;;;34594:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35371:1:::1;35351:22;;:8;:22;;;;35343:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35426:19;35436:8;35426:9;:19::i;:::-;35263:189:::0;:::o;17941:187::-;18026:4;18096:25;18081:40;;;:11;:40;;;;18074:47;;17941:187;;;:::o;25047:125::-;25112:4;25163:1;25135:30;;:7;:16;25143:7;25135:16;;;;;;;;;;;;;;;;;;;;;:30;;;;25128:37;;25047:125;;;:::o;15070:96::-;15123:7;15149:10;15142:17;;15070:96;:::o;28898:171::-;28999:2;28972:15;:24;28988:7;28972:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;29054:7;29050:2;29016:46;;29025:23;29040:7;29025:14;:23::i;:::-;29016:46;;;;;;;;;;;;28898:171;;:::o;38712:169::-;38779:4;38795:13;38811:16;38828:9;38811:27;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;38795:43;;38872:1;38855:19;;:5;:19;;;;38848:26;;;38712:169;;;:::o;32232:214::-;32331:16;32339:7;32331;:16::i;:::-;32323:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;32430:9;32408:10;:19;32419:7;32408:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;32232:214;;:::o;36378:112::-;36443:7;36469;:14;;;36462:21;;36378:112;;;:::o;40121:283::-;40192:7;40210:27;:15;:25;:27::i;:::-;40247:18;40268:25;:15;:23;:25::i;:::-;40247:46;;40303:22;40309:3;40314:10;40303:5;:22::i;:::-;40335:35;40348:10;40360:9;40335:12;:35::i;:::-;40387:10;40380:17;;;40121:283;;;;:::o;25330:344::-;25423:4;25447:16;25455:7;25447;:16::i;:::-;25439:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25522:13;25538:23;25553:7;25538:14;:23::i;:::-;25522:39;;25590:5;25579:16;;:7;:16;;;:51;;;;25623:7;25599:31;;:20;25611:7;25599:11;:20::i;:::-;:31;;;25579:51;:87;;;;25634:32;25651:5;25658:7;25634:16;:32::i;:::-;25579:87;25571:96;;;25330:344;;;;:::o;28227:560::-;28381:4;28354:31;;:23;28369:7;28354:14;:23::i;:::-;:31;;;28346:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;28463:1;28449:16;;:2;:16;;;;28441:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;28517:39;28538:4;28544:2;28548:7;28517:20;:39::i;:::-;28618:29;28635:1;28639:7;28618:8;:29::i;:::-;28677:1;28658:9;:15;28668:4;28658:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;28705:1;28688:9;:13;28698:2;28688:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28735:2;28716:7;:16;28724:7;28716:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28772:7;28768:2;28753:27;;28762:4;28753:27;;;;;;;;;;;;28227:560;;;:::o;38179:113::-;38265:20;38277:7;38265:11;:20::i;:::-;38179:113;:::o;35458:201::-;35513:16;35532:6;;;;;;;;;;;35513:25;;35557:8;35548:6;;:17;;;;;;;;;;;;;;;;;;35643:8;35612:40;;35633:8;35612:40;;;;;;;;;;;;35503:156;35458:201;:::o;24437:307::-;24588:28;24598:4;24604:2;24608:7;24588:9;:28::i;:::-;24634:48;24657:4;24663:2;24667:7;24676:5;24634:22;:48::i;:::-;24626:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;24437:307;;;;:::o;31422:663::-;31495:13;31528:16;31536:7;31528;:16::i;:::-;31520:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;31609:23;31635:10;:19;31646:7;31635:19;;;;;;;;;;;31609:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31664:18;31685:10;:8;:10::i;:::-;31664:31;;31790:1;31774:4;31768:18;:23;31764:70;;;31814:9;31807:16;;;;;;31764:70;31962:1;31942:9;31936:23;:27;31932:106;;;32010:4;32016:9;31993:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;31979:48;;;;;;31932:106;32055:23;32070:7;32055:14;:23::i;:::-;32048:30;;;;31422:663;;;;:::o;22390:162::-;22487:4;22510:18;:25;22529:5;22510:25;;;;;;;;;;;;;;;:35;22536:8;22510:35;;;;;;;;;;;;;;;;;;;;;;;;;22503:42;;22390:162;;;;:::o;36496:123::-;36601:1;36583:7;:14;;;:19;;;;;;;;;;;36496:123;:::o;26966:372::-;27059:1;27045:16;;:2;:16;;;;27037:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27117:16;27125:7;27117;:16::i;:::-;27116:17;27108:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;27177:45;27206:1;27210:2;27214:7;27177:20;:45::i;:::-;27250:1;27233:9;:13;27243:2;27233:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;27280:2;27261:7;:16;27269:7;27261:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;27323:7;27319:2;27298:33;;27315:1;27298:33;;;;;;;;;;;;26966:372;;:::o;30960:154::-;;;;:::o;32663:232::-;32731:20;32743:7;32731:11;:20::i;:::-;32803:1;32772:10;:19;32783:7;32772:19;;;;;;;;;;;32766:33;;;;;:::i;:::-;;;:38;32762:127;;32827:10;:19;32838:7;32827:19;;;;;;;;;;;;32820:26;;;;:::i;:::-;32762:127;32663:232;:::o;29622:782::-;29772:4;29792:15;:2;:13;;;:15::i;:::-;29788:610;;;29843:2;29827:36;;;29864:12;:10;:12::i;:::-;29878:4;29884:7;29893:5;29827:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;29823:523;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30087:1;30070:6;:13;:18;30066:266;;;30112:60;;;;;;;;;;:::i;:::-;;;;;;;;30066:266;30284:6;30278:13;30269:6;30265:2;30261:15;30254:38;29823:523;29959:45;;;29949:55;;;:6;:55;;;;29942:62;;;;;29788:610;30383:4;30376:11;;29622:782;;;;;;;:::o;38075:98::-;38127:13;38159:7;38152:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38075:98;:::o;20569:329::-;20642:13;20675:16;20683:7;20675;:16::i;:::-;20667:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;20754:21;20778:10;:8;:10::i;:::-;20754:34;;20829:1;20811:7;20805:21;:25;:86;;;;;;;;;;;;;;;;;20857:7;20866:18;:7;:16;:18::i;:::-;20840:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;20805:86;20798:93;;;20569:329;;;:::o;27555:348::-;27614:13;27630:23;27645:7;27630:14;:23::i;:::-;27614:39;;27664:48;27685:5;27700:1;27704:7;27664:20;:48::i;:::-;27750:29;27767:1;27771:7;27750:8;:29::i;:::-;27810:1;27790:9;:16;27800:5;27790:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;27828:7;:16;27836:7;27828:16;;;;;;;;;;;;27821:23;;;;;;;;;;;27888:7;27884:1;27860:36;;27869:5;27860:36;;;;;;;;;;;;27604:299;27555:348;:::o;7582:377::-;7642:4;7845:12;7910:7;7898:20;7890:28;;7951:1;7944:4;:8;7937:15;;;7582:377;;;:::o;15524:703::-;15580:13;15806:1;15797:5;:10;15793:51;;;15823:10;;;;;;;;;;;;;;;;;;;;;15793:51;15853:12;15868:5;15853:20;;15883:14;15907:75;15922:1;15914:4;:9;15907:75;;15939:8;;;;;:::i;:::-;;;;15969:2;15961:10;;;;;:::i;:::-;;;15907:75;;;15991:19;16023:6;16013:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15991:39;;16040:150;16056:1;16047:5;:10;16040:150;;16083:1;16073:11;;;;;:::i;:::-;;;16149:2;16141:5;:10;;;;:::i;:::-;16128:2;:24;;;;:::i;:::-;16115:39;;16098:6;16105;16098:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;16177:2;16168:11;;;;;:::i;:::-;;;16040:150;;;16213:6;16199:21;;;;;15524:703;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:2:-;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:2;;;280:79;;:::i;:::-;249:2;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;;;;;;:::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:2;;;698:79;;:::i;:::-;667:2;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;893:87;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;1035:84;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1176:86;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1330:79;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:2;;1540:79;;:::i;:::-;1499:2;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:2;;1899:79;;:::i;:::-;1858:2;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2184:87;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:2;;;2391:79;;:::i;:::-;2353:2;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2343:263;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:2;;;2743:79;;:::i;:::-;2705:2;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2695:391;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:2;;;3240:79;;:::i;:::-;3202:2;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3192:519;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:2;;;3892:79;;:::i;:::-;3853:2;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:2;;;4476:79;;:::i;:::-;4440:2;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3843:817;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:2;;;4794:79;;:::i;:::-;4756:2;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4746:388;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:2;;;5271:79;;:::i;:::-;5233:2;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5223:391;;;;;:::o;5620:327::-;5678:6;5727:2;5715:9;5706:7;5702:23;5698:32;5695:2;;;5733:79;;:::i;:::-;5695:2;5853:1;5878:52;5922:7;5913:6;5902:9;5898:22;5878:52;:::i;:::-;5868:62;;5824:116;5685:262;;;;:::o;5953:349::-;6022:6;6071:2;6059:9;6050:7;6046:23;6042:32;6039:2;;;6077:79;;:::i;:::-;6039:2;6197:1;6222:63;6277:7;6268:6;6257:9;6253:22;6222:63;:::i;:::-;6212:73;;6168:127;6029:273;;;;:::o;6308:509::-;6377:6;6426:2;6414:9;6405:7;6401:23;6397:32;6394:2;;;6432:79;;:::i;:::-;6394:2;6580:1;6569:9;6565:17;6552:31;6610:18;6602:6;6599:30;6596:2;;;6632:79;;:::i;:::-;6596:2;6737:63;6792:7;6783:6;6772:9;6768:22;6737:63;:::i;:::-;6727:73;;6523:287;6384:433;;;;:::o;6823:654::-;6901:6;6909;6958:2;6946:9;6937:7;6933:23;6929:32;6926:2;;;6964:79;;:::i;:::-;6926:2;7112:1;7101:9;7097:17;7084:31;7142:18;7134:6;7131:30;7128:2;;;7164:79;;:::i;:::-;7128:2;7269:63;7324:7;7315:6;7304:9;7300:22;7269:63;:::i;:::-;7259:73;;7055:287;7381:2;7407:53;7452:7;7443:6;7432:9;7428:22;7407:53;:::i;:::-;7397:63;;7352:118;6916:561;;;;;:::o;7483:329::-;7542:6;7591:2;7579:9;7570:7;7566:23;7562:32;7559:2;;;7597:79;;:::i;:::-;7559:2;7717:1;7742:53;7787:7;7778:6;7767:9;7763:22;7742:53;:::i;:::-;7732:63;;7688:117;7549:263;;;;:::o;7818:118::-;7905:24;7923:5;7905:24;:::i;:::-;7900:3;7893:37;7883:53;;:::o;7942:109::-;8023:21;8038:5;8023:21;:::i;:::-;8018:3;8011:34;8001:50;;:::o;8057:360::-;8143:3;8171:38;8203:5;8171:38;:::i;:::-;8225:70;8288:6;8283:3;8225:70;:::i;:::-;8218:77;;8304:52;8349:6;8344:3;8337:4;8330:5;8326:16;8304:52;:::i;:::-;8381:29;8403:6;8381:29;:::i;:::-;8376:3;8372:39;8365:46;;8147:270;;;;;:::o;8423:364::-;8511:3;8539:39;8572:5;8539:39;:::i;:::-;8594:71;8658:6;8653:3;8594:71;:::i;:::-;8587:78;;8674:52;8719:6;8714:3;8707:4;8700:5;8696:16;8674:52;:::i;:::-;8751:29;8773:6;8751:29;:::i;:::-;8746:3;8742:39;8735:46;;8515:272;;;;;:::o;8793:377::-;8899:3;8927:39;8960:5;8927:39;:::i;:::-;8982:89;9064:6;9059:3;8982:89;:::i;:::-;8975:96;;9080:52;9125:6;9120:3;9113:4;9106:5;9102:16;9080:52;:::i;:::-;9157:6;9152:3;9148:16;9141:23;;8903:267;;;;;:::o;9176:366::-;9318:3;9339:67;9403:2;9398:3;9339:67;:::i;:::-;9332:74;;9415:93;9504:3;9415:93;:::i;:::-;9533:2;9528:3;9524:12;9517:19;;9322:220;;;:::o;9548:366::-;9690:3;9711:67;9775:2;9770:3;9711:67;:::i;:::-;9704:74;;9787:93;9876:3;9787:93;:::i;:::-;9905:2;9900:3;9896:12;9889:19;;9694:220;;;:::o;9920:366::-;10062:3;10083:67;10147:2;10142:3;10083:67;:::i;:::-;10076:74;;10159:93;10248:3;10159:93;:::i;:::-;10277:2;10272:3;10268:12;10261:19;;10066:220;;;:::o;10292:366::-;10434:3;10455:67;10519:2;10514:3;10455:67;:::i;:::-;10448:74;;10531:93;10620:3;10531:93;:::i;:::-;10649:2;10644:3;10640:12;10633:19;;10438:220;;;:::o;10664:366::-;10806:3;10827:67;10891:2;10886:3;10827:67;:::i;:::-;10820:74;;10903:93;10992:3;10903:93;:::i;:::-;11021:2;11016:3;11012:12;11005:19;;10810:220;;;:::o;11036:366::-;11178:3;11199:67;11263:2;11258:3;11199:67;:::i;:::-;11192:74;;11275:93;11364:3;11275:93;:::i;:::-;11393:2;11388:3;11384:12;11377:19;;11182:220;;;:::o;11408:366::-;11550:3;11571:67;11635:2;11630:3;11571:67;:::i;:::-;11564:74;;11647:93;11736:3;11647:93;:::i;:::-;11765:2;11760:3;11756:12;11749:19;;11554:220;;;:::o;11780:366::-;11922:3;11943:67;12007:2;12002:3;11943:67;:::i;:::-;11936:74;;12019:93;12108:3;12019:93;:::i;:::-;12137:2;12132:3;12128:12;12121:19;;11926:220;;;:::o;12152:366::-;12294:3;12315:67;12379:2;12374:3;12315:67;:::i;:::-;12308:74;;12391:93;12480:3;12391:93;:::i;:::-;12509:2;12504:3;12500:12;12493:19;;12298:220;;;:::o;12524:366::-;12666:3;12687:67;12751:2;12746:3;12687:67;:::i;:::-;12680:74;;12763:93;12852:3;12763:93;:::i;:::-;12881:2;12876:3;12872:12;12865:19;;12670:220;;;:::o;12896:366::-;13038:3;13059:67;13123:2;13118:3;13059:67;:::i;:::-;13052:74;;13135:93;13224:3;13135:93;:::i;:::-;13253:2;13248:3;13244:12;13237:19;;13042:220;;;:::o;13268:366::-;13410:3;13431:67;13495:2;13490:3;13431:67;:::i;:::-;13424:74;;13507:93;13596:3;13507:93;:::i;:::-;13625:2;13620:3;13616:12;13609:19;;13414:220;;;:::o;13640:366::-;13782:3;13803:67;13867:2;13862:3;13803:67;:::i;:::-;13796:74;;13879:93;13968:3;13879:93;:::i;:::-;13997:2;13992:3;13988:12;13981:19;;13786:220;;;:::o;14012:366::-;14154:3;14175:67;14239:2;14234:3;14175:67;:::i;:::-;14168:74;;14251:93;14340:3;14251:93;:::i;:::-;14369:2;14364:3;14360:12;14353:19;;14158:220;;;:::o;14384:366::-;14526:3;14547:67;14611:2;14606:3;14547:67;:::i;:::-;14540:74;;14623:93;14712:3;14623:93;:::i;:::-;14741:2;14736:3;14732:12;14725:19;;14530:220;;;:::o;14756:366::-;14898:3;14919:67;14983:2;14978:3;14919:67;:::i;:::-;14912:74;;14995:93;15084:3;14995:93;:::i;:::-;15113:2;15108:3;15104:12;15097:19;;14902:220;;;:::o;15128:366::-;15270:3;15291:67;15355:2;15350:3;15291:67;:::i;:::-;15284:74;;15367:93;15456:3;15367:93;:::i;:::-;15485:2;15480:3;15476:12;15469:19;;15274:220;;;:::o;15500:366::-;15642:3;15663:67;15727:2;15722:3;15663:67;:::i;:::-;15656:74;;15739:93;15828:3;15739:93;:::i;:::-;15857:2;15852:3;15848:12;15841:19;;15646:220;;;:::o;15872:366::-;16014:3;16035:67;16099:2;16094:3;16035:67;:::i;:::-;16028:74;;16111:93;16200:3;16111:93;:::i;:::-;16229:2;16224:3;16220:12;16213:19;;16018:220;;;:::o;16244:366::-;16386:3;16407:67;16471:2;16466:3;16407:67;:::i;:::-;16400:74;;16483:93;16572:3;16483:93;:::i;:::-;16601:2;16596:3;16592:12;16585:19;;16390:220;;;:::o;16616:366::-;16758:3;16779:67;16843:2;16838:3;16779:67;:::i;:::-;16772:74;;16855:93;16944:3;16855:93;:::i;:::-;16973:2;16968:3;16964:12;16957:19;;16762:220;;;:::o;16988:366::-;17130:3;17151:67;17215:2;17210:3;17151:67;:::i;:::-;17144:74;;17227:93;17316:3;17227:93;:::i;:::-;17345:2;17340:3;17336:12;17329:19;;17134:220;;;:::o;17360:366::-;17502:3;17523:67;17587:2;17582:3;17523:67;:::i;:::-;17516:74;;17599:93;17688:3;17599:93;:::i;:::-;17717:2;17712:3;17708:12;17701:19;;17506:220;;;:::o;17732:366::-;17874:3;17895:67;17959:2;17954:3;17895:67;:::i;:::-;17888:74;;17971:93;18060:3;17971:93;:::i;:::-;18089:2;18084:3;18080:12;18073:19;;17878:220;;;:::o;18104:366::-;18246:3;18267:67;18331:2;18326:3;18267:67;:::i;:::-;18260:74;;18343:93;18432:3;18343:93;:::i;:::-;18461:2;18456:3;18452:12;18445:19;;18250:220;;;:::o;18476:366::-;18618:3;18639:67;18703:2;18698:3;18639:67;:::i;:::-;18632:74;;18715:93;18804:3;18715:93;:::i;:::-;18833:2;18828:3;18824:12;18817:19;;18622:220;;;:::o;18848:118::-;18935:24;18953:5;18935:24;:::i;:::-;18930:3;18923:37;18913:53;;:::o;18972:275::-;19104:3;19126:95;19217:3;19208:6;19126:95;:::i;:::-;19119:102;;19238:3;19231:10;;19108:139;;;;:::o;19253:435::-;19433:3;19455:95;19546:3;19537:6;19455:95;:::i;:::-;19448:102;;19567:95;19658:3;19649:6;19567:95;:::i;:::-;19560:102;;19679:3;19672:10;;19437:251;;;;;:::o;19694:222::-;19787:4;19825:2;19814:9;19810:18;19802:26;;19838:71;19906:1;19895:9;19891:17;19882:6;19838:71;:::i;:::-;19792:124;;;;:::o;19922:640::-;20117:4;20155:3;20144:9;20140:19;20132:27;;20169:71;20237:1;20226:9;20222:17;20213:6;20169:71;:::i;:::-;20250:72;20318:2;20307:9;20303:18;20294:6;20250:72;:::i;:::-;20332;20400:2;20389:9;20385:18;20376:6;20332:72;:::i;:::-;20451:9;20445:4;20441:20;20436:2;20425:9;20421:18;20414:48;20479:76;20550:4;20541:6;20479:76;:::i;:::-;20471:84;;20122:440;;;;;;;:::o;20568:210::-;20655:4;20693:2;20682:9;20678:18;20670:26;;20706:65;20768:1;20757:9;20753:17;20744:6;20706:65;:::i;:::-;20660:118;;;;:::o;20784:313::-;20897:4;20935:2;20924:9;20920:18;20912:26;;20984:9;20978:4;20974:20;20970:1;20959:9;20955:17;20948:47;21012:78;21085:4;21076:6;21012:78;:::i;:::-;21004:86;;20902:195;;;;:::o;21103:419::-;21269:4;21307:2;21296:9;21292:18;21284:26;;21356:9;21350:4;21346:20;21342:1;21331:9;21327:17;21320:47;21384:131;21510:4;21384:131;:::i;:::-;21376:139;;21274:248;;;:::o;21528:419::-;21694:4;21732:2;21721:9;21717:18;21709:26;;21781:9;21775:4;21771:20;21767:1;21756:9;21752:17;21745:47;21809:131;21935:4;21809:131;:::i;:::-;21801:139;;21699:248;;;:::o;21953:419::-;22119:4;22157:2;22146:9;22142:18;22134:26;;22206:9;22200:4;22196:20;22192:1;22181:9;22177:17;22170:47;22234:131;22360:4;22234:131;:::i;:::-;22226:139;;22124:248;;;:::o;22378:419::-;22544:4;22582:2;22571:9;22567:18;22559:26;;22631:9;22625:4;22621:20;22617:1;22606:9;22602:17;22595:47;22659:131;22785:4;22659:131;:::i;:::-;22651:139;;22549:248;;;:::o;22803:419::-;22969:4;23007:2;22996:9;22992:18;22984:26;;23056:9;23050:4;23046:20;23042:1;23031:9;23027:17;23020:47;23084:131;23210:4;23084:131;:::i;:::-;23076:139;;22974:248;;;:::o;23228:419::-;23394:4;23432:2;23421:9;23417:18;23409:26;;23481:9;23475:4;23471:20;23467:1;23456:9;23452:17;23445:47;23509:131;23635:4;23509:131;:::i;:::-;23501:139;;23399:248;;;:::o;23653:419::-;23819:4;23857:2;23846:9;23842:18;23834:26;;23906:9;23900:4;23896:20;23892:1;23881:9;23877:17;23870:47;23934:131;24060:4;23934:131;:::i;:::-;23926:139;;23824:248;;;:::o;24078:419::-;24244:4;24282:2;24271:9;24267:18;24259:26;;24331:9;24325:4;24321:20;24317:1;24306:9;24302:17;24295:47;24359:131;24485:4;24359:131;:::i;:::-;24351:139;;24249:248;;;:::o;24503:419::-;24669:4;24707:2;24696:9;24692:18;24684:26;;24756:9;24750:4;24746:20;24742:1;24731:9;24727:17;24720:47;24784:131;24910:4;24784:131;:::i;:::-;24776:139;;24674:248;;;:::o;24928:419::-;25094:4;25132:2;25121:9;25117:18;25109:26;;25181:9;25175:4;25171:20;25167:1;25156:9;25152:17;25145:47;25209:131;25335:4;25209:131;:::i;:::-;25201:139;;25099:248;;;:::o;25353:419::-;25519:4;25557:2;25546:9;25542:18;25534:26;;25606:9;25600:4;25596:20;25592:1;25581:9;25577:17;25570:47;25634:131;25760:4;25634:131;:::i;:::-;25626:139;;25524:248;;;:::o;25778:419::-;25944:4;25982:2;25971:9;25967:18;25959:26;;26031:9;26025:4;26021:20;26017:1;26006:9;26002:17;25995:47;26059:131;26185:4;26059:131;:::i;:::-;26051:139;;25949:248;;;:::o;26203:419::-;26369:4;26407:2;26396:9;26392:18;26384:26;;26456:9;26450:4;26446:20;26442:1;26431:9;26427:17;26420:47;26484:131;26610:4;26484:131;:::i;:::-;26476:139;;26374:248;;;:::o;26628:419::-;26794:4;26832:2;26821:9;26817:18;26809:26;;26881:9;26875:4;26871:20;26867:1;26856:9;26852:17;26845:47;26909:131;27035:4;26909:131;:::i;:::-;26901:139;;26799:248;;;:::o;27053:419::-;27219:4;27257:2;27246:9;27242:18;27234:26;;27306:9;27300:4;27296:20;27292:1;27281:9;27277:17;27270:47;27334:131;27460:4;27334:131;:::i;:::-;27326:139;;27224:248;;;:::o;27478:419::-;27644:4;27682:2;27671:9;27667:18;27659:26;;27731:9;27725:4;27721:20;27717:1;27706:9;27702:17;27695:47;27759:131;27885:4;27759:131;:::i;:::-;27751:139;;27649:248;;;:::o;27903:419::-;28069:4;28107:2;28096:9;28092:18;28084:26;;28156:9;28150:4;28146:20;28142:1;28131:9;28127:17;28120:47;28184:131;28310:4;28184:131;:::i;:::-;28176:139;;28074:248;;;:::o;28328:419::-;28494:4;28532:2;28521:9;28517:18;28509:26;;28581:9;28575:4;28571:20;28567:1;28556:9;28552:17;28545:47;28609:131;28735:4;28609:131;:::i;:::-;28601:139;;28499:248;;;:::o;28753:419::-;28919:4;28957:2;28946:9;28942:18;28934:26;;29006:9;29000:4;28996:20;28992:1;28981:9;28977:17;28970:47;29034:131;29160:4;29034:131;:::i;:::-;29026:139;;28924:248;;;:::o;29178:419::-;29344:4;29382:2;29371:9;29367:18;29359:26;;29431:9;29425:4;29421:20;29417:1;29406:9;29402:17;29395:47;29459:131;29585:4;29459:131;:::i;:::-;29451:139;;29349:248;;;:::o;29603:419::-;29769:4;29807:2;29796:9;29792:18;29784:26;;29856:9;29850:4;29846:20;29842:1;29831:9;29827:17;29820:47;29884:131;30010:4;29884:131;:::i;:::-;29876:139;;29774:248;;;:::o;30028:419::-;30194:4;30232:2;30221:9;30217:18;30209:26;;30281:9;30275:4;30271:20;30267:1;30256:9;30252:17;30245:47;30309:131;30435:4;30309:131;:::i;:::-;30301:139;;30199:248;;;:::o;30453:419::-;30619:4;30657:2;30646:9;30642:18;30634:26;;30706:9;30700:4;30696:20;30692:1;30681:9;30677:17;30670:47;30734:131;30860:4;30734:131;:::i;:::-;30726:139;;30624:248;;;:::o;30878:419::-;31044:4;31082:2;31071:9;31067:18;31059:26;;31131:9;31125:4;31121:20;31117:1;31106:9;31102:17;31095:47;31159:131;31285:4;31159:131;:::i;:::-;31151:139;;31049:248;;;:::o;31303:419::-;31469:4;31507:2;31496:9;31492:18;31484:26;;31556:9;31550:4;31546:20;31542:1;31531:9;31527:17;31520:47;31584:131;31710:4;31584:131;:::i;:::-;31576:139;;31474:248;;;:::o;31728:419::-;31894:4;31932:2;31921:9;31917:18;31909:26;;31981:9;31975:4;31971:20;31967:1;31956:9;31952:17;31945:47;32009:131;32135:4;32009:131;:::i;:::-;32001:139;;31899:248;;;:::o;32153:222::-;32246:4;32284:2;32273:9;32269:18;32261:26;;32297:71;32365:1;32354:9;32350:17;32341:6;32297:71;:::i;:::-;32251:124;;;;:::o;32381:129::-;32415:6;32442:20;;:::i;:::-;32432:30;;32471:33;32499:4;32491:6;32471:33;:::i;:::-;32422:88;;;:::o;32516:75::-;32549:6;32582:2;32576:9;32566:19;;32556:35;:::o;32597:307::-;32658:4;32748:18;32740:6;32737:30;32734:2;;;32770:18;;:::i;:::-;32734:2;32808:29;32830:6;32808:29;:::i;:::-;32800:37;;32892:4;32886;32882:15;32874:23;;32663:241;;;:::o;32910:308::-;32972:4;33062:18;33054:6;33051:30;33048:2;;;33084:18;;:::i;:::-;33048:2;33122:29;33144:6;33122:29;:::i;:::-;33114:37;;33206:4;33200;33196:15;33188:23;;32977:241;;;:::o;33224:98::-;33275:6;33309:5;33303:12;33293:22;;33282:40;;;:::o;33328:99::-;33380:6;33414:5;33408:12;33398:22;;33387:40;;;:::o;33433:168::-;33516:11;33550:6;33545:3;33538:19;33590:4;33585:3;33581:14;33566:29;;33528:73;;;;:::o;33607:169::-;33691:11;33725:6;33720:3;33713:19;33765:4;33760:3;33756:14;33741:29;;33703:73;;;;:::o;33782:148::-;33884:11;33921:3;33906:18;;33896:34;;;;:::o;33936:305::-;33976:3;33995:20;34013:1;33995:20;:::i;:::-;33990:25;;34029:20;34047:1;34029:20;:::i;:::-;34024:25;;34183:1;34115:66;34111:74;34108:1;34105:81;34102:2;;;34189:18;;:::i;:::-;34102:2;34233:1;34230;34226:9;34219:16;;33980:261;;;;:::o;34247:185::-;34287:1;34304:20;34322:1;34304:20;:::i;:::-;34299:25;;34338:20;34356:1;34338:20;:::i;:::-;34333:25;;34377:1;34367:2;;34382:18;;:::i;:::-;34367:2;34424:1;34421;34417:9;34412:14;;34289:143;;;;:::o;34438:191::-;34478:4;34498:20;34516:1;34498:20;:::i;:::-;34493:25;;34532:20;34550:1;34532:20;:::i;:::-;34527:25;;34571:1;34568;34565:8;34562:2;;;34576:18;;:::i;:::-;34562:2;34621:1;34618;34614:9;34606:17;;34483:146;;;;:::o;34635:96::-;34672:7;34701:24;34719:5;34701:24;:::i;:::-;34690:35;;34680:51;;;:::o;34737:90::-;34771:7;34814:5;34807:13;34800:21;34789:32;;34779:48;;;:::o;34833:149::-;34869:7;34909:66;34902:5;34898:78;34887:89;;34877:105;;;:::o;34988:126::-;35025:7;35065:42;35058:5;35054:54;35043:65;;35033:81;;;:::o;35120:77::-;35157:7;35186:5;35175:16;;35165:32;;;:::o;35203:154::-;35287:6;35282:3;35277;35264:30;35349:1;35340:6;35335:3;35331:16;35324:27;35254:103;;;:::o;35363:307::-;35431:1;35441:113;35455:6;35452:1;35449:13;35441:113;;;35540:1;35535:3;35531:11;35525:18;35521:1;35516:3;35512:11;35505:39;35477:2;35474:1;35470:10;35465:15;;35441:113;;;35572:6;35569:1;35566:13;35563:2;;;35652:1;35643:6;35638:3;35634:16;35627:27;35563:2;35412:258;;;;:::o;35676:320::-;35720:6;35757:1;35751:4;35747:12;35737:22;;35804:1;35798:4;35794:12;35825:18;35815:2;;35881:4;35873:6;35869:17;35859:27;;35815:2;35943;35935:6;35932:14;35912:18;35909:38;35906:2;;;35962:18;;:::i;:::-;35906:2;35727:269;;;;:::o;36002:281::-;36085:27;36107:4;36085:27;:::i;:::-;36077:6;36073:40;36215:6;36203:10;36200:22;36179:18;36167:10;36164:34;36161:62;36158:2;;;36226:18;;:::i;:::-;36158:2;36266:10;36262:2;36255:22;36045:238;;;:::o;36289:233::-;36328:3;36351:24;36369:5;36351:24;:::i;:::-;36342:33;;36397:66;36390:5;36387:77;36384:2;;;36467:18;;:::i;:::-;36384:2;36514:1;36507:5;36503:13;36496:20;;36332:190;;;:::o;36528:176::-;36560:1;36577:20;36595:1;36577:20;:::i;:::-;36572:25;;36611:20;36629:1;36611:20;:::i;:::-;36606:25;;36650:1;36640:2;;36655:18;;:::i;:::-;36640:2;36696:1;36693;36689:9;36684:14;;36562:142;;;;:::o;36710:180::-;36758:77;36755:1;36748:88;36855:4;36852:1;36845:15;36879:4;36876:1;36869:15;36896:180;36944:77;36941:1;36934:88;37041:4;37038:1;37031:15;37065:4;37062:1;37055:15;37082:180;37130:77;37127:1;37120:88;37227:4;37224:1;37217:15;37251:4;37248:1;37241:15;37268:180;37316:77;37313:1;37306:88;37413:4;37410:1;37403:15;37437:4;37434:1;37427:15;37454:180;37502:77;37499:1;37492:88;37599:4;37596:1;37589:15;37623:4;37620:1;37613:15;37640:117;37749:1;37746;37739:12;37763:117;37872:1;37869;37862:12;37886:117;37995:1;37992;37985:12;38009:117;38118:1;38115;38108:12;38132:102;38173:6;38224:2;38220:7;38215:2;38208:5;38204:14;38200:28;38190:38;;38180:54;;;:::o;38240:237::-;38380:34;38376:1;38368:6;38364:14;38357:58;38449:20;38444:2;38436:6;38432:15;38425:45;38346:131;:::o;38483:226::-;38623:34;38619:1;38611:6;38607:14;38600:58;38692:9;38687:2;38679:6;38675:15;38668:34;38589:120;:::o;38715:225::-;38855:34;38851:1;38843:6;38839:14;38832:58;38924:8;38919:2;38911:6;38907:15;38900:33;38821:119;:::o;38946:242::-;39086:34;39082:1;39074:6;39070:14;39063:58;39155:25;39150:2;39142:6;39138:15;39131:50;39052:136;:::o;39194:178::-;39334:30;39330:1;39322:6;39318:14;39311:54;39300:72;:::o;39378:220::-;39518:34;39514:1;39506:6;39502:14;39495:58;39587:3;39582:2;39574:6;39570:15;39563:28;39484:114;:::o;39604:223::-;39744:34;39740:1;39732:6;39728:14;39721:58;39813:6;39808:2;39800:6;39796:15;39789:31;39710:117;:::o;39833:175::-;39973:27;39969:1;39961:6;39957:14;39950:51;39939:69;:::o;40014:231::-;40154:34;40150:1;40142:6;40138:14;40131:58;40223:14;40218:2;40210:6;40206:15;40199:39;40120:125;:::o;40251:243::-;40391:34;40387:1;40379:6;40375:14;40368:58;40460:26;40455:2;40447:6;40443:15;40436:51;40357:137;:::o;40500:229::-;40640:34;40636:1;40628:6;40624:14;40617:58;40709:12;40704:2;40696:6;40692:15;40685:37;40606:123;:::o;40735:228::-;40875:34;40871:1;40863:6;40859:14;40852:58;40944:11;40939:2;40931:6;40927:15;40920:36;40841:122;:::o;40969:233::-;41109:34;41105:1;41097:6;41093:14;41086:58;41178:16;41173:2;41165:6;41161:15;41154:41;41075:127;:::o;41208:182::-;41348:34;41344:1;41336:6;41332:14;41325:58;41314:76;:::o;41396:236::-;41536:34;41532:1;41524:6;41520:14;41513:58;41605:19;41600:2;41592:6;41588:15;41581:44;41502:130;:::o;41638:231::-;41778:34;41774:1;41766:6;41762:14;41755:58;41847:14;41842:2;41834:6;41830:15;41823:39;41744:125;:::o;41875:182::-;42015:34;42011:1;42003:6;41999:14;41992:58;41981:76;:::o;42063:228::-;42203:34;42199:1;42191:6;42187:14;42180:58;42272:11;42267:2;42259:6;42255:15;42248:36;42169:122;:::o;42297:234::-;42437:34;42433:1;42425:6;42421:14;42414:58;42506:17;42501:2;42493:6;42489:15;42482:42;42403:128;:::o;42537:220::-;42677:34;42673:1;42665:6;42661:14;42654:58;42746:3;42741:2;42733:6;42729:15;42722:28;42643:114;:::o;42763:182::-;42903:34;42899:1;42891:6;42887:14;42880:58;42869:76;:::o;42951:236::-;43091:34;43087:1;43079:6;43075:14;43068:58;43160:19;43155:2;43147:6;43143:15;43136:44;43057:130;:::o;43193:233::-;43333:34;43329:1;43321:6;43317:14;43310:58;43402:16;43397:2;43389:6;43385:15;43378:41;43299:127;:::o;43432:179::-;43572:31;43568:1;43560:6;43556:14;43549:55;43538:73;:::o;43617:235::-;43757:34;43753:1;43745:6;43741:14;43734:58;43826:18;43821:2;43813:6;43809:15;43802:43;43723:129;:::o;43858:226::-;43998:34;43994:1;43986:6;43982:14;43975:58;44067:9;44062:2;44054:6;44050:15;44043:34;43964:120;:::o;44090:122::-;44163:24;44181:5;44163:24;:::i;:::-;44156:5;44153:35;44143:2;;44202:1;44199;44192:12;44143:2;44133:79;:::o;44218:116::-;44288:21;44303:5;44288:21;:::i;:::-;44281:5;44278:32;44268:2;;44324:1;44321;44314:12;44268:2;44258:76;:::o;44340:120::-;44412:23;44429:5;44412:23;:::i;:::-;44405:5;44402:34;44392:2;;44450:1;44447;44440:12;44392:2;44382:78;:::o;44466:122::-;44539:24;44557:5;44539:24;:::i;:::-;44532:5;44529:35;44519:2;;44578:1;44575;44568:12;44519:2;44509:79;:::o
Swarm Source
ipfs://8c26d5d134b1c7b45df4bbf3860156f5d9750c849f111b4917ff2ae673160460
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.