ERC-721
Overview
Max Total Supply
1,000 BAE
Holders
515
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 BAELoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BaeCafe
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-26 */ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer( address indexed from, address indexed to, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval( address indexed owner, address indexed approved, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}( data ); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require( owner != address(0), "ERC721: balance query for the zero address" ); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require( owner != address(0), "ERC721: owner query for nonexistent token" ); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require( _exists(tokenId), "ERC721: approved query for nonexistent token" ); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require( _exists(tokenId), "ERC721: operator query for nonexistent token" ); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require( ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner" ); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received( _msgSender(), from, tokenId, _data ) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert( "ERC721: transfer to non ERC721Receiver implementer" ); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } pragma solidity ^0.8.0; contract BaeCafe is ERC721, Ownable { using Counters for Counters.Counter; uint256 public immutable MAX_HANA = 3069; uint256 public constant TOTAL_RARES = 5; uint256 public constant totalWhitelistMint = 2905; uint256 public constant totalTeamMint = 159; uint256 public constant maxBaePurchase = 4; uint256 public constant baePrice = 80080000000000000; //0.08008 ETH bytes32 public merkleRoot; string public baseURI; bool public saleIsActive = false; uint256 public countTeamMint = 0; Counters.Counter public countMintedWhitelist; Counters.Counter public countRareMint; Counters.Counter private _tokenIds; mapping(address => uint256) private MINTED_WHITELIST; address private openSeaProxyRegistryAddress; constructor( string memory name_, string memory symbol_, bytes32 merkleRoot_, string memory baseURI_, address openSeaProxyRegistryAddress_ ) Ownable() ERC721(name_, symbol_) { merkleRoot = merkleRoot_; baseURI = baseURI_; openSeaProxyRegistryAddress = openSeaProxyRegistryAddress_; } /** * Function to withdraw */ function withdraw() public onlyOwner { Address.sendValue(payable(msg.sender), address(this).balance); } /** * Function return total supply */ function totalSupply() external view returns (uint256) { return _tokenIds.current() + countRareMint.current(); } /** * Function to set MerkleRoot */ function setMerkleRoot(bytes32 merkleRoot_) public onlyOwner { merkleRoot = merkleRoot_; } /* * Pause sale if active, make active if paused */ function flipSaleState() public onlyOwner { saleIsActive = !saleIsActive; } /** * Function to set the base URI for all token IDs. */ function setBaseURI(string memory newURI) public onlyOwner { baseURI = newURI; } /** * Set some Baes aside */ function teamMint(address to, uint256 amountToMint) public onlyOwner { require( _tokenIds.current() + amountToMint <= MAX_HANA - TOTAL_RARES, "Exceed max supply of Baes" ); require( countTeamMint + amountToMint <= totalTeamMint, "Exceed max TeamMint" ); countTeamMint += amountToMint; for (uint256 i = 1; i <= amountToMint; i++) { _mintNFT(to); } } /** * Manually mint 1/1 rares afterward. */ function rareMint(address to) public onlyOwner { require(countRareMint.current() < TOTAL_RARES, "Exceed max rareMint"); countRareMint.increment(); _mint(to, MAX_HANA - countRareMint.current() + 1); } /** * Get total minted of an address */ function mintedOf(address minter) public view virtual returns (uint256) { return MINTED_WHITELIST[minter]; } /** * Mints Baes */ function mintWhitelist( uint256 availableToMint, uint256 amountToMint, bytes32[] calldata merkleProof ) public payable { require(saleIsActive, "Sale must be active to mint Bae"); require( MINTED_WHITELIST[msg.sender] + amountToMint <= maxBaePurchase && MINTED_WHITELIST[msg.sender] + amountToMint <= availableToMint && countMintedWhitelist.current() + amountToMint <= totalWhitelistMint, "Trying to mint too many" ); require( baePrice * amountToMint <= msg.value, "Ether value sent is not correct" ); require( _tokenIds.current() + amountToMint <= MAX_HANA - TOTAL_RARES, "Purchase would exceed max supply of Baes" ); // Verify the merkle proof. bytes32 node = keccak256(abi.encodePacked(msg.sender, availableToMint)); require( MerkleProof.verify(merkleProof, merkleRoot, node), "Invalid Merkle Proof." ); MINTED_WHITELIST[msg.sender] += amountToMint; for (uint256 i = 1; i <= amountToMint; i++) { countMintedWhitelist.increment(); _mintNFT(msg.sender); } } function _mintNFT(address to) internal { uint256 newTokenId = _tokenIds.current() + 1; require( newTokenId <= MAX_HANA - TOTAL_RARES, "Exceed max supply of Baes" ); _tokenIds.increment(); _mint(to, newTokenId); } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } /** * @dev Override isApprovedForAll to allowlist user's OpenSea proxy accounts to enable gas-less listings. */ function isApprovedForAll(address owner, address operator) public view override returns (bool) { // Get a reference to OpenSea's proxy registry contract by instantiating // the contract using the already existing address. ProxyRegistry proxyRegistry = ProxyRegistry( openSeaProxyRegistryAddress ); if (address(proxyRegistry.proxies(owner)) == operator) { return true; } return super.isApprovedForAll(owner, operator); } } // These contract definitions are used to create a reference to the OpenSea // ProxyRegistry contract by using the registry's address (see isApprovedForAll). contract OwnableDelegateProxy { } contract ProxyRegistry { mapping(address => OwnableDelegateProxy) public proxies; }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"bytes32","name":"merkleRoot_","type":"bytes32"},{"internalType":"string","name":"baseURI_","type":"string"},{"internalType":"address","name":"openSeaProxyRegistryAddress_","type":"address"}],"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":[],"name":"MAX_HANA","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOTAL_RARES","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"baePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"countMintedWhitelist","outputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"countRareMint","outputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"countTeamMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipSaleState","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":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBaePurchase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"availableToMint","type":"uint256"},{"internalType":"uint256","name":"amountToMint","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"mintWhitelist","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"minter","type":"address"}],"name":"mintedOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"rareMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"merkleRoot_","type":"bytes32"}],"name":"setMerkleRoot","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":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amountToMint","type":"uint256"}],"name":"teamMint","outputs":[],"stateMutability":"nonpayable","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":[],"name":"totalTeamMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalWhitelistMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a0604052610bfd6080908152506000600960006101000a81548160ff0219169083151502179055506000600a553480156200003a57600080fd5b5060405162004c9738038062004c97833981810160405281019062000060919062000340565b848481600090805190602001906200007a929190620001f0565b50806001908051906020019062000093929190620001f0565b505050620000b6620000aa6200012260201b60201c565b6200012a60201b60201c565b826007819055508160089080519060200190620000d5929190620001f0565b5080600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050620005ef565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001fe90620004e0565b90600052602060002090601f0160209004810192826200022257600085556200026e565b82601f106200023d57805160ff19168380011785556200026e565b828001600101855582156200026e579182015b828111156200026d57825182559160200191906001019062000250565b5b5090506200027d919062000281565b5090565b5b808211156200029c57600081600090555060010162000282565b5090565b6000620002b7620002b18462000436565b6200040d565b905082815260208101848484011115620002d057600080fd5b620002dd848285620004aa565b509392505050565b600081519050620002f681620005bb565b92915050565b6000815190506200030d81620005d5565b92915050565b600082601f8301126200032557600080fd5b815162000337848260208601620002a0565b91505092915050565b600080600080600060a086880312156200035957600080fd5b600086015167ffffffffffffffff8111156200037457600080fd5b620003828882890162000313565b955050602086015167ffffffffffffffff811115620003a057600080fd5b620003ae8882890162000313565b9450506040620003c188828901620002fc565b935050606086015167ffffffffffffffff811115620003df57600080fd5b620003ed8882890162000313565b92505060806200040088828901620002e5565b9150509295509295909350565b6000620004196200042c565b905062000427828262000516565b919050565b6000604051905090565b600067ffffffffffffffff8211156200045457620004536200057b565b5b6200045f82620005aa565b9050602081019050919050565b600062000479826200048a565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b83811015620004ca578082015181840152602081019050620004ad565b83811115620004da576000848401525b50505050565b60006002820490506001821680620004f957607f821691505b6020821081141562000510576200050f6200054c565b5b50919050565b6200052182620005aa565b810181811067ffffffffffffffff821117156200054357620005426200057b565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b620005c6816200046c565b8114620005d257600080fd5b50565b620005e08162000480565b8114620005ec57600080fd5b50565b6080516146706200062760003960008181610c70015281816113cd015281816115fc015281816118f301526125e101526146706000f3fe60806040526004361061021a5760003560e01c80636f4684e611610123578063c58d03b0116100ab578063e985e9c51161006f578063e985e9c51461079d578063eb8d2444146107da578063ee49382414610805578063f2fde38b14610821578063f83d636d1461084a5761021a565b8063c58d03b0146106b4578063c87b56dd146106df578063d5c7a1b51461071c578063d884697114610747578063df18b2bb146107725761021a565b80638da5cb5b116100f25780638da5cb5b146105e357806395d89b411461060e578063a22cb46514610639578063add5a4fa14610662578063b88d4fde1461068b5761021a565b80636f4684e61461053b57806370a0823114610566578063715018a6146105a35780637cb64759146105ba5761021a565b806334918dfd116101a657806355f804b31161017557806355f804b314610442578063617692dd1461046b5780636352211e146104a85780636b97fcf4146104e55780636c0360eb146105105761021a565b806334918dfd146103c05780633ccfd60b146103d757806342842e0e146103ee5780634c0cd78d146104175761021a565b80630a99285e116101ed5780630a99285e146102ed5780631766b9cf1461031857806318160ddd1461034157806323b872dd1461036c5780632eb4a7ab146103955761021a565b806301ffc9a71461021f57806306fdde031461025c578063081812fc14610287578063095ea7b3146102c4575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190613040565b610875565b604051610253919061371b565b60405180910390f35b34801561026857600080fd5b50610271610957565b60405161027e9190613751565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a991906130fc565b6109e9565b6040516102bb91906136b4565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e69190612fdb565b610a6e565b005b3480156102f957600080fd5b50610302610b86565b60405161030f9190613ab3565b60405180910390f35b34801561032457600080fd5b5061033f600480360381019061033a9190612e70565b610b8c565b005b34801561034d57600080fd5b50610356610cab565b6040516103639190613ab3565b60405180910390f35b34801561037857600080fd5b50610393600480360381019061038e9190612ed5565b610cd0565b005b3480156103a157600080fd5b506103aa610d30565b6040516103b79190613736565b60405180910390f35b3480156103cc57600080fd5b506103d5610d36565b005b3480156103e357600080fd5b506103ec610dde565b005b3480156103fa57600080fd5b5061041560048036038101906104109190612ed5565b610e66565b005b34801561042357600080fd5b5061042c610e86565b6040516104399190613ab3565b60405180910390f35b34801561044e57600080fd5b50610469600480360381019061046491906130bb565b610e8c565b005b34801561047757600080fd5b50610492600480360381019061048d9190612e70565b610f22565b60405161049f9190613ab3565b60405180910390f35b3480156104b457600080fd5b506104cf60048036038101906104ca91906130fc565b610f6b565b6040516104dc91906136b4565b60405180910390f35b3480156104f157600080fd5b506104fa61101d565b6040516105079190613ab3565b60405180910390f35b34801561051c57600080fd5b50610525611022565b6040516105329190613751565b60405180910390f35b34801561054757600080fd5b506105506110b0565b60405161055d9190613ab3565b60405180910390f35b34801561057257600080fd5b5061058d60048036038101906105889190612e70565b6110b5565b60405161059a9190613ab3565b60405180910390f35b3480156105af57600080fd5b506105b861116d565b005b3480156105c657600080fd5b506105e160048036038101906105dc9190613017565b6111f5565b005b3480156105ef57600080fd5b506105f861127b565b60405161060591906136b4565b60405180910390f35b34801561061a57600080fd5b506106236112a5565b6040516106309190613751565b60405180910390f35b34801561064557600080fd5b50610660600480360381019061065b9190612f9f565b611337565b005b34801561066e57600080fd5b5061068960048036038101906106849190612fdb565b61134d565b005b34801561069757600080fd5b506106b260048036038101906106ad9190612f24565b6114e5565b005b3480156106c057600080fd5b506106c9611547565b6040516106d69190613ab3565b60405180910390f35b3480156106eb57600080fd5b50610706600480360381019061070191906130fc565b611553565b6040516107139190613751565b60405180910390f35b34801561072857600080fd5b506107316115fa565b60405161073e9190613ab3565b60405180910390f35b34801561075357600080fd5b5061075c61161e565b6040516107699190613ab3565b60405180910390f35b34801561077e57600080fd5b5061078761162a565b6040516107949190613ab3565b60405180910390f35b3480156107a957600080fd5b506107c460048036038101906107bf9190612e99565b61162f565b6040516107d1919061371b565b60405180910390f35b3480156107e657600080fd5b506107ef611731565b6040516107fc919061371b565b60405180910390f35b61081f600480360381019061081a9190613125565b611744565b005b34801561082d57600080fd5b5061084860048036038101906108439190612e70565b611abe565b005b34801561085657600080fd5b5061085f611bb6565b60405161086c9190613ab3565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061094057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610950575061094f82611bc2565b5b9050919050565b60606000805461096690613d8a565b80601f016020809104026020016040519081016040528092919081815260200182805461099290613d8a565b80156109df5780601f106109b4576101008083540402835291602001916109df565b820191906000526020600020905b8154815290600101906020018083116109c257829003601f168201915b5050505050905090565b60006109f482611c2c565b610a33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2a906139f3565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a7982610f6b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae190613a53565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b09611c98565b73ffffffffffffffffffffffffffffffffffffffff161480610b385750610b3781610b32611c98565b61162f565b5b610b77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6e90613953565b60405180910390fd5b610b818383611ca0565b505050565b600a5481565b610b94611c98565b73ffffffffffffffffffffffffffffffffffffffff16610bb261127b565b73ffffffffffffffffffffffffffffffffffffffff1614610c08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bff90613a13565b60405180910390fd5b6005610c14600c611d59565b10610c54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4b90613933565b60405180910390fd5b610c5e600c611d67565b610ca8816001610c6e600c611d59565b7f0000000000000000000000000000000000000000000000000000000000000000610c999190613c84565b610ca39190613ba3565b611d7d565b50565b6000610cb7600c611d59565b610cc1600d611d59565b610ccb9190613ba3565b905090565b610ce1610cdb611c98565b82611f57565b610d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1790613a73565b60405180910390fd5b610d2b838383612035565b505050565b60075481565b610d3e611c98565b73ffffffffffffffffffffffffffffffffffffffff16610d5c61127b565b73ffffffffffffffffffffffffffffffffffffffff1614610db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da990613a13565b60405180910390fd5b600960009054906101000a900460ff1615600960006101000a81548160ff021916908315150217905550565b610de6611c98565b73ffffffffffffffffffffffffffffffffffffffff16610e0461127b565b73ffffffffffffffffffffffffffffffffffffffff1614610e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5190613a13565b60405180910390fd5b610e64334761229c565b565b610e81838383604051806020016040528060008152506114e5565b505050565b610b5981565b610e94611c98565b73ffffffffffffffffffffffffffffffffffffffff16610eb261127b565b73ffffffffffffffffffffffffffffffffffffffff1614610f08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eff90613a13565b60405180910390fd5b8060089080519060200190610f1e929190612c20565b5050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100b90613993565b60405180910390fd5b80915050919050565b600481565b6008805461102f90613d8a565b80601f016020809104026020016040519081016040528092919081815260200182805461105b90613d8a565b80156110a85780601f1061107d576101008083540402835291602001916110a8565b820191906000526020600020905b81548152906001019060200180831161108b57829003601f168201915b505050505081565b600581565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111d90613973565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611175611c98565b73ffffffffffffffffffffffffffffffffffffffff1661119361127b565b73ffffffffffffffffffffffffffffffffffffffff16146111e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e090613a13565b60405180910390fd5b6111f36000612390565b565b6111fd611c98565b73ffffffffffffffffffffffffffffffffffffffff1661121b61127b565b73ffffffffffffffffffffffffffffffffffffffff1614611271576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126890613a13565b60405180910390fd5b8060078190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546112b490613d8a565b80601f01602080910402602001604051908101604052809291908181526020018280546112e090613d8a565b801561132d5780601f106113025761010080835404028352916020019161132d565b820191906000526020600020905b81548152906001019060200180831161131057829003601f168201915b5050505050905090565b611349611342611c98565b8383612456565b5050565b611355611c98565b73ffffffffffffffffffffffffffffffffffffffff1661137361127b565b73ffffffffffffffffffffffffffffffffffffffff16146113c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c090613a13565b60405180910390fd5b60057f00000000000000000000000000000000000000000000000000000000000000006113f69190613c84565b81611401600d611d59565b61140b9190613ba3565b111561144c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611443906139d3565b60405180910390fd5b609f81600a5461145c9190613ba3565b111561149d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149490613833565b60405180910390fd5b80600a60008282546114af9190613ba3565b925050819055506000600190505b8181116114e0576114cd836125c3565b80806114d890613ded565b9150506114bd565b505050565b6114f66114f0611c98565b83611f57565b611535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152c90613a73565b60405180910390fd5b61154184848484612664565b50505050565b600b8060000154905081565b606061155e82611c2c565b61159d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159490613a33565b60405180910390fd5b60006115a76126c0565b905060008151116115c757604051806020016040528060008152506115f2565b806115d184612752565b6040516020016115e292919061367b565b6040516020818303038152906040525b915050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c8060000154905081565b609f81565b600080600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b81526004016116a791906136b4565b60206040518083038186803b1580156116bf57600080fd5b505afa1580156116d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f79190613092565b73ffffffffffffffffffffffffffffffffffffffff16141561171d57600191505061172b565b61172784846128ff565b9150505b92915050565b600960009054906101000a900460ff1681565b600960009054906101000a900460ff16611793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178a906138f3565b60405180910390fd5b600483600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117e09190613ba3565b1115801561183857508383600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118359190613ba3565b11155b801561185a5750610b598361184d600b611d59565b6118579190613ba3565b11155b611899576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189090613a93565b60405180910390fd5b348367011c8055f19d00006118ae9190613c2a565b11156118ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e690613873565b60405180910390fd5b60057f000000000000000000000000000000000000000000000000000000000000000061191c9190613c84565b83611927600d611d59565b6119319190613ba3565b1115611972576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196990613893565b60405180910390fd5b6000338560405160200161198792919061364f565b6040516020818303038152906040528051906020012090506119ed838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060075483612993565b611a2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2390613853565b60405180910390fd5b83600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a7b9190613ba3565b925050819055506000600190505b848111611ab657611a9a600b611d67565b611aa3336125c3565b8080611aae90613ded565b915050611a89565b505050505050565b611ac6611c98565b73ffffffffffffffffffffffffffffffffffffffff16611ae461127b565b73ffffffffffffffffffffffffffffffffffffffff1614611b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3190613a13565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba190613793565b60405180910390fd5b611bb381612390565b50565b67011c8055f19d000081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611d1383610f6b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6001816000016000828254019250508190555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de4906139b3565b60405180910390fd5b611df681611c2c565b15611e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2d906137d3565b60405180910390fd5b611e42600083836129aa565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e929190613ba3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611f53600083836129af565b5050565b6000611f6282611c2c565b611fa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9890613913565b60405180910390fd5b6000611fac83610f6b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061201b57508373ffffffffffffffffffffffffffffffffffffffff16612003846109e9565b73ffffffffffffffffffffffffffffffffffffffff16145b8061202c575061202b818561162f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661205582610f6b565b73ffffffffffffffffffffffffffffffffffffffff16146120ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a2906137b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561211b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612112906137f3565b60405180910390fd5b6121268383836129aa565b612131600082611ca0565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121819190613c84565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121d89190613ba3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46122978383836129af565b505050565b804710156122df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d6906138d3565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516123059061369f565b60006040518083038185875af1925050503d8060008114612342576040519150601f19603f3d011682016040523d82523d6000602084013e612347565b606091505b505090508061238b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612382906138b3565b60405180910390fd5b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bc90613813565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516125b6919061371b565b60405180910390a3505050565b600060016125d1600d611d59565b6125db9190613ba3565b905060057f000000000000000000000000000000000000000000000000000000000000000061260a9190613c84565b81111561264c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612643906139d3565b60405180910390fd5b612656600d611d67565b6126608282611d7d565b5050565b61266f848484612035565b61267b848484846129b4565b6126ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b190613773565b60405180910390fd5b50505050565b6060600880546126cf90613d8a565b80601f01602080910402602001604051908101604052809291908181526020018280546126fb90613d8a565b80156127485780601f1061271d57610100808354040283529160200191612748565b820191906000526020600020905b81548152906001019060200180831161272b57829003601f168201915b5050505050905090565b6060600082141561279a576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506128fa565b600082905060005b600082146127cc5780806127b590613ded565b915050600a826127c59190613bf9565b91506127a2565b60008167ffffffffffffffff81111561280e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156128405781602001600182028036833780820191505090505b5090505b600085146128f3576001826128599190613c84565b9150600a856128689190613e64565b60306128749190613ba3565b60f81b8183815181106128b0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128ec9190613bf9565b9450612844565b8093505050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000826129a08584612b4b565b1490509392505050565b505050565b505050565b60006129d58473ffffffffffffffffffffffffffffffffffffffff16612be6565b15612b3e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026129fe611c98565b8786866040518563ffffffff1660e01b8152600401612a2094939291906136cf565b602060405180830381600087803b158015612a3a57600080fd5b505af1925050508015612a6b57506040513d601f19601f82011682018060405250810190612a689190613069565b60015b612aee573d8060008114612a9b576040519150601f19603f3d011682016040523d82523d6000602084013e612aa0565b606091505b50600081511415612ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612add90613773565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b43565b600190505b949350505050565b60008082905060005b8451811015612bdb576000858281518110612b98577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050808311612bba57612bb38382612c09565b9250612bc7565b612bc48184612c09565b92505b508080612bd390613ded565b915050612b54565b508091505092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082600052816020526040600020905092915050565b828054612c2c90613d8a565b90600052602060002090601f016020900481019282612c4e5760008555612c95565b82601f10612c6757805160ff1916838001178555612c95565b82800160010185558215612c95579182015b82811115612c94578251825591602001919060010190612c79565b5b509050612ca29190612ca6565b5090565b5b80821115612cbf576000816000905550600101612ca7565b5090565b6000612cd6612cd184613af3565b613ace565b905082815260208101848484011115612cee57600080fd5b612cf9848285613d48565b509392505050565b6000612d14612d0f84613b24565b613ace565b905082815260208101848484011115612d2c57600080fd5b612d37848285613d48565b509392505050565b600081359050612d4e816145b0565b92915050565b60008083601f840112612d6657600080fd5b8235905067ffffffffffffffff811115612d7f57600080fd5b602083019150836020820283011115612d9757600080fd5b9250929050565b600081359050612dad816145c7565b92915050565b600081359050612dc2816145de565b92915050565b600081359050612dd7816145f5565b92915050565b600081519050612dec816145f5565b92915050565b600082601f830112612e0357600080fd5b8135612e13848260208601612cc3565b91505092915050565b600081519050612e2b8161460c565b92915050565b600082601f830112612e4257600080fd5b8135612e52848260208601612d01565b91505092915050565b600081359050612e6a81614623565b92915050565b600060208284031215612e8257600080fd5b6000612e9084828501612d3f565b91505092915050565b60008060408385031215612eac57600080fd5b6000612eba85828601612d3f565b9250506020612ecb85828601612d3f565b9150509250929050565b600080600060608486031215612eea57600080fd5b6000612ef886828701612d3f565b9350506020612f0986828701612d3f565b9250506040612f1a86828701612e5b565b9150509250925092565b60008060008060808587031215612f3a57600080fd5b6000612f4887828801612d3f565b9450506020612f5987828801612d3f565b9350506040612f6a87828801612e5b565b925050606085013567ffffffffffffffff811115612f8757600080fd5b612f9387828801612df2565b91505092959194509250565b60008060408385031215612fb257600080fd5b6000612fc085828601612d3f565b9250506020612fd185828601612d9e565b9150509250929050565b60008060408385031215612fee57600080fd5b6000612ffc85828601612d3f565b925050602061300d85828601612e5b565b9150509250929050565b60006020828403121561302957600080fd5b600061303784828501612db3565b91505092915050565b60006020828403121561305257600080fd5b600061306084828501612dc8565b91505092915050565b60006020828403121561307b57600080fd5b600061308984828501612ddd565b91505092915050565b6000602082840312156130a457600080fd5b60006130b284828501612e1c565b91505092915050565b6000602082840312156130cd57600080fd5b600082013567ffffffffffffffff8111156130e757600080fd5b6130f384828501612e31565b91505092915050565b60006020828403121561310e57600080fd5b600061311c84828501612e5b565b91505092915050565b6000806000806060858703121561313b57600080fd5b600061314987828801612e5b565b945050602061315a87828801612e5b565b935050604085013567ffffffffffffffff81111561317757600080fd5b61318387828801612d54565b925092505092959194509250565b61319a81613cb8565b82525050565b6131b16131ac82613cb8565b613e36565b82525050565b6131c081613cca565b82525050565b6131cf81613cd6565b82525050565b60006131e082613b55565b6131ea8185613b6b565b93506131fa818560208601613d57565b61320381613f51565b840191505092915050565b600061321982613b60565b6132238185613b87565b9350613233818560208601613d57565b61323c81613f51565b840191505092915050565b600061325282613b60565b61325c8185613b98565b935061326c818560208601613d57565b80840191505092915050565b6000613285603283613b87565b915061329082613f6f565b604082019050919050565b60006132a8602683613b87565b91506132b382613fbe565b604082019050919050565b60006132cb602583613b87565b91506132d68261400d565b604082019050919050565b60006132ee601c83613b87565b91506132f98261405c565b602082019050919050565b6000613311602483613b87565b915061331c82614085565b604082019050919050565b6000613334601983613b87565b915061333f826140d4565b602082019050919050565b6000613357601383613b87565b9150613362826140fd565b602082019050919050565b600061337a601583613b87565b915061338582614126565b602082019050919050565b600061339d601f83613b87565b91506133a88261414f565b602082019050919050565b60006133c0602883613b87565b91506133cb82614178565b604082019050919050565b60006133e3603a83613b87565b91506133ee826141c7565b604082019050919050565b6000613406601d83613b87565b915061341182614216565b602082019050919050565b6000613429601f83613b87565b91506134348261423f565b602082019050919050565b600061344c602c83613b87565b915061345782614268565b604082019050919050565b600061346f601383613b87565b915061347a826142b7565b602082019050919050565b6000613492603883613b87565b915061349d826142e0565b604082019050919050565b60006134b5602a83613b87565b91506134c08261432f565b604082019050919050565b60006134d8602983613b87565b91506134e38261437e565b604082019050919050565b60006134fb602083613b87565b9150613506826143cd565b602082019050919050565b600061351e601983613b87565b9150613529826143f6565b602082019050919050565b6000613541602c83613b87565b915061354c8261441f565b604082019050919050565b6000613564602083613b87565b915061356f8261446e565b602082019050919050565b6000613587602f83613b87565b915061359282614497565b604082019050919050565b60006135aa602183613b87565b91506135b5826144e6565b604082019050919050565b60006135cd600083613b7c565b91506135d882614535565b600082019050919050565b60006135f0603183613b87565b91506135fb82614538565b604082019050919050565b6000613613601783613b87565b915061361e82614587565b602082019050919050565b61363281613d3e565b82525050565b61364961364482613d3e565b613e5a565b82525050565b600061365b82856131a0565b60148201915061366b8284613638565b6020820191508190509392505050565b60006136878285613247565b91506136938284613247565b91508190509392505050565b60006136aa826135c0565b9150819050919050565b60006020820190506136c96000830184613191565b92915050565b60006080820190506136e46000830187613191565b6136f16020830186613191565b6136fe6040830185613629565b818103606083015261371081846131d5565b905095945050505050565b600060208201905061373060008301846131b7565b92915050565b600060208201905061374b60008301846131c6565b92915050565b6000602082019050818103600083015261376b818461320e565b905092915050565b6000602082019050818103600083015261378c81613278565b9050919050565b600060208201905081810360008301526137ac8161329b565b9050919050565b600060208201905081810360008301526137cc816132be565b9050919050565b600060208201905081810360008301526137ec816132e1565b9050919050565b6000602082019050818103600083015261380c81613304565b9050919050565b6000602082019050818103600083015261382c81613327565b9050919050565b6000602082019050818103600083015261384c8161334a565b9050919050565b6000602082019050818103600083015261386c8161336d565b9050919050565b6000602082019050818103600083015261388c81613390565b9050919050565b600060208201905081810360008301526138ac816133b3565b9050919050565b600060208201905081810360008301526138cc816133d6565b9050919050565b600060208201905081810360008301526138ec816133f9565b9050919050565b6000602082019050818103600083015261390c8161341c565b9050919050565b6000602082019050818103600083015261392c8161343f565b9050919050565b6000602082019050818103600083015261394c81613462565b9050919050565b6000602082019050818103600083015261396c81613485565b9050919050565b6000602082019050818103600083015261398c816134a8565b9050919050565b600060208201905081810360008301526139ac816134cb565b9050919050565b600060208201905081810360008301526139cc816134ee565b9050919050565b600060208201905081810360008301526139ec81613511565b9050919050565b60006020820190508181036000830152613a0c81613534565b9050919050565b60006020820190508181036000830152613a2c81613557565b9050919050565b60006020820190508181036000830152613a4c8161357a565b9050919050565b60006020820190508181036000830152613a6c8161359d565b9050919050565b60006020820190508181036000830152613a8c816135e3565b9050919050565b60006020820190508181036000830152613aac81613606565b9050919050565b6000602082019050613ac86000830184613629565b92915050565b6000613ad8613ae9565b9050613ae48282613dbc565b919050565b6000604051905090565b600067ffffffffffffffff821115613b0e57613b0d613f22565b5b613b1782613f51565b9050602081019050919050565b600067ffffffffffffffff821115613b3f57613b3e613f22565b5b613b4882613f51565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613bae82613d3e565b9150613bb983613d3e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613bee57613bed613e95565b5b828201905092915050565b6000613c0482613d3e565b9150613c0f83613d3e565b925082613c1f57613c1e613ec4565b5b828204905092915050565b6000613c3582613d3e565b9150613c4083613d3e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c7957613c78613e95565b5b828202905092915050565b6000613c8f82613d3e565b9150613c9a83613d3e565b925082821015613cad57613cac613e95565b5b828203905092915050565b6000613cc382613d1e565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000613d1782613cb8565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613d75578082015181840152602081019050613d5a565b83811115613d84576000848401525b50505050565b60006002820490506001821680613da257607f821691505b60208210811415613db657613db5613ef3565b5b50919050565b613dc582613f51565b810181811067ffffffffffffffff82111715613de457613de3613f22565b5b80604052505050565b6000613df882613d3e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613e2b57613e2a613e95565b5b600182019050919050565b6000613e4182613e48565b9050919050565b6000613e5382613f62565b9050919050565b6000819050919050565b6000613e6f82613d3e565b9150613e7a83613d3e565b925082613e8a57613e89613ec4565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f457863656564206d6178205465616d4d696e7400000000000000000000000000600082015250565b7f496e76616c6964204d65726b6c652050726f6f662e0000000000000000000000600082015250565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f662042616573000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f53616c65206d7573742062652061637469766520746f206d696e742042616500600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f457863656564206d617820726172654d696e7400000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f457863656564206d617820737570706c79206f66204261657300000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f547279696e6720746f206d696e7420746f6f206d616e79000000000000000000600082015250565b6145b981613cb8565b81146145c457600080fd5b50565b6145d081613cca565b81146145db57600080fd5b50565b6145e781613cd6565b81146145f257600080fd5b50565b6145fe81613ce0565b811461460957600080fd5b50565b61461581613d0c565b811461462057600080fd5b50565b61462c81613d3e565b811461463757600080fd5b5056fea264697066735822122072b19dcaecdfa1eada3558428913f85f50c1b44dcf26056d02b192d3da3620aa64736f6c6343000804003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00f2f1cf230db6741ab22f2cfccde9d50ee2f52db798d73b57b8129d9da388b4f0000000000000000000000000000000000000000000000000000000000000120000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c10000000000000000000000000000000000000000000000000000000000000008426165204361666500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034241450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5a5276756b674b4856475536375946663735326b694a55657a7755796b474d5a3362314e3164414d416a4b442f000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061021a5760003560e01c80636f4684e611610123578063c58d03b0116100ab578063e985e9c51161006f578063e985e9c51461079d578063eb8d2444146107da578063ee49382414610805578063f2fde38b14610821578063f83d636d1461084a5761021a565b8063c58d03b0146106b4578063c87b56dd146106df578063d5c7a1b51461071c578063d884697114610747578063df18b2bb146107725761021a565b80638da5cb5b116100f25780638da5cb5b146105e357806395d89b411461060e578063a22cb46514610639578063add5a4fa14610662578063b88d4fde1461068b5761021a565b80636f4684e61461053b57806370a0823114610566578063715018a6146105a35780637cb64759146105ba5761021a565b806334918dfd116101a657806355f804b31161017557806355f804b314610442578063617692dd1461046b5780636352211e146104a85780636b97fcf4146104e55780636c0360eb146105105761021a565b806334918dfd146103c05780633ccfd60b146103d757806342842e0e146103ee5780634c0cd78d146104175761021a565b80630a99285e116101ed5780630a99285e146102ed5780631766b9cf1461031857806318160ddd1461034157806323b872dd1461036c5780632eb4a7ab146103955761021a565b806301ffc9a71461021f57806306fdde031461025c578063081812fc14610287578063095ea7b3146102c4575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190613040565b610875565b604051610253919061371b565b60405180910390f35b34801561026857600080fd5b50610271610957565b60405161027e9190613751565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a991906130fc565b6109e9565b6040516102bb91906136b4565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e69190612fdb565b610a6e565b005b3480156102f957600080fd5b50610302610b86565b60405161030f9190613ab3565b60405180910390f35b34801561032457600080fd5b5061033f600480360381019061033a9190612e70565b610b8c565b005b34801561034d57600080fd5b50610356610cab565b6040516103639190613ab3565b60405180910390f35b34801561037857600080fd5b50610393600480360381019061038e9190612ed5565b610cd0565b005b3480156103a157600080fd5b506103aa610d30565b6040516103b79190613736565b60405180910390f35b3480156103cc57600080fd5b506103d5610d36565b005b3480156103e357600080fd5b506103ec610dde565b005b3480156103fa57600080fd5b5061041560048036038101906104109190612ed5565b610e66565b005b34801561042357600080fd5b5061042c610e86565b6040516104399190613ab3565b60405180910390f35b34801561044e57600080fd5b50610469600480360381019061046491906130bb565b610e8c565b005b34801561047757600080fd5b50610492600480360381019061048d9190612e70565b610f22565b60405161049f9190613ab3565b60405180910390f35b3480156104b457600080fd5b506104cf60048036038101906104ca91906130fc565b610f6b565b6040516104dc91906136b4565b60405180910390f35b3480156104f157600080fd5b506104fa61101d565b6040516105079190613ab3565b60405180910390f35b34801561051c57600080fd5b50610525611022565b6040516105329190613751565b60405180910390f35b34801561054757600080fd5b506105506110b0565b60405161055d9190613ab3565b60405180910390f35b34801561057257600080fd5b5061058d60048036038101906105889190612e70565b6110b5565b60405161059a9190613ab3565b60405180910390f35b3480156105af57600080fd5b506105b861116d565b005b3480156105c657600080fd5b506105e160048036038101906105dc9190613017565b6111f5565b005b3480156105ef57600080fd5b506105f861127b565b60405161060591906136b4565b60405180910390f35b34801561061a57600080fd5b506106236112a5565b6040516106309190613751565b60405180910390f35b34801561064557600080fd5b50610660600480360381019061065b9190612f9f565b611337565b005b34801561066e57600080fd5b5061068960048036038101906106849190612fdb565b61134d565b005b34801561069757600080fd5b506106b260048036038101906106ad9190612f24565b6114e5565b005b3480156106c057600080fd5b506106c9611547565b6040516106d69190613ab3565b60405180910390f35b3480156106eb57600080fd5b50610706600480360381019061070191906130fc565b611553565b6040516107139190613751565b60405180910390f35b34801561072857600080fd5b506107316115fa565b60405161073e9190613ab3565b60405180910390f35b34801561075357600080fd5b5061075c61161e565b6040516107699190613ab3565b60405180910390f35b34801561077e57600080fd5b5061078761162a565b6040516107949190613ab3565b60405180910390f35b3480156107a957600080fd5b506107c460048036038101906107bf9190612e99565b61162f565b6040516107d1919061371b565b60405180910390f35b3480156107e657600080fd5b506107ef611731565b6040516107fc919061371b565b60405180910390f35b61081f600480360381019061081a9190613125565b611744565b005b34801561082d57600080fd5b5061084860048036038101906108439190612e70565b611abe565b005b34801561085657600080fd5b5061085f611bb6565b60405161086c9190613ab3565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061094057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610950575061094f82611bc2565b5b9050919050565b60606000805461096690613d8a565b80601f016020809104026020016040519081016040528092919081815260200182805461099290613d8a565b80156109df5780601f106109b4576101008083540402835291602001916109df565b820191906000526020600020905b8154815290600101906020018083116109c257829003601f168201915b5050505050905090565b60006109f482611c2c565b610a33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2a906139f3565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a7982610f6b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae190613a53565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b09611c98565b73ffffffffffffffffffffffffffffffffffffffff161480610b385750610b3781610b32611c98565b61162f565b5b610b77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6e90613953565b60405180910390fd5b610b818383611ca0565b505050565b600a5481565b610b94611c98565b73ffffffffffffffffffffffffffffffffffffffff16610bb261127b565b73ffffffffffffffffffffffffffffffffffffffff1614610c08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bff90613a13565b60405180910390fd5b6005610c14600c611d59565b10610c54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4b90613933565b60405180910390fd5b610c5e600c611d67565b610ca8816001610c6e600c611d59565b7f0000000000000000000000000000000000000000000000000000000000000bfd610c999190613c84565b610ca39190613ba3565b611d7d565b50565b6000610cb7600c611d59565b610cc1600d611d59565b610ccb9190613ba3565b905090565b610ce1610cdb611c98565b82611f57565b610d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1790613a73565b60405180910390fd5b610d2b838383612035565b505050565b60075481565b610d3e611c98565b73ffffffffffffffffffffffffffffffffffffffff16610d5c61127b565b73ffffffffffffffffffffffffffffffffffffffff1614610db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da990613a13565b60405180910390fd5b600960009054906101000a900460ff1615600960006101000a81548160ff021916908315150217905550565b610de6611c98565b73ffffffffffffffffffffffffffffffffffffffff16610e0461127b565b73ffffffffffffffffffffffffffffffffffffffff1614610e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5190613a13565b60405180910390fd5b610e64334761229c565b565b610e81838383604051806020016040528060008152506114e5565b505050565b610b5981565b610e94611c98565b73ffffffffffffffffffffffffffffffffffffffff16610eb261127b565b73ffffffffffffffffffffffffffffffffffffffff1614610f08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eff90613a13565b60405180910390fd5b8060089080519060200190610f1e929190612c20565b5050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100b90613993565b60405180910390fd5b80915050919050565b600481565b6008805461102f90613d8a565b80601f016020809104026020016040519081016040528092919081815260200182805461105b90613d8a565b80156110a85780601f1061107d576101008083540402835291602001916110a8565b820191906000526020600020905b81548152906001019060200180831161108b57829003601f168201915b505050505081565b600581565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111d90613973565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611175611c98565b73ffffffffffffffffffffffffffffffffffffffff1661119361127b565b73ffffffffffffffffffffffffffffffffffffffff16146111e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e090613a13565b60405180910390fd5b6111f36000612390565b565b6111fd611c98565b73ffffffffffffffffffffffffffffffffffffffff1661121b61127b565b73ffffffffffffffffffffffffffffffffffffffff1614611271576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126890613a13565b60405180910390fd5b8060078190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546112b490613d8a565b80601f01602080910402602001604051908101604052809291908181526020018280546112e090613d8a565b801561132d5780601f106113025761010080835404028352916020019161132d565b820191906000526020600020905b81548152906001019060200180831161131057829003601f168201915b5050505050905090565b611349611342611c98565b8383612456565b5050565b611355611c98565b73ffffffffffffffffffffffffffffffffffffffff1661137361127b565b73ffffffffffffffffffffffffffffffffffffffff16146113c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c090613a13565b60405180910390fd5b60057f0000000000000000000000000000000000000000000000000000000000000bfd6113f69190613c84565b81611401600d611d59565b61140b9190613ba3565b111561144c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611443906139d3565b60405180910390fd5b609f81600a5461145c9190613ba3565b111561149d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149490613833565b60405180910390fd5b80600a60008282546114af9190613ba3565b925050819055506000600190505b8181116114e0576114cd836125c3565b80806114d890613ded565b9150506114bd565b505050565b6114f66114f0611c98565b83611f57565b611535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152c90613a73565b60405180910390fd5b61154184848484612664565b50505050565b600b8060000154905081565b606061155e82611c2c565b61159d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159490613a33565b60405180910390fd5b60006115a76126c0565b905060008151116115c757604051806020016040528060008152506115f2565b806115d184612752565b6040516020016115e292919061367b565b6040516020818303038152906040525b915050919050565b7f0000000000000000000000000000000000000000000000000000000000000bfd81565b600c8060000154905081565b609f81565b600080600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b81526004016116a791906136b4565b60206040518083038186803b1580156116bf57600080fd5b505afa1580156116d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f79190613092565b73ffffffffffffffffffffffffffffffffffffffff16141561171d57600191505061172b565b61172784846128ff565b9150505b92915050565b600960009054906101000a900460ff1681565b600960009054906101000a900460ff16611793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178a906138f3565b60405180910390fd5b600483600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117e09190613ba3565b1115801561183857508383600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118359190613ba3565b11155b801561185a5750610b598361184d600b611d59565b6118579190613ba3565b11155b611899576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189090613a93565b60405180910390fd5b348367011c8055f19d00006118ae9190613c2a565b11156118ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e690613873565b60405180910390fd5b60057f0000000000000000000000000000000000000000000000000000000000000bfd61191c9190613c84565b83611927600d611d59565b6119319190613ba3565b1115611972576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196990613893565b60405180910390fd5b6000338560405160200161198792919061364f565b6040516020818303038152906040528051906020012090506119ed838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060075483612993565b611a2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2390613853565b60405180910390fd5b83600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a7b9190613ba3565b925050819055506000600190505b848111611ab657611a9a600b611d67565b611aa3336125c3565b8080611aae90613ded565b915050611a89565b505050505050565b611ac6611c98565b73ffffffffffffffffffffffffffffffffffffffff16611ae461127b565b73ffffffffffffffffffffffffffffffffffffffff1614611b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3190613a13565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba190613793565b60405180910390fd5b611bb381612390565b50565b67011c8055f19d000081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611d1383610f6b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6001816000016000828254019250508190555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de4906139b3565b60405180910390fd5b611df681611c2c565b15611e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2d906137d3565b60405180910390fd5b611e42600083836129aa565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e929190613ba3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611f53600083836129af565b5050565b6000611f6282611c2c565b611fa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9890613913565b60405180910390fd5b6000611fac83610f6b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061201b57508373ffffffffffffffffffffffffffffffffffffffff16612003846109e9565b73ffffffffffffffffffffffffffffffffffffffff16145b8061202c575061202b818561162f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661205582610f6b565b73ffffffffffffffffffffffffffffffffffffffff16146120ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a2906137b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561211b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612112906137f3565b60405180910390fd5b6121268383836129aa565b612131600082611ca0565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121819190613c84565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121d89190613ba3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46122978383836129af565b505050565b804710156122df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d6906138d3565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516123059061369f565b60006040518083038185875af1925050503d8060008114612342576040519150601f19603f3d011682016040523d82523d6000602084013e612347565b606091505b505090508061238b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612382906138b3565b60405180910390fd5b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bc90613813565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516125b6919061371b565b60405180910390a3505050565b600060016125d1600d611d59565b6125db9190613ba3565b905060057f0000000000000000000000000000000000000000000000000000000000000bfd61260a9190613c84565b81111561264c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612643906139d3565b60405180910390fd5b612656600d611d67565b6126608282611d7d565b5050565b61266f848484612035565b61267b848484846129b4565b6126ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b190613773565b60405180910390fd5b50505050565b6060600880546126cf90613d8a565b80601f01602080910402602001604051908101604052809291908181526020018280546126fb90613d8a565b80156127485780601f1061271d57610100808354040283529160200191612748565b820191906000526020600020905b81548152906001019060200180831161272b57829003601f168201915b5050505050905090565b6060600082141561279a576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506128fa565b600082905060005b600082146127cc5780806127b590613ded565b915050600a826127c59190613bf9565b91506127a2565b60008167ffffffffffffffff81111561280e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156128405781602001600182028036833780820191505090505b5090505b600085146128f3576001826128599190613c84565b9150600a856128689190613e64565b60306128749190613ba3565b60f81b8183815181106128b0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128ec9190613bf9565b9450612844565b8093505050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000826129a08584612b4b565b1490509392505050565b505050565b505050565b60006129d58473ffffffffffffffffffffffffffffffffffffffff16612be6565b15612b3e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026129fe611c98565b8786866040518563ffffffff1660e01b8152600401612a2094939291906136cf565b602060405180830381600087803b158015612a3a57600080fd5b505af1925050508015612a6b57506040513d601f19601f82011682018060405250810190612a689190613069565b60015b612aee573d8060008114612a9b576040519150601f19603f3d011682016040523d82523d6000602084013e612aa0565b606091505b50600081511415612ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612add90613773565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b43565b600190505b949350505050565b60008082905060005b8451811015612bdb576000858281518110612b98577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050808311612bba57612bb38382612c09565b9250612bc7565b612bc48184612c09565b92505b508080612bd390613ded565b915050612b54565b508091505092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082600052816020526040600020905092915050565b828054612c2c90613d8a565b90600052602060002090601f016020900481019282612c4e5760008555612c95565b82601f10612c6757805160ff1916838001178555612c95565b82800160010185558215612c95579182015b82811115612c94578251825591602001919060010190612c79565b5b509050612ca29190612ca6565b5090565b5b80821115612cbf576000816000905550600101612ca7565b5090565b6000612cd6612cd184613af3565b613ace565b905082815260208101848484011115612cee57600080fd5b612cf9848285613d48565b509392505050565b6000612d14612d0f84613b24565b613ace565b905082815260208101848484011115612d2c57600080fd5b612d37848285613d48565b509392505050565b600081359050612d4e816145b0565b92915050565b60008083601f840112612d6657600080fd5b8235905067ffffffffffffffff811115612d7f57600080fd5b602083019150836020820283011115612d9757600080fd5b9250929050565b600081359050612dad816145c7565b92915050565b600081359050612dc2816145de565b92915050565b600081359050612dd7816145f5565b92915050565b600081519050612dec816145f5565b92915050565b600082601f830112612e0357600080fd5b8135612e13848260208601612cc3565b91505092915050565b600081519050612e2b8161460c565b92915050565b600082601f830112612e4257600080fd5b8135612e52848260208601612d01565b91505092915050565b600081359050612e6a81614623565b92915050565b600060208284031215612e8257600080fd5b6000612e9084828501612d3f565b91505092915050565b60008060408385031215612eac57600080fd5b6000612eba85828601612d3f565b9250506020612ecb85828601612d3f565b9150509250929050565b600080600060608486031215612eea57600080fd5b6000612ef886828701612d3f565b9350506020612f0986828701612d3f565b9250506040612f1a86828701612e5b565b9150509250925092565b60008060008060808587031215612f3a57600080fd5b6000612f4887828801612d3f565b9450506020612f5987828801612d3f565b9350506040612f6a87828801612e5b565b925050606085013567ffffffffffffffff811115612f8757600080fd5b612f9387828801612df2565b91505092959194509250565b60008060408385031215612fb257600080fd5b6000612fc085828601612d3f565b9250506020612fd185828601612d9e565b9150509250929050565b60008060408385031215612fee57600080fd5b6000612ffc85828601612d3f565b925050602061300d85828601612e5b565b9150509250929050565b60006020828403121561302957600080fd5b600061303784828501612db3565b91505092915050565b60006020828403121561305257600080fd5b600061306084828501612dc8565b91505092915050565b60006020828403121561307b57600080fd5b600061308984828501612ddd565b91505092915050565b6000602082840312156130a457600080fd5b60006130b284828501612e1c565b91505092915050565b6000602082840312156130cd57600080fd5b600082013567ffffffffffffffff8111156130e757600080fd5b6130f384828501612e31565b91505092915050565b60006020828403121561310e57600080fd5b600061311c84828501612e5b565b91505092915050565b6000806000806060858703121561313b57600080fd5b600061314987828801612e5b565b945050602061315a87828801612e5b565b935050604085013567ffffffffffffffff81111561317757600080fd5b61318387828801612d54565b925092505092959194509250565b61319a81613cb8565b82525050565b6131b16131ac82613cb8565b613e36565b82525050565b6131c081613cca565b82525050565b6131cf81613cd6565b82525050565b60006131e082613b55565b6131ea8185613b6b565b93506131fa818560208601613d57565b61320381613f51565b840191505092915050565b600061321982613b60565b6132238185613b87565b9350613233818560208601613d57565b61323c81613f51565b840191505092915050565b600061325282613b60565b61325c8185613b98565b935061326c818560208601613d57565b80840191505092915050565b6000613285603283613b87565b915061329082613f6f565b604082019050919050565b60006132a8602683613b87565b91506132b382613fbe565b604082019050919050565b60006132cb602583613b87565b91506132d68261400d565b604082019050919050565b60006132ee601c83613b87565b91506132f98261405c565b602082019050919050565b6000613311602483613b87565b915061331c82614085565b604082019050919050565b6000613334601983613b87565b915061333f826140d4565b602082019050919050565b6000613357601383613b87565b9150613362826140fd565b602082019050919050565b600061337a601583613b87565b915061338582614126565b602082019050919050565b600061339d601f83613b87565b91506133a88261414f565b602082019050919050565b60006133c0602883613b87565b91506133cb82614178565b604082019050919050565b60006133e3603a83613b87565b91506133ee826141c7565b604082019050919050565b6000613406601d83613b87565b915061341182614216565b602082019050919050565b6000613429601f83613b87565b91506134348261423f565b602082019050919050565b600061344c602c83613b87565b915061345782614268565b604082019050919050565b600061346f601383613b87565b915061347a826142b7565b602082019050919050565b6000613492603883613b87565b915061349d826142e0565b604082019050919050565b60006134b5602a83613b87565b91506134c08261432f565b604082019050919050565b60006134d8602983613b87565b91506134e38261437e565b604082019050919050565b60006134fb602083613b87565b9150613506826143cd565b602082019050919050565b600061351e601983613b87565b9150613529826143f6565b602082019050919050565b6000613541602c83613b87565b915061354c8261441f565b604082019050919050565b6000613564602083613b87565b915061356f8261446e565b602082019050919050565b6000613587602f83613b87565b915061359282614497565b604082019050919050565b60006135aa602183613b87565b91506135b5826144e6565b604082019050919050565b60006135cd600083613b7c565b91506135d882614535565b600082019050919050565b60006135f0603183613b87565b91506135fb82614538565b604082019050919050565b6000613613601783613b87565b915061361e82614587565b602082019050919050565b61363281613d3e565b82525050565b61364961364482613d3e565b613e5a565b82525050565b600061365b82856131a0565b60148201915061366b8284613638565b6020820191508190509392505050565b60006136878285613247565b91506136938284613247565b91508190509392505050565b60006136aa826135c0565b9150819050919050565b60006020820190506136c96000830184613191565b92915050565b60006080820190506136e46000830187613191565b6136f16020830186613191565b6136fe6040830185613629565b818103606083015261371081846131d5565b905095945050505050565b600060208201905061373060008301846131b7565b92915050565b600060208201905061374b60008301846131c6565b92915050565b6000602082019050818103600083015261376b818461320e565b905092915050565b6000602082019050818103600083015261378c81613278565b9050919050565b600060208201905081810360008301526137ac8161329b565b9050919050565b600060208201905081810360008301526137cc816132be565b9050919050565b600060208201905081810360008301526137ec816132e1565b9050919050565b6000602082019050818103600083015261380c81613304565b9050919050565b6000602082019050818103600083015261382c81613327565b9050919050565b6000602082019050818103600083015261384c8161334a565b9050919050565b6000602082019050818103600083015261386c8161336d565b9050919050565b6000602082019050818103600083015261388c81613390565b9050919050565b600060208201905081810360008301526138ac816133b3565b9050919050565b600060208201905081810360008301526138cc816133d6565b9050919050565b600060208201905081810360008301526138ec816133f9565b9050919050565b6000602082019050818103600083015261390c8161341c565b9050919050565b6000602082019050818103600083015261392c8161343f565b9050919050565b6000602082019050818103600083015261394c81613462565b9050919050565b6000602082019050818103600083015261396c81613485565b9050919050565b6000602082019050818103600083015261398c816134a8565b9050919050565b600060208201905081810360008301526139ac816134cb565b9050919050565b600060208201905081810360008301526139cc816134ee565b9050919050565b600060208201905081810360008301526139ec81613511565b9050919050565b60006020820190508181036000830152613a0c81613534565b9050919050565b60006020820190508181036000830152613a2c81613557565b9050919050565b60006020820190508181036000830152613a4c8161357a565b9050919050565b60006020820190508181036000830152613a6c8161359d565b9050919050565b60006020820190508181036000830152613a8c816135e3565b9050919050565b60006020820190508181036000830152613aac81613606565b9050919050565b6000602082019050613ac86000830184613629565b92915050565b6000613ad8613ae9565b9050613ae48282613dbc565b919050565b6000604051905090565b600067ffffffffffffffff821115613b0e57613b0d613f22565b5b613b1782613f51565b9050602081019050919050565b600067ffffffffffffffff821115613b3f57613b3e613f22565b5b613b4882613f51565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613bae82613d3e565b9150613bb983613d3e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613bee57613bed613e95565b5b828201905092915050565b6000613c0482613d3e565b9150613c0f83613d3e565b925082613c1f57613c1e613ec4565b5b828204905092915050565b6000613c3582613d3e565b9150613c4083613d3e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c7957613c78613e95565b5b828202905092915050565b6000613c8f82613d3e565b9150613c9a83613d3e565b925082821015613cad57613cac613e95565b5b828203905092915050565b6000613cc382613d1e565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000613d1782613cb8565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613d75578082015181840152602081019050613d5a565b83811115613d84576000848401525b50505050565b60006002820490506001821680613da257607f821691505b60208210811415613db657613db5613ef3565b5b50919050565b613dc582613f51565b810181811067ffffffffffffffff82111715613de457613de3613f22565b5b80604052505050565b6000613df882613d3e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613e2b57613e2a613e95565b5b600182019050919050565b6000613e4182613e48565b9050919050565b6000613e5382613f62565b9050919050565b6000819050919050565b6000613e6f82613d3e565b9150613e7a83613d3e565b925082613e8a57613e89613ec4565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f457863656564206d6178205465616d4d696e7400000000000000000000000000600082015250565b7f496e76616c6964204d65726b6c652050726f6f662e0000000000000000000000600082015250565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f662042616573000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f53616c65206d7573742062652061637469766520746f206d696e742042616500600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f457863656564206d617820726172654d696e7400000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f457863656564206d617820737570706c79206f66204261657300000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f547279696e6720746f206d696e7420746f6f206d616e79000000000000000000600082015250565b6145b981613cb8565b81146145c457600080fd5b50565b6145d081613cca565b81146145db57600080fd5b50565b6145e781613cd6565b81146145f257600080fd5b50565b6145fe81613ce0565b811461460957600080fd5b50565b61461581613d0c565b811461462057600080fd5b50565b61462c81613d3e565b811461463757600080fd5b5056fea264697066735822122072b19dcaecdfa1eada3558428913f85f50c1b44dcf26056d02b192d3da3620aa64736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00f2f1cf230db6741ab22f2cfccde9d50ee2f52db798d73b57b8129d9da388b4f0000000000000000000000000000000000000000000000000000000000000120000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c10000000000000000000000000000000000000000000000000000000000000008426165204361666500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034241450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5a5276756b674b4856475536375946663735326b694a55657a7755796b474d5a3362314e3164414d416a4b442f000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name_ (string): Bae Cafe
Arg [1] : symbol_ (string): BAE
Arg [2] : merkleRoot_ (bytes32): 0x0f2f1cf230db6741ab22f2cfccde9d50ee2f52db798d73b57b8129d9da388b4f
Arg [3] : baseURI_ (string): https://gateway.pinata.cloud/ipfs/QmZRvukgKHVGU67YFf752kiJUezwUykGMZ3b1N1dAMAjKD/
Arg [4] : openSeaProxyRegistryAddress_ (address): 0xa5409ec958C83C3f309868babACA7c86DCB077c1
-----Encoded View---------------
13 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0f2f1cf230db6741ab22f2cfccde9d50ee2f52db798d73b57b8129d9da388b4f
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [4] : 000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [6] : 4261652043616665000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [8] : 4241450000000000000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000051
Arg [10] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [11] : 732f516d5a5276756b674b4856475536375946663735326b694a55657a775579
Arg [12] : 6b474d5a3362314e3164414d416a4b442f000000000000000000000000000000
Deployed Bytecode Sourcemap
42134:5531:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25653:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26822:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28515:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28038:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42645:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44770:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43533:126;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29434:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42546:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43901:89;;;;;;;;;;;;;:::i;:::-;;43353:117;;;;;;;;;;;;;:::i;:::-;;29881:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42316:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44072:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45066:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26429:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42422:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42578:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42270:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26072:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3957:103;;;;;;;;;;;;;:::i;:::-;;43720:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3306:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26991:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28895:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44220:481;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30137:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42684:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27166:468;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42221:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42735:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42372:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47106:556;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42606:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45233:1324;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4215:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42471:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25653:355;25800:4;25857:25;25842:40;;;:11;:40;;;;:105;;;;25914:33;25899:48;;;:11;:48;;;;25842:105;:158;;;;25964:36;25988:11;25964:23;:36::i;:::-;25842:158;25822:178;;25653:355;;;:::o;26822:100::-;26876:13;26909:5;26902:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26822:100;:::o;28515:308::-;28636:7;28683:16;28691:7;28683;:16::i;:::-;28661:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;28791:15;:24;28807:7;28791:24;;;;;;;;;;;;;;;;;;;;;28784:31;;28515:308;;;:::o;28038:411::-;28119:13;28135:23;28150:7;28135:14;:23::i;:::-;28119:39;;28183:5;28177:11;;:2;:11;;;;28169:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28277:5;28261:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28286:37;28303:5;28310:12;:10;:12::i;:::-;28286:16;:37::i;:::-;28261:62;28239:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;28420:21;28429:2;28433:7;28420:8;:21::i;:::-;28038:411;;;:::o;42645:32::-;;;;:::o;44770:231::-;3537:12;:10;:12::i;:::-;3526:23;;:7;:5;:7::i;:::-;:23;;;3518:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42308:1:::1;44836:23;:13;:21;:23::i;:::-;:37;44828:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;44908:25;:13;:23;:25::i;:::-;44944:49;44950:2;44991:1;44965:23;:13;:21;:23::i;:::-;44954:8;:34;;;;:::i;:::-;:38;;;;:::i;:::-;44944:5;:49::i;:::-;44770:231:::0;:::o;43533:126::-;43579:7;43628:23;:13;:21;:23::i;:::-;43606:19;:9;:17;:19::i;:::-;:45;;;;:::i;:::-;43599:52;;43533:126;:::o;29434:376::-;29643:41;29662:12;:10;:12::i;:::-;29676:7;29643:18;:41::i;:::-;29621:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;29774:28;29784:4;29790:2;29794:7;29774:9;:28::i;:::-;29434:376;;;:::o;42546:25::-;;;;:::o;43901:89::-;3537:12;:10;:12::i;:::-;3526:23;;:7;:5;:7::i;:::-;:23;;;3518:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43970:12:::1;;;;;;;;;;;43969:13;43954:12;;:28;;;;;;;;;;;;;;;;;;43901:89::o:0;43353:117::-;3537:12;:10;:12::i;:::-;3526:23;;:7;:5;:7::i;:::-;:23;;;3518:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43401:61:::1;43427:10;43440:21;43401:17;:61::i;:::-;43353:117::o:0;29881:185::-;30019:39;30036:4;30042:2;30046:7;30019:39;;;;;;;;;;;;:16;:39::i;:::-;29881:185;;;:::o;42316:49::-;42361:4;42316:49;:::o;44072:94::-;3537:12;:10;:12::i;:::-;3526:23;;:7;:5;:7::i;:::-;:23;;;3518:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44152:6:::1;44142:7;:16;;;;;;;;;;;;:::i;:::-;;44072:94:::0;:::o;45066:122::-;45129:7;45156:16;:24;45173:6;45156:24;;;;;;;;;;;;;;;;45149:31;;45066:122;;;:::o;26429:326::-;26546:7;26571:13;26587:7;:16;26595:7;26587:16;;;;;;;;;;;;;;;;;;;;;26571:32;;26653:1;26636:19;;:5;:19;;;;26614:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;26742:5;26735:12;;;26429:326;;;:::o;42422:42::-;42463:1;42422:42;:::o;42578:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42270:39::-;42308:1;42270:39;:::o;26072:295::-;26189:7;26253:1;26236:19;;:5;:19;;;;26214:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26343:9;:16;26353:5;26343:16;;;;;;;;;;;;;;;;26336:23;;26072:295;;;:::o;3957:103::-;3537:12;:10;:12::i;:::-;3526:23;;:7;:5;:7::i;:::-;:23;;;3518:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4022:30:::1;4049:1;4022:18;:30::i;:::-;3957:103::o:0;43720:104::-;3537:12;:10;:12::i;:::-;3526:23;;:7;:5;:7::i;:::-;:23;;;3518:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43805:11:::1;43792:10;:24;;;;43720:104:::0;:::o;3306:87::-;3352:7;3379:6;;;;;;;;;;;3372:13;;3306:87;:::o;26991:104::-;27047:13;27080:7;27073:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26991:104;:::o;28895:187::-;29022:52;29041:12;:10;:12::i;:::-;29055:8;29065;29022:18;:52::i;:::-;28895:187;;:::o;44220:481::-;3537:12;:10;:12::i;:::-;3526:23;;:7;:5;:7::i;:::-;:23;;;3518:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42308:1:::1;44360:8;:22;;;;:::i;:::-;44344:12;44322:19;:9;:17;:19::i;:::-;:34;;;;:::i;:::-;:60;;44300:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;42412:3;44484:12;44468:13;;:28;;;;:::i;:::-;:45;;44446:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;44588:12;44571:13;;:29;;;;;;;:::i;:::-;;;;;;;;44616:9;44628:1;44616:13;;44611:83;44636:12;44631:1;:17;44611:83;;44670:12;44679:2;44670:8;:12::i;:::-;44650:3;;;;;:::i;:::-;;;;44611:83;;;;44220:481:::0;;:::o;30137:365::-;30326:41;30345:12;:10;:12::i;:::-;30359:7;30326:18;:41::i;:::-;30304:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;30455:39;30469:4;30475:2;30479:7;30488:5;30455:13;:39::i;:::-;30137:365;;;;:::o;42684:44::-;;;;;;;;;:::o;27166:468::-;27284:13;27337:16;27345:7;27337;:16::i;:::-;27315:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;27441:21;27465:10;:8;:10::i;:::-;27441:34;;27530:1;27512:7;27506:21;:25;:120;;;;;;;;;;;;;;;;;27575:7;27584:18;:7;:16;:18::i;:::-;27558:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27506:120;27486:140;;;27166:468;;;:::o;42221:40::-;;;:::o;42735:37::-;;;;;;;;;:::o;42372:43::-;42412:3;42372:43;:::o;47106:556::-;47231:4;47396:27;47454;;;;;;;;;;;47396:96;;47548:8;47507:49;;47515:13;:21;;;47537:5;47515:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47507:49;;;47503:93;;;47580:4;47573:11;;;;;47503:93;47615:39;47638:5;47645:8;47615:22;:39::i;:::-;47608:46;;;47106:556;;;;;:::o;42606:32::-;;;;;;;;;;;;;:::o;45233:1324::-;45403:12;;;;;;;;;;;45395:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;42463:1;45515:12;45484:16;:28;45501:10;45484:28;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;:61;;:161;;;;;45630:15;45597:12;45566:16;:28;45583:10;45566:28;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;:79;;45484:161;:266;;;;;42361:4;45699:12;45666:30;:20;:28;:30::i;:::-;:45;;;;:::i;:::-;:84;;45484:266;45462:339;;;;;;;;;;;;:::i;:::-;;;;;;;;;45861:9;45845:12;42506:17;45834:23;;;;:::i;:::-;:36;;45812:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;42308:1;46000:8;:22;;;;:::i;:::-;45984:12;45962:19;:9;:17;:19::i;:::-;:34;;;;:::i;:::-;:60;;45940:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;46140:12;46182:10;46194:15;46165:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46155:56;;;;;;46140:71;;46244:49;46263:11;;46244:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46276:10;;46288:4;46244:18;:49::i;:::-;46222:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;46387:12;46355:16;:28;46372:10;46355:28;;;;;;;;;;;;;;;;:44;;;;;;;:::i;:::-;;;;;;;;46417:9;46429:1;46417:13;;46412:138;46437:12;46432:1;:17;46412:138;;46471:32;:20;:30;:32::i;:::-;46518:20;46527:10;46518:8;:20::i;:::-;46451:3;;;;;:::i;:::-;;;;46412:138;;;;45233:1324;;;;;:::o;4215:238::-;3537:12;:10;:12::i;:::-;3526:23;;:7;:5;:7::i;:::-;:23;;;3518:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4338:1:::1;4318:22;;:8;:22;;;;4296:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;4417:28;4436:8;4417:18;:28::i;:::-;4215:238:::0;:::o;42471:52::-;42506:17;42471:52;:::o;12134:207::-;12264:4;12308:25;12293:40;;;:11;:40;;;;12286:47;;12134:207;;;:::o;32049:127::-;32114:4;32166:1;32138:30;;:7;:16;32146:7;32138:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32131:37;;32049:127;;;:::o;2064:98::-;2117:7;2144:10;2137:17;;2064:98;:::o;36336:174::-;36438:2;36411:15;:24;36427:7;36411:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36494:7;36490:2;36456:46;;36465:23;36480:7;36465:14;:23::i;:::-;36456:46;;;;;;;;;;;;36336:174;;:::o;848:114::-;913:7;940;:14;;;933:21;;848:114;;;:::o;970:127::-;1077:1;1059:7;:14;;;:19;;;;;;;;;;;970:127;:::o;34131:439::-;34225:1;34211:16;;:2;:16;;;;34203:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34284:16;34292:7;34284;:16::i;:::-;34283:17;34275:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34346:45;34375:1;34379:2;34383:7;34346:20;:45::i;:::-;34421:1;34404:9;:13;34414:2;34404:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34452:2;34433:7;:16;34441:7;34433:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34497:7;34493:2;34472:33;;34489:1;34472:33;;;;;;;;;;;;34518:44;34546:1;34550:2;34554:7;34518:19;:44::i;:::-;34131:439;;:::o;32343:452::-;32472:4;32516:16;32524:7;32516;:16::i;:::-;32494:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;32615:13;32631:23;32646:7;32631:14;:23::i;:::-;32615:39;;32684:5;32673:16;;:7;:16;;;:64;;;;32730:7;32706:31;;:20;32718:7;32706:11;:20::i;:::-;:31;;;32673:64;:113;;;;32754:32;32771:5;32778:7;32754:16;:32::i;:::-;32673:113;32665:122;;;32343:452;;;;:::o;35556:662::-;35729:4;35702:31;;:23;35717:7;35702:14;:23::i;:::-;:31;;;35680:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;35831:1;35817:16;;:2;:16;;;;35809:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35887:39;35908:4;35914:2;35918:7;35887:20;:39::i;:::-;35991:29;36008:1;36012:7;35991:8;:29::i;:::-;36052:1;36033:9;:15;36043:4;36033:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36081:1;36064:9;:13;36074:2;36064:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36112:2;36093:7;:16;36101:7;36093:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36151:7;36147:2;36132:27;;36141:4;36132:27;;;;;;;;;;;;36172:38;36192:4;36198:2;36202:7;36172:19;:38::i;:::-;35556:662;;;:::o;17846:391::-;17975:6;17950:21;:31;;17928:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;18052:12;18070:9;:14;;18092:6;18070:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18051:52;;;18136:7;18114:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;17846:391;;;:::o;4613:191::-;4687:16;4706:6;;;;;;;;;;;4687:25;;4732:8;4723:6;;:17;;;;;;;;;;;;;;;;;;4787:8;4756:40;;4777:8;4756:40;;;;;;;;;;;;4613:191;;:::o;36652:315::-;36807:8;36798:17;;:5;:17;;;;36790:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36894:8;36856:18;:25;36875:5;36856:25;;;;;;;;;;;;;;;:35;36882:8;36856:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36940:8;36918:41;;36933:5;36918:41;;;36950:8;36918:41;;;;;;:::i;:::-;;;;;;;;36652:315;;;:::o;46565:288::-;46615:18;46658:1;46636:19;:9;:17;:19::i;:::-;:23;;;;:::i;:::-;46615:44;;42308:1;46706:8;:22;;;;:::i;:::-;46692:10;:36;;46670:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;46792:21;:9;:19;:21::i;:::-;46824;46830:2;46834:10;46824:5;:21::i;:::-;46565:288;;:::o;31384:352::-;31541:28;31551:4;31557:2;31561:7;31541:9;:28::i;:::-;31602:48;31625:4;31631:2;31635:7;31644:5;31602:22;:48::i;:::-;31580:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;31384:352;;;;:::o;46861:108::-;46921:13;46954:7;46947:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46861:108;:::o;13617:723::-;13673:13;13903:1;13894:5;:10;13890:53;;;13921:10;;;;;;;;;;;;;;;;;;;;;13890:53;13953:12;13968:5;13953:20;;13984:14;14009:78;14024:1;14016:4;:9;14009:78;;14042:8;;;;;:::i;:::-;;;;14073:2;14065:10;;;;;:::i;:::-;;;14009:78;;;14097:19;14129:6;14119:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14097:39;;14147:154;14163:1;14154:5;:10;14147:154;;14191:1;14181:11;;;;;:::i;:::-;;;14258:2;14250:5;:10;;;;:::i;:::-;14237:2;:24;;;;:::i;:::-;14224:39;;14207:6;14214;14207:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;14287:2;14278:11;;;;;:::i;:::-;;;14147:154;;;14325:6;14311:21;;;;;13617:723;;;;:::o;29153:214::-;29295:4;29324:18;:25;29343:5;29324:25;;;;;;;;;;;;;;;:35;29350:8;29324:35;;;;;;;;;;;;;;;;;;;;;;;;;29317:42;;29153:214;;;;:::o;40577:190::-;40702:4;40755;40726:25;40739:5;40746:4;40726:12;:25::i;:::-;:33;40719:40;;40577:190;;;;;:::o;39084:126::-;;;;:::o;39595:125::-;;;;:::o;37532:980::-;37687:4;37708:15;:2;:13;;;:15::i;:::-;37704:801;;;37777:2;37761:36;;;37820:12;:10;:12::i;:::-;37855:4;37882:7;37912:5;37761:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37740:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38136:1;38119:6;:13;:18;38115:320;;;38162:108;;;;;;;;;;:::i;:::-;;;;;;;;38115:320;38385:6;38379:13;38370:6;38366:2;38362:15;38355:38;37740:710;38010:41;;;38000:51;;;:6;:51;;;;37993:58;;;;;37704:801;38489:4;38482:11;;37532:980;;;;;;;:::o;41129:707::-;41239:7;41264:20;41287:4;41264:27;;41307:9;41302:497;41326:5;:12;41322:1;:16;41302:497;;;41360:20;41383:5;41389:1;41383:8;;;;;;;;;;;;;;;;;;;;;;41360:31;;41426:12;41410;:28;41406:382;;41553:42;41568:12;41582;41553:14;:42::i;:::-;41538:57;;41406:382;;;41730:42;41745:12;41759;41730:14;:42::i;:::-;41715:57;;41406:382;41302:497;41340:3;;;;;:::i;:::-;;;;41302:497;;;;41816:12;41809:19;;;41129:707;;;;:::o;16585:326::-;16645:4;16902:1;16880:7;:19;;;:23;16873:30;;16585:326;;;:::o;41844:256::-;41939:13;42007:1;42001:4;41994:15;42036:1;42030:4;42023:15;42077:4;42071;42061:21;42052:30;;41979:114;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;434:5;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;753:5;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;869:367::-;942:8;952:6;1002:3;995:4;987:6;983:17;979:27;969:2;;1020:1;1017;1010:12;969:2;1056:6;1043:20;1033:30;;1086:18;1078:6;1075:30;1072:2;;;1118:1;1115;1108:12;1072:2;1155:4;1147:6;1143:17;1131:29;;1209:3;1201:4;1193:6;1189:17;1179:8;1175:32;1172:41;1169:2;;;1226:1;1223;1216:12;1169:2;959:277;;;;;:::o;1242:133::-;1285:5;1323:6;1310:20;1301:29;;1339:30;1363:5;1339:30;:::i;:::-;1291:84;;;;:::o;1381:139::-;1427:5;1465:6;1452:20;1443:29;;1481:33;1508:5;1481:33;:::i;:::-;1433:87;;;;:::o;1526:137::-;1571:5;1609:6;1596:20;1587:29;;1625:32;1651:5;1625:32;:::i;:::-;1577:86;;;;:::o;1669:141::-;1725:5;1756:6;1750:13;1741:22;;1772:32;1798:5;1772:32;:::i;:::-;1731:79;;;;:::o;1829:271::-;1884:5;1933:3;1926:4;1918:6;1914:17;1910:27;1900:2;;1951:1;1948;1941:12;1900:2;1991:6;1978:20;2016:78;2090:3;2082:6;2075:4;2067:6;2063:17;2016:78;:::i;:::-;2007:87;;1890:210;;;;;:::o;2106:201::-;2192:5;2223:6;2217:13;2208:22;;2239:62;2295:5;2239:62;:::i;:::-;2198:109;;;;:::o;2327:273::-;2383:5;2432:3;2425:4;2417:6;2413:17;2409:27;2399:2;;2450:1;2447;2440:12;2399:2;2490:6;2477:20;2515:79;2590:3;2582:6;2575:4;2567:6;2563:17;2515:79;:::i;:::-;2506:88;;2389:211;;;;;:::o;2606:139::-;2652:5;2690:6;2677:20;2668:29;;2706:33;2733:5;2706:33;:::i;:::-;2658:87;;;;:::o;2751:262::-;2810:6;2859:2;2847:9;2838:7;2834:23;2830:32;2827:2;;;2875:1;2872;2865:12;2827:2;2918:1;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2889:117;2817:196;;;;:::o;3019:407::-;3087:6;3095;3144:2;3132:9;3123:7;3119:23;3115:32;3112:2;;;3160:1;3157;3150:12;3112:2;3203:1;3228:53;3273:7;3264:6;3253:9;3249:22;3228:53;:::i;:::-;3218:63;;3174:117;3330:2;3356:53;3401:7;3392:6;3381:9;3377:22;3356:53;:::i;:::-;3346:63;;3301:118;3102:324;;;;;:::o;3432:552::-;3509:6;3517;3525;3574:2;3562:9;3553:7;3549:23;3545:32;3542:2;;;3590:1;3587;3580:12;3542:2;3633:1;3658:53;3703:7;3694:6;3683:9;3679:22;3658:53;:::i;:::-;3648:63;;3604:117;3760:2;3786:53;3831:7;3822:6;3811:9;3807:22;3786:53;:::i;:::-;3776:63;;3731:118;3888:2;3914:53;3959:7;3950:6;3939:9;3935:22;3914:53;:::i;:::-;3904:63;;3859:118;3532:452;;;;;:::o;3990:809::-;4085:6;4093;4101;4109;4158:3;4146:9;4137:7;4133:23;4129:33;4126:2;;;4175:1;4172;4165:12;4126:2;4218:1;4243:53;4288:7;4279:6;4268:9;4264:22;4243:53;:::i;:::-;4233:63;;4189:117;4345:2;4371:53;4416:7;4407:6;4396:9;4392:22;4371:53;:::i;:::-;4361:63;;4316:118;4473:2;4499:53;4544:7;4535:6;4524:9;4520:22;4499:53;:::i;:::-;4489:63;;4444:118;4629:2;4618:9;4614:18;4601:32;4660:18;4652:6;4649:30;4646:2;;;4692:1;4689;4682:12;4646:2;4720:62;4774:7;4765:6;4754:9;4750:22;4720:62;:::i;:::-;4710:72;;4572:220;4116:683;;;;;;;:::o;4805:401::-;4870:6;4878;4927:2;4915:9;4906:7;4902:23;4898:32;4895:2;;;4943:1;4940;4933:12;4895:2;4986:1;5011:53;5056:7;5047:6;5036:9;5032:22;5011:53;:::i;:::-;5001:63;;4957:117;5113:2;5139:50;5181:7;5172:6;5161:9;5157:22;5139:50;:::i;:::-;5129:60;;5084:115;4885:321;;;;;:::o;5212:407::-;5280:6;5288;5337:2;5325:9;5316:7;5312:23;5308:32;5305:2;;;5353:1;5350;5343:12;5305:2;5396:1;5421:53;5466:7;5457:6;5446:9;5442:22;5421:53;:::i;:::-;5411:63;;5367:117;5523:2;5549:53;5594:7;5585:6;5574:9;5570:22;5549:53;:::i;:::-;5539:63;;5494:118;5295:324;;;;;:::o;5625:262::-;5684:6;5733:2;5721:9;5712:7;5708:23;5704:32;5701:2;;;5749:1;5746;5739:12;5701:2;5792:1;5817:53;5862:7;5853:6;5842:9;5838:22;5817:53;:::i;:::-;5807:63;;5763:117;5691:196;;;;:::o;5893:260::-;5951:6;6000:2;5988:9;5979:7;5975:23;5971:32;5968:2;;;6016:1;6013;6006:12;5968:2;6059:1;6084:52;6128:7;6119:6;6108:9;6104:22;6084:52;:::i;:::-;6074:62;;6030:116;5958:195;;;;:::o;6159:282::-;6228:6;6277:2;6265:9;6256:7;6252:23;6248:32;6245:2;;;6293:1;6290;6283:12;6245:2;6336:1;6361:63;6416:7;6407:6;6396:9;6392:22;6361:63;:::i;:::-;6351:73;;6307:127;6235:206;;;;:::o;6447:342::-;6546:6;6595:2;6583:9;6574:7;6570:23;6566:32;6563:2;;;6611:1;6608;6601:12;6563:2;6654:1;6679:93;6764:7;6755:6;6744:9;6740:22;6679:93;:::i;:::-;6669:103;;6625:157;6553:236;;;;:::o;6795:375::-;6864:6;6913:2;6901:9;6892:7;6888:23;6884:32;6881:2;;;6929:1;6926;6919:12;6881:2;7000:1;6989:9;6985:17;6972:31;7030:18;7022:6;7019:30;7016:2;;;7062:1;7059;7052:12;7016:2;7090:63;7145:7;7136:6;7125:9;7121:22;7090:63;:::i;:::-;7080:73;;6943:220;6871:299;;;;:::o;7176:262::-;7235:6;7284:2;7272:9;7263:7;7259:23;7255:32;7252:2;;;7300:1;7297;7290:12;7252:2;7343:1;7368:53;7413:7;7404:6;7393:9;7389:22;7368:53;:::i;:::-;7358:63;;7314:117;7242:196;;;;:::o;7444:715::-;7548:6;7556;7564;7572;7621:2;7609:9;7600:7;7596:23;7592:32;7589:2;;;7637:1;7634;7627:12;7589:2;7680:1;7705:53;7750:7;7741:6;7730:9;7726:22;7705:53;:::i;:::-;7695:63;;7651:117;7807:2;7833:53;7878:7;7869:6;7858:9;7854:22;7833:53;:::i;:::-;7823:63;;7778:118;7963:2;7952:9;7948:18;7935:32;7994:18;7986:6;7983:30;7980:2;;;8026:1;8023;8016:12;7980:2;8062:80;8134:7;8125:6;8114:9;8110:22;8062:80;:::i;:::-;8044:98;;;;7906:246;7579:580;;;;;;;:::o;8165:118::-;8252:24;8270:5;8252:24;:::i;:::-;8247:3;8240:37;8230:53;;:::o;8289:157::-;8394:45;8414:24;8432:5;8414:24;:::i;:::-;8394:45;:::i;:::-;8389:3;8382:58;8372:74;;:::o;8452:109::-;8533:21;8548:5;8533:21;:::i;:::-;8528:3;8521:34;8511:50;;:::o;8567:118::-;8654:24;8672:5;8654:24;:::i;:::-;8649:3;8642:37;8632:53;;:::o;8691:360::-;8777:3;8805:38;8837:5;8805:38;:::i;:::-;8859:70;8922:6;8917:3;8859:70;:::i;:::-;8852:77;;8938:52;8983:6;8978:3;8971:4;8964:5;8960:16;8938:52;:::i;:::-;9015:29;9037:6;9015:29;:::i;:::-;9010:3;9006:39;8999:46;;8781:270;;;;;:::o;9057:364::-;9145:3;9173:39;9206:5;9173:39;:::i;:::-;9228:71;9292:6;9287:3;9228:71;:::i;:::-;9221:78;;9308:52;9353:6;9348:3;9341:4;9334:5;9330:16;9308:52;:::i;:::-;9385:29;9407:6;9385:29;:::i;:::-;9380:3;9376:39;9369:46;;9149:272;;;;;:::o;9427:377::-;9533:3;9561:39;9594:5;9561:39;:::i;:::-;9616:89;9698:6;9693:3;9616:89;:::i;:::-;9609:96;;9714:52;9759:6;9754:3;9747:4;9740:5;9736:16;9714:52;:::i;:::-;9791:6;9786:3;9782:16;9775:23;;9537:267;;;;;:::o;9810:366::-;9952:3;9973:67;10037:2;10032:3;9973:67;:::i;:::-;9966:74;;10049:93;10138:3;10049:93;:::i;:::-;10167:2;10162:3;10158:12;10151:19;;9956:220;;;:::o;10182:366::-;10324:3;10345:67;10409:2;10404:3;10345:67;:::i;:::-;10338:74;;10421:93;10510:3;10421:93;:::i;:::-;10539:2;10534:3;10530:12;10523:19;;10328:220;;;:::o;10554:366::-;10696:3;10717:67;10781:2;10776:3;10717:67;:::i;:::-;10710:74;;10793:93;10882:3;10793:93;:::i;:::-;10911:2;10906:3;10902:12;10895:19;;10700:220;;;:::o;10926:366::-;11068:3;11089:67;11153:2;11148:3;11089:67;:::i;:::-;11082:74;;11165:93;11254:3;11165:93;:::i;:::-;11283:2;11278:3;11274:12;11267:19;;11072:220;;;:::o;11298:366::-;11440:3;11461:67;11525:2;11520:3;11461:67;:::i;:::-;11454:74;;11537:93;11626:3;11537:93;:::i;:::-;11655:2;11650:3;11646:12;11639:19;;11444:220;;;:::o;11670:366::-;11812:3;11833:67;11897:2;11892:3;11833:67;:::i;:::-;11826:74;;11909:93;11998:3;11909:93;:::i;:::-;12027:2;12022:3;12018:12;12011:19;;11816:220;;;:::o;12042:366::-;12184:3;12205:67;12269:2;12264:3;12205:67;:::i;:::-;12198:74;;12281:93;12370:3;12281:93;:::i;:::-;12399:2;12394:3;12390:12;12383:19;;12188:220;;;:::o;12414:366::-;12556:3;12577:67;12641:2;12636:3;12577:67;:::i;:::-;12570:74;;12653:93;12742:3;12653:93;:::i;:::-;12771:2;12766:3;12762:12;12755:19;;12560:220;;;:::o;12786:366::-;12928:3;12949:67;13013:2;13008:3;12949:67;:::i;:::-;12942:74;;13025:93;13114:3;13025:93;:::i;:::-;13143:2;13138:3;13134:12;13127:19;;12932:220;;;:::o;13158:366::-;13300:3;13321:67;13385:2;13380:3;13321:67;:::i;:::-;13314:74;;13397:93;13486:3;13397:93;:::i;:::-;13515:2;13510:3;13506:12;13499:19;;13304:220;;;:::o;13530:366::-;13672:3;13693:67;13757:2;13752:3;13693:67;:::i;:::-;13686:74;;13769:93;13858:3;13769:93;:::i;:::-;13887:2;13882:3;13878:12;13871:19;;13676:220;;;:::o;13902:366::-;14044:3;14065:67;14129:2;14124:3;14065:67;:::i;:::-;14058:74;;14141:93;14230:3;14141:93;:::i;:::-;14259:2;14254:3;14250:12;14243:19;;14048:220;;;:::o;14274:366::-;14416:3;14437:67;14501:2;14496:3;14437:67;:::i;:::-;14430:74;;14513:93;14602:3;14513:93;:::i;:::-;14631:2;14626:3;14622:12;14615:19;;14420:220;;;:::o;14646:366::-;14788:3;14809:67;14873:2;14868:3;14809:67;:::i;:::-;14802:74;;14885:93;14974:3;14885:93;:::i;:::-;15003:2;14998:3;14994:12;14987:19;;14792:220;;;:::o;15018:366::-;15160:3;15181:67;15245:2;15240:3;15181:67;:::i;:::-;15174:74;;15257:93;15346:3;15257:93;:::i;:::-;15375:2;15370:3;15366:12;15359:19;;15164:220;;;:::o;15390:366::-;15532:3;15553:67;15617:2;15612:3;15553:67;:::i;:::-;15546:74;;15629:93;15718:3;15629:93;:::i;:::-;15747:2;15742:3;15738:12;15731:19;;15536:220;;;:::o;15762:366::-;15904:3;15925:67;15989:2;15984:3;15925:67;:::i;:::-;15918:74;;16001:93;16090:3;16001:93;:::i;:::-;16119:2;16114:3;16110:12;16103:19;;15908:220;;;:::o;16134:366::-;16276:3;16297:67;16361:2;16356:3;16297:67;:::i;:::-;16290:74;;16373:93;16462:3;16373:93;:::i;:::-;16491:2;16486:3;16482:12;16475:19;;16280:220;;;:::o;16506:366::-;16648:3;16669:67;16733:2;16728:3;16669:67;:::i;:::-;16662:74;;16745:93;16834:3;16745:93;:::i;:::-;16863:2;16858:3;16854:12;16847:19;;16652:220;;;:::o;16878:366::-;17020:3;17041:67;17105:2;17100:3;17041:67;:::i;:::-;17034:74;;17117:93;17206:3;17117:93;:::i;:::-;17235:2;17230:3;17226:12;17219:19;;17024:220;;;:::o;17250:366::-;17392:3;17413:67;17477:2;17472:3;17413:67;:::i;:::-;17406:74;;17489:93;17578:3;17489:93;:::i;:::-;17607:2;17602:3;17598:12;17591:19;;17396:220;;;:::o;17622:366::-;17764:3;17785:67;17849:2;17844:3;17785:67;:::i;:::-;17778:74;;17861:93;17950:3;17861:93;:::i;:::-;17979:2;17974:3;17970:12;17963:19;;17768:220;;;:::o;17994:366::-;18136:3;18157:67;18221:2;18216:3;18157:67;:::i;:::-;18150:74;;18233:93;18322:3;18233:93;:::i;:::-;18351:2;18346:3;18342:12;18335:19;;18140:220;;;:::o;18366:366::-;18508:3;18529:67;18593:2;18588:3;18529:67;:::i;:::-;18522:74;;18605:93;18694:3;18605:93;:::i;:::-;18723:2;18718:3;18714:12;18707:19;;18512:220;;;:::o;18738:398::-;18897:3;18918:83;18999:1;18994:3;18918:83;:::i;:::-;18911:90;;19010:93;19099:3;19010:93;:::i;:::-;19128:1;19123:3;19119:11;19112:18;;18901:235;;;:::o;19142:366::-;19284:3;19305:67;19369:2;19364:3;19305:67;:::i;:::-;19298:74;;19381:93;19470:3;19381:93;:::i;:::-;19499:2;19494:3;19490:12;19483:19;;19288:220;;;:::o;19514:366::-;19656:3;19677:67;19741:2;19736:3;19677:67;:::i;:::-;19670:74;;19753:93;19842:3;19753:93;:::i;:::-;19871:2;19866:3;19862:12;19855:19;;19660:220;;;:::o;19886:118::-;19973:24;19991:5;19973:24;:::i;:::-;19968:3;19961:37;19951:53;;:::o;20010:157::-;20115:45;20135:24;20153:5;20135:24;:::i;:::-;20115:45;:::i;:::-;20110:3;20103:58;20093:74;;:::o;20173:397::-;20313:3;20328:75;20399:3;20390:6;20328:75;:::i;:::-;20428:2;20423:3;20419:12;20412:19;;20441:75;20512:3;20503:6;20441:75;:::i;:::-;20541:2;20536:3;20532:12;20525:19;;20561:3;20554:10;;20317:253;;;;;:::o;20576:435::-;20756:3;20778:95;20869:3;20860:6;20778:95;:::i;:::-;20771:102;;20890:95;20981:3;20972:6;20890:95;:::i;:::-;20883:102;;21002:3;20995:10;;20760:251;;;;;:::o;21017:379::-;21201:3;21223:147;21366:3;21223:147;:::i;:::-;21216:154;;21387:3;21380:10;;21205:191;;;:::o;21402:222::-;21495:4;21533:2;21522:9;21518:18;21510:26;;21546:71;21614:1;21603:9;21599:17;21590:6;21546:71;:::i;:::-;21500:124;;;;:::o;21630:640::-;21825:4;21863:3;21852:9;21848:19;21840:27;;21877:71;21945:1;21934:9;21930:17;21921:6;21877:71;:::i;:::-;21958:72;22026:2;22015:9;22011:18;22002:6;21958:72;:::i;:::-;22040;22108:2;22097:9;22093:18;22084:6;22040:72;:::i;:::-;22159:9;22153:4;22149:20;22144:2;22133:9;22129:18;22122:48;22187:76;22258:4;22249:6;22187:76;:::i;:::-;22179:84;;21830:440;;;;;;;:::o;22276:210::-;22363:4;22401:2;22390:9;22386:18;22378:26;;22414:65;22476:1;22465:9;22461:17;22452:6;22414:65;:::i;:::-;22368:118;;;;:::o;22492:222::-;22585:4;22623:2;22612:9;22608:18;22600:26;;22636:71;22704:1;22693:9;22689:17;22680:6;22636:71;:::i;:::-;22590:124;;;;:::o;22720:313::-;22833:4;22871:2;22860:9;22856:18;22848:26;;22920:9;22914:4;22910:20;22906:1;22895:9;22891:17;22884:47;22948:78;23021:4;23012:6;22948:78;:::i;:::-;22940:86;;22838:195;;;;:::o;23039:419::-;23205:4;23243:2;23232:9;23228:18;23220:26;;23292:9;23286:4;23282:20;23278:1;23267:9;23263:17;23256:47;23320:131;23446:4;23320:131;:::i;:::-;23312:139;;23210:248;;;:::o;23464:419::-;23630:4;23668:2;23657:9;23653:18;23645:26;;23717:9;23711:4;23707:20;23703:1;23692:9;23688:17;23681:47;23745:131;23871:4;23745:131;:::i;:::-;23737:139;;23635:248;;;:::o;23889:419::-;24055:4;24093:2;24082:9;24078:18;24070:26;;24142:9;24136:4;24132:20;24128:1;24117:9;24113:17;24106:47;24170:131;24296:4;24170:131;:::i;:::-;24162:139;;24060:248;;;:::o;24314:419::-;24480:4;24518:2;24507:9;24503:18;24495:26;;24567:9;24561:4;24557:20;24553:1;24542:9;24538:17;24531:47;24595:131;24721:4;24595:131;:::i;:::-;24587:139;;24485:248;;;:::o;24739:419::-;24905:4;24943:2;24932:9;24928:18;24920:26;;24992:9;24986:4;24982:20;24978:1;24967:9;24963:17;24956:47;25020:131;25146:4;25020:131;:::i;:::-;25012:139;;24910:248;;;:::o;25164:419::-;25330:4;25368:2;25357:9;25353:18;25345:26;;25417:9;25411:4;25407:20;25403:1;25392:9;25388:17;25381:47;25445:131;25571:4;25445:131;:::i;:::-;25437:139;;25335:248;;;:::o;25589:419::-;25755:4;25793:2;25782:9;25778:18;25770:26;;25842:9;25836:4;25832:20;25828:1;25817:9;25813:17;25806:47;25870:131;25996:4;25870:131;:::i;:::-;25862:139;;25760:248;;;:::o;26014:419::-;26180:4;26218:2;26207:9;26203:18;26195:26;;26267:9;26261:4;26257:20;26253:1;26242:9;26238:17;26231:47;26295:131;26421:4;26295:131;:::i;:::-;26287:139;;26185:248;;;:::o;26439:419::-;26605:4;26643:2;26632:9;26628:18;26620:26;;26692:9;26686:4;26682:20;26678:1;26667:9;26663:17;26656:47;26720:131;26846:4;26720:131;:::i;:::-;26712:139;;26610:248;;;:::o;26864:419::-;27030:4;27068:2;27057:9;27053:18;27045:26;;27117:9;27111:4;27107:20;27103:1;27092:9;27088:17;27081:47;27145:131;27271:4;27145:131;:::i;:::-;27137:139;;27035:248;;;:::o;27289:419::-;27455:4;27493:2;27482:9;27478:18;27470:26;;27542:9;27536:4;27532:20;27528:1;27517:9;27513:17;27506:47;27570:131;27696:4;27570:131;:::i;:::-;27562:139;;27460:248;;;:::o;27714:419::-;27880:4;27918:2;27907:9;27903:18;27895:26;;27967:9;27961:4;27957:20;27953:1;27942:9;27938:17;27931:47;27995:131;28121:4;27995:131;:::i;:::-;27987:139;;27885:248;;;:::o;28139:419::-;28305:4;28343:2;28332:9;28328:18;28320:26;;28392:9;28386:4;28382:20;28378:1;28367:9;28363:17;28356:47;28420:131;28546:4;28420:131;:::i;:::-;28412:139;;28310:248;;;:::o;28564:419::-;28730:4;28768:2;28757:9;28753:18;28745:26;;28817:9;28811:4;28807:20;28803:1;28792:9;28788:17;28781:47;28845:131;28971:4;28845:131;:::i;:::-;28837:139;;28735:248;;;:::o;28989:419::-;29155:4;29193:2;29182:9;29178:18;29170:26;;29242:9;29236:4;29232:20;29228:1;29217:9;29213:17;29206:47;29270:131;29396:4;29270:131;:::i;:::-;29262:139;;29160:248;;;:::o;29414:419::-;29580:4;29618:2;29607:9;29603:18;29595:26;;29667:9;29661:4;29657:20;29653:1;29642:9;29638:17;29631:47;29695:131;29821:4;29695:131;:::i;:::-;29687:139;;29585:248;;;:::o;29839:419::-;30005:4;30043:2;30032:9;30028:18;30020:26;;30092:9;30086:4;30082:20;30078:1;30067:9;30063:17;30056:47;30120:131;30246:4;30120:131;:::i;:::-;30112:139;;30010:248;;;:::o;30264:419::-;30430:4;30468:2;30457:9;30453:18;30445:26;;30517:9;30511:4;30507:20;30503:1;30492:9;30488:17;30481:47;30545:131;30671:4;30545:131;:::i;:::-;30537:139;;30435:248;;;:::o;30689:419::-;30855:4;30893:2;30882:9;30878:18;30870:26;;30942:9;30936:4;30932:20;30928:1;30917:9;30913:17;30906:47;30970:131;31096:4;30970:131;:::i;:::-;30962:139;;30860:248;;;:::o;31114:419::-;31280:4;31318:2;31307:9;31303:18;31295:26;;31367:9;31361:4;31357:20;31353:1;31342:9;31338:17;31331:47;31395:131;31521:4;31395:131;:::i;:::-;31387:139;;31285:248;;;:::o;31539:419::-;31705:4;31743:2;31732:9;31728:18;31720:26;;31792:9;31786:4;31782:20;31778:1;31767:9;31763:17;31756:47;31820:131;31946:4;31820:131;:::i;:::-;31812:139;;31710:248;;;:::o;31964:419::-;32130:4;32168:2;32157:9;32153:18;32145:26;;32217:9;32211:4;32207:20;32203:1;32192:9;32188:17;32181:47;32245:131;32371:4;32245:131;:::i;:::-;32237:139;;32135:248;;;:::o;32389:419::-;32555:4;32593:2;32582:9;32578:18;32570:26;;32642:9;32636:4;32632:20;32628:1;32617:9;32613:17;32606:47;32670:131;32796:4;32670:131;:::i;:::-;32662:139;;32560:248;;;:::o;32814:419::-;32980:4;33018:2;33007:9;33003:18;32995:26;;33067:9;33061:4;33057:20;33053:1;33042:9;33038:17;33031:47;33095:131;33221:4;33095:131;:::i;:::-;33087:139;;32985:248;;;:::o;33239:419::-;33405:4;33443:2;33432:9;33428:18;33420:26;;33492:9;33486:4;33482:20;33478:1;33467:9;33463:17;33456:47;33520:131;33646:4;33520:131;:::i;:::-;33512:139;;33410:248;;;:::o;33664:419::-;33830:4;33868:2;33857:9;33853:18;33845:26;;33917:9;33911:4;33907:20;33903:1;33892:9;33888:17;33881:47;33945:131;34071:4;33945:131;:::i;:::-;33937:139;;33835:248;;;:::o;34089:222::-;34182:4;34220:2;34209:9;34205:18;34197:26;;34233:71;34301:1;34290:9;34286:17;34277:6;34233:71;:::i;:::-;34187:124;;;;:::o;34317:129::-;34351:6;34378:20;;:::i;:::-;34368:30;;34407:33;34435:4;34427:6;34407:33;:::i;:::-;34358:88;;;:::o;34452:75::-;34485:6;34518:2;34512:9;34502:19;;34492:35;:::o;34533:307::-;34594:4;34684:18;34676:6;34673:30;34670:2;;;34706:18;;:::i;:::-;34670:2;34744:29;34766:6;34744:29;:::i;:::-;34736:37;;34828:4;34822;34818:15;34810:23;;34599:241;;;:::o;34846:308::-;34908:4;34998:18;34990:6;34987:30;34984:2;;;35020:18;;:::i;:::-;34984:2;35058:29;35080:6;35058:29;:::i;:::-;35050:37;;35142:4;35136;35132:15;35124:23;;34913:241;;;:::o;35160:98::-;35211:6;35245:5;35239:12;35229:22;;35218:40;;;:::o;35264:99::-;35316:6;35350:5;35344:12;35334:22;;35323:40;;;:::o;35369:168::-;35452:11;35486:6;35481:3;35474:19;35526:4;35521:3;35517:14;35502:29;;35464:73;;;;:::o;35543:147::-;35644:11;35681:3;35666:18;;35656:34;;;;:::o;35696:169::-;35780:11;35814:6;35809:3;35802:19;35854:4;35849:3;35845:14;35830:29;;35792:73;;;;:::o;35871:148::-;35973:11;36010:3;35995:18;;35985:34;;;;:::o;36025:305::-;36065:3;36084:20;36102:1;36084:20;:::i;:::-;36079:25;;36118:20;36136:1;36118:20;:::i;:::-;36113:25;;36272:1;36204:66;36200:74;36197:1;36194:81;36191:2;;;36278:18;;:::i;:::-;36191:2;36322:1;36319;36315:9;36308:16;;36069:261;;;;:::o;36336:185::-;36376:1;36393:20;36411:1;36393:20;:::i;:::-;36388:25;;36427:20;36445:1;36427:20;:::i;:::-;36422:25;;36466:1;36456:2;;36471:18;;:::i;:::-;36456:2;36513:1;36510;36506:9;36501:14;;36378:143;;;;:::o;36527:348::-;36567:7;36590:20;36608:1;36590:20;:::i;:::-;36585:25;;36624:20;36642:1;36624:20;:::i;:::-;36619:25;;36812:1;36744:66;36740:74;36737:1;36734:81;36729:1;36722:9;36715:17;36711:105;36708:2;;;36819:18;;:::i;:::-;36708:2;36867:1;36864;36860:9;36849:20;;36575:300;;;;:::o;36881:191::-;36921:4;36941:20;36959:1;36941:20;:::i;:::-;36936:25;;36975:20;36993:1;36975:20;:::i;:::-;36970:25;;37014:1;37011;37008:8;37005:2;;;37019:18;;:::i;:::-;37005:2;37064:1;37061;37057:9;37049:17;;36926:146;;;;:::o;37078:96::-;37115:7;37144:24;37162:5;37144:24;:::i;:::-;37133:35;;37123:51;;;:::o;37180:90::-;37214:7;37257:5;37250:13;37243:21;37232:32;;37222:48;;;:::o;37276:77::-;37313:7;37342:5;37331:16;;37321:32;;;:::o;37359:149::-;37395:7;37435:66;37428:5;37424:78;37413:89;;37403:105;;;:::o;37514:125::-;37580:7;37609:24;37627:5;37609:24;:::i;:::-;37598:35;;37588:51;;;:::o;37645:126::-;37682:7;37722:42;37715:5;37711:54;37700:65;;37690:81;;;:::o;37777:77::-;37814:7;37843:5;37832:16;;37822:32;;;:::o;37860:154::-;37944:6;37939:3;37934;37921:30;38006:1;37997:6;37992:3;37988:16;37981:27;37911:103;;;:::o;38020:307::-;38088:1;38098:113;38112:6;38109:1;38106:13;38098:113;;;38197:1;38192:3;38188:11;38182:18;38178:1;38173:3;38169:11;38162:39;38134:2;38131:1;38127:10;38122:15;;38098:113;;;38229:6;38226:1;38223:13;38220:2;;;38309:1;38300:6;38295:3;38291:16;38284:27;38220:2;38069:258;;;;:::o;38333:320::-;38377:6;38414:1;38408:4;38404:12;38394:22;;38461:1;38455:4;38451:12;38482:18;38472:2;;38538:4;38530:6;38526:17;38516:27;;38472:2;38600;38592:6;38589:14;38569:18;38566:38;38563:2;;;38619:18;;:::i;:::-;38563:2;38384:269;;;;:::o;38659:281::-;38742:27;38764:4;38742:27;:::i;:::-;38734:6;38730:40;38872:6;38860:10;38857:22;38836:18;38824:10;38821:34;38818:62;38815:2;;;38883:18;;:::i;:::-;38815:2;38923:10;38919:2;38912:22;38702:238;;;:::o;38946:233::-;38985:3;39008:24;39026:5;39008:24;:::i;:::-;38999:33;;39054:66;39047:5;39044:77;39041:2;;;39124:18;;:::i;:::-;39041:2;39171:1;39164:5;39160:13;39153:20;;38989:190;;;:::o;39185:100::-;39224:7;39253:26;39273:5;39253:26;:::i;:::-;39242:37;;39232:53;;;:::o;39291:94::-;39330:7;39359:20;39373:5;39359:20;:::i;:::-;39348:31;;39338:47;;;:::o;39391:79::-;39430:7;39459:5;39448:16;;39438:32;;;:::o;39476:176::-;39508:1;39525:20;39543:1;39525:20;:::i;:::-;39520:25;;39559:20;39577:1;39559:20;:::i;:::-;39554:25;;39598:1;39588:2;;39603:18;;:::i;:::-;39588:2;39644:1;39641;39637:9;39632:14;;39510:142;;;;:::o;39658:180::-;39706:77;39703:1;39696:88;39803:4;39800:1;39793:15;39827:4;39824:1;39817:15;39844:180;39892:77;39889:1;39882:88;39989:4;39986:1;39979:15;40013:4;40010:1;40003:15;40030:180;40078:77;40075:1;40068:88;40175:4;40172:1;40165:15;40199:4;40196:1;40189:15;40216:180;40264:77;40261:1;40254:88;40361:4;40358:1;40351:15;40385:4;40382:1;40375:15;40402:102;40443:6;40494:2;40490:7;40485:2;40478:5;40474:14;40470:28;40460:38;;40450:54;;;:::o;40510:94::-;40543:8;40591:5;40587:2;40583:14;40562:35;;40552:52;;;:::o;40610:237::-;40750:34;40746:1;40738:6;40734:14;40727:58;40819:20;40814:2;40806:6;40802:15;40795:45;40716:131;:::o;40853:225::-;40993:34;40989:1;40981:6;40977:14;40970:58;41062:8;41057:2;41049:6;41045:15;41038:33;40959:119;:::o;41084:224::-;41224:34;41220:1;41212:6;41208:14;41201:58;41293:7;41288:2;41280:6;41276:15;41269:32;41190:118;:::o;41314:178::-;41454:30;41450:1;41442:6;41438:14;41431:54;41420:72;:::o;41498:223::-;41638:34;41634:1;41626:6;41622:14;41615:58;41707:6;41702:2;41694:6;41690:15;41683:31;41604:117;:::o;41727:175::-;41867:27;41863:1;41855:6;41851:14;41844:51;41833:69;:::o;41908:169::-;42048:21;42044:1;42036:6;42032:14;42025:45;42014:63;:::o;42083:171::-;42223:23;42219:1;42211:6;42207:14;42200:47;42189:65;:::o;42260:181::-;42400:33;42396:1;42388:6;42384:14;42377:57;42366:75;:::o;42447:227::-;42587:34;42583:1;42575:6;42571:14;42564:58;42656:10;42651:2;42643:6;42639:15;42632:35;42553:121;:::o;42680:245::-;42820:34;42816:1;42808:6;42804:14;42797:58;42889:28;42884:2;42876:6;42872:15;42865:53;42786:139;:::o;42931:179::-;43071:31;43067:1;43059:6;43055:14;43048:55;43037:73;:::o;43116:181::-;43256:33;43252:1;43244:6;43240:14;43233:57;43222:75;:::o;43303:231::-;43443:34;43439:1;43431:6;43427:14;43420:58;43512:14;43507:2;43499:6;43495:15;43488:39;43409:125;:::o;43540:169::-;43680:21;43676:1;43668:6;43664:14;43657:45;43646:63;:::o;43715:243::-;43855:34;43851:1;43843:6;43839:14;43832:58;43924:26;43919:2;43911:6;43907:15;43900:51;43821:137;:::o;43964:229::-;44104:34;44100:1;44092:6;44088:14;44081:58;44173:12;44168:2;44160:6;44156:15;44149:37;44070:123;:::o;44199:228::-;44339:34;44335:1;44327:6;44323:14;44316:58;44408:11;44403:2;44395:6;44391:15;44384:36;44305:122;:::o;44433:182::-;44573:34;44569:1;44561:6;44557:14;44550:58;44539:76;:::o;44621:175::-;44761:27;44757:1;44749:6;44745:14;44738:51;44727:69;:::o;44802:231::-;44942:34;44938:1;44930:6;44926:14;44919:58;45011:14;45006:2;44998:6;44994:15;44987:39;44908:125;:::o;45039:182::-;45179:34;45175:1;45167:6;45163:14;45156:58;45145:76;:::o;45227:234::-;45367:34;45363:1;45355:6;45351:14;45344:58;45436:17;45431:2;45423:6;45419:15;45412:42;45333:128;:::o;45467:220::-;45607:34;45603:1;45595:6;45591:14;45584:58;45676:3;45671:2;45663:6;45659:15;45652:28;45573:114;:::o;45693:::-;45799:8;:::o;45813:236::-;45953:34;45949:1;45941:6;45937:14;45930:58;46022:19;46017:2;46009:6;46005:15;45998:44;45919:130;:::o;46055:173::-;46195:25;46191:1;46183:6;46179:14;46172:49;46161:67;:::o;46234:122::-;46307:24;46325:5;46307:24;:::i;:::-;46300:5;46297:35;46287:2;;46346:1;46343;46336:12;46287:2;46277:79;:::o;46362:116::-;46432:21;46447:5;46432:21;:::i;:::-;46425:5;46422:32;46412:2;;46468:1;46465;46458:12;46412:2;46402:76;:::o;46484:122::-;46557:24;46575:5;46557:24;:::i;:::-;46550:5;46547:35;46537:2;;46596:1;46593;46586:12;46537:2;46527:79;:::o;46612:120::-;46684:23;46701:5;46684:23;:::i;:::-;46677:5;46674:34;46664:2;;46722:1;46719;46712:12;46664:2;46654:78;:::o;46738:180::-;46840:53;46887:5;46840:53;:::i;:::-;46833:5;46830:64;46820:2;;46908:1;46905;46898:12;46820:2;46810:108;:::o;46924:122::-;46997:24;47015:5;46997:24;:::i;:::-;46990:5;46987:35;46977:2;;47036:1;47033;47026:12;46977:2;46967:79;:::o
Swarm Source
ipfs://72b19dcaecdfa1eada3558428913f85f50c1b44dcf26056d02b192d3da3620aa
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.