ERC-721
Overview
Max Total Supply
0 BNF
Holders
852
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 BNFLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BONSAI
Compiler Version
v0.8.16+commit.07a7930e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-10-16 */ // SPDX-License-Identifier: MIT 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); } 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`. * * 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; /** * @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 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 the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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); } 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 `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } 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); } 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); } } } } 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; } } 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); } } 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; } } 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 overridden 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 || isApprovedForAll(owner, spender) || getApproved(tokenId) == 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 {} } 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); } } 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. * * WARNING: You should avoid using leaf values that are 64 bytes long prior to * hashing, or use a hash function other than keccak256 for hashing leaves. * This is because the concatenation of a sorted pair of internal nodes in * the merkle tree could be reinterpreted as a leaf value. */ 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 Merkle 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.16; contract BONSAI is ERC721, Ownable { using Strings for uint256; //////////////////////////////////////////////////////////////////////////////////// // Constant & variable //////////////////////////////////////////////////////////////////////////////////// // Detail uint public wl1Price; uint public wl2Price; uint public pbPrice; uint public wl1StrTime; uint public wl1EndTime; uint public wl2StrTime; uint public wl2EndTime; uint public pbStrTime; uint public pbEndTime; uint public maxMintCount; // Token property uint public mintCount; string private CID; // Purchase address payable public depositAddress; // WhiteList bytes32 private wl1MerkleRoot; bytes32 private wl2MerkleRoot; mapping(address => uint) public mintedList; // Reveal uint public revealTime1; uint public revealTime2; uint public revealTime3; string private revealCID1; string private revealCID2; string private revealCID3; constructor( address payable _depositAddress, string memory _CID, string memory _revealCID1, string memory _revealCID2, string memory _revealCID3, uint _wl1Price, uint _wl2Price, uint _pbPrice, uint _maxMintCount ) ERC721("BONSAI NFT FARM", "BNF") { depositAddress = _depositAddress; CID = _CID; revealCID1 = _revealCID1; revealCID2 = _revealCID2; revealCID3 = _revealCID3; wl1Price = _wl1Price; wl2Price = _wl2Price; pbPrice = _pbPrice; maxMintCount = _maxMintCount; } //////////////////////////////////////////////////////////////////////////////////// // User Function //////////////////////////////////////////////////////////////////////////////////// function Mint(bytes32[] memory proof, uint _upperLimit, uint _amount) external payable { require((mintCount + _amount) <= maxMintCount, "Beyond Max Supply"); // Check section uint price; uint _section = GetRoundSection(); if (_section == 1) { // Whitelist check("address,x" x=UpperLimit) require(CheckValidityPlusLimit(proof, wl1MerkleRoot, _upperLimit), "Not on the whitelist"); // Upperlimit check require((_amount + mintedList[msg.sender]) <= _upperLimit, "Cannot purchase more than the limit"); price = wl1Price * _amount; } else if (_section == 2) { // Whitelist check("address") require(CheckValidity(proof, wl2MerkleRoot), "Not on the whitelist"); price = wl2Price * _amount; } else if (_section == 3) { price = pbPrice * _amount; } else if (_section == 9) { require(false, "Not a sale period"); } require(price <= msg.value, "Not enough funds"); // Transfer depositAddress.transfer(address(this).balance); // Mint for(uint i = 0; i < _amount; ++i) { mintCount += 1; mintedList[msg.sender] += 1; _safeMint(msg.sender, mintCount); } } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { if (block.timestamp < revealTime1) { return string(abi.encodePacked(revealCID1)); } else if (block.timestamp < revealTime2) { return string(abi.encodePacked(revealCID2)); } else if (block.timestamp < revealTime3) { return string(abi.encodePacked(revealCID3)); } return string(abi.encodePacked(CID, "/", Strings.toString(tokenId), ".json")); } function Burn(uint _tokenId) external { require(_exists(_tokenId), "Not exists"); require((msg.sender == ownerOf(_tokenId)) || (msg.sender == owner()), "Not owner"); _burn(_tokenId); } // wl1:1, wl2:2, public:3, other:9 function GetRoundSection() public view returns (uint) { if (wl1StrTime < block.timestamp && block.timestamp < wl1EndTime) { return 1; } else if (wl2StrTime < block.timestamp && block.timestamp < wl2EndTime) { return 2; } else if (pbStrTime < block.timestamp && block.timestamp < pbEndTime) { return 3; } return 9; } //////////////////////////////////////////////////////////////////////////////////// // Owner Function //////////////////////////////////////////////////////////////////////////////////// function OwnerMint(address _toAddress, uint _amount) public onlyOwner { for(uint i = 0; i < _amount; ++i) { mintCount += 1; _safeMint(_toAddress, mintCount); } } function BulkMint(address[] memory _toAddress, uint[] memory _amount) external onlyOwner { for(uint i = 0; i < _toAddress.length; ++i) { OwnerMint(_toAddress[i], _amount[i]); } } function SetPrice(uint256 _wl1Price, uint256 _wl2Price, uint256 _pbPrice) external onlyOwner { wl1Price = _wl1Price; wl2Price= _wl2Price; pbPrice = _pbPrice; } function SetCID(string memory _CID) external onlyOwner { CID = _CID; } function SetMaxMintCount(uint256 _amount) external onlyOwner { require(mintCount <= _amount, "Now mintCount <= _amount"); maxMintCount = _amount; } function SetRoundSection( uint256 _wl1StrTime, uint256 _wl1EndTime, uint256 _wl2StrTime, uint256 _wl2EndTime, uint256 _pbStrTime, uint256 _pbEndTime) external onlyOwner { wl1StrTime = _wl1StrTime; wl1EndTime = _wl1EndTime; wl2StrTime = _wl2StrTime; wl2EndTime = _wl2EndTime; pbStrTime = _pbStrTime; pbEndTime = _pbEndTime; } function SetRevealTime(uint256 _revealTime1, uint256 _revealTime2, uint256 _revealTime3) external onlyOwner { revealTime1 = _revealTime1; revealTime2 = _revealTime2; revealTime3 = _revealTime3; } function SetWhitelist1(bytes32 _merkleRoot) external onlyOwner { wl1MerkleRoot = _merkleRoot; } function SetWhitelist2(bytes32 _merkleRoot) external onlyOwner { wl2MerkleRoot = _merkleRoot; } //////////////////////////////////////////////////////////////////////////////////// // Private Function //////////////////////////////////////////////////////////////////////////////////// function CheckValidity(bytes32[] memory proof, bytes32 merkleRoot) private view returns (bool) { return MerkleProof.verify(proof, merkleRoot, keccak256(abi.encodePacked(msg.sender))); } function CheckValidityPlusLimit(bytes32[] memory proof, bytes32 merkleRoot, uint _upperLimit) private view returns (bool) { string memory tmpLeaf = string.concat(Strings.toHexString(uint160(msg.sender)), ',', _upperLimit.toString()); return MerkleProof.verify(proof, merkleRoot, keccak256(abi.encodePacked(tmpLeaf))); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address payable","name":"_depositAddress","type":"address"},{"internalType":"string","name":"_CID","type":"string"},{"internalType":"string","name":"_revealCID1","type":"string"},{"internalType":"string","name":"_revealCID2","type":"string"},{"internalType":"string","name":"_revealCID3","type":"string"},{"internalType":"uint256","name":"_wl1Price","type":"uint256"},{"internalType":"uint256","name":"_wl2Price","type":"uint256"},{"internalType":"uint256","name":"_pbPrice","type":"uint256"},{"internalType":"uint256","name":"_maxMintCount","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"_toAddress","type":"address[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"}],"name":"BulkMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"GetRoundSection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"uint256","name":"_upperLimit","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"Mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_toAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"OwnerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_CID","type":"string"}],"name":"SetCID","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"SetMaxMintCount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_wl1Price","type":"uint256"},{"internalType":"uint256","name":"_wl2Price","type":"uint256"},{"internalType":"uint256","name":"_pbPrice","type":"uint256"}],"name":"SetPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_revealTime1","type":"uint256"},{"internalType":"uint256","name":"_revealTime2","type":"uint256"},{"internalType":"uint256","name":"_revealTime3","type":"uint256"}],"name":"SetRevealTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_wl1StrTime","type":"uint256"},{"internalType":"uint256","name":"_wl1EndTime","type":"uint256"},{"internalType":"uint256","name":"_wl2StrTime","type":"uint256"},{"internalType":"uint256","name":"_wl2EndTime","type":"uint256"},{"internalType":"uint256","name":"_pbStrTime","type":"uint256"},{"internalType":"uint256","name":"_pbEndTime","type":"uint256"}],"name":"SetRoundSection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"SetWhitelist1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"SetWhitelist2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"depositAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintedList","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":[],"name":"pbEndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pbPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pbStrTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealTime1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revealTime2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revealTime3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"wl1EndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wl1Price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wl1StrTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wl2EndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wl2Price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wl2StrTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620059833803806200598383398181016040528101906200003791906200049e565b6040518060400160405280600f81526020017f424f4e534149204e4654204641524d00000000000000000000000000000000008152506040518060400160405280600381526020017f424e4600000000000000000000000000000000000000000000000000000000008152508160009081620000b491906200083a565b508060019081620000c691906200083a565b505050620000e9620000dd6200019d60201b60201c565b620001a560201b60201c565b88601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087601290816200013b91906200083a565b5086601a90816200014d91906200083a565b5085601b90816200015f91906200083a565b5084601c90816200017191906200083a565b508360078190555082600881905550816009819055508060108190555050505050505050505062000921565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002ac826200027f565b9050919050565b620002be816200029f565b8114620002ca57600080fd5b50565b600081519050620002de81620002b3565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200033982620002ee565b810181811067ffffffffffffffff821117156200035b576200035a620002ff565b5b80604052505050565b6000620003706200026b565b90506200037e82826200032e565b919050565b600067ffffffffffffffff821115620003a157620003a0620002ff565b5b620003ac82620002ee565b9050602081019050919050565b60005b83811015620003d9578082015181840152602081019050620003bc565b60008484015250505050565b6000620003fc620003f68462000383565b62000364565b9050828152602081018484840111156200041b576200041a620002e9565b5b62000428848285620003b9565b509392505050565b600082601f830112620004485762000447620002e4565b5b81516200045a848260208601620003e5565b91505092915050565b6000819050919050565b620004788162000463565b81146200048457600080fd5b50565b60008151905062000498816200046d565b92915050565b60008060008060008060008060006101208a8c031215620004c457620004c362000275565b5b6000620004d48c828d01620002cd565b99505060208a015167ffffffffffffffff811115620004f857620004f76200027a565b5b620005068c828d0162000430565b98505060408a015167ffffffffffffffff8111156200052a57620005296200027a565b5b620005388c828d0162000430565b97505060608a015167ffffffffffffffff8111156200055c576200055b6200027a565b5b6200056a8c828d0162000430565b96505060808a015167ffffffffffffffff8111156200058e576200058d6200027a565b5b6200059c8c828d0162000430565b95505060a0620005af8c828d0162000487565b94505060c0620005c28c828d0162000487565b93505060e0620005d58c828d0162000487565b925050610100620005e98c828d0162000487565b9150509295985092959850929598565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200064c57607f821691505b60208210810362000662576200066162000604565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620006cc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200068d565b620006d886836200068d565b95508019841693508086168417925050509392505050565b6000819050919050565b60006200071b620007156200070f8462000463565b620006f0565b62000463565b9050919050565b6000819050919050565b6200073783620006fa565b6200074f620007468262000722565b8484546200069a565b825550505050565b600090565b6200076662000757565b620007738184846200072c565b505050565b5b818110156200079b576200078f6000826200075c565b60018101905062000779565b5050565b601f821115620007ea57620007b48162000668565b620007bf846200067d565b81016020851015620007cf578190505b620007e7620007de856200067d565b83018262000778565b50505b505050565b600082821c905092915050565b60006200080f60001984600802620007ef565b1980831691505092915050565b60006200082a8383620007fc565b9150826002028217905092915050565b6200084582620005f9565b67ffffffffffffffff811115620008615762000860620002ff565b5b6200086d825462000633565b6200087a8282856200079f565b600060209050601f831160018114620008b257600084156200089d578287015190505b620008a985826200081c565b86555062000919565b601f198416620008c28662000668565b60005b82811015620008ec57848901518255600182019150602085019450602081019050620008c5565b868310156200090c578489015162000908601f891682620007fc565b8355505b6001600288020188555050505b505050505050565b61505280620009316000396000f3fe6080604052600436106102675760003560e01c80638339abaa11610144578063c4a972c2116100b6578063ef3a3ea31161007a578063ef3a3ea314610911578063f1e8235b1461093c578063f2fde38b14610965578063f69556741461098e578063f7d27991146109b7578063ffcd17f4146109e057610267565b8063c4a972c214610818578063c87b56dd14610843578063cbb33ed214610880578063e2bb9dbc146108ab578063e985e9c5146108d457610267565b80639659867e116101085780639659867e1461071c57806398854c7714610747578063a22cb46514610772578063b88d4fde1461079b578063b8fe9349146107c4578063b90306ad146107ef57610267565b80638339abaa146106475780638da5cb5b14610672578063937936081461069d57806395d89b41146106c8578063964109d9146106f357610267565b806341921eb2116101dd5780636352211e116101a15780636352211e146105255780636bd798301461056257806370a082311461058d578063715018a6146105ca57806376dcb19d146105e1578063816877301461060a57610267565b806341921eb21461045257806342842e0e1461047b578063470f7039146104a45780635e643413146104cf57806362f61747146104fa57610267565b806318f719551161022f57806318f719551461036357806323b872dd1461038e57806328053f80146103b757806328f833b7146103e057806332c60eef1461040b57806337f811671461043657610267565b806301ffc9a71461026c57806306fdde03146102a9578063081812fc146102d4578063095ea7b31461031157806318e75bb81461033a575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e91906130ea565b610a0b565b6040516102a09190613132565b60405180910390f35b3480156102b557600080fd5b506102be610aed565b6040516102cb91906131dd565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190613235565b610b7f565b60405161030891906132a3565b60405180910390f35b34801561031d57600080fd5b50610338600480360381019061033391906132ea565b610c04565b005b34801561034657600080fd5b50610361600480360381019061035c919061332a565b610d1b565b005b34801561036f57600080fd5b50610378610db1565b604051610385919061338c565b60405180910390f35b34801561039a57600080fd5b506103b560048036038101906103b091906133a7565b610db7565b005b3480156103c357600080fd5b506103de60048036038101906103d991906133fa565b610e17565b005b3480156103ec57600080fd5b506103f5610ec5565b60405161040291906134a8565b60405180910390f35b34801561041757600080fd5b50610420610eeb565b60405161042d919061338c565b60405180910390f35b610450600480360381019061044b9190613641565b610ef1565b005b34801561045e57600080fd5b506104796004803603810190610474919061332a565b611265565b005b34801561048757600080fd5b506104a2600480360381019061049d91906133a7565b6112fb565b005b3480156104b057600080fd5b506104b961131b565b6040516104c6919061338c565b60405180910390f35b3480156104db57600080fd5b506104e4611321565b6040516104f1919061338c565b60405180910390f35b34801561050657600080fd5b5061050f611327565b60405161051c919061338c565b60405180910390f35b34801561053157600080fd5b5061054c60048036038101906105479190613235565b61132d565b60405161055991906132a3565b60405180910390f35b34801561056e57600080fd5b506105776113de565b604051610584919061338c565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af91906136b0565b6113e4565b6040516105c1919061338c565b60405180910390f35b3480156105d657600080fd5b506105df61149b565b005b3480156105ed57600080fd5b50610608600480360381019061060391906132ea565b611523565b005b34801561061657600080fd5b50610631600480360381019061062c91906136b0565b6115e6565b60405161063e919061338c565b60405180910390f35b34801561065357600080fd5b5061065c6115fe565b604051610669919061338c565b60405180910390f35b34801561067e57600080fd5b50610687611604565b60405161069491906132a3565b60405180910390f35b3480156106a957600080fd5b506106b261162e565b6040516106bf919061338c565b60405180910390f35b3480156106d457600080fd5b506106dd611698565b6040516106ea91906131dd565b60405180910390f35b3480156106ff57600080fd5b5061071a60048036038101906107159190613863565b61172a565b005b34801561072857600080fd5b50610731611806565b60405161073e919061338c565b60405180910390f35b34801561075357600080fd5b5061075c61180c565b604051610769919061338c565b60405180910390f35b34801561077e57600080fd5b5061079960048036038101906107949190613907565b611812565b005b3480156107a757600080fd5b506107c260048036038101906107bd91906139fc565b611828565b005b3480156107d057600080fd5b506107d961188a565b6040516107e6919061338c565b60405180910390f35b3480156107fb57600080fd5b5061081660048036038101906108119190613235565b611890565b005b34801561082457600080fd5b5061082d611997565b60405161083a919061338c565b60405180910390f35b34801561084f57600080fd5b5061086a60048036038101906108659190613235565b61199d565b60405161087791906131dd565b60405180910390f35b34801561088c57600080fd5b50610895611a68565b6040516108a2919061338c565b60405180910390f35b3480156108b757600080fd5b506108d260048036038101906108cd9190613a7f565b611a6e565b005b3480156108e057600080fd5b506108fb60048036038101906108f69190613aac565b611af4565b6040516109089190613132565b60405180910390f35b34801561091d57600080fd5b50610926611b88565b604051610933919061338c565b60405180910390f35b34801561094857600080fd5b50610963600480360381019061095e9190613235565b611b8e565b005b34801561097157600080fd5b5061098c600480360381019061098791906136b0565b611c59565b005b34801561099a57600080fd5b506109b560048036038101906109b09190613b8d565b611d50565b005b3480156109c357600080fd5b506109de60048036038101906109d99190613a7f565b611ddf565b005b3480156109ec57600080fd5b506109f5611e65565b604051610a02919061338c565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ad657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ae65750610ae582611e6b565b5b9050919050565b606060008054610afc90613c05565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2890613c05565b8015610b755780601f10610b4a57610100808354040283529160200191610b75565b820191906000526020600020905b815481529060010190602001808311610b5857829003601f168201915b5050505050905090565b6000610b8a82611ed5565b610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090613ca8565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c0f8261132d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7690613d3a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c9e611f41565b73ffffffffffffffffffffffffffffffffffffffff161480610ccd5750610ccc81610cc7611f41565b611af4565b5b610d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0390613dcc565b60405180910390fd5b610d168383611f49565b505050565b610d23611f41565b73ffffffffffffffffffffffffffffffffffffffff16610d41611604565b73ffffffffffffffffffffffffffffffffffffffff1614610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e90613e38565b60405180910390fd5b826007819055508160088190555080600981905550505050565b60195481565b610dc8610dc2611f41565b82612002565b610e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfe90613eca565b60405180910390fd5b610e128383836120e0565b505050565b610e1f611f41565b73ffffffffffffffffffffffffffffffffffffffff16610e3d611604565b73ffffffffffffffffffffffffffffffffffffffff1614610e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8a90613e38565b60405180910390fd5b85600a8190555084600b8190555083600c8190555082600d8190555081600e8190555080600f81905550505050505050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b60105481601154610f029190613f19565b1115610f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3a90613f99565b60405180910390fd5b600080610f4e61162e565b90506001810361104657610f658560145486612346565b610fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9b90614005565b60405180910390fd5b83601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484610ff09190613f19565b1115611031576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102890614097565b60405180910390fd5b8260075461103f91906140b7565b9150611118565b600281036110ae5761105a856015546123ce565b611099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109090614005565b60405180910390fd5b826008546110a791906140b7565b9150611117565b600381036110cb57826009546110c491906140b7565b9150611116565b60098103611115576000611114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110b9061415d565b60405180910390fd5b5b5b5b5b3482111561115b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611152906141c9565b60405180910390fd5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156111c3573d6000803e3d6000fd5b5060005b8381101561125d576001601160008282546111e29190613f19565b925050819055506001601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112399190613f19565b9250508190555061124c33601154612409565b80611256906141e9565b90506111c7565b505050505050565b61126d611f41565b73ffffffffffffffffffffffffffffffffffffffff1661128b611604565b73ffffffffffffffffffffffffffffffffffffffff16146112e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d890613e38565b60405180910390fd5b826017819055508160188190555080601981905550505050565b61131683838360405180602001604052806000815250611828565b505050565b600f5481565b600a5481565b60095481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036113d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cc906142a3565b60405180910390fd5b80915050919050565b600d5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611454576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144b90614335565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114a3611f41565b73ffffffffffffffffffffffffffffffffffffffff166114c1611604565b73ffffffffffffffffffffffffffffffffffffffff1614611517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150e90613e38565b60405180910390fd5b6115216000612427565b565b61152b611f41565b73ffffffffffffffffffffffffffffffffffffffff16611549611604565b73ffffffffffffffffffffffffffffffffffffffff161461159f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159690613e38565b60405180910390fd5b60005b818110156115e1576001601160008282546115bd9190613f19565b925050819055506115d083601154612409565b806115da906141e9565b90506115a2565b505050565b60166020528060005260406000206000915090505481565b60175481565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600042600a541080156116425750600b5442105b156116505760019050611695565b42600c541080156116625750600d5442105b156116705760029050611695565b42600e541080156116825750600f5442105b156116905760039050611695565b600990505b90565b6060600180546116a790613c05565b80601f01602080910402602001604051908101604052809291908181526020018280546116d390613c05565b80156117205780601f106116f557610100808354040283529160200191611720565b820191906000526020600020905b81548152906001019060200180831161170357829003601f168201915b5050505050905090565b611732611f41565b73ffffffffffffffffffffffffffffffffffffffff16611750611604565b73ffffffffffffffffffffffffffffffffffffffff16146117a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179d90613e38565b60405180910390fd5b60005b8251811015611801576117f08382815181106117c8576117c7614355565b5b60200260200101518383815181106117e3576117e2614355565b5b6020026020010151611523565b806117fa906141e9565b90506117a9565b505050565b60115481565b600e5481565b61182461181d611f41565b83836124ed565b5050565b611839611833611f41565b83612002565b611878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186f90613eca565b60405180910390fd5b61188484848484612659565b50505050565b60085481565b61189981611ed5565b6118d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cf906143d0565b60405180910390fd5b6118e18161132d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061194c575061191d611604565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61198b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119829061443c565b60405180910390fd5b611994816126b5565b50565b60075481565b60606017544210156119d157601a6040516020016119bb91906144ff565b6040516020818303038152906040529050611a63565b601854421015611a0357601b6040516020016119ed91906144ff565b6040516020818303038152906040529050611a63565b601954421015611a3557601c604051602001611a1f91906144ff565b6040516020818303038152906040529050611a63565b6012611a40836127d2565b604051602001611a519291906145df565b60405160208183030381529060405290505b919050565b600c5481565b611a76611f41565b73ffffffffffffffffffffffffffffffffffffffff16611a94611604565b73ffffffffffffffffffffffffffffffffffffffff1614611aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae190613e38565b60405180910390fd5b8060158190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600b5481565b611b96611f41565b73ffffffffffffffffffffffffffffffffffffffff16611bb4611604565b73ffffffffffffffffffffffffffffffffffffffff1614611c0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0190613e38565b60405180910390fd5b806011541115611c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4690614665565b60405180910390fd5b8060108190555050565b611c61611f41565b73ffffffffffffffffffffffffffffffffffffffff16611c7f611604565b73ffffffffffffffffffffffffffffffffffffffff1614611cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccc90613e38565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3b906146f7565b60405180910390fd5b611d4d81612427565b50565b611d58611f41565b73ffffffffffffffffffffffffffffffffffffffff16611d76611604565b73ffffffffffffffffffffffffffffffffffffffff1614611dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc390613e38565b60405180910390fd5b8060129081611ddb91906148ae565b5050565b611de7611f41565b73ffffffffffffffffffffffffffffffffffffffff16611e05611604565b73ffffffffffffffffffffffffffffffffffffffff1614611e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5290613e38565b60405180910390fd5b8060148190555050565b60185481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611fbc8361132d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061200d82611ed5565b61204c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612043906149f2565b60405180910390fd5b60006120578361132d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061209957506120988185611af4565b5b806120d757508373ffffffffffffffffffffffffffffffffffffffff166120bf84610b7f565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166121008261132d565b73ffffffffffffffffffffffffffffffffffffffff1614612156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214d90614a84565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bc90614b16565b60405180910390fd5b6121d0838383612932565b6121db600082611f49565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461222b9190614b36565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122829190613f19565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612341838383612937565b505050565b6000806123683373ffffffffffffffffffffffffffffffffffffffff1661293c565b612371846127d2565b604051602001612382929190614b90565b60405160208183030381529060405290506123c48585836040516020016123a99190614bc3565b604051602081830303815290604052805190602001206129c1565b9150509392505050565b60006124018383336040516020016123e69190614c22565b604051602081830303815290604052805190602001206129c1565b905092915050565b6124238282604051806020016040528060008152506129d8565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361255b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255290614c89565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161264c9190613132565b60405180910390a3505050565b6126648484846120e0565b61267084848484612a33565b6126af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a690614d1b565b60405180910390fd5b50505050565b60006126c08261132d565b90506126ce81600084612932565b6126d9600083611f49565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127299190614b36565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127ce81600084612937565b5050565b606060008203612819576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061292d565b600082905060005b6000821461284b578080612834906141e9565b915050600a826128449190614d6a565b9150612821565b60008167ffffffffffffffff811115612867576128666134c8565b5b6040519080825280601f01601f1916602001820160405280156128995781602001600182028036833780820191505090505b5090505b60008514612926576001826128b29190614b36565b9150600a856128c19190614d9b565b60306128cd9190613f19565b60f81b8183815181106128e3576128e2614355565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561291f9190614d6a565b945061289d565b8093505050505b919050565b505050565b505050565b606060008203612983576040518060400160405280600481526020017f307830300000000000000000000000000000000000000000000000000000000081525090506129bc565b600082905060005b600082146129ad57808061299e906141e9565b915050600882901c915061298b565b6129b78482612bba565b925050505b919050565b6000826129ce8584612df6565b1490509392505050565b6129e28383612e6b565b6129ef6000848484612a33565b612a2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2590614d1b565b60405180910390fd5b505050565b6000612a548473ffffffffffffffffffffffffffffffffffffffff16613044565b15612bad578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a7d611f41565b8786866040518563ffffffff1660e01b8152600401612a9f9493929190614e21565b6020604051808303816000875af1925050508015612adb57506040513d601f19601f82011682018060405250810190612ad89190614e82565b60015b612b5d573d8060008114612b0b576040519150601f19603f3d011682016040523d82523d6000602084013e612b10565b606091505b506000815103612b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4c90614d1b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612bb2565b600190505b949350505050565b606060006002836002612bcd91906140b7565b612bd79190613f19565b67ffffffffffffffff811115612bf057612bef6134c8565b5b6040519080825280601f01601f191660200182016040528015612c225781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612c5a57612c59614355565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612cbe57612cbd614355565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002612cfe91906140b7565b612d089190613f19565b90505b6001811115612da8577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110612d4a57612d49614355565b5b1a60f81b828281518110612d6157612d60614355565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080612da190614eaf565b9050612d0b565b5060008414612dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de390614f24565b60405180910390fd5b8091505092915050565b60008082905060005b8451811015612e60576000858281518110612e1d57612e1c614355565b5b60200260200101519050808311612e3f57612e388382613067565b9250612e4c565b612e498184613067565b92505b508080612e58906141e9565b915050612dff565b508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed190614f90565b60405180910390fd5b612ee381611ed5565b15612f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1a90614ffc565b60405180910390fd5b612f2f60008383612932565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f7f9190613f19565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461304060008383612937565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6130c781613092565b81146130d257600080fd5b50565b6000813590506130e4816130be565b92915050565b600060208284031215613100576130ff613088565b5b600061310e848285016130d5565b91505092915050565b60008115159050919050565b61312c81613117565b82525050565b60006020820190506131476000830184613123565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561318757808201518184015260208101905061316c565b60008484015250505050565b6000601f19601f8301169050919050565b60006131af8261314d565b6131b98185613158565b93506131c9818560208601613169565b6131d281613193565b840191505092915050565b600060208201905081810360008301526131f781846131a4565b905092915050565b6000819050919050565b613212816131ff565b811461321d57600080fd5b50565b60008135905061322f81613209565b92915050565b60006020828403121561324b5761324a613088565b5b600061325984828501613220565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061328d82613262565b9050919050565b61329d81613282565b82525050565b60006020820190506132b86000830184613294565b92915050565b6132c781613282565b81146132d257600080fd5b50565b6000813590506132e4816132be565b92915050565b6000806040838503121561330157613300613088565b5b600061330f858286016132d5565b925050602061332085828601613220565b9150509250929050565b60008060006060848603121561334357613342613088565b5b600061335186828701613220565b935050602061336286828701613220565b925050604061337386828701613220565b9150509250925092565b613386816131ff565b82525050565b60006020820190506133a1600083018461337d565b92915050565b6000806000606084860312156133c0576133bf613088565b5b60006133ce868287016132d5565b93505060206133df868287016132d5565b92505060406133f086828701613220565b9150509250925092565b60008060008060008060c0878903121561341757613416613088565b5b600061342589828a01613220565b965050602061343689828a01613220565b955050604061344789828a01613220565b945050606061345889828a01613220565b935050608061346989828a01613220565b92505060a061347a89828a01613220565b9150509295509295509295565b600061349282613262565b9050919050565b6134a281613487565b82525050565b60006020820190506134bd6000830184613499565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61350082613193565b810181811067ffffffffffffffff8211171561351f5761351e6134c8565b5b80604052505050565b600061353261307e565b905061353e82826134f7565b919050565b600067ffffffffffffffff82111561355e5761355d6134c8565b5b602082029050602081019050919050565b600080fd5b6000819050919050565b61358781613574565b811461359257600080fd5b50565b6000813590506135a48161357e565b92915050565b60006135bd6135b884613543565b613528565b905080838252602082019050602084028301858111156135e0576135df61356f565b5b835b8181101561360957806135f58882613595565b8452602084019350506020810190506135e2565b5050509392505050565b600082601f830112613628576136276134c3565b5b81356136388482602086016135aa565b91505092915050565b60008060006060848603121561365a57613659613088565b5b600084013567ffffffffffffffff8111156136785761367761308d565b5b61368486828701613613565b935050602061369586828701613220565b92505060406136a686828701613220565b9150509250925092565b6000602082840312156136c6576136c5613088565b5b60006136d4848285016132d5565b91505092915050565b600067ffffffffffffffff8211156136f8576136f76134c8565b5b602082029050602081019050919050565b600061371c613717846136dd565b613528565b9050808382526020820190506020840283018581111561373f5761373e61356f565b5b835b81811015613768578061375488826132d5565b845260208401935050602081019050613741565b5050509392505050565b600082601f830112613787576137866134c3565b5b8135613797848260208601613709565b91505092915050565b600067ffffffffffffffff8211156137bb576137ba6134c8565b5b602082029050602081019050919050565b60006137df6137da846137a0565b613528565b905080838252602082019050602084028301858111156138025761380161356f565b5b835b8181101561382b57806138178882613220565b845260208401935050602081019050613804565b5050509392505050565b600082601f83011261384a576138496134c3565b5b813561385a8482602086016137cc565b91505092915050565b6000806040838503121561387a57613879613088565b5b600083013567ffffffffffffffff8111156138985761389761308d565b5b6138a485828601613772565b925050602083013567ffffffffffffffff8111156138c5576138c461308d565b5b6138d185828601613835565b9150509250929050565b6138e481613117565b81146138ef57600080fd5b50565b600081359050613901816138db565b92915050565b6000806040838503121561391e5761391d613088565b5b600061392c858286016132d5565b925050602061393d858286016138f2565b9150509250929050565b600080fd5b600067ffffffffffffffff821115613967576139666134c8565b5b61397082613193565b9050602081019050919050565b82818337600083830152505050565b600061399f61399a8461394c565b613528565b9050828152602081018484840111156139bb576139ba613947565b5b6139c684828561397d565b509392505050565b600082601f8301126139e3576139e26134c3565b5b81356139f384826020860161398c565b91505092915050565b60008060008060808587031215613a1657613a15613088565b5b6000613a24878288016132d5565b9450506020613a35878288016132d5565b9350506040613a4687828801613220565b925050606085013567ffffffffffffffff811115613a6757613a6661308d565b5b613a73878288016139ce565b91505092959194509250565b600060208284031215613a9557613a94613088565b5b6000613aa384828501613595565b91505092915050565b60008060408385031215613ac357613ac2613088565b5b6000613ad1858286016132d5565b9250506020613ae2858286016132d5565b9150509250929050565b600067ffffffffffffffff821115613b0757613b066134c8565b5b613b1082613193565b9050602081019050919050565b6000613b30613b2b84613aec565b613528565b905082815260208101848484011115613b4c57613b4b613947565b5b613b5784828561397d565b509392505050565b600082601f830112613b7457613b736134c3565b5b8135613b84848260208601613b1d565b91505092915050565b600060208284031215613ba357613ba2613088565b5b600082013567ffffffffffffffff811115613bc157613bc061308d565b5b613bcd84828501613b5f565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613c1d57607f821691505b602082108103613c3057613c2f613bd6565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613c92602c83613158565b9150613c9d82613c36565b604082019050919050565b60006020820190508181036000830152613cc181613c85565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d24602183613158565b9150613d2f82613cc8565b604082019050919050565b60006020820190508181036000830152613d5381613d17565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613db6603883613158565b9150613dc182613d5a565b604082019050919050565b60006020820190508181036000830152613de581613da9565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613e22602083613158565b9150613e2d82613dec565b602082019050919050565b60006020820190508181036000830152613e5181613e15565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613eb4603183613158565b9150613ebf82613e58565b604082019050919050565b60006020820190508181036000830152613ee381613ea7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613f24826131ff565b9150613f2f836131ff565b9250828201905080821115613f4757613f46613eea565b5b92915050565b7f4265796f6e64204d617820537570706c79000000000000000000000000000000600082015250565b6000613f83601183613158565b9150613f8e82613f4d565b602082019050919050565b60006020820190508181036000830152613fb281613f76565b9050919050565b7f4e6f74206f6e207468652077686974656c697374000000000000000000000000600082015250565b6000613fef601483613158565b9150613ffa82613fb9565b602082019050919050565b6000602082019050818103600083015261401e81613fe2565b9050919050565b7f43616e6e6f74207075726368617365206d6f7265207468616e20746865206c6960008201527f6d69740000000000000000000000000000000000000000000000000000000000602082015250565b6000614081602383613158565b915061408c82614025565b604082019050919050565b600060208201905081810360008301526140b081614074565b9050919050565b60006140c2826131ff565b91506140cd836131ff565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561410657614105613eea565b5b828202905092915050565b7f4e6f7420612073616c6520706572696f64000000000000000000000000000000600082015250565b6000614147601183613158565b915061415282614111565b602082019050919050565b600060208201905081810360008301526141768161413a565b9050919050565b7f4e6f7420656e6f7567682066756e647300000000000000000000000000000000600082015250565b60006141b3601083613158565b91506141be8261417d565b602082019050919050565b600060208201905081810360008301526141e2816141a6565b9050919050565b60006141f4826131ff565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361422657614225613eea565b5b600182019050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b600061428d602983613158565b915061429882614231565b604082019050919050565b600060208201905081810360008301526142bc81614280565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600061431f602a83613158565b915061432a826142c3565b604082019050919050565b6000602082019050818103600083015261434e81614312565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e6f742065786973747300000000000000000000000000000000000000000000600082015250565b60006143ba600a83613158565b91506143c582614384565b602082019050919050565b600060208201905081810360008301526143e9816143ad565b9050919050565b7f4e6f74206f776e65720000000000000000000000000000000000000000000000600082015250565b6000614426600983613158565b9150614431826143f0565b602082019050919050565b6000602082019050818103600083015261445581614419565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b6000815461448981613c05565b614493818661445c565b945060018216600081146144ae57600181146144c3576144f6565b60ff19831686528115158202860193506144f6565b6144cc85614467565b60005b838110156144ee578154818901526001820191506020810190506144cf565b838801955050505b50505092915050565b600061450b828461447c565b915081905092915050565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b600061454c60018361445c565b915061455782614516565b600182019050919050565b600061456d8261314d565b614577818561445c565b9350614587818560208601613169565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b60006145c960058361445c565b91506145d482614593565b600582019050919050565b60006145eb828561447c565b91506145f68261453f565b91506146028284614562565b915061460d826145bc565b91508190509392505050565b7f4e6f77206d696e74436f756e74203c3d205f616d6f756e740000000000000000600082015250565b600061464f601883613158565b915061465a82614619565b602082019050919050565b6000602082019050818103600083015261467e81614642565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006146e1602683613158565b91506146ec82614685565b604082019050919050565b60006020820190508181036000830152614710816146d4565b9050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026147647fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614727565b61476e8683614727565b95508019841693508086168417925050509392505050565b6000819050919050565b60006147ab6147a66147a1846131ff565b614786565b6131ff565b9050919050565b6000819050919050565b6147c583614790565b6147d96147d1826147b2565b848454614734565b825550505050565b600090565b6147ee6147e1565b6147f98184846147bc565b505050565b5b8181101561481d576148126000826147e6565b6001810190506147ff565b5050565b601f8211156148625761483381614467565b61483c84614717565b8101602085101561484b578190505b61485f61485785614717565b8301826147fe565b50505b505050565b600082821c905092915050565b600061488560001984600802614867565b1980831691505092915050565b600061489e8383614874565b9150826002028217905092915050565b6148b78261314d565b67ffffffffffffffff8111156148d0576148cf6134c8565b5b6148da8254613c05565b6148e5828285614821565b600060209050601f8311600181146149185760008415614906578287015190505b6149108582614892565b865550614978565b601f19841661492686614467565b60005b8281101561494e57848901518255600182019150602085019450602081019050614929565b8683101561496b5784890151614967601f891682614874565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006149dc602c83613158565b91506149e782614980565b604082019050919050565b60006020820190508181036000830152614a0b816149cf565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000614a6e602583613158565b9150614a7982614a12565b604082019050919050565b60006020820190508181036000830152614a9d81614a61565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614b00602483613158565b9150614b0b82614aa4565b604082019050919050565b60006020820190508181036000830152614b2f81614af3565b9050919050565b6000614b41826131ff565b9150614b4c836131ff565b9250828203905081811115614b6457614b63613eea565b5b92915050565b7f2c00000000000000000000000000000000000000000000000000000000000000815250565b6000614b9c8285614562565b9150614ba782614b6a565b600182019150614bb78284614562565b91508190509392505050565b6000614bcf8284614562565b915081905092915050565b60008160601b9050919050565b6000614bf282614bda565b9050919050565b6000614c0482614be7565b9050919050565b614c1c614c1782613282565b614bf9565b82525050565b6000614c2e8284614c0b565b60148201915081905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614c73601983613158565b9150614c7e82614c3d565b602082019050919050565b60006020820190508181036000830152614ca281614c66565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614d05603283613158565b9150614d1082614ca9565b604082019050919050565b60006020820190508181036000830152614d3481614cf8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614d75826131ff565b9150614d80836131ff565b925082614d9057614d8f614d3b565b5b828204905092915050565b6000614da6826131ff565b9150614db1836131ff565b925082614dc157614dc0614d3b565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b6000614df382614dcc565b614dfd8185614dd7565b9350614e0d818560208601613169565b614e1681613193565b840191505092915050565b6000608082019050614e366000830187613294565b614e436020830186613294565b614e50604083018561337d565b8181036060830152614e628184614de8565b905095945050505050565b600081519050614e7c816130be565b92915050565b600060208284031215614e9857614e97613088565b5b6000614ea684828501614e6d565b91505092915050565b6000614eba826131ff565b915060008203614ecd57614ecc613eea565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000614f0e602083613158565b9150614f1982614ed8565b602082019050919050565b60006020820190508181036000830152614f3d81614f01565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614f7a602083613158565b9150614f8582614f44565b602082019050919050565b60006020820190508181036000830152614fa981614f6d565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614fe6601c83613158565b9150614ff182614fb0565b602082019050919050565b6000602082019050818103600083015261501581614fd9565b905091905056fea264697066735822122056943be799d6dd3b3a3c4a7af95fffc6e2b8eef99abec6a2d6b61d243ed4152364736f6c63430008100033000000000000000000000000a51a5c83f3a412557fc12a168c533401789a30c70000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000470de4df820000000000000000000000000000000000000000000000000000006a94d74f4300000000000000000000000000000000000000000000000000000000000000001f5f0000000000000000000000000000000000000000000000000000000000000007697066733a2f2f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d57723877506d394661427a777443627a65377a667336337a6932393469687955367869386f5361586338717000000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d51446a7a694d4d57743150706442707758446d76474171346a64664c7862625734784e52437632536336593400000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d51446a7a694d4d57743150706442707758446d76474171346a64664c7862625734784e5243763253633659340000000000000000000000
Deployed Bytecode
0x6080604052600436106102675760003560e01c80638339abaa11610144578063c4a972c2116100b6578063ef3a3ea31161007a578063ef3a3ea314610911578063f1e8235b1461093c578063f2fde38b14610965578063f69556741461098e578063f7d27991146109b7578063ffcd17f4146109e057610267565b8063c4a972c214610818578063c87b56dd14610843578063cbb33ed214610880578063e2bb9dbc146108ab578063e985e9c5146108d457610267565b80639659867e116101085780639659867e1461071c57806398854c7714610747578063a22cb46514610772578063b88d4fde1461079b578063b8fe9349146107c4578063b90306ad146107ef57610267565b80638339abaa146106475780638da5cb5b14610672578063937936081461069d57806395d89b41146106c8578063964109d9146106f357610267565b806341921eb2116101dd5780636352211e116101a15780636352211e146105255780636bd798301461056257806370a082311461058d578063715018a6146105ca57806376dcb19d146105e1578063816877301461060a57610267565b806341921eb21461045257806342842e0e1461047b578063470f7039146104a45780635e643413146104cf57806362f61747146104fa57610267565b806318f719551161022f57806318f719551461036357806323b872dd1461038e57806328053f80146103b757806328f833b7146103e057806332c60eef1461040b57806337f811671461043657610267565b806301ffc9a71461026c57806306fdde03146102a9578063081812fc146102d4578063095ea7b31461031157806318e75bb81461033a575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e91906130ea565b610a0b565b6040516102a09190613132565b60405180910390f35b3480156102b557600080fd5b506102be610aed565b6040516102cb91906131dd565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190613235565b610b7f565b60405161030891906132a3565b60405180910390f35b34801561031d57600080fd5b50610338600480360381019061033391906132ea565b610c04565b005b34801561034657600080fd5b50610361600480360381019061035c919061332a565b610d1b565b005b34801561036f57600080fd5b50610378610db1565b604051610385919061338c565b60405180910390f35b34801561039a57600080fd5b506103b560048036038101906103b091906133a7565b610db7565b005b3480156103c357600080fd5b506103de60048036038101906103d991906133fa565b610e17565b005b3480156103ec57600080fd5b506103f5610ec5565b60405161040291906134a8565b60405180910390f35b34801561041757600080fd5b50610420610eeb565b60405161042d919061338c565b60405180910390f35b610450600480360381019061044b9190613641565b610ef1565b005b34801561045e57600080fd5b506104796004803603810190610474919061332a565b611265565b005b34801561048757600080fd5b506104a2600480360381019061049d91906133a7565b6112fb565b005b3480156104b057600080fd5b506104b961131b565b6040516104c6919061338c565b60405180910390f35b3480156104db57600080fd5b506104e4611321565b6040516104f1919061338c565b60405180910390f35b34801561050657600080fd5b5061050f611327565b60405161051c919061338c565b60405180910390f35b34801561053157600080fd5b5061054c60048036038101906105479190613235565b61132d565b60405161055991906132a3565b60405180910390f35b34801561056e57600080fd5b506105776113de565b604051610584919061338c565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af91906136b0565b6113e4565b6040516105c1919061338c565b60405180910390f35b3480156105d657600080fd5b506105df61149b565b005b3480156105ed57600080fd5b50610608600480360381019061060391906132ea565b611523565b005b34801561061657600080fd5b50610631600480360381019061062c91906136b0565b6115e6565b60405161063e919061338c565b60405180910390f35b34801561065357600080fd5b5061065c6115fe565b604051610669919061338c565b60405180910390f35b34801561067e57600080fd5b50610687611604565b60405161069491906132a3565b60405180910390f35b3480156106a957600080fd5b506106b261162e565b6040516106bf919061338c565b60405180910390f35b3480156106d457600080fd5b506106dd611698565b6040516106ea91906131dd565b60405180910390f35b3480156106ff57600080fd5b5061071a60048036038101906107159190613863565b61172a565b005b34801561072857600080fd5b50610731611806565b60405161073e919061338c565b60405180910390f35b34801561075357600080fd5b5061075c61180c565b604051610769919061338c565b60405180910390f35b34801561077e57600080fd5b5061079960048036038101906107949190613907565b611812565b005b3480156107a757600080fd5b506107c260048036038101906107bd91906139fc565b611828565b005b3480156107d057600080fd5b506107d961188a565b6040516107e6919061338c565b60405180910390f35b3480156107fb57600080fd5b5061081660048036038101906108119190613235565b611890565b005b34801561082457600080fd5b5061082d611997565b60405161083a919061338c565b60405180910390f35b34801561084f57600080fd5b5061086a60048036038101906108659190613235565b61199d565b60405161087791906131dd565b60405180910390f35b34801561088c57600080fd5b50610895611a68565b6040516108a2919061338c565b60405180910390f35b3480156108b757600080fd5b506108d260048036038101906108cd9190613a7f565b611a6e565b005b3480156108e057600080fd5b506108fb60048036038101906108f69190613aac565b611af4565b6040516109089190613132565b60405180910390f35b34801561091d57600080fd5b50610926611b88565b604051610933919061338c565b60405180910390f35b34801561094857600080fd5b50610963600480360381019061095e9190613235565b611b8e565b005b34801561097157600080fd5b5061098c600480360381019061098791906136b0565b611c59565b005b34801561099a57600080fd5b506109b560048036038101906109b09190613b8d565b611d50565b005b3480156109c357600080fd5b506109de60048036038101906109d99190613a7f565b611ddf565b005b3480156109ec57600080fd5b506109f5611e65565b604051610a02919061338c565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ad657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ae65750610ae582611e6b565b5b9050919050565b606060008054610afc90613c05565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2890613c05565b8015610b755780601f10610b4a57610100808354040283529160200191610b75565b820191906000526020600020905b815481529060010190602001808311610b5857829003601f168201915b5050505050905090565b6000610b8a82611ed5565b610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090613ca8565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c0f8261132d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7690613d3a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c9e611f41565b73ffffffffffffffffffffffffffffffffffffffff161480610ccd5750610ccc81610cc7611f41565b611af4565b5b610d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0390613dcc565b60405180910390fd5b610d168383611f49565b505050565b610d23611f41565b73ffffffffffffffffffffffffffffffffffffffff16610d41611604565b73ffffffffffffffffffffffffffffffffffffffff1614610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e90613e38565b60405180910390fd5b826007819055508160088190555080600981905550505050565b60195481565b610dc8610dc2611f41565b82612002565b610e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfe90613eca565b60405180910390fd5b610e128383836120e0565b505050565b610e1f611f41565b73ffffffffffffffffffffffffffffffffffffffff16610e3d611604565b73ffffffffffffffffffffffffffffffffffffffff1614610e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8a90613e38565b60405180910390fd5b85600a8190555084600b8190555083600c8190555082600d8190555081600e8190555080600f81905550505050505050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b60105481601154610f029190613f19565b1115610f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3a90613f99565b60405180910390fd5b600080610f4e61162e565b90506001810361104657610f658560145486612346565b610fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9b90614005565b60405180910390fd5b83601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484610ff09190613f19565b1115611031576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102890614097565b60405180910390fd5b8260075461103f91906140b7565b9150611118565b600281036110ae5761105a856015546123ce565b611099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109090614005565b60405180910390fd5b826008546110a791906140b7565b9150611117565b600381036110cb57826009546110c491906140b7565b9150611116565b60098103611115576000611114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110b9061415d565b60405180910390fd5b5b5b5b5b3482111561115b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611152906141c9565b60405180910390fd5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156111c3573d6000803e3d6000fd5b5060005b8381101561125d576001601160008282546111e29190613f19565b925050819055506001601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112399190613f19565b9250508190555061124c33601154612409565b80611256906141e9565b90506111c7565b505050505050565b61126d611f41565b73ffffffffffffffffffffffffffffffffffffffff1661128b611604565b73ffffffffffffffffffffffffffffffffffffffff16146112e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d890613e38565b60405180910390fd5b826017819055508160188190555080601981905550505050565b61131683838360405180602001604052806000815250611828565b505050565b600f5481565b600a5481565b60095481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036113d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cc906142a3565b60405180910390fd5b80915050919050565b600d5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611454576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144b90614335565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114a3611f41565b73ffffffffffffffffffffffffffffffffffffffff166114c1611604565b73ffffffffffffffffffffffffffffffffffffffff1614611517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150e90613e38565b60405180910390fd5b6115216000612427565b565b61152b611f41565b73ffffffffffffffffffffffffffffffffffffffff16611549611604565b73ffffffffffffffffffffffffffffffffffffffff161461159f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159690613e38565b60405180910390fd5b60005b818110156115e1576001601160008282546115bd9190613f19565b925050819055506115d083601154612409565b806115da906141e9565b90506115a2565b505050565b60166020528060005260406000206000915090505481565b60175481565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600042600a541080156116425750600b5442105b156116505760019050611695565b42600c541080156116625750600d5442105b156116705760029050611695565b42600e541080156116825750600f5442105b156116905760039050611695565b600990505b90565b6060600180546116a790613c05565b80601f01602080910402602001604051908101604052809291908181526020018280546116d390613c05565b80156117205780601f106116f557610100808354040283529160200191611720565b820191906000526020600020905b81548152906001019060200180831161170357829003601f168201915b5050505050905090565b611732611f41565b73ffffffffffffffffffffffffffffffffffffffff16611750611604565b73ffffffffffffffffffffffffffffffffffffffff16146117a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179d90613e38565b60405180910390fd5b60005b8251811015611801576117f08382815181106117c8576117c7614355565b5b60200260200101518383815181106117e3576117e2614355565b5b6020026020010151611523565b806117fa906141e9565b90506117a9565b505050565b60115481565b600e5481565b61182461181d611f41565b83836124ed565b5050565b611839611833611f41565b83612002565b611878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186f90613eca565b60405180910390fd5b61188484848484612659565b50505050565b60085481565b61189981611ed5565b6118d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cf906143d0565b60405180910390fd5b6118e18161132d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061194c575061191d611604565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61198b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119829061443c565b60405180910390fd5b611994816126b5565b50565b60075481565b60606017544210156119d157601a6040516020016119bb91906144ff565b6040516020818303038152906040529050611a63565b601854421015611a0357601b6040516020016119ed91906144ff565b6040516020818303038152906040529050611a63565b601954421015611a3557601c604051602001611a1f91906144ff565b6040516020818303038152906040529050611a63565b6012611a40836127d2565b604051602001611a519291906145df565b60405160208183030381529060405290505b919050565b600c5481565b611a76611f41565b73ffffffffffffffffffffffffffffffffffffffff16611a94611604565b73ffffffffffffffffffffffffffffffffffffffff1614611aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae190613e38565b60405180910390fd5b8060158190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600b5481565b611b96611f41565b73ffffffffffffffffffffffffffffffffffffffff16611bb4611604565b73ffffffffffffffffffffffffffffffffffffffff1614611c0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0190613e38565b60405180910390fd5b806011541115611c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4690614665565b60405180910390fd5b8060108190555050565b611c61611f41565b73ffffffffffffffffffffffffffffffffffffffff16611c7f611604565b73ffffffffffffffffffffffffffffffffffffffff1614611cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccc90613e38565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3b906146f7565b60405180910390fd5b611d4d81612427565b50565b611d58611f41565b73ffffffffffffffffffffffffffffffffffffffff16611d76611604565b73ffffffffffffffffffffffffffffffffffffffff1614611dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc390613e38565b60405180910390fd5b8060129081611ddb91906148ae565b5050565b611de7611f41565b73ffffffffffffffffffffffffffffffffffffffff16611e05611604565b73ffffffffffffffffffffffffffffffffffffffff1614611e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5290613e38565b60405180910390fd5b8060148190555050565b60185481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611fbc8361132d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061200d82611ed5565b61204c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612043906149f2565b60405180910390fd5b60006120578361132d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061209957506120988185611af4565b5b806120d757508373ffffffffffffffffffffffffffffffffffffffff166120bf84610b7f565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166121008261132d565b73ffffffffffffffffffffffffffffffffffffffff1614612156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214d90614a84565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bc90614b16565b60405180910390fd5b6121d0838383612932565b6121db600082611f49565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461222b9190614b36565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122829190613f19565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612341838383612937565b505050565b6000806123683373ffffffffffffffffffffffffffffffffffffffff1661293c565b612371846127d2565b604051602001612382929190614b90565b60405160208183030381529060405290506123c48585836040516020016123a99190614bc3565b604051602081830303815290604052805190602001206129c1565b9150509392505050565b60006124018383336040516020016123e69190614c22565b604051602081830303815290604052805190602001206129c1565b905092915050565b6124238282604051806020016040528060008152506129d8565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361255b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255290614c89565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161264c9190613132565b60405180910390a3505050565b6126648484846120e0565b61267084848484612a33565b6126af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a690614d1b565b60405180910390fd5b50505050565b60006126c08261132d565b90506126ce81600084612932565b6126d9600083611f49565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127299190614b36565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127ce81600084612937565b5050565b606060008203612819576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061292d565b600082905060005b6000821461284b578080612834906141e9565b915050600a826128449190614d6a565b9150612821565b60008167ffffffffffffffff811115612867576128666134c8565b5b6040519080825280601f01601f1916602001820160405280156128995781602001600182028036833780820191505090505b5090505b60008514612926576001826128b29190614b36565b9150600a856128c19190614d9b565b60306128cd9190613f19565b60f81b8183815181106128e3576128e2614355565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561291f9190614d6a565b945061289d565b8093505050505b919050565b505050565b505050565b606060008203612983576040518060400160405280600481526020017f307830300000000000000000000000000000000000000000000000000000000081525090506129bc565b600082905060005b600082146129ad57808061299e906141e9565b915050600882901c915061298b565b6129b78482612bba565b925050505b919050565b6000826129ce8584612df6565b1490509392505050565b6129e28383612e6b565b6129ef6000848484612a33565b612a2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2590614d1b565b60405180910390fd5b505050565b6000612a548473ffffffffffffffffffffffffffffffffffffffff16613044565b15612bad578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a7d611f41565b8786866040518563ffffffff1660e01b8152600401612a9f9493929190614e21565b6020604051808303816000875af1925050508015612adb57506040513d601f19601f82011682018060405250810190612ad89190614e82565b60015b612b5d573d8060008114612b0b576040519150601f19603f3d011682016040523d82523d6000602084013e612b10565b606091505b506000815103612b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4c90614d1b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612bb2565b600190505b949350505050565b606060006002836002612bcd91906140b7565b612bd79190613f19565b67ffffffffffffffff811115612bf057612bef6134c8565b5b6040519080825280601f01601f191660200182016040528015612c225781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612c5a57612c59614355565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612cbe57612cbd614355565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002612cfe91906140b7565b612d089190613f19565b90505b6001811115612da8577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110612d4a57612d49614355565b5b1a60f81b828281518110612d6157612d60614355565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080612da190614eaf565b9050612d0b565b5060008414612dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de390614f24565b60405180910390fd5b8091505092915050565b60008082905060005b8451811015612e60576000858281518110612e1d57612e1c614355565b5b60200260200101519050808311612e3f57612e388382613067565b9250612e4c565b612e498184613067565b92505b508080612e58906141e9565b915050612dff565b508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed190614f90565b60405180910390fd5b612ee381611ed5565b15612f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1a90614ffc565b60405180910390fd5b612f2f60008383612932565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f7f9190613f19565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461304060008383612937565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6130c781613092565b81146130d257600080fd5b50565b6000813590506130e4816130be565b92915050565b600060208284031215613100576130ff613088565b5b600061310e848285016130d5565b91505092915050565b60008115159050919050565b61312c81613117565b82525050565b60006020820190506131476000830184613123565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561318757808201518184015260208101905061316c565b60008484015250505050565b6000601f19601f8301169050919050565b60006131af8261314d565b6131b98185613158565b93506131c9818560208601613169565b6131d281613193565b840191505092915050565b600060208201905081810360008301526131f781846131a4565b905092915050565b6000819050919050565b613212816131ff565b811461321d57600080fd5b50565b60008135905061322f81613209565b92915050565b60006020828403121561324b5761324a613088565b5b600061325984828501613220565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061328d82613262565b9050919050565b61329d81613282565b82525050565b60006020820190506132b86000830184613294565b92915050565b6132c781613282565b81146132d257600080fd5b50565b6000813590506132e4816132be565b92915050565b6000806040838503121561330157613300613088565b5b600061330f858286016132d5565b925050602061332085828601613220565b9150509250929050565b60008060006060848603121561334357613342613088565b5b600061335186828701613220565b935050602061336286828701613220565b925050604061337386828701613220565b9150509250925092565b613386816131ff565b82525050565b60006020820190506133a1600083018461337d565b92915050565b6000806000606084860312156133c0576133bf613088565b5b60006133ce868287016132d5565b93505060206133df868287016132d5565b92505060406133f086828701613220565b9150509250925092565b60008060008060008060c0878903121561341757613416613088565b5b600061342589828a01613220565b965050602061343689828a01613220565b955050604061344789828a01613220565b945050606061345889828a01613220565b935050608061346989828a01613220565b92505060a061347a89828a01613220565b9150509295509295509295565b600061349282613262565b9050919050565b6134a281613487565b82525050565b60006020820190506134bd6000830184613499565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61350082613193565b810181811067ffffffffffffffff8211171561351f5761351e6134c8565b5b80604052505050565b600061353261307e565b905061353e82826134f7565b919050565b600067ffffffffffffffff82111561355e5761355d6134c8565b5b602082029050602081019050919050565b600080fd5b6000819050919050565b61358781613574565b811461359257600080fd5b50565b6000813590506135a48161357e565b92915050565b60006135bd6135b884613543565b613528565b905080838252602082019050602084028301858111156135e0576135df61356f565b5b835b8181101561360957806135f58882613595565b8452602084019350506020810190506135e2565b5050509392505050565b600082601f830112613628576136276134c3565b5b81356136388482602086016135aa565b91505092915050565b60008060006060848603121561365a57613659613088565b5b600084013567ffffffffffffffff8111156136785761367761308d565b5b61368486828701613613565b935050602061369586828701613220565b92505060406136a686828701613220565b9150509250925092565b6000602082840312156136c6576136c5613088565b5b60006136d4848285016132d5565b91505092915050565b600067ffffffffffffffff8211156136f8576136f76134c8565b5b602082029050602081019050919050565b600061371c613717846136dd565b613528565b9050808382526020820190506020840283018581111561373f5761373e61356f565b5b835b81811015613768578061375488826132d5565b845260208401935050602081019050613741565b5050509392505050565b600082601f830112613787576137866134c3565b5b8135613797848260208601613709565b91505092915050565b600067ffffffffffffffff8211156137bb576137ba6134c8565b5b602082029050602081019050919050565b60006137df6137da846137a0565b613528565b905080838252602082019050602084028301858111156138025761380161356f565b5b835b8181101561382b57806138178882613220565b845260208401935050602081019050613804565b5050509392505050565b600082601f83011261384a576138496134c3565b5b813561385a8482602086016137cc565b91505092915050565b6000806040838503121561387a57613879613088565b5b600083013567ffffffffffffffff8111156138985761389761308d565b5b6138a485828601613772565b925050602083013567ffffffffffffffff8111156138c5576138c461308d565b5b6138d185828601613835565b9150509250929050565b6138e481613117565b81146138ef57600080fd5b50565b600081359050613901816138db565b92915050565b6000806040838503121561391e5761391d613088565b5b600061392c858286016132d5565b925050602061393d858286016138f2565b9150509250929050565b600080fd5b600067ffffffffffffffff821115613967576139666134c8565b5b61397082613193565b9050602081019050919050565b82818337600083830152505050565b600061399f61399a8461394c565b613528565b9050828152602081018484840111156139bb576139ba613947565b5b6139c684828561397d565b509392505050565b600082601f8301126139e3576139e26134c3565b5b81356139f384826020860161398c565b91505092915050565b60008060008060808587031215613a1657613a15613088565b5b6000613a24878288016132d5565b9450506020613a35878288016132d5565b9350506040613a4687828801613220565b925050606085013567ffffffffffffffff811115613a6757613a6661308d565b5b613a73878288016139ce565b91505092959194509250565b600060208284031215613a9557613a94613088565b5b6000613aa384828501613595565b91505092915050565b60008060408385031215613ac357613ac2613088565b5b6000613ad1858286016132d5565b9250506020613ae2858286016132d5565b9150509250929050565b600067ffffffffffffffff821115613b0757613b066134c8565b5b613b1082613193565b9050602081019050919050565b6000613b30613b2b84613aec565b613528565b905082815260208101848484011115613b4c57613b4b613947565b5b613b5784828561397d565b509392505050565b600082601f830112613b7457613b736134c3565b5b8135613b84848260208601613b1d565b91505092915050565b600060208284031215613ba357613ba2613088565b5b600082013567ffffffffffffffff811115613bc157613bc061308d565b5b613bcd84828501613b5f565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613c1d57607f821691505b602082108103613c3057613c2f613bd6565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613c92602c83613158565b9150613c9d82613c36565b604082019050919050565b60006020820190508181036000830152613cc181613c85565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d24602183613158565b9150613d2f82613cc8565b604082019050919050565b60006020820190508181036000830152613d5381613d17565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613db6603883613158565b9150613dc182613d5a565b604082019050919050565b60006020820190508181036000830152613de581613da9565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613e22602083613158565b9150613e2d82613dec565b602082019050919050565b60006020820190508181036000830152613e5181613e15565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613eb4603183613158565b9150613ebf82613e58565b604082019050919050565b60006020820190508181036000830152613ee381613ea7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613f24826131ff565b9150613f2f836131ff565b9250828201905080821115613f4757613f46613eea565b5b92915050565b7f4265796f6e64204d617820537570706c79000000000000000000000000000000600082015250565b6000613f83601183613158565b9150613f8e82613f4d565b602082019050919050565b60006020820190508181036000830152613fb281613f76565b9050919050565b7f4e6f74206f6e207468652077686974656c697374000000000000000000000000600082015250565b6000613fef601483613158565b9150613ffa82613fb9565b602082019050919050565b6000602082019050818103600083015261401e81613fe2565b9050919050565b7f43616e6e6f74207075726368617365206d6f7265207468616e20746865206c6960008201527f6d69740000000000000000000000000000000000000000000000000000000000602082015250565b6000614081602383613158565b915061408c82614025565b604082019050919050565b600060208201905081810360008301526140b081614074565b9050919050565b60006140c2826131ff565b91506140cd836131ff565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561410657614105613eea565b5b828202905092915050565b7f4e6f7420612073616c6520706572696f64000000000000000000000000000000600082015250565b6000614147601183613158565b915061415282614111565b602082019050919050565b600060208201905081810360008301526141768161413a565b9050919050565b7f4e6f7420656e6f7567682066756e647300000000000000000000000000000000600082015250565b60006141b3601083613158565b91506141be8261417d565b602082019050919050565b600060208201905081810360008301526141e2816141a6565b9050919050565b60006141f4826131ff565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361422657614225613eea565b5b600182019050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b600061428d602983613158565b915061429882614231565b604082019050919050565b600060208201905081810360008301526142bc81614280565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600061431f602a83613158565b915061432a826142c3565b604082019050919050565b6000602082019050818103600083015261434e81614312565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e6f742065786973747300000000000000000000000000000000000000000000600082015250565b60006143ba600a83613158565b91506143c582614384565b602082019050919050565b600060208201905081810360008301526143e9816143ad565b9050919050565b7f4e6f74206f776e65720000000000000000000000000000000000000000000000600082015250565b6000614426600983613158565b9150614431826143f0565b602082019050919050565b6000602082019050818103600083015261445581614419565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b6000815461448981613c05565b614493818661445c565b945060018216600081146144ae57600181146144c3576144f6565b60ff19831686528115158202860193506144f6565b6144cc85614467565b60005b838110156144ee578154818901526001820191506020810190506144cf565b838801955050505b50505092915050565b600061450b828461447c565b915081905092915050565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b600061454c60018361445c565b915061455782614516565b600182019050919050565b600061456d8261314d565b614577818561445c565b9350614587818560208601613169565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b60006145c960058361445c565b91506145d482614593565b600582019050919050565b60006145eb828561447c565b91506145f68261453f565b91506146028284614562565b915061460d826145bc565b91508190509392505050565b7f4e6f77206d696e74436f756e74203c3d205f616d6f756e740000000000000000600082015250565b600061464f601883613158565b915061465a82614619565b602082019050919050565b6000602082019050818103600083015261467e81614642565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006146e1602683613158565b91506146ec82614685565b604082019050919050565b60006020820190508181036000830152614710816146d4565b9050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026147647fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614727565b61476e8683614727565b95508019841693508086168417925050509392505050565b6000819050919050565b60006147ab6147a66147a1846131ff565b614786565b6131ff565b9050919050565b6000819050919050565b6147c583614790565b6147d96147d1826147b2565b848454614734565b825550505050565b600090565b6147ee6147e1565b6147f98184846147bc565b505050565b5b8181101561481d576148126000826147e6565b6001810190506147ff565b5050565b601f8211156148625761483381614467565b61483c84614717565b8101602085101561484b578190505b61485f61485785614717565b8301826147fe565b50505b505050565b600082821c905092915050565b600061488560001984600802614867565b1980831691505092915050565b600061489e8383614874565b9150826002028217905092915050565b6148b78261314d565b67ffffffffffffffff8111156148d0576148cf6134c8565b5b6148da8254613c05565b6148e5828285614821565b600060209050601f8311600181146149185760008415614906578287015190505b6149108582614892565b865550614978565b601f19841661492686614467565b60005b8281101561494e57848901518255600182019150602085019450602081019050614929565b8683101561496b5784890151614967601f891682614874565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006149dc602c83613158565b91506149e782614980565b604082019050919050565b60006020820190508181036000830152614a0b816149cf565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000614a6e602583613158565b9150614a7982614a12565b604082019050919050565b60006020820190508181036000830152614a9d81614a61565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614b00602483613158565b9150614b0b82614aa4565b604082019050919050565b60006020820190508181036000830152614b2f81614af3565b9050919050565b6000614b41826131ff565b9150614b4c836131ff565b9250828203905081811115614b6457614b63613eea565b5b92915050565b7f2c00000000000000000000000000000000000000000000000000000000000000815250565b6000614b9c8285614562565b9150614ba782614b6a565b600182019150614bb78284614562565b91508190509392505050565b6000614bcf8284614562565b915081905092915050565b60008160601b9050919050565b6000614bf282614bda565b9050919050565b6000614c0482614be7565b9050919050565b614c1c614c1782613282565b614bf9565b82525050565b6000614c2e8284614c0b565b60148201915081905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614c73601983613158565b9150614c7e82614c3d565b602082019050919050565b60006020820190508181036000830152614ca281614c66565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614d05603283613158565b9150614d1082614ca9565b604082019050919050565b60006020820190508181036000830152614d3481614cf8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614d75826131ff565b9150614d80836131ff565b925082614d9057614d8f614d3b565b5b828204905092915050565b6000614da6826131ff565b9150614db1836131ff565b925082614dc157614dc0614d3b565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b6000614df382614dcc565b614dfd8185614dd7565b9350614e0d818560208601613169565b614e1681613193565b840191505092915050565b6000608082019050614e366000830187613294565b614e436020830186613294565b614e50604083018561337d565b8181036060830152614e628184614de8565b905095945050505050565b600081519050614e7c816130be565b92915050565b600060208284031215614e9857614e97613088565b5b6000614ea684828501614e6d565b91505092915050565b6000614eba826131ff565b915060008203614ecd57614ecc613eea565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000614f0e602083613158565b9150614f1982614ed8565b602082019050919050565b60006020820190508181036000830152614f3d81614f01565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614f7a602083613158565b9150614f8582614f44565b602082019050919050565b60006020820190508181036000830152614fa981614f6d565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614fe6601c83613158565b9150614ff182614fb0565b602082019050919050565b6000602082019050818103600083015261501581614fd9565b905091905056fea264697066735822122056943be799d6dd3b3a3c4a7af95fffc6e2b8eef99abec6a2d6b61d243ed4152364736f6c63430008100033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a51a5c83f3a412557fc12a168c533401789a30c70000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000470de4df820000000000000000000000000000000000000000000000000000006a94d74f4300000000000000000000000000000000000000000000000000000000000000001f5f0000000000000000000000000000000000000000000000000000000000000007697066733a2f2f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d57723877506d394661427a777443627a65377a667336337a6932393469687955367869386f5361586338717000000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d51446a7a694d4d57743150706442707758446d76474171346a64664c7862625734784e52437632536336593400000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d51446a7a694d4d57743150706442707758446d76474171346a64664c7862625734784e5243763253633659340000000000000000000000
-----Decoded View---------------
Arg [0] : _depositAddress (address): 0xa51A5C83F3a412557fc12a168C533401789a30c7
Arg [1] : _CID (string): ipfs://
Arg [2] : _revealCID1 (string): ipfs://QmWr8wPm9FaBzwtCbze7zfs63zi294ihyU6xi8oSaXc8qp
Arg [3] : _revealCID2 (string): ipfs://QmQDjziMMWt1PpdBpwXDmvGAq4jdfLxbbW4xNRCv2Sc6Y4
Arg [4] : _revealCID3 (string): ipfs://QmQDjziMMWt1PpdBpwXDmvGAq4jdfLxbbW4xNRCv2Sc6Y4
Arg [5] : _wl1Price (uint256): 10000000000000000
Arg [6] : _wl2Price (uint256): 20000000000000000
Arg [7] : _pbPrice (uint256): 30000000000000000
Arg [8] : _maxMintCount (uint256): 8031
-----Encoded View---------------
20 Constructor Arguments found :
Arg [0] : 000000000000000000000000a51a5c83f3a412557fc12a168c533401789a30c7
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [3] : 00000000000000000000000000000000000000000000000000000000000001c0
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000220
Arg [5] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [6] : 00000000000000000000000000000000000000000000000000470de4df820000
Arg [7] : 000000000000000000000000000000000000000000000000006a94d74f430000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000001f5f
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [10] : 697066733a2f2f00000000000000000000000000000000000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [12] : 697066733a2f2f516d57723877506d394661427a777443627a65377a66733633
Arg [13] : 7a6932393469687955367869386f536158633871700000000000000000000000
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [15] : 697066733a2f2f516d51446a7a694d4d57743150706442707758446d76474171
Arg [16] : 346a64664c7862625734784e5243763253633659340000000000000000000000
Arg [17] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [18] : 697066733a2f2f516d51446a7a694d4d57743150706442707758446d76474171
Arg [19] : 346a64664c7862625734784e5243763253633659340000000000000000000000
Deployed Bytecode Sourcemap
38533:7249:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20440:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21385:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22945:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22468:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43679:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39474:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23695:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44142:410;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39212:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39084:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40466:1357;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44558:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24105:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39056:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38912:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38886:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21079:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38999:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20809:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35156:103;;;;;;;;;;;;;:::i;:::-;;43241:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39348:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39414:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34505:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42624:406;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21554:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43457:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39140:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39028;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23238:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24361:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38859:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42360:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38832:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41831:521;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38970:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44908:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23464:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38941:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43966:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35414:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43876:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44793:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39444:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20440:305;20542:4;20594:25;20579:40;;;:11;:40;;;;:105;;;;20651:33;20636:48;;;:11;:48;;;;20579:105;:158;;;;20701:36;20725:11;20701:23;:36::i;:::-;20579:158;20559:178;;20440:305;;;:::o;21385:100::-;21439:13;21472:5;21465:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21385:100;:::o;22945:221::-;23021:7;23049:16;23057:7;23049;:16::i;:::-;23041:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23134:15;:24;23150:7;23134:24;;;;;;;;;;;;;;;;;;;;;23127:31;;22945:221;;;:::o;22468:411::-;22549:13;22565:23;22580:7;22565:14;:23::i;:::-;22549:39;;22613:5;22607:11;;:2;:11;;;22599:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22707:5;22691:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22716:37;22733:5;22740:12;:10;:12::i;:::-;22716:16;:37::i;:::-;22691:62;22669:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;22850:21;22859:2;22863:7;22850:8;:21::i;:::-;22538:341;22468:411;;:::o;43679:191::-;34736:12;:10;:12::i;:::-;34725:23;;:7;:5;:7::i;:::-;:23;;;34717:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43794:9:::1;43783:8;:20;;;;43824:9;43814:8;:19;;;;43854:8;43844:7;:18;;;;43679:191:::0;;;:::o;39474:23::-;;;;:::o;23695:339::-;23890:41;23909:12;:10;:12::i;:::-;23923:7;23890:18;:41::i;:::-;23882:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23998:28;24008:4;24014:2;24018:7;23998:9;:28::i;:::-;23695:339;;;:::o;44142:410::-;34736:12;:10;:12::i;:::-;34725:23;;:7;:5;:7::i;:::-;:23;;;34717:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44362:11:::1;44349:10;:24;;;;44397:11;44384:10;:24;;;;44432:11;44419:10;:24;;;;44467:11;44454:10;:24;;;;44501:10;44489:9;:22;;;;44534:10;44522:9;:22;;;;44142:410:::0;;;;;;:::o;39212:37::-;;;;;;;;;;;;;:::o;39084:24::-;;;;:::o;40466:1357::-;40597:12;;40585:7;40573:9;;:19;;;;:::i;:::-;40572:37;;40564:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40670:10;40691:13;40707:17;:15;:17::i;:::-;40691:33;;40751:1;40739:8;:13;40735:748;;40835:57;40858:5;40865:13;;40880:11;40835:22;:57::i;:::-;40827:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;41011:11;40984:10;:22;40995:10;40984:22;;;;;;;;;;;;;;;;40974:7;:32;;;;:::i;:::-;40973:49;;40965:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;41096:7;41085:8;;:18;;;;:::i;:::-;41077:26;;40735:748;;;41137:1;41125:8;:13;41121:362;;41206:35;41220:5;41227:13;;41206;:35::i;:::-;41198:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41300:7;41289:8;;:18;;;;:::i;:::-;41281:26;;41121:362;;;41341:1;41329:8;:13;41325:158;;41377:7;41367;;:17;;;;:::i;:::-;41359:25;;41325:158;;;41418:1;41406:8;:13;41402:81;;41444:5;41436:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;41402:81;41325:158;41121:362;40735:748;41512:9;41503:5;:18;;41495:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;41576:14;;;;;;;;;;;:23;;:46;41600:21;41576:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41656:6;41652:164;41672:7;41668:1;:11;41652:164;;;41714:1;41701:9;;:14;;;;;;;:::i;:::-;;;;;;;;41756:1;41730:10;:22;41741:10;41730:22;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;41772:32;41782:10;41794:9;;41772;:32::i;:::-;41681:3;;;;:::i;:::-;;;41652:164;;;;40553:1270;;40466:1357;;;:::o;44558:227::-;34736:12;:10;:12::i;:::-;34725:23;;:7;:5;:7::i;:::-;:23;;;34717:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44691:12:::1;44677:11;:26;;;;44728:12;44714:11;:26;;;;44765:12;44751:11;:26;;;;44558:227:::0;;;:::o;24105:185::-;24243:39;24260:4;24266:2;24270:7;24243:39;;;;;;;;;;;;:16;:39::i;:::-;24105:185;;;:::o;39056:21::-;;;;:::o;38912:22::-;;;;:::o;38886:19::-;;;;:::o;21079:239::-;21151:7;21171:13;21187:7;:16;21195:7;21187:16;;;;;;;;;;;;;;;;;;;;;21171:32;;21239:1;21222:19;;:5;:19;;;21214:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21305:5;21298:12;;;21079:239;;;:::o;38999:22::-;;;;:::o;20809:208::-;20881:7;20926:1;20909:19;;:5;:19;;;20901:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;20993:9;:16;21003:5;20993:16;;;;;;;;;;;;;;;;20986:23;;20809:208;;;:::o;35156:103::-;34736:12;:10;:12::i;:::-;34725:23;;:7;:5;:7::i;:::-;:23;;;34717:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35221:30:::1;35248:1;35221:18;:30::i;:::-;35156:103::o:0;43241:210::-;34736:12;:10;:12::i;:::-;34725:23;;:7;:5;:7::i;:::-;:23;;;34717:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43326:6:::1;43322:122;43342:7;43338:1;:11;43322:122;;;43384:1;43371:9;;:14;;;;;;;:::i;:::-;;;;;;;;43400:32;43410:10;43422:9;;43400;:32::i;:::-;43351:3;;;;:::i;:::-;;;43322:122;;;;43241:210:::0;;:::o;39348:42::-;;;;;;;;;;;;;;;;;:::o;39414:23::-;;;;:::o;34505:87::-;34551:7;34578:6;;;;;;;;;;;34571:13;;34505:87;:::o;42624:406::-;42672:4;42706:15;42693:10;;:28;:60;;;;;42743:10;;42725:15;:28;42693:60;42689:313;;;42777:1;42770:8;;;;42689:313;42813:15;42800:10;;:28;:60;;;;;42850:10;;42832:15;:28;42800:60;42796:206;;;42884:1;42877:8;;;;42796:206;42919:15;42907:9;;:27;:58;;;;;42956:9;;42938:15;:27;42907:58;42903:99;;;42989:1;42982:8;;;;42903:99;43021:1;43014:8;;42624:406;;:::o;21554:104::-;21610:13;21643:7;21636:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21554:104;:::o;43457:214::-;34736:12;:10;:12::i;:::-;34725:23;;:7;:5;:7::i;:::-;:23;;;34717:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43561:6:::1;43557:107;43577:10;:17;43573:1;:21;43557:107;;;43616:36;43626:10;43637:1;43626:13;;;;;;;;:::i;:::-;;;;;;;;43641:7;43649:1;43641:10;;;;;;;;:::i;:::-;;;;;;;;43616:9;:36::i;:::-;43596:3;;;;:::i;:::-;;;43557:107;;;;43457:214:::0;;:::o;39140:21::-;;;;:::o;39028:::-;;;;:::o;23238:155::-;23333:52;23352:12;:10;:12::i;:::-;23366:8;23376;23333:18;:52::i;:::-;23238:155;;:::o;24361:328::-;24536:41;24555:12;:10;:12::i;:::-;24569:7;24536:18;:41::i;:::-;24528:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24642:39;24656:4;24662:2;24666:7;24675:5;24642:13;:39::i;:::-;24361:328;;;;:::o;38859:20::-;;;;:::o;42360:216::-;42417:17;42425:8;42417:7;:17::i;:::-;42409:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;42483:17;42491:8;42483:7;:17::i;:::-;42469:31;;:10;:31;;;42468:60;;;;42520:7;:5;:7::i;:::-;42506:21;;:10;:21;;;42468:60;42460:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;42553:15;42559:8;42553:5;:15::i;:::-;42360:216;:::o;38832:20::-;;;;:::o;41831:521::-;41904:13;41952:11;;41934:15;:29;41930:327;;;42011:10;41994:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;41980:43;;;;41930:327;42063:11;;42045:15;:29;42041:216;;;42122:10;42105:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;42091:43;;;;42041:216;42174:11;;42156:15;:29;42152:105;;;42233:10;42216:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;42202:43;;;;42152:105;42298:3;42308:25;42325:7;42308:16;:25::i;:::-;42281:62;;;;;;;;;:::i;:::-;;;;;;;;;;;;;42267:77;;41831:521;;;;:::o;38970:22::-;;;;:::o;44908:109::-;34736:12;:10;:12::i;:::-;34725:23;;:7;:5;:7::i;:::-;:23;;;34717:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44998:11:::1;44982:13;:27;;;;44908:109:::0;:::o;23464:164::-;23561:4;23585:18;:25;23604:5;23585:25;;;;;;;;;;;;;;;:35;23611:8;23585:35;;;;;;;;;;;;;;;;;;;;;;;;;23578:42;;23464:164;;;;:::o;38941:22::-;;;;:::o;43966:170::-;34736:12;:10;:12::i;:::-;34725:23;;:7;:5;:7::i;:::-;:23;;;34717:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44059:7:::1;44046:9;;:20;;44038:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;44121:7;44106:12;:22;;;;43966:170:::0;:::o;35414:201::-;34736:12;:10;:12::i;:::-;34725:23;;:7;:5;:7::i;:::-;:23;;;34717:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35523:1:::1;35503:22;;:8;:22;;::::0;35495:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35579:28;35598:8;35579:18;:28::i;:::-;35414:201:::0;:::o;43876:84::-;34736:12;:10;:12::i;:::-;34725:23;;:7;:5;:7::i;:::-;:23;;;34717:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43948:4:::1;43942:3;:10;;;;;;:::i;:::-;;43876:84:::0;:::o;44793:109::-;34736:12;:10;:12::i;:::-;34725:23;;:7;:5;:7::i;:::-;:23;;;34717:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44883:11:::1;44867:13;:27;;;;44793:109:::0;:::o;39444:23::-;;;;:::o;19018:157::-;19103:4;19142:25;19127:40;;;:11;:40;;;;19120:47;;19018:157;;;:::o;26199:127::-;26264:4;26316:1;26288:30;;:7;:16;26296:7;26288:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26281:37;;26199:127;;;:::o;16057:98::-;16110:7;16137:10;16130:17;;16057:98;:::o;30345:174::-;30447:2;30420:15;:24;30436:7;30420:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30503:7;30499:2;30465:46;;30474:23;30489:7;30474:14;:23::i;:::-;30465:46;;;;;;;;;;;;30345:174;;:::o;26493:348::-;26586:4;26611:16;26619:7;26611;:16::i;:::-;26603:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26687:13;26703:23;26718:7;26703:14;:23::i;:::-;26687:39;;26756:5;26745:16;;:7;:16;;;:52;;;;26765:32;26782:5;26789:7;26765:16;:32::i;:::-;26745:52;:87;;;;26825:7;26801:31;;:20;26813:7;26801:11;:20::i;:::-;:31;;;26745:87;26737:96;;;26493:348;;;;:::o;29602:625::-;29761:4;29734:31;;:23;29749:7;29734:14;:23::i;:::-;:31;;;29726:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;29840:1;29826:16;;:2;:16;;;29818:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29896:39;29917:4;29923:2;29927:7;29896:20;:39::i;:::-;30000:29;30017:1;30021:7;30000:8;:29::i;:::-;30061:1;30042:9;:15;30052:4;30042:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30090:1;30073:9;:13;30083:2;30073:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30121:2;30102:7;:16;30110:7;30102:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30160:7;30156:2;30141:27;;30150:4;30141:27;;;;;;;;;;;;30181:38;30201:4;30207:2;30211:7;30181:19;:38::i;:::-;29602:625;;;:::o;45437:342::-;45553:4;45570:21;45608:40;45636:10;45608:40;;:19;:40::i;:::-;45655:22;:11;:20;:22::i;:::-;45594:84;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45570:108;;45696:75;45715:5;45722:10;45761:7;45744:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;45734:36;;;;;;45696:18;:75::i;:::-;45689:82;;;45437:342;;;;;:::o;45230:199::-;45319:4;45343:78;45362:5;45369:10;45408;45391:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;45381:39;;;;;;45343:18;:78::i;:::-;45336:85;;45230:199;;;;:::o;27183:110::-;27259:26;27269:2;27273:7;27259:26;;;;;;;;;;;;:9;:26::i;:::-;27183:110;;:::o;35775:191::-;35849:16;35868:6;;;;;;;;;;;35849:25;;35894:8;35885:6;;:17;;;;;;;;;;;;;;;;;;35949:8;35918:40;;35939:8;35918:40;;;;;;;;;;;;35838:128;35775:191;:::o;30661:315::-;30816:8;30807:17;;:5;:17;;;30799:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;30903:8;30865:18;:25;30884:5;30865:25;;;;;;;;;;;;;;;:35;30891:8;30865:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;30949:8;30927:41;;30942:5;30927:41;;;30959:8;30927:41;;;;;;:::i;:::-;;;;;;;;30661:315;;;:::o;25571:::-;25728:28;25738:4;25744:2;25748:7;25728:9;:28::i;:::-;25775:48;25798:4;25804:2;25808:7;25817:5;25775:22;:48::i;:::-;25767:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25571:315;;;;:::o;28845:420::-;28905:13;28921:23;28936:7;28921:14;:23::i;:::-;28905:39;;28957:48;28978:5;28993:1;28997:7;28957:20;:48::i;:::-;29046:29;29063:1;29067:7;29046:8;:29::i;:::-;29108:1;29088:9;:16;29098:5;29088:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;29127:7;:16;29135:7;29127:16;;;;;;;;;;;;29120:23;;;;;;;;;;;29189:7;29185:1;29161:36;;29170:5;29161:36;;;;;;;;;;;;29210:47;29230:5;29245:1;29249:7;29210:19;:47::i;:::-;28894:371;28845:420;:::o;16530:723::-;16586:13;16816:1;16807:5;:10;16803:53;;16834:10;;;;;;;;;;;;;;;;;;;;;16803:53;16866:12;16881:5;16866:20;;16897:14;16922:78;16937:1;16929:4;:9;16922:78;;16955:8;;;;;:::i;:::-;;;;16986:2;16978:10;;;;;:::i;:::-;;;16922:78;;;17010:19;17042:6;17032:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17010:39;;17060:154;17076:1;17067:5;:10;17060:154;;17104:1;17094:11;;;;;:::i;:::-;;;17171:2;17163:5;:10;;;;:::i;:::-;17150:2;:24;;;;:::i;:::-;17137:39;;17120:6;17127;17120:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;17200:2;17191:11;;;;;:::i;:::-;;;17060:154;;;17238:6;17224:21;;;;;16530:723;;;;:::o;32912:126::-;;;;:::o;33423:125::-;;;;:::o;17363:340::-;17422:13;17461:1;17452:5;:10;17448:56;;17479:13;;;;;;;;;;;;;;;;;;;;;17448:56;17514:12;17529:5;17514:20;;17545:14;17574:78;17589:1;17581:4;:9;17574:78;;17607:8;;;;;:::i;:::-;;;;17639:1;17630:10;;;;;17574:78;;;17669:26;17681:5;17688:6;17669:11;:26::i;:::-;17662:33;;;;17363:340;;;;:::o;37038:190::-;37163:4;37216;37187:25;37200:5;37207:4;37187:12;:25::i;:::-;:33;37180:40;;37038:190;;;;;:::o;27520:321::-;27650:18;27656:2;27660:7;27650:5;:18::i;:::-;27701:54;27732:1;27736:2;27740:7;27749:5;27701:22;:54::i;:::-;27679:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;27520:321;;;:::o;31541:799::-;31696:4;31717:15;:2;:13;;;:15::i;:::-;31713:620;;;31769:2;31753:36;;;31790:12;:10;:12::i;:::-;31804:4;31810:7;31819:5;31753:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31749:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32012:1;31995:6;:13;:18;31991:272;;32038:60;;;;;;;;;;:::i;:::-;;;;;;;;31991:272;32213:6;32207:13;32198:6;32194:2;32190:15;32183:38;31749:529;31886:41;;;31876:51;;;:6;:51;;;;31869:58;;;;;31713:620;32317:4;32310:11;;31541:799;;;;;;;:::o;17831:451::-;17906:13;17932:19;17977:1;17968:6;17964:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;17954:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17932:47;;17990:15;:6;17997:1;17990:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;18016;:6;18023:1;18016:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;18047:9;18072:1;18063:6;18059:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;18047:26;;18042:135;18079:1;18075;:5;18042:135;;;18114:12;18135:3;18127:5;:11;18114:25;;;;;;;:::i;:::-;;;;;18102:6;18109:1;18102:9;;;;;;;;:::i;:::-;;;;;:37;;;;;;;;;;;18164:1;18154:11;;;;;18082:3;;;;:::i;:::-;;;18042:135;;;;18204:1;18195:5;:10;18187:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;18267:6;18253:21;;;17831:451;;;;:::o;37589:675::-;37672:7;37692:20;37715:4;37692:27;;37735:9;37730:497;37754:5;:12;37750:1;:16;37730:497;;;37788:20;37811:5;37817:1;37811:8;;;;;;;;:::i;:::-;;;;;;;;37788:31;;37854:12;37838;:28;37834:382;;37981:42;37996:12;38010;37981:14;:42::i;:::-;37966:57;;37834:382;;;38158:42;38173:12;38187;38158:14;:42::i;:::-;38143:57;;37834:382;37773:454;37768:3;;;;;:::i;:::-;;;;37730:497;;;;38244:12;38237:19;;;37589:675;;;;:::o;28177:439::-;28271:1;28257:16;;:2;:16;;;28249:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28330:16;28338:7;28330;:16::i;:::-;28329:17;28321:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28392:45;28421:1;28425:2;28429:7;28392:20;:45::i;:::-;28467:1;28450:9;:13;28460:2;28450:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28498:2;28479:7;:16;28487:7;28479:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28543:7;28539:2;28518:33;;28535:1;28518:33;;;;;;;;;;;;28564:44;28592:1;28596:2;28600:7;28564:19;:44::i;:::-;28177:439;;:::o;8214:326::-;8274:4;8531:1;8509:7;:19;;;:23;8502:30;;8214:326;;;:::o;38272:224::-;38340:13;38403:1;38397:4;38390:15;38432:1;38426:4;38419:15;38473:4;38467;38457:21;38448:30;;38272:224;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:619::-;4967:6;4975;4983;5032:2;5020:9;5011:7;5007:23;5003:32;5000:119;;;5038:79;;:::i;:::-;5000:119;5158:1;5183:53;5228:7;5219:6;5208:9;5204:22;5183:53;:::i;:::-;5173:63;;5129:117;5285:2;5311:53;5356:7;5347:6;5336:9;5332:22;5311:53;:::i;:::-;5301:63;;5256:118;5413:2;5439:53;5484:7;5475:6;5464:9;5460:22;5439:53;:::i;:::-;5429:63;;5384:118;4890:619;;;;;:::o;5515:118::-;5602:24;5620:5;5602:24;:::i;:::-;5597:3;5590:37;5515:118;;:::o;5639:222::-;5732:4;5770:2;5759:9;5755:18;5747:26;;5783:71;5851:1;5840:9;5836:17;5827:6;5783:71;:::i;:::-;5639:222;;;;:::o;5867:619::-;5944:6;5952;5960;6009:2;5997:9;5988:7;5984:23;5980:32;5977:119;;;6015:79;;:::i;:::-;5977:119;6135:1;6160:53;6205:7;6196:6;6185:9;6181:22;6160:53;:::i;:::-;6150:63;;6106:117;6262:2;6288:53;6333:7;6324:6;6313:9;6309:22;6288:53;:::i;:::-;6278:63;;6233:118;6390:2;6416:53;6461:7;6452:6;6441:9;6437:22;6416:53;:::i;:::-;6406:63;;6361:118;5867:619;;;;;:::o;6492:1057::-;6596:6;6604;6612;6620;6628;6636;6685:3;6673:9;6664:7;6660:23;6656:33;6653:120;;;6692:79;;:::i;:::-;6653:120;6812:1;6837:53;6882:7;6873:6;6862:9;6858:22;6837:53;:::i;:::-;6827:63;;6783:117;6939:2;6965:53;7010:7;7001:6;6990:9;6986:22;6965:53;:::i;:::-;6955:63;;6910:118;7067:2;7093:53;7138:7;7129:6;7118:9;7114:22;7093:53;:::i;:::-;7083:63;;7038:118;7195:2;7221:53;7266:7;7257:6;7246:9;7242:22;7221:53;:::i;:::-;7211:63;;7166:118;7323:3;7350:53;7395:7;7386:6;7375:9;7371:22;7350:53;:::i;:::-;7340:63;;7294:119;7452:3;7479:53;7524:7;7515:6;7504:9;7500:22;7479:53;:::i;:::-;7469:63;;7423:119;6492:1057;;;;;;;;:::o;7555:104::-;7600:7;7629:24;7647:5;7629:24;:::i;:::-;7618:35;;7555:104;;;:::o;7665:142::-;7768:32;7794:5;7768:32;:::i;:::-;7763:3;7756:45;7665:142;;:::o;7813:254::-;7922:4;7960:2;7949:9;7945:18;7937:26;;7973:87;8057:1;8046:9;8042:17;8033:6;7973:87;:::i;:::-;7813:254;;;;:::o;8073:117::-;8182:1;8179;8172:12;8196:180;8244:77;8241:1;8234:88;8341:4;8338:1;8331:15;8365:4;8362:1;8355:15;8382:281;8465:27;8487:4;8465:27;:::i;:::-;8457:6;8453:40;8595:6;8583:10;8580:22;8559:18;8547:10;8544:34;8541:62;8538:88;;;8606:18;;:::i;:::-;8538:88;8646:10;8642:2;8635:22;8425:238;8382:281;;:::o;8669:129::-;8703:6;8730:20;;:::i;:::-;8720:30;;8759:33;8787:4;8779:6;8759:33;:::i;:::-;8669:129;;;:::o;8804:311::-;8881:4;8971:18;8963:6;8960:30;8957:56;;;8993:18;;:::i;:::-;8957:56;9043:4;9035:6;9031:17;9023:25;;9103:4;9097;9093:15;9085:23;;8804:311;;;:::o;9121:117::-;9230:1;9227;9220:12;9244:77;9281:7;9310:5;9299:16;;9244:77;;;:::o;9327:122::-;9400:24;9418:5;9400:24;:::i;:::-;9393:5;9390:35;9380:63;;9439:1;9436;9429:12;9380:63;9327:122;:::o;9455:139::-;9501:5;9539:6;9526:20;9517:29;;9555:33;9582:5;9555:33;:::i;:::-;9455:139;;;;:::o;9617:710::-;9713:5;9738:81;9754:64;9811:6;9754:64;:::i;:::-;9738:81;:::i;:::-;9729:90;;9839:5;9868:6;9861:5;9854:21;9902:4;9895:5;9891:16;9884:23;;9955:4;9947:6;9943:17;9935:6;9931:30;9984:3;9976:6;9973:15;9970:122;;;10003:79;;:::i;:::-;9970:122;10118:6;10101:220;10135:6;10130:3;10127:15;10101:220;;;10210:3;10239:37;10272:3;10260:10;10239:37;:::i;:::-;10234:3;10227:50;10306:4;10301:3;10297:14;10290:21;;10177:144;10161:4;10156:3;10152:14;10145:21;;10101:220;;;10105:21;9719:608;;9617:710;;;;;:::o;10350:370::-;10421:5;10470:3;10463:4;10455:6;10451:17;10447:27;10437:122;;10478:79;;:::i;:::-;10437:122;10595:6;10582:20;10620:94;10710:3;10702:6;10695:4;10687:6;10683:17;10620:94;:::i;:::-;10611:103;;10427:293;10350:370;;;;:::o;10726:829::-;10828:6;10836;10844;10893:2;10881:9;10872:7;10868:23;10864:32;10861:119;;;10899:79;;:::i;:::-;10861:119;11047:1;11036:9;11032:17;11019:31;11077:18;11069:6;11066:30;11063:117;;;11099:79;;:::i;:::-;11063:117;11204:78;11274:7;11265:6;11254:9;11250:22;11204:78;:::i;:::-;11194:88;;10990:302;11331:2;11357:53;11402:7;11393:6;11382:9;11378:22;11357:53;:::i;:::-;11347:63;;11302:118;11459:2;11485:53;11530:7;11521:6;11510:9;11506:22;11485:53;:::i;:::-;11475:63;;11430:118;10726:829;;;;;:::o;11561:329::-;11620:6;11669:2;11657:9;11648:7;11644:23;11640:32;11637:119;;;11675:79;;:::i;:::-;11637:119;11795:1;11820:53;11865:7;11856:6;11845:9;11841:22;11820:53;:::i;:::-;11810:63;;11766:117;11561:329;;;;:::o;11896:311::-;11973:4;12063:18;12055:6;12052:30;12049:56;;;12085:18;;:::i;:::-;12049:56;12135:4;12127:6;12123:17;12115:25;;12195:4;12189;12185:15;12177:23;;11896:311;;;:::o;12230:710::-;12326:5;12351:81;12367:64;12424:6;12367:64;:::i;:::-;12351:81;:::i;:::-;12342:90;;12452:5;12481:6;12474:5;12467:21;12515:4;12508:5;12504:16;12497:23;;12568:4;12560:6;12556:17;12548:6;12544:30;12597:3;12589:6;12586:15;12583:122;;;12616:79;;:::i;:::-;12583:122;12731:6;12714:220;12748:6;12743:3;12740:15;12714:220;;;12823:3;12852:37;12885:3;12873:10;12852:37;:::i;:::-;12847:3;12840:50;12919:4;12914:3;12910:14;12903:21;;12790:144;12774:4;12769:3;12765:14;12758:21;;12714:220;;;12718:21;12332:608;;12230:710;;;;;:::o;12963:370::-;13034:5;13083:3;13076:4;13068:6;13064:17;13060:27;13050:122;;13091:79;;:::i;:::-;13050:122;13208:6;13195:20;13233:94;13323:3;13315:6;13308:4;13300:6;13296:17;13233:94;:::i;:::-;13224:103;;13040:293;12963:370;;;;:::o;13339:311::-;13416:4;13506:18;13498:6;13495:30;13492:56;;;13528:18;;:::i;:::-;13492:56;13578:4;13570:6;13566:17;13558:25;;13638:4;13632;13628:15;13620:23;;13339:311;;;:::o;13673:710::-;13769:5;13794:81;13810:64;13867:6;13810:64;:::i;:::-;13794:81;:::i;:::-;13785:90;;13895:5;13924:6;13917:5;13910:21;13958:4;13951:5;13947:16;13940:23;;14011:4;14003:6;13999:17;13991:6;13987:30;14040:3;14032:6;14029:15;14026:122;;;14059:79;;:::i;:::-;14026:122;14174:6;14157:220;14191:6;14186:3;14183:15;14157:220;;;14266:3;14295:37;14328:3;14316:10;14295:37;:::i;:::-;14290:3;14283:50;14362:4;14357:3;14353:14;14346:21;;14233:144;14217:4;14212:3;14208:14;14201:21;;14157:220;;;14161:21;13775:608;;13673:710;;;;;:::o;14406:370::-;14477:5;14526:3;14519:4;14511:6;14507:17;14503:27;14493:122;;14534:79;;:::i;:::-;14493:122;14651:6;14638:20;14676:94;14766:3;14758:6;14751:4;14743:6;14739:17;14676:94;:::i;:::-;14667:103;;14483:293;14406:370;;;;:::o;14782:894::-;14900:6;14908;14957:2;14945:9;14936:7;14932:23;14928:32;14925:119;;;14963:79;;:::i;:::-;14925:119;15111:1;15100:9;15096:17;15083:31;15141:18;15133:6;15130:30;15127:117;;;15163:79;;:::i;:::-;15127:117;15268:78;15338:7;15329:6;15318:9;15314:22;15268:78;:::i;:::-;15258:88;;15054:302;15423:2;15412:9;15408:18;15395:32;15454:18;15446:6;15443:30;15440:117;;;15476:79;;:::i;:::-;15440:117;15581:78;15651:7;15642:6;15631:9;15627:22;15581:78;:::i;:::-;15571:88;;15366:303;14782:894;;;;;:::o;15682:116::-;15752:21;15767:5;15752:21;:::i;:::-;15745:5;15742:32;15732:60;;15788:1;15785;15778:12;15732:60;15682:116;:::o;15804:133::-;15847:5;15885:6;15872:20;15863:29;;15901:30;15925:5;15901:30;:::i;:::-;15804:133;;;;:::o;15943:468::-;16008:6;16016;16065:2;16053:9;16044:7;16040:23;16036:32;16033:119;;;16071:79;;:::i;:::-;16033:119;16191:1;16216:53;16261:7;16252:6;16241:9;16237:22;16216:53;:::i;:::-;16206:63;;16162:117;16318:2;16344:50;16386:7;16377:6;16366:9;16362:22;16344:50;:::i;:::-;16334:60;;16289:115;15943:468;;;;;:::o;16417:117::-;16526:1;16523;16516:12;16540:307;16601:4;16691:18;16683:6;16680:30;16677:56;;;16713:18;;:::i;:::-;16677:56;16751:29;16773:6;16751:29;:::i;:::-;16743:37;;16835:4;16829;16825:15;16817:23;;16540:307;;;:::o;16853:146::-;16950:6;16945:3;16940;16927:30;16991:1;16982:6;16977:3;16973:16;16966:27;16853:146;;;:::o;17005:423::-;17082:5;17107:65;17123:48;17164:6;17123:48;:::i;:::-;17107:65;:::i;:::-;17098:74;;17195:6;17188:5;17181:21;17233:4;17226:5;17222:16;17271:3;17262:6;17257:3;17253:16;17250:25;17247:112;;;17278:79;;:::i;:::-;17247:112;17368:54;17415:6;17410:3;17405;17368:54;:::i;:::-;17088:340;17005:423;;;;;:::o;17447:338::-;17502:5;17551:3;17544:4;17536:6;17532:17;17528:27;17518:122;;17559:79;;:::i;:::-;17518:122;17676:6;17663:20;17701:78;17775:3;17767:6;17760:4;17752:6;17748:17;17701:78;:::i;:::-;17692:87;;17508:277;17447:338;;;;:::o;17791:943::-;17886:6;17894;17902;17910;17959:3;17947:9;17938:7;17934:23;17930:33;17927:120;;;17966:79;;:::i;:::-;17927:120;18086:1;18111:53;18156:7;18147:6;18136:9;18132:22;18111:53;:::i;:::-;18101:63;;18057:117;18213:2;18239:53;18284:7;18275:6;18264:9;18260:22;18239:53;:::i;:::-;18229:63;;18184:118;18341:2;18367:53;18412:7;18403:6;18392:9;18388:22;18367:53;:::i;:::-;18357:63;;18312:118;18497:2;18486:9;18482:18;18469:32;18528:18;18520:6;18517:30;18514:117;;;18550:79;;:::i;:::-;18514:117;18655:62;18709:7;18700:6;18689:9;18685:22;18655:62;:::i;:::-;18645:72;;18440:287;17791:943;;;;;;;:::o;18740:329::-;18799:6;18848:2;18836:9;18827:7;18823:23;18819:32;18816:119;;;18854:79;;:::i;:::-;18816:119;18974:1;18999:53;19044:7;19035:6;19024:9;19020:22;18999:53;:::i;:::-;18989:63;;18945:117;18740:329;;;;:::o;19075:474::-;19143:6;19151;19200:2;19188:9;19179:7;19175:23;19171:32;19168:119;;;19206:79;;:::i;:::-;19168:119;19326:1;19351:53;19396:7;19387:6;19376:9;19372:22;19351:53;:::i;:::-;19341:63;;19297:117;19453:2;19479:53;19524:7;19515:6;19504:9;19500:22;19479:53;:::i;:::-;19469:63;;19424:118;19075:474;;;;;:::o;19555:308::-;19617:4;19707:18;19699:6;19696:30;19693:56;;;19729:18;;:::i;:::-;19693:56;19767:29;19789:6;19767:29;:::i;:::-;19759:37;;19851:4;19845;19841:15;19833:23;;19555:308;;;:::o;19869:425::-;19947:5;19972:66;19988:49;20030:6;19988:49;:::i;:::-;19972:66;:::i;:::-;19963:75;;20061:6;20054:5;20047:21;20099:4;20092:5;20088:16;20137:3;20128:6;20123:3;20119:16;20116:25;20113:112;;;20144:79;;:::i;:::-;20113:112;20234:54;20281:6;20276:3;20271;20234:54;:::i;:::-;19953:341;19869:425;;;;;:::o;20314:340::-;20370:5;20419:3;20412:4;20404:6;20400:17;20396:27;20386:122;;20427:79;;:::i;:::-;20386:122;20544:6;20531:20;20569:79;20644:3;20636:6;20629:4;20621:6;20617:17;20569:79;:::i;:::-;20560:88;;20376:278;20314:340;;;;:::o;20660:509::-;20729:6;20778:2;20766:9;20757:7;20753:23;20749:32;20746:119;;;20784:79;;:::i;:::-;20746:119;20932:1;20921:9;20917:17;20904:31;20962:18;20954:6;20951:30;20948:117;;;20984:79;;:::i;:::-;20948:117;21089:63;21144:7;21135:6;21124:9;21120:22;21089:63;:::i;:::-;21079:73;;20875:287;20660:509;;;;:::o;21175:180::-;21223:77;21220:1;21213:88;21320:4;21317:1;21310:15;21344:4;21341:1;21334:15;21361:320;21405:6;21442:1;21436:4;21432:12;21422:22;;21489:1;21483:4;21479:12;21510:18;21500:81;;21566:4;21558:6;21554:17;21544:27;;21500:81;21628:2;21620:6;21617:14;21597:18;21594:38;21591:84;;21647:18;;:::i;:::-;21591:84;21412:269;21361:320;;;:::o;21687:231::-;21827:34;21823:1;21815:6;21811:14;21804:58;21896:14;21891:2;21883:6;21879:15;21872:39;21687:231;:::o;21924:366::-;22066:3;22087:67;22151:2;22146:3;22087:67;:::i;:::-;22080:74;;22163:93;22252:3;22163:93;:::i;:::-;22281:2;22276:3;22272:12;22265:19;;21924:366;;;:::o;22296:419::-;22462:4;22500:2;22489:9;22485:18;22477:26;;22549:9;22543:4;22539:20;22535:1;22524:9;22520:17;22513:47;22577:131;22703:4;22577:131;:::i;:::-;22569:139;;22296:419;;;:::o;22721:220::-;22861:34;22857:1;22849:6;22845:14;22838:58;22930:3;22925:2;22917:6;22913:15;22906:28;22721:220;:::o;22947:366::-;23089:3;23110:67;23174:2;23169:3;23110:67;:::i;:::-;23103:74;;23186:93;23275:3;23186:93;:::i;:::-;23304:2;23299:3;23295:12;23288:19;;22947:366;;;:::o;23319:419::-;23485:4;23523:2;23512:9;23508:18;23500:26;;23572:9;23566:4;23562:20;23558:1;23547:9;23543:17;23536:47;23600:131;23726:4;23600:131;:::i;:::-;23592:139;;23319:419;;;:::o;23744:243::-;23884:34;23880:1;23872:6;23868:14;23861:58;23953:26;23948:2;23940:6;23936:15;23929:51;23744:243;:::o;23993:366::-;24135:3;24156:67;24220:2;24215:3;24156:67;:::i;:::-;24149:74;;24232:93;24321:3;24232:93;:::i;:::-;24350:2;24345:3;24341:12;24334:19;;23993:366;;;:::o;24365:419::-;24531:4;24569:2;24558:9;24554:18;24546:26;;24618:9;24612:4;24608:20;24604:1;24593:9;24589:17;24582:47;24646:131;24772:4;24646:131;:::i;:::-;24638:139;;24365:419;;;:::o;24790:182::-;24930:34;24926:1;24918:6;24914:14;24907:58;24790:182;:::o;24978:366::-;25120:3;25141:67;25205:2;25200:3;25141:67;:::i;:::-;25134:74;;25217:93;25306:3;25217:93;:::i;:::-;25335:2;25330:3;25326:12;25319:19;;24978:366;;;:::o;25350:419::-;25516:4;25554:2;25543:9;25539:18;25531:26;;25603:9;25597:4;25593:20;25589:1;25578:9;25574:17;25567:47;25631:131;25757:4;25631:131;:::i;:::-;25623:139;;25350:419;;;:::o;25775:236::-;25915:34;25911:1;25903:6;25899:14;25892:58;25984:19;25979:2;25971:6;25967:15;25960:44;25775:236;:::o;26017:366::-;26159:3;26180:67;26244:2;26239:3;26180:67;:::i;:::-;26173:74;;26256:93;26345:3;26256:93;:::i;:::-;26374:2;26369:3;26365:12;26358:19;;26017:366;;;:::o;26389:419::-;26555:4;26593:2;26582:9;26578:18;26570:26;;26642:9;26636:4;26632:20;26628:1;26617:9;26613:17;26606:47;26670:131;26796:4;26670:131;:::i;:::-;26662:139;;26389:419;;;:::o;26814:180::-;26862:77;26859:1;26852:88;26959:4;26956:1;26949:15;26983:4;26980:1;26973:15;27000:191;27040:3;27059:20;27077:1;27059:20;:::i;:::-;27054:25;;27093:20;27111:1;27093:20;:::i;:::-;27088:25;;27136:1;27133;27129:9;27122:16;;27157:3;27154:1;27151:10;27148:36;;;27164:18;;:::i;:::-;27148:36;27000:191;;;;:::o;27197:167::-;27337:19;27333:1;27325:6;27321:14;27314:43;27197:167;:::o;27370:366::-;27512:3;27533:67;27597:2;27592:3;27533:67;:::i;:::-;27526:74;;27609:93;27698:3;27609:93;:::i;:::-;27727:2;27722:3;27718:12;27711:19;;27370:366;;;:::o;27742:419::-;27908:4;27946:2;27935:9;27931:18;27923:26;;27995:9;27989:4;27985:20;27981:1;27970:9;27966:17;27959:47;28023:131;28149:4;28023:131;:::i;:::-;28015:139;;27742:419;;;:::o;28167:170::-;28307:22;28303:1;28295:6;28291:14;28284:46;28167:170;:::o;28343:366::-;28485:3;28506:67;28570:2;28565:3;28506:67;:::i;:::-;28499:74;;28582:93;28671:3;28582:93;:::i;:::-;28700:2;28695:3;28691:12;28684:19;;28343:366;;;:::o;28715:419::-;28881:4;28919:2;28908:9;28904:18;28896:26;;28968:9;28962:4;28958:20;28954:1;28943:9;28939:17;28932:47;28996:131;29122:4;28996:131;:::i;:::-;28988:139;;28715:419;;;:::o;29140:222::-;29280:34;29276:1;29268:6;29264:14;29257:58;29349:5;29344:2;29336:6;29332:15;29325:30;29140:222;:::o;29368:366::-;29510:3;29531:67;29595:2;29590:3;29531:67;:::i;:::-;29524:74;;29607:93;29696:3;29607:93;:::i;:::-;29725:2;29720:3;29716:12;29709:19;;29368:366;;;:::o;29740:419::-;29906:4;29944:2;29933:9;29929:18;29921:26;;29993:9;29987:4;29983:20;29979:1;29968:9;29964:17;29957:47;30021:131;30147:4;30021:131;:::i;:::-;30013:139;;29740:419;;;:::o;30165:348::-;30205:7;30228:20;30246:1;30228:20;:::i;:::-;30223:25;;30262:20;30280:1;30262:20;:::i;:::-;30257:25;;30450:1;30382:66;30378:74;30375:1;30372:81;30367:1;30360:9;30353:17;30349:105;30346:131;;;30457:18;;:::i;:::-;30346:131;30505:1;30502;30498:9;30487:20;;30165:348;;;;:::o;30519:167::-;30659:19;30655:1;30647:6;30643:14;30636:43;30519:167;:::o;30692:366::-;30834:3;30855:67;30919:2;30914:3;30855:67;:::i;:::-;30848:74;;30931:93;31020:3;30931:93;:::i;:::-;31049:2;31044:3;31040:12;31033:19;;30692:366;;;:::o;31064:419::-;31230:4;31268:2;31257:9;31253:18;31245:26;;31317:9;31311:4;31307:20;31303:1;31292:9;31288:17;31281:47;31345:131;31471:4;31345:131;:::i;:::-;31337:139;;31064:419;;;:::o;31489:166::-;31629:18;31625:1;31617:6;31613:14;31606:42;31489:166;:::o;31661:366::-;31803:3;31824:67;31888:2;31883:3;31824:67;:::i;:::-;31817:74;;31900:93;31989:3;31900:93;:::i;:::-;32018:2;32013:3;32009:12;32002:19;;31661:366;;;:::o;32033:419::-;32199:4;32237:2;32226:9;32222:18;32214:26;;32286:9;32280:4;32276:20;32272:1;32261:9;32257:17;32250:47;32314:131;32440:4;32314:131;:::i;:::-;32306:139;;32033:419;;;:::o;32458:233::-;32497:3;32520:24;32538:5;32520:24;:::i;:::-;32511:33;;32566:66;32559:5;32556:77;32553:103;;32636:18;;:::i;:::-;32553:103;32683:1;32676:5;32672:13;32665:20;;32458:233;;;:::o;32697:228::-;32837:34;32833:1;32825:6;32821:14;32814:58;32906:11;32901:2;32893:6;32889:15;32882:36;32697:228;:::o;32931:366::-;33073:3;33094:67;33158:2;33153:3;33094:67;:::i;:::-;33087:74;;33170:93;33259:3;33170:93;:::i;:::-;33288:2;33283:3;33279:12;33272:19;;32931:366;;;:::o;33303:419::-;33469:4;33507:2;33496:9;33492:18;33484:26;;33556:9;33550:4;33546:20;33542:1;33531:9;33527:17;33520:47;33584:131;33710:4;33584:131;:::i;:::-;33576:139;;33303:419;;;:::o;33728:229::-;33868:34;33864:1;33856:6;33852:14;33845:58;33937:12;33932:2;33924:6;33920:15;33913:37;33728:229;:::o;33963:366::-;34105:3;34126:67;34190:2;34185:3;34126:67;:::i;:::-;34119:74;;34202:93;34291:3;34202:93;:::i;:::-;34320:2;34315:3;34311:12;34304:19;;33963:366;;;:::o;34335:419::-;34501:4;34539:2;34528:9;34524:18;34516:26;;34588:9;34582:4;34578:20;34574:1;34563:9;34559:17;34552:47;34616:131;34742:4;34616:131;:::i;:::-;34608:139;;34335:419;;;:::o;34760:180::-;34808:77;34805:1;34798:88;34905:4;34902:1;34895:15;34929:4;34926:1;34919:15;34946:160;35086:12;35082:1;35074:6;35070:14;35063:36;34946:160;:::o;35112:366::-;35254:3;35275:67;35339:2;35334:3;35275:67;:::i;:::-;35268:74;;35351:93;35440:3;35351:93;:::i;:::-;35469:2;35464:3;35460:12;35453:19;;35112:366;;;:::o;35484:419::-;35650:4;35688:2;35677:9;35673:18;35665:26;;35737:9;35731:4;35727:20;35723:1;35712:9;35708:17;35701:47;35765:131;35891:4;35765:131;:::i;:::-;35757:139;;35484:419;;;:::o;35909:159::-;36049:11;36045:1;36037:6;36033:14;36026:35;35909:159;:::o;36074:365::-;36216:3;36237:66;36301:1;36296:3;36237:66;:::i;:::-;36230:73;;36312:93;36401:3;36312:93;:::i;:::-;36430:2;36425:3;36421:12;36414:19;;36074:365;;;:::o;36445:419::-;36611:4;36649:2;36638:9;36634:18;36626:26;;36698:9;36692:4;36688:20;36684:1;36673:9;36669:17;36662:47;36726:131;36852:4;36726:131;:::i;:::-;36718:139;;36445:419;;;:::o;36870:148::-;36972:11;37009:3;36994:18;;36870:148;;;;:::o;37024:141::-;37073:4;37096:3;37088:11;;37119:3;37116:1;37109:14;37153:4;37150:1;37140:18;37132:26;;37024:141;;;:::o;37195:874::-;37298:3;37335:5;37329:12;37364:36;37390:9;37364:36;:::i;:::-;37416:89;37498:6;37493:3;37416:89;:::i;:::-;37409:96;;37536:1;37525:9;37521:17;37552:1;37547:166;;;;37727:1;37722:341;;;;37514:549;;37547:166;37631:4;37627:9;37616;37612:25;37607:3;37600:38;37693:6;37686:14;37679:22;37671:6;37667:35;37662:3;37658:45;37651:52;;37547:166;;37722:341;37789:38;37821:5;37789:38;:::i;:::-;37849:1;37863:154;37877:6;37874:1;37871:13;37863:154;;;37951:7;37945:14;37941:1;37936:3;37932:11;37925:35;38001:1;37992:7;37988:15;37977:26;;37899:4;37896:1;37892:12;37887:17;;37863:154;;;38046:6;38041:3;38037:16;38030:23;;37729:334;;37514:549;;37302:767;;37195:874;;;;:::o;38075:269::-;38204:3;38226:92;38314:3;38305:6;38226:92;:::i;:::-;38219:99;;38335:3;38328:10;;38075:269;;;;:::o;38350:151::-;38490:3;38486:1;38478:6;38474:14;38467:27;38350:151;:::o;38507:400::-;38667:3;38688:84;38770:1;38765:3;38688:84;:::i;:::-;38681:91;;38781:93;38870:3;38781:93;:::i;:::-;38899:1;38894:3;38890:11;38883:18;;38507:400;;;:::o;38913:390::-;39019:3;39047:39;39080:5;39047:39;:::i;:::-;39102:89;39184:6;39179:3;39102:89;:::i;:::-;39095:96;;39200:65;39258:6;39253:3;39246:4;39239:5;39235:16;39200:65;:::i;:::-;39290:6;39285:3;39281:16;39274:23;;39023:280;38913:390;;;;:::o;39309:155::-;39449:7;39445:1;39437:6;39433:14;39426:31;39309:155;:::o;39470:400::-;39630:3;39651:84;39733:1;39728:3;39651:84;:::i;:::-;39644:91;;39744:93;39833:3;39744:93;:::i;:::-;39862:1;39857:3;39853:11;39846:18;;39470:400;;;:::o;39876:961::-;40255:3;40277:92;40365:3;40356:6;40277:92;:::i;:::-;40270:99;;40386:148;40530:3;40386:148;:::i;:::-;40379:155;;40551:95;40642:3;40633:6;40551:95;:::i;:::-;40544:102;;40663:148;40807:3;40663:148;:::i;:::-;40656:155;;40828:3;40821:10;;39876:961;;;;;:::o;40843:174::-;40983:26;40979:1;40971:6;40967:14;40960:50;40843:174;:::o;41023:366::-;41165:3;41186:67;41250:2;41245:3;41186:67;:::i;:::-;41179:74;;41262:93;41351:3;41262:93;:::i;:::-;41380:2;41375:3;41371:12;41364:19;;41023:366;;;:::o;41395:419::-;41561:4;41599:2;41588:9;41584:18;41576:26;;41648:9;41642:4;41638:20;41634:1;41623:9;41619:17;41612:47;41676:131;41802:4;41676:131;:::i;:::-;41668:139;;41395:419;;;:::o;41820:225::-;41960:34;41956:1;41948:6;41944:14;41937:58;42029:8;42024:2;42016:6;42012:15;42005:33;41820:225;:::o;42051:366::-;42193:3;42214:67;42278:2;42273:3;42214:67;:::i;:::-;42207:74;;42290:93;42379:3;42290:93;:::i;:::-;42408:2;42403:3;42399:12;42392:19;;42051:366;;;:::o;42423:419::-;42589:4;42627:2;42616:9;42612:18;42604:26;;42676:9;42670:4;42666:20;42662:1;42651:9;42647:17;42640:47;42704:131;42830:4;42704:131;:::i;:::-;42696:139;;42423:419;;;:::o;42848:93::-;42885:6;42932:2;42927;42920:5;42916:14;42912:23;42902:33;;42848:93;;;:::o;42947:107::-;42991:8;43041:5;43035:4;43031:16;43010:37;;42947:107;;;;:::o;43060:393::-;43129:6;43179:1;43167:10;43163:18;43202:97;43232:66;43221:9;43202:97;:::i;:::-;43320:39;43350:8;43339:9;43320:39;:::i;:::-;43308:51;;43392:4;43388:9;43381:5;43377:21;43368:30;;43441:4;43431:8;43427:19;43420:5;43417:30;43407:40;;43136:317;;43060:393;;;;;:::o;43459:60::-;43487:3;43508:5;43501:12;;43459:60;;;:::o;43525:142::-;43575:9;43608:53;43626:34;43635:24;43653:5;43635:24;:::i;:::-;43626:34;:::i;:::-;43608:53;:::i;:::-;43595:66;;43525:142;;;:::o;43673:75::-;43716:3;43737:5;43730:12;;43673:75;;;:::o;43754:269::-;43864:39;43895:7;43864:39;:::i;:::-;43925:91;43974:41;43998:16;43974:41;:::i;:::-;43966:6;43959:4;43953:11;43925:91;:::i;:::-;43919:4;43912:105;43830:193;43754:269;;;:::o;44029:73::-;44074:3;44029:73;:::o;44108:189::-;44185:32;;:::i;:::-;44226:65;44284:6;44276;44270:4;44226:65;:::i;:::-;44161:136;44108:189;;:::o;44303:186::-;44363:120;44380:3;44373:5;44370:14;44363:120;;;44434:39;44471:1;44464:5;44434:39;:::i;:::-;44407:1;44400:5;44396:13;44387:22;;44363:120;;;44303:186;;:::o;44495:543::-;44596:2;44591:3;44588:11;44585:446;;;44630:38;44662:5;44630:38;:::i;:::-;44714:29;44732:10;44714:29;:::i;:::-;44704:8;44700:44;44897:2;44885:10;44882:18;44879:49;;;44918:8;44903:23;;44879:49;44941:80;44997:22;45015:3;44997:22;:::i;:::-;44987:8;44983:37;44970:11;44941:80;:::i;:::-;44600:431;;44585:446;44495:543;;;:::o;45044:117::-;45098:8;45148:5;45142:4;45138:16;45117:37;;45044:117;;;;:::o;45167:169::-;45211:6;45244:51;45292:1;45288:6;45280:5;45277:1;45273:13;45244:51;:::i;:::-;45240:56;45325:4;45319;45315:15;45305:25;;45218:118;45167:169;;;;:::o;45341:295::-;45417:4;45563:29;45588:3;45582:4;45563:29;:::i;:::-;45555:37;;45625:3;45622:1;45618:11;45612:4;45609:21;45601:29;;45341:295;;;;:::o;45641:1395::-;45758:37;45791:3;45758:37;:::i;:::-;45860:18;45852:6;45849:30;45846:56;;;45882:18;;:::i;:::-;45846:56;45926:38;45958:4;45952:11;45926:38;:::i;:::-;46011:67;46071:6;46063;46057:4;46011:67;:::i;:::-;46105:1;46129:4;46116:17;;46161:2;46153:6;46150:14;46178:1;46173:618;;;;46835:1;46852:6;46849:77;;;46901:9;46896:3;46892:19;46886:26;46877:35;;46849:77;46952:67;47012:6;47005:5;46952:67;:::i;:::-;46946:4;46939:81;46808:222;46143:887;;46173:618;46225:4;46221:9;46213:6;46209:22;46259:37;46291:4;46259:37;:::i;:::-;46318:1;46332:208;46346:7;46343:1;46340:14;46332:208;;;46425:9;46420:3;46416:19;46410:26;46402:6;46395:42;46476:1;46468:6;46464:14;46454:24;;46523:2;46512:9;46508:18;46495:31;;46369:4;46366:1;46362:12;46357:17;;46332:208;;;46568:6;46559:7;46556:19;46553:179;;;46626:9;46621:3;46617:19;46611:26;46669:48;46711:4;46703:6;46699:17;46688:9;46669:48;:::i;:::-;46661:6;46654:64;46576:156;46553:179;46778:1;46774;46766:6;46762:14;46758:22;46752:4;46745:36;46180:611;;;46143:887;;45733:1303;;;45641:1395;;:::o;47042:231::-;47182:34;47178:1;47170:6;47166:14;47159:58;47251:14;47246:2;47238:6;47234:15;47227:39;47042:231;:::o;47279:366::-;47421:3;47442:67;47506:2;47501:3;47442:67;:::i;:::-;47435:74;;47518:93;47607:3;47518:93;:::i;:::-;47636:2;47631:3;47627:12;47620:19;;47279:366;;;:::o;47651:419::-;47817:4;47855:2;47844:9;47840:18;47832:26;;47904:9;47898:4;47894:20;47890:1;47879:9;47875:17;47868:47;47932:131;48058:4;47932:131;:::i;:::-;47924:139;;47651:419;;;:::o;48076:224::-;48216:34;48212:1;48204:6;48200:14;48193:58;48285:7;48280:2;48272:6;48268:15;48261:32;48076:224;:::o;48306:366::-;48448:3;48469:67;48533:2;48528:3;48469:67;:::i;:::-;48462:74;;48545:93;48634:3;48545:93;:::i;:::-;48663:2;48658:3;48654:12;48647:19;;48306:366;;;:::o;48678:419::-;48844:4;48882:2;48871:9;48867:18;48859:26;;48931:9;48925:4;48921:20;48917:1;48906:9;48902:17;48895:47;48959:131;49085:4;48959:131;:::i;:::-;48951:139;;48678:419;;;:::o;49103:223::-;49243:34;49239:1;49231:6;49227:14;49220:58;49312:6;49307:2;49299:6;49295:15;49288:31;49103:223;:::o;49332:366::-;49474:3;49495:67;49559:2;49554:3;49495:67;:::i;:::-;49488:74;;49571:93;49660:3;49571:93;:::i;:::-;49689:2;49684:3;49680:12;49673:19;;49332:366;;;:::o;49704:419::-;49870:4;49908:2;49897:9;49893:18;49885:26;;49957:9;49951:4;49947:20;49943:1;49932:9;49928:17;49921:47;49985:131;50111:4;49985:131;:::i;:::-;49977:139;;49704:419;;;:::o;50129:194::-;50169:4;50189:20;50207:1;50189:20;:::i;:::-;50184:25;;50223:20;50241:1;50223:20;:::i;:::-;50218:25;;50267:1;50264;50260:9;50252:17;;50291:1;50285:4;50282:11;50279:37;;;50296:18;;:::i;:::-;50279:37;50129:194;;;;:::o;50329:178::-;50497:3;50492;50485:16;50329:178;:::o;50513:699::-;50783:3;50805:95;50896:3;50887:6;50805:95;:::i;:::-;50798:102;;50910:137;51043:3;50910:137;:::i;:::-;51072:1;51067:3;51063:11;51056:18;;51091:95;51182:3;51173:6;51091:95;:::i;:::-;51084:102;;51203:3;51196:10;;50513:699;;;;;:::o;51218:275::-;51350:3;51372:95;51463:3;51454:6;51372:95;:::i;:::-;51365:102;;51484:3;51477:10;;51218:275;;;;:::o;51499:94::-;51532:8;51580:5;51576:2;51572:14;51551:35;;51499:94;;;:::o;51599:::-;51638:7;51667:20;51681:5;51667:20;:::i;:::-;51656:31;;51599:94;;;:::o;51699:100::-;51738:7;51767:26;51787:5;51767:26;:::i;:::-;51756:37;;51699:100;;;:::o;51805:157::-;51910:45;51930:24;51948:5;51930:24;:::i;:::-;51910:45;:::i;:::-;51905:3;51898:58;51805:157;;:::o;51968:256::-;52080:3;52095:75;52166:3;52157:6;52095:75;:::i;:::-;52195:2;52190:3;52186:12;52179:19;;52215:3;52208:10;;51968:256;;;;:::o;52230:175::-;52370:27;52366:1;52358:6;52354:14;52347:51;52230:175;:::o;52411:366::-;52553:3;52574:67;52638:2;52633:3;52574:67;:::i;:::-;52567:74;;52650:93;52739:3;52650:93;:::i;:::-;52768:2;52763:3;52759:12;52752:19;;52411:366;;;:::o;52783:419::-;52949:4;52987:2;52976:9;52972:18;52964:26;;53036:9;53030:4;53026:20;53022:1;53011:9;53007:17;53000:47;53064:131;53190:4;53064:131;:::i;:::-;53056:139;;52783:419;;;:::o;53208:237::-;53348:34;53344:1;53336:6;53332:14;53325:58;53417:20;53412:2;53404:6;53400:15;53393:45;53208:237;:::o;53451:366::-;53593:3;53614:67;53678:2;53673:3;53614:67;:::i;:::-;53607:74;;53690:93;53779:3;53690:93;:::i;:::-;53808:2;53803:3;53799:12;53792:19;;53451:366;;;:::o;53823:419::-;53989:4;54027:2;54016:9;54012:18;54004:26;;54076:9;54070:4;54066:20;54062:1;54051:9;54047:17;54040:47;54104:131;54230:4;54104:131;:::i;:::-;54096:139;;53823:419;;;:::o;54248:180::-;54296:77;54293:1;54286:88;54393:4;54390:1;54383:15;54417:4;54414:1;54407:15;54434:185;54474:1;54491:20;54509:1;54491:20;:::i;:::-;54486:25;;54525:20;54543:1;54525:20;:::i;:::-;54520:25;;54564:1;54554:35;;54569:18;;:::i;:::-;54554:35;54611:1;54608;54604:9;54599:14;;54434:185;;;;:::o;54625:176::-;54657:1;54674:20;54692:1;54674:20;:::i;:::-;54669:25;;54708:20;54726:1;54708:20;:::i;:::-;54703:25;;54747:1;54737:35;;54752:18;;:::i;:::-;54737:35;54793:1;54790;54786:9;54781:14;;54625:176;;;;:::o;54807:98::-;54858:6;54892:5;54886:12;54876:22;;54807:98;;;:::o;54911:168::-;54994:11;55028:6;55023:3;55016:19;55068:4;55063:3;55059:14;55044:29;;54911:168;;;;:::o;55085:373::-;55171:3;55199:38;55231:5;55199:38;:::i;:::-;55253:70;55316:6;55311:3;55253:70;:::i;:::-;55246:77;;55332:65;55390:6;55385:3;55378:4;55371:5;55367:16;55332:65;:::i;:::-;55422:29;55444:6;55422:29;:::i;:::-;55417:3;55413:39;55406:46;;55175:283;55085:373;;;;:::o;55464:640::-;55659:4;55697:3;55686:9;55682:19;55674:27;;55711:71;55779:1;55768:9;55764:17;55755:6;55711:71;:::i;:::-;55792:72;55860:2;55849:9;55845:18;55836:6;55792:72;:::i;:::-;55874;55942:2;55931:9;55927:18;55918:6;55874:72;:::i;:::-;55993:9;55987:4;55983:20;55978:2;55967:9;55963:18;55956:48;56021:76;56092:4;56083:6;56021:76;:::i;:::-;56013:84;;55464:640;;;;;;;:::o;56110:141::-;56166:5;56197:6;56191:13;56182:22;;56213:32;56239:5;56213:32;:::i;:::-;56110:141;;;;:::o;56257:349::-;56326:6;56375:2;56363:9;56354:7;56350:23;56346:32;56343:119;;;56381:79;;:::i;:::-;56343:119;56501:1;56526:63;56581:7;56572:6;56561:9;56557:22;56526:63;:::i;:::-;56516:73;;56472:127;56257:349;;;;:::o;56612:171::-;56651:3;56674:24;56692:5;56674:24;:::i;:::-;56665:33;;56720:4;56713:5;56710:15;56707:41;;56728:18;;:::i;:::-;56707:41;56775:1;56768:5;56764:13;56757:20;;56612:171;;;:::o;56789:182::-;56929:34;56925:1;56917:6;56913:14;56906:58;56789:182;:::o;56977:366::-;57119:3;57140:67;57204:2;57199:3;57140:67;:::i;:::-;57133:74;;57216:93;57305:3;57216:93;:::i;:::-;57334:2;57329:3;57325:12;57318:19;;56977:366;;;:::o;57349:419::-;57515:4;57553:2;57542:9;57538:18;57530:26;;57602:9;57596:4;57592:20;57588:1;57577:9;57573:17;57566:47;57630:131;57756:4;57630:131;:::i;:::-;57622:139;;57349:419;;;:::o;57774:182::-;57914:34;57910:1;57902:6;57898:14;57891:58;57774:182;:::o;57962:366::-;58104:3;58125:67;58189:2;58184:3;58125:67;:::i;:::-;58118:74;;58201:93;58290:3;58201:93;:::i;:::-;58319:2;58314:3;58310:12;58303:19;;57962:366;;;:::o;58334:419::-;58500:4;58538:2;58527:9;58523:18;58515:26;;58587:9;58581:4;58577:20;58573:1;58562:9;58558:17;58551:47;58615:131;58741:4;58615:131;:::i;:::-;58607:139;;58334:419;;;:::o;58759:178::-;58899:30;58895:1;58887:6;58883:14;58876:54;58759:178;:::o;58943:366::-;59085:3;59106:67;59170:2;59165:3;59106:67;:::i;:::-;59099:74;;59182:93;59271:3;59182:93;:::i;:::-;59300:2;59295:3;59291:12;59284:19;;58943:366;;;:::o;59315:419::-;59481:4;59519:2;59508:9;59504:18;59496:26;;59568:9;59562:4;59558:20;59554:1;59543:9;59539:17;59532:47;59596:131;59722:4;59596:131;:::i;:::-;59588:139;;59315:419;;;:::o
Swarm Source
ipfs://56943be799d6dd3b3a3c4a7af95fffc6e2b8eef99abec6a2d6b61d243ed41523
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.