Contract Overview
Balance:
0 CRO
CRO Value:
$0.00
[ Download CSV Export ]
Contract Name:
FilthyWizard
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2022-09-17 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) 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/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @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 Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: contracts/FilthyWizard.sol pragma solidity >=0.7.0 <0.9.0; contract FilthyWizard is ERC721, Ownable { using Strings for uint256; using Counters for Counters.Counter; Counters.Counter private supply; string public uriPrefix = "https://disis.mypinata.cloud/ipfs/QmU4MCvcU2VAWAyK1EQ5eT82ktQhfUgB3JU1XST7gusbea/"; string public uriSuffix = ".json"; string public hiddenMetadataUri; uint256 public maxSupply = 2000; uint256 public maxMintAmountPerTx = 5; bool public paused = true; bool public revealed = true; address public sabcAddress; constructor() ERC721("FilthyWizard", "FWZ") { setHiddenMetadataUri(""); setsabcAddress(0x9652656deB47f2940A02203A1284F1781BBBc91D); } modifier mintCompliance(uint256 _mintAmount) { require(_mintAmount > 0 && _mintAmount <= maxMintAmountPerTx, "Invalid mint amount!"); require(supply.current() + _mintAmount <= maxSupply, "Too Much Man Too Much!"); _; } function totalSupply() public view returns (uint256) { return supply.current(); } function mint(uint256 _mintAmount) public mintCompliance(_mintAmount) { require(!paused, "Wizard are sweeppping right naww!"); IERC721 token = IERC721(sabcAddress); uint256 ownedAmount = token.balanceOf(msg.sender); require(ownedAmount >= 1, "Hey Where are yur Gubb ?"); _mintLoop(msg.sender, _mintAmount); } function mintForAddress(uint256 _mintAmount, address _receiver) public mintCompliance(_mintAmount) onlyOwner { _mintLoop(_receiver, _mintAmount); } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount); uint256 currentTokenId = 1; uint256 ownedTokenIndex = 0; while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) { address currentTokenOwner = ownerOf(currentTokenId); if (currentTokenOwner == _owner) { ownedTokenIds[ownedTokenIndex] = currentTokenId; ownedTokenIndex++; } currentTokenId++; } return ownedTokenIds; } function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require( _exists(_tokenId), "ERC721Metadata: URI query for nonexistent token" ); if (revealed == false) { return hiddenMetadataUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix)) : ""; } function setsabcAddress(address _newAddress) public onlyOwner { sabcAddress = _newAddress; } function setRevealed(bool _state) public onlyOwner { revealed = _state; } function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx) public onlyOwner { maxMintAmountPerTx = _maxMintAmountPerTx; } function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner { hiddenMetadataUri = _hiddenMetadataUri; } function setUriPrefix(string memory _uriPrefix) public onlyOwner { uriPrefix = _uriPrefix; } function setUriSuffix(string memory _uriSuffix) public onlyOwner { uriSuffix = _uriSuffix; } function setPaused(bool _state) public onlyOwner { paused = _state; } function withdraw() public onlyOwner { // This will transfer the remaining contract balance to the owner. // Do not remove this otherwise you will not be able to withdraw the funds. // ============================================================================= (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); // ============================================================================= } function _mintLoop(address _receiver, uint256 _mintAmount) internal { for (uint256 i = 0; i < _mintAmount; i++) { supply.increment(); _safeMint(_receiver, supply.current()); } } function _baseURI() internal view virtual override returns (string memory) { return uriPrefix; } }
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sabcAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"setsabcAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260405180608001604052806051815260200162004aab60519139600890816200002e9190620006ab565b506040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060099081620000759190620006ab565b506107d0600b556005600c556001600d60006101000a81548160ff0219169083151502179055506001600d60016101000a81548160ff021916908315150217905550348015620000c457600080fd5b506040518060400160405280600c81526020017f46696c74687957697a61726400000000000000000000000000000000000000008152506040518060400160405280600381526020017f46575a00000000000000000000000000000000000000000000000000000000008152508160009081620001429190620006ab565b508060019081620001549190620006ab565b505050620001776200016b620001c260201b60201c565b620001ca60201b60201c565b62000197604051806020016040528060008152506200029060201b60201c565b620001bc739652656deb47f2940a02203a1284f1781bbbc91d6200033460201b60201c565b62000815565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002a0620001c260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002c66200040760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200031f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200031690620007f3565b60405180910390fd5b80600a9081620003309190620006ab565b5050565b62000344620001c260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200036a6200040760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003c3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003ba90620007f3565b60405180910390fd5b80600d60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004b357607f821691505b602082108103620004c957620004c86200046b565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620004f4565b6200053f8683620004f4565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200058c62000586620005808462000557565b62000561565b62000557565b9050919050565b6000819050919050565b620005a8836200056b565b620005c0620005b78262000593565b84845462000501565b825550505050565b600090565b620005d7620005c8565b620005e48184846200059d565b505050565b5b818110156200060c5762000600600082620005cd565b600181019050620005ea565b5050565b601f8211156200065b576200062581620004cf565b6200063084620004e4565b8101602085101562000640578190505b620006586200064f85620004e4565b830182620005e9565b50505b505050565b600082821c905092915050565b6000620006806000198460080262000660565b1980831691505092915050565b60006200069b83836200066d565b9150826002028217905092915050565b620006b68262000431565b67ffffffffffffffff811115620006d257620006d16200043c565b5b620006de82546200049a565b620006eb82828562000610565b600060209050601f8311600181146200072357600084156200070e578287015190505b6200071a85826200068d565b8655506200078a565b601f1984166200073386620004cf565b60005b828110156200075d5784890151825560018201915060208501945060208101905062000736565b868310156200077d578489015162000779601f8916826200066d565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620007db60208362000792565b9150620007e882620007a3565b602082019050919050565b600060208201905081810360008301526200080e81620007cc565b9050919050565b61428680620008256000396000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c806370a0823111610125578063b071401b116100ad578063e0a808531161007c578063e0a80853146105f1578063e985e9c51461060d578063ec1543da1461063d578063efbd73f414610659578063f2fde38b146106755761021c565b8063b071401b1461056b578063b88d4fde14610587578063c87b56dd146105a3578063d5abeb01146105d35761021c565b806394354fd0116100f457806394354fd0146104d957806395d89b41146104f7578063a0712d6814610515578063a22cb46514610531578063a45ba8e71461054d5761021c565b806370a0823114610465578063715018a6146104955780637ec4a6591461049f5780638da5cb5b146104bb5761021c565b80633ccfd60b116101a8578063518302271161017757806351830227146103bd5780635503a0e8146103db5780635c975abb146103f957806362b99ad4146104175780636352211e146104355761021c565b80633ccfd60b1461034b57806342842e0e14610355578063438b6300146103715780634fdd43cb146103a15761021c565b8063095ea7b3116101ef578063095ea7b3146102bd57806316ba10e0146102d957806316c38b3c146102f557806318160ddd1461031157806323b872dd1461032f5761021c565b806301ffc9a714610221578063055bb64c1461025157806306fdde031461026f578063081812fc1461028d575b600080fd5b61023b60048036038101906102369190612995565b610691565b60405161024891906129dd565b60405180910390f35b610259610773565b6040516102669190612a39565b60405180910390f35b610277610799565b6040516102849190612ae4565b60405180910390f35b6102a760048036038101906102a29190612b3c565b61082b565b6040516102b49190612a39565b60405180910390f35b6102d760048036038101906102d29190612b95565b6108b0565b005b6102f360048036038101906102ee9190612d0a565b6109c7565b005b61030f600480360381019061030a9190612d7f565b610a56565b005b610319610aef565b6040516103269190612dbb565b60405180910390f35b61034960048036038101906103449190612dd6565b610b00565b005b610353610b60565b005b61036f600480360381019061036a9190612dd6565b610c5c565b005b61038b60048036038101906103869190612e29565b610c7c565b6040516103989190612f14565b60405180910390f35b6103bb60048036038101906103b69190612d0a565b610d86565b005b6103c5610e15565b6040516103d291906129dd565b60405180910390f35b6103e3610e28565b6040516103f09190612ae4565b60405180910390f35b610401610eb6565b60405161040e91906129dd565b60405180910390f35b61041f610ec9565b60405161042c9190612ae4565b60405180910390f35b61044f600480360381019061044a9190612b3c565b610f57565b60405161045c9190612a39565b60405180910390f35b61047f600480360381019061047a9190612e29565b611008565b60405161048c9190612dbb565b60405180910390f35b61049d6110bf565b005b6104b960048036038101906104b49190612d0a565b611147565b005b6104c36111d6565b6040516104d09190612a39565b60405180910390f35b6104e1611200565b6040516104ee9190612dbb565b60405180910390f35b6104ff611206565b60405161050c9190612ae4565b60405180910390f35b61052f600480360381019061052a9190612b3c565b611298565b005b61054b60048036038101906105469190612f36565b61148c565b005b6105556114a2565b6040516105629190612ae4565b60405180910390f35b61058560048036038101906105809190612b3c565b611530565b005b6105a1600480360381019061059c9190613017565b6115b6565b005b6105bd60048036038101906105b89190612b3c565b611618565b6040516105ca9190612ae4565b60405180910390f35b6105db611770565b6040516105e89190612dbb565b60405180910390f35b61060b60048036038101906106069190612d7f565b611776565b005b6106276004803603810190610622919061309a565b61180f565b60405161063491906129dd565b60405180910390f35b61065760048036038101906106529190612e29565b6118a3565b005b610673600480360381019061066e91906130da565b611963565b005b61068f600480360381019061068a9190612e29565b611a99565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061075c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061076c575061076b82611b90565b5b9050919050565b600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600080546107a890613149565b80601f01602080910402602001604051908101604052809291908181526020018280546107d490613149565b80156108215780601f106107f657610100808354040283529160200191610821565b820191906000526020600020905b81548152906001019060200180831161080457829003601f168201915b5050505050905090565b600061083682611bfa565b610875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086c906131ec565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108bb82610f57565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361092b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109229061327e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661094a611c66565b73ffffffffffffffffffffffffffffffffffffffff161480610979575061097881610973611c66565b61180f565b5b6109b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109af90613310565b60405180910390fd5b6109c28383611c6e565b505050565b6109cf611c66565b73ffffffffffffffffffffffffffffffffffffffff166109ed6111d6565b73ffffffffffffffffffffffffffffffffffffffff1614610a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3a9061337c565b60405180910390fd5b8060099081610a529190613548565b5050565b610a5e611c66565b73ffffffffffffffffffffffffffffffffffffffff16610a7c6111d6565b73ffffffffffffffffffffffffffffffffffffffff1614610ad2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac99061337c565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b6000610afb6007611d27565b905090565b610b11610b0b611c66565b82611d35565b610b50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b479061368c565b60405180910390fd5b610b5b838383611e13565b505050565b610b68611c66565b73ffffffffffffffffffffffffffffffffffffffff16610b866111d6565b73ffffffffffffffffffffffffffffffffffffffff1614610bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd39061337c565b60405180910390fd5b6000610be66111d6565b73ffffffffffffffffffffffffffffffffffffffff1647604051610c09906136dd565b60006040518083038185875af1925050503d8060008114610c46576040519150601f19603f3d011682016040523d82523d6000602084013e610c4b565b606091505b5050905080610c5957600080fd5b50565b610c77838383604051806020016040528060008152506115b6565b505050565b60606000610c8983611008565b905060008167ffffffffffffffff811115610ca757610ca6612bdf565b5b604051908082528060200260200182016040528015610cd55781602001602082028036833780820191505090505b50905060006001905060005b8381108015610cf25750600b548211155b15610d7a576000610d0283610f57565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d665782848381518110610d4b57610d4a6136f2565b5b6020026020010181815250508180610d6290613750565b9250505b8280610d7190613750565b93505050610ce1565b82945050505050919050565b610d8e611c66565b73ffffffffffffffffffffffffffffffffffffffff16610dac6111d6565b73ffffffffffffffffffffffffffffffffffffffff1614610e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df99061337c565b60405180910390fd5b80600a9081610e119190613548565b5050565b600d60019054906101000a900460ff1681565b60098054610e3590613149565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6190613149565b8015610eae5780601f10610e8357610100808354040283529160200191610eae565b820191906000526020600020905b815481529060010190602001808311610e9157829003601f168201915b505050505081565b600d60009054906101000a900460ff1681565b60088054610ed690613149565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0290613149565b8015610f4f5780601f10610f2457610100808354040283529160200191610f4f565b820191906000526020600020905b815481529060010190602001808311610f3257829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610fff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff69061380a565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106f9061389c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110c7611c66565b73ffffffffffffffffffffffffffffffffffffffff166110e56111d6565b73ffffffffffffffffffffffffffffffffffffffff161461113b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111329061337c565b60405180910390fd5b611145600061206e565b565b61114f611c66565b73ffffffffffffffffffffffffffffffffffffffff1661116d6111d6565b73ffffffffffffffffffffffffffffffffffffffff16146111c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ba9061337c565b60405180910390fd5b80600890816111d29190613548565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600c5481565b60606001805461121590613149565b80601f016020809104026020016040519081016040528092919081815260200182805461124190613149565b801561128e5780601f106112635761010080835404028352916020019161128e565b820191906000526020600020905b81548152906001019060200180831161127157829003601f168201915b5050505050905090565b806000811180156112ab5750600c548111155b6112ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e190613908565b60405180910390fd5b600b54816112f86007611d27565b6113029190613928565b1115611343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133a906139a8565b60405180910390fd5b600d60009054906101000a900460ff1615611393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138a90613a3a565b60405180910390fd5b6000600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016113f59190612a39565b602060405180830381865afa158015611412573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114369190613a6f565b9050600181101561147c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147390613ae8565b60405180910390fd5b6114863385612134565b50505050565b61149e611497611c66565b8383612174565b5050565b600a80546114af90613149565b80601f01602080910402602001604051908101604052809291908181526020018280546114db90613149565b80156115285780601f106114fd57610100808354040283529160200191611528565b820191906000526020600020905b81548152906001019060200180831161150b57829003601f168201915b505050505081565b611538611c66565b73ffffffffffffffffffffffffffffffffffffffff166115566111d6565b73ffffffffffffffffffffffffffffffffffffffff16146115ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a39061337c565b60405180910390fd5b80600c8190555050565b6115c76115c1611c66565b83611d35565b611606576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fd9061368c565b60405180910390fd5b611612848484846122e0565b50505050565b606061162382611bfa565b611662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165990613b7a565b60405180910390fd5b60001515600d60019054906101000a900460ff1615150361170f57600a805461168a90613149565b80601f01602080910402602001604051908101604052809291908181526020018280546116b690613149565b80156117035780601f106116d857610100808354040283529160200191611703565b820191906000526020600020905b8154815290600101906020018083116116e657829003601f168201915b5050505050905061176b565b600061171961233c565b905060008151116117395760405180602001604052806000815250611767565b80611743846123ce565b600960405160200161175793929190613c59565b6040516020818303038152906040525b9150505b919050565b600b5481565b61177e611c66565b73ffffffffffffffffffffffffffffffffffffffff1661179c6111d6565b73ffffffffffffffffffffffffffffffffffffffff16146117f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e99061337c565b60405180910390fd5b80600d60016101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6118ab611c66565b73ffffffffffffffffffffffffffffffffffffffff166118c96111d6565b73ffffffffffffffffffffffffffffffffffffffff161461191f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119169061337c565b60405180910390fd5b80600d60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b816000811180156119765750600c548111155b6119b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ac90613908565b60405180910390fd5b600b54816119c36007611d27565b6119cd9190613928565b1115611a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a05906139a8565b60405180910390fd5b611a16611c66565b73ffffffffffffffffffffffffffffffffffffffff16611a346111d6565b73ffffffffffffffffffffffffffffffffffffffff1614611a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a819061337c565b60405180910390fd5b611a948284612134565b505050565b611aa1611c66565b73ffffffffffffffffffffffffffffffffffffffff16611abf6111d6565b73ffffffffffffffffffffffffffffffffffffffff1614611b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0c9061337c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7b90613cfc565b60405180910390fd5b611b8d8161206e565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611ce183610f57565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6000611d4082611bfa565b611d7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7690613d8e565b60405180910390fd5b6000611d8a83610f57565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611df957508373ffffffffffffffffffffffffffffffffffffffff16611de18461082b565b73ffffffffffffffffffffffffffffffffffffffff16145b80611e0a5750611e09818561180f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611e3382610f57565b73ffffffffffffffffffffffffffffffffffffffff1614611e89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8090613e20565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eef90613eb2565b60405180910390fd5b611f0383838361252e565b611f0e600082611c6e565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f5e9190613ed2565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fb59190613928565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b8181101561216f576121496007612533565b61215c836121576007611d27565b612549565b808061216790613750565b915050612137565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d990613f52565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516122d391906129dd565b60405180910390a3505050565b6122eb848484611e13565b6122f784848484612567565b612336576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232d90613fe4565b60405180910390fd5b50505050565b60606008805461234b90613149565b80601f016020809104026020016040519081016040528092919081815260200182805461237790613149565b80156123c45780601f10612399576101008083540402835291602001916123c4565b820191906000526020600020905b8154815290600101906020018083116123a757829003601f168201915b5050505050905090565b606060008203612415576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612529565b600082905060005b6000821461244757808061243090613750565b915050600a826124409190614033565b915061241d565b60008167ffffffffffffffff81111561246357612462612bdf565b5b6040519080825280601f01601f1916602001820160405280156124955781602001600182028036833780820191505090505b5090505b60008514612522576001826124ae9190613ed2565b9150600a856124bd9190614064565b60306124c99190613928565b60f81b8183815181106124df576124de6136f2565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561251b9190614033565b9450612499565b8093505050505b919050565b505050565b6001816000016000828254019250508190555050565b6125638282604051806020016040528060008152506126ee565b5050565b60006125888473ffffffffffffffffffffffffffffffffffffffff16612749565b156126e1578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026125b1611c66565b8786866040518563ffffffff1660e01b81526004016125d394939291906140ea565b6020604051808303816000875af192505050801561260f57506040513d601f19601f8201168201806040525081019061260c919061414b565b60015b612691573d806000811461263f576040519150601f19603f3d011682016040523d82523d6000602084013e612644565b606091505b506000815103612689576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268090613fe4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506126e6565b600190505b949350505050565b6126f8838361275c565b6127056000848484612567565b612744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273b90613fe4565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c2906141c4565b60405180910390fd5b6127d481611bfa565b15612814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280b90614230565b60405180910390fd5b6128206000838361252e565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128709190613928565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6129728161293d565b811461297d57600080fd5b50565b60008135905061298f81612969565b92915050565b6000602082840312156129ab576129aa612933565b5b60006129b984828501612980565b91505092915050565b60008115159050919050565b6129d7816129c2565b82525050565b60006020820190506129f260008301846129ce565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a23826129f8565b9050919050565b612a3381612a18565b82525050565b6000602082019050612a4e6000830184612a2a565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a8e578082015181840152602081019050612a73565b60008484015250505050565b6000601f19601f8301169050919050565b6000612ab682612a54565b612ac08185612a5f565b9350612ad0818560208601612a70565b612ad981612a9a565b840191505092915050565b60006020820190508181036000830152612afe8184612aab565b905092915050565b6000819050919050565b612b1981612b06565b8114612b2457600080fd5b50565b600081359050612b3681612b10565b92915050565b600060208284031215612b5257612b51612933565b5b6000612b6084828501612b27565b91505092915050565b612b7281612a18565b8114612b7d57600080fd5b50565b600081359050612b8f81612b69565b92915050565b60008060408385031215612bac57612bab612933565b5b6000612bba85828601612b80565b9250506020612bcb85828601612b27565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612c1782612a9a565b810181811067ffffffffffffffff82111715612c3657612c35612bdf565b5b80604052505050565b6000612c49612929565b9050612c558282612c0e565b919050565b600067ffffffffffffffff821115612c7557612c74612bdf565b5b612c7e82612a9a565b9050602081019050919050565b82818337600083830152505050565b6000612cad612ca884612c5a565b612c3f565b905082815260208101848484011115612cc957612cc8612bda565b5b612cd4848285612c8b565b509392505050565b600082601f830112612cf157612cf0612bd5565b5b8135612d01848260208601612c9a565b91505092915050565b600060208284031215612d2057612d1f612933565b5b600082013567ffffffffffffffff811115612d3e57612d3d612938565b5b612d4a84828501612cdc565b91505092915050565b612d5c816129c2565b8114612d6757600080fd5b50565b600081359050612d7981612d53565b92915050565b600060208284031215612d9557612d94612933565b5b6000612da384828501612d6a565b91505092915050565b612db581612b06565b82525050565b6000602082019050612dd06000830184612dac565b92915050565b600080600060608486031215612def57612dee612933565b5b6000612dfd86828701612b80565b9350506020612e0e86828701612b80565b9250506040612e1f86828701612b27565b9150509250925092565b600060208284031215612e3f57612e3e612933565b5b6000612e4d84828501612b80565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612e8b81612b06565b82525050565b6000612e9d8383612e82565b60208301905092915050565b6000602082019050919050565b6000612ec182612e56565b612ecb8185612e61565b9350612ed683612e72565b8060005b83811015612f07578151612eee8882612e91565b9750612ef983612ea9565b925050600181019050612eda565b5085935050505092915050565b60006020820190508181036000830152612f2e8184612eb6565b905092915050565b60008060408385031215612f4d57612f4c612933565b5b6000612f5b85828601612b80565b9250506020612f6c85828601612d6a565b9150509250929050565b600067ffffffffffffffff821115612f9157612f90612bdf565b5b612f9a82612a9a565b9050602081019050919050565b6000612fba612fb584612f76565b612c3f565b905082815260208101848484011115612fd657612fd5612bda565b5b612fe1848285612c8b565b509392505050565b600082601f830112612ffe57612ffd612bd5565b5b813561300e848260208601612fa7565b91505092915050565b6000806000806080858703121561303157613030612933565b5b600061303f87828801612b80565b945050602061305087828801612b80565b935050604061306187828801612b27565b925050606085013567ffffffffffffffff81111561308257613081612938565b5b61308e87828801612fe9565b91505092959194509250565b600080604083850312156130b1576130b0612933565b5b60006130bf85828601612b80565b92505060206130d085828601612b80565b9150509250929050565b600080604083850312156130f1576130f0612933565b5b60006130ff85828601612b27565b925050602061311085828601612b80565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061316157607f821691505b6020821081036131745761317361311a565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006131d6602c83612a5f565b91506131e18261317a565b604082019050919050565b60006020820190508181036000830152613205816131c9565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613268602183612a5f565b91506132738261320c565b604082019050919050565b600060208201905081810360008301526132978161325b565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b60006132fa603883612a5f565b91506133058261329e565b604082019050919050565b60006020820190508181036000830152613329816132ed565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613366602083612a5f565b915061337182613330565b602082019050919050565b6000602082019050818103600083015261339581613359565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026133fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826133c1565b61340886836133c1565b95508019841693508086168417925050509392505050565b6000819050919050565b600061344561344061343b84612b06565b613420565b612b06565b9050919050565b6000819050919050565b61345f8361342a565b61347361346b8261344c565b8484546133ce565b825550505050565b600090565b61348861347b565b613493818484613456565b505050565b5b818110156134b7576134ac600082613480565b600181019050613499565b5050565b601f8211156134fc576134cd8161339c565b6134d6846133b1565b810160208510156134e5578190505b6134f96134f1856133b1565b830182613498565b50505b505050565b600082821c905092915050565b600061351f60001984600802613501565b1980831691505092915050565b6000613538838361350e565b9150826002028217905092915050565b61355182612a54565b67ffffffffffffffff81111561356a57613569612bdf565b5b6135748254613149565b61357f8282856134bb565b600060209050601f8311600181146135b257600084156135a0578287015190505b6135aa858261352c565b865550613612565b601f1984166135c08661339c565b60005b828110156135e8578489015182556001820191506020850194506020810190506135c3565b868310156136055784890151613601601f89168261350e565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613676603183612a5f565b91506136818261361a565b604082019050919050565b600060208201905081810360008301526136a581613669565b9050919050565b600081905092915050565b50565b60006136c76000836136ac565b91506136d2826136b7565b600082019050919050565b60006136e8826136ba565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061375b82612b06565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361378d5761378c613721565b5b600182019050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006137f4602983612a5f565b91506137ff82613798565b604082019050919050565b60006020820190508181036000830152613823816137e7565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613886602a83612a5f565b91506138918261382a565b604082019050919050565b600060208201905081810360008301526138b581613879565b9050919050565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b60006138f2601483612a5f565b91506138fd826138bc565b602082019050919050565b60006020820190508181036000830152613921816138e5565b9050919050565b600061393382612b06565b915061393e83612b06565b925082820190508082111561395657613955613721565b5b92915050565b7f546f6f204d756368204d616e20546f6f204d7563682100000000000000000000600082015250565b6000613992601683612a5f565b915061399d8261395c565b602082019050919050565b600060208201905081810360008301526139c181613985565b9050919050565b7f57697a617264206172652073776565707070696e67207269676874206e61777760008201527f2100000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a24602183612a5f565b9150613a2f826139c8565b604082019050919050565b60006020820190508181036000830152613a5381613a17565b9050919050565b600081519050613a6981612b10565b92915050565b600060208284031215613a8557613a84612933565b5b6000613a9384828501613a5a565b91505092915050565b7f48657920576865726520617265207975722047756262203f0000000000000000600082015250565b6000613ad2601883612a5f565b9150613add82613a9c565b602082019050919050565b60006020820190508181036000830152613b0181613ac5565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613b64602f83612a5f565b9150613b6f82613b08565b604082019050919050565b60006020820190508181036000830152613b9381613b57565b9050919050565b600081905092915050565b6000613bb082612a54565b613bba8185613b9a565b9350613bca818560208601612a70565b80840191505092915050565b60008154613be381613149565b613bed8186613b9a565b94506001821660008114613c085760018114613c1d57613c50565b60ff1983168652811515820286019350613c50565b613c268561339c565b60005b83811015613c4857815481890152600182019150602081019050613c29565b838801955050505b50505092915050565b6000613c658286613ba5565b9150613c718285613ba5565b9150613c7d8284613bd6565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613ce6602683612a5f565b9150613cf182613c8a565b604082019050919050565b60006020820190508181036000830152613d1581613cd9565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613d78602c83612a5f565b9150613d8382613d1c565b604082019050919050565b60006020820190508181036000830152613da781613d6b565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000613e0a602983612a5f565b9150613e1582613dae565b604082019050919050565b60006020820190508181036000830152613e3981613dfd565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613e9c602483612a5f565b9150613ea782613e40565b604082019050919050565b60006020820190508181036000830152613ecb81613e8f565b9050919050565b6000613edd82612b06565b9150613ee883612b06565b9250828203905081811115613f0057613eff613721565b5b92915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613f3c601983612a5f565b9150613f4782613f06565b602082019050919050565b60006020820190508181036000830152613f6b81613f2f565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613fce603283612a5f565b9150613fd982613f72565b604082019050919050565b60006020820190508181036000830152613ffd81613fc1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061403e82612b06565b915061404983612b06565b92508261405957614058614004565b5b828204905092915050565b600061406f82612b06565b915061407a83612b06565b92508261408a57614089614004565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006140bc82614095565b6140c681856140a0565b93506140d6818560208601612a70565b6140df81612a9a565b840191505092915050565b60006080820190506140ff6000830187612a2a565b61410c6020830186612a2a565b6141196040830185612dac565b818103606083015261412b81846140b1565b905095945050505050565b60008151905061414581612969565b92915050565b60006020828403121561416157614160612933565b5b600061416f84828501614136565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006141ae602083612a5f565b91506141b982614178565b602082019050919050565b600060208201905081810360008301526141dd816141a1565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061421a601c83612a5f565b9150614225826141e4565b602082019050919050565b600060208201905081810360008301526142498161420d565b905091905056fea2646970667358221220bae2532ae7371f42c937b6df2b06785c3a4c5f856530ed72932abd1d6e8c4d5d64736f6c6343000811003368747470733a2f2f64697369732e6d7970696e6174612e636c6f75642f697066732f516d55344d437663553256415741794b31455135655438326b74516866556742334a5531585354376775736265612f
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061021c5760003560e01c806370a0823111610125578063b071401b116100ad578063e0a808531161007c578063e0a80853146105f1578063e985e9c51461060d578063ec1543da1461063d578063efbd73f414610659578063f2fde38b146106755761021c565b8063b071401b1461056b578063b88d4fde14610587578063c87b56dd146105a3578063d5abeb01146105d35761021c565b806394354fd0116100f457806394354fd0146104d957806395d89b41146104f7578063a0712d6814610515578063a22cb46514610531578063a45ba8e71461054d5761021c565b806370a0823114610465578063715018a6146104955780637ec4a6591461049f5780638da5cb5b146104bb5761021c565b80633ccfd60b116101a8578063518302271161017757806351830227146103bd5780635503a0e8146103db5780635c975abb146103f957806362b99ad4146104175780636352211e146104355761021c565b80633ccfd60b1461034b57806342842e0e14610355578063438b6300146103715780634fdd43cb146103a15761021c565b8063095ea7b3116101ef578063095ea7b3146102bd57806316ba10e0146102d957806316c38b3c146102f557806318160ddd1461031157806323b872dd1461032f5761021c565b806301ffc9a714610221578063055bb64c1461025157806306fdde031461026f578063081812fc1461028d575b600080fd5b61023b60048036038101906102369190612995565b610691565b60405161024891906129dd565b60405180910390f35b610259610773565b6040516102669190612a39565b60405180910390f35b610277610799565b6040516102849190612ae4565b60405180910390f35b6102a760048036038101906102a29190612b3c565b61082b565b6040516102b49190612a39565b60405180910390f35b6102d760048036038101906102d29190612b95565b6108b0565b005b6102f360048036038101906102ee9190612d0a565b6109c7565b005b61030f600480360381019061030a9190612d7f565b610a56565b005b610319610aef565b6040516103269190612dbb565b60405180910390f35b61034960048036038101906103449190612dd6565b610b00565b005b610353610b60565b005b61036f600480360381019061036a9190612dd6565b610c5c565b005b61038b60048036038101906103869190612e29565b610c7c565b6040516103989190612f14565b60405180910390f35b6103bb60048036038101906103b69190612d0a565b610d86565b005b6103c5610e15565b6040516103d291906129dd565b60405180910390f35b6103e3610e28565b6040516103f09190612ae4565b60405180910390f35b610401610eb6565b60405161040e91906129dd565b60405180910390f35b61041f610ec9565b60405161042c9190612ae4565b60405180910390f35b61044f600480360381019061044a9190612b3c565b610f57565b60405161045c9190612a39565b60405180910390f35b61047f600480360381019061047a9190612e29565b611008565b60405161048c9190612dbb565b60405180910390f35b61049d6110bf565b005b6104b960048036038101906104b49190612d0a565b611147565b005b6104c36111d6565b6040516104d09190612a39565b60405180910390f35b6104e1611200565b6040516104ee9190612dbb565b60405180910390f35b6104ff611206565b60405161050c9190612ae4565b60405180910390f35b61052f600480360381019061052a9190612b3c565b611298565b005b61054b60048036038101906105469190612f36565b61148c565b005b6105556114a2565b6040516105629190612ae4565b60405180910390f35b61058560048036038101906105809190612b3c565b611530565b005b6105a1600480360381019061059c9190613017565b6115b6565b005b6105bd60048036038101906105b89190612b3c565b611618565b6040516105ca9190612ae4565b60405180910390f35b6105db611770565b6040516105e89190612dbb565b60405180910390f35b61060b60048036038101906106069190612d7f565b611776565b005b6106276004803603810190610622919061309a565b61180f565b60405161063491906129dd565b60405180910390f35b61065760048036038101906106529190612e29565b6118a3565b005b610673600480360381019061066e91906130da565b611963565b005b61068f600480360381019061068a9190612e29565b611a99565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061075c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061076c575061076b82611b90565b5b9050919050565b600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600080546107a890613149565b80601f01602080910402602001604051908101604052809291908181526020018280546107d490613149565b80156108215780601f106107f657610100808354040283529160200191610821565b820191906000526020600020905b81548152906001019060200180831161080457829003601f168201915b5050505050905090565b600061083682611bfa565b610875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086c906131ec565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108bb82610f57565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361092b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109229061327e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661094a611c66565b73ffffffffffffffffffffffffffffffffffffffff161480610979575061097881610973611c66565b61180f565b5b6109b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109af90613310565b60405180910390fd5b6109c28383611c6e565b505050565b6109cf611c66565b73ffffffffffffffffffffffffffffffffffffffff166109ed6111d6565b73ffffffffffffffffffffffffffffffffffffffff1614610a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3a9061337c565b60405180910390fd5b8060099081610a529190613548565b5050565b610a5e611c66565b73ffffffffffffffffffffffffffffffffffffffff16610a7c6111d6565b73ffffffffffffffffffffffffffffffffffffffff1614610ad2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac99061337c565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b6000610afb6007611d27565b905090565b610b11610b0b611c66565b82611d35565b610b50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b479061368c565b60405180910390fd5b610b5b838383611e13565b505050565b610b68611c66565b73ffffffffffffffffffffffffffffffffffffffff16610b866111d6565b73ffffffffffffffffffffffffffffffffffffffff1614610bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd39061337c565b60405180910390fd5b6000610be66111d6565b73ffffffffffffffffffffffffffffffffffffffff1647604051610c09906136dd565b60006040518083038185875af1925050503d8060008114610c46576040519150601f19603f3d011682016040523d82523d6000602084013e610c4b565b606091505b5050905080610c5957600080fd5b50565b610c77838383604051806020016040528060008152506115b6565b505050565b60606000610c8983611008565b905060008167ffffffffffffffff811115610ca757610ca6612bdf565b5b604051908082528060200260200182016040528015610cd55781602001602082028036833780820191505090505b50905060006001905060005b8381108015610cf25750600b548211155b15610d7a576000610d0283610f57565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d665782848381518110610d4b57610d4a6136f2565b5b6020026020010181815250508180610d6290613750565b9250505b8280610d7190613750565b93505050610ce1565b82945050505050919050565b610d8e611c66565b73ffffffffffffffffffffffffffffffffffffffff16610dac6111d6565b73ffffffffffffffffffffffffffffffffffffffff1614610e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df99061337c565b60405180910390fd5b80600a9081610e119190613548565b5050565b600d60019054906101000a900460ff1681565b60098054610e3590613149565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6190613149565b8015610eae5780601f10610e8357610100808354040283529160200191610eae565b820191906000526020600020905b815481529060010190602001808311610e9157829003601f168201915b505050505081565b600d60009054906101000a900460ff1681565b60088054610ed690613149565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0290613149565b8015610f4f5780601f10610f2457610100808354040283529160200191610f4f565b820191906000526020600020905b815481529060010190602001808311610f3257829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610fff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff69061380a565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106f9061389c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110c7611c66565b73ffffffffffffffffffffffffffffffffffffffff166110e56111d6565b73ffffffffffffffffffffffffffffffffffffffff161461113b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111329061337c565b60405180910390fd5b611145600061206e565b565b61114f611c66565b73ffffffffffffffffffffffffffffffffffffffff1661116d6111d6565b73ffffffffffffffffffffffffffffffffffffffff16146111c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ba9061337c565b60405180910390fd5b80600890816111d29190613548565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600c5481565b60606001805461121590613149565b80601f016020809104026020016040519081016040528092919081815260200182805461124190613149565b801561128e5780601f106112635761010080835404028352916020019161128e565b820191906000526020600020905b81548152906001019060200180831161127157829003601f168201915b5050505050905090565b806000811180156112ab5750600c548111155b6112ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e190613908565b60405180910390fd5b600b54816112f86007611d27565b6113029190613928565b1115611343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133a906139a8565b60405180910390fd5b600d60009054906101000a900460ff1615611393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138a90613a3a565b60405180910390fd5b6000600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016113f59190612a39565b602060405180830381865afa158015611412573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114369190613a6f565b9050600181101561147c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147390613ae8565b60405180910390fd5b6114863385612134565b50505050565b61149e611497611c66565b8383612174565b5050565b600a80546114af90613149565b80601f01602080910402602001604051908101604052809291908181526020018280546114db90613149565b80156115285780601f106114fd57610100808354040283529160200191611528565b820191906000526020600020905b81548152906001019060200180831161150b57829003601f168201915b505050505081565b611538611c66565b73ffffffffffffffffffffffffffffffffffffffff166115566111d6565b73ffffffffffffffffffffffffffffffffffffffff16146115ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a39061337c565b60405180910390fd5b80600c8190555050565b6115c76115c1611c66565b83611d35565b611606576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fd9061368c565b60405180910390fd5b611612848484846122e0565b50505050565b606061162382611bfa565b611662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165990613b7a565b60405180910390fd5b60001515600d60019054906101000a900460ff1615150361170f57600a805461168a90613149565b80601f01602080910402602001604051908101604052809291908181526020018280546116b690613149565b80156117035780601f106116d857610100808354040283529160200191611703565b820191906000526020600020905b8154815290600101906020018083116116e657829003601f168201915b5050505050905061176b565b600061171961233c565b905060008151116117395760405180602001604052806000815250611767565b80611743846123ce565b600960405160200161175793929190613c59565b6040516020818303038152906040525b9150505b919050565b600b5481565b61177e611c66565b73ffffffffffffffffffffffffffffffffffffffff1661179c6111d6565b73ffffffffffffffffffffffffffffffffffffffff16146117f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e99061337c565b60405180910390fd5b80600d60016101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6118ab611c66565b73ffffffffffffffffffffffffffffffffffffffff166118c96111d6565b73ffffffffffffffffffffffffffffffffffffffff161461191f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119169061337c565b60405180910390fd5b80600d60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b816000811180156119765750600c548111155b6119b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ac90613908565b60405180910390fd5b600b54816119c36007611d27565b6119cd9190613928565b1115611a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a05906139a8565b60405180910390fd5b611a16611c66565b73ffffffffffffffffffffffffffffffffffffffff16611a346111d6565b73ffffffffffffffffffffffffffffffffffffffff1614611a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a819061337c565b60405180910390fd5b611a948284612134565b505050565b611aa1611c66565b73ffffffffffffffffffffffffffffffffffffffff16611abf6111d6565b73ffffffffffffffffffffffffffffffffffffffff1614611b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0c9061337c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7b90613cfc565b60405180910390fd5b611b8d8161206e565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611ce183610f57565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6000611d4082611bfa565b611d7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7690613d8e565b60405180910390fd5b6000611d8a83610f57565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611df957508373ffffffffffffffffffffffffffffffffffffffff16611de18461082b565b73ffffffffffffffffffffffffffffffffffffffff16145b80611e0a5750611e09818561180f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611e3382610f57565b73ffffffffffffffffffffffffffffffffffffffff1614611e89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8090613e20565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eef90613eb2565b60405180910390fd5b611f0383838361252e565b611f0e600082611c6e565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f5e9190613ed2565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fb59190613928565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b8181101561216f576121496007612533565b61215c836121576007611d27565b612549565b808061216790613750565b915050612137565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d990613f52565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516122d391906129dd565b60405180910390a3505050565b6122eb848484611e13565b6122f784848484612567565b612336576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232d90613fe4565b60405180910390fd5b50505050565b60606008805461234b90613149565b80601f016020809104026020016040519081016040528092919081815260200182805461237790613149565b80156123c45780601f10612399576101008083540402835291602001916123c4565b820191906000526020600020905b8154815290600101906020018083116123a757829003601f168201915b5050505050905090565b606060008203612415576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612529565b600082905060005b6000821461244757808061243090613750565b915050600a826124409190614033565b915061241d565b60008167ffffffffffffffff81111561246357612462612bdf565b5b6040519080825280601f01601f1916602001820160405280156124955781602001600182028036833780820191505090505b5090505b60008514612522576001826124ae9190613ed2565b9150600a856124bd9190614064565b60306124c99190613928565b60f81b8183815181106124df576124de6136f2565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561251b9190614033565b9450612499565b8093505050505b919050565b505050565b6001816000016000828254019250508190555050565b6125638282604051806020016040528060008152506126ee565b5050565b60006125888473ffffffffffffffffffffffffffffffffffffffff16612749565b156126e1578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026125b1611c66565b8786866040518563ffffffff1660e01b81526004016125d394939291906140ea565b6020604051808303816000875af192505050801561260f57506040513d601f19601f8201168201806040525081019061260c919061414b565b60015b612691573d806000811461263f576040519150601f19603f3d011682016040523d82523d6000602084013e612644565b606091505b506000815103612689576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268090613fe4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506126e6565b600190505b949350505050565b6126f8838361275c565b6127056000848484612567565b612744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273b90613fe4565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c2906141c4565b60405180910390fd5b6127d481611bfa565b15612814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280b90614230565b60405180910390fd5b6128206000838361252e565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128709190613928565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6129728161293d565b811461297d57600080fd5b50565b60008135905061298f81612969565b92915050565b6000602082840312156129ab576129aa612933565b5b60006129b984828501612980565b91505092915050565b60008115159050919050565b6129d7816129c2565b82525050565b60006020820190506129f260008301846129ce565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a23826129f8565b9050919050565b612a3381612a18565b82525050565b6000602082019050612a4e6000830184612a2a565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a8e578082015181840152602081019050612a73565b60008484015250505050565b6000601f19601f8301169050919050565b6000612ab682612a54565b612ac08185612a5f565b9350612ad0818560208601612a70565b612ad981612a9a565b840191505092915050565b60006020820190508181036000830152612afe8184612aab565b905092915050565b6000819050919050565b612b1981612b06565b8114612b2457600080fd5b50565b600081359050612b3681612b10565b92915050565b600060208284031215612b5257612b51612933565b5b6000612b6084828501612b27565b91505092915050565b612b7281612a18565b8114612b7d57600080fd5b50565b600081359050612b8f81612b69565b92915050565b60008060408385031215612bac57612bab612933565b5b6000612bba85828601612b80565b9250506020612bcb85828601612b27565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612c1782612a9a565b810181811067ffffffffffffffff82111715612c3657612c35612bdf565b5b80604052505050565b6000612c49612929565b9050612c558282612c0e565b919050565b600067ffffffffffffffff821115612c7557612c74612bdf565b5b612c7e82612a9a565b9050602081019050919050565b82818337600083830152505050565b6000612cad612ca884612c5a565b612c3f565b905082815260208101848484011115612cc957612cc8612bda565b5b612cd4848285612c8b565b509392505050565b600082601f830112612cf157612cf0612bd5565b5b8135612d01848260208601612c9a565b91505092915050565b600060208284031215612d2057612d1f612933565b5b600082013567ffffffffffffffff811115612d3e57612d3d612938565b5b612d4a84828501612cdc565b91505092915050565b612d5c816129c2565b8114612d6757600080fd5b50565b600081359050612d7981612d53565b92915050565b600060208284031215612d9557612d94612933565b5b6000612da384828501612d6a565b91505092915050565b612db581612b06565b82525050565b6000602082019050612dd06000830184612dac565b92915050565b600080600060608486031215612def57612dee612933565b5b6000612dfd86828701612b80565b9350506020612e0e86828701612b80565b9250506040612e1f86828701612b27565b9150509250925092565b600060208284031215612e3f57612e3e612933565b5b6000612e4d84828501612b80565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612e8b81612b06565b82525050565b6000612e9d8383612e82565b60208301905092915050565b6000602082019050919050565b6000612ec182612e56565b612ecb8185612e61565b9350612ed683612e72565b8060005b83811015612f07578151612eee8882612e91565b9750612ef983612ea9565b925050600181019050612eda565b5085935050505092915050565b60006020820190508181036000830152612f2e8184612eb6565b905092915050565b60008060408385031215612f4d57612f4c612933565b5b6000612f5b85828601612b80565b9250506020612f6c85828601612d6a565b9150509250929050565b600067ffffffffffffffff821115612f9157612f90612bdf565b5b612f9a82612a9a565b9050602081019050919050565b6000612fba612fb584612f76565b612c3f565b905082815260208101848484011115612fd657612fd5612bda565b5b612fe1848285612c8b565b509392505050565b600082601f830112612ffe57612ffd612bd5565b5b813561300e848260208601612fa7565b91505092915050565b6000806000806080858703121561303157613030612933565b5b600061303f87828801612b80565b945050602061305087828801612b80565b935050604061306187828801612b27565b925050606085013567ffffffffffffffff81111561308257613081612938565b5b61308e87828801612fe9565b91505092959194509250565b600080604083850312156130b1576130b0612933565b5b60006130bf85828601612b80565b92505060206130d085828601612b80565b9150509250929050565b600080604083850312156130f1576130f0612933565b5b60006130ff85828601612b27565b925050602061311085828601612b80565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061316157607f821691505b6020821081036131745761317361311a565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006131d6602c83612a5f565b91506131e18261317a565b604082019050919050565b60006020820190508181036000830152613205816131c9565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613268602183612a5f565b91506132738261320c565b604082019050919050565b600060208201905081810360008301526132978161325b565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b60006132fa603883612a5f565b91506133058261329e565b604082019050919050565b60006020820190508181036000830152613329816132ed565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613366602083612a5f565b915061337182613330565b602082019050919050565b6000602082019050818103600083015261339581613359565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026133fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826133c1565b61340886836133c1565b95508019841693508086168417925050509392505050565b6000819050919050565b600061344561344061343b84612b06565b613420565b612b06565b9050919050565b6000819050919050565b61345f8361342a565b61347361346b8261344c565b8484546133ce565b825550505050565b600090565b61348861347b565b613493818484613456565b505050565b5b818110156134b7576134ac600082613480565b600181019050613499565b5050565b601f8211156134fc576134cd8161339c565b6134d6846133b1565b810160208510156134e5578190505b6134f96134f1856133b1565b830182613498565b50505b505050565b600082821c905092915050565b600061351f60001984600802613501565b1980831691505092915050565b6000613538838361350e565b9150826002028217905092915050565b61355182612a54565b67ffffffffffffffff81111561356a57613569612bdf565b5b6135748254613149565b61357f8282856134bb565b600060209050601f8311600181146135b257600084156135a0578287015190505b6135aa858261352c565b865550613612565b601f1984166135c08661339c565b60005b828110156135e8578489015182556001820191506020850194506020810190506135c3565b868310156136055784890151613601601f89168261350e565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613676603183612a5f565b91506136818261361a565b604082019050919050565b600060208201905081810360008301526136a581613669565b9050919050565b600081905092915050565b50565b60006136c76000836136ac565b91506136d2826136b7565b600082019050919050565b60006136e8826136ba565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061375b82612b06565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361378d5761378c613721565b5b600182019050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006137f4602983612a5f565b91506137ff82613798565b604082019050919050565b60006020820190508181036000830152613823816137e7565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613886602a83612a5f565b91506138918261382a565b604082019050919050565b600060208201905081810360008301526138b581613879565b9050919050565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b60006138f2601483612a5f565b91506138fd826138bc565b602082019050919050565b60006020820190508181036000830152613921816138e5565b9050919050565b600061393382612b06565b915061393e83612b06565b925082820190508082111561395657613955613721565b5b92915050565b7f546f6f204d756368204d616e20546f6f204d7563682100000000000000000000600082015250565b6000613992601683612a5f565b915061399d8261395c565b602082019050919050565b600060208201905081810360008301526139c181613985565b9050919050565b7f57697a617264206172652073776565707070696e67207269676874206e61777760008201527f2100000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a24602183612a5f565b9150613a2f826139c8565b604082019050919050565b60006020820190508181036000830152613a5381613a17565b9050919050565b600081519050613a6981612b10565b92915050565b600060208284031215613a8557613a84612933565b5b6000613a9384828501613a5a565b91505092915050565b7f48657920576865726520617265207975722047756262203f0000000000000000600082015250565b6000613ad2601883612a5f565b9150613add82613a9c565b602082019050919050565b60006020820190508181036000830152613b0181613ac5565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613b64602f83612a5f565b9150613b6f82613b08565b604082019050919050565b60006020820190508181036000830152613b9381613b57565b9050919050565b600081905092915050565b6000613bb082612a54565b613bba8185613b9a565b9350613bca818560208601612a70565b80840191505092915050565b60008154613be381613149565b613bed8186613b9a565b94506001821660008114613c085760018114613c1d57613c50565b60ff1983168652811515820286019350613c50565b613c268561339c565b60005b83811015613c4857815481890152600182019150602081019050613c29565b838801955050505b50505092915050565b6000613c658286613ba5565b9150613c718285613ba5565b9150613c7d8284613bd6565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613ce6602683612a5f565b9150613cf182613c8a565b604082019050919050565b60006020820190508181036000830152613d1581613cd9565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613d78602c83612a5f565b9150613d8382613d1c565b604082019050919050565b60006020820190508181036000830152613da781613d6b565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000613e0a602983612a5f565b9150613e1582613dae565b604082019050919050565b60006020820190508181036000830152613e3981613dfd565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613e9c602483612a5f565b9150613ea782613e40565b604082019050919050565b60006020820190508181036000830152613ecb81613e8f565b9050919050565b6000613edd82612b06565b9150613ee883612b06565b9250828203905081811115613f0057613eff613721565b5b92915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613f3c601983612a5f565b9150613f4782613f06565b602082019050919050565b60006020820190508181036000830152613f6b81613f2f565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613fce603283612a5f565b9150613fd982613f72565b604082019050919050565b60006020820190508181036000830152613ffd81613fc1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061403e82612b06565b915061404983612b06565b92508261405957614058614004565b5b828204905092915050565b600061406f82612b06565b915061407a83612b06565b92508261408a57614089614004565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006140bc82614095565b6140c681856140a0565b93506140d6818560208601612a70565b6140df81612a9a565b840191505092915050565b60006080820190506140ff6000830187612a2a565b61410c6020830186612a2a565b6141196040830185612dac565b818103606083015261412b81846140b1565b905095945050505050565b60008151905061414581612969565b92915050565b60006020828403121561416157614160612933565b5b600061416f84828501614136565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006141ae602083612a5f565b91506141b982614178565b602082019050919050565b600060208201905081810360008301526141dd816141a1565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061421a601c83612a5f565b9150614225826141e4565b602082019050919050565b600060208201905081810360008301526142498161420d565b905091905056fea2646970667358221220bae2532ae7371f42c937b6df2b06785c3a4c5f856530ed72932abd1d6e8c4d5d64736f6c63430008110033
Deployed ByteCode Sourcemap
37756:4209:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25240:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38248:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26185:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27744:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27267:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40991:100;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41097:77;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38675:89;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28494:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41180:462;;;:::i;:::-;;28904:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39277:635;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40747:132;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38214:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38026:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38184:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37912:109;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25879:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25609:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6228:103;;;:::i;:::-;;40885:100;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5577:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38140:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26354:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38770:338;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28037:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38064:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40611:130;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29160:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39918:494;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38104:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40524:81;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28263:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40418:100;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39116:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6486:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25240:305;25342:4;25394:25;25379:40;;;:11;:40;;;;:105;;;;25451:33;25436:48;;;:11;:48;;;;25379:105;:158;;;;25501:36;25525:11;25501:23;:36::i;:::-;25379:158;25359:178;;25240:305;;;:::o;38248:26::-;;;;;;;;;;;;;:::o;26185:100::-;26239:13;26272:5;26265:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26185:100;:::o;27744:221::-;27820:7;27848:16;27856:7;27848;:16::i;:::-;27840:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27933:15;:24;27949:7;27933:24;;;;;;;;;;;;;;;;;;;;;27926:31;;27744:221;;;:::o;27267:411::-;27348:13;27364:23;27379:7;27364:14;:23::i;:::-;27348:39;;27412:5;27406:11;;:2;:11;;;27398:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27506:5;27490:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27515:37;27532:5;27539:12;:10;:12::i;:::-;27515:16;:37::i;:::-;27490:62;27468:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27649:21;27658:2;27662:7;27649:8;:21::i;:::-;27337:341;27267:411;;:::o;40991:100::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41075:10:::1;41063:9;:22;;;;;;:::i;:::-;;40991:100:::0;:::o;41097:77::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41162:6:::1;41153;;:15;;;;;;;;;;;;;;;;;;41097:77:::0;:::o;38675:89::-;38719:7;38742:16;:6;:14;:16::i;:::-;38735:23;;38675:89;:::o;28494:339::-;28689:41;28708:12;:10;:12::i;:::-;28722:7;28689:18;:41::i;:::-;28681:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28797:28;28807:4;28813:2;28817:7;28797:9;:28::i;:::-;28494:339;;;:::o;41180:462::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41464:7:::1;41485;:5;:7::i;:::-;41477:21;;41506;41477:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41463:69;;;41547:2;41539:11;;;::::0;::::1;;41217:425;41180:462::o:0;28904:185::-;29042:39;29059:4;29065:2;29069:7;29042:39;;;;;;;;;;;;:16;:39::i;:::-;28904:185;;;:::o;39277:635::-;39352:16;39380:23;39406:17;39416:6;39406:9;:17::i;:::-;39380:43;;39430:30;39477:15;39463:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39430:63;;39500:22;39525:1;39500:26;;39533:23;39569:309;39594:15;39576;:33;:64;;;;;39631:9;;39613:14;:27;;39576:64;39569:309;;;39651:25;39679:23;39687:14;39679:7;:23::i;:::-;39651:51;;39738:6;39717:27;;:17;:27;;;39713:131;;39790:14;39757:13;39771:15;39757:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;39817:17;;;;;:::i;:::-;;;;39713:131;39854:16;;;;;:::i;:::-;;;;39642:236;39569:309;;;39893:13;39886:20;;;;;;39277:635;;;:::o;40747:132::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40855:18:::1;40835:17;:38;;;;;;:::i;:::-;;40747:132:::0;:::o;38214:27::-;;;;;;;;;;;;;:::o;38026:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38184:25::-;;;;;;;;;;;;;:::o;37912:109::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25879:239::-;25951:7;25971:13;25987:7;:16;25995:7;25987:16;;;;;;;;;;;;;;;;;;;;;25971:32;;26039:1;26022:19;;:5;:19;;;26014:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26105:5;26098:12;;;25879:239;;;:::o;25609:208::-;25681:7;25726:1;25709:19;;:5;:19;;;25701:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25793:9;:16;25803:5;25793:16;;;;;;;;;;;;;;;;25786:23;;25609:208;;;:::o;6228:103::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6293:30:::1;6320:1;6293:18;:30::i;:::-;6228:103::o:0;40885:100::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40969:10:::1;40957:9;:22;;;;;;:::i;:::-;;40885:100:::0;:::o;5577:87::-;5623:7;5650:6;;;;;;;;;;;5643:13;;5577:87;:::o;38140:37::-;;;;:::o;26354:104::-;26410:13;26443:7;26436:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26354:104;:::o;38770:338::-;38827:11;38507:1;38493:11;:15;:52;;;;;38527:18;;38512:11;:33;;38493:52;38485:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;38619:9;;38604:11;38585:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;38577:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;38856:6:::1;;;;;;;;;;;38855:7;38847:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;38907:13;38931:11;;;;;;;;;;;38907:36;;38950:19;38972:5;:15;;;38988:10;38972:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38950:49;;39029:1;39014:11;:16;;39006:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;39068:34;39078:10;39090:11;39068:9;:34::i;:::-;38840:268;;38770:338:::0;;:::o;28037:155::-;28132:52;28151:12;:10;:12::i;:::-;28165:8;28175;28132:18;:52::i;:::-;28037:155;;:::o;38064:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40611:130::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40716:19:::1;40695:18;:40;;;;40611:130:::0;:::o;29160:328::-;29335:41;29354:12;:10;:12::i;:::-;29368:7;29335:18;:41::i;:::-;29327:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29441:39;29455:4;29461:2;29465:7;29474:5;29441:13;:39::i;:::-;29160:328;;;;:::o;39918:494::-;40017:13;40058:17;40066:8;40058:7;:17::i;:::-;40042:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;40165:5;40153:17;;:8;;;;;;;;;;;:17;;;40149:64;;40188:17;40181:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40149:64;40221:28;40252:10;:8;:10::i;:::-;40221:41;;40307:1;40282:14;40276:28;:32;:130;;;;;;;;;;;;;;;;;40344:14;40360:19;:8;:17;:19::i;:::-;40381:9;40327:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40276:130;40269:137;;;39918:494;;;;:::o;38104:31::-;;;;:::o;40524:81::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40593:6:::1;40582:8;;:17;;;;;;;;;;;;;;;;;;40524:81:::0;:::o;28263:164::-;28360:4;28384:18;:25;28403:5;28384:25;;;;;;;;;;;;;;;:35;28410:8;28384:35;;;;;;;;;;;;;;;;;;;;;;;;;28377:42;;28263:164;;;;:::o;40418:100::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40501:11:::1;40487;;:25;;;;;;;;;;;;;;;;;;40418:100:::0;:::o;39116:155::-;39202:11;38507:1;38493:11;:15;:52;;;;;38527:18;;38512:11;:33;;38493:52;38485:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;38619:9;;38604:11;38585:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;38577:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;5808:12:::1;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39232:33:::2;39242:9;39253:11;39232:9;:33::i;:::-;39116:155:::0;;;:::o;6486:201::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6595:1:::1;6575:22;;:8;:22;;::::0;6567:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;6651:28;6670:8;6651:18;:28::i;:::-;6486:201:::0;:::o;18009:157::-;18094:4;18133:25;18118:40;;;:11;:40;;;;18111:47;;18009:157;;;:::o;30998:127::-;31063:4;31115:1;31087:30;;:7;:16;31095:7;31087:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31080:37;;30998:127;;;:::o;4301:98::-;4354:7;4381:10;4374:17;;4301:98;:::o;34980:174::-;35082:2;35055:15;:24;35071:7;35055:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35138:7;35134:2;35100:46;;35109:23;35124:7;35109:14;:23::i;:::-;35100:46;;;;;;;;;;;;34980:174;;:::o;905:114::-;970:7;997;:14;;;990:21;;905:114;;;:::o;31292:348::-;31385:4;31410:16;31418:7;31410;:16::i;:::-;31402:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31486:13;31502:23;31517:7;31502:14;:23::i;:::-;31486:39;;31555:5;31544:16;;:7;:16;;;:51;;;;31588:7;31564:31;;:20;31576:7;31564:11;:20::i;:::-;:31;;;31544:51;:87;;;;31599:32;31616:5;31623:7;31599:16;:32::i;:::-;31544:87;31536:96;;;31292:348;;;;:::o;34284:578::-;34443:4;34416:31;;:23;34431:7;34416:14;:23::i;:::-;:31;;;34408:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34526:1;34512:16;;:2;:16;;;34504:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34582:39;34603:4;34609:2;34613:7;34582:20;:39::i;:::-;34686:29;34703:1;34707:7;34686:8;:29::i;:::-;34747:1;34728:9;:15;34738:4;34728:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34776:1;34759:9;:13;34769:2;34759:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34807:2;34788:7;:16;34796:7;34788:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34846:7;34842:2;34827:27;;34836:4;34827:27;;;;;;;;;;;;34284:578;;;:::o;6847:191::-;6921:16;6940:6;;;;;;;;;;;6921:25;;6966:8;6957:6;;:17;;;;;;;;;;;;;;;;;;7021:8;6990:40;;7011:8;6990:40;;;;;;;;;;;;6910:128;6847:191;:::o;41648:204::-;41728:9;41723:124;41747:11;41743:1;:15;41723:124;;;41774:18;:6;:16;:18::i;:::-;41801:38;41811:9;41822:16;:6;:14;:16::i;:::-;41801:9;:38::i;:::-;41760:3;;;;;:::i;:::-;;;;41723:124;;;;41648:204;;:::o;35296:315::-;35451:8;35442:17;;:5;:17;;;35434:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35538:8;35500:18;:25;35519:5;35500:25;;;;;;;;;;;;;;;:35;35526:8;35500:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35584:8;35562:41;;35577:5;35562:41;;;35594:8;35562:41;;;;;;:::i;:::-;;;;;;;;35296:315;;;:::o;30370:::-;30527:28;30537:4;30543:2;30547:7;30527:9;:28::i;:::-;30574:48;30597:4;30603:2;30607:7;30616:5;30574:22;:48::i;:::-;30566:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30370:315;;;;:::o;41858:104::-;41918:13;41947:9;41940:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41858:104;:::o;1863:723::-;1919:13;2149:1;2140:5;:10;2136:53;;2167:10;;;;;;;;;;;;;;;;;;;;;2136:53;2199:12;2214:5;2199:20;;2230:14;2255:78;2270:1;2262:4;:9;2255:78;;2288:8;;;;;:::i;:::-;;;;2319:2;2311:10;;;;;:::i;:::-;;;2255:78;;;2343:19;2375:6;2365:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2343:39;;2393:154;2409:1;2400:5;:10;2393:154;;2437:1;2427:11;;;;;:::i;:::-;;;2504:2;2496:5;:10;;;;:::i;:::-;2483:2;:24;;;;:::i;:::-;2470:39;;2453:6;2460;2453:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2533:2;2524:11;;;;;:::i;:::-;;;2393:154;;;2571:6;2557:21;;;;;1863:723;;;;:::o;37547:126::-;;;;:::o;1027:127::-;1134:1;1116:7;:14;;;:19;;;;;;;;;;;1027:127;:::o;31982:110::-;32058:26;32068:2;32072:7;32058:26;;;;;;;;;;;;:9;:26::i;:::-;31982:110;;:::o;36176:799::-;36331:4;36352:15;:2;:13;;;:15::i;:::-;36348:620;;;36404:2;36388:36;;;36425:12;:10;:12::i;:::-;36439:4;36445:7;36454:5;36388:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36384:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36647:1;36630:6;:13;:18;36626:272;;36673:60;;;;;;;;;;:::i;:::-;;;;;;;;36626:272;36848:6;36842:13;36833:6;36829:2;36825:15;36818:38;36384:529;36521:41;;;36511:51;;;:6;:51;;;;36504:58;;;;;36348:620;36952:4;36945:11;;36176:799;;;;;;;:::o;32319:321::-;32449:18;32455:2;32459:7;32449:5;:18::i;:::-;32500:54;32531:1;32535:2;32539:7;32548:5;32500:22;:54::i;:::-;32478:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32319:321;;;:::o;7865:387::-;7925:4;8133:12;8200:7;8188:20;8180:28;;8243:1;8236:4;:8;8229:15;;;7865:387;;;:::o;32976:382::-;33070:1;33056:16;;:2;:16;;;33048:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33129:16;33137:7;33129;:16::i;:::-;33128:17;33120:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33191:45;33220:1;33224:2;33228:7;33191:20;:45::i;:::-;33266:1;33249:9;:13;33259:2;33249:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33297:2;33278:7;:16;33286:7;33278:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33342:7;33338:2;33317:33;;33334:1;33317:33;;;;;;;;;;;;32976:382;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:126::-;1555:7;1595:42;1588:5;1584:54;1573:65;;1518:126;;;:::o;1650:96::-;1687:7;1716:24;1734:5;1716:24;:::i;:::-;1705:35;;1650:96;;;:::o;1752:118::-;1839:24;1857:5;1839:24;:::i;:::-;1834:3;1827:37;1752:118;;:::o;1876:222::-;1969:4;2007:2;1996:9;1992:18;1984:26;;2020:71;2088:1;2077:9;2073:17;2064:6;2020:71;:::i;:::-;1876:222;;;;:::o;2104:99::-;2156:6;2190:5;2184:12;2174:22;;2104:99;;;:::o;2209:169::-;2293:11;2327:6;2322:3;2315:19;2367:4;2362:3;2358:14;2343:29;;2209:169;;;;:::o;2384:246::-;2465:1;2475:113;2489:6;2486:1;2483:13;2475:113;;;2574:1;2569:3;2565:11;2559:18;2555:1;2550:3;2546:11;2539:39;2511:2;2508:1;2504:10;2499:15;;2475:113;;;2622:1;2613:6;2608:3;2604:16;2597:27;2446:184;2384:246;;;:::o;2636:102::-;2677:6;2728:2;2724:7;2719:2;2712:5;2708:14;2704:28;2694:38;;2636:102;;;:::o;2744:377::-;2832:3;2860:39;2893:5;2860:39;:::i;:::-;2915:71;2979:6;2974:3;2915:71;:::i;:::-;2908:78;;2995:65;3053:6;3048:3;3041:4;3034:5;3030:16;2995:65;:::i;:::-;3085:29;3107:6;3085:29;:::i;:::-;3080:3;3076:39;3069:46;;2836:285;2744:377;;;;:::o;3127:313::-;3240:4;3278:2;3267:9;3263:18;3255:26;;3327:9;3321:4;3317:20;3313:1;3302:9;3298:17;3291:47;3355:78;3428:4;3419:6;3355:78;:::i;:::-;3347:86;;3127:313;;;;:::o;3446:77::-;3483:7;3512:5;3501:16;;3446:77;;;:::o;3529:122::-;3602:24;3620:5;3602:24;:::i;:::-;3595:5;3592:35;3582:63;;3641:1;3638;3631:12;3582:63;3529:122;:::o;3657:139::-;3703:5;3741:6;3728:20;3719:29;;3757:33;3784:5;3757:33;:::i;:::-;3657:139;;;;:::o;3802:329::-;3861:6;3910:2;3898:9;3889:7;3885:23;3881:32;3878:119;;;3916:79;;:::i;:::-;3878:119;4036:1;4061:53;4106:7;4097:6;4086:9;4082:22;4061:53;:::i;:::-;4051:63;;4007:117;3802:329;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:117::-;4999:1;4996;4989:12;5013:117;5122:1;5119;5112:12;5136:180;5184:77;5181:1;5174:88;5281:4;5278:1;5271:15;5305:4;5302:1;5295:15;5322:281;5405:27;5427:4;5405:27;:::i;:::-;5397:6;5393:40;5535:6;5523:10;5520:22;5499:18;5487:10;5484:34;5481:62;5478:88;;;5546:18;;:::i;:::-;5478:88;5586:10;5582:2;5575:22;5365:238;5322:281;;:::o;5609:129::-;5643:6;5670:20;;:::i;:::-;5660:30;;5699:33;5727:4;5719:6;5699:33;:::i;:::-;5609:129;;;:::o;5744:308::-;5806:4;5896:18;5888:6;5885:30;5882:56;;;5918:18;;:::i;:::-;5882:56;5956:29;5978:6;5956:29;:::i;:::-;5948:37;;6040:4;6034;6030:15;6022:23;;5744:308;;;:::o;6058:146::-;6155:6;6150:3;6145;6132:30;6196:1;6187:6;6182:3;6178:16;6171:27;6058:146;;;:::o;6210:425::-;6288:5;6313:66;6329:49;6371:6;6329:49;:::i;:::-;6313:66;:::i;:::-;6304:75;;6402:6;6395:5;6388:21;6440:4;6433:5;6429:16;6478:3;6469:6;6464:3;6460:16;6457:25;6454:112;;;6485:79;;:::i;:::-;6454:112;6575:54;6622:6;6617:3;6612;6575:54;:::i;:::-;6294:341;6210:425;;;;;:::o;6655:340::-;6711:5;6760:3;6753:4;6745:6;6741:17;6737:27;6727:122;;6768:79;;:::i;:::-;6727:122;6885:6;6872:20;6910:79;6985:3;6977:6;6970:4;6962:6;6958:17;6910:79;:::i;:::-;6901:88;;6717:278;6655:340;;;;:::o;7001:509::-;7070:6;7119:2;7107:9;7098:7;7094:23;7090:32;7087:119;;;7125:79;;:::i;:::-;7087:119;7273:1;7262:9;7258:17;7245:31;7303:18;7295:6;7292:30;7289:117;;;7325:79;;:::i;:::-;7289:117;7430:63;7485:7;7476:6;7465:9;7461:22;7430:63;:::i;:::-;7420:73;;7216:287;7001:509;;;;:::o;7516:116::-;7586:21;7601:5;7586:21;:::i;:::-;7579:5;7576:32;7566:60;;7622:1;7619;7612:12;7566:60;7516:116;:::o;7638:133::-;7681:5;7719:6;7706:20;7697:29;;7735:30;7759:5;7735:30;:::i;:::-;7638:133;;;;:::o;7777:323::-;7833:6;7882:2;7870:9;7861:7;7857:23;7853:32;7850:119;;;7888:79;;:::i;:::-;7850:119;8008:1;8033:50;8075:7;8066:6;8055:9;8051:22;8033:50;:::i;:::-;8023:60;;7979:114;7777:323;;;;:::o;8106:118::-;8193:24;8211:5;8193:24;:::i;:::-;8188:3;8181:37;8106:118;;:::o;8230:222::-;8323:4;8361:2;8350:9;8346:18;8338:26;;8374:71;8442:1;8431:9;8427:17;8418:6;8374:71;:::i;:::-;8230:222;;;;:::o;8458:619::-;8535:6;8543;8551;8600:2;8588:9;8579:7;8575:23;8571:32;8568:119;;;8606:79;;:::i;:::-;8568:119;8726:1;8751:53;8796:7;8787:6;8776:9;8772:22;8751:53;:::i;:::-;8741:63;;8697:117;8853:2;8879:53;8924:7;8915:6;8904:9;8900:22;8879:53;:::i;:::-;8869:63;;8824:118;8981:2;9007:53;9052:7;9043:6;9032:9;9028:22;9007:53;:::i;:::-;8997:63;;8952:118;8458:619;;;;;:::o;9083:329::-;9142:6;9191:2;9179:9;9170:7;9166:23;9162:32;9159:119;;;9197:79;;:::i;:::-;9159:119;9317:1;9342:53;9387:7;9378:6;9367:9;9363:22;9342:53;:::i;:::-;9332:63;;9288:117;9083:329;;;;:::o;9418:114::-;9485:6;9519:5;9513:12;9503:22;;9418:114;;;:::o;9538:184::-;9637:11;9671:6;9666:3;9659:19;9711:4;9706:3;9702:14;9687:29;;9538:184;;;;:::o;9728:132::-;9795:4;9818:3;9810:11;;9848:4;9843:3;9839:14;9831:22;;9728:132;;;:::o;9866:108::-;9943:24;9961:5;9943:24;:::i;:::-;9938:3;9931:37;9866:108;;:::o;9980:179::-;10049:10;10070:46;10112:3;10104:6;10070:46;:::i;:::-;10148:4;10143:3;10139:14;10125:28;;9980:179;;;;:::o;10165:113::-;10235:4;10267;10262:3;10258:14;10250:22;;10165:113;;;:::o;10314:732::-;10433:3;10462:54;10510:5;10462:54;:::i;:::-;10532:86;10611:6;10606:3;10532:86;:::i;:::-;10525:93;;10642:56;10692:5;10642:56;:::i;:::-;10721:7;10752:1;10737:284;10762:6;10759:1;10756:13;10737:284;;;10838:6;10832:13;10865:63;10924:3;10909:13;10865:63;:::i;:::-;10858:70;;10951:60;11004:6;10951:60;:::i;:::-;10941:70;;10797:224;10784:1;10781;10777:9;10772:14;;10737:284;;;10741:14;11037:3;11030:10;;10438:608;;;10314:732;;;;:::o;11052:373::-;11195:4;11233:2;11222:9;11218:18;11210:26;;11282:9;11276:4;11272:20;11268:1;11257:9;11253:17;11246:47;11310:108;11413:4;11404:6;11310:108;:::i;:::-;11302:116;;11052:373;;;;:::o;11431:468::-;11496:6;11504;11553:2;11541:9;11532:7;11528:23;11524:32;11521:119;;;11559:79;;:::i;:::-;11521:119;11679:1;11704:53;11749:7;11740:6;11729:9;11725:22;11704:53;:::i;:::-;11694:63;;11650:117;11806:2;11832:50;11874:7;11865:6;11854:9;11850:22;11832:50;:::i;:::-;11822:60;;11777:115;11431:468;;;;;:::o;11905:307::-;11966:4;12056:18;12048:6;12045:30;12042:56;;;12078:18;;:::i;:::-;12042:56;12116:29;12138:6;12116:29;:::i;:::-;12108:37;;12200:4;12194;12190:15;12182:23;;11905:307;;;:::o;12218:423::-;12295:5;12320:65;12336:48;12377:6;12336:48;:::i;:::-;12320:65;:::i;:::-;12311:74;;12408:6;12401:5;12394:21;12446:4;12439:5;12435:16;12484:3;12475:6;12470:3;12466:16;12463:25;12460:112;;;12491:79;;:::i;:::-;12460:112;12581:54;12628:6;12623:3;12618;12581:54;:::i;:::-;12301:340;12218:423;;;;;:::o;12660:338::-;12715:5;12764:3;12757:4;12749:6;12745:17;12741:27;12731:122;;12772:79;;:::i;:::-;12731:122;12889:6;12876:20;12914:78;12988:3;12980:6;12973:4;12965:6;12961:17;12914:78;:::i;:::-;12905:87;;12721:277;12660:338;;;;:::o;13004:943::-;13099:6;13107;13115;13123;13172:3;13160:9;13151:7;13147:23;13143:33;13140:120;;;13179:79;;:::i;:::-;13140:120;13299:1;13324:53;13369:7;13360:6;13349:9;13345:22;13324:53;:::i;:::-;13314:63;;13270:117;13426:2;13452:53;13497:7;13488:6;13477:9;13473:22;13452:53;:::i;:::-;13442:63;;13397:118;13554:2;13580:53;13625:7;13616:6;13605:9;13601:22;13580:53;:::i;:::-;13570:63;;13525:118;13710:2;13699:9;13695:18;13682:32;13741:18;13733:6;13730:30;13727:117;;;13763:79;;:::i;:::-;13727:117;13868:62;13922:7;13913:6;13902:9;13898:22;13868:62;:::i;:::-;13858:72;;13653:287;13004:943;;;;;;;:::o;13953:474::-;14021:6;14029;14078:2;14066:9;14057:7;14053:23;14049:32;14046:119;;;14084:79;;:::i;:::-;14046:119;14204:1;14229:53;14274:7;14265:6;14254:9;14250:22;14229:53;:::i;:::-;14219:63;;14175:117;14331:2;14357:53;14402:7;14393:6;14382:9;14378:22;14357:53;:::i;:::-;14347:63;;14302:118;13953:474;;;;;:::o;14433:::-;14501:6;14509;14558:2;14546:9;14537:7;14533:23;14529:32;14526:119;;;14564:79;;:::i;:::-;14526:119;14684:1;14709:53;14754:7;14745:6;14734:9;14730:22;14709:53;:::i;:::-;14699:63;;14655:117;14811:2;14837:53;14882:7;14873:6;14862:9;14858:22;14837:53;:::i;:::-;14827:63;;14782:118;14433:474;;;;;:::o;14913:180::-;14961:77;14958:1;14951:88;15058:4;15055:1;15048:15;15082:4;15079:1;15072:15;15099:320;15143:6;15180:1;15174:4;15170:12;15160:22;;15227:1;15221:4;15217:12;15248:18;15238:81;;15304:4;15296:6;15292:17;15282:27;;15238:81;15366:2;15358:6;15355:14;15335:18;15332:38;15329:84;;15385:18;;:::i;:::-;15329:84;15150:269;15099:320;;;:::o;15425:231::-;15565:34;15561:1;15553:6;15549:14;15542:58;15634:14;15629:2;15621:6;15617:15;15610:39;15425:231;:::o;15662:366::-;15804:3;15825:67;15889:2;15884:3;15825:67;:::i;:::-;15818:74;;15901:93;15990:3;15901:93;:::i;:::-;16019:2;16014:3;16010:12;16003:19;;15662:366;;;:::o;16034:419::-;16200:4;16238:2;16227:9;16223:18;16215:26;;16287:9;16281:4;16277:20;16273:1;16262:9;16258:17;16251:47;16315:131;16441:4;16315:131;:::i;:::-;16307:139;;16034:419;;;:::o;16459:220::-;16599:34;16595:1;16587:6;16583:14;16576:58;16668:3;16663:2;16655:6;16651:15;16644:28;16459:220;:::o;16685:366::-;16827:3;16848:67;16912:2;16907:3;16848:67;:::i;:::-;16841:74;;16924:93;17013:3;16924:93;:::i;:::-;17042:2;17037:3;17033:12;17026:19;;16685:366;;;:::o;17057:419::-;17223:4;17261:2;17250:9;17246:18;17238:26;;17310:9;17304:4;17300:20;17296:1;17285:9;17281:17;17274:47;17338:131;17464:4;17338:131;:::i;:::-;17330:139;;17057:419;;;:::o;17482:243::-;17622:34;17618:1;17610:6;17606:14;17599:58;17691:26;17686:2;17678:6;17674:15;17667:51;17482:243;:::o;17731:366::-;17873:3;17894:67;17958:2;17953:3;17894:67;:::i;:::-;17887:74;;17970:93;18059:3;17970:93;:::i;:::-;18088:2;18083:3;18079:12;18072:19;;17731:366;;;:::o;18103:419::-;18269:4;18307:2;18296:9;18292:18;18284:26;;18356:9;18350:4;18346:20;18342:1;18331:9;18327:17;18320:47;18384:131;18510:4;18384:131;:::i;:::-;18376:139;;18103:419;;;:::o;18528:182::-;18668:34;18664:1;18656:6;18652:14;18645:58;18528:182;:::o;18716:366::-;18858:3;18879:67;18943:2;18938:3;18879:67;:::i;:::-;18872:74;;18955:93;19044:3;18955:93;:::i;:::-;19073:2;19068:3;19064:12;19057:19;;18716:366;;;:::o;19088:419::-;19254:4;19292:2;19281:9;19277:18;19269:26;;19341:9;19335:4;19331:20;19327:1;19316:9;19312:17;19305:47;19369:131;19495:4;19369:131;:::i;:::-;19361:139;;19088:419;;;:::o;19513:141::-;19562:4;19585:3;19577:11;;19608:3;19605:1;19598:14;19642:4;19639:1;19629:18;19621:26;;19513:141;;;:::o;19660:93::-;19697:6;19744:2;19739;19732:5;19728:14;19724:23;19714:33;;19660:93;;;:::o;19759:107::-;19803:8;19853:5;19847:4;19843:16;19822:37;;19759:107;;;;:::o;19872:393::-;19941:6;19991:1;19979:10;19975:18;20014:97;20044:66;20033:9;20014:97;:::i;:::-;20132:39;20162:8;20151:9;20132:39;:::i;:::-;20120:51;;20204:4;20200:9;20193:5;20189:21;20180:30;;20253:4;20243:8;20239:19;20232:5;20229:30;20219:40;;19948:317;;19872:393;;;;;:::o;20271:60::-;20299:3;20320:5;20313:12;;20271:60;;;:::o;20337:142::-;20387:9;20420:53;20438:34;20447:24;20465:5;20447:24;:::i;:::-;20438:34;:::i;:::-;20420:53;:::i;:::-;20407:66;;20337:142;;;:::o;20485:75::-;20528:3;20549:5;20542:12;;20485:75;;;:::o;20566:269::-;20676:39;20707:7;20676:39;:::i;:::-;20737:91;20786:41;20810:16;20786:41;:::i;:::-;20778:6;20771:4;20765:11;20737:91;:::i;:::-;20731:4;20724:105;20642:193;20566:269;;;:::o;20841:73::-;20886:3;20841:73;:::o;20920:189::-;20997:32;;:::i;:::-;21038:65;21096:6;21088;21082:4;21038:65;:::i;:::-;20973:136;20920:189;;:::o;21115:186::-;21175:120;21192:3;21185:5;21182:14;21175:120;;;21246:39;21283:1;21276:5;21246:39;:::i;:::-;21219:1;21212:5;21208:13;21199:22;;21175:120;;;21115:186;;:::o;21307:543::-;21408:2;21403:3;21400:11;21397:446;;;21442:38;21474:5;21442:38;:::i;:::-;21526:29;21544:10;21526:29;:::i;:::-;21516:8;21512:44;21709:2;21697:10;21694:18;21691:49;;;21730:8;21715:23;;21691:49;21753:80;21809:22;21827:3;21809:22;:::i;:::-;21799:8;21795:37;21782:11;21753:80;:::i;:::-;21412:431;;21397:446;21307:543;;;:::o;21856:117::-;21910:8;21960:5;21954:4;21950:16;21929:37;;21856:117;;;;:::o;21979:169::-;22023:6;22056:51;22104:1;22100:6;22092:5;22089:1;22085:13;22056:51;:::i;:::-;22052:56;22137:4;22131;22127:15;22117:25;;22030:118;21979:169;;;;:::o;22153:295::-;22229:4;22375:29;22400:3;22394:4;22375:29;:::i;:::-;22367:37;;22437:3;22434:1;22430:11;22424:4;22421:21;22413:29;;22153:295;;;;:::o;22453:1395::-;22570:37;22603:3;22570:37;:::i;:::-;22672:18;22664:6;22661:30;22658:56;;;22694:18;;:::i;:::-;22658:56;22738:38;22770:4;22764:11;22738:38;:::i;:::-;22823:67;22883:6;22875;22869:4;22823:67;:::i;:::-;22917:1;22941:4;22928:17;;22973:2;22965:6;22962:14;22990:1;22985:618;;;;23647:1;23664:6;23661:77;;;23713:9;23708:3;23704:19;23698:26;23689:35;;23661:77;23764:67;23824:6;23817:5;23764:67;:::i;:::-;23758:4;23751:81;23620:222;22955:887;;22985:618;23037:4;23033:9;23025:6;23021:22;23071:37;23103:4;23071:37;:::i;:::-;23130:1;23144:208;23158:7;23155:1;23152:14;23144:208;;;23237:9;23232:3;23228:19;23222:26;23214:6;23207:42;23288:1;23280:6;23276:14;23266:24;;23335:2;23324:9;23320:18;23307:31;;23181:4;23178:1;23174:12;23169:17;;23144:208;;;23380:6;23371:7;23368:19;23365:179;;;23438:9;23433:3;23429:19;23423:26;23481:48;23523:4;23515:6;23511:17;23500:9;23481:48;:::i;:::-;23473:6;23466:64;23388:156;23365:179;23590:1;23586;23578:6;23574:14;23570:22;23564:4;23557:36;22992:611;;;22955:887;;22545:1303;;;22453:1395;;:::o;23854:236::-;23994:34;23990:1;23982:6;23978:14;23971:58;24063:19;24058:2;24050:6;24046:15;24039:44;23854:236;:::o;24096:366::-;24238:3;24259:67;24323:2;24318:3;24259:67;:::i;:::-;24252:74;;24335:93;24424:3;24335:93;:::i;:::-;24453:2;24448:3;24444:12;24437:19;;24096:366;;;:::o;24468:419::-;24634:4;24672:2;24661:9;24657:18;24649:26;;24721:9;24715:4;24711:20;24707:1;24696:9;24692:17;24685:47;24749:131;24875:4;24749:131;:::i;:::-;24741:139;;24468:419;;;:::o;24893:147::-;24994:11;25031:3;25016:18;;24893:147;;;;:::o;25046:114::-;;:::o;25166:398::-;25325:3;25346:83;25427:1;25422:3;25346:83;:::i;:::-;25339:90;;25438:93;25527:3;25438:93;:::i;:::-;25556:1;25551:3;25547:11;25540:18;;25166:398;;;:::o;25570:379::-;25754:3;25776:147;25919:3;25776:147;:::i;:::-;25769:154;;25940:3;25933:10;;25570:379;;;:::o;25955:180::-;26003:77;26000:1;25993:88;26100:4;26097:1;26090:15;26124:4;26121:1;26114:15;26141:180;26189:77;26186:1;26179:88;26286:4;26283:1;26276:15;26310:4;26307:1;26300:15;26327:233;26366:3;26389:24;26407:5;26389:24;:::i;:::-;26380:33;;26435:66;26428:5;26425:77;26422:103;;26505:18;;:::i;:::-;26422:103;26552:1;26545:5;26541:13;26534:20;;26327:233;;;:::o;26566:228::-;26706:34;26702:1;26694:6;26690:14;26683:58;26775:11;26770:2;26762:6;26758:15;26751:36;26566:228;:::o;26800:366::-;26942:3;26963:67;27027:2;27022:3;26963:67;:::i;:::-;26956:74;;27039:93;27128:3;27039:93;:::i;:::-;27157:2;27152:3;27148:12;27141:19;;26800:366;;;:::o;27172:419::-;27338:4;27376:2;27365:9;27361:18;27353:26;;27425:9;27419:4;27415:20;27411:1;27400:9;27396:17;27389:47;27453:131;27579:4;27453:131;:::i;:::-;27445:139;;27172:419;;;:::o;27597:229::-;27737:34;27733:1;27725:6;27721:14;27714:58;27806:12;27801:2;27793:6;27789:15;27782:37;27597:229;:::o;27832:366::-;27974:3;27995:67;28059:2;28054:3;27995:67;:::i;:::-;27988:74;;28071:93;28160:3;28071:93;:::i;:::-;28189:2;28184:3;28180:12;28173:19;;27832:366;;;:::o;28204:419::-;28370:4;28408:2;28397:9;28393:18;28385:26;;28457:9;28451:4;28447:20;28443:1;28432:9;28428:17;28421:47;28485:131;28611:4;28485:131;:::i;:::-;28477:139;;28204:419;;;:::o;28629:170::-;28769:22;28765:1;28757:6;28753:14;28746:46;28629:170;:::o;28805:366::-;28947:3;28968:67;29032:2;29027:3;28968:67;:::i;:::-;28961:74;;29044:93;29133:3;29044:93;:::i;:::-;29162:2;29157:3;29153:12;29146:19;;28805:366;;;:::o;29177:419::-;29343:4;29381:2;29370:9;29366:18;29358:26;;29430:9;29424:4;29420:20;29416:1;29405:9;29401:17;29394:47;29458:131;29584:4;29458:131;:::i;:::-;29450:139;;29177:419;;;:::o;29602:191::-;29642:3;29661:20;29679:1;29661:20;:::i;:::-;29656:25;;29695:20;29713:1;29695:20;:::i;:::-;29690:25;;29738:1;29735;29731:9;29724:16;;29759:3;29756:1;29753:10;29750:36;;;29766:18;;:::i;:::-;29750:36;29602:191;;;;:::o;29799:172::-;29939:24;29935:1;29927:6;29923:14;29916:48;29799:172;:::o;29977:366::-;30119:3;30140:67;30204:2;30199:3;30140:67;:::i;:::-;30133:74;;30216:93;30305:3;30216:93;:::i;:::-;30334:2;30329:3;30325:12;30318:19;;29977:366;;;:::o;30349:419::-;30515:4;30553:2;30542:9;30538:18;30530:26;;30602:9;30596:4;30592:20;30588:1;30577:9;30573:17;30566:47;30630:131;30756:4;30630:131;:::i;:::-;30622:139;;30349:419;;;:::o;30774:220::-;30914:34;30910:1;30902:6;30898:14;30891:58;30983:3;30978:2;30970:6;30966:15;30959:28;30774:220;:::o;31000:366::-;31142:3;31163:67;31227:2;31222:3;31163:67;:::i;:::-;31156:74;;31239:93;31328:3;31239:93;:::i;:::-;31357:2;31352:3;31348:12;31341:19;;31000:366;;;:::o;31372:419::-;31538:4;31576:2;31565:9;31561:18;31553:26;;31625:9;31619:4;31615:20;31611:1;31600:9;31596:17;31589:47;31653:131;31779:4;31653:131;:::i;:::-;31645:139;;31372:419;;;:::o;31797:143::-;31854:5;31885:6;31879:13;31870:22;;31901:33;31928:5;31901:33;:::i;:::-;31797:143;;;;:::o;31946:351::-;32016:6;32065:2;32053:9;32044:7;32040:23;32036:32;32033:119;;;32071:79;;:::i;:::-;32033:119;32191:1;32216:64;32272:7;32263:6;32252:9;32248:22;32216:64;:::i;:::-;32206:74;;32162:128;31946:351;;;;:::o;32303:174::-;32443:26;32439:1;32431:6;32427:14;32420:50;32303:174;:::o;32483:366::-;32625:3;32646:67;32710:2;32705:3;32646:67;:::i;:::-;32639:74;;32722:93;32811:3;32722:93;:::i;:::-;32840:2;32835:3;32831:12;32824:19;;32483:366;;;:::o;32855:419::-;33021:4;33059:2;33048:9;33044:18;33036:26;;33108:9;33102:4;33098:20;33094:1;33083:9;33079:17;33072:47;33136:131;33262:4;33136:131;:::i;:::-;33128:139;;32855:419;;;:::o;33280:234::-;33420:34;33416:1;33408:6;33404:14;33397:58;33489:17;33484:2;33476:6;33472:15;33465:42;33280:234;:::o;33520:366::-;33662:3;33683:67;33747:2;33742:3;33683:67;:::i;:::-;33676:74;;33759:93;33848:3;33759:93;:::i;:::-;33877:2;33872:3;33868:12;33861:19;;33520:366;;;:::o;33892:419::-;34058:4;34096:2;34085:9;34081:18;34073:26;;34145:9;34139:4;34135:20;34131:1;34120:9;34116:17;34109:47;34173:131;34299:4;34173:131;:::i;:::-;34165:139;;33892:419;;;:::o;34317:148::-;34419:11;34456:3;34441:18;;34317:148;;;;:::o;34471:390::-;34577:3;34605:39;34638:5;34605:39;:::i;:::-;34660:89;34742:6;34737:3;34660:89;:::i;:::-;34653:96;;34758:65;34816:6;34811:3;34804:4;34797:5;34793:16;34758:65;:::i;:::-;34848:6;34843:3;34839:16;34832:23;;34581:280;34471:390;;;;:::o;34891:874::-;34994:3;35031:5;35025:12;35060:36;35086:9;35060:36;:::i;:::-;35112:89;35194:6;35189:3;35112:89;:::i;:::-;35105:96;;35232:1;35221:9;35217:17;35248:1;35243:166;;;;35423:1;35418:341;;;;35210:549;;35243:166;35327:4;35323:9;35312;35308:25;35303:3;35296:38;35389:6;35382:14;35375:22;35367:6;35363:35;35358:3;35354:45;35347:52;;35243:166;;35418:341;35485:38;35517:5;35485:38;:::i;:::-;35545:1;35559:154;35573:6;35570:1;35567:13;35559:154;;;35647:7;35641:14;35637:1;35632:3;35628:11;35621:35;35697:1;35688:7;35684:15;35673:26;;35595:4;35592:1;35588:12;35583:17;;35559:154;;;35742:6;35737:3;35733:16;35726:23;;35425:334;;35210:549;;34998:767;;34891:874;;;;:::o;35771:589::-;35996:3;36018:95;36109:3;36100:6;36018:95;:::i;:::-;36011:102;;36130:95;36221:3;36212:6;36130:95;:::i;:::-;36123:102;;36242:92;36330:3;36321:6;36242:92;:::i;:::-;36235:99;;36351:3;36344:10;;35771:589;;;;;;:::o;36366:225::-;36506:34;36502:1;36494:6;36490:14;36483:58;36575:8;36570:2;36562:6;36558:15;36551:33;36366:225;:::o;36597:366::-;36739:3;36760:67;36824:2;36819:3;36760:67;:::i;:::-;36753:74;;36836:93;36925:3;36836:93;:::i;:::-;36954:2;36949:3;36945:12;36938:19;;36597:366;;;:::o;36969:419::-;37135:4;37173:2;37162:9;37158:18;37150:26;;37222:9;37216:4;37212:20;37208:1;37197:9;37193:17;37186:47;37250:131;37376:4;37250:131;:::i;:::-;37242:139;;36969:419;;;:::o;37394:231::-;37534:34;37530:1;37522:6;37518:14;37511:58;37603:14;37598:2;37590:6;37586:15;37579:39;37394:231;:::o;37631:366::-;37773:3;37794:67;37858:2;37853:3;37794:67;:::i;:::-;37787:74;;37870:93;37959:3;37870:93;:::i;:::-;37988:2;37983:3;37979:12;37972:19;;37631:366;;;:::o;38003:419::-;38169:4;38207:2;38196:9;38192:18;38184:26;;38256:9;38250:4;38246:20;38242:1;38231:9;38227:17;38220:47;38284:131;38410:4;38284:131;:::i;:::-;38276:139;;38003:419;;;:::o;38428:228::-;38568:34;38564:1;38556:6;38552:14;38545:58;38637:11;38632:2;38624:6;38620:15;38613:36;38428:228;:::o;38662:366::-;38804:3;38825:67;38889:2;38884:3;38825:67;:::i;:::-;38818:74;;38901:93;38990:3;38901:93;:::i;:::-;39019:2;39014:3;39010:12;39003:19;;38662:366;;;:::o;39034:419::-;39200:4;39238:2;39227:9;39223:18;39215:26;;39287:9;39281:4;39277:20;39273:1;39262:9;39258:17;39251:47;39315:131;39441:4;39315:131;:::i;:::-;39307:139;;39034:419;;;:::o;39459:223::-;39599:34;39595:1;39587:6;39583:14;39576:58;39668:6;39663:2;39655:6;39651:15;39644:31;39459:223;:::o;39688:366::-;39830:3;39851:67;39915:2;39910:3;39851:67;:::i;:::-;39844:74;;39927:93;40016:3;39927:93;:::i;:::-;40045:2;40040:3;40036:12;40029:19;;39688:366;;;:::o;40060:419::-;40226:4;40264:2;40253:9;40249:18;40241:26;;40313:9;40307:4;40303:20;40299:1;40288:9;40284:17;40277:47;40341:131;40467:4;40341:131;:::i;:::-;40333:139;;40060:419;;;:::o;40485:194::-;40525:4;40545:20;40563:1;40545:20;:::i;:::-;40540:25;;40579:20;40597:1;40579:20;:::i;:::-;40574:25;;40623:1;40620;40616:9;40608:17;;40647:1;40641:4;40638:11;40635:37;;;40652:18;;:::i;:::-;40635:37;40485:194;;;;:::o;40685:175::-;40825:27;40821:1;40813:6;40809:14;40802:51;40685:175;:::o;40866:366::-;41008:3;41029:67;41093:2;41088:3;41029:67;:::i;:::-;41022:74;;41105:93;41194:3;41105:93;:::i;:::-;41223:2;41218:3;41214:12;41207:19;;40866:366;;;:::o;41238:419::-;41404:4;41442:2;41431:9;41427:18;41419:26;;41491:9;41485:4;41481:20;41477:1;41466:9;41462:17;41455:47;41519:131;41645:4;41519:131;:::i;:::-;41511:139;;41238:419;;;:::o;41663:237::-;41803:34;41799:1;41791:6;41787:14;41780:58;41872:20;41867:2;41859:6;41855:15;41848:45;41663:237;:::o;41906:366::-;42048:3;42069:67;42133:2;42128:3;42069:67;:::i;:::-;42062:74;;42145:93;42234:3;42145:93;:::i;:::-;42263:2;42258:3;42254:12;42247:19;;41906:366;;;:::o;42278:419::-;42444:4;42482:2;42471:9;42467:18;42459:26;;42531:9;42525:4;42521:20;42517:1;42506:9;42502:17;42495:47;42559:131;42685:4;42559:131;:::i;:::-;42551:139;;42278:419;;;:::o;42703:180::-;42751:77;42748:1;42741:88;42848:4;42845:1;42838:15;42872:4;42869:1;42862:15;42889:185;42929:1;42946:20;42964:1;42946:20;:::i;:::-;42941:25;;42980:20;42998:1;42980:20;:::i;:::-;42975:25;;43019:1;43009:35;;43024:18;;:::i;:::-;43009:35;43066:1;43063;43059:9;43054:14;;42889:185;;;;:::o;43080:176::-;43112:1;43129:20;43147:1;43129:20;:::i;:::-;43124:25;;43163:20;43181:1;43163:20;:::i;:::-;43158:25;;43202:1;43192:35;;43207:18;;:::i;:::-;43192:35;43248:1;43245;43241:9;43236:14;;43080:176;;;;:::o;43262:98::-;43313:6;43347:5;43341:12;43331:22;;43262:98;;;:::o;43366:168::-;43449:11;43483:6;43478:3;43471:19;43523:4;43518:3;43514:14;43499:29;;43366:168;;;;:::o;43540:373::-;43626:3;43654:38;43686:5;43654:38;:::i;:::-;43708:70;43771:6;43766:3;43708:70;:::i;:::-;43701:77;;43787:65;43845:6;43840:3;43833:4;43826:5;43822:16;43787:65;:::i;:::-;43877:29;43899:6;43877:29;:::i;:::-;43872:3;43868:39;43861:46;;43630:283;43540:373;;;;:::o;43919:640::-;44114:4;44152:3;44141:9;44137:19;44129:27;;44166:71;44234:1;44223:9;44219:17;44210:6;44166:71;:::i;:::-;44247:72;44315:2;44304:9;44300:18;44291:6;44247:72;:::i;:::-;44329;44397:2;44386:9;44382:18;44373:6;44329:72;:::i;:::-;44448:9;44442:4;44438:20;44433:2;44422:9;44418:18;44411:48;44476:76;44547:4;44538:6;44476:76;:::i;:::-;44468:84;;43919:640;;;;;;;:::o;44565:141::-;44621:5;44652:6;44646:13;44637:22;;44668:32;44694:5;44668:32;:::i;:::-;44565:141;;;;:::o;44712:349::-;44781:6;44830:2;44818:9;44809:7;44805:23;44801:32;44798:119;;;44836:79;;:::i;:::-;44798:119;44956:1;44981:63;45036:7;45027:6;45016:9;45012:22;44981:63;:::i;:::-;44971:73;;44927:127;44712:349;;;;:::o;45067:182::-;45207:34;45203:1;45195:6;45191:14;45184:58;45067:182;:::o;45255:366::-;45397:3;45418:67;45482:2;45477:3;45418:67;:::i;:::-;45411:74;;45494:93;45583:3;45494:93;:::i;:::-;45612:2;45607:3;45603:12;45596:19;;45255:366;;;:::o;45627:419::-;45793:4;45831:2;45820:9;45816:18;45808:26;;45880:9;45874:4;45870:20;45866:1;45855:9;45851:17;45844:47;45908:131;46034:4;45908:131;:::i;:::-;45900:139;;45627:419;;;:::o;46052:178::-;46192:30;46188:1;46180:6;46176:14;46169:54;46052:178;:::o;46236:366::-;46378:3;46399:67;46463:2;46458:3;46399:67;:::i;:::-;46392:74;;46475:93;46564:3;46475:93;:::i;:::-;46593:2;46588:3;46584:12;46577:19;;46236:366;;;:::o;46608:419::-;46774:4;46812:2;46801:9;46797:18;46789:26;;46861:9;46855:4;46851:20;46847:1;46836:9;46832:17;46825:47;46889:131;47015:4;46889:131;:::i;:::-;46881:139;;46608:419;;;:::o
Swarm Source
ipfs://bae2532ae7371f42c937b6df2b06785c3a4c5f856530ed72932abd1d6e8c4d5d
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.