Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
2,916 OOO
Holders
371
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 OOOLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
INCOOOM
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-09-13 */ // File @openzeppelin/contracts/utils/introspection/[email protected] pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @openzeppelin/contracts/token/ERC721/[email protected] pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File @openzeppelin/contracts/token/ERC721/[email protected] pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File @openzeppelin/contracts/utils/introspection/[email protected] pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File @openzeppelin/contracts/token/ERC721/[email protected] pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.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 {} } // File @openzeppelin/contracts/access/[email protected] 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() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File contracts/INCOOOM.sol // SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity ^0.8.0; interface IHelper { function cardValue(uint _number) external pure returns(string memory _suit, string memory _value, bool _joker); } contract INCOOOM is ERC721, Ownable { using Strings for uint256; /* ======== EVENTS ======== */ event DealPreFlop(address _recipient, uint _amount); event Deal(address _recipient, uint _amount); /* ======== STRUCTS ======== */ struct CardInfo { string suit; string value; bool joker; uint deck; uint cardNumber; TIER tier; } struct Deck { TIER tier; uint tiersRemaining; } struct PreSale { uint _blockStart; uint _blockEnd; } /* ======== ENUM ======== */ enum TIER {COMMON, GOLD, PSYCHEDELIC} /* ======== STATE VARIABLES ======== */ uint256[54] private numberArr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53]; PreSale public preSale; address payable public treasury; address payable public fund; address public helper; string private _baseUri = "ipfs://QmaGRDin2YYRj3zbPE23p6YPeTpMn7YcFqtVDD6aY8Zoo3/"; uint private constant numberOfDecks = 54; uint public cardsLeftInDeck; uint public currentDeck; uint public totalSupply; uint private immutable preSaleLength; uint256 private constant PRICE_PER_CARD = 99000000000000000 wei; uint256 private constant PRICE_PER_CARD_PRESALE = 33000000000000000 wei; bool public preSaleActive; bool public saleActive; /* ======== MAPPINGS ======== */ mapping(address => mapping(uint => uint)) public cardsPerDeckPurchased; mapping(uint => CardInfo) private cardInfo; mapping(TIER => uint) private tiersRemaining; mapping(TIER => uint) private preSaleTiersRemaining; mapping(uint => TIER) private tierOfDeck; mapping(uint => Deck) private deckInfo; mapping(uint => bool) public deckFullyDelt; /* ======== CONSTRUCTOR ======== */ constructor(address payable _treasury, address payable _fund, address _helper, uint _preSaleLength) ERC721("INCOOOM", "OOO") { require(_treasury != address(0)); treasury = _treasury; require(_fund != address(0)); fund = _fund; require(_helper != address(0)); helper = _helper; preSaleLength = _preSaleLength; tiersRemaining[TIER.COMMON] = 36; tiersRemaining[TIER.GOLD] = 12; tiersRemaining[TIER.PSYCHEDELIC] = 6; } /* ======== ADMIN FUNCTIONS ======== */ /** @notice start presale */ function startPreSale() external onlyOwner() { require(preSale._blockStart == 0, "Presale already started"); preSaleActive = true; preSale = PreSale ({ _blockStart: block.number, _blockEnd: block.number + preSaleLength }); preSaleTiersRemaining[TIER.COMMON] = 3; preSaleTiersRemaining[TIER.GOLD] = 2; preSaleTiersRemaining[TIER.PSYCHEDELIC] = 1; _newDeck(_randomTier()); } /** @notice start main sale */ function startSale() external onlyOwner() { require(preSale._blockStart != 0 && !saleActive && preSale._blockEnd < block.number, "Cannot start presale twice or start while presale is going on"); preSaleActive = false; saleActive = true; } /** @notice allows admin to reserve decks @param _recipient address @param _amount uint @param _tier TIER */ function reserveDeck(address _recipient, uint _amount, TIER _tier) external onlyOwner() { require(preSale._blockStart == 0, "Presale has been started"); for(uint i; i < _amount; i++) { _newDeck(_tier); for(uint n; n < numberArr.length; n++){ _mintCard(_recipient, numberArr[n]); } } deckFullyDelt[currentDeck] = true; } /** @notice allows admin to set base URI @param _uri string */ function setBaseURI(string calldata _uri) external onlyOwner() { _baseUri = _uri; } /** @notice withdraw ETH in contract to fund and treasury */ function withdraw() external onlyOwner() { require(address(this).balance > 0, "Balance is 0"); uint _fundSend = address(this).balance / 2; uint _treasurySend = address(this).balance - _fundSend; (bool successFund,) = fund.call{value:_fundSend}(""); require(successFund, "could not send to fund"); (bool successTreasury,) = treasury.call{value:_treasurySend}(""); require(successTreasury, "could not send to treasury"); } /* ======== USER FUNCTIONS ======== */ /** @notice allows users to participate in presale @param _amount uint */ function dealPreFlop(uint _amount) external payable { require(preSale._blockEnd > block.number && preSaleActive, "Presale not active"); require(cardsPerDeckPurchased[msg.sender][currentDeck] + _amount <= 5, "Over 5 cards in a single deck"); require( msg.value == PRICE_PER_CARD_PRESALE * _amount, "Wrong amount"); if(cardsLeftInDeck >= _amount) { _deal(_amount); } else { uint _nextDeck = _amount - cardsLeftInDeck; _deal(cardsLeftInDeck); _deal(_nextDeck); } if(currentDeck == 13) { preSaleActive = false; require(cardsLeftInDeck == 54, "Cannot mint over 6 decks in presale"); } emit DealPreFlop(msg.sender, _amount); } /** @notice allows users to participate in sale @param _amount uint */ function deal(uint _amount) external payable { require(saleActive); require(cardsPerDeckPurchased[msg.sender][currentDeck] + _amount <= 5, "Over 5 cards in a single deck"); require( msg.value == PRICE_PER_CARD * _amount, "Wrong amount"); if(cardsLeftInDeck >= _amount) { _deal(_amount); } else { uint _nextDeck = _amount - cardsLeftInDeck; _deal(cardsLeftInDeck); _deal(_nextDeck); } emit Deal(msg.sender, _amount); } /* ======== INTERNAL HELPER FUNCTIONS ======== */ /** @notice internal deal function @param _amount uint */ function _deal(uint _amount) internal { cardsPerDeckPurchased[msg.sender][currentDeck] += _amount; for(uint i; i < _amount; i++) { uint _id = numberArr[numberArr.length - cardsLeftInDeck]; _mintCard(msg.sender, _id); cardsLeftInDeck -= 1; } if(cardsLeftInDeck == 0) { _newDeck(_randomTier()); } } /** @notice gets random tier for new deck */ function _randomTier() internal view returns(TIER) { uint256 n = uint256(keccak256(abi.encodePacked(block.timestamp))) % 9; TIER _tier; if(preSale._blockEnd > block.number && preSaleActive && currentDeck < 12) { if(n <= 5 && preSaleTiersRemaining[TIER.COMMON] > 0) { _tier = TIER.COMMON; } else if(n <= 7 && preSaleTiersRemaining[TIER.GOLD] > 0) { _tier = TIER.GOLD; } else if( n == 8 && preSaleTiersRemaining[TIER.PSYCHEDELIC] > 0 ) { _tier = TIER.PSYCHEDELIC; } else { if(preSaleTiersRemaining[TIER.GOLD] > 0 ) { _tier = TIER.GOLD; } else if(preSaleTiersRemaining[TIER.COMMON] > 0) { _tier = TIER.COMMON; } else { _tier = TIER.PSYCHEDELIC; } } } else { if(n <= 5 && tiersRemaining[TIER.COMMON] > 0) { _tier = TIER.COMMON; } else if(n <= 7 && tiersRemaining[TIER.GOLD] > 0) { _tier = TIER.GOLD; } else if( n == 8 && tiersRemaining[TIER.PSYCHEDELIC] > 0 ) { _tier = TIER.PSYCHEDELIC; } else { if(tiersRemaining[TIER.GOLD] > 0 ) { _tier = TIER.GOLD; } else if(tiersRemaining[TIER.COMMON] > 0) { _tier = TIER.COMMON; } else { _tier = TIER.PSYCHEDELIC; } } } return _tier; } /** @notice sets new deck @param _tier TIER */ function _newDeck(TIER _tier) internal { require(!deckFullyDelt[54], "All decks delt"); deckFullyDelt[currentDeck] = true; if(preSale._blockEnd > block.number && preSaleActive && currentDeck < 12) { preSaleTiersRemaining[_tier] -= 1; } if(currentDeck < numberOfDecks) { deckInfo[currentDeck + 1] = Deck({ tier: _tier, tiersRemaining: tiersRemaining[_tier] }); tiersRemaining[_tier] -= 1; currentDeck += 1; cardsLeftInDeck = 54; tierOfDeck[currentDeck] = _tier; _shuffle(); } } /** @notice shuffles deck upon new deck being delt */ function _shuffle() internal { for (uint256 i = 0; i < numberArr.length; i++) { uint256 n = i + uint256(keccak256(abi.encodePacked(block.timestamp))) % (numberArr.length - i); uint256 temp = numberArr[n]; numberArr[n] = numberArr[i]; numberArr[i] = temp; } } /** @notice mints card @param _recipient address @param _cardInDeck uint @return uint */ function _mintCard(address _recipient, uint _cardInDeck) internal returns (uint) { uint id = totalSupply; totalSupply += 1; _safeMint(_recipient, id); (string memory _suit, string memory _value, bool _joker) = IHelper(helper).cardValue(_cardInDeck); cardInfo[id] = CardInfo({ suit: _suit, value: _value, joker: _joker, deck: currentDeck, cardNumber: _cardInDeck, tier: tierOfDeck[currentDeck] }); return(id); } /* ======== VIEW FUNCTIONS ======== */ /** @notice gets info of a card @param _id uint @return _cardInfo CardInfo */ function getCardInfo(uint _id) external view returns(CardInfo memory _cardInfo) { uint _deck = cardInfo[_id].deck; if(deckFullyDelt[_deck]) { _cardInfo = cardInfo[_id]; } } /** @notice gets URI of a specific token ID @param tokenId uint @return string */ function tokenURI(uint256 tokenId) override public view returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); CardInfo memory _cardInfo = cardInfo[tokenId]; uint _uri; uint _tierNumber = deckInfo[_cardInfo.deck].tiersRemaining; uint _num = _cardInfo.cardNumber + 1; if(!deckFullyDelt[_cardInfo.deck]) { _uri = 0; } else { if(_cardInfo.tier == TIER.COMMON) { _uri = _num + (54 * (36 - _tierNumber)); } else if (_cardInfo.tier == TIER.GOLD) { _uri = _num + (54 * (12 - _tierNumber + 36)); } else { _uri = _num + (54 * (6 - _tierNumber + 48)); } } return string(abi.encodePacked(baseURI(), uint256(_uri).toString())); } /** @notice gets base URI @return string */ function baseURI() public view virtual returns (string memory) { return _baseUri; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address payable","name":"_treasury","type":"address"},{"internalType":"address payable","name":"_fund","type":"address"},{"internalType":"address","name":"_helper","type":"address"},{"internalType":"uint256","name":"_preSaleLength","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":false,"internalType":"address","name":"_recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"Deal","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"DealPreFlop","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cardsLeftInDeck","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"cardsPerDeckPurchased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentDeck","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deal","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"dealPreFlop","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"deckFullyDelt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fund","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":"uint256","name":"_id","type":"uint256"}],"name":"getCardInfo","outputs":[{"components":[{"internalType":"string","name":"suit","type":"string"},{"internalType":"string","name":"value","type":"string"},{"internalType":"bool","name":"joker","type":"bool"},{"internalType":"uint256","name":"deck","type":"uint256"},{"internalType":"uint256","name":"cardNumber","type":"uint256"},{"internalType":"enum INCOOOM.TIER","name":"tier","type":"uint8"}],"internalType":"struct INCOOOM.CardInfo","name":"_cardInfo","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"helper","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":"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":"preSale","outputs":[{"internalType":"uint256","name":"_blockStart","type":"uint256"},{"internalType":"uint256","name":"_blockEnd","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"enum INCOOOM.TIER","name":"_tier","type":"uint8"}],"name":"reserveDeck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startPreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a0604052604051806106c00160405280600060ff168152602001600160ff168152602001600260ff168152602001600360ff168152602001600460ff168152602001600560ff168152602001600660ff168152602001600760ff168152602001600860ff168152602001600960ff168152602001600a60ff168152602001600b60ff168152602001600c60ff168152602001600d60ff168152602001600e60ff168152602001600f60ff168152602001601060ff168152602001601160ff168152602001601260ff168152602001601360ff168152602001601460ff168152602001601560ff168152602001601660ff168152602001601760ff168152602001601860ff168152602001601960ff168152602001601a60ff168152602001601b60ff168152602001601c60ff168152602001601d60ff168152602001601e60ff168152602001601f60ff168152602001602060ff168152602001602160ff168152602001602260ff168152602001602360ff168152602001602460ff168152602001602560ff168152602001602660ff168152602001602760ff168152602001602860ff168152602001602960ff168152602001602a60ff168152602001602b60ff168152602001602c60ff168152602001602d60ff168152602001602e60ff168152602001602f60ff168152602001603060ff168152602001603160ff168152602001603260ff168152602001603360ff168152602001603460ff168152602001603560ff1681525060079060366200023c92919062000758565b506040518060600160405280603681526020016200679e60369139604290805190602001906200026e929190620007a2565b503480156200027c57600080fd5b50604051620067d4380380620067d48339818101604052810190620002a2919062000897565b6040518060400160405280600781526020017f494e434f4f4f4d000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4f4f4f0000000000000000000000000000000000000000000000000000000000815250816000908051906020019062000326929190620007a2565b5080600190805190602001906200033f929190620007a2565b50505062000362620003566200068a60201b60201c565b6200069260201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156200039d57600080fd5b83603f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156200041957600080fd5b82604060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200049557600080fd5b81604160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080608081815250506024604960008060028111156200051e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600281111562000557577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002081905550600c6049600060016002811115620005aa577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6002811115620005e3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81526020019081526020016000208190555060066049600060028081111562000635577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60028111156200066e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001908152602001600020819055505050505062000a08565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82603681019282156200078f579160200282015b828111156200078e578251829060ff169055916020019190600101906200076c565b5b5090506200079e919062000833565b5090565b828054620007b09062000955565b90600052602060002090601f016020900481019282620007d4576000855562000820565b82601f10620007ef57805160ff191683800117855562000820565b8280016001018555821562000820579182015b828111156200081f57825182559160200191906001019062000802565b5b5090506200082f919062000833565b5090565b5b808211156200084e57600081600090555060010162000834565b5090565b6000815190506200086381620009ba565b92915050565b6000815190506200087a81620009d4565b92915050565b6000815190506200089181620009ee565b92915050565b60008060008060808587031215620008ae57600080fd5b6000620008be8782880162000869565b9450506020620008d18782880162000869565b9350506040620008e48782880162000852565b9250506060620008f78782880162000880565b91505092959194509250565b600062000910826200092b565b9050919050565b600062000924826200092b565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060028204905060018216806200096e57607f821691505b602082108114156200098557620009846200098b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b620009c58162000903565b8114620009d157600080fd5b50565b620009df8162000917565b8114620009eb57600080fd5b50565b620009f9816200094b565b811462000a0557600080fd5b50565b608051615d7a62000a246000396000610f700152615d7a6000f3fe60806040526004361061020f5760003560e01c806370a0823111610118578063b60d4288116100a0578063c959c42b1161006f578063c959c42b1461075d578063d851d66f14610779578063e783a1bc146107a2578063e985e9c5146107df578063f2fde38b1461081c5761020f565b8063b60d4288146106b5578063b66a0e5d146106e0578063b88d4fde146106f7578063c87b56dd146107205761020f565b80638da5cb5b116100e75780638da5cb5b146105ce5780638ecd9b3f146105f957806395d89b4114610624578063970129be1461064f578063a22cb4651461068c5761020f565b806370a0823114610533578063715018a614610570578063841e483d1461058757806384494708146105a35761020f565b806355dd574c1161019b5780636352211e1161016a5780636352211e1461044a57806363b0e66a1461048757806368428a1b146104b25780636c0360eb146104dd5780637010fef2146105085761020f565b806355dd574c146103b357806355f804b3146103ca5780635a7adf7f146103f357806361d027b31461041f5761020f565b806318160ddd116101e257806318160ddd146102e257806323b872dd1461030d578063321de05d146103365780633ccfd60b1461037357806342842e0e1461038a5761020f565b806301ffc9a71461021457806306fdde0314610251578063081812fc1461027c578063095ea7b3146102b9575b600080fd5b34801561022057600080fd5b5061023b60048036038101906102369190614705565b610845565b604051610248919061541d565b60405180910390f35b34801561025d57600080fd5b50610266610927565b6040516102739190615438565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e919061481b565b6109b9565b6040516102b09190615372565b60405180910390f35b3480156102c557600080fd5b506102e060048036038101906102db919061467a565b610a3e565b005b3480156102ee57600080fd5b506102f7610b56565b60405161030491906157dc565b60405180910390f35b34801561031957600080fd5b50610334600480360381019061032f9190614574565b610b5c565b005b34801561034257600080fd5b5061035d6004803603810190610358919061481b565b610bbc565b60405161036a919061541d565b60405180910390f35b34801561037f57600080fd5b50610388610bdc565b005b34801561039657600080fd5b506103b160048036038101906103ac9190614574565b610e5e565b005b3480156103bf57600080fd5b506103c8610e7e565b005b3480156103d657600080fd5b506103f160048036038101906103ec9190614757565b611164565b005b3480156103ff57600080fd5b506104086111f6565b6040516104169291906157f7565b60405180910390f35b34801561042b57600080fd5b50610434611208565b604051610441919061538d565b60405180910390f35b34801561045657600080fd5b50610471600480360381019061046c919061481b565b61122e565b60405161047e9190615372565b60405180910390f35b34801561049357600080fd5b5061049c6112e0565b6040516104a99190615372565b60405180910390f35b3480156104be57600080fd5b506104c7611306565b6040516104d4919061541d565b60405180910390f35b3480156104e957600080fd5b506104f2611319565b6040516104ff9190615438565b60405180910390f35b34801561051457600080fd5b5061051d6113ab565b60405161052a91906157dc565b60405180910390f35b34801561053f57600080fd5b5061055a6004803603810190610555919061450f565b6113b1565b60405161056791906157dc565b60405180910390f35b34801561057c57600080fd5b50610585611469565b005b6105a1600480360381019061059c919061481b565b6114f1565b005b3480156105af57600080fd5b506105b861172c565b6040516105c5919061541d565b60405180910390f35b3480156105da57600080fd5b506105e361173f565b6040516105f09190615372565b60405180910390f35b34801561060557600080fd5b5061060e611769565b60405161061b91906157dc565b60405180910390f35b34801561063057600080fd5b5061063961176f565b6040516106469190615438565b60405180910390f35b34801561065b57600080fd5b506106766004803603810190610671919061481b565b611801565b60405161068391906157ba565b60405180910390f35b34801561069857600080fd5b506106b360048036038101906106ae919061463e565b611a4b565b005b3480156106c157600080fd5b506106ca611bcc565b6040516106d7919061538d565b60405180910390f35b3480156106ec57600080fd5b506106f5611bf2565b005b34801561070357600080fd5b5061071e600480360381019061071991906145c3565b611d18565b005b34801561072c57600080fd5b506107476004803603810190610742919061481b565b611d7a565b6040516107549190615438565b60405180910390f35b6107776004803603810190610772919061481b565b6121f4565b005b34801561078557600080fd5b506107a0600480360381019061079b91906146b6565b61237e565b005b3480156107ae57600080fd5b506107c960048036038101906107c4919061467a565b612503565b6040516107d691906157dc565b60405180910390f35b3480156107eb57600080fd5b5061080660048036038101906108019190614538565b612528565b604051610813919061541d565b60405180910390f35b34801561082857600080fd5b50610843600480360381019061083e919061450f565b6125bc565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061091057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610920575061091f826126b4565b5b9050919050565b60606000805461093690615b12565b80601f016020809104026020016040519081016040528092919081815260200182805461096290615b12565b80156109af5780601f10610984576101008083540402835291602001916109af565b820191906000526020600020905b81548152906001019060200180831161099257829003601f168201915b5050505050905090565b60006109c48261271e565b610a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fa9061567a565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a498261122e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab19061573a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ad961278a565b73ffffffffffffffffffffffffffffffffffffffff161480610b085750610b0781610b0261278a565b612528565b5b610b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3e9061559a565b60405180910390fd5b610b518383612792565b505050565b60455481565b610b6d610b6761278a565b8261284b565b610bac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba39061577a565b60405180910390fd5b610bb7838383612929565b505050565b604d6020528060005260406000206000915054906101000a900460ff1681565b610be461278a565b73ffffffffffffffffffffffffffffffffffffffff16610c0261173f565b73ffffffffffffffffffffffffffffffffffffffff1614610c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4f9061569a565b60405180910390fd5b60004711610c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c929061563a565b60405180910390fd5b6000600247610caa9190615966565b905060008147610cba91906159f1565b90506000604060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051610d0490615342565b60006040518083038185875af1925050503d8060008114610d41576040519150601f19603f3d011682016040523d82523d6000602084013e610d46565b606091505b5050905080610d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d81906154da565b60405180910390fd5b6000603f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051610dd290615342565b60006040518083038185875af1925050503d8060008114610e0f576040519150601f19603f3d011682016040523d82523d6000602084013e610e14565b606091505b5050905080610e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4f9061565a565b60405180910390fd5b50505050565b610e7983838360405180602001604052806000815250611d18565b505050565b610e8661278a565b73ffffffffffffffffffffffffffffffffffffffff16610ea461173f565b73ffffffffffffffffffffffffffffffffffffffff1614610efa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef19061569a565b60405180910390fd5b6000603d6000015414610f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f399061575a565b60405180910390fd5b6001604660006101000a81548160ff02191690831515021790555060405180604001604052804381526020017f000000000000000000000000000000000000000000000000000000000000000043610f9a9190615910565b815250603d60008201518160000155602082015181600101559050506003604a6000806002811115610ff5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600281111561102d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001908152602001600020819055506002604a60006001600281111561107f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60028111156110b7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001908152602001600020819055506001604a6000600280811115611108577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6002811115611140577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81526020019081526020016000208190555061116261115d612b85565b613237565b565b61116c61278a565b73ffffffffffffffffffffffffffffffffffffffff1661118a61173f565b73ffffffffffffffffffffffffffffffffffffffff16146111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d79061569a565b60405180910390fd5b8181604291906111f19291906141c9565b505050565b603d8060000154908060010154905082565b603f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ce906155da565b60405180910390fd5b80915050919050565b604160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b604660019054906101000a900460ff1681565b60606042805461132890615b12565b80601f016020809104026020016040519081016040528092919081815260200182805461135490615b12565b80156113a15780601f10611376576101008083540402835291602001916113a1565b820191906000526020600020905b81548152906001019060200180831161138457829003601f168201915b5050505050905090565b60445481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611422576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611419906155ba565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61147161278a565b73ffffffffffffffffffffffffffffffffffffffff1661148f61173f565b73ffffffffffffffffffffffffffffffffffffffff16146114e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dc9061569a565b60405180910390fd5b6114ef6000613621565b565b43603d600101541180156115115750604660009054906101000a900460ff165b611550576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115479061555a565b60405180910390fd5b600581604760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006044548152602001908152602001600020546115b09190615910565b11156115f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e8906156da565b60405180910390fd5b8066753d533d9680006116049190615997565b3414611645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163c9061579a565b60405180910390fd5b806043541061165c57611657816136e7565b611684565b60006043548261166c91906159f1565b90506116796043546136e7565b611682816136e7565b505b600d60445414156116f0576000604660006101000a81548160ff0219169083151502179055506036604354146116ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e69061553a565b60405180910390fd5b5b7fedf0311ab70486f8741c1c35cf39679016af08bd38db9882eff9f8e4b7a4dcd533826040516117219291906153f4565b60405180910390a150565b604660009054906101000a900460ff1681565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60435481565b60606001805461177e90615b12565b80601f01602080910402602001604051908101604052809291908181526020018280546117aa90615b12565b80156117f75780601f106117cc576101008083540402835291602001916117f7565b820191906000526020600020905b8154815290600101906020018083116117da57829003601f168201915b5050505050905090565b61180961424f565b600060486000848152602001908152602001600020600301549050604d600082815260200190815260200160002060009054906101000a900460ff1615611a4557604860008481526020019081526020016000206040518060c001604052908160008201805461187890615b12565b80601f01602080910402602001604051908101604052809291908181526020018280546118a490615b12565b80156118f15780601f106118c6576101008083540402835291602001916118f1565b820191906000526020600020905b8154815290600101906020018083116118d457829003601f168201915b5050505050815260200160018201805461190a90615b12565b80601f016020809104026020016040519081016040528092919081815260200182805461193690615b12565b80156119835780601f1061195857610100808354040283529160200191611983565b820191906000526020600020905b81548152906001019060200180831161196657829003601f168201915b505050505081526020016002820160009054906101000a900460ff1615151515815260200160038201548152602001600482015481526020016005820160009054906101000a900460ff166002811115611a06577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6002811115611a3e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152505091505b50919050565b611a5361278a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab89061551a565b60405180910390fd5b8060056000611ace61278a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b7b61278a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bc0919061541d565b60405180910390a35050565b604060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611bfa61278a565b73ffffffffffffffffffffffffffffffffffffffff16611c1861173f565b73ffffffffffffffffffffffffffffffffffffffff1614611c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c659061569a565b60405180910390fd5b6000603d6000015414158015611c915750604660019054906101000a900460ff16155b8015611ca1575043603d60010154105b611ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd79061571a565b60405180910390fd5b6000604660006101000a81548160ff0219169083151502179055506001604660016101000a81548160ff021916908315150217905550565b611d29611d2361278a565b8361284b565b611d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5f9061577a565b60405180910390fd5b611d7484848484613802565b50505050565b6060611d858261271e565b611dc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbb906156fa565b60405180910390fd5b6000604860008481526020019081526020016000206040518060c0016040529081600082018054611df490615b12565b80601f0160208091040260200160405190810160405280929190818152602001828054611e2090615b12565b8015611e6d5780601f10611e4257610100808354040283529160200191611e6d565b820191906000526020600020905b815481529060010190602001808311611e5057829003601f168201915b50505050508152602001600182018054611e8690615b12565b80601f0160208091040260200160405190810160405280929190818152602001828054611eb290615b12565b8015611eff5780601f10611ed457610100808354040283529160200191611eff565b820191906000526020600020905b815481529060010190602001808311611ee257829003601f168201915b505050505081526020016002820160009054906101000a900460ff1615151515815260200160038201548152602001600482015481526020016005820160009054906101000a900460ff166002811115611f82577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6002811115611fba577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815250509050600080604c600084606001518152602001908152602001600020600101549050600060018460800151611ff39190615910565b9050604d60008560600151815260200190815260200160002060009054906101000a900460ff1661202757600092506121b8565b60006002811115612061577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8460a00151600281111561209e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156120cf578160246120b191906159f1565b60366120bd9190615997565b816120c89190615910565b92506121b7565b60016002811115612109577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8460a001516002811115612146577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b141561218357602482600c61215b91906159f1565b6121659190615910565b60366121719190615997565b8161217c9190615910565b92506121b6565b603082600661219291906159f1565b61219c9190615910565b60366121a89190615997565b816121b39190615910565b92505b5b5b6121c0611319565b6121c98461385e565b6040516020016121da92919061531e565b604051602081830303815290604052945050505050919050565b604660019054906101000a900460ff1661220d57600080fd5b600581604760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060445481526020019081526020016000205461226d9190615910565b11156122ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a5906156da565b60405180910390fd5b8067015fb7f9b8c380006122c29190615997565b3414612303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fa9061579a565b60405180910390fd5b806043541061231a57612315816136e7565b612342565b60006043548261232a91906159f1565b90506123376043546136e7565b612340816136e7565b505b7fa1490581b9173f3fd01de0ecf3a8a6eb0e8475e9ae89417348c4fa47f14a422d33826040516123739291906153f4565b60405180910390a150565b61238661278a565b73ffffffffffffffffffffffffffffffffffffffff166123a461173f565b73ffffffffffffffffffffffffffffffffffffffff16146123fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f19061569a565b60405180910390fd5b6000603d6000015414612442576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124399061561a565b60405180910390fd5b60005b828110156124cf5761245682613237565b60005b60368110156124bb576124a785600783603681106124a0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0154613a0b565b5080806124b390615b44565b915050612459565b5080806124c790615b44565b915050612445565b506001604d6000604454815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b6047602052816000526040600020602052806000526040600020600091509150505481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6125c461278a565b73ffffffffffffffffffffffffffffffffffffffff166125e261173f565b73ffffffffffffffffffffffffffffffffffffffff1614612638576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262f9061569a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269f9061549a565b60405180910390fd5b6126b181613621565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166128058361122e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006128568261271e565b612895576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288c9061557a565b60405180910390fd5b60006128a08361122e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061290f57508373ffffffffffffffffffffffffffffffffffffffff166128f7846109b9565b73ffffffffffffffffffffffffffffffffffffffff16145b80612920575061291f8185612528565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166129498261122e565b73ffffffffffffffffffffffffffffffffffffffff161461299f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612996906156ba565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a06906154fa565b60405180910390fd5b612a1a838383613c64565b612a25600082612792565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a7591906159f1565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612acc9190615910565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600080600942604051602001612b9b9190615357565b6040516020818303038152906040528051906020012060001c612bbe9190615b97565b9050600043603d60010154118015612be25750604660009054906101000a900460ff165b8015612bf05750600c604454105b15612f145760058211158015612c8957506000604a6000806002811115612c40577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6002811115612c78577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002054115b15612c975760009050612f0f565b60078211158015612d2c57506000604a600060016002811115612ce3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6002811115612d1b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002054115b15612d3a5760019050612f0e565b600882148015612dcd57506000604a6000600280811115612d84577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6002811115612dbc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002054115b15612ddb5760029050612f0d565b6000604a600060016002811115612e1b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6002811115612e53577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001908152602001600020541115612e715760019050612f0c565b6000604a6000806002811115612eb0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6002811115612ee8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001908152602001600020541115612f065760009050612f0b565b600290505b5b5b5b5b61322f565b60058211158015612fa85750600060496000806002811115612f5f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6002811115612f97577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002054115b15612fb6576000905061322e565b6007821115801561304b575060006049600060016002811115613002577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600281111561303a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002054115b15613059576001905061322d565b6008821480156130ec57506000604960006002808111156130a3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60028111156130db577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002054115b156130fa576002905061322c565b6000604960006001600281111561313a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6002811115613172577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001908152602001600020541115613190576001905061322b565b6000604960008060028111156131cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6002811115613207577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001908152602001600020541115613225576000905061322a565b600290505b5b5b5b5b5b809250505090565b604d60006036815260200190815260200160002060009054906101000a900460ff1615613299576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132909061545a565b60405180910390fd5b6001604d6000604454815260200190815260200160002060006101000a81548160ff02191690831515021790555043603d600101541180156132e75750604660009054906101000a900460ff165b80156132f55750600c604454105b15613396576001604a6000836002811115613339577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6002811115613371577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001908152602001600020600082825461338e91906159f1565b925050819055505b6036604454101561361e5760405180604001604052808260028111156133e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200160496000846002811115613427577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600281111561345f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002054815250604c600060016044546134849190615910565b815260200190815260200160002060008201518160000160006101000a81548160ff021916908360028111156134e3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b021790555060208201518160010155905050600160496000836002811115613534577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600281111561356c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001908152602001600020600082825461358991906159f1565b925050819055506001604460008282546135a39190615910565b92505081905550603660438190555080604b6000604454815260200190815260200160002060006101000a81548160ff02191690836002811115613610577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b021790555061361d613c69565b5b50565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80604760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000604454815260200190815260200160002060008282546137499190615910565b9250508190555060005b818110156137e25760006007604354603661376e91906159f1565b603681106137a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b015490506137b33382613a0b565b506001604360008282546137c791906159f1565b925050819055505080806137da90615b44565b915050613753565b50600060435414156137ff576137fe6137f9612b85565b613237565b5b50565b61380d848484612929565b61381984848484613dd8565b613858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161384f9061547a565b60405180910390fd5b50505050565b606060008214156138a6576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613a06565b600082905060005b600082146138d85780806138c190615b44565b915050600a826138d19190615966565b91506138ae565b60008167ffffffffffffffff81111561391a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561394c5781602001600182028036833780820191505090505b5090505b600085146139ff5760018261396591906159f1565b9150600a856139749190615b97565b60306139809190615910565b60f81b8183815181106139bc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856139f89190615966565b9450613950565b8093505050505b919050565b6000806045549050600160456000828254613a269190615910565b92505081905550613a378482613f6f565b6000806000604160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ec94942c876040518263ffffffff1660e01b8152600401613a9791906157dc565b60006040518083038186803b158015613aaf57600080fd5b505afa158015613ac3573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190613aec919061479c565b9250925092506040518060c0016040528084815260200183815260200182151581526020016044548152602001878152602001604b6000604454815260200190815260200160002060009054906101000a900460ff166002811115613b7a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815250604860008681526020019081526020016000206000820151816000019080519060200190613bac9291906142bf565b506020820151816001019080519060200190613bc99291906142bf565b5060408201518160020160006101000a81548160ff021916908315150217905550606082015181600301556080820151816004015560a08201518160050160006101000a81548160ff02191690836002811115613c4f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b02179055509050508394505050505092915050565b505050565b60005b6036811015613dd5576000816036613c8491906159f1565b42604051602001613c959190615357565b6040516020818303038152906040528051906020012060001c613cb89190615b97565b82613cc39190615910565b9050600060078260368110613d01577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0154905060078360368110613d3f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b015460078360368110613d7b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b01819055508060078460368110613dbb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b018190555050508080613dcd90615b44565b915050613c6c565b50565b6000613df98473ffffffffffffffffffffffffffffffffffffffff16613f8d565b15613f62578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613e2261278a565b8786866040518563ffffffff1660e01b8152600401613e4494939291906153a8565b602060405180830381600087803b158015613e5e57600080fd5b505af1925050508015613e8f57506040513d601f19601f82011682018060405250810190613e8c919061472e565b60015b613f12573d8060008114613ebf576040519150601f19603f3d011682016040523d82523d6000602084013e613ec4565b606091505b50600081511415613f0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f019061547a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613f67565b600190505b949350505050565b613f89828260405180602001604052806000815250613fa0565b5050565b600080823b905060008111915050919050565b613faa8383613ffb565b613fb76000848484613dd8565b613ff6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fed9061547a565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561406b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614062906155fa565b60405180910390fd5b6140748161271e565b156140b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140ab906154ba565b60405180910390fd5b6140c060008383613c64565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546141109190615910565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546141d590615b12565b90600052602060002090601f0160209004810192826141f7576000855561423e565b82601f1061421057803560ff191683800117855561423e565b8280016001018555821561423e579182015b8281111561423d578235825591602001919060010190614222565b5b50905061424b9190614345565b5090565b6040518060c0016040528060608152602001606081526020016000151581526020016000815260200160008152602001600060028111156142b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81525090565b8280546142cb90615b12565b90600052602060002090601f0160209004810192826142ed5760008555614334565b82601f1061430657805160ff1916838001178555614334565b82800160010185558215614334579182015b82811115614333578251825591602001919060010190614318565b5b5090506143419190614345565b5090565b5b8082111561435e576000816000905550600101614346565b5090565b600061437561437084615851565b615820565b90508281526020810184848401111561438d57600080fd5b614398848285615ad0565b509392505050565b60006143b36143ae84615881565b615820565b9050828152602081018484840111156143cb57600080fd5b6143d6848285615adf565b509392505050565b6000813590506143ed81615cd8565b92915050565b60008135905061440281615cef565b92915050565b60008151905061441781615cef565b92915050565b60008135905061442c81615d06565b92915050565b60008151905061444181615d06565b92915050565b600082601f83011261445857600080fd5b8135614468848260208601614362565b91505092915050565b60008135905061448081615d1d565b92915050565b60008083601f84011261449857600080fd5b8235905067ffffffffffffffff8111156144b157600080fd5b6020830191508360018202830111156144c957600080fd5b9250929050565b600082601f8301126144e157600080fd5b81516144f18482602086016143a0565b91505092915050565b60008135905061450981615d2d565b92915050565b60006020828403121561452157600080fd5b600061452f848285016143de565b91505092915050565b6000806040838503121561454b57600080fd5b6000614559858286016143de565b925050602061456a858286016143de565b9150509250929050565b60008060006060848603121561458957600080fd5b6000614597868287016143de565b93505060206145a8868287016143de565b92505060406145b9868287016144fa565b9150509250925092565b600080600080608085870312156145d957600080fd5b60006145e7878288016143de565b94505060206145f8878288016143de565b9350506040614609878288016144fa565b925050606085013567ffffffffffffffff81111561462657600080fd5b61463287828801614447565b91505092959194509250565b6000806040838503121561465157600080fd5b600061465f858286016143de565b9250506020614670858286016143f3565b9150509250929050565b6000806040838503121561468d57600080fd5b600061469b858286016143de565b92505060206146ac858286016144fa565b9150509250929050565b6000806000606084860312156146cb57600080fd5b60006146d9868287016143de565b93505060206146ea868287016144fa565b92505060406146fb86828701614471565b9150509250925092565b60006020828403121561471757600080fd5b60006147258482850161441d565b91505092915050565b60006020828403121561474057600080fd5b600061474e84828501614432565b91505092915050565b6000806020838503121561476a57600080fd5b600083013567ffffffffffffffff81111561478457600080fd5b61479085828601614486565b92509250509250929050565b6000806000606084860312156147b157600080fd5b600084015167ffffffffffffffff8111156147cb57600080fd5b6147d7868287016144d0565b935050602084015167ffffffffffffffff8111156147f457600080fd5b614800868287016144d0565b925050604061481186828701614408565b9150509250925092565b60006020828403121561482d57600080fd5b600061483b848285016144fa565b91505092915050565b61484d81615a37565b82525050565b61485c81615a25565b82525050565b61486b81615a49565b82525050565b61487a81615a49565b82525050565b600061488b826158b1565b61489581856158c7565b93506148a5818560208601615adf565b6148ae81615cb3565b840191505092915050565b6148c281615abe565b82525050565b60006148d3826158bc565b6148dd81856158e3565b93506148ed818560208601615adf565b6148f681615cb3565b840191505092915050565b600061490c826158bc565b61491681856158f4565b9350614926818560208601615adf565b61492f81615cb3565b840191505092915050565b6000614945826158bc565b61494f8185615905565b935061495f818560208601615adf565b80840191505092915050565b6000614978600e836158f4565b91507f416c6c206465636b732064656c740000000000000000000000000000000000006000830152602082019050919050565b60006149b86032836158f4565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000614a1e6026836158f4565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614a84601c836158f4565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000614ac46016836158f4565b91507f636f756c64206e6f742073656e6420746f2066756e64000000000000000000006000830152602082019050919050565b6000614b046024836158f4565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614b6a6019836158f4565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000614baa6023836158f4565b91507f43616e6e6f74206d696e74206f7665722036206465636b7320696e207072657360008301527f616c6500000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614c106012836158f4565b91507f50726573616c65206e6f742061637469766500000000000000000000000000006000830152602082019050919050565b6000614c50602c836158f4565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614cb66038836158f4565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000614d1c602a836158f4565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000614d826029836158f4565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614de86020836158f4565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000614e286018836158f4565b91507f50726573616c6520686173206265656e207374617274656400000000000000006000830152602082019050919050565b6000614e68600c836158f4565b91507f42616c616e6365206973203000000000000000000000000000000000000000006000830152602082019050919050565b6000614ea8601a836158f4565b91507f636f756c64206e6f742073656e6420746f2074726561737572790000000000006000830152602082019050919050565b6000614ee8602c836158f4565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614f4e6020836158f4565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614f8e6029836158f4565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614ff4601d836158f4565b91507f4f766572203520636172647320696e20612073696e676c65206465636b0000006000830152602082019050919050565b6000615034602f836158f4565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b600061509a603d836158f4565b91507f43616e6e6f742073746172742070726573616c65207477696365206f7220737460008301527f617274207768696c652070726573616c6520697320676f696e67206f6e0000006020830152604082019050919050565b60006151006021836158f4565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006151666017836158f4565b91507f50726573616c6520616c726561647920737461727465640000000000000000006000830152602082019050919050565b60006151a66000836158d8565b9150600082019050919050565b60006151c06031836158f4565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000615226600c836158f4565b91507f57726f6e6720616d6f756e7400000000000000000000000000000000000000006000830152602082019050919050565b600060c083016000830151848203600086015261527682826148c8565b9150506020830151848203602086015261529082826148c8565b91505060408301516152a56040860182614862565b5060608301516152b860608601826152e9565b5060808301516152cb60808601826152e9565b5060a08301516152de60a08601826148b9565b508091505092915050565b6152f281615ab4565b82525050565b61530181615ab4565b82525050565b61531861531382615ab4565b615b8d565b82525050565b600061532a828561493a565b9150615336828461493a565b91508190509392505050565b600061534d82615199565b9150819050919050565b60006153638284615307565b60208201915081905092915050565b60006020820190506153876000830184614853565b92915050565b60006020820190506153a26000830184614844565b92915050565b60006080820190506153bd6000830187614853565b6153ca6020830186614853565b6153d760408301856152f8565b81810360608301526153e98184614880565b905095945050505050565b60006040820190506154096000830185614853565b61541660208301846152f8565b9392505050565b60006020820190506154326000830184614871565b92915050565b600060208201905081810360008301526154528184614901565b905092915050565b600060208201905081810360008301526154738161496b565b9050919050565b60006020820190508181036000830152615493816149ab565b9050919050565b600060208201905081810360008301526154b381614a11565b9050919050565b600060208201905081810360008301526154d381614a77565b9050919050565b600060208201905081810360008301526154f381614ab7565b9050919050565b6000602082019050818103600083015261551381614af7565b9050919050565b6000602082019050818103600083015261553381614b5d565b9050919050565b6000602082019050818103600083015261555381614b9d565b9050919050565b6000602082019050818103600083015261557381614c03565b9050919050565b6000602082019050818103600083015261559381614c43565b9050919050565b600060208201905081810360008301526155b381614ca9565b9050919050565b600060208201905081810360008301526155d381614d0f565b9050919050565b600060208201905081810360008301526155f381614d75565b9050919050565b6000602082019050818103600083015261561381614ddb565b9050919050565b6000602082019050818103600083015261563381614e1b565b9050919050565b6000602082019050818103600083015261565381614e5b565b9050919050565b6000602082019050818103600083015261567381614e9b565b9050919050565b6000602082019050818103600083015261569381614edb565b9050919050565b600060208201905081810360008301526156b381614f41565b9050919050565b600060208201905081810360008301526156d381614f81565b9050919050565b600060208201905081810360008301526156f381614fe7565b9050919050565b6000602082019050818103600083015261571381615027565b9050919050565b600060208201905081810360008301526157338161508d565b9050919050565b60006020820190508181036000830152615753816150f3565b9050919050565b6000602082019050818103600083015261577381615159565b9050919050565b60006020820190508181036000830152615793816151b3565b9050919050565b600060208201905081810360008301526157b381615219565b9050919050565b600060208201905081810360008301526157d48184615259565b905092915050565b60006020820190506157f160008301846152f8565b92915050565b600060408201905061580c60008301856152f8565b61581960208301846152f8565b9392505050565b6000604051905081810181811067ffffffffffffffff8211171561584757615846615c84565b5b8060405250919050565b600067ffffffffffffffff82111561586c5761586b615c84565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561589c5761589b615c84565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061591b82615ab4565b915061592683615ab4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561595b5761595a615bc8565b5b828201905092915050565b600061597182615ab4565b915061597c83615ab4565b92508261598c5761598b615bf7565b5b828204905092915050565b60006159a282615ab4565b91506159ad83615ab4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156159e6576159e5615bc8565b5b828202905092915050565b60006159fc82615ab4565b9150615a0783615ab4565b925082821015615a1a57615a19615bc8565b5b828203905092915050565b6000615a3082615a94565b9050919050565b6000615a4282615a94565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000819050615a8f82615cc4565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000615ac982615a81565b9050919050565b82818337600083830152505050565b60005b83811015615afd578082015181840152602081019050615ae2565b83811115615b0c576000848401525b50505050565b60006002820490506001821680615b2a57607f821691505b60208210811415615b3e57615b3d615c55565b5b50919050565b6000615b4f82615ab4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615b8257615b81615bc8565b5b600182019050919050565b6000819050919050565b6000615ba282615ab4565b9150615bad83615ab4565b925082615bbd57615bbc615bf7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60038110615cd557615cd4615c26565b5b50565b615ce181615a25565b8114615cec57600080fd5b50565b615cf881615a49565b8114615d0357600080fd5b50565b615d0f81615a55565b8114615d1a57600080fd5b50565b60038110615d2a57600080fd5b50565b615d3681615ab4565b8114615d4157600080fd5b5056fea2646970667358221220bc0b28543fc6bd868f9c90cca50f46c9f4dc3c5959200ddefbc97f4e5f48f0b664736f6c63430008000033697066733a2f2f516d61475244696e325959526a337a6250453233703659506554704d6e375963467174564444366159385a6f6f332f00000000000000000000000033a7dbc18c618a3202d1e8e788846399088eaf850000000000000000000000009259ec974a0013e4b3560820c4b5ffa3768bf91000000000000000000000000031353a50651583dd5cd3ed97d915e6f08dcd35a400000000000000000000000000000000000000000000000000000000000019c8
Deployed Bytecode
0x60806040526004361061020f5760003560e01c806370a0823111610118578063b60d4288116100a0578063c959c42b1161006f578063c959c42b1461075d578063d851d66f14610779578063e783a1bc146107a2578063e985e9c5146107df578063f2fde38b1461081c5761020f565b8063b60d4288146106b5578063b66a0e5d146106e0578063b88d4fde146106f7578063c87b56dd146107205761020f565b80638da5cb5b116100e75780638da5cb5b146105ce5780638ecd9b3f146105f957806395d89b4114610624578063970129be1461064f578063a22cb4651461068c5761020f565b806370a0823114610533578063715018a614610570578063841e483d1461058757806384494708146105a35761020f565b806355dd574c1161019b5780636352211e1161016a5780636352211e1461044a57806363b0e66a1461048757806368428a1b146104b25780636c0360eb146104dd5780637010fef2146105085761020f565b806355dd574c146103b357806355f804b3146103ca5780635a7adf7f146103f357806361d027b31461041f5761020f565b806318160ddd116101e257806318160ddd146102e257806323b872dd1461030d578063321de05d146103365780633ccfd60b1461037357806342842e0e1461038a5761020f565b806301ffc9a71461021457806306fdde0314610251578063081812fc1461027c578063095ea7b3146102b9575b600080fd5b34801561022057600080fd5b5061023b60048036038101906102369190614705565b610845565b604051610248919061541d565b60405180910390f35b34801561025d57600080fd5b50610266610927565b6040516102739190615438565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e919061481b565b6109b9565b6040516102b09190615372565b60405180910390f35b3480156102c557600080fd5b506102e060048036038101906102db919061467a565b610a3e565b005b3480156102ee57600080fd5b506102f7610b56565b60405161030491906157dc565b60405180910390f35b34801561031957600080fd5b50610334600480360381019061032f9190614574565b610b5c565b005b34801561034257600080fd5b5061035d6004803603810190610358919061481b565b610bbc565b60405161036a919061541d565b60405180910390f35b34801561037f57600080fd5b50610388610bdc565b005b34801561039657600080fd5b506103b160048036038101906103ac9190614574565b610e5e565b005b3480156103bf57600080fd5b506103c8610e7e565b005b3480156103d657600080fd5b506103f160048036038101906103ec9190614757565b611164565b005b3480156103ff57600080fd5b506104086111f6565b6040516104169291906157f7565b60405180910390f35b34801561042b57600080fd5b50610434611208565b604051610441919061538d565b60405180910390f35b34801561045657600080fd5b50610471600480360381019061046c919061481b565b61122e565b60405161047e9190615372565b60405180910390f35b34801561049357600080fd5b5061049c6112e0565b6040516104a99190615372565b60405180910390f35b3480156104be57600080fd5b506104c7611306565b6040516104d4919061541d565b60405180910390f35b3480156104e957600080fd5b506104f2611319565b6040516104ff9190615438565b60405180910390f35b34801561051457600080fd5b5061051d6113ab565b60405161052a91906157dc565b60405180910390f35b34801561053f57600080fd5b5061055a6004803603810190610555919061450f565b6113b1565b60405161056791906157dc565b60405180910390f35b34801561057c57600080fd5b50610585611469565b005b6105a1600480360381019061059c919061481b565b6114f1565b005b3480156105af57600080fd5b506105b861172c565b6040516105c5919061541d565b60405180910390f35b3480156105da57600080fd5b506105e361173f565b6040516105f09190615372565b60405180910390f35b34801561060557600080fd5b5061060e611769565b60405161061b91906157dc565b60405180910390f35b34801561063057600080fd5b5061063961176f565b6040516106469190615438565b60405180910390f35b34801561065b57600080fd5b506106766004803603810190610671919061481b565b611801565b60405161068391906157ba565b60405180910390f35b34801561069857600080fd5b506106b360048036038101906106ae919061463e565b611a4b565b005b3480156106c157600080fd5b506106ca611bcc565b6040516106d7919061538d565b60405180910390f35b3480156106ec57600080fd5b506106f5611bf2565b005b34801561070357600080fd5b5061071e600480360381019061071991906145c3565b611d18565b005b34801561072c57600080fd5b506107476004803603810190610742919061481b565b611d7a565b6040516107549190615438565b60405180910390f35b6107776004803603810190610772919061481b565b6121f4565b005b34801561078557600080fd5b506107a0600480360381019061079b91906146b6565b61237e565b005b3480156107ae57600080fd5b506107c960048036038101906107c4919061467a565b612503565b6040516107d691906157dc565b60405180910390f35b3480156107eb57600080fd5b5061080660048036038101906108019190614538565b612528565b604051610813919061541d565b60405180910390f35b34801561082857600080fd5b50610843600480360381019061083e919061450f565b6125bc565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061091057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610920575061091f826126b4565b5b9050919050565b60606000805461093690615b12565b80601f016020809104026020016040519081016040528092919081815260200182805461096290615b12565b80156109af5780601f10610984576101008083540402835291602001916109af565b820191906000526020600020905b81548152906001019060200180831161099257829003601f168201915b5050505050905090565b60006109c48261271e565b610a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fa9061567a565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a498261122e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab19061573a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ad961278a565b73ffffffffffffffffffffffffffffffffffffffff161480610b085750610b0781610b0261278a565b612528565b5b610b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3e9061559a565b60405180910390fd5b610b518383612792565b505050565b60455481565b610b6d610b6761278a565b8261284b565b610bac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba39061577a565b60405180910390fd5b610bb7838383612929565b505050565b604d6020528060005260406000206000915054906101000a900460ff1681565b610be461278a565b73ffffffffffffffffffffffffffffffffffffffff16610c0261173f565b73ffffffffffffffffffffffffffffffffffffffff1614610c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4f9061569a565b60405180910390fd5b60004711610c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c929061563a565b60405180910390fd5b6000600247610caa9190615966565b905060008147610cba91906159f1565b90506000604060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051610d0490615342565b60006040518083038185875af1925050503d8060008114610d41576040519150601f19603f3d011682016040523d82523d6000602084013e610d46565b606091505b5050905080610d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d81906154da565b60405180910390fd5b6000603f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051610dd290615342565b60006040518083038185875af1925050503d8060008114610e0f576040519150601f19603f3d011682016040523d82523d6000602084013e610e14565b606091505b5050905080610e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4f9061565a565b60405180910390fd5b50505050565b610e7983838360405180602001604052806000815250611d18565b505050565b610e8661278a565b73ffffffffffffffffffffffffffffffffffffffff16610ea461173f565b73ffffffffffffffffffffffffffffffffffffffff1614610efa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef19061569a565b60405180910390fd5b6000603d6000015414610f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f399061575a565b60405180910390fd5b6001604660006101000a81548160ff02191690831515021790555060405180604001604052804381526020017f00000000000000000000000000000000000000000000000000000000000019c843610f9a9190615910565b815250603d60008201518160000155602082015181600101559050506003604a6000806002811115610ff5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600281111561102d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001908152602001600020819055506002604a60006001600281111561107f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60028111156110b7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001908152602001600020819055506001604a6000600280811115611108577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6002811115611140577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81526020019081526020016000208190555061116261115d612b85565b613237565b565b61116c61278a565b73ffffffffffffffffffffffffffffffffffffffff1661118a61173f565b73ffffffffffffffffffffffffffffffffffffffff16146111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d79061569a565b60405180910390fd5b8181604291906111f19291906141c9565b505050565b603d8060000154908060010154905082565b603f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ce906155da565b60405180910390fd5b80915050919050565b604160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b604660019054906101000a900460ff1681565b60606042805461132890615b12565b80601f016020809104026020016040519081016040528092919081815260200182805461135490615b12565b80156113a15780601f10611376576101008083540402835291602001916113a1565b820191906000526020600020905b81548152906001019060200180831161138457829003601f168201915b5050505050905090565b60445481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611422576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611419906155ba565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61147161278a565b73ffffffffffffffffffffffffffffffffffffffff1661148f61173f565b73ffffffffffffffffffffffffffffffffffffffff16146114e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dc9061569a565b60405180910390fd5b6114ef6000613621565b565b43603d600101541180156115115750604660009054906101000a900460ff165b611550576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115479061555a565b60405180910390fd5b600581604760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006044548152602001908152602001600020546115b09190615910565b11156115f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e8906156da565b60405180910390fd5b8066753d533d9680006116049190615997565b3414611645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163c9061579a565b60405180910390fd5b806043541061165c57611657816136e7565b611684565b60006043548261166c91906159f1565b90506116796043546136e7565b611682816136e7565b505b600d60445414156116f0576000604660006101000a81548160ff0219169083151502179055506036604354146116ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e69061553a565b60405180910390fd5b5b7fedf0311ab70486f8741c1c35cf39679016af08bd38db9882eff9f8e4b7a4dcd533826040516117219291906153f4565b60405180910390a150565b604660009054906101000a900460ff1681565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60435481565b60606001805461177e90615b12565b80601f01602080910402602001604051908101604052809291908181526020018280546117aa90615b12565b80156117f75780601f106117cc576101008083540402835291602001916117f7565b820191906000526020600020905b8154815290600101906020018083116117da57829003601f168201915b5050505050905090565b61180961424f565b600060486000848152602001908152602001600020600301549050604d600082815260200190815260200160002060009054906101000a900460ff1615611a4557604860008481526020019081526020016000206040518060c001604052908160008201805461187890615b12565b80601f01602080910402602001604051908101604052809291908181526020018280546118a490615b12565b80156118f15780601f106118c6576101008083540402835291602001916118f1565b820191906000526020600020905b8154815290600101906020018083116118d457829003601f168201915b5050505050815260200160018201805461190a90615b12565b80601f016020809104026020016040519081016040528092919081815260200182805461193690615b12565b80156119835780601f1061195857610100808354040283529160200191611983565b820191906000526020600020905b81548152906001019060200180831161196657829003601f168201915b505050505081526020016002820160009054906101000a900460ff1615151515815260200160038201548152602001600482015481526020016005820160009054906101000a900460ff166002811115611a06577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6002811115611a3e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152505091505b50919050565b611a5361278a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab89061551a565b60405180910390fd5b8060056000611ace61278a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b7b61278a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bc0919061541d565b60405180910390a35050565b604060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611bfa61278a565b73ffffffffffffffffffffffffffffffffffffffff16611c1861173f565b73ffffffffffffffffffffffffffffffffffffffff1614611c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c659061569a565b60405180910390fd5b6000603d6000015414158015611c915750604660019054906101000a900460ff16155b8015611ca1575043603d60010154105b611ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd79061571a565b60405180910390fd5b6000604660006101000a81548160ff0219169083151502179055506001604660016101000a81548160ff021916908315150217905550565b611d29611d2361278a565b8361284b565b611d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5f9061577a565b60405180910390fd5b611d7484848484613802565b50505050565b6060611d858261271e565b611dc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbb906156fa565b60405180910390fd5b6000604860008481526020019081526020016000206040518060c0016040529081600082018054611df490615b12565b80601f0160208091040260200160405190810160405280929190818152602001828054611e2090615b12565b8015611e6d5780601f10611e4257610100808354040283529160200191611e6d565b820191906000526020600020905b815481529060010190602001808311611e5057829003601f168201915b50505050508152602001600182018054611e8690615b12565b80601f0160208091040260200160405190810160405280929190818152602001828054611eb290615b12565b8015611eff5780601f10611ed457610100808354040283529160200191611eff565b820191906000526020600020905b815481529060010190602001808311611ee257829003601f168201915b505050505081526020016002820160009054906101000a900460ff1615151515815260200160038201548152602001600482015481526020016005820160009054906101000a900460ff166002811115611f82577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6002811115611fba577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815250509050600080604c600084606001518152602001908152602001600020600101549050600060018460800151611ff39190615910565b9050604d60008560600151815260200190815260200160002060009054906101000a900460ff1661202757600092506121b8565b60006002811115612061577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8460a00151600281111561209e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156120cf578160246120b191906159f1565b60366120bd9190615997565b816120c89190615910565b92506121b7565b60016002811115612109577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8460a001516002811115612146577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b141561218357602482600c61215b91906159f1565b6121659190615910565b60366121719190615997565b8161217c9190615910565b92506121b6565b603082600661219291906159f1565b61219c9190615910565b60366121a89190615997565b816121b39190615910565b92505b5b5b6121c0611319565b6121c98461385e565b6040516020016121da92919061531e565b604051602081830303815290604052945050505050919050565b604660019054906101000a900460ff1661220d57600080fd5b600581604760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060445481526020019081526020016000205461226d9190615910565b11156122ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a5906156da565b60405180910390fd5b8067015fb7f9b8c380006122c29190615997565b3414612303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fa9061579a565b60405180910390fd5b806043541061231a57612315816136e7565b612342565b60006043548261232a91906159f1565b90506123376043546136e7565b612340816136e7565b505b7fa1490581b9173f3fd01de0ecf3a8a6eb0e8475e9ae89417348c4fa47f14a422d33826040516123739291906153f4565b60405180910390a150565b61238661278a565b73ffffffffffffffffffffffffffffffffffffffff166123a461173f565b73ffffffffffffffffffffffffffffffffffffffff16146123fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f19061569a565b60405180910390fd5b6000603d6000015414612442576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124399061561a565b60405180910390fd5b60005b828110156124cf5761245682613237565b60005b60368110156124bb576124a785600783603681106124a0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0154613a0b565b5080806124b390615b44565b915050612459565b5080806124c790615b44565b915050612445565b506001604d6000604454815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b6047602052816000526040600020602052806000526040600020600091509150505481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6125c461278a565b73ffffffffffffffffffffffffffffffffffffffff166125e261173f565b73ffffffffffffffffffffffffffffffffffffffff1614612638576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262f9061569a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269f9061549a565b60405180910390fd5b6126b181613621565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166128058361122e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006128568261271e565b612895576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288c9061557a565b60405180910390fd5b60006128a08361122e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061290f57508373ffffffffffffffffffffffffffffffffffffffff166128f7846109b9565b73ffffffffffffffffffffffffffffffffffffffff16145b80612920575061291f8185612528565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166129498261122e565b73ffffffffffffffffffffffffffffffffffffffff161461299f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612996906156ba565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a06906154fa565b60405180910390fd5b612a1a838383613c64565b612a25600082612792565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a7591906159f1565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612acc9190615910565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600080600942604051602001612b9b9190615357565b6040516020818303038152906040528051906020012060001c612bbe9190615b97565b9050600043603d60010154118015612be25750604660009054906101000a900460ff165b8015612bf05750600c604454105b15612f145760058211158015612c8957506000604a6000806002811115612c40577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6002811115612c78577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002054115b15612c975760009050612f0f565b60078211158015612d2c57506000604a600060016002811115612ce3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6002811115612d1b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002054115b15612d3a5760019050612f0e565b600882148015612dcd57506000604a6000600280811115612d84577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6002811115612dbc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002054115b15612ddb5760029050612f0d565b6000604a600060016002811115612e1b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6002811115612e53577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001908152602001600020541115612e715760019050612f0c565b6000604a6000806002811115612eb0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6002811115612ee8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001908152602001600020541115612f065760009050612f0b565b600290505b5b5b5b5b61322f565b60058211158015612fa85750600060496000806002811115612f5f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6002811115612f97577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002054115b15612fb6576000905061322e565b6007821115801561304b575060006049600060016002811115613002577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600281111561303a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002054115b15613059576001905061322d565b6008821480156130ec57506000604960006002808111156130a3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60028111156130db577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002054115b156130fa576002905061322c565b6000604960006001600281111561313a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6002811115613172577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001908152602001600020541115613190576001905061322b565b6000604960008060028111156131cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6002811115613207577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001908152602001600020541115613225576000905061322a565b600290505b5b5b5b5b5b809250505090565b604d60006036815260200190815260200160002060009054906101000a900460ff1615613299576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132909061545a565b60405180910390fd5b6001604d6000604454815260200190815260200160002060006101000a81548160ff02191690831515021790555043603d600101541180156132e75750604660009054906101000a900460ff165b80156132f55750600c604454105b15613396576001604a6000836002811115613339577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6002811115613371577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001908152602001600020600082825461338e91906159f1565b925050819055505b6036604454101561361e5760405180604001604052808260028111156133e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200160496000846002811115613427577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600281111561345f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002054815250604c600060016044546134849190615910565b815260200190815260200160002060008201518160000160006101000a81548160ff021916908360028111156134e3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b021790555060208201518160010155905050600160496000836002811115613534577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600281111561356c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001908152602001600020600082825461358991906159f1565b925050819055506001604460008282546135a39190615910565b92505081905550603660438190555080604b6000604454815260200190815260200160002060006101000a81548160ff02191690836002811115613610577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b021790555061361d613c69565b5b50565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80604760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000604454815260200190815260200160002060008282546137499190615910565b9250508190555060005b818110156137e25760006007604354603661376e91906159f1565b603681106137a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b015490506137b33382613a0b565b506001604360008282546137c791906159f1565b925050819055505080806137da90615b44565b915050613753565b50600060435414156137ff576137fe6137f9612b85565b613237565b5b50565b61380d848484612929565b61381984848484613dd8565b613858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161384f9061547a565b60405180910390fd5b50505050565b606060008214156138a6576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613a06565b600082905060005b600082146138d85780806138c190615b44565b915050600a826138d19190615966565b91506138ae565b60008167ffffffffffffffff81111561391a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561394c5781602001600182028036833780820191505090505b5090505b600085146139ff5760018261396591906159f1565b9150600a856139749190615b97565b60306139809190615910565b60f81b8183815181106139bc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856139f89190615966565b9450613950565b8093505050505b919050565b6000806045549050600160456000828254613a269190615910565b92505081905550613a378482613f6f565b6000806000604160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ec94942c876040518263ffffffff1660e01b8152600401613a9791906157dc565b60006040518083038186803b158015613aaf57600080fd5b505afa158015613ac3573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190613aec919061479c565b9250925092506040518060c0016040528084815260200183815260200182151581526020016044548152602001878152602001604b6000604454815260200190815260200160002060009054906101000a900460ff166002811115613b7a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815250604860008681526020019081526020016000206000820151816000019080519060200190613bac9291906142bf565b506020820151816001019080519060200190613bc99291906142bf565b5060408201518160020160006101000a81548160ff021916908315150217905550606082015181600301556080820151816004015560a08201518160050160006101000a81548160ff02191690836002811115613c4f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b02179055509050508394505050505092915050565b505050565b60005b6036811015613dd5576000816036613c8491906159f1565b42604051602001613c959190615357565b6040516020818303038152906040528051906020012060001c613cb89190615b97565b82613cc39190615910565b9050600060078260368110613d01577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0154905060078360368110613d3f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b015460078360368110613d7b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b01819055508060078460368110613dbb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b018190555050508080613dcd90615b44565b915050613c6c565b50565b6000613df98473ffffffffffffffffffffffffffffffffffffffff16613f8d565b15613f62578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613e2261278a565b8786866040518563ffffffff1660e01b8152600401613e4494939291906153a8565b602060405180830381600087803b158015613e5e57600080fd5b505af1925050508015613e8f57506040513d601f19601f82011682018060405250810190613e8c919061472e565b60015b613f12573d8060008114613ebf576040519150601f19603f3d011682016040523d82523d6000602084013e613ec4565b606091505b50600081511415613f0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f019061547a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613f67565b600190505b949350505050565b613f89828260405180602001604052806000815250613fa0565b5050565b600080823b905060008111915050919050565b613faa8383613ffb565b613fb76000848484613dd8565b613ff6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fed9061547a565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561406b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614062906155fa565b60405180910390fd5b6140748161271e565b156140b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140ab906154ba565b60405180910390fd5b6140c060008383613c64565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546141109190615910565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546141d590615b12565b90600052602060002090601f0160209004810192826141f7576000855561423e565b82601f1061421057803560ff191683800117855561423e565b8280016001018555821561423e579182015b8281111561423d578235825591602001919060010190614222565b5b50905061424b9190614345565b5090565b6040518060c0016040528060608152602001606081526020016000151581526020016000815260200160008152602001600060028111156142b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81525090565b8280546142cb90615b12565b90600052602060002090601f0160209004810192826142ed5760008555614334565b82601f1061430657805160ff1916838001178555614334565b82800160010185558215614334579182015b82811115614333578251825591602001919060010190614318565b5b5090506143419190614345565b5090565b5b8082111561435e576000816000905550600101614346565b5090565b600061437561437084615851565b615820565b90508281526020810184848401111561438d57600080fd5b614398848285615ad0565b509392505050565b60006143b36143ae84615881565b615820565b9050828152602081018484840111156143cb57600080fd5b6143d6848285615adf565b509392505050565b6000813590506143ed81615cd8565b92915050565b60008135905061440281615cef565b92915050565b60008151905061441781615cef565b92915050565b60008135905061442c81615d06565b92915050565b60008151905061444181615d06565b92915050565b600082601f83011261445857600080fd5b8135614468848260208601614362565b91505092915050565b60008135905061448081615d1d565b92915050565b60008083601f84011261449857600080fd5b8235905067ffffffffffffffff8111156144b157600080fd5b6020830191508360018202830111156144c957600080fd5b9250929050565b600082601f8301126144e157600080fd5b81516144f18482602086016143a0565b91505092915050565b60008135905061450981615d2d565b92915050565b60006020828403121561452157600080fd5b600061452f848285016143de565b91505092915050565b6000806040838503121561454b57600080fd5b6000614559858286016143de565b925050602061456a858286016143de565b9150509250929050565b60008060006060848603121561458957600080fd5b6000614597868287016143de565b93505060206145a8868287016143de565b92505060406145b9868287016144fa565b9150509250925092565b600080600080608085870312156145d957600080fd5b60006145e7878288016143de565b94505060206145f8878288016143de565b9350506040614609878288016144fa565b925050606085013567ffffffffffffffff81111561462657600080fd5b61463287828801614447565b91505092959194509250565b6000806040838503121561465157600080fd5b600061465f858286016143de565b9250506020614670858286016143f3565b9150509250929050565b6000806040838503121561468d57600080fd5b600061469b858286016143de565b92505060206146ac858286016144fa565b9150509250929050565b6000806000606084860312156146cb57600080fd5b60006146d9868287016143de565b93505060206146ea868287016144fa565b92505060406146fb86828701614471565b9150509250925092565b60006020828403121561471757600080fd5b60006147258482850161441d565b91505092915050565b60006020828403121561474057600080fd5b600061474e84828501614432565b91505092915050565b6000806020838503121561476a57600080fd5b600083013567ffffffffffffffff81111561478457600080fd5b61479085828601614486565b92509250509250929050565b6000806000606084860312156147b157600080fd5b600084015167ffffffffffffffff8111156147cb57600080fd5b6147d7868287016144d0565b935050602084015167ffffffffffffffff8111156147f457600080fd5b614800868287016144d0565b925050604061481186828701614408565b9150509250925092565b60006020828403121561482d57600080fd5b600061483b848285016144fa565b91505092915050565b61484d81615a37565b82525050565b61485c81615a25565b82525050565b61486b81615a49565b82525050565b61487a81615a49565b82525050565b600061488b826158b1565b61489581856158c7565b93506148a5818560208601615adf565b6148ae81615cb3565b840191505092915050565b6148c281615abe565b82525050565b60006148d3826158bc565b6148dd81856158e3565b93506148ed818560208601615adf565b6148f681615cb3565b840191505092915050565b600061490c826158bc565b61491681856158f4565b9350614926818560208601615adf565b61492f81615cb3565b840191505092915050565b6000614945826158bc565b61494f8185615905565b935061495f818560208601615adf565b80840191505092915050565b6000614978600e836158f4565b91507f416c6c206465636b732064656c740000000000000000000000000000000000006000830152602082019050919050565b60006149b86032836158f4565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000614a1e6026836158f4565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614a84601c836158f4565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000614ac46016836158f4565b91507f636f756c64206e6f742073656e6420746f2066756e64000000000000000000006000830152602082019050919050565b6000614b046024836158f4565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614b6a6019836158f4565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000614baa6023836158f4565b91507f43616e6e6f74206d696e74206f7665722036206465636b7320696e207072657360008301527f616c6500000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614c106012836158f4565b91507f50726573616c65206e6f742061637469766500000000000000000000000000006000830152602082019050919050565b6000614c50602c836158f4565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614cb66038836158f4565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000614d1c602a836158f4565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000614d826029836158f4565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614de86020836158f4565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000614e286018836158f4565b91507f50726573616c6520686173206265656e207374617274656400000000000000006000830152602082019050919050565b6000614e68600c836158f4565b91507f42616c616e6365206973203000000000000000000000000000000000000000006000830152602082019050919050565b6000614ea8601a836158f4565b91507f636f756c64206e6f742073656e6420746f2074726561737572790000000000006000830152602082019050919050565b6000614ee8602c836158f4565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614f4e6020836158f4565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614f8e6029836158f4565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614ff4601d836158f4565b91507f4f766572203520636172647320696e20612073696e676c65206465636b0000006000830152602082019050919050565b6000615034602f836158f4565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b600061509a603d836158f4565b91507f43616e6e6f742073746172742070726573616c65207477696365206f7220737460008301527f617274207768696c652070726573616c6520697320676f696e67206f6e0000006020830152604082019050919050565b60006151006021836158f4565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006151666017836158f4565b91507f50726573616c6520616c726561647920737461727465640000000000000000006000830152602082019050919050565b60006151a66000836158d8565b9150600082019050919050565b60006151c06031836158f4565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000615226600c836158f4565b91507f57726f6e6720616d6f756e7400000000000000000000000000000000000000006000830152602082019050919050565b600060c083016000830151848203600086015261527682826148c8565b9150506020830151848203602086015261529082826148c8565b91505060408301516152a56040860182614862565b5060608301516152b860608601826152e9565b5060808301516152cb60808601826152e9565b5060a08301516152de60a08601826148b9565b508091505092915050565b6152f281615ab4565b82525050565b61530181615ab4565b82525050565b61531861531382615ab4565b615b8d565b82525050565b600061532a828561493a565b9150615336828461493a565b91508190509392505050565b600061534d82615199565b9150819050919050565b60006153638284615307565b60208201915081905092915050565b60006020820190506153876000830184614853565b92915050565b60006020820190506153a26000830184614844565b92915050565b60006080820190506153bd6000830187614853565b6153ca6020830186614853565b6153d760408301856152f8565b81810360608301526153e98184614880565b905095945050505050565b60006040820190506154096000830185614853565b61541660208301846152f8565b9392505050565b60006020820190506154326000830184614871565b92915050565b600060208201905081810360008301526154528184614901565b905092915050565b600060208201905081810360008301526154738161496b565b9050919050565b60006020820190508181036000830152615493816149ab565b9050919050565b600060208201905081810360008301526154b381614a11565b9050919050565b600060208201905081810360008301526154d381614a77565b9050919050565b600060208201905081810360008301526154f381614ab7565b9050919050565b6000602082019050818103600083015261551381614af7565b9050919050565b6000602082019050818103600083015261553381614b5d565b9050919050565b6000602082019050818103600083015261555381614b9d565b9050919050565b6000602082019050818103600083015261557381614c03565b9050919050565b6000602082019050818103600083015261559381614c43565b9050919050565b600060208201905081810360008301526155b381614ca9565b9050919050565b600060208201905081810360008301526155d381614d0f565b9050919050565b600060208201905081810360008301526155f381614d75565b9050919050565b6000602082019050818103600083015261561381614ddb565b9050919050565b6000602082019050818103600083015261563381614e1b565b9050919050565b6000602082019050818103600083015261565381614e5b565b9050919050565b6000602082019050818103600083015261567381614e9b565b9050919050565b6000602082019050818103600083015261569381614edb565b9050919050565b600060208201905081810360008301526156b381614f41565b9050919050565b600060208201905081810360008301526156d381614f81565b9050919050565b600060208201905081810360008301526156f381614fe7565b9050919050565b6000602082019050818103600083015261571381615027565b9050919050565b600060208201905081810360008301526157338161508d565b9050919050565b60006020820190508181036000830152615753816150f3565b9050919050565b6000602082019050818103600083015261577381615159565b9050919050565b60006020820190508181036000830152615793816151b3565b9050919050565b600060208201905081810360008301526157b381615219565b9050919050565b600060208201905081810360008301526157d48184615259565b905092915050565b60006020820190506157f160008301846152f8565b92915050565b600060408201905061580c60008301856152f8565b61581960208301846152f8565b9392505050565b6000604051905081810181811067ffffffffffffffff8211171561584757615846615c84565b5b8060405250919050565b600067ffffffffffffffff82111561586c5761586b615c84565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561589c5761589b615c84565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061591b82615ab4565b915061592683615ab4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561595b5761595a615bc8565b5b828201905092915050565b600061597182615ab4565b915061597c83615ab4565b92508261598c5761598b615bf7565b5b828204905092915050565b60006159a282615ab4565b91506159ad83615ab4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156159e6576159e5615bc8565b5b828202905092915050565b60006159fc82615ab4565b9150615a0783615ab4565b925082821015615a1a57615a19615bc8565b5b828203905092915050565b6000615a3082615a94565b9050919050565b6000615a4282615a94565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000819050615a8f82615cc4565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000615ac982615a81565b9050919050565b82818337600083830152505050565b60005b83811015615afd578082015181840152602081019050615ae2565b83811115615b0c576000848401525b50505050565b60006002820490506001821680615b2a57607f821691505b60208210811415615b3e57615b3d615c55565b5b50919050565b6000615b4f82615ab4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615b8257615b81615bc8565b5b600182019050919050565b6000819050919050565b6000615ba282615ab4565b9150615bad83615ab4565b925082615bbd57615bbc615bf7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60038110615cd557615cd4615c26565b5b50565b615ce181615a25565b8114615cec57600080fd5b50565b615cf881615a49565b8114615d0357600080fd5b50565b615d0f81615a55565b8114615d1a57600080fd5b50565b60038110615d2a57600080fd5b50565b615d3681615ab4565b8114615d4157600080fd5b5056fea2646970667358221220bc0b28543fc6bd868f9c90cca50f46c9f4dc3c5959200ddefbc97f4e5f48f0b664736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000033a7dbc18c618a3202d1e8e788846399088eaf850000000000000000000000009259ec974a0013e4b3560820c4b5ffa3768bf91000000000000000000000000031353a50651583dd5cd3ed97d915e6f08dcd35a400000000000000000000000000000000000000000000000000000000000019c8
-----Decoded View---------------
Arg [0] : _treasury (address): 0x33a7dBC18c618a3202D1E8E788846399088eaF85
Arg [1] : _fund (address): 0x9259ec974a0013E4b3560820c4B5ffA3768BF910
Arg [2] : _helper (address): 0x31353A50651583DD5Cd3ed97d915e6f08Dcd35a4
Arg [3] : _preSaleLength (uint256): 6600
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 00000000000000000000000033a7dbc18c618a3202d1e8e788846399088eaf85
Arg [1] : 0000000000000000000000009259ec974a0013e4b3560820c4b5ffa3768bf910
Arg [2] : 00000000000000000000000031353a50651583dd5cd3ed97d915e6f08dcd35a4
Arg [3] : 00000000000000000000000000000000000000000000000000000000000019c8
Deployed Bytecode Sourcemap
35348:12174:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20689:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21634:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23193:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22716:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36657:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24083:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37310:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39697:492;;;;;;;;;;;;;:::i;:::-;;24493:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38024:479;;;;;;;;;;;;;:::i;:::-;;39511:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36320:22;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;36351:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21328:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36423:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36912:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47420:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36627:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21058:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34465:94;;;;;;;;;;;;;:::i;:::-;;40348:790;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36880:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33814:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36593:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21803:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46111:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23486:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36389:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38561:270;;;;;;;;;;;;;:::i;:::-;;24749:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46456:882;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41246:541;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38995:416;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36983:70;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23852:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34714:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20689:305;20791:4;20843:25;20828:40;;;:11;:40;;;;:105;;;;20900:33;20885:48;;;:11;:48;;;;20828:105;:158;;;;20950:36;20974:11;20950:23;:36::i;:::-;20828:158;20808:178;;20689:305;;;:::o;21634:100::-;21688:13;21721:5;21714:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21634:100;:::o;23193:221::-;23269:7;23297:16;23305:7;23297;:16::i;:::-;23289:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23382:15;:24;23398:7;23382:24;;;;;;;;;;;;;;;;;;;;;23375:31;;23193:221;;;:::o;22716:411::-;22797:13;22813:23;22828:7;22813:14;:23::i;:::-;22797:39;;22861:5;22855:11;;:2;:11;;;;22847:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22955:5;22939:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22964:37;22981:5;22988:12;:10;:12::i;:::-;22964:16;:37::i;:::-;22939:62;22917:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;23098:21;23107:2;23111:7;23098:8;:21::i;:::-;22716:411;;;:::o;36657:23::-;;;;:::o;24083:339::-;24278:41;24297:12;:10;:12::i;:::-;24311:7;24278:18;:41::i;:::-;24270:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24386:28;24396:4;24402:2;24406:7;24386:9;:28::i;:::-;24083:339;;;:::o;37310:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;39697:492::-;34045:12;:10;:12::i;:::-;34034:23;;:7;:5;:7::i;:::-;:23;;;34026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39781:1:::1;39757:21;:25;39749:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;39810:14;39851:1;39827:21;:25;;;;:::i;:::-;39810:42;;39863:18;39908:9;39884:21;:33;;;;:::i;:::-;39863:54;;39931:16;39952:4;;;;;;;;;;;:9;;39968;39952:30;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39930:52;;;40001:11;39993:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;40053:20;40078:8;;;;;;;;;;;:13;;40098;40078:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40052:64;;;40135:15;40127:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;34105:1;;;;39697:492::o:0;24493:185::-;24631:39;24648:4;24654:2;24658:7;24631:39;;;;;;;;;;;;:16;:39::i;:::-;24493:185;;;:::o;38024:479::-;34045:12;:10;:12::i;:::-;34034:23;;:7;:5;:7::i;:::-;:23;;;34026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38111:1:::1;38088:7;:19;;;:24;38080:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;38167:4;38151:13;;:20;;;;;;;;;;;;;;;;;;38194:115;;;;;;;;38231:12;38194:115;;;;38284:13;38269:12;:28;;;;:::i;:::-;38194:115;;::::0;38184:7:::1;:125;;;;;;;;;;;;;;;;;;;38359:1;38322:21;:34;38344:11:::0;38322:34:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;;38406:1;38371:21;:32;38393:9;38371:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;;38460:1;38418:21;:39;38440:16;38418:39:::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:43;;;;38472:23;38481:13;:11;:13::i;:::-;38472:8;:23::i;:::-;38024:479::o:0;39511:97::-;34045:12;:10;:12::i;:::-;34034:23;;:7;:5;:7::i;:::-;:23;;;34026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39596:4:::1;;39585:8;:15;;;;;;;:::i;:::-;;39511:97:::0;;:::o;36320:22::-;;;;;;;;;;;;;;:::o;36351:31::-;;;;;;;;;;;;;:::o;21328:239::-;21400:7;21420:13;21436:7;:16;21444:7;21436:16;;;;;;;;;;;;;;;;;;;;;21420:32;;21488:1;21471:19;;:5;:19;;;;21463:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21554:5;21547:12;;;21328:239;;;:::o;36423:21::-;;;;;;;;;;;;;:::o;36912:22::-;;;;;;;;;;;;;:::o;47420:97::-;47468:13;47501:8;47494:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47420:97;:::o;36627:23::-;;;;:::o;21058:208::-;21130:7;21175:1;21158:19;;:5;:19;;;;21150:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21242:9;:16;21252:5;21242:16;;;;;;;;;;;;;;;;21235:23;;21058:208;;;:::o;34465:94::-;34045:12;:10;:12::i;:::-;34034:23;;:7;:5;:7::i;:::-;:23;;;34026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34530:21:::1;34548:1;34530:9;:21::i;:::-;34465:94::o:0;40348:790::-;40439:12;40419:7;:17;;;:32;:49;;;;;40455:13;;;;;;;;;;;40419:49;40411:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;40570:1;40559:7;40510:21;:33;40532:10;40510:33;;;;;;;;;;;;;;;:46;40544:11;;40510:46;;;;;;;;;;;;:56;;;;:::i;:::-;:61;;40502:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;40663:7;36850:21;40638:32;;;;:::i;:::-;40625:9;:45;40616:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;40722:7;40703:15;;:26;40700:215;;40746:14;40752:7;40746:5;:14::i;:::-;40700:215;;;40793:14;40820:15;;40810:7;:25;;;;:::i;:::-;40793:42;;40850:22;40856:15;;40850:5;:22::i;:::-;40887:16;40893:9;40887:5;:16::i;:::-;40700:215;;40945:2;40930:11;;:17;40927:154;;;40980:5;40964:13;;:21;;;;;;;;;;;;;;;;;;41027:2;41008:15;;:21;41000:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;40927:154;41098:32;41110:10;41122:7;41098:32;;;;;;;:::i;:::-;;;;;;;;40348:790;:::o;36880:25::-;;;;;;;;;;;;;:::o;33814:87::-;33860:7;33887:6;;;;;;;;;;;33880:13;;33814:87;:::o;36593:27::-;;;;:::o;21803:104::-;21859:13;21892:7;21885:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21803:104;:::o;46111:217::-;46164:25;;:::i;:::-;46202:10;46215:8;:13;46224:3;46215:13;;;;;;;;;;;:18;;;46202:31;;46247:13;:20;46261:5;46247:20;;;;;;;;;;;;;;;;;;;;;46244:77;;;46296:8;:13;46305:3;46296:13;;;;;;;;;;;46284:25;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46244:77;46111:217;;;;:::o;23486:295::-;23601:12;:10;:12::i;:::-;23589:24;;:8;:24;;;;23581:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23701:8;23656:18;:32;23675:12;:10;:12::i;:::-;23656:32;;;;;;;;;;;;;;;:42;23689:8;23656:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23754:8;23725:48;;23740:12;:10;:12::i;:::-;23725:48;;;23764:8;23725:48;;;;;;:::i;:::-;;;;;;;;23486:295;;:::o;36389:27::-;;;;;;;;;;;;;:::o;38561:270::-;34045:12;:10;:12::i;:::-;34034:23;;:7;:5;:7::i;:::-;:23;;;34026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38645:1:::1;38622:7;:19;;;:24;;:39;;;;;38651:10;;;;;;;;;;;38650:11;38622:39;:75;;;;;38685:12;38665:7;:17;;;:32;38622:75;38614:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;38790:5;38774:13;;:21;;;;;;;;;;;;;;;;;;38819:4;38806:10;;:17;;;;;;;;;;;;;;;;;;38561:270::o:0;24749:328::-;24924:41;24943:12;:10;:12::i;:::-;24957:7;24924:18;:41::i;:::-;24916:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25030:39;25044:4;25050:2;25054:7;25063:5;25030:13;:39::i;:::-;24749:328;;;;:::o;46456:882::-;46521:13;46555:16;46563:7;46555;:16::i;:::-;46547:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;46634:25;46662:8;:17;46671:7;46662:17;;;;;;;;;;;46634:45;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46696:9;46716:16;46735:8;:24;46744:9;:14;;;46735:24;;;;;;;;;;;:39;;;46716:58;;46785:9;46820:1;46797:9;:20;;;:24;;;;:::i;:::-;46785:36;;46838:13;:29;46852:9;:14;;;46838:29;;;;;;;;;;;;;;;;;;;;;46834:412;;46891:1;46884:8;;46834:412;;;46946:11;46928:29;;;;;;;;;;;;;;;;:9;:14;;;:29;;;;;;;;;;;;;;;;;46925:310;;;47004:11;46999:2;:16;;;;:::i;:::-;46993:2;:23;;;;:::i;:::-;46985:4;:32;;;;:::i;:::-;46978:39;;46925:310;;;47061:9;47043:27;;;;;;;;;;;;;;;;:9;:14;;;:27;;;;;;;;;;;;;;;;;47039:196;;;47131:2;47117:11;47112:2;:16;;;;:::i;:::-;:21;;;;:::i;:::-;47106:2;:28;;;;:::i;:::-;47098:4;:37;;;;:::i;:::-;47091:44;;47039:196;;;47215:2;47201:11;47197:1;:15;;;;:::i;:::-;:20;;;;:::i;:::-;47191:2;:27;;;;:::i;:::-;47183:4;:36;;;;:::i;:::-;47176:43;;47039:196;46925:310;46834:412;47293:9;:7;:9::i;:::-;47304:24;47312:4;47304:22;:24::i;:::-;47276:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47262:68;;;;;;46456:882;;;:::o;41246:541::-;41310:10;;;;;;;;;;;41302:19;;;;;;41400:1;41389:7;41340:21;:33;41362:10;41340:33;;;;;;;;;;;;;;;:46;41374:11;;41340:46;;;;;;;;;;;;:56;;;;:::i;:::-;:61;;41332:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;41485:7;36772:21;41468:24;;;;:::i;:::-;41455:9;:37;41446:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;41544:7;41525:15;;:26;41522:215;;41568:14;41574:7;41568:5;:14::i;:::-;41522:215;;;41615:14;41642:15;;41632:7;:25;;;;:::i;:::-;41615:42;;41672:22;41678:15;;41672:5;:22::i;:::-;41709:16;41715:9;41709:5;:16::i;:::-;41522:215;;41754:25;41759:10;41771:7;41754:25;;;;;;;:::i;:::-;;;;;;;;41246:541;:::o;38995:416::-;34045:12;:10;:12::i;:::-;34034:23;;:7;:5;:7::i;:::-;:23;;;34026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39125:1:::1;39102:7;:19;;;:24;39094:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;39170:6;39166:194;39182:7;39178:1;:11;39166:194;;;39211:15;39220:5;39211:8;:15::i;:::-;39245:6;39241:108;39257:16;39253:1;:20;39241:108;;;39298:35;39308:10;39320:9;39330:1;39320:12;;;;;;;;;;;;;;;;;39298:9;:35::i;:::-;;39275:3;;;;;:::i;:::-;;;;39241:108;;;;39191:3;;;;;:::i;:::-;;;;39166:194;;;;39399:4;39370:13;:26;39384:11;;39370:26;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;38995:416:::0;;;:::o;36983:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23852:164::-;23949:4;23973:18;:25;23992:5;23973:25;;;;;;;;;;;;;;;:35;23999:8;23973:35;;;;;;;;;;;;;;;;;;;;;;;;;23966:42;;23852:164;;;;:::o;34714:192::-;34045:12;:10;:12::i;:::-;34034:23;;:7;:5;:7::i;:::-;:23;;;34026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34823:1:::1;34803:22;;:8;:22;;;;34795:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34879:19;34889:8;34879:9;:19::i;:::-;34714:192:::0;:::o;19189:157::-;19274:4;19313:25;19298:40;;;:11;:40;;;;19291:47;;19189:157;;;:::o;26587:127::-;26652:4;26704:1;26676:30;;:7;:16;26684:7;26676:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26669:37;;26587:127;;;:::o;16097:98::-;16150:7;16177:10;16170:17;;16097:98;:::o;30569:174::-;30671:2;30644:15;:24;30660:7;30644:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30727:7;30723:2;30689:46;;30698:23;30713:7;30698:14;:23::i;:::-;30689:46;;;;;;;;;;;;30569:174;;:::o;26881:348::-;26974:4;26999:16;27007:7;26999;:16::i;:::-;26991:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27075:13;27091:23;27106:7;27091:14;:23::i;:::-;27075:39;;27144:5;27133:16;;:7;:16;;;:51;;;;27177:7;27153:31;;:20;27165:7;27153:11;:20::i;:::-;:31;;;27133:51;:87;;;;27188:32;27205:5;27212:7;27188:16;:32::i;:::-;27133:87;27125:96;;;26881:348;;;;:::o;29873:578::-;30032:4;30005:31;;:23;30020:7;30005:14;:23::i;:::-;:31;;;29997:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30115:1;30101:16;;:2;:16;;;;30093:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30171:39;30192:4;30198:2;30202:7;30171:20;:39::i;:::-;30275:29;30292:1;30296:7;30275:8;:29::i;:::-;30336:1;30317:9;:15;30327:4;30317:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30365:1;30348:9;:13;30358:2;30348:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30396:2;30377:7;:16;30385:7;30377:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30435:7;30431:2;30416:27;;30425:4;30416:27;;;;;;;;;;;;29873:578;;;:::o;42424:1628::-;42469:4;42486:9;42554:1;42533:15;42516:33;;;;;;;;:::i;:::-;;;;;;;;;;;;;42506:44;;;;;;42498:53;;:57;;;;:::i;:::-;42486:69;;42568:10;42612:12;42592:7;:17;;;:32;:49;;;;;42628:13;;;;;;;;;;;42592:49;:69;;;;;42659:2;42645:11;;:16;42592:69;42589:1431;;;42686:1;42681;:6;;:48;;;;;42728:1;42691:21;:34;42713:11;42691:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:38;42681:48;42678:667;;;42758:11;42750:19;;42678:667;;;42799:1;42794;:6;;:46;;;;;42839:1;42804:21;:32;42826:9;42804:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:36;42794:46;42791:554;;;42869:9;42861:17;;42791:554;;;42909:1;42904;:6;:53;;;;;42956:1;42914:21;:39;42936:16;42914:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:43;42904:53;42900:445;;;42987:16;42979:24;;42900:445;;;43082:1;43047:21;:32;43069:9;43047:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:36;43044:286;;;43117:9;43109:17;;43044:286;;;43192:1;43155:21;:34;43177:11;43155:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:38;43152:178;;;43226:11;43218:19;;43152:178;;;43294:16;43286:24;;43152:178;43044:286;42900:445;42791:554;42678:667;42589:1431;;;43385:1;43380;:6;;:41;;;;;43420:1;43390:14;:27;43405:11;43390:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:31;43380:41;43377:632;;;43450:11;43442:19;;43377:632;;;43491:1;43486;:6;;:39;;;;;43524:1;43496:14;:25;43511:9;43496:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:29;43486:39;43483:526;;;43554:9;43546:17;;43483:526;;;43594:1;43589;:6;:46;;;;;43634:1;43599:14;:32;43614:16;43599:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:36;43589:46;43585:424;;;43665:16;43657:24;;43585:424;;;43753:1;43725:14;:25;43740:9;43725:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:29;43722:272;;;43788:9;43780:17;;43722:272;;;43856:1;43826:14;:27;43841:11;43826:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:31;43823:171;;;43890:11;43882:19;;43823:171;;;43958:16;43950:24;;43823:171;43722:272;43585:424;43483:526;43377:632;42589:1431;44039:5;44032:12;;;;42424:1628;:::o;44136:682::-;44195:13;:17;44209:2;44195:17;;;;;;;;;;;;;;;;;;;;;44194:18;44186:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;44271:4;44242:13;:26;44256:11;;44242:26;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;44311:12;44291:7;:17;;;:32;:49;;;;;44327:13;;;;;;;;;;;44291:49;:69;;;;;44358:2;44344:11;;:16;44291:69;44288:134;;;44409:1;44377:21;:28;44399:5;44377:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:33;;;;;;;:::i;:::-;;;;;;;;44288:134;36584:2;44437:11;;:27;44434:377;;;44509:107;;;;;;;;44539:5;44509:107;;;;;;;;;;;;;;;;;;;;44579:14;:21;44594:5;44579:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44509:107;;;44481:8;:25;44504:1;44490:11;;:15;;;;:::i;:::-;44481:25;;;;;;;;;;;:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44658:1;44633:14;:21;44648:5;44633:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;44691:1;44676:11;;:16;;;;;;;:::i;:::-;;;;;;;;44726:2;44708:15;:20;;;;44769:5;44743:10;:23;44754:11;;44743:23;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44789:10;:8;:10::i;:::-;44434:377;44136:682;:::o;34914:173::-;34970:16;34989:6;;;;;;;;;;;34970:25;;35015:8;35006:6;;:17;;;;;;;;;;;;;;;;;;35070:8;35039:40;;35060:8;35039:40;;;;;;;;;;;;34914:173;;:::o;41943:408::-;42042:7;41992:21;:33;42014:10;41992:33;;;;;;;;;;;;;;;:46;42026:11;;41992:46;;;;;;;;;;;;:57;;;;;;;:::i;:::-;;;;;;;;42066:6;42062:195;42078:7;42074:1;:11;42062:195;;;42109:8;42120:9;42149:15;;42130:16;:34;;;;:::i;:::-;42120:45;;;;;;;;;;;;;;;;;42109:56;;42182:26;42192:10;42204:3;42182:9;:26::i;:::-;;42244:1;42225:15;;:20;;;;;;;:::i;:::-;;;;;;;;42062:195;42087:3;;;;;:::i;:::-;;;;42062:195;;;;42291:1;42272:15;;:20;42269:75;;;42309:23;42318:13;:11;:13::i;:::-;42309:8;:23::i;:::-;42269:75;41943:408;:::o;25959:315::-;26116:28;26126:4;26132:2;26136:7;26116:9;:28::i;:::-;26163:48;26186:4;26192:2;26196:7;26205:5;26163:22;:48::i;:::-;26155:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25959:315;;;;:::o;16628:723::-;16684:13;16914:1;16905:5;:10;16901:53;;;16932:10;;;;;;;;;;;;;;;;;;;;;16901:53;16964:12;16979:5;16964:20;;16995:14;17020:78;17035:1;17027:4;:9;17020:78;;17053:8;;;;;:::i;:::-;;;;17084:2;17076:10;;;;;:::i;:::-;;;17020:78;;;17108:19;17140:6;17130:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17108:39;;17158:154;17174:1;17165:5;:10;17158:154;;17202:1;17192:11;;;;;:::i;:::-;;;17269:2;17261:5;:10;;;;:::i;:::-;17248:2;:24;;;;:::i;:::-;17235:39;;17218:6;17225;17218:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;17298:2;17289:11;;;;;:::i;:::-;;;17158:154;;;17336:6;17322:21;;;;;16628:723;;;;:::o;45377:564::-;45452:4;45469:7;45479:11;;45469:21;;45516:1;45501:11;;:16;;;;;;;:::i;:::-;;;;;;;;45530:25;45540:10;45552:2;45530:9;:25::i;:::-;45569:19;45590:20;45612:11;45635:6;;;;;;;;;;;45627:25;;;45653:11;45627:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45568:97;;;;;;45693:217;;;;;;;;45723:5;45693:217;;;;45750:6;45693:217;;;;45778:6;45693:217;;;;;;45805:11;;45693:217;;;;45843:11;45693:217;;;;45875:10;:23;45886:11;;45875:23;;;;;;;;;;;;;;;;;;;;;45693:217;;;;;;;;;;;;;;;;;;;45678:8;:12;45687:2;45678:12;;;;;;;;;;;:232;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45930:2;45923:10;;;;;;45377:564;;;;:::o;32679:126::-;;;;:::o;44900:333::-;44945:9;44940:286;44964:16;44960:1;:20;44940:286;;;45002:9;45094:1;45075:16;:20;;;;:::i;:::-;45053:15;45036:33;;;;;;;;:::i;:::-;;;;;;;;;;;;;45026:44;;;;;;45018:53;;:78;;;;:::i;:::-;45014:1;:82;;;;:::i;:::-;45002:94;;45111:12;45126:9;45136:1;45126:12;;;;;;;;;;;;;;;;;45111:27;;45168:9;45178:1;45168:12;;;;;;;;;;;;;;;;;45153:9;45163:1;45153:12;;;;;;;;;;;;;;;;:27;;;;45210:4;45195:9;45205:1;45195:12;;;;;;;;;;;;;;;;:19;;;;44940:286;;44982:3;;;;;:::i;:::-;;;;44940:286;;;;44900:333::o;31308:799::-;31463:4;31484:15;:2;:13;;;:15::i;:::-;31480:620;;;31536:2;31520:36;;;31557:12;:10;:12::i;:::-;31571:4;31577:7;31586:5;31520:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31516:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31779:1;31762:6;:13;:18;31758:272;;;31805:60;;;;;;;;;;:::i;:::-;;;;;;;;31758:272;31980:6;31974:13;31965:6;31961:2;31957:15;31950:38;31516:529;31653:41;;;31643:51;;;:6;:51;;;;31636:58;;;;;31480:620;32084:4;32077:11;;31308:799;;;;;;;:::o;27571:110::-;27647:26;27657:2;27661:7;27647:26;;;;;;;;;;;;:9;:26::i;:::-;27571:110;;:::o;8135:387::-;8195:4;8403:12;8470:7;8458:20;8450:28;;8513:1;8506:4;:8;8499:15;;;8135:387;;;:::o;27908:321::-;28038:18;28044:2;28048:7;28038:5;:18::i;:::-;28089:54;28120:1;28124:2;28128:7;28137:5;28089:22;:54::i;:::-;28067:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;27908:321;;;:::o;28565:382::-;28659:1;28645:16;;:2;:16;;;;28637:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28718:16;28726:7;28718;:16::i;:::-;28717:17;28709:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28780:45;28809:1;28813:2;28817:7;28780:20;:45::i;:::-;28855:1;28838:9;:13;28848:2;28838:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28886:2;28867:7;:16;28875:7;28867:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28931:7;28927:2;28906:33;;28923:1;28906:33;;;;;;;;;;;;28565:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:353::-;;469:65;484:49;526:6;484:49;:::i;:::-;469:65;:::i;:::-;460:74;;557:6;550:5;543:21;595:4;588:5;584:16;633:3;624:6;619:3;615:16;612:25;609:2;;;650:1;647;640:12;609:2;663:39;695:6;690:3;685;663:39;:::i;:::-;450:258;;;;;;:::o;714:139::-;;798:6;785:20;776:29;;814:33;841:5;814:33;:::i;:::-;766:87;;;;:::o;859:133::-;;940:6;927:20;918:29;;956:30;980:5;956:30;:::i;:::-;908:84;;;;:::o;998:137::-;;1083:6;1077:13;1068:22;;1099:30;1123:5;1099:30;:::i;:::-;1058:77;;;;:::o;1141:137::-;;1224:6;1211:20;1202:29;;1240:32;1266:5;1240:32;:::i;:::-;1192:86;;;;:::o;1284:141::-;;1371:6;1365:13;1356:22;;1387:32;1413:5;1387:32;:::i;:::-;1346:79;;;;:::o;1444:271::-;;1548:3;1541:4;1533:6;1529:17;1525:27;1515:2;;1566:1;1563;1556:12;1515:2;1606:6;1593:20;1631:78;1705:3;1697:6;1690:4;1682:6;1678:17;1631:78;:::i;:::-;1622:87;;1505:210;;;;;:::o;1721:157::-;;1814:6;1801:20;1792:29;;1830:42;1866:5;1830:42;:::i;:::-;1782:96;;;;:::o;1898:352::-;;;2016:3;2009:4;2001:6;1997:17;1993:27;1983:2;;2034:1;2031;2024:12;1983:2;2070:6;2057:20;2047:30;;2100:18;2092:6;2089:30;2086:2;;;2132:1;2129;2122:12;2086:2;2169:4;2161:6;2157:17;2145:29;;2223:3;2215:4;2207:6;2203:17;2193:8;2189:32;2186:41;2183:2;;;2240:1;2237;2230:12;2183:2;1973:277;;;;;:::o;2270:288::-;;2386:3;2379:4;2371:6;2367:17;2363:27;2353:2;;2404:1;2401;2394:12;2353:2;2437:6;2431:13;2462:90;2548:3;2540:6;2533:4;2525:6;2521:17;2462:90;:::i;:::-;2453:99;;2343:215;;;;;:::o;2564:139::-;;2648:6;2635:20;2626:29;;2664:33;2691:5;2664:33;:::i;:::-;2616:87;;;;:::o;2709:262::-;;2817:2;2805:9;2796:7;2792:23;2788:32;2785:2;;;2833:1;2830;2823:12;2785:2;2876:1;2901:53;2946:7;2937:6;2926:9;2922:22;2901:53;:::i;:::-;2891:63;;2847:117;2775:196;;;;:::o;2977:407::-;;;3102:2;3090:9;3081:7;3077:23;3073:32;3070:2;;;3118:1;3115;3108:12;3070:2;3161:1;3186:53;3231:7;3222:6;3211:9;3207:22;3186:53;:::i;:::-;3176:63;;3132:117;3288:2;3314:53;3359:7;3350:6;3339:9;3335:22;3314:53;:::i;:::-;3304:63;;3259:118;3060:324;;;;;:::o;3390:552::-;;;;3532:2;3520:9;3511:7;3507:23;3503:32;3500:2;;;3548:1;3545;3538:12;3500:2;3591:1;3616:53;3661:7;3652:6;3641:9;3637:22;3616:53;:::i;:::-;3606:63;;3562:117;3718:2;3744:53;3789:7;3780:6;3769:9;3765:22;3744:53;:::i;:::-;3734:63;;3689:118;3846:2;3872:53;3917:7;3908:6;3897:9;3893:22;3872:53;:::i;:::-;3862:63;;3817:118;3490:452;;;;;:::o;3948:809::-;;;;;4116:3;4104:9;4095:7;4091:23;4087:33;4084:2;;;4133:1;4130;4123:12;4084:2;4176:1;4201:53;4246:7;4237:6;4226:9;4222:22;4201:53;:::i;:::-;4191:63;;4147:117;4303:2;4329:53;4374:7;4365:6;4354:9;4350:22;4329:53;:::i;:::-;4319:63;;4274:118;4431:2;4457:53;4502:7;4493:6;4482:9;4478:22;4457:53;:::i;:::-;4447:63;;4402:118;4587:2;4576:9;4572:18;4559:32;4618:18;4610:6;4607:30;4604:2;;;4650:1;4647;4640:12;4604:2;4678:62;4732:7;4723:6;4712:9;4708:22;4678:62;:::i;:::-;4668:72;;4530:220;4074:683;;;;;;;:::o;4763:401::-;;;4885:2;4873:9;4864:7;4860:23;4856:32;4853:2;;;4901:1;4898;4891:12;4853:2;4944:1;4969:53;5014:7;5005:6;4994:9;4990:22;4969:53;:::i;:::-;4959:63;;4915:117;5071:2;5097:50;5139:7;5130:6;5119:9;5115:22;5097:50;:::i;:::-;5087:60;;5042:115;4843:321;;;;;:::o;5170:407::-;;;5295:2;5283:9;5274:7;5270:23;5266:32;5263:2;;;5311:1;5308;5301:12;5263:2;5354:1;5379:53;5424:7;5415:6;5404:9;5400:22;5379:53;:::i;:::-;5369:63;;5325:117;5481:2;5507:53;5552:7;5543:6;5532:9;5528:22;5507:53;:::i;:::-;5497:63;;5452:118;5253:324;;;;;:::o;5583:570::-;;;;5734:2;5722:9;5713:7;5709:23;5705:32;5702:2;;;5750:1;5747;5740:12;5702:2;5793:1;5818:53;5863:7;5854:6;5843:9;5839:22;5818:53;:::i;:::-;5808:63;;5764:117;5920:2;5946:53;5991:7;5982:6;5971:9;5967:22;5946:53;:::i;:::-;5936:63;;5891:118;6048:2;6074:62;6128:7;6119:6;6108:9;6104:22;6074:62;:::i;:::-;6064:72;;6019:127;5692:461;;;;;:::o;6159:260::-;;6266:2;6254:9;6245:7;6241:23;6237:32;6234:2;;;6282:1;6279;6272:12;6234:2;6325:1;6350:52;6394:7;6385:6;6374:9;6370:22;6350:52;:::i;:::-;6340:62;;6296:116;6224:195;;;;:::o;6425:282::-;;6543:2;6531:9;6522:7;6518:23;6514:32;6511:2;;;6559:1;6556;6549:12;6511:2;6602:1;6627:63;6682:7;6673:6;6662:9;6658:22;6627:63;:::i;:::-;6617:73;;6573:127;6501:206;;;;:::o;6713:395::-;;;6841:2;6829:9;6820:7;6816:23;6812:32;6809:2;;;6857:1;6854;6847:12;6809:2;6928:1;6917:9;6913:17;6900:31;6958:18;6950:6;6947:30;6944:2;;;6990:1;6987;6980:12;6944:2;7026:65;7083:7;7074:6;7063:9;7059:22;7026:65;:::i;:::-;7008:83;;;;6871:230;6799:309;;;;;:::o;7114:802::-;;;;7284:2;7272:9;7263:7;7259:23;7255:32;7252:2;;;7300:1;7297;7290:12;7252:2;7364:1;7353:9;7349:17;7343:24;7394:18;7386:6;7383:30;7380:2;;;7426:1;7423;7416:12;7380:2;7454:74;7520:7;7511:6;7500:9;7496:22;7454:74;:::i;:::-;7444:84;;7314:224;7598:2;7587:9;7583:18;7577:25;7629:18;7621:6;7618:30;7615:2;;;7661:1;7658;7651:12;7615:2;7689:74;7755:7;7746:6;7735:9;7731:22;7689:74;:::i;:::-;7679:84;;7548:225;7812:2;7838:61;7891:7;7882:6;7871:9;7867:22;7838:61;:::i;:::-;7828:71;;7783:126;7242:674;;;;;:::o;7922:262::-;;8030:2;8018:9;8009:7;8005:23;8001:32;7998:2;;;8046:1;8043;8036:12;7998:2;8089:1;8114:53;8159:7;8150:6;8139:9;8135:22;8114:53;:::i;:::-;8104:63;;8060:117;7988:196;;;;:::o;8190:142::-;8293:32;8319:5;8293:32;:::i;:::-;8288:3;8281:45;8271:61;;:::o;8338:118::-;8425:24;8443:5;8425:24;:::i;:::-;8420:3;8413:37;8403:53;;:::o;8462:99::-;8533:21;8548:5;8533:21;:::i;:::-;8528:3;8521:34;8511:50;;:::o;8567:109::-;8648:21;8663:5;8648:21;:::i;:::-;8643:3;8636:34;8626:50;;:::o;8682:360::-;;8796:38;8828:5;8796:38;:::i;:::-;8850:70;8913:6;8908:3;8850:70;:::i;:::-;8843:77;;8929:52;8974:6;8969:3;8962:4;8955:5;8951:16;8929:52;:::i;:::-;9006:29;9028:6;9006:29;:::i;:::-;9001:3;8997:39;8990:46;;8772:270;;;;;:::o;9048:135::-;9132:44;9170:5;9132:44;:::i;:::-;9127:3;9120:57;9110:73;;:::o;9189:344::-;;9295:39;9328:5;9295:39;:::i;:::-;9350:61;9404:6;9399:3;9350:61;:::i;:::-;9343:68;;9420:52;9465:6;9460:3;9453:4;9446:5;9442:16;9420:52;:::i;:::-;9497:29;9519:6;9497:29;:::i;:::-;9492:3;9488:39;9481:46;;9271:262;;;;;:::o;9539:364::-;;9655:39;9688:5;9655:39;:::i;:::-;9710:71;9774:6;9769:3;9710:71;:::i;:::-;9703:78;;9790:52;9835:6;9830:3;9823:4;9816:5;9812:16;9790:52;:::i;:::-;9867:29;9889:6;9867:29;:::i;:::-;9862:3;9858:39;9851:46;;9631:272;;;;;:::o;9909:377::-;;10043:39;10076:5;10043:39;:::i;:::-;10098:89;10180:6;10175:3;10098:89;:::i;:::-;10091:96;;10196:52;10241:6;10236:3;10229:4;10222:5;10218:16;10196:52;:::i;:::-;10273:6;10268:3;10264:16;10257:23;;10019:267;;;;;:::o;10292:312::-;;10455:67;10519:2;10514:3;10455:67;:::i;:::-;10448:74;;10552:16;10548:1;10543:3;10539:11;10532:37;10595:2;10590:3;10586:12;10579:19;;10438:166;;;:::o;10610:382::-;;10773:67;10837:2;10832:3;10773:67;:::i;:::-;10766:74;;10870:34;10866:1;10861:3;10857:11;10850:55;10936:20;10931:2;10926:3;10922:12;10915:42;10983:2;10978:3;10974:12;10967:19;;10756:236;;;:::o;10998:370::-;;11161:67;11225:2;11220:3;11161:67;:::i;:::-;11154:74;;11258:34;11254:1;11249:3;11245:11;11238:55;11324:8;11319:2;11314:3;11310:12;11303:30;11359:2;11354:3;11350:12;11343:19;;11144:224;;;:::o;11374:326::-;;11537:67;11601:2;11596:3;11537:67;:::i;:::-;11530:74;;11634:30;11630:1;11625:3;11621:11;11614:51;11691:2;11686:3;11682:12;11675:19;;11520:180;;;:::o;11706:320::-;;11869:67;11933:2;11928:3;11869:67;:::i;:::-;11862:74;;11966:24;11962:1;11957:3;11953:11;11946:45;12017:2;12012:3;12008:12;12001:19;;11852:174;;;:::o;12032:368::-;;12195:67;12259:2;12254:3;12195:67;:::i;:::-;12188:74;;12292:34;12288:1;12283:3;12279:11;12272:55;12358:6;12353:2;12348:3;12344:12;12337:28;12391:2;12386:3;12382:12;12375:19;;12178:222;;;:::o;12406:323::-;;12569:67;12633:2;12628:3;12569:67;:::i;:::-;12562:74;;12666:27;12662:1;12657:3;12653:11;12646:48;12720:2;12715:3;12711:12;12704:19;;12552:177;;;:::o;12735:367::-;;12898:67;12962:2;12957:3;12898:67;:::i;:::-;12891:74;;12995:34;12991:1;12986:3;12982:11;12975:55;13061:5;13056:2;13051:3;13047:12;13040:27;13093:2;13088:3;13084:12;13077:19;;12881:221;;;:::o;13108:316::-;;13271:67;13335:2;13330:3;13271:67;:::i;:::-;13264:74;;13368:20;13364:1;13359:3;13355:11;13348:41;13415:2;13410:3;13406:12;13399:19;;13254:170;;;:::o;13430:376::-;;13593:67;13657:2;13652:3;13593:67;:::i;:::-;13586:74;;13690:34;13686:1;13681:3;13677:11;13670:55;13756:14;13751:2;13746:3;13742:12;13735:36;13797:2;13792:3;13788:12;13781:19;;13576:230;;;:::o;13812:388::-;;13975:67;14039:2;14034:3;13975:67;:::i;:::-;13968:74;;14072:34;14068:1;14063:3;14059:11;14052:55;14138:26;14133:2;14128:3;14124:12;14117:48;14191:2;14186:3;14182:12;14175:19;;13958:242;;;:::o;14206:374::-;;14369:67;14433:2;14428:3;14369:67;:::i;:::-;14362:74;;14466:34;14462:1;14457:3;14453:11;14446:55;14532:12;14527:2;14522:3;14518:12;14511:34;14571:2;14566:3;14562:12;14555:19;;14352:228;;;:::o;14586:373::-;;14749:67;14813:2;14808:3;14749:67;:::i;:::-;14742:74;;14846:34;14842:1;14837:3;14833:11;14826:55;14912:11;14907:2;14902:3;14898:12;14891:33;14950:2;14945:3;14941:12;14934:19;;14732:227;;;:::o;14965:330::-;;15128:67;15192:2;15187:3;15128:67;:::i;:::-;15121:74;;15225:34;15221:1;15216:3;15212:11;15205:55;15286:2;15281:3;15277:12;15270:19;;15111:184;;;:::o;15301:322::-;;15464:67;15528:2;15523:3;15464:67;:::i;:::-;15457:74;;15561:26;15557:1;15552:3;15548:11;15541:47;15614:2;15609:3;15605:12;15598:19;;15447:176;;;:::o;15629:310::-;;15792:67;15856:2;15851:3;15792:67;:::i;:::-;15785:74;;15889:14;15885:1;15880:3;15876:11;15869:35;15930:2;15925:3;15921:12;15914:19;;15775:164;;;:::o;15945:324::-;;16108:67;16172:2;16167:3;16108:67;:::i;:::-;16101:74;;16205:28;16201:1;16196:3;16192:11;16185:49;16260:2;16255:3;16251:12;16244:19;;16091:178;;;:::o;16275:376::-;;16438:67;16502:2;16497:3;16438:67;:::i;:::-;16431:74;;16535:34;16531:1;16526:3;16522:11;16515:55;16601:14;16596:2;16591:3;16587:12;16580:36;16642:2;16637:3;16633:12;16626:19;;16421:230;;;:::o;16657:330::-;;16820:67;16884:2;16879:3;16820:67;:::i;:::-;16813:74;;16917:34;16913:1;16908:3;16904:11;16897:55;16978:2;16973:3;16969:12;16962:19;;16803:184;;;:::o;16993:373::-;;17156:67;17220:2;17215:3;17156:67;:::i;:::-;17149:74;;17253:34;17249:1;17244:3;17240:11;17233:55;17319:11;17314:2;17309:3;17305:12;17298:33;17357:2;17352:3;17348:12;17341:19;;17139:227;;;:::o;17372:327::-;;17535:67;17599:2;17594:3;17535:67;:::i;:::-;17528:74;;17632:31;17628:1;17623:3;17619:11;17612:52;17690:2;17685:3;17681:12;17674:19;;17518:181;;;:::o;17705:379::-;;17868:67;17932:2;17927:3;17868:67;:::i;:::-;17861:74;;17965:34;17961:1;17956:3;17952:11;17945:55;18031:17;18026:2;18021:3;18017:12;18010:39;18075:2;18070:3;18066:12;18059:19;;17851:233;;;:::o;18090:393::-;;18253:67;18317:2;18312:3;18253:67;:::i;:::-;18246:74;;18350:34;18346:1;18341:3;18337:11;18330:55;18416:31;18411:2;18406:3;18402:12;18395:53;18474:2;18469:3;18465:12;18458:19;;18236:247;;;:::o;18489:365::-;;18652:67;18716:2;18711:3;18652:67;:::i;:::-;18645:74;;18749:34;18745:1;18740:3;18736:11;18729:55;18815:3;18810:2;18805:3;18801:12;18794:25;18845:2;18840:3;18836:12;18829:19;;18635:219;;;:::o;18860:321::-;;19023:67;19087:2;19082:3;19023:67;:::i;:::-;19016:74;;19120:25;19116:1;19111:3;19107:11;19100:46;19172:2;19167:3;19163:12;19156:19;;19006:175;;;:::o;19187:297::-;;19367:83;19448:1;19443:3;19367:83;:::i;:::-;19360:90;;19476:1;19471:3;19467:11;19460:18;;19350:134;;;:::o;19490:381::-;;19653:67;19717:2;19712:3;19653:67;:::i;:::-;19646:74;;19750:34;19746:1;19741:3;19737:11;19730:55;19816:19;19811:2;19806:3;19802:12;19795:41;19862:2;19857:3;19853:12;19846:19;;19636:235;;;:::o;19877:310::-;;20040:67;20104:2;20099:3;20040:67;:::i;:::-;20033:74;;20137:14;20133:1;20128:3;20124:11;20117:35;20178:2;20173:3;20169:12;20162:19;;20023:164;;;:::o;20251:1384::-;;20408:4;20403:3;20399:14;20495:4;20488:5;20484:16;20478:23;20548:3;20542:4;20538:14;20531:4;20526:3;20522:14;20515:38;20574:73;20642:4;20628:12;20574:73;:::i;:::-;20566:81;;20423:235;20741:4;20734:5;20730:16;20724:23;20794:3;20788:4;20784:14;20777:4;20772:3;20768:14;20761:38;20820:73;20888:4;20874:12;20820:73;:::i;:::-;20812:81;;20668:236;20987:4;20980:5;20976:16;20970:23;21006:57;21057:4;21052:3;21048:14;21034:12;21006:57;:::i;:::-;20914:159;21155:4;21148:5;21144:16;21138:23;21174:63;21231:4;21226:3;21222:14;21208:12;21174:63;:::i;:::-;21083:164;21335:4;21328:5;21324:16;21318:23;21354:63;21411:4;21406:3;21402:14;21388:12;21354:63;:::i;:::-;21257:170;21509:4;21502:5;21498:16;21492:23;21528:70;21592:4;21587:3;21583:14;21569:12;21528:70;:::i;:::-;21437:171;21625:4;21618:11;;20377:1258;;;;;:::o;21641:108::-;21718:24;21736:5;21718:24;:::i;:::-;21713:3;21706:37;21696:53;;:::o;21755:118::-;21842:24;21860:5;21842:24;:::i;:::-;21837:3;21830:37;21820:53;;:::o;21879:157::-;21984:45;22004:24;22022:5;22004:24;:::i;:::-;21984:45;:::i;:::-;21979:3;21972:58;21962:74;;:::o;22042:435::-;;22244:95;22335:3;22326:6;22244:95;:::i;:::-;22237:102;;22356:95;22447:3;22438:6;22356:95;:::i;:::-;22349:102;;22468:3;22461:10;;22226:251;;;;;:::o;22483:379::-;;22689:147;22832:3;22689:147;:::i;:::-;22682:154;;22853:3;22846:10;;22671:191;;;:::o;22868:256::-;;22995:75;23066:3;23057:6;22995:75;:::i;:::-;23095:2;23090:3;23086:12;23079:19;;23115:3;23108:10;;22984:140;;;;:::o;23130:222::-;;23261:2;23250:9;23246:18;23238:26;;23274:71;23342:1;23331:9;23327:17;23318:6;23274:71;:::i;:::-;23228:124;;;;:::o;23358:254::-;;23505:2;23494:9;23490:18;23482:26;;23518:87;23602:1;23591:9;23587:17;23578:6;23518:87;:::i;:::-;23472:140;;;;:::o;23618:640::-;;23851:3;23840:9;23836:19;23828:27;;23865:71;23933:1;23922:9;23918:17;23909:6;23865:71;:::i;:::-;23946:72;24014:2;24003:9;23999:18;23990:6;23946:72;:::i;:::-;24028;24096:2;24085:9;24081:18;24072:6;24028:72;:::i;:::-;24147:9;24141:4;24137:20;24132:2;24121:9;24117:18;24110:48;24175:76;24246:4;24237:6;24175:76;:::i;:::-;24167:84;;23818:440;;;;;;;:::o;24264:332::-;;24423:2;24412:9;24408:18;24400:26;;24436:71;24504:1;24493:9;24489:17;24480:6;24436:71;:::i;:::-;24517:72;24585:2;24574:9;24570:18;24561:6;24517:72;:::i;:::-;24390:206;;;;;:::o;24602:210::-;;24727:2;24716:9;24712:18;24704:26;;24740:65;24802:1;24791:9;24787:17;24778:6;24740:65;:::i;:::-;24694:118;;;;:::o;24818:313::-;;24969:2;24958:9;24954:18;24946:26;;25018:9;25012:4;25008:20;25004:1;24993:9;24989:17;24982:47;25046:78;25119:4;25110:6;25046:78;:::i;:::-;25038:86;;24936:195;;;;:::o;25137:419::-;;25341:2;25330:9;25326:18;25318:26;;25390:9;25384:4;25380:20;25376:1;25365:9;25361:17;25354:47;25418:131;25544:4;25418:131;:::i;:::-;25410:139;;25308:248;;;:::o;25562:419::-;;25766:2;25755:9;25751:18;25743:26;;25815:9;25809:4;25805:20;25801:1;25790:9;25786:17;25779:47;25843:131;25969:4;25843:131;:::i;:::-;25835:139;;25733:248;;;:::o;25987:419::-;;26191:2;26180:9;26176:18;26168:26;;26240:9;26234:4;26230:20;26226:1;26215:9;26211:17;26204:47;26268:131;26394:4;26268:131;:::i;:::-;26260:139;;26158:248;;;:::o;26412:419::-;;26616:2;26605:9;26601:18;26593:26;;26665:9;26659:4;26655:20;26651:1;26640:9;26636:17;26629:47;26693:131;26819:4;26693:131;:::i;:::-;26685:139;;26583:248;;;:::o;26837:419::-;;27041:2;27030:9;27026:18;27018:26;;27090:9;27084:4;27080:20;27076:1;27065:9;27061:17;27054:47;27118:131;27244:4;27118:131;:::i;:::-;27110:139;;27008:248;;;:::o;27262:419::-;;27466:2;27455:9;27451:18;27443:26;;27515:9;27509:4;27505:20;27501:1;27490:9;27486:17;27479:47;27543:131;27669:4;27543:131;:::i;:::-;27535:139;;27433:248;;;:::o;27687:419::-;;27891:2;27880:9;27876:18;27868:26;;27940:9;27934:4;27930:20;27926:1;27915:9;27911:17;27904:47;27968:131;28094:4;27968:131;:::i;:::-;27960:139;;27858:248;;;:::o;28112:419::-;;28316:2;28305:9;28301:18;28293:26;;28365:9;28359:4;28355:20;28351:1;28340:9;28336:17;28329:47;28393:131;28519:4;28393:131;:::i;:::-;28385:139;;28283:248;;;:::o;28537:419::-;;28741:2;28730:9;28726:18;28718:26;;28790:9;28784:4;28780:20;28776:1;28765:9;28761:17;28754:47;28818:131;28944:4;28818:131;:::i;:::-;28810:139;;28708:248;;;:::o;28962:419::-;;29166:2;29155:9;29151:18;29143:26;;29215:9;29209:4;29205:20;29201:1;29190:9;29186:17;29179:47;29243:131;29369:4;29243:131;:::i;:::-;29235:139;;29133:248;;;:::o;29387:419::-;;29591:2;29580:9;29576:18;29568:26;;29640:9;29634:4;29630:20;29626:1;29615:9;29611:17;29604:47;29668:131;29794:4;29668:131;:::i;:::-;29660:139;;29558:248;;;:::o;29812:419::-;;30016:2;30005:9;30001:18;29993:26;;30065:9;30059:4;30055:20;30051:1;30040:9;30036:17;30029:47;30093:131;30219:4;30093:131;:::i;:::-;30085:139;;29983:248;;;:::o;30237:419::-;;30441:2;30430:9;30426:18;30418:26;;30490:9;30484:4;30480:20;30476:1;30465:9;30461:17;30454:47;30518:131;30644:4;30518:131;:::i;:::-;30510:139;;30408:248;;;:::o;30662:419::-;;30866:2;30855:9;30851:18;30843:26;;30915:9;30909:4;30905:20;30901:1;30890:9;30886:17;30879:47;30943:131;31069:4;30943:131;:::i;:::-;30935:139;;30833:248;;;:::o;31087:419::-;;31291:2;31280:9;31276:18;31268:26;;31340:9;31334:4;31330:20;31326:1;31315:9;31311:17;31304:47;31368:131;31494:4;31368:131;:::i;:::-;31360:139;;31258:248;;;:::o;31512:419::-;;31716:2;31705:9;31701:18;31693:26;;31765:9;31759:4;31755:20;31751:1;31740:9;31736:17;31729:47;31793:131;31919:4;31793:131;:::i;:::-;31785:139;;31683:248;;;:::o;31937:419::-;;32141:2;32130:9;32126:18;32118:26;;32190:9;32184:4;32180:20;32176:1;32165:9;32161:17;32154:47;32218:131;32344:4;32218:131;:::i;:::-;32210:139;;32108:248;;;:::o;32362:419::-;;32566:2;32555:9;32551:18;32543:26;;32615:9;32609:4;32605:20;32601:1;32590:9;32586:17;32579:47;32643:131;32769:4;32643:131;:::i;:::-;32635:139;;32533:248;;;:::o;32787:419::-;;32991:2;32980:9;32976:18;32968:26;;33040:9;33034:4;33030:20;33026:1;33015:9;33011:17;33004:47;33068:131;33194:4;33068:131;:::i;:::-;33060:139;;32958:248;;;:::o;33212:419::-;;33416:2;33405:9;33401:18;33393:26;;33465:9;33459:4;33455:20;33451:1;33440:9;33436:17;33429:47;33493:131;33619:4;33493:131;:::i;:::-;33485:139;;33383:248;;;:::o;33637:419::-;;33841:2;33830:9;33826:18;33818:26;;33890:9;33884:4;33880:20;33876:1;33865:9;33861:17;33854:47;33918:131;34044:4;33918:131;:::i;:::-;33910:139;;33808:248;;;:::o;34062:419::-;;34266:2;34255:9;34251:18;34243:26;;34315:9;34309:4;34305:20;34301:1;34290:9;34286:17;34279:47;34343:131;34469:4;34343:131;:::i;:::-;34335:139;;34233:248;;;:::o;34487:419::-;;34691:2;34680:9;34676:18;34668:26;;34740:9;34734:4;34730:20;34726:1;34715:9;34711:17;34704:47;34768:131;34894:4;34768:131;:::i;:::-;34760:139;;34658:248;;;:::o;34912:419::-;;35116:2;35105:9;35101:18;35093:26;;35165:9;35159:4;35155:20;35151:1;35140:9;35136:17;35129:47;35193:131;35319:4;35193:131;:::i;:::-;35185:139;;35083:248;;;:::o;35337:419::-;;35541:2;35530:9;35526:18;35518:26;;35590:9;35584:4;35580:20;35576:1;35565:9;35561:17;35554:47;35618:131;35744:4;35618:131;:::i;:::-;35610:139;;35508:248;;;:::o;35762:419::-;;35966:2;35955:9;35951:18;35943:26;;36015:9;36009:4;36005:20;36001:1;35990:9;35986:17;35979:47;36043:131;36169:4;36043:131;:::i;:::-;36035:139;;35933:248;;;:::o;36187:419::-;;36391:2;36380:9;36376:18;36368:26;;36440:9;36434:4;36430:20;36426:1;36415:9;36411:17;36404:47;36468:131;36594:4;36468:131;:::i;:::-;36460:139;;36358:248;;;:::o;36612:377::-;;36795:2;36784:9;36780:18;36772:26;;36844:9;36838:4;36834:20;36830:1;36819:9;36815:17;36808:47;36872:110;36977:4;36968:6;36872:110;:::i;:::-;36864:118;;36762:227;;;;:::o;36995:222::-;;37126:2;37115:9;37111:18;37103:26;;37139:71;37207:1;37196:9;37192:17;37183:6;37139:71;:::i;:::-;37093:124;;;;:::o;37223:332::-;;37382:2;37371:9;37367:18;37359:26;;37395:71;37463:1;37452:9;37448:17;37439:6;37395:71;:::i;:::-;37476:72;37544:2;37533:9;37529:18;37520:6;37476:72;:::i;:::-;37349:206;;;;;:::o;37561:283::-;;37627:2;37621:9;37611:19;;37669:4;37661:6;37657:17;37776:6;37764:10;37761:22;37740:18;37728:10;37725:34;37722:62;37719:2;;;37787:18;;:::i;:::-;37719:2;37827:10;37823:2;37816:22;37601:243;;;;:::o;37850:331::-;;38001:18;37993:6;37990:30;37987:2;;;38023:18;;:::i;:::-;37987:2;38108:4;38104:9;38097:4;38089:6;38085:17;38081:33;38073:41;;38169:4;38163;38159:15;38151:23;;37916:265;;;:::o;38187:332::-;;38339:18;38331:6;38328:30;38325:2;;;38361:18;;:::i;:::-;38325:2;38446:4;38442:9;38435:4;38427:6;38423:17;38419:33;38411:41;;38507:4;38501;38497:15;38489:23;;38254:265;;;:::o;38525:98::-;;38610:5;38604:12;38594:22;;38583:40;;;:::o;38629:99::-;;38715:5;38709:12;38699:22;;38688:40;;;:::o;38734:168::-;;38851:6;38846:3;38839:19;38891:4;38886:3;38882:14;38867:29;;38829:73;;;;:::o;38908:147::-;;39046:3;39031:18;;39021:34;;;;:::o;39061:159::-;;39169:6;39164:3;39157:19;39209:4;39204:3;39200:14;39185:29;;39147:73;;;;:::o;39226:169::-;;39344:6;39339:3;39332:19;39384:4;39379:3;39375:14;39360:29;;39322:73;;;;:::o;39401:148::-;;39540:3;39525:18;;39515:34;;;;:::o;39555:305::-;;39614:20;39632:1;39614:20;:::i;:::-;39609:25;;39648:20;39666:1;39648:20;:::i;:::-;39643:25;;39802:1;39734:66;39730:74;39727:1;39724:81;39721:2;;;39808:18;;:::i;:::-;39721:2;39852:1;39849;39845:9;39838:16;;39599:261;;;;:::o;39866:185::-;;39923:20;39941:1;39923:20;:::i;:::-;39918:25;;39957:20;39975:1;39957:20;:::i;:::-;39952:25;;39996:1;39986:2;;40001:18;;:::i;:::-;39986:2;40043:1;40040;40036:9;40031:14;;39908:143;;;;:::o;40057:348::-;;40120:20;40138:1;40120:20;:::i;:::-;40115:25;;40154:20;40172:1;40154:20;:::i;:::-;40149:25;;40342:1;40274:66;40270:74;40267:1;40264:81;40259:1;40252:9;40245:17;40241:105;40238:2;;;40349:18;;:::i;:::-;40238:2;40397:1;40394;40390:9;40379:20;;40105:300;;;;:::o;40411:191::-;;40471:20;40489:1;40471:20;:::i;:::-;40466:25;;40505:20;40523:1;40505:20;:::i;:::-;40500:25;;40544:1;40541;40538:8;40535:2;;;40549:18;;:::i;:::-;40535:2;40594:1;40591;40587:9;40579:17;;40456:146;;;;:::o;40608:96::-;;40674:24;40692:5;40674:24;:::i;:::-;40663:35;;40653:51;;;:::o;40710:104::-;;40784:24;40802:5;40784:24;:::i;:::-;40773:35;;40763:51;;;:::o;40820:90::-;;40897:5;40890:13;40883:21;40872:32;;40862:48;;;:::o;40916:149::-;;40992:66;40985:5;40981:78;40970:89;;40960:105;;;:::o;41071:129::-;;41146:5;41135:16;;41152:42;41188:5;41152:42;:::i;:::-;41125:75;;;:::o;41206:126::-;;41283:42;41276:5;41272:54;41261:65;;41251:81;;;:::o;41338:77::-;;41404:5;41393:16;;41383:32;;;:::o;41421:129::-;;41511:33;41538:5;41511:33;:::i;:::-;41498:46;;41488:62;;;:::o;41556:154::-;41640:6;41635:3;41630;41617:30;41702:1;41693:6;41688:3;41684:16;41677:27;41607:103;;;:::o;41716:307::-;41784:1;41794:113;41808:6;41805:1;41802:13;41794:113;;;41893:1;41888:3;41884:11;41878:18;41874:1;41869:3;41865:11;41858:39;41830:2;41827:1;41823:10;41818:15;;41794:113;;;41925:6;41922:1;41919:13;41916:2;;;42005:1;41996:6;41991:3;41987:16;41980:27;41916:2;41765:258;;;;:::o;42029:320::-;;42110:1;42104:4;42100:12;42090:22;;42157:1;42151:4;42147:12;42178:18;42168:2;;42234:4;42226:6;42222:17;42212:27;;42168:2;42296;42288:6;42285:14;42265:18;42262:38;42259:2;;;42315:18;;:::i;:::-;42259:2;42080:269;;;;:::o;42355:233::-;;42417:24;42435:5;42417:24;:::i;:::-;42408:33;;42463:66;42456:5;42453:77;42450:2;;;42533:18;;:::i;:::-;42450:2;42580:1;42573:5;42569:13;42562:20;;42398:190;;;:::o;42594:79::-;;42662:5;42651:16;;42641:32;;;:::o;42679:176::-;;42728:20;42746:1;42728:20;:::i;:::-;42723:25;;42762:20;42780:1;42762:20;:::i;:::-;42757:25;;42801:1;42791:2;;42806:18;;:::i;:::-;42791:2;42847:1;42844;42840:9;42835:14;;42713:142;;;;:::o;42861:180::-;42909:77;42906:1;42899:88;43006:4;43003:1;42996:15;43030:4;43027:1;43020:15;43047:180;43095:77;43092:1;43085:88;43192:4;43189:1;43182:15;43216:4;43213:1;43206:15;43233:180;43281:77;43278:1;43271:88;43378:4;43375:1;43368:15;43402:4;43399:1;43392:15;43419:180;43467:77;43464:1;43457:88;43564:4;43561:1;43554:15;43588:4;43585:1;43578:15;43605:180;43653:77;43650:1;43643:88;43750:4;43747:1;43740:15;43774:4;43771:1;43764:15;43791:102;;43883:2;43879:7;43874:2;43867:5;43863:14;43859:28;43849:38;;43839:54;;;:::o;43899:114::-;43981:1;43974:5;43971:12;43961:2;;43987:18;;:::i;:::-;43961:2;43951:62;:::o;44019:122::-;44092:24;44110:5;44092:24;:::i;:::-;44085:5;44082:35;44072:2;;44131:1;44128;44121:12;44072:2;44062:79;:::o;44147:116::-;44217:21;44232:5;44217:21;:::i;:::-;44210:5;44207:32;44197:2;;44253:1;44250;44243:12;44197:2;44187:76;:::o;44269:120::-;44341:23;44358:5;44341:23;:::i;:::-;44334:5;44331:34;44321:2;;44379:1;44376;44369:12;44321:2;44311:78;:::o;44395:108::-;44477:1;44470:5;44467:12;44457:2;;44493:1;44490;44483:12;44457:2;44447:56;:::o;44509:122::-;44582:24;44600:5;44582:24;:::i;:::-;44575:5;44572:35;44562:2;;44621:1;44618;44611:12;44562:2;44552:79;:::o
Swarm Source
ipfs://bc0b28543fc6bd868f9c90cca50f46c9f4dc3c5959200ddefbc97f4e5f48f0b6
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.