More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 752 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Unstake | 15119312 | 829 days ago | IN | 0 ETH | 0.01255169 | ||||
Renounce Ownersh... | 15114584 | 830 days ago | IN | 0 ETH | 0.00028828 | ||||
Stake | 15112895 | 830 days ago | IN | 0 ETH | 0.00121036 | ||||
Stake | 15112547 | 830 days ago | IN | 0 ETH | 0.00154947 | ||||
Stake | 15112189 | 830 days ago | IN | 0 ETH | 0.00237821 | ||||
Stake | 15107749 | 831 days ago | IN | 0 ETH | 0.00268797 | ||||
Stake | 15107611 | 831 days ago | IN | 0 ETH | 0.00462015 | ||||
Stake | 15106661 | 831 days ago | IN | 0 ETH | 0.00414234 | ||||
Unstake | 15106376 | 831 days ago | IN | 0 ETH | 0.01681733 | ||||
Unstake | 15106055 | 831 days ago | IN | 0 ETH | 0.02781452 | ||||
Unstake | 15105306 | 831 days ago | IN | 0 ETH | 0.01323284 | ||||
Stake | 15104663 | 832 days ago | IN | 0 ETH | 0.00285347 | ||||
Unstake | 15104584 | 832 days ago | IN | 0 ETH | 0.13821877 | ||||
Stake | 15101988 | 832 days ago | IN | 0 ETH | 0.0018187 | ||||
Stake | 15101403 | 832 days ago | IN | 0 ETH | 0.00216957 | ||||
Stake | 15099972 | 832 days ago | IN | 0 ETH | 0.00757802 | ||||
Stake | 15098194 | 833 days ago | IN | 0 ETH | 0.0047699 | ||||
Stake | 15096358 | 833 days ago | IN | 0 ETH | 0.00833772 | ||||
Stake | 15095275 | 833 days ago | IN | 0 ETH | 0.00299673 | ||||
Stake | 15093357 | 833 days ago | IN | 0 ETH | 0.00193029 | ||||
Stake | 15091768 | 834 days ago | IN | 0 ETH | 0.00236211 | ||||
Stake | 15089269 | 834 days ago | IN | 0 ETH | 0.00197279 | ||||
Stake | 15089039 | 834 days ago | IN | 0 ETH | 0.00399103 | ||||
Unstake | 15088865 | 834 days ago | IN | 0 ETH | 0.0597589 | ||||
Stake | 15088728 | 834 days ago | IN | 0 ETH | 0.00063365 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
WitLinkStaking
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-25 */ // 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/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // 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 (last updated v4.6.0) (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`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // 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/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (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 `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // 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/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @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` cannot be the zero address. * - `to` cannot be the zero address. * * 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 override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; } _balances[to] += amount; emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens 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 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been 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 _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // 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: witlinkstaking.sol pragma solidity 0.8.4; interface nftcontract { function maxSupply() view external returns (uint256); } //import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; contract WitLinkStaking is Ownable, IERC721Receiver { uint256 public totalStaked; address public contractowner; uint256 public erc20balance; uint256 public zone1reward = 2; uint256 public zone2reward = 2; uint256 public zone3reward = 3; uint256 public zone4reward = 5; uint256 public largereward = 35; uint256 public smallreward = 15; uint256 public hightrafficreward = 50; uint256 public standardbase = 30 ether; uint256 public deluxebase = 70 ether; uint256 public villabase = 150 ether; uint256 public executivebase = 400 ether; uint16[] large =[uint16(6870), 6935, 6466, 6962, 6562, 6974, 6427, 6866, 6165, 6535, 6470, 6923, 6889, 6309, 6958, 6372, 6260, 6919, 6763, 6671, 6743, 6939, 6893, 6981, 6997, 6978, 6610, 6169, 6885, 6391, 6684, 6954, 6811, 6903, 6915, 6503, 6692, 6368, 6942, 6807, 6410, 6943, 6386, 6914, 6447, 6851, 6902, 6955, 6543, 6390, 6168, 6884, 6187, 6304, 7000, 6996, 6979, 6703, 6579, 6980, 6345, 6715, 6200, 6650, 6484, 6938, 6892, 6742, 6312, 6670, 6277, 6918, 6631, 6666, 6959, 6867, 6922, 6888, 6975, 6426, 6719, 6826, 6963, 6871, 6934, 6467, 6895, 6196, 6987, 6968, 6704, 6568, 6991, 6246, 6616, 6495, 6883, 6929, 6952, 6817, 6905, 6786, 6440, 6913, 6505, 6944, 6801, 6876, 6525, 6175, 6899, 6933, 6964, 6972, 6708, 6499, 6925, 6231, 6909, 6509, 6948, 6227, 6676, 6363, 6949, 6908, 6660, 6375, 6162, 6532, 6861, 6924, 6836, 6973, 6820, 6965, 6877, 6898, 6932, 6945, 6416, 6553, 6441, 6912, 6787, 6768, 6904, 6400, 6953, 6683, 6882, 6928, 6752, 6617, 6990, 6210, 6986, 6969, 6713, 6178, 6528, 6894, 6314, 6946, 6911, 6784, 6907, 6287, 6950, 6881, 6497, 6614, 6993, 6213, 6356, 6439, 6985, 6205, 6655, 6897, 6878, 6481, 6317, 6858, 6321, 6634, 6458, 6726, 6819, 6927, 6862, 6970, 6966, 6989, 6931, 6527, 6874, 6930, 6463, 6526, 6875, 6434, 6967, 6988, 6971, 6926, 6863, 6619, 6818, 6273, 6253, 6195, 6896, 6879, 6480, 6711, 6984, 6838, 6992, 6880, 6479, 6394, 6814, 6951, 6906, 6910, 6382, 6678, 6551, 6947, 6736, 6624, 6665, 6409, 6921, 6864, 6976, 6999, 6960, 6576, 6258, 6937, 6872, 6805, 6940, 6917, 6278, 6901, 6452, 6813, 6956, 6686, 6184, 6887, 6868, 6307, 6583, 6429, 6995, 6215, 6983, 6346, 6891, 6468, 6487, 6605, 6740, 6310, 6890, 6982, 6214, 6994, 6613, 6756, 6886, 6869, 6490, 6404, 6957, 6900, 6783, 6279, 6916, 6557, 6941, 6936, 6873, 6259, 6961, 6598, 6577, 6824, 6977, 6998, 6832, 6920, 6865, 6326, 6449, 6275]; uint16[] small =[uint16(6827), 6831, 6759, 6722, 6630, 6325, 6276, 6333, 6221, 6364, 6190, 6344, 6597, 6702, 6352, 6647, 6217, 6305, 6240, 6186, 6796, 6283, 6779, 6450, 6515, 6295, 6387, 6554, 6806, 6739, 6693, 6369, 6502, 6451, 6797, 6778, 6328, 6492, 6241, 6611, 6646, 6607, 6257, 6365, 6735, 6559, 6627, 6762, 6324, 6774, 6723, 6758, 6830, 6575, 6172, 6315, 6600, 6483, 6529, 6712, 6207, 6657, 6397, 6682, 6401, 6790, 6285, 6456, 6513, 6293, 6769, 6856, 6319, 6572, 6163, 6548, 6724, 6374, 6323, 6289, 6620, 6335, 6226, 6764, 6334, 6267, 6637, 6322, 6288, 6230, 6725, 6359, 6709, 6573, 6436, 6318, 6748, 6524, 6800, 6695, 6857, 6457, 6791, 6284, 6379, 6729, 6181, 6569, 6586, 6355, 6343, 6656, 6197, 6601, 6251, 6415, 6696, 6679, 6854, 6442, 6842, 6511, 6268, 6403, 6395, 6301, 6751, 6585, 6839, 6643, 6710, 6194, 6747, 6675, 6419, 6337, 6788, 6264, 6376, 6663, 6233, 6474, 6161, 6423, 6589, 6835, 6823, 6570, 6462, 6199, 6176, 6822, 6658, 6208, 6422, 6567, 6530, 6249, 6232, 6320, 6635, 6859, 6766, 6623, 6789, 6418, 6361, 6224, 6603, 6746, 6316, 6204, 6592, 6642, 6212, 6707, 6584, 6300, 6183, 6402, 6286, 6228, 6223, 6389, 6761, 6331, 6327, 6777, 6798, 6262, 6848, 6370, 6235, 6188, 6649, 6425, 6560, 6608, 6413, 6690, 6385, 6852, 6501, 6444, 6517, 6281, 6794, 6405, 6669, 6612, 6645, 6595, 6829, 6203, 6653, 6192, 6604, 6311, 6469, 6486, 6594, 6644, 6306, 6185, 6238, 6668, 6812, 6280, 6516, 6845, 6453, 6500, 6445, 6465, 6520, 6218, 6648, 6189, 6473, 6536, 6408, 6721, 6371, 6760, 6330, 6625, 6367, 6222]; uint16[] hightraffic= [uint16(380), 2018, 98, 4457, 1878, 2757, 5968, 363, 6780, 1784, 4704, 1802, 2015, 876, 1253, 4358, 1727, 6867, 2062, 5190, 1147, 1669, 1413, 3992, 2546, 4148, 1464, 4735, 4762, 6724, 1449, 5236, 3073, 2674, 597, 4431, 6498, 2988, 6359, 6820, 2785, 4344, 173, 3268, 5055, 1368, 4557, 45, 1098, 2964, 6463, 4736, 6926, 4794, 4669, 1484, 5202, 2237, 3871, 5527, 6425, 1339, 5395, 3579, 3083, 96, 5100, 4910, 1138, 2353, 6890, 2241, 6347, 3939, 5510, 3333, 4675, 5463, 3718, 4862]; uint16[] zone4 = [uint16(6523), 3371, 2999, 2560, 396, 1989, 1966, 953, 5358, 3326, 6574, 6061, 6962, 5837, 512, 4375, 292, 338, 6831, 4949, 3019, 4676, 2608, 912, 5067, 695, 3367, 5876, 5175, 800, 5030, 1423, 5899, 2448, 5227, 5698, 3465, 5270, 4898, 656, 343, 5335, 3432, 3824, 77, 4318, 6775, 4924, 2235, 2665, 5909, 1419, 6333, 1767, 6364, 1710, 1655, 6190, 5568, 5138, 2307, 288, 2868, 5354, 1602, 5987, 5591, 1182, 5968, 4380, 1028, 5712, 2487, 334, 764, 3296, 6978, 5529, 3804, 4768, 5895, 949, 1706, 6493, 5315, 4857, 6885, 4441, 3193, 898, 4343, 1141, 3740, 6542, 3310, 4986, 5010, 94, 1403, 1546, 3081, 2690, 3202, 6000, 5293, 3582, 3428, 2393, 5006, 2055, 4882, 6446, 1679, 4181, 2956, 1229, 2813, 6850, 3886, 5051, 5401, 4640, 1012, 6738, 2281, 2901, 6411, 5378, 2147, 4569, 3612, 3757, 2795, 5953, 1506, 6914, 1697, 2541, 3429, 4616, 1947, 2668, 972, 2238, 134, 6294, 2941, 6847, 5768, 437, 4745, 4315, 821, 2015, 5380, 6406, 2916, 319, 2150, 876, 5103, 6685, 4712, 2982, 362, 5744, 1212, 5528, 4339, 3413, 4801, 4102, 1300, 6580, 270, 2193, 159, 6353, 6083, 3281, 2185, 6596, 17, 1195, 3901, 2243, 4143, 4513, 1204, 4006, 1654, 2078, 6892, 548, 1984, 6607, 1068, 3055, 6365, 4358, 3167, 6735, 4708, 3537, 1623, 303, 641, 4925, 1731, 3433, 4030, 1377, 4175, 5334, 5764, 2275, 2625, 196, 6236, 6373, 250, 3608, 1635, 2449, 4122, 4088, 5877, 6534, 3736, 5089, 4677, 1926, 5436, 2259, 5066, 769, 4948, 6076, 1875, 905, 1930, 4661, 4231, 2536, 4118, 6125, 3327, 6963, 1822, 1988, 1121, 544, 5861, 3059, 3370, 2998, 378, 6934, 1595, 2643, 1346, 5094, 2614, 3005, 2497, 774, 4406, 5082, 4369, 3156, 5597, 3910, 918, 1757, 5714, 5344, 2194, 3551, 559, 2340, 5743, 6180, 3382, 1215, 3228, 2593, 5256, 4914, 1002, 6397, 1147, 6728, 871, 5104, 4980, 2157, 4579, 2854, 4129, 575, 5850, 5780, 349, 6840, 1940, 5846, 3838, 5515, 2680, 3642, 6010, 6381, 4216, 2268, 922, 5112, 867, 2004, 6047, 6417, 2907, 6102, 2842, 2136, 4148, 2970, 2073, 5866, 6749, 5535, 1433, 6122, 6067, 6437, 1872, 1034, 2248, 5077, 6837, 4559, 3859, 5574, 6860, 4918, 1219, 1649, 806, 5523, 4298, 5935, 4277, 2209, 257, 1632, 1777, 5364, 2272, 5108, 26, 1235, 6909, 4488, 2675, 6773, 4164, 1736, 3422, 5149, 6765, 1274, 2008, 4830, 4099, 6677, 6362, 2321, 1019, 2770, 4427, 6949, 581, 3073, 2662, 89, 6764, 6508, 2674, 3065, 597, 3120, 3989, 2048, 5332, 5298, 344, 2273, 893, 5559, 6725, 4431, 6119, 6549, 5735, 5522, 4626, 2208, 2988, 738, 4919, 5125, 4221, 2526, 4558, 3337, 6420, 6973, 515, 450, 3008, 2619, 283, 6066, 112, 1577, 5164, 5471, 5922, 4519, 6174, 6031, 6945, 6380, 4217, 5810, 4702, 1384, 5797, 4169, 5001, 427, 1412, 1557, 831, 2947, 431, 4256, 3593, 5017, 962, 3985, 1812, 2013, 2156, 6816, 1280, 2785, 6396, 1516, 3878, 4850, 3696, 5257, 4915, 1097, 2341, 1582, 1306, 5650, 6705, 1490, 3638, 260, 4057, 4684, 1486, 5979, 2838, 5611, 237, 4779, 4329, 6601, 3053, 2212, 4994, 5686, 1295, 4428, 4701, 166, 4351, 920, 1446, 4490, 2114, 3210, 6012, 218, 832, 998, 131, 561, 5844, 5901, 2, 2397, 3343, 6454, 3656, 5628, 3085, 1542, 4605, 598, 6792, 6268, 3590, 6546, 2769, 5805, 5940, 5043, 1217, 4500, 2084, 4279, 6244, 2342, 3787, 6993, 5346, 4107, 5595, 449, 6643, 3011, 1606, 6593, 4054, 3791, 5350, 6985, 664, 3396, 4146, 6602, 4795, 5887, 1082, 3115, 45, 5491, 2704, 1763, 306, 4832, 243, 3565, 1108, 2724, 3973, 6622, 3359, 1364, 351, 4166, 3709, 4920, 3573, 6771, 3436, 2677, 717, 4170, 1372, 5331, 1519, 1149, 2335, 890, 3461, 193, 2509, 3318, 4127, 4577, 740, 5034, 557, 1132, 4019, 3226, 1866, 2749, 3158, 629, 1759, 2175, 5075, 3908, 453, 4371, 845, 2533, 4799, 1061, 957, 3660, 6462, 1718, 3375, 6874, 1963, 2709, 5166, 4327, 6064, 2027, 3909, 1934, 5424, 452, 4720, 1522, 5998, 1871, 2461, 6422, 628, 2877, 5432, 5598, 501, 4018, 3677, 5259, 2573, 3732, 4274, 556, 4599, 5672, 891, 1723, 4171, 4464, 6770, 4258, 3067, 5449, 1365, 3708, 4537, 700, 1670, 2660, 4130, 5721, 5234, 6418, 1277, 6048, 3860, 491, 3499, 2637, 5058, 3401, 4794, 1083, 3544, 2705, 3378, 4517, 4239, 6204, 4669, 1892, 3143, 3513, 1187, 3856, 4043, 4940, 2482, 1304, 4782, 4297, 1095, 6880, 1646, 6183, 366, 4151, 5740, 2768, 3179, 1514, 4716, 937, 3895, 3745, 2857, 3250, 576, 3987, 960, 6639, 6793, 1056, 3591, 2103, 2800, 5279, 2379, 3568, 4757, 3587, 6506, 4887, 5795, 4184, 4700, 4350, 167, 5111, 5541, 2284, 3883, 3929, 188, 1017, 1294, 6044, 3246, 6414, 6366, 3867, 880, 183, 479, 4567, 5399, 63, 2722, 3563, 3133, 6331, 584, 1698, 5264, 1227, 6448, 1118, 3963, 204, 1231, 5788, 5622, 22, 3871, 480, 3488, 4658, 3467, 5049, 3934, 4121, 1323, 5730, 4967, 1266, 1636, 4623, 2431, 3670, 6537, 4224, 1163, 6425, 3627, 2935, 3277, 2870, 455, 4662, 5589, 5136, 2759, 510, 6960, 2020, 793, 6825, 6608, 117, 3666, 5248, 2562, 6872, 2098, 3373, 1339, 2846, 5680, 1786, 5116, 5546, 3538, 4357, 5053, 4300, 3095, 2684, 1047, 6782, 588, 1728, 2104, 658, 1397, 5854, 4746, 434, 1401, 5696, 3742, 4087, 1285, 3607, 4341, 3484, 1143, 4711, 5100, 5415, 2780, 6239, 5317, 5747, 3369, 3806, 2190, 3781, 5340, 5985, 3152, 1495, 1600, 2186, 4547, 3328, 1315, 4117, 3902, 4681, 6716, 3847, 4906, 3390, 727, 1712, 4269, 1084, 2216, 5479, 42, 2353, 5245, 6039, 2979, 4454, 6469, 2095, 6202, 4395, 3450, 458, 4680, 6717, 5838, 1528, 2754, 4403, 3796, 4053, 264, 5212, 6982, 2168, 6828, 3779, 771, 321, 4679, 3446, 2257, 5438, 2312, 3850, 6701, 6351, 6582, 1247, 788, 6428, 4415, 3295, 1752, 2484, 419, 3554, 1990, 2345, 675, 4012, 6869, 730, 3368, 1841, 198, 6668, 5697, 4985, 2502, 5228, 2017, 3082, 3128, 6795, 1953, 6516, 6453, 659, 835, 5455, 6853, 6150, 4028, 2056, 2328, 862, 1504, 5814, 4356, 161, 1011, 5402, 1768, 6042, 2830, 5475, 4634, 5160, 2021, 1748, 2534, 454, 1524, 5834, 4376, 3626, 6074, 5434, 442, 157, 1532, 854, 6166, 1359, 2826, 4622, 4272, 2349, 5526, 5674, 4966, 5224, 3870, 3489, 4874, 710, 1375, 4198, 4032, 6776, 2365, 2220, 593, 3431, 1699, 5770, 4024, 6760, 4618, 2666, 614, 4970, 2631, 881]; uint16[] zone3 = [uint16(6489), 2130, 6870, 2425, 3664, 1823, 5499, 1120, 545, 1065, 4267, 3408, 4637, 2219, 2167, 2921, 1527, 5134, 5564, 5421, 904, 1931, 5972, 1198, 2872, 6098, 6562, 6132, 5122, 1161, 4733, 5821, 4226, 3449, 441, 1927, 5437, 2126, 4158, 6165, 4508, 3737, 2960, 3388, 2063, 6759, 4764, 4334, 5525, 5460, 1970, 4066, 1634, 4436, 4820, 5732, 5362, 314, 4123, 1321, 4573, 1771, 4089, 894, 3936, 1458, 1008, 6722, 6688, 3170, 2331, 5620, 1399, 1663, 1726, 713, 4524, 6519, 1376, 590, 2673, 2389, 2223, 1819, 986, 4027, 210, 5636, 5773, 4162, 1360, 4532, 6276, 1049, 3074, 3561, 139, 3832, 2720, 4973, 4070, 247, 4565, 752, 3023, 181, 2632, 928, 882, 2798, 5548, 3865, 2777, 4359, 3166, 6734, 4284, 5495, 1985, 2700, 6256, 1593, 1069, 4791, 3687, 2995, 375, 1340, 725, 4007, 4457, 3392, 2429, 3845, 1878, 6344, 5991, 3003, 6201, 4396, 908, 1747, 3280, 322, 2491, 5704, 4816, 267, 1252, 508, 4695, 6352, 158, 2311, 1881, 3916, 6647, 3445, 4800, 6997, 1301, 4553, 6094, 2891, 1614, 621, 4416, 2468, 2038, 5207, 2716, 5179, 57, 6755, 3557, 3042, 1585, 3412, 5196, 2829, 4504, 1356, 2983, 4154, 5250, 4912, 5600, 1004, 1454, 3469, 2782, 5047, 3890, 877, 5552, 1842, 174, 4713, 5801, 1511, 2014, 1638, 1268, 4590, 4085, 748, 6112, 2151, 5694, 5440, 1950, 5913, 3594, 6796, 6283, 4744, 6779, 5856, 1116, 3828, 820, 1395, 2413, 2043, 6846, 5769, 5339, 4178, 3347, 4482, 4528, 3717, 1045, 420, 1946, 5456, 82, 1550, 6295, 5790, 3701, 709, 4494, 6153, 2110, 2794, 1911, 5952, 1157, 4355, 162, 3869, 1854, 6041, 6942, 5682, 3306, 6410, 5396, 6943, 2003, 5683, 2146, 1290, 2845, 5050, 925, 4211, 1013, 499, 4354, 5115, 3868, 5791, 2054, 4883, 2404, 3645, 4180, 2957, 1228, 2812, 6502, 6152, 4246, 3583, 1414, 5904, 7, 5457, 3995, 5142, 2687, 1551, 6001, 3653, 6902, 5787, 2042, 5292, 4179, 1681, 4529, 5441, 964, 1951, 4600, 1402, 1052, 6797, 1547, 6778, 6328, 3983, 5504, 4968, 2445, 1793, 6056, 1269, 3741, 4084, 749, 1286, 6810, 1455, 3192, 5945, 2629, 2279, 5046, 3891, 5553, 525, 4505, 698, 3690, 5314, 4856, 2081, 5251, 6884, 4913, 3385, 6187, 2717, 3805, 3106, 6754, 3556, 4786, 3043, 2652, 2202, 3297, 1245, 4047, 3782, 4944, 6979, 5656, 2039, 5206, 509, 5986, 1496, 2310, 3917, 5969, 3444, 6216, 3014, 1029, 289, 4544, 6129, 4114, 5355, 5705, 5210, 636, 2886, 1253, 2756, 5139, 1480, 3517, 3002, 4397, 724, 1711, 231, 3393, 4456, 4905, 2582, 2351, 3956, 5181, 1592, 4790, 3022, 3472, 929, 883, 5549, 1859, 37, 4972, 616, 4421, 246, 1789, 1273, 753, 4564, 1336, 4837, 2234, 6277, 1048, 568, 6332, 991, 211, 5637, 5267, 5288, 704, 4533, 3063, 591, 3599, 6631, 968, 99, 2388, 5508, 1818, 3825, 4319, 6324, 6774, 3576, 2808, 342, 4876, 6666, 1009, 6723, 6689, 21, 2330, 2760, 1265, 4964, 5226, 4821, 5363, 1320, 745, 1567, 5174, 5031, 5932, 4270, 1588, 5748, 4159, 4509, 2824, 3223, 381, 3389, 6922, 856, 1863, 1160, 4698, 5820, 505, 1025, 3448, 440, 2609, 913, 2873, 6563, 3331, 2170, 2520, 3624, 1619, 786, 143, 4374, 840, 5565, 5973, 1033, 6826, 5359, 2865, 790, 3262, 3798, 6060, 2920, 2023, 4773, 1064, 4266, 952, 728, 6488, 6172, 2131, 1658, 6037, 3235, 1983, 5539, 3814, 4328, 6315, 6600, 3052, 6250, 959, 689, 6483, 2839, 6529, 5755, 2090, 5610, 4001, 1203, 4451, 3394, 148, 1487, 3510, 518, 6712, 3906, 6657, 5702, 4543, 1741, 1311, 3639, 6591, 1254, 2881, 6968, 5578, 1868, 6704, 3506, 6354, 4693, 5981, 2252, 4105, 6092, 3290, 2481, 2897, 3785, 6587, 4410, 6753, 3802, 1995, 5190, 5313, 2086, 3697, 6495, 1350, 670, 4447, 4017, 2439, 6929, 934, 1901, 4200, 467, 4650, 5942, 1452, 6378, 1517, 4715, 5807, 3879, 2911, 3603, 6051, 5387, 2442, 5368, 6544, 4083, 3746, 1405, 5915, 6790, 4257, 2229, 5016, 2679, 1956, 2696, 3984, 4742, 3087, 1110, 4938, 2415, 3204, 1393, 4191, 1686, 3711, 2550, 2100, 2395, 84, 4241, 1043, 1413, 1556, 6293, 4754, 3091, 6769, 2950, 3212, 6856, 5283, 2546, 4538, 6155, 4168, 1690, 5954, 471, 3029, 888, 3880, 2638, 3496, 4979, 2454, 1278, 4580, 3300, 3750, 2511, 2141, 4996, 6876, 2566, 4518, 6525, 3377, 113, 1576, 4774, 3818, 4261, 406, 3770, 6572, 1608, 5132, 5831, 1521, 3459, 1464, 1937, 5427, 902, 5348, 6134, 3623, 781, 3789, 2032, 6358, 1864, 914, 5061, 447, 4670, 5962, 369, 6533, 739, 6925, 2065, 3224, 2966, 1833, 555, 5870, 105, 1130, 1425, 3418, 4627, 1075, 2659, 1976, 4060, 4430, 4125, 2858, 191, 6661, 3033, 2788, 5558, 3875, 4349, 6374, 3658, 650, 2049, 5276, 715, 345, 596, 3064, 5919, 129, 6289, 3571, 579, 2730, 2360, 5630, 5260, 6159, 6509, 5775, 6620, 580, 3588, 2233, 979, 2399, 5519, 2726, 1624, 4426, 3249, 5237, 1761, 2634, 5958, 1448, 187, 168, 6732, 30, 2635, 2265, 3024, 6699, 3161, 3531, 6733, 2320, 31, 3618, 3248, 2009, 5723, 4831, 305, 3423, 3970, 978, 1808, 3566, 6334, 3136, 4470, 1367, 702, 5324, 1408, 6288, 3570, 2731, 70, 981, 4466, 651, 3209, 5277, 6908, 4870, 4523, 190, 2789, 2623, 2336, 4348, 4962, 4124, 2859, 1998, 5488, 807, 1832, 4763, 5871, 554, 1561, 1131, 3419, 411, 3049, 2658, 3730, 6861, 6924, 2064, 6027, 1648, 1166, 6709, 5826, 1865, 1023, 1189, 1473, 3767, 4108, 6135, 3788, 6070, 3458, 2249, 5076, 6123, 6089, 6573, 2530, 6820, 6965, 796, 2926, 4325, 6748, 3819, 1961, 5888, 407, 4630, 1432, 6524, 3726, 4149, 3376, 391, 6898, 2588, 4978, 2455, 5390, 2005, 1783, 6046, 3301, 6800, 3478, 1015, 2269, 889, 923, 5406, 5113, 2286, 1853, 535, 4352, 3497, 4186, 6912, 5328, 6857, 4539, 2814, 4493, 3356, 2394, 85, 4240, 1042, 6787, 5902, 1107, 6292, 562, 5847, 3090, 4755, 3993, 2681, 2414, 2044, 348, 718, 5294, 5914, 2678, 5152, 827, 6284, 1111, 3252, 5369, 5693, 4578, 2855, 4082, 4128, 5410, 5040, 3897, 1003, 3194, 466, 489, 6683, 4714, 5806, 523, 2290, 5555, 870, 4503, 1701, 4446, 671, 4016, 221, 2068, 2438, 6928, 6302, 558, 3803, 50, 5484, 1994, 3946, 6247, 1078, 3291, 5715, 2896, 4041, 626, 5129, 2316, 2746, 5083, 4738, 6355, 4387, 6640, 5596, 2496, 6986, 5703, 4811, 775, 3287, 6085, 4112, 1255, 6590, 3268, 5216, 4954, 5996, 6713, 519, 5580, 6206, 1039, 1469, 6482, 688, 372, 4145, 1717, 4515, 4903, 1202, 1982, 5168, 5492, 6744, 3403, 5884, 4796, 1594, 3950, 958, 6803, 3302, 4078, 2905, 3617, 536, 5110, 2285, 5540, 5055, 2790, 3882, 6383, 473, 3181, 4644, 5956, 1738, 6157, 3355, 6854, 5281, 4886, 2051, 2401, 2952, 4185, 69, 2682, 3990, 3139, 6291, 1554, 424, 4613, 86, 5452, 1942, 5297, 1684, 3713, 2801, 6511, 4039, 1391, 2944, 2047, 4890, 5151, 2694, 5501, 1954, 5444, 90, 961, 6638, 1057, 4255, 3744, 4081, 1779, 6116, 5690, 2155, 3601, 4594, 1796, 6053, 2293, 873, 6680, 4347, 1515, 3528, 3197, 465, 1450, 3894, 2786, 6881, 5604, 2968, 672, 1702, 4150, 3695, 2987, 367, 6497, 5311, 3046, 3945, 2657, 3800, 2712, 808, 6301, 1094, 4042, 275, 4412, 1610, 5653, 3768, 3292, 3912, 2600, 3441, 4384, 6213, 6706, 3504, 5983, 3154, 4957, 4404, 799, 263, 6069, 3284, 4541, 6086, 4111, 3007, 1190, 3457, 4392, 5429, 5079, 1893, 5583, 849, 12, 6710, 234, 4003, 6194, 4900, 2587, 6878, 2138, 1344, 3379, 371, 1714, 2641, 3953, 408, 3050, 6252, 5868, 3861, 3498, 4218, 6675, 3924, 2266, 1299, 4131, 5370, 4998, 5720, 4977, 5665, 1626, 6419, 4424, 6337, 65, 2374, 3836, 2231, 428, 582, 6788, 6272, 5327, 1734, 4473, 4189, 5632, 5262, 2362, 982, 594, 1722, 1688, 4873, 4936, 4465, 1237, 4035, 3174, 486, 2765, 2270, 2620, 469, 6663, 3031, 4824, 2159, 255, 605, 4625, 1077, 6248, 4275, 1831, 6024, 6474, 384, 5258, 2067, 2572, 6862, 3363, 3699, 2821, 5576, 1535, 2460, 2933, 3271, 6589, 279, 4808, 6835, 2525, 1935, 1466, 5976, 4234, 516, 5833, 5999, 1870, 4058, 4408, 3637, 5219, 2026, 3322, 6570, 3288, 4263, 404, 4633, 5537, 49, 2358, 5167, 1124, 3549, 4776, 2972, 3230, 6032, 238, 4849, 2070, 393, 6463, 2836, 3724, 686, 2135, 4848, 6875, 4262, 1060, 5920, 1430, 5473, 5189, 5023, 1826, 110, 1575, 540, 6434, 5648, 5218, 2162, 2498, 3323, 3289, 901, 6658, 4665, 5977, 6208, 517, 1488, 5131, 844, 2031, 6971, 2932, 782, 3270, 2898, 6567, 3335, 444, 4673, 1471, 1888, 1867, 2748, 5577, 151, 5824, 4448, 2965, 6926, 3698, 2820, 1426, 5936, 4624, 4761, 1133, 1830, 4825, 2158, 5367, 741, 4576, 4063, 604, 1631, 5388, 1518, 2334, 25, 2764, 3899, 3933, 6398, 468, 1666, 2949, 653, 6459, 829, 3088, 4608, 6635, 3437, 6859, 5776, 2119, 3358, 215, 1220, 5799, 3564, 1559, 3134, 64, 995, 3421, 3071, 6789, 4560, 757, 1762, 307, 4999, 2908, 4425, 33, 2322, 3163, 6361, 6224, 3026, 184, 3925, 1918, 2267, 887, 5185, 2640, 3952, 5886, 6746, 1579, 6316, 1980, 4002, 665, 4901, 5243, 6896, 1345, 3728, 1191, 13, 1484, 5214, 5644, 1607, 6438, 632, 798, 6592, 2882, 262, 3285, 777, 327, 2494, 5701, 3913, 3440, 6642, 448, 3010, 6212, 5982, 3155, 5081, 1241, 5202, 5717, 4805, 2178, 6091, 1580, 3801, 5486, 1996, 6300, 2590, 6479, 1216, 4501, 4852, 5557, 2338, 29, 1144, 521, 4203, 1001, 464, 4653, 3196, 1902, 5042, 6117, 3315, 2504, 3600, 2912, 6402, 6052, 5853, 6286, 5150, 5015, 1955, 5445, 599, 6269, 4254, 6843, 4487, 6140, 1390, 4468, 5783, 2729, 999, 5146, 3991, 6290, 6785, 1040, 87, 3354, 2545, 2050, 2953, 3641, 5812, 3495, 2791, 5054, 5404, 921, 4215, 6228, 2512, 6802, 3303, 4079, 2007, 6736, 1509, 2775, 34, 3922, 3888, 3021, 6223, 4834, 3308, 300, 4137, 4072, 4588, 5663, 992, 2372, 6761, 3099, 3426, 5458, 4160, 4530, 5771, 1677, 5858, 3575, 3826, 984, 2671, 6798, 6262, 5767, 6848, 3719, 711, 1374, 4176, 4463, 4930, 2333, 2763, 2299, 6720, 3037, 2276, 5419, 4571, 4064, 6409, 414, 4789, 1071, 5462, 947, 1972, 5198, 59, 802, 5874, 4766, 3109, 4336, 3220, 6188, 6167, 1708, 2827, 4859, 5435, 4674, 4361, 5823, 506, 1860, 5120, 6075, 4048, 5209, 5659, 6999, 2489, 3332, 6130, 1460, 1899, 5423, 18, 843, 5566, 1525, 3148, 140, 2470, 3261, 2889, 6063, 6433, 639, 6126, 4818, 4635, 4320, 547, 4770, 814, 5531, 1821, 4009, 2077, 4091, 1769, 2515, 4992, 6043, 6413, 530, 1155, 6690, 475, 6385, 2796, 3884, 5403, 2112, 6852, 4496, 6151, 6444, 4479, 3646, 3216, 5792, 2407, 4750, 5842, 1552, 834, 5511, 1801, 5141, 3996, 4, 4245, 3580, 422, 5907, 3715, 4879, 3200, 6002, 2368, 3980, 5507, 3579, 6281, 4603, 4253, 5012, 2387, 1952, 2503, 6540, 3312, 4438, 2915, 4068, 5229, 5679, 6956, 176, 526, 1513, 2295, 5550, 875, 1840, 3938, 5946, 6669, 3386, 4443, 224, 5252, 4855, 4506, 4156, 2981, 2651, 2201, 3040, 1587, 3410, 6307, 1138, 4290, 5481, 4947, 5205, 4044, 6079, 2893, 623, 336, 3294, 766, 5710, 6995, 1180, 4382, 3851, 2743, 3502, 6700, 635, 4402, 265, 2885, 6983, 2493, 6829, 6080, 5585, 1895, 6203, 3144, 5993, 14, 6891, 2581, 4005, 6192, 2094, 4639, 6604, 4793, 3056, 5497, 2702, 818, 3543, 3407, 1590, 3057, 4792, 5029, 5183, 3954, 4287, 3112, 1206, 233, 1656, 6193, 663, 6486, 4511, 726, 4842, 5750, 5584, 6347, 3145, 1178, 5091, 15, 2304, 5707, 4116, 6644, 1928, 2742, 5984, 3153, 5654, 2191, 4946, 1617, 337, 6097, 5711, 6994, 3942, 2650, 2200, 5896, 4784, 6306, 1569, 6185, 225, 1210, 6886, 2129, 5316, 3738, 1705, 1355, 3692, 2980, 6687, 527, 4710, 2294, 1904, 3939, 3893, 1007, 6238, 1457, 6392, 462, 3743, 6541, 2914, 6054, 1791, 4069, 3256, 2447, 2693, 5156, 1816, 120, 4317, 4252, 5013, 5443, 97, 3344, 3714, 1729, 6845, 5290, 2040, 6003, 3651, 4751, 566, 1800, 5140, 1945, 6279, 6629, 2113, 3702, 4497, 1380, 4478, 3647, 4881, 2406, 39, 3539, 6691, 3493, 5052, 927, 6107, 1292, 4839, 2514, 4993, 2144, 5681, 6941, 3610, 2975, 6035, 6936, 2133, 2099, 6520, 3958, 1066, 1436, 6609, 403, 1123, 1573, 815, 3260, 6127, 3325, 2164, 4663, 5971, 4399, 5588, 5422, 19, 842, 3519, 1174, 2934, 5208, 2037, 5658, 6998, 6832, 3763, 3299, 3333, 3919, 911, 5064, 6218, 1498, 507, 5822, 5571, 6920, 6023, 383, 6473, 3364, 3734, 4858, 6865, 1420, 4788, 1070, 5033, 5463, 1973, 5199, 58, 3558, 550, 3108, 4823, 1267, 6058, 2332, 878, 3523, 481, 6371, 6664, 3466, 4209, 3036, 5048, 3935, 5336, 2559, 6849, 1725, 4527, 3348, 4462, 205, 1230, 5273, 3124, 1119, 5859, 985, 74, 3962, 3061, 6633, 356, 5320, 6019, 1676, 4474, 2723, 3098, 3132, 6330, 3077, 585, 4835, 1764, 3309, 244, 1271, 5662, 497, 3866, 3020, 6222]; uint16[] zone2 = [uint16(3721), 2833, 729, 6173, 6935, 4908, 2976, 816, 5163, 4322, 5860, 1570, 4288, 5925, 2649, 5476, 5026, 5708, 6827, 4549, 791, 3633, 2188, 4725, 142, 3849, 841, 5071, 457, 1462, 1032, 3330, 2171, 2521, 2034, 6974, 2464, 6427, 1618, 6077, 1248, 3275, 857, 5572, 1862, 154, 1531, 5964, 2258, 6535, 3222, 6020, 3672, 6889, 1566, 553, 3808, 945, 4621, 5933, 4271, 1589, 1073, 1264, 3259, 3609, 4965, 2018, 2624, 5948, 197, 6237, 3035, 482, 6372, 20, 2761, 4932, 4461, 1233, 4174, 4877, 5765, 3598, 6260, 6630, 3961, 5509, 2736, 5159, 4748, 3577, 1225, 2059, 4861, 4498, 6626, 3424, 586, 2370, 5231, 5661, 1622, 1788, 1272, 1337, 5724, 6221, 3189, 2262, 5118, 2327, 36, 3536, 6743, 3111, 119, 6313, 2350, 3812, 2215, 3957, 6606, 3404, 2096, 4841, 6485, 1205, 230, 660, 5616, 4904, 2079, 6893, 2583, 5246, 5092, 1481, 3146, 3516, 3453, 1194, 6651, 3900, 2612, 5587, 6082, 4545, 1317, 4115, 6981, 5211, 5641, 4953, 4400, 637, 3795, 2887, 1497, 5084, 2741, 2254, 3015, 5342, 4103, 6581, 1244, 271, 4046, 3629, 5657, 2192, 1839, 1993, 3107, 4787, 6240, 2653, 3941, 2203, 733, 6169, 2080, 2595, 676, 3384, 1643, 6186, 1213, 3039, 461, 5944, 1907, 932, 5417, 3486, 6684, 524, 6954, 5381, 2444, 2917, 1792, 2852, 1287, 965, 436, 4601, 123, 5155, 3982, 1815, 5505, 2940, 4197, 4894, 5786, 2556, 2106, 2805, 3078, 4247, 1415, 5905, 2239, 1803, 5143, 135, 5840, 3097, 565, 4928, 2405, 3644, 3214, 6503, 3351, 924, 3185, 477, 4705, 532, 498, 861, 4586, 2517, 1291, 4093, 2844, 4587, 3242, 2453, 6806, 2516, 5379, 6105, 4138, 3307, 3887, 5400, 476, 533, 6739, 6693, 6369, 4929, 1678, 6017, 3700, 708, 3350, 358, 6851, 6781, 421, 2392, 83, 837, 4303, 1101, 564, 4753, 3203, 4196, 2557, 5338, 2107, 6144, 3346, 6514, 3716, 5011, 95, 3595, 6282, 3080, 5154, 3829, 6955, 1639, 4591, 3254, 6543, 3311, 6113, 3038, 4207, 6390, 4657, 460, 5416, 933, 3487, 1510, 2828, 1357, 2594, 5601, 677, 1642, 4010, 5178, 1992, 56, 2347, 6304, 4769, 1091, 4293, 6241, 6611, 5197, 948, 5343, 6996, 765, 1750, 2890, 3628, 2469, 6703, 4694, 3151, 1880, 2255, 6646, 2869, 773, 323, 5640, 4952, 4401, 1603, 4051, 5569, 1879, 3844, 2306, 6345, 3147, 4728, 6200, 2613, 5586, 5752, 3686, 1341, 6191, 661, 2428, 5617, 6938, 3540, 6742, 1087, 118, 5494, 40, 3813, 2214, 5928, 1438, 6257, 6220, 6670, 2633, 2263, 2776, 5119, 2326, 6559, 4134, 6109, 3976, 5908, 6627, 3425, 587, 3075, 6762, 3130, 138, 60, 2721, 3219, 1674, 3649, 6918, 2058, 354, 6261, 3960, 76, 4749, 4899, 1398, 1662, 207, 1727, 6518, 4525, 6148, 1459, 3034, 3521, 529, 3171, 483, 3872, 6959, 5676, 4572, 1770, 6758, 552, 1137, 4335, 3809, 801, 5461, 944, 1971, 417, 1422, 1072, 5898, 6867, 2577, 5318, 2127, 3366, 6021, 2961, 3673, 2062, 2598, 4362, 4732, 1530, 3018, 1475, 5965, 6099, 293, 6133, 6830, 6975, 3274, 1526, 513, 6719, 4724, 6349, 3848, 1199, 1463, 6430, 2473, 2189, 817, 5532, 5162, 5498, 114, 1571, 4289, 3409, 401, 2648, 5027, 3720, 2832, 682, 6871, 2074, 4909, 6467, 397, 2977, 5169, 2356, 5493, 1829, 4282, 5885, 6179, 2993, 723, 5305, 2585, 1653, 6196, 5997, 6342, 2751, 2301, 10, 1891, 5581, 6207, 5978, 1192, 1468, 4390, 5352, 6987, 3286, 6084, 324, 631, 3793, 261, 2028, 5217, 5647, 2182, 2747, 3855, 4739, 3443, 1184, 6211, 2602, 1307, 4555, 4806, 5201, 4294, 5485, 3947, 1079, 6616, 1429, 1700, 3678, 220, 6883, 5606, 5411, 5041, 6682, 488, 3480, 522, 1844, 2291, 6401, 2012, 6952, 5692, 2507, 1281, 6114, 3438, 4607, 3068, 3592, 963, 2383, 1540, 4312, 6905, 1669, 3341, 2803, 6513, 5295, 5450, 975, 6786, 4611, 830, 3992, 5145, 4187, 6440, 2116, 6505, 2815, 4492, 1444, 4646, 2792, 5407, 534, 1501, 4353, 6694, 1782, 3245, 6552, 5309, 3727, 2835, 6175, 390, 3232, 6899, 2423, 6933, 6319, 543, 5470, 955, 1063, 5923, 282, 778, 2531, 6821, 4959, 6964, 2474, 2024, 1258, 3265, 797, 2927, 5562, 847, 5098, 4723, 4373, 1171, 451, 3009, 4236, 2177, 5718, 6564, 6071, 2462, 2198, 1167, 502, 851, 5124, 1921, 4220, 693, 6499, 3361, 6163, 3731, 2435, 6026, 6476, 5489, 1560, 410, 5036, 4963, 5221, 1798, 607, 1327, 312, 4575, 3199, 6231, 892, 938, 2767, 1848, 6724, 3526, 3176, 1665, 3208, 200, 2419, 5626, 5333, 5299, 4522, 4172, 1370, 3967, 6266, 1059, 3434, 3121, 980, 71, 3988, 4888, 216, 1389, 646, 1673, 353, 4534, 88, 2376, 996, 6335, 611, 2458, 6948, 5372, 5688, 5722, 4563, 4133, 304, 1331, 3926, 2264, 6227, 3475, 6698, 492, 3863, 2771, 3927, 885, 6226, 186, 1449, 3474, 6363, 539, 3862, 4077, 5236, 2459, 5666, 4974, 5373, 4098, 4132, 1330, 997, 2377, 5518, 3835, 5631, 4889, 217, 1222, 647, 1388, 1672, 352, 6158, 4165, 5774, 2224, 1058, 3435, 1664, 4935, 5762, 714, 3462, 3198, 3931, 2766, 3874, 1849, 5670, 606, 1326, 4574, 4299, 4276, 5467, 942, 368, 6162, 2822, 2121, 2967, 3675, 4734, 915, 4671, 5349, 6836, 2875, 2930, 3622, 780, 2033, 2199, 846, 5563, 1873, 5099, 4722, 145, 1170, 5975, 1035, 4237, 903, 5426, 3321, 329, 3771, 2160, 2475, 2025, 3634, 1609, 6318, 542, 1824, 5021, 5758, 684, 3663, 3399, 6461, 3244, 3614, 2906, 6103, 309, 3751, 4094, 2843, 1296, 759, 2510, 3182, 3028, 866, 5543, 1500, 1150, 6695, 3213, 2052, 2547, 5282, 1941, 4610, 132, 4305, 6768, 5144, 6904, 4939, 5781, 6007, 3205, 1238, 6457, 3655, 1668, 4190, 4485, 3340, 1687, 6142, 2802, 3710, 2101, 1404, 1054, 3069, 2382, 2697, 3086, 124, 2910, 3602, 4597, 1795, 6050, 2443, 4981, 5739, 2506, 6545, 3747, 935, 1900, 4201, 4651, 3481, 6729, 5312, 2087, 5742, 2984, 4153, 364, 6494, 3679, 1644, 3229, 6882, 2592, 108, 3550, 6752, 2654, 5191, 5938, 6139, 333, 6093, 6569, 4554, 6990, 5345, 2480, 2195, 5200, 3784, 1243, 1869, 3854, 3157, 3442, 919, 5353, 1740, 325, 4407, 3792, 2880, 2029, 2479, 2183, 6969, 3511, 2750, 2300, 11, 3907, 1890, 3004, 3454, 4391, 3680, 2992, 722, 6528, 5304, 5241, 4000, 3395, 46, 3815, 1081, 3546, 4283, 6314, 2642, 5187, 2143, 6100, 3752, 6550, 6045, 4582, 6946, 5669, 5813, 1153, 6696, 3928, 1915, 5405, 189, 4214, 2817, 3705, 1692, 1368, 4869, 2544, 6911, 3640, 648, 5147, 1104, 4306, 3569, 4756, 4243, 1041, 6784, 1411, 2102, 4486, 6141, 3206, 4469, 5782, 577, 4310, 127, 1112, 3986, 824, 2381, 1407, 432, 2856, 3314, 2010, 5385, 2913, 609, 6403, 3251, 1846, 5556, 5106, 1145, 3178, 3482, 170, 520, 4202, 5413, 5254, 2591, 4916, 6182, 6478, 3380, 4015, 1352, 5741, 1581, 4629, 5038, 2207, 53, 6751, 2895, 1240, 5203, 5716, 4804, 2179, 4557, 760, 1885, 1493, 4691, 3857, 2745, 5080, 5215, 2180, 5645, 6439, 1743, 326, 1313, 2495, 4812, 6655, 4668, 3904, 2246, 2753, 5096, 1485, 3512, 5242, 6897, 4845, 2092, 5757, 5307, 2991, 3729, 2211, 3400, 1597, 3545, 6317, 1128, 3816, 2289, 32, 490, 3532, 6730, 6225, 3027, 4648, 185, 5409, 2636, 1919, 886, 4561, 1333, 5235, 2909, 6767, 1558, 994, 2661, 3420, 3070, 2548, 5777, 1671, 2698, 6264, 4609, 5448, 1958, 5018, 2227, 4520, 347, 5761, 5274, 5624, 2948, 652, 6376, 3898, 6399, 5736, 6819, 310, 1775, 4062, 1630, 4961, 1974, 941, 1427, 6618, 1562, 107, 5171, 4449, 3676, 5608, 6927, 691, 6161, 3733, 6531, 4222, 1020, 5960, 4672, 445, 1923, 1889, 5599, 2319, 5126, 150, 3508, 6970, 783, 6073, 2899, 6566, 2876, 6136, 900, 5425, 6659, 1036, 6209, 146, 1489, 1173, 5560, 795, 6435, 6966, 5649, 2163, 2499, 6120, 2860, 3772, 5921, 5472, 1962, 2708, 812, 111, 4326, 1574, 541, 5864, 2421, 392, 6198, 2837, 1348, 2134, 2420, 2973, 3231, 239, 6033, 6526, 6176, 1349, 4632, 405, 956, 5536, 3118, 1125, 4777, 5865, 794, 2924, 2532, 6822, 6121, 2861, 3773, 6571, 5074, 1467, 1037, 4235, 5832, 1172, 5561, 6072, 1758, 1308, 6834, 4809, 2524, 4223, 4389, 917, 1922, 2318, 1534, 3509, 4736, 385, 2436, 2089, 6863, 2123, 6160, 1076, 5873, 1099, 4331, 805, 5520, 6818, 3319, 1324, 311, 254, 6727, 487, 1148, 3175, 2621, 192, 6662, 3030, 4521, 346, 1689, 4872, 5275, 1236, 6009, 3821, 2733, 983, 3572, 6265, 595, 5019, 4167, 1735, 4022, 4472, 645, 4188, 4921, 5633, 5849, 6336, 1109, 2725, 3837, 3972, 6623, 4833, 5664, 1627, 2772, 868, 3533, 6731, 3476, 5408, 2210, 409, 3051, 1596, 5869, 1129, 3114, 44, 235, 1200, 3397, 1650, 6879, 6480, 370, 1715, 720, 3006, 6654, 4393, 3456, 2617, 1938, 3905, 5078, 3840, 6711, 2181, 4405, 4055, 1742, 6087, 4110, 1312, 6984, 2251, 2601, 4385, 6707, 1538, 6357, 1492, 4690, 3786, 6584, 624, 1611, 2197, 2528, 6838, 6992, 5347, 3339, 331, 4106, 4556, 6245, 4278, 3047, 6615, 3417, 2656, 2343, 3102, 3552, 5255, 5605, 2969, 673, 4014, 1703, 3694, 2986, 6496, 1847, 171, 5804, 6394, 5412, 2787, 4080, 1778, 2154, 4983, 2011, 2441, 6951, 4595, 258, 3084, 1543, 2695, 3968, 2380, 433, 5916, 4604, 2553, 1685, 3712, 6510, 3207, 6455, 3657, 5629, 2416, 1806, 5516, 68, 2683, 1105, 4307, 130, 1555, 5845, 4612, 5453, 2396, 1693, 4491, 1369, 4868, 5280, 2400, 649, 6013, 537, 864, 1914, 1447, 6678, 3180, 5957, 5687, 2841, 4096, 3753, 6551, 1781, 4583, 4429, 2904, 3616, 6947, 2457, 5238, 496, 3164, 2630, 6389, 6673, 2519, 3758, 1620, 245, 1270, 5233, 2688, 3830, 4249, 5008, 1362, 707, 4863, 5634, 212, 6018, 642, 3125, 6777, 2364, 75, 2221, 438, 2108, 2558, 1724, 3349, 1661, 4033, 5272, 3172, 6665, 6235, 896, 1909, 2626, 316, 746, 1773, 4822, 6059, 603, 5931, 4273, 5177, 2718, 1134, 101, 2061, 228, 2962, 1358, 6864, 2574, 2124, 910, 1026, 5966, 1499, 1533, 4418, 785, 2036, 6976, 2523, 3762, 290, 6560, 3298, 4398, 4232, 5073, 906, 1933, 2309, 3518, 5835, 4377, 6599, 2923, 6576, 286, 1749, 2165, 5474, 1067, 4265, 402, 1088, 5862, 1572, 5161, 6034, 3236, 6937, 5618, 2427, 2132, 2831, 3723, 6521, 681, 3689, 6106, 3304, 1293, 3754, 4838, 2145, 5395, 3241, 2903, 619, 38, 863, 2283, 1505, 5815, 3168, 160, 4212, 1010, 2811, 3353, 4183, 6014, 5268, 6917, 5638, 3979, 971, 80, 2391, 5004, 6278, 1378, 3345, 2807, 6844, 5291, 6901, 5784, 208, 2942, 79, 2692, 571, 3129, 1114, 5911, 1051, 6794, 5442, 96, 967, 2153, 6813, 6110, 1790, 3257, 2016, 6686, 5803, 3892, 5045, 1006, 1456, 3191, 4654, 463, 674, 6184, 1641, 1211, 6887, 5602, 4910, 6868, 1354, 3693, 3943, 5897, 6242, 6612, 1092, 3555, 1568, 5655, 789, 1246, 273, 2939, 6429, 1303, 1753, 4802, 2485, 4678, 6215, 4228, 1883, 5069, 2256, 5439, 3914, 2313, 5086, 859, 4697, 6350, 4052, 1250, 5643, 2169, 5356, 2539, 4814, 3778, 1745, 3282, 320, 2610, 2240, 3451, 4394, 6653, 1196, 459, 1483, 6346, 5839, 2755, 5614, 5244, 232, 6038, 1657, 398, 662, 6468, 2997, 4140, 3685, 6487, 3406, 1591, 5881, 5478, 2647, 4286, 6741, 6311, 6605, 4638, 6255, 4268, 5880, 1969, 5496, 1986, 819, 3542, 1085, 6740, 4907, 6890, 4004, 399, 3391, 2996, 3684, 4141, 2611, 3903, 1894, 3000, 6652, 5992, 3846, 634, 2884, 6594, 1251, 4950, 5642, 2538, 4815, 6081, 4383, 6214, 5068, 5592, 2607, 5087, 858, 4696, 1494, 6078, 4045, 2892, 4550, 4803, 5341, 5195, 6243, 1586, 5879, 4442, 3387, 2596, 5253, 2579, 5746, 4854, 4340, 5802, 1512, 874, 5551, 5101, 931, 2781, 5044, 4205, 5947, 4655, 3190, 2152, 6812, 4086, 2851, 1284, 6111, 6404, 3606, 4593, 5678, 5382, 2369, 989, 2739, 5506, 3578, 6280, 570, 5855, 4747, 1115, 435, 4602, 1400, 3597, 1050, 2386, 6146, 4481, 1379, 2806, 4878, 2410, 5785, 209, 4194, 2943, 136, 1103, 3094, 5843, 5510, 2685, 3997, 3978, 2390, 970, 589, 6783, 1046, 1416, 5906, 423, 4182, 5793, 6916, 5639, 5117, 1154, 4643, 3186, 5951, 474, 1441, 6384, 1912, 1338, 3305, 6557, 2847, 6804, 5394, 3240, 4585, 1787, 2902, 6412, 4458, 395, 4008, 5249, 2563, 680, 1965, 4321, 1089, 4771, 5530, 1820, 2471, 6961, 6598, 792, 2922, 6577, 2867, 4819, 1031, 1898, 1932, 1877, 5567, 4726, 511, 3149, 141, 4419, 6424, 6977, 2488, 2522, 291, 6561, 6131, 1924, 1027, 4225, 1477, 4675, 5988, 1162, 1861, 5121, 2060, 3221, 229, 3671, 679, 696, 6536, 2125, 415, 5176, 1836, 803, 1565, 1135, 100, 4337, 4120, 747, 1288, 4570, 5731, 4989, 4065, 2918, 6408, 4659, 6234, 1908, 2627, 2109, 3718, 340, 4177, 655, 1660, 5623, 4931, 3574, 2735, 1363, 4531, 706, 1733, 4862, 5265, 1226, 62, 3562, 6625, 3427, 5009, 5459, 1949, 2148, 5377, 5727, 1334, 4136, 4423, 4073, 5232, 5398, 6367, 1158, 3165, 6737, 5818, 1508, 2324, 3923, 3889, 6672]; // struct to store a stake's token, owner, and earning values struct Stake { uint24 tokenId; uint48 timestamp; address owner; } event TransferReceived(address _from, uint _amount); event NFTStaked(address owner, uint256 tokenId, uint256 value); event NFTUnstaked(address owner, uint256 tokenId, uint256 value); event Claimed(address owner, uint256 amount); event TransferSent(address _from, address _destAddr, uint _amount); // reference to the Block NFT contract ERC721Enumerable nft; IERC20 token; address private constant nftcontractaddress = 0xBfcE321046aaf5879c74cc4555Db8fd9629fde92; // maps tokenId to stake mapping(uint256 => Stake) public vault; constructor(ERC721Enumerable _nft, IERC20 _token) { contractowner = msg.sender; nft = _nft; token = _token; } receive() payable external { erc20balance += msg.value; emit TransferReceived(msg.sender, msg.value); } function stake(uint256[] calldata tokenIds) external { uint256 tokenId; totalStaked += tokenIds.length; for (uint i = 0; i < tokenIds.length; i++) { tokenId = tokenIds[i]; require(nft.ownerOf(tokenId) == msg.sender, "not your token"); require(vault[tokenId].tokenId == 0, 'already staked'); nft.transferFrom(msg.sender, address(this), tokenId); emit NFTStaked(msg.sender, tokenId, block.timestamp); vault[tokenId] = Stake({ owner: msg.sender, tokenId: uint24(tokenId), timestamp: uint48(block.timestamp) }); } } function _unstakeMany(address account, uint256[] calldata tokenIds) internal { uint256 tokenId; totalStaked -= tokenIds.length; for (uint i = 0; i < tokenIds.length; i++) { tokenId = tokenIds[i]; Stake memory staked = vault[tokenId]; require(staked.owner == msg.sender, "not an owner"); delete vault[tokenId]; emit NFTUnstaked(account, tokenId, block.timestamp); nft.transferFrom(address(this), account, tokenId); } } function claim(uint256[] calldata tokenIds) external { _claim(msg.sender, tokenIds, false); } function claimForAddress(address account, uint256[] calldata tokenIds) external { _claim(account, tokenIds, false); } function unstake(uint256[] calldata tokenIds) external { _claim(msg.sender, tokenIds, true); } function _zonerewards(uint256 _tokenId) internal view returns(uint256){ for(uint i=0; i<2000; i++){ if (zone2[i] == _tokenId) { return zone2reward; }else if(zone3[i] == _tokenId){ return zone3reward; }else if(i<1000){ if (zone4[i] == _tokenId){ return zone4reward; } } } return zone1reward; } function _billboardrewards(uint256 _tokenId) internal view returns(uint256){ for(uint i=0; i<large.length; i++){ if(large[i] == _tokenId){ return largereward; } } for(uint i=0; i<small.length; i++){ if(small[i] == _tokenId){ return smallreward; } } return 0; } function _hightrafficrewards(uint256 _tokenId) internal view returns(uint256){ for(uint i=0; i<hightraffic.length; i++){ if(hightraffic[i] == _tokenId){ return hightrafficreward; } } return 0; } function _claim(address account, uint256[] calldata tokenIds, bool _unstake) internal { uint256 tokenId; uint256 earned = 0; uint256 zone; uint256 billboard; uint256 hightrafficr; for (uint i = 0; i < tokenIds.length; i++) { tokenId = tokenIds[i]; Stake memory staked = vault[tokenId]; require(staked.owner == account, "not an owner"); uint256 stakedAt = staked.timestamp; zone = _zonerewards(tokenId); billboard = _billboardrewards(tokenId); hightrafficr= _hightrafficrewards(tokenId); if (tokenId<=3780) { earned =((standardbase + (standardbase*zone/100) + (standardbase*billboard/100) + (standardbase*hightrafficr/100))*(block.timestamp - stakedAt))/ 86400; }else if (tokenId<=6160){ earned =((deluxebase + (deluxebase*zone/100) + (deluxebase*billboard/100) + (deluxebase*hightrafficr/100))*(block.timestamp - stakedAt))/ 86400; }else if (tokenId<=6860){ earned =((villabase + (villabase*zone/100) + (villabase*billboard/100) + (villabase*hightrafficr/100))*(block.timestamp - stakedAt))/ 86400; }else if (tokenId<=7000){ earned =((executivebase + (executivebase*zone/100) + (executivebase*billboard/100) + (executivebase*hightrafficr/100))*(block.timestamp - stakedAt))/ 86400; } vault[tokenId] = Stake({ owner: account, tokenId: uint24(tokenId), timestamp: uint48(block.timestamp) }); } if (earned > 0) { token.transfer(account, earned); } if (_unstake) { _unstakeMany(account, tokenIds); } emit Claimed(account, earned); } function earningInfo(address account, uint256[] calldata tokenIds) external view returns (uint256[1] memory info) { uint256 tokenId; uint256 earned = 0; uint256 zone; uint256 billboard; uint256 hightrafficr; for (uint i = 0; i < tokenIds.length; i++) { tokenId = tokenIds[i]; Stake memory staked = vault[tokenId]; require(staked.owner == account, "not an owner"); uint256 stakedAt = staked.timestamp; zone = _zonerewards(tokenId); billboard = _billboardrewards(tokenId); hightrafficr= _hightrafficrewards(tokenId); if (tokenId<=3780) { earned =((standardbase + (standardbase*zone/100) + (standardbase*billboard/100) + (standardbase*hightrafficr/100))*(block.timestamp - stakedAt))/ 86400; }else if (tokenId<=6160){ earned =((deluxebase + (deluxebase*zone/100) + (deluxebase*billboard/100) + (deluxebase*hightrafficr/100))*(block.timestamp - stakedAt))/ 86400; }else if (tokenId<=6860){ earned =((villabase + (villabase*zone/100) + (villabase*billboard/100) + (villabase*hightrafficr/100))*(block.timestamp - stakedAt))/ 86400; }else if (tokenId<=7000){ earned =((executivebase + (executivebase*zone/100) + (executivebase*billboard/100) + (executivebase*hightrafficr/100))*(block.timestamp - stakedAt))/ 86400; } } if (earned > 0) { return [earned]; } } function balanceOf(address account) public view returns (uint256) { uint256 balance = 0; uint256 supply = nft.totalSupply(); for(uint i = 1; i <= supply; i++) { if (vault[i].owner == account) { balance += 1; } } return balance; } function tokensOfOwner(address account) public view returns (uint256[] memory ownerTokens) { uint256 supply = nftcontract(nftcontractaddress).maxSupply(); uint256[] memory tmp = new uint256[](supply); uint256 index = 0; for(uint tokenId = 1; tokenId <= supply; tokenId++) { if (vault[tokenId].owner == account) { tmp[index] = vault[tokenId].tokenId; index +=1; } } uint256[] memory tokens = new uint256[](index); for(uint i = 0; i < index; i++) { tokens[i] = tmp[i]; } return tokens; } function ercbalance() public view returns (uint cbalance) { return token.balanceOf(address(this)); } function withdraw(uint256 withrawamount) public { require(msg.sender == contractowner, "Only owner can withdraw funds"); require(withrawamount <= erc20balance, "balance is low"); token.transfer(msg.sender, withrawamount); erc20balance -= withrawamount; emit TransferSent(msg.sender, msg.sender, withrawamount); } function onERC721Received( address, address from, uint256, bytes calldata ) external pure override returns (bytes4) { require(from == address(0x0), "Cannot send nfts to Vault directly"); return IERC721Receiver.onERC721Received.selector; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract ERC721Enumerable","name":"_nft","type":"address"},{"internalType":"contract IERC20","name":"_token","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"NFTStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"NFTUnstaked","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":false,"internalType":"address","name":"_from","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"TransferReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_from","type":"address"},{"indexed":false,"internalType":"address","name":"_destAddr","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"TransferSent","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"claimForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractowner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deluxebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"earningInfo","outputs":[{"internalType":"uint256[1]","name":"info","type":"uint256[1]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"erc20balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ercbalance","outputs":[{"internalType":"uint256","name":"cbalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"executivebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hightrafficreward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"largereward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"smallreward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"standardbase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"ownerTokens","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"vault","outputs":[{"internalType":"uint24","name":"tokenId","type":"uint24"},{"internalType":"uint48","name":"timestamp","type":"uint48"},{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"villabase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"withrawamount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"zone1reward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"zone2reward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"zone3reward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"zone4reward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405260026004556002600555600360065560056007556023600855600f6009556032600a556801a055690d9db80000600b556803cb71f51fc5580000600c55680821ab0d4414980000600d556815af1d78b58c400000600e55604051806125800160405280611ad661ffff1661ffff168152602001611b1761ffff16815260200161194261ffff168152602001611b3261ffff1681526020016119a261ffff168152602001611b3e61ffff16815260200161191b61ffff168152602001611ad261ffff16815260200161181561ffff16815260200161198761ffff16815260200161194661ffff168152602001611b0b61ffff168152602001611ae961ffff1681526020016118a561ffff168152602001611b2e61ffff1681526020016118e461ffff16815260200161187461ffff168152602001611b0761ffff168152602001611a6b61ffff168152602001611a0f61ffff168152602001611a5761ffff168152602001611b1b61ffff168152602001611aed61ffff168152602001611b4561ffff168152602001611b5561ffff168152602001611b4261ffff1681526020016119d261ffff16815260200161181961ffff168152602001611ae561ffff1681526020016118f761ffff168152602001611a1c61ffff168152602001611b2a61ffff168152602001611a9b61ffff168152602001611af761ffff168152602001611b0361ffff16815260200161196761ffff168152602001611a2461ffff1681526020016118e061ffff168152602001611b1e61ffff168152602001611a9761ffff16815260200161190a61ffff168152602001611b1f61ffff1681526020016118f261ffff168152602001611b0261ffff16815260200161192f61ffff168152602001611ac361ffff168152602001611af661ffff168152602001611b2b61ffff16815260200161198f61ffff1681526020016118f661ffff16815260200161181861ffff168152602001611ae461ffff16815260200161182b61ffff1681526020016118a061ffff168152602001611b5861ffff168152602001611b5461ffff168152602001611b4361ffff168152602001611a2f61ffff1681526020016119b361ffff168152602001611b4461ffff1681526020016118c961ffff168152602001611a3b61ffff16815260200161183861ffff1681526020016119fa61ffff16815260200161195461ffff168152602001611b1a61ffff168152602001611aec61ffff168152602001611a5661ffff1681526020016118a861ffff168152602001611a0e61ffff16815260200161188561ffff168152602001611b0661ffff1681526020016119e761ffff168152602001611a0a61ffff168152602001611b2f61ffff168152602001611ad361ffff168152602001611b0a61ffff168152602001611ae861ffff168152602001611b3f61ffff16815260200161191a61ffff168152602001611a3f61ffff168152602001611aaa61ffff168152602001611b3361ffff168152602001611ad761ffff168152602001611b1661ffff16815260200161194361ffff168152602001611aef61ffff16815260200161183461ffff168152602001611b4b61ffff168152602001611b3861ffff168152602001611a3061ffff1681526020016119a861ffff168152602001611b4f61ffff16815260200161186661ffff1681526020016119d861ffff16815260200161195f61ffff168152602001611ae361ffff168152602001611b1161ffff168152602001611b2861ffff168152602001611aa161ffff168152602001611af961ffff168152602001611a8261ffff16815260200161192861ffff168152602001611b0161ffff16815260200161196961ffff168152602001611b2061ffff168152602001611a9161ffff168152602001611adc61ffff16815260200161197d61ffff16815260200161181f61ffff168152602001611af361ffff168152602001611b1561ffff168152602001611b3461ffff168152602001611b3c61ffff168152602001611a3461ffff16815260200161196361ffff168152602001611b0d61ffff16815260200161185761ffff168152602001611afd61ffff16815260200161196d61ffff168152602001611b2461ffff16815260200161185361ffff168152602001611a1461ffff1681526020016118db61ffff168152602001611b2561ffff168152602001611afc61ffff168152602001611a0461ffff1681526020016118e761ffff16815260200161181261ffff16815260200161198461ffff168152602001611acd61ffff168152602001611b0c61ffff168152602001611ab461ffff168152602001611b3d61ffff168152602001611aa461ffff168152602001611b3561ffff168152602001611add61ffff168152602001611af261ffff168152602001611b1461ffff168152602001611b2161ffff16815260200161191061ffff16815260200161199961ffff16815260200161192961ffff168152602001611b0061ffff168152602001611a8361ffff168152602001611a7061ffff168152602001611af861ffff16815260200161190061ffff168152602001611b2961ffff168152602001611a1b61ffff168152602001611ae261ffff168152602001611b1061ffff168152602001611a6061ffff1681526020016119d961ffff168152602001611b4e61ffff16815260200161184261ffff168152602001611b4a61ffff168152602001611b3961ffff168152602001611a3961ffff16815260200161182261ffff16815260200161198061ffff168152602001611aee61ffff1681526020016118aa61ffff168152602001611b2261ffff168152602001611aff61ffff168152602001611a8061ffff168152602001611afb61ffff16815260200161188f61ffff168152602001611b2661ffff168152602001611ae161ffff16815260200161196161ffff1681526020016119d661ffff168152602001611b5161ffff16815260200161184561ffff1681526020016118d461ffff16815260200161192761ffff168152602001611b4961ffff16815260200161183d61ffff1681526020016119ff61ffff168152602001611af161ffff168152602001611ade61ffff16815260200161195161ffff1681526020016118ad61ffff168152602001611aca61ffff1681526020016118b161ffff1681526020016119ea61ffff16815260200161193a61ffff168152602001611a4661ffff168152602001611aa361ffff168152602001611b0f61ffff168152602001611ace61ffff168152602001611b3a61ffff168152602001611b3661ffff168152602001611b4d61ffff168152602001611b1361ffff16815260200161197f61ffff168152602001611ada61ffff168152602001611b1261ffff16815260200161193f61ffff16815260200161197e61ffff168152602001611adb61ffff16815260200161192261ffff168152602001611b3761ffff168152602001611b4c61ffff168152602001611b3b61ffff168152602001611b0e61ffff168152602001611acf61ffff1681526020016119db61ffff168152602001611aa261ffff16815260200161188161ffff16815260200161186d61ffff16815260200161183361ffff168152602001611af061ffff168152602001611adf61ffff16815260200161195061ffff168152602001611a3761ffff168152602001611b4861ffff168152602001611ab661ffff168152602001611b5061ffff168152602001611ae061ffff16815260200161194f61ffff1681526020016118fa61ffff168152602001611a9e61ffff168152602001611b2761ffff168152602001611afa61ffff168152602001611afe61ffff1681526020016118ee61ffff168152602001611a1661ffff16815260200161199761ffff168152602001611b2361ffff168152602001611a5061ffff1681526020016119e061ffff168152602001611a0961ffff16815260200161190961ffff168152602001611b0961ffff168152602001611ad061ffff168152602001611b4061ffff168152602001611b5761ffff168152602001611b3061ffff1681526020016119b061ffff16815260200161187261ffff168152602001611b1961ffff168152602001611ad861ffff168152602001611a9561ffff168152602001611b1c61ffff168152602001611b0561ffff16815260200161188661ffff168152602001611af561ffff16815260200161193461ffff168152602001611a9d61ffff168152602001611b2c61ffff168152602001611a1e61ffff16815260200161182861ffff168152602001611ae761ffff168152602001611ad461ffff1681526020016118a361ffff1681526020016119b761ffff16815260200161191d61ffff168152602001611b5361ffff16815260200161184761ffff168152602001611b4761ffff1681526020016118ca61ffff168152602001611aeb61ffff16815260200161194461ffff16815260200161195761ffff1681526020016119cd61ffff168152602001611a5461ffff1681526020016118a661ffff168152602001611aea61ffff168152602001611b4661ffff16815260200161184661ffff168152602001611b5261ffff1681526020016119d561ffff168152602001611a6461ffff168152602001611ae661ffff168152602001611ad561ffff16815260200161195a61ffff16815260200161190461ffff168152602001611b2d61ffff168152602001611af461ffff168152602001611a7f61ffff16815260200161188761ffff168152602001611b0461ffff16815260200161199d61ffff168152602001611b1d61ffff168152602001611b1861ffff168152602001611ad961ffff16815260200161187361ffff168152602001611b3161ffff1681526020016119c661ffff1681526020016119b161ffff168152602001611aa861ffff168152602001611b4161ffff168152602001611b5661ffff168152602001611ab061ffff168152602001611b0861ffff168152602001611ad161ffff1681526020016118b661ffff16815260200161193161ffff16815260200161188361ffff16815250600f9061012c62000e8c92919062010a33565b5060405180611f000160405280611aab61ffff1661ffff168152602001611aaf61ffff168152602001611a6761ffff168152602001611a4261ffff1681526020016119e661ffff1681526020016118b561ffff16815260200161188461ffff1681526020016118bd61ffff16815260200161184d61ffff1681526020016118dc61ffff16815260200161182e61ffff1681526020016118c861ffff1681526020016119c561ffff168152602001611a2e61ffff1681526020016118d061ffff1681526020016119f761ffff16815260200161184961ffff1681526020016118a161ffff16815260200161186061ffff16815260200161182a61ffff168152602001611a8c61ffff16815260200161188b61ffff168152602001611a7b61ffff16815260200161193261ffff16815260200161197361ffff16815260200161189761ffff1681526020016118f361ffff16815260200161199a61ffff168152602001611a9661ffff168152602001611a5361ffff168152602001611a2561ffff1681526020016118e161ffff16815260200161196661ffff16815260200161193361ffff168152602001611a8d61ffff168152602001611a7a61ffff1681526020016118b861ffff16815260200161195c61ffff16815260200161186161ffff1681526020016119d361ffff1681526020016119f661ffff1681526020016119cf61ffff16815260200161187161ffff1681526020016118dd61ffff168152602001611a4f61ffff16815260200161199f61ffff1681526020016119e361ffff168152602001611a6a61ffff1681526020016118b461ffff168152602001611a7661ffff168152602001611a4361ffff168152602001611a6661ffff168152602001611aae61ffff1681526020016119af61ffff16815260200161181c61ffff1681526020016118ab61ffff1681526020016119c861ffff16815260200161195361ffff16815260200161198161ffff168152602001611a3861ffff16815260200161183f61ffff168152602001611a0161ffff1681526020016118fd61ffff168152602001611a1a61ffff16815260200161190161ffff168152602001611a8661ffff16815260200161188d61ffff16815260200161193861ffff16815260200161197161ffff16815260200161189561ffff168152602001611a7161ffff168152602001611ac861ffff1681526020016118af61ffff1681526020016119ac61ffff16815260200161181361ffff16815260200161199461ffff168152602001611a4461ffff1681526020016118e661ffff1681526020016118b361ffff16815260200161189161ffff1681526020016119dc61ffff1681526020016118bf61ffff16815260200161185261ffff168152602001611a6c61ffff1681526020016118be61ffff16815260200161187b61ffff1681526020016119ed61ffff1681526020016118b261ffff16815260200161189061ffff16815260200161185661ffff168152602001611a4561ffff1681526020016118d761ffff168152602001611a3561ffff1681526020016119ad61ffff16815260200161192461ffff1681526020016118ae61ffff168152602001611a5c61ffff16815260200161197c61ffff168152602001611a9061ffff168152602001611a2761ffff168152602001611ac961ffff16815260200161193961ffff168152602001611a8761ffff16815260200161188c61ffff1681526020016118eb61ffff168152602001611a4961ffff16815260200161182561ffff1681526020016119a961ffff1681526020016119ba61ffff1681526020016118d361ffff1681526020016118c761ffff168152602001611a0061ffff16815260200161183561ffff1681526020016119c961ffff16815260200161186b61ffff16815260200161190f61ffff168152602001611a2861ffff168152602001611a1761ffff168152602001611ac661ffff16815260200161192a61ffff168152602001611aba61ffff16815260200161196f61ffff16815260200161187c61ffff16815260200161190361ffff1681526020016118fb61ffff16815260200161189d61ffff168152602001611a5f61ffff1681526020016119b961ffff168152602001611ab761ffff1681526020016119f361ffff168152602001611a3661ffff16815260200161183261ffff168152602001611a5b61ffff168152602001611a1361ffff16815260200161191361ffff1681526020016118c161ffff168152602001611a8461ffff16815260200161187861ffff1681526020016118e861ffff168152602001611a0761ffff16815260200161185961ffff16815260200161194a61ffff16815260200161181161ffff16815260200161191761ffff1681526020016119bd61ffff168152602001611ab361ffff168152602001611aa761ffff1681526020016119aa61ffff16815260200161193e61ffff16815260200161183761ffff16815260200161182061ffff168152602001611aa661ffff168152602001611a0261ffff16815260200161184061ffff16815260200161191661ffff1681526020016119a761ffff16815260200161198261ffff16815260200161186961ffff16815260200161185861ffff1681526020016118b061ffff1681526020016119eb61ffff168152602001611acb61ffff168152602001611a6e61ffff1681526020016119df61ffff168152602001611a8561ffff16815260200161191261ffff1681526020016118d961ffff16815260200161185061ffff1681526020016119cb61ffff168152602001611a5a61ffff1681526020016118ac61ffff16815260200161183c61ffff1681526020016119c061ffff1681526020016119f261ffff16815260200161184461ffff168152602001611a3361ffff1681526020016119b861ffff16815260200161189c61ffff16815260200161182761ffff16815260200161190261ffff16815260200161188e61ffff16815260200161185461ffff16815260200161184f61ffff1681526020016118f561ffff168152602001611a6961ffff1681526020016118bb61ffff1681526020016118b761ffff168152602001611a7961ffff168152602001611a8e61ffff16815260200161187661ffff168152602001611ac061ffff1681526020016118e261ffff16815260200161185b61ffff16815260200161182c61ffff1681526020016119f961ffff16815260200161191961ffff1681526020016119a061ffff1681526020016119d061ffff16815260200161190d61ffff168152602001611a2261ffff1681526020016118f161ffff168152602001611ac461ffff16815260200161196561ffff16815260200161192c61ffff16815260200161197561ffff16815260200161188961ffff168152602001611a8a61ffff16815260200161190561ffff168152602001611a0d61ffff1681526020016119d461ffff1681526020016119f561ffff1681526020016119c361ffff168152602001611aad61ffff16815260200161183b61ffff1681526020016119fd61ffff16815260200161183061ffff1681526020016119cc61ffff1681526020016118a761ffff16815260200161194561ffff16815260200161195661ffff1681526020016119c261ffff1681526020016119f461ffff1681526020016118a261ffff16815260200161182961ffff16815260200161185e61ffff168152602001611a0c61ffff168152602001611a9c61ffff16815260200161188861ffff16815260200161197461ffff168152602001611abd61ffff16815260200161193561ffff16815260200161196461ffff16815260200161192d61ffff16815260200161194161ffff16815260200161197861ffff16815260200161184a61ffff1681526020016119f861ffff16815260200161182d61ffff16815260200161194961ffff16815260200161198861ffff16815260200161190861ffff168152602001611a4161ffff1681526020016118e361ffff168152602001611a6861ffff1681526020016118ba61ffff1681526020016119e161ffff1681526020016118df61ffff16815260200161184e61ffff1681525060109060f862001a4d92919062010ae4565b5060405180610a00016040528061017c61ffff1661ffff1681526020016107e261ffff168152602001606261ffff16815260200161116961ffff16815260200161075661ffff168152602001610ac561ffff16815260200161175061ffff16815260200161016b61ffff168152602001611a7c61ffff1681526020016106f861ffff16815260200161126061ffff16815260200161070a61ffff1681526020016107df61ffff16815260200161036c61ffff1681526020016104e561ffff16815260200161110661ffff1681526020016106bf61ffff168152602001611ad361ffff16815260200161080e61ffff16815260200161144661ffff16815260200161047b61ffff16815260200161068561ffff16815260200161058561ffff168152602001610f9861ffff1681526020016109f261ffff16815260200161103461ffff1681526020016105b861ffff16815260200161127f61ffff16815260200161129a61ffff168152602001611a4461ffff1681526020016105a961ffff16815260200161147461ffff168152602001610c0161ffff168152602001610a7261ffff16815260200161025561ffff16815260200161114f61ffff16815260200161196261ffff168152602001610bac61ffff1681526020016118d761ffff168152602001611aa461ffff168152602001610ae161ffff1681526020016110f861ffff16815260200160ad61ffff168152602001610cc461ffff1681526020016113bf61ffff16815260200161055861ffff1681526020016111cd61ffff168152602001602d61ffff16815260200161044a61ffff168152602001610b9461ffff16815260200161193f61ffff16815260200161128061ffff168152602001611b0e61ffff1681526020016112ba61ffff16815260200161123d61ffff1681526020016105cc61ffff16815260200161145261ffff1681526020016108bd61ffff168152602001610f1f61ffff16815260200161159761ffff16815260200161191961ffff16815260200161053b61ffff16815260200161151361ffff168152602001610dfb61ffff168152602001610c0b61ffff168152602001606061ffff1681526020016113ec61ffff16815260200161132e61ffff16815260200161047261ffff16815260200161093161ffff168152602001611aea61ffff1681526020016108c161ffff1681526020016118cb61ffff168152602001610f6361ffff16815260200161158661ffff168152602001610d0561ffff16815260200161124361ffff16815260200161155761ffff168152602001610e8661ffff1681526020016112fe61ffff16815250601190605062001e2a92919062010b95565b5060405180617d00016040528061197b61ffff1661ffff168152602001610d2b61ffff168152602001610bb761ffff168152602001610a0061ffff16815260200161018c61ffff1681526020016107c561ffff1681526020016107ae61ffff1681526020016103b961ffff1681526020016114ee61ffff168152602001610cfe61ffff1681526020016119ae61ffff1681526020016117ad61ffff168152602001611b3261ffff1681526020016116cd61ffff16815260200161020061ffff16815260200161111761ffff16815260200161012461ffff16815260200161015261ffff168152602001611aaf61ffff16815260200161135561ffff168152602001610bcb61ffff16815260200161124461ffff168152602001610a3061ffff16815260200161039061ffff1681526020016113cb61ffff1681526020016102b761ffff168152602001610d2761ffff1681526020016116f461ffff16815260200161143761ffff16815260200161032061ffff1681526020016113a661ffff16815260200161058f61ffff16815260200161170b61ffff16815260200161099061ffff16815260200161146b61ffff16815260200161164261ffff168152602001610d8961ffff16815260200161149661ffff16815260200161132261ffff16815260200161029061ffff16815260200161015761ffff1681526020016114d761ffff168152602001610d6861ffff168152602001610ef061ffff168152602001604d61ffff1681526020016110de61ffff168152602001611a7761ffff16815260200161133c61ffff1681526020016108bb61ffff168152602001610a6961ffff16815260200161171561ffff16815260200161058b61ffff1681526020016118bd61ffff1681526020016106e761ffff1681526020016118dc61ffff1681526020016106ae61ffff16815260200161067761ffff16815260200161182e61ffff1681526020016115c061ffff16815260200161141261ffff16815260200161090361ffff16815260200161012061ffff168152602001610b3461ffff1681526020016114ea61ffff16815260200161064261ffff16815260200161176361ffff1681526020016115d761ffff16815260200161049e61ffff16815260200161175061ffff16815260200161111c61ffff16815260200161040461ffff16815260200161165061ffff1681526020016109b761ffff16815260200161014e61ffff1681526020016102fc61ffff168152602001610ce061ffff168152602001611b4261ffff16815260200161159961ffff168152602001610edc61ffff1681526020016112a061ffff16815260200161170761ffff1681526020016103b561ffff1681526020016106aa61ffff16815260200161195d61ffff1681526020016114c361ffff1681526020016112f961ffff168152602001611ae561ffff16815260200161115961ffff168152602001610c7961ffff16815260200161038261ffff1681526020016110f761ffff16815260200161047561ffff168152602001610e9c61ffff16815260200161198e61ffff168152602001610cee61ffff16815260200161137a61ffff16815260200161139261ffff168152602001605e61ffff16815260200161057b61ffff16815260200161060a61ffff168152602001610c0961ffff168152602001610a8261ffff168152602001610c8261ffff16815260200161177061ffff1681526020016114ad61ffff168152602001610dfe61ffff168152602001610d6461ffff16815260200161095961ffff16815260200161138e61ffff16815260200161080761ffff16815260200161131261ffff16815260200161192e61ffff16815260200161068f61ffff16815260200161105561ffff168152602001610b8c61ffff1681526020016104cd61ffff168152602001610afd61ffff168152602001611ac261ffff168152602001610f2e61ffff1681526020016113bb61ffff16815260200161151961ffff16815260200161122061ffff1681526020016103f461ffff168152602001611a5261ffff1681526020016108e961ffff168152602001610b5561ffff16815260200161190b61ffff16815260200161150261ffff16815260200161086361ffff1681526020016111d961ffff168152602001610e1c61ffff168152602001610ead61ffff168152602001610aeb61ffff16815260200161174161ffff1681526020016105e261ffff168152602001611b0261ffff1681526020016106a161ffff1681526020016109ed61ffff168152602001610d6561ffff16815260200161120861ffff16815260200161079b61ffff168152602001610a6c61ffff1681526020016103cc61ffff1681526020016108be61ffff168152602001608661ffff16815260200161189661ffff168152602001610b7d61ffff168152602001611abf61ffff16815260200161168861ffff1681526020016101b561ffff16815260200161128961ffff1681526020016110db61ffff16815260200161033561ffff1681526020016107df61ffff16815260200161150461ffff16815260200161190661ffff168152602001610b6461ffff16815260200161013f61ffff16815260200161086661ffff16815260200161036c61ffff1681526020016113ef61ffff168152602001611a1d61ffff16815260200161126861ffff168152602001610ba661ffff16815260200161016a61ffff16815260200161167061ffff1681526020016104bc61ffff16815260200161159861ffff1681526020016110f361ffff168152602001610d5561ffff1681526020016112c161ffff16815260200161100661ffff16815260200161051461ffff1681526020016119b461ffff16815260200161010e61ffff16815260200161089161ffff168152602001609f61ffff1681526020016118d161ffff1681526020016117c361ffff168152602001610cd161ffff16815260200161088961ffff1681526020016119c461ffff168152602001601161ffff1681526020016104ab61ffff168152602001610f3d61ffff1681526020016108c361ffff16815260200161102f61ffff1681526020016111a161ffff1681526020016104b461ffff168152602001610fa661ffff16815260200161067661ffff16815260200161081e61ffff168152602001611aec61ffff16815260200161022461ffff1681526020016107c061ffff1681526020016119cf61ffff16815260200161042c61ffff168152602001610bef61ffff1681526020016118dd61ffff16815260200161110661ffff168152602001610c5f61ffff168152602001611a4f61ffff16815260200161126461ffff168152602001610dd161ffff16815260200161065761ffff16815260200161012f61ffff16815260200161028161ffff16815260200161133d61ffff1681526020016106c361ffff168152602001610d6961ffff168152602001610fbe61ffff16815260200161056161ffff16815260200161104f61ffff1681526020016114d661ffff16815260200161168461ffff1681526020016108e361ffff168152602001610a4161ffff16815260200160c461ffff16815260200161185c61ffff1681526020016118e561ffff16815260200160fa61ffff168152602001610e1861ffff16815260200161066361ffff16815260200161099161ffff16815260200161101a61ffff168152602001610ff861ffff1681526020016116f561ffff16815260200161198661ffff168152602001610e9861ffff1681526020016113e161ffff16815260200161124561ffff16815260200161078661ffff16815260200161153c61ffff1681526020016108d361ffff1681526020016113ca61ffff16815260200161030161ffff16815260200161135461ffff1681526020016117bc61ffff16815260200161075361ffff16815260200161038961ffff16815260200161078a61ffff16815260200161123561ffff16815260200161108761ffff1681526020016109e861ffff16815260200161101661ffff1681526020016117ed61ffff168152602001610cff61ffff168152602001611b3361ffff16815260200161071e61ffff1681526020016107c461ffff16815260200161046161ffff16815260200161022061ffff1681526020016116e561ffff168152602001610bf361ffff168152602001610d2a61ffff168152602001610bb661ffff16815260200161017a61ffff168152602001611b1661ffff16815260200161063b61ffff168152602001610a5361ffff16815260200161054261ffff1681526020016113e661ffff168152602001610a3661ffff168152602001610bbd61ffff1681526020016109c161ffff16815260200161030661ffff16815260200161113661ffff1681526020016113da61ffff16815260200161111161ffff168152602001610c5461ffff1681526020016115dd61ffff168152602001610f4661ffff16815260200161039661ffff1681526020016106dd61ffff16815260200161165261ffff1681526020016114e061ffff16815260200161089261ffff168152602001610ddf61ffff16815260200161022f61ffff16815260200161092461ffff16815260200161166f61ffff16815260200161182461ffff168152602001610d3661ffff1681526020016104bf61ffff168152602001610c9c61ffff168152602001610a2161ffff16815260200161148861ffff16815260200161133261ffff1681526020016103ea61ffff1681526020016118fd61ffff16815260200161047b61ffff168152602001611a4861ffff16815260200161036761ffff1681526020016113f061ffff16815260200161137461ffff16815260200161086d61ffff1681526020016111e361ffff168152602001610b2661ffff16815260200161102161ffff16815260200161023f61ffff1681526020016116da61ffff16815260200161169461ffff16815260200161015d61ffff168152602001611ab861ffff16815260200161079461ffff1681526020016116d661ffff168152602001610efe61ffff16815260200161158b61ffff168152602001610a7861ffff168152602001610e3a61ffff16815260200161177a61ffff1681526020016118ed61ffff16815260200161107861ffff1681526020016108dc61ffff16815260200161039a61ffff1681526020016113f861ffff16815260200161036361ffff1681526020016107d461ffff16815260200161179f61ffff16815260200161191161ffff168152602001610b5b61ffff1681526020016117d661ffff168152602001610b1a61ffff16815260200161085861ffff16815260200161103461ffff168152602001610b9a61ffff16815260200161081961ffff1681526020016116ea61ffff168152602001611a5d61ffff16815260200161159f61ffff16815260200161059961ffff1681526020016117ea61ffff1681526020016117b361ffff16815260200161192561ffff16815260200161075061ffff16815260200161040a61ffff1681526020016108c861ffff1681526020016113d561ffff168152602001611ab561ffff1681526020016111cf61ffff168152602001610f1361ffff1681526020016115c661ffff168152602001611acc61ffff16815260200161133661ffff1681526020016104c361ffff16815260200161067161ffff16815260200161032661ffff16815260200161159361ffff1681526020016110ca61ffff16815260200161172f61ffff1681526020016110b561ffff1681526020016108a161ffff16815260200161010161ffff16815260200161066061ffff1681526020016106f161ffff1681526020016114f461ffff1681526020016108e061ffff1681526020016113f461ffff168152602001601a61ffff1681526020016104d361ffff168152602001611afd61ffff16815260200161118861ffff168152602001610a7361ffff168152602001611a7561ffff16815260200161104461ffff1681526020016106c861ffff168152602001610d5e61ffff16815260200161141d61ffff168152602001611a6d61ffff1681526020016104fa61ffff1681526020016107d861ffff1681526020016112de61ffff16815260200161100361ffff168152602001611a1561ffff1681526020016118da61ffff16815260200161091161ffff1681526020016103fb61ffff168152602001610ad261ffff16815260200161114b61ffff168152602001611b2561ffff16815260200161024561ffff168152602001610c0161ffff168152602001610a6661ffff168152602001605961ffff168152602001611a6c61ffff16815260200161196c61ffff168152602001610a7261ffff168152602001610bf961ffff16815260200161025561ffff168152602001610c3061ffff168152602001610f9561ffff16815260200161080061ffff1681526020016114d461ffff1681526020016114b261ffff16815260200161015861ffff1681526020016108e161ffff16815260200161037d61ffff1681526020016115b761ffff168152602001611a4561ffff16815260200161114f61ffff1681526020016117e761ffff16815260200161199561ffff16815260200161166761ffff16815260200161159261ffff16815260200161121261ffff1681526020016108a061ffff168152602001610bac61ffff1681526020016102e261ffff16815260200161133761ffff16815260200161140561ffff16815260200161107d61ffff1681526020016109de61ffff1681526020016111ce61ffff168152602001610d0961ffff16815260200161191461ffff168152602001611b3d61ffff16815260200161020361ffff1681526020016101c261ffff168152602001610bc061ffff168152602001610a3b61ffff16815260200161011b61ffff1681526020016117b261ffff168152602001607061ffff16815260200161062961ffff16815260200161142c61ffff16815260200161155f61ffff16815260200161172261ffff1681526020016111a761ffff16815260200161181e61ffff16815260200161178f61ffff168152602001611b2161ffff1681526020016118ec61ffff16815260200161107961ffff1681526020016116b261ffff16815260200161125e61ffff16815260200161056861ffff1681526020016116a561ffff16815260200161104961ffff16815260200161138961ffff1681526020016101ab61ffff16815260200161058461ffff16815260200161061561ffff16815260200161033f61ffff168152602001610b8361ffff1681526020016101af61ffff1681526020016110a061ffff168152602001610e0961ffff16815260200161139961ffff1681526020016103c261ffff168152602001610f9161ffff16815260200161071461ffff1681526020016107dd61ffff16815260200161086c61ffff168152602001611aa061ffff16815260200161050061ffff168152602001610ae161ffff1681526020016118fc61ffff1681526020016105ec61ffff168152602001610f2661ffff1681526020016112f261ffff168152602001610e7061ffff16815260200161148961ffff16815260200161133361ffff16815260200161044961ffff16815260200161092561ffff16815260200161062e61ffff16815260200161051a61ffff16815260200161161261ffff168152602001611a3161ffff1681526020016105d261ffff168152602001610e3661ffff16815260200161010461ffff168152602001610fd961ffff16815260200161124c61ffff1681526020016105ce61ffff16815260200161175b61ffff168152602001610b1661ffff1681526020016115eb61ffff16815260200160ed61ffff1681526020016112ab61ffff1681526020016110e961ffff1681526020016119c961ffff168152602001610bed61ffff1681526020016108a461ffff16815260200161138261ffff16815260200161163661ffff16815260200161050f61ffff16815260200161114c61ffff16815260200161125d61ffff16815260200160a661ffff1681526020016110ff61ffff16815260200161039861ffff1681526020016105a661ffff16815260200161118a61ffff16815260200161084261ffff168152602001610c8a61ffff16815260200161177c61ffff16815260200160da61ffff16815260200161034061ffff1681526020016103e661ffff168152602001608361ffff16815260200161023161ffff1681526020016116d461ffff16815260200161170d61ffff168152602001600261ffff16815260200161095d61ffff168152602001610d0f61ffff16815260200161193661ffff168152602001610e4861ffff1681526020016115fc61ffff168152602001610c0d61ffff16815260200161060661ffff1681526020016111fd61ffff16815260200161025661ffff168152602001611a8861ffff16815260200161187c61ffff168152602001610e0661ffff16815260200161199261ffff168152602001610ad161ffff1681526020016116ad61ffff16815260200161173461ffff1681526020016113b361ffff1681526020016104c161ffff16815260200161119461ffff16815260200161082461ffff1681526020016110b761ffff16815260200161186461ffff16815260200161092661ffff168152602001610ecb61ffff168152602001611b5161ffff1681526020016114e261ffff16815260200161100b61ffff1681526020016115db61ffff1681526020016101c161ffff1681526020016119f361ffff168152602001610bc361ffff16815260200161064661ffff1681526020016119c161ffff168152602001610fd661ffff168152602001610ecf61ffff1681526020016114e661ffff168152602001611b4961ffff16815260200161029861ffff168152602001610d4461ffff16815260200161103261ffff1681526020016119ca61ffff1681526020016112bb61ffff1681526020016116ff61ffff16815260200161043a61ffff168152602001610c2b61ffff168152602001602d61ffff16815260200161157361ffff168152602001610a9061ffff1681526020016106e361ffff16815260200161013261ffff1681526020016112e061ffff16815260200160f361ffff168152602001610ded61ffff16815260200161045461ffff168152602001610aa461ffff168152602001610f8561ffff1681526020016119de61ffff168152602001610d1f61ffff16815260200161055461ffff16815260200161015f61ffff16815260200161104661ffff168152602001610e7d61ffff16815260200161133861ffff168152602001610df561ffff168152602001611a7361ffff168152602001610d6c61ffff168152602001610a7561ffff1681526020016102cd61ffff16815260200161104a61ffff16815260200161055c61ffff1681526020016114d361ffff1681526020016105ef61ffff16815260200161047d61ffff16815260200161091f61ffff16815260200161037a61ffff168152602001610d8561ffff16815260200160c161ffff1681526020016109cd61ffff168152602001610cf661ffff16815260200161101f61ffff1681526020016111e161ffff1681526020016102e461ffff1681526020016113aa61ffff16815260200161022d61ffff16815260200161046c61ffff168152602001610fb361ffff168152602001610c9a61ffff16815260200161074a61ffff168152602001610abd61ffff168152602001610c5661ffff16815260200161027561ffff1681526020016106df61ffff16815260200161087f61ffff1681526020016113d361ffff168152602001610f4461ffff1681526020016101c561ffff16815260200161111361ffff16815260200161034d61ffff1681526020016109e561ffff1681526020016112bf61ffff16815260200161042561ffff1681526020016103bd61ffff168152602001610e4c61ffff16815260200161193e61ffff1681526020016106b661ffff168152602001610d2f61ffff168152602001611ada61ffff1681526020016107ab61ffff168152602001610a9561ffff16815260200161142e61ffff1681526020016110e761ffff1681526020016117b061ffff1681526020016107eb61ffff168152602001610f4561ffff16815260200161078e61ffff16815260200161153061ffff1681526020016101c461ffff16815260200161127061ffff1681526020016105f261ffff16815260200161176e61ffff16815260200161074f61ffff16815260200161099d61ffff16815260200161191661ffff16815260200161027461ffff168152602001610b3d61ffff16815260200161153861ffff1681526020016115de61ffff1681526020016101f561ffff168152602001610fb261ffff168152602001610e5d61ffff16815260200161148b61ffff168152602001610a0d61ffff168152602001610e9461ffff1681526020016110b261ffff16815260200161022c61ffff1681526020016111f761ffff16815260200161162861ffff16815260200161037b61ffff1681526020016106bb61ffff16815260200161104b61ffff16815260200161117061ffff168152602001611a7261ffff1681526020016110a261ffff168152602001610bfb61ffff16815260200161154961ffff16815260200161055561ffff168152602001610e7c61ffff1681526020016111b961ffff1681526020016102bc61ffff16815260200161068661ffff168152602001610a6461ffff16815260200161102261ffff16815260200161165961ffff16815260200161147261ffff16815260200161191261ffff1681526020016104fd61ffff1681526020016117a061ffff168152602001610f1461ffff1681526020016101eb61ffff168152602001610dab61ffff168152602001610a4d61ffff1681526020016113c261ffff168152602001610d4961ffff1681526020016112ba61ffff16815260200161043b61ffff168152602001610dd861ffff168152602001610a9161ffff168152602001610d3261ffff1681526020016111a561ffff16815260200161108f61ffff16815260200161183c61ffff16815260200161123d61ffff16815260200161076461ffff168152602001610c4761ffff168152602001610db961ffff1681526020016104a361ffff168152602001610f1061ffff168152602001610fcb61ffff16815260200161134c61ffff1681526020016109b261ffff16815260200161051861ffff1681526020016112ae61ffff1681526020016110c961ffff16815260200161044761ffff168152602001611ae061ffff16815260200161066e61ffff16815260200161182761ffff16815260200161016e61ffff16815260200161103761ffff16815260200161166c61ffff168152602001610ad061ffff168152602001610c6b61ffff1681526020016105ea61ffff16815260200161126c61ffff1681526020016103a961ffff168152602001610f3761ffff168152602001610ea161ffff168152602001610b2961ffff168152602001610cb261ffff16815260200161024061ffff168152602001610f9361ffff1681526020016103c061ffff1681526020016119ef61ffff168152602001611a8961ffff16815260200161042061ffff168152602001610e0761ffff16815260200161083761ffff168152602001610af061ffff16815260200161149f61ffff16815260200161094b61ffff168152602001610df061ffff16815260200161129561ffff168152602001610e0361ffff16815260200161196a61ffff16815260200161131761ffff1681526020016116a361ffff16815260200161105861ffff16815260200161125c61ffff1681526020016110fe61ffff16815260200160a761ffff1681526020016113f761ffff1681526020016115a561ffff1681526020016108ec61ffff168152602001610f2b61ffff168152602001610f5961ffff16815260200160bc61ffff1681526020016103f961ffff16815260200161050e61ffff16815260200161179c61ffff168152602001610cae61ffff16815260200161190e61ffff1681526020016118de61ffff168152602001610f1b61ffff16815260200161037061ffff16815260200160b761ffff1681526020016101df61ffff1681526020016111d761ffff16815260200161151761ffff168152602001603f61ffff168152602001610aa261ffff168152602001610deb61ffff168152602001610c3d61ffff1681526020016118bb61ffff16815260200161024861ffff1681526020016106a261ffff16815260200161149061ffff1681526020016104cb61ffff16815260200161193061ffff16815260200161045e61ffff168152602001610f7b61ffff16815260200160cc61ffff1681526020016104cf61ffff16815260200161169c61ffff1681526020016115f661ffff168152602001601661ffff168152602001610f1f61ffff1681526020016101e061ffff168152602001610da061ffff16815260200161123261ffff168152602001610d8b61ffff1681526020016113b961ffff168152602001610f5e61ffff16815260200161101961ffff16815260200161052b61ffff16815260200161166261ffff16815260200161136761ffff1681526020016104f261ffff16815260200161066461ffff16815260200161120f61ffff16815260200161097f61ffff168152602001610e5661ffff16815260200161198961ffff16815260200161108061ffff16815260200161048b61ffff16815260200161191961ffff168152602001610e2b61ffff168152602001610b7761ffff168152602001610ccd61ffff168152602001610b3661ffff1681526020016101c761ffff16815260200161123661ffff1681526020016115d561ffff16815260200161141061ffff168152602001610ac761ffff1681526020016101fe61ffff168152602001611b3061ffff1681526020016107e461ffff16815260200161031961ffff168152602001611aa961ffff1681526020016119d061ffff168152602001607561ffff168152602001610e5261ffff16815260200161148061ffff168152602001610a0261ffff168152602001611ad861ffff16815260200161083261ffff168152602001610d2d61ffff16815260200161053b61ffff168152602001610b1e61ffff16815260200161163061ffff1681526020016106fa61ffff1681526020016113fc61ffff1681526020016115aa61ffff168152602001610dd261ffff16815260200161110561ffff1681526020016113bd61ffff1681526020016110cc61ffff168152602001610c1761ffff168152602001610a7c61ffff16815260200161041761ffff168152602001611a7e61ffff16815260200161024c61ffff1681526020016106c061ffff16815260200161083861ffff16815260200161029261ffff16815260200161057561ffff1681526020016116de61ffff16815260200161128a61ffff1681526020016101b261ffff16815260200161057961ffff16815260200161164061ffff168152602001610e9e61ffff168152602001610ff761ffff16815260200161050561ffff168152602001610e1761ffff1681526020016110f561ffff168152602001610d9c61ffff16815260200161047761ffff16815260200161126761ffff1681526020016113ec61ffff16815260200161152761ffff168152602001610adc61ffff16815260200161185f61ffff1681526020016114c561ffff16815260200161167361ffff168152602001610d2961ffff168152602001610ede61ffff16815260200161088e61ffff168152602001610ec561ffff1681526020016114dc61ffff16815260200161176161ffff168152602001610c5061ffff1681526020016105d761ffff16815260200161064061ffff16815260200161088a61ffff1681526020016111c361ffff168152602001610d0061ffff16815260200161052361ffff16815260200161101561ffff168152602001610f3e61ffff16815260200161124961ffff168152602001611a3c61ffff168152602001610f0761ffff16815260200161132a61ffff168152602001610d3e61ffff1681526020016102d761ffff1681526020016106b061ffff1681526020016110ad61ffff16815260200161043c61ffff1681526020016108a861ffff16815260200161156761ffff168152602001602a61ffff16815260200161093161ffff16815260200161147d61ffff16815260200161179761ffff168152602001610ba361ffff16815260200161116661ffff16815260200161194561ffff16815260200161082f61ffff16815260200161183a61ffff16815260200161112b61ffff168152602001610d7a61ffff1681526020016101ca61ffff16815260200161124861ffff168152602001611a3d61ffff1681526020016116ce61ffff1681526020016105f861ffff168152602001610ac261ffff16815260200161113361ffff168152602001610ed461ffff168152602001610fd561ffff16815260200161010861ffff16815260200161145c61ffff168152602001611b4661ffff16815260200161087861ffff168152602001611aac61ffff168152602001610ec361ffff16815260200161030361ffff16815260200161014161ffff16815260200161124761ffff168152602001610d7661ffff1681526020016108d161ffff16815260200161153e61ffff16815260200161090861ffff168152602001610f0a61ffff168152602001611a2d61ffff1681526020016118cf61ffff1681526020016119b661ffff1681526020016104df61ffff16815260200161031461ffff16815260200161191c61ffff16815260200161113f61ffff168152602001610cdf61ffff1681526020016106d861ffff1681526020016109b461ffff1681526020016101a361ffff168152602001610de261ffff1681526020016107c661ffff16815260200161092961ffff1681526020016102a361ffff168152602001610fac61ffff168152602001611ad561ffff1681526020016102da61ffff168152602001610d2861ffff16815260200161073161ffff16815260200160c661ffff168152602001611a0c61ffff16815260200161164161ffff16815260200161137961ffff1681526020016109c661ffff16815260200161146c61ffff1681526020016107e161ffff168152602001610c0a61ffff168152602001610c3861ffff168152602001611a8b61ffff1681526020016107a161ffff16815260200161197461ffff16815260200161193561ffff16815260200161029361ffff16815260200161034361ffff16815260200161154f61ffff168152602001611ac561ffff16815260200161180661ffff168152602001610fbc61ffff16815260200161080861ffff16815260200161091861ffff16815260200161035e61ffff1681526020016105e061ffff1681526020016116b661ffff16815260200161110461ffff16815260200160a161ffff1681526020016103f361ffff16815260200161151a61ffff1681526020016106e861ffff16815260200161179a61ffff168152602001610b0e61ffff16815260200161156361ffff16815260200161121a61ffff16815260200161142861ffff1681526020016107e561ffff1681526020016106d461ffff1681526020016109e661ffff1681526020016101c661ffff1681526020016105f461ffff1681526020016116ca61ffff16815260200161111861ffff168152602001610e2a61ffff1681526020016117ba61ffff16815260200161153a61ffff1681526020016101ba61ffff168152602001609d61ffff1681526020016105fc61ffff16815260200161035661ffff16815260200161181661ffff16815260200161054f61ffff168152602001610b0a61ffff16815260200161120e61ffff1681526020016110b061ffff16815260200161092d61ffff16815260200161159661ffff16815260200161162a61ffff16815260200161136661ffff16815260200161146861ffff168152602001610f1e61ffff168152602001610da161ffff16815260200161130a61ffff1681526020016102c661ffff16815260200161055f61ffff16815260200161106661ffff168152602001610fc061ffff168152602001611a7861ffff16815260200161093d61ffff1681526020016108ac61ffff16815260200161025161ffff168152602001610d6761ffff1681526020016106a361ffff16815260200161168a61ffff168152602001610fb861ffff168152602001611a6861ffff16815260200161120a61ffff168152602001610a6a61ffff16815260200161026661ffff16815260200161136a61ffff168152602001610a4761ffff16815260200161037161ffff168152506012906103e862004d0f92919062010c46565b506040518061fa00016040528061195961ffff1661ffff16815260200161085261ffff168152602001611ad661ffff16815260200161097961ffff168152602001610e5061ffff16815260200161071f61ffff16815260200161157b61ffff16815260200161046061ffff16815260200161022161ffff16815260200161042961ffff1681526020016110ab61ffff168152602001610d5061ffff16815260200161121d61ffff1681526020016108ab61ffff16815260200161087761ffff168152602001610b6961ffff1681526020016105f761ffff16815260200161140e61ffff1681526020016115bc61ffff16815260200161152d61ffff16815260200161038861ffff16815260200161078b61ffff16815260200161175461ffff1681526020016104ae61ffff168152602001610b3861ffff1681526020016117d261ffff1681526020016119a261ffff1681526020016117f461ffff16815260200161140261ffff16815260200161048961ffff16815260200161127d61ffff1681526020016116bd61ffff16815260200161108261ffff168152602001610d7961ffff1681526020016101b961ffff16815260200161078761ffff16815260200161153d61ffff16815260200161084e61ffff16815260200161103e61ffff16815260200161181561ffff16815260200161119c61ffff168152602001610e9961ffff168152602001610b9061ffff168152602001610d3c61ffff16815260200161080f61ffff168152602001611a6761ffff16815260200161129c61ffff1681526020016110ee61ffff16815260200161159561ffff16815260200161155461ffff1681526020016107b261ffff168152602001610fe261ffff16815260200161066261ffff16815260200161115461ffff1681526020016112d461ffff16815260200161166461ffff1681526020016114f261ffff16815260200161013a61ffff16815260200161101b61ffff16815260200161052961ffff1681526020016111dd61ffff1681526020016106eb61ffff168152602001610ff961ffff16815260200161037e61ffff168152602001610f6061ffff1681526020016105b261ffff1681526020016103f061ffff168152602001611a4261ffff168152602001611a2061ffff168152602001610c6261ffff16815260200161091b61ffff1681526020016115f461ffff16815260200161057761ffff16815260200161067f61ffff1681526020016106be61ffff1681526020016102c961ffff1681526020016111ac61ffff16815260200161197761ffff16815260200161056061ffff16815260200161024e61ffff168152602001610a7161ffff16815260200161095561ffff1681526020016108af61ffff16815260200161071b61ffff1681526020016103da61ffff168152602001610fbb61ffff16815260200160d261ffff16815260200161160461ffff16815260200161168d61ffff16815260200161104261ffff16815260200161055061ffff1681526020016111b461ffff16815260200161188461ffff16815260200161041961ffff168152602001610c0261ffff168152602001610de961ffff168152602001608b61ffff168152602001610ef861ffff168152602001610aa061ffff16815260200161136d61ffff168152602001610fe661ffff16815260200160f761ffff1681526020016111d561ffff1681526020016102f061ffff168152602001610bcf61ffff16815260200160b561ffff168152602001610a4861ffff1681526020016103a061ffff16815260200161037261ffff168152602001610aee61ffff1681526020016115ac61ffff168152602001610f1961ffff168152602001610ad961ffff16815260200161110761ffff168152602001610c5e61ffff168152602001611a4e61ffff1681526020016110bc61ffff16815260200161157761ffff1681526020016107c161ffff168152602001610a8c61ffff16815260200161187061ffff16815260200161063961ffff16815260200161042d61ffff1681526020016112b761ffff168152602001610e6761ffff168152602001610bb361ffff16815260200161017761ffff16815260200161053c61ffff1681526020016102d561ffff168152602001610fa761ffff16815260200161116961ffff168152602001610d4061ffff16815260200161097d61ffff168152602001610f0561ffff16815260200161075661ffff1681526020016118c861ffff16815260200161176761ffff168152602001610bbb61ffff16815260200161183961ffff16815260200161112c61ffff16815260200161038c61ffff1681526020016106d361ffff168152602001610cd061ffff16815260200161014261ffff1681526020016109bb61ffff16815260200161164861ffff1681526020016112d061ffff16815260200161010b61ffff1681526020016104e461ffff1681526020016101fc61ffff16815260200161125761ffff1681526020016118d061ffff168152602001609e61ffff16815260200161090761ffff16815260200161075961ffff168152602001610f4c61ffff1681526020016119f761ffff168152602001610d7561ffff1681526020016112c061ffff168152602001611b5561ffff16815260200161051561ffff1681526020016111c961ffff1681526020016117ce61ffff168152602001610b4b61ffff16815260200161064e61ffff16815260200161026d61ffff16815260200161114061ffff1681526020016109a461ffff1681526020016107f661ffff16815260200161145761ffff168152602001610a9c61ffff16815260200161143b61ffff168152602001603961ffff168152602001611a6361ffff168152602001610de561ffff168152602001610be261ffff16815260200161063161ffff168152602001610d5461ffff16815260200161144c61ffff168152602001610b0d61ffff16815260200161119861ffff16815260200161054c61ffff168152602001610ba761ffff16815260200161103a61ffff16815260200161148261ffff16815260200161133061ffff1681526020016115e061ffff1681526020016103ec61ffff1681526020016105ae61ffff168152602001610d8d61ffff168152602001610ade61ffff1681526020016113b761ffff168152602001610f3261ffff16815260200161036d61ffff1681526020016115b061ffff16815260200161073261ffff16815260200160ae61ffff16815260200161126961ffff1681526020016116a961ffff1681526020016105e761ffff1681526020016107de61ffff16815260200161066661ffff1681526020016104f461ffff1681526020016111ee61ffff168152602001610ff561ffff1681526020016102ec61ffff1681526020016117e061ffff16815260200161086761ffff16815260200161163e61ffff16815260200161154061ffff16815260200161079e61ffff16815260200161171961ffff168152602001610e0a61ffff168152602001611a8c61ffff16815260200161188b61ffff16815260200161128861ffff168152602001611a7b61ffff1681526020016116e061ffff16815260200161045c61ffff168152602001610ef461ffff16815260200161033461ffff16815260200161057361ffff16815260200161096d61ffff1681526020016107fb61ffff168152602001611abe61ffff16815260200161168961ffff1681526020016114db61ffff16815260200161105261ffff168152602001610d1361ffff16815260200161118261ffff1681526020016111b061ffff168152602001610e8561ffff16815260200161041561ffff1681526020016101a461ffff16815260200161079a61ffff16815260200161155061ffff168152602001605261ffff16815260200161060e61ffff16815260200161189761ffff16815260200161169e61ffff168152602001610e7561ffff1681526020016102c561ffff16815260200161118e61ffff16815260200161180961ffff16815260200161083e61ffff168152602001610aea61ffff16815260200161077761ffff16815260200161174061ffff16815260200161048561ffff16815260200161110361ffff16815260200160a261ffff168152602001610f1d61ffff16815260200161073e61ffff16815260200161179961ffff168152602001611b1e61ffff16815260200161163261ffff168152602001610cea61ffff16815260200161190a61ffff16815260200161151461ffff168152602001611b1f61ffff1681526020016107d361ffff16815260200161163361ffff16815260200161086261ffff16815260200161050a61ffff168152602001610b1d61ffff1681526020016113ba61ffff16815260200161039d61ffff16815260200161107361ffff1681526020016103f561ffff1681526020016101f361ffff16815260200161110261ffff1681526020016113fb61ffff168152602001610f1c61ffff16815260200161169f61ffff16815260200161080661ffff16815260200161131361ffff16815260200161096461ffff168152602001610e3d61ffff16815260200161105461ffff168152602001610b8d61ffff1681526020016104cc61ffff168152602001610afc61ffff16815260200161196661ffff16815260200161180861ffff16815260200161109661ffff168152602001610dff61ffff16815260200161058661ffff16815260200161171061ffff168152602001600761ffff16815260200161155161ffff168152602001610f9b61ffff16815260200161141661ffff168152602001610a7f61ffff16815260200161060f61ffff16815260200161177161ffff168152602001610e4561ffff168152602001611af661ffff16815260200161169b61ffff1681526020016107fa61ffff1681526020016114ac61ffff16815260200161105361ffff16815260200161069161ffff1681526020016111b161ffff16815260200161154161ffff1681526020016103c461ffff16815260200161079f61ffff1681526020016111f861ffff16815260200161057a61ffff16815260200161041c61ffff168152602001611a8d61ffff16815260200161060b61ffff168152602001611a7a61ffff1681526020016118b861ffff168152602001610f8f61ffff16815260200161158061ffff16815260200161136861ffff16815260200161098d61ffff16815260200161070161ffff1681526020016117a861ffff1681526020016104f561ffff168152602001610e9d61ffff168152602001610ff461ffff1681526020016102ed61ffff16815260200161050661ffff168152602001611a9a61ffff1681526020016105af61ffff168152602001610c7861ffff16815260200161173961ffff168152602001610a4561ffff1681526020016108e761ffff1681526020016113b661ffff168152602001610f3361ffff1681526020016115b161ffff16815260200161020d61ffff16815260200161119961ffff1681526020016102ba61ffff168152602001610e6a61ffff1681526020016114c261ffff1681526020016112f861ffff16815260200161082161ffff16815260200161148361ffff168152602001611ae461ffff16815260200161133161ffff168152602001610d3961ffff16815260200161182b61ffff168152602001610a9d61ffff168152602001610edd61ffff168152602001610c2261ffff168152602001611a6261ffff168152602001610de461ffff1681526020016112b261ffff168152602001610be361ffff168152602001610a5c61ffff16815260200161089a61ffff168152602001610ce161ffff1681526020016104dd61ffff168152602001610fcf61ffff168152602001610ec661ffff16815260200161135061ffff168152602001611b4361ffff16815260200161161861ffff1681526020016107f761ffff16815260200161145661ffff1681526020016101fd61ffff16815260200161176261ffff1681526020016105d861ffff16815260200161090661ffff168152602001610f4d61ffff16815260200161175161ffff168152602001610d7461ffff16815260200161184861ffff168152602001610bc661ffff16815260200161040561ffff16815260200161012161ffff1681526020016111c061ffff1681526020016117f161ffff16815260200161101261ffff1681526020016114eb61ffff16815260200161164961ffff16815260200161145a61ffff16815260200161027c61ffff168152602001610b4661ffff1681526020016104e561ffff168152602001610ac461ffff16815260200161141361ffff1681526020016105c861ffff168152602001610dbd61ffff168152602001610bba61ffff16815260200161112d61ffff1681526020016102d461ffff1681526020016106af61ffff16815260200160e761ffff168152602001610d4161ffff16815260200161116861ffff16815260200161132961ffff168152602001610a1661ffff16815260200161092f61ffff168152602001610f7461ffff16815260200161143d61ffff16815260200161063861ffff1681526020016112b661ffff168152602001610bce61ffff168152602001610d9061ffff1681526020016103a161ffff16815260200161037361ffff1681526020016115ad61ffff16815260200161074361ffff168152602001602561ffff16815260200161136c61ffff16815260200161026861ffff16815260200161114561ffff16815260200160f661ffff1681526020016106fd61ffff1681526020016104f961ffff1681526020016102f161ffff1681526020016111d461ffff16815260200161053861ffff1681526020016112e561ffff1681526020016108ba61ffff16815260200161188561ffff16815260200161041861ffff16815260200161023861ffff1681526020016118bc61ffff1681526020016103df61ffff16815260200160d361ffff16815260200161160561ffff16815260200161149361ffff1681526020016114a861ffff1681526020016102c061ffff1681526020016111b561ffff168152602001610bf761ffff16815260200161024f61ffff168152602001610e0f61ffff1681526020016119e761ffff1681526020016103c861ffff168152602001606361ffff16815260200161095461ffff16815260200161158461ffff16815260200161071a61ffff168152602001610ef161ffff1681526020016110df61ffff1681526020016118b461ffff168152602001611a7661ffff168152602001610df861ffff168152602001610af861ffff16815260200161015661ffff16815260200161130c61ffff168152602001611a0a61ffff1681526020016103f161ffff168152602001611a4361ffff168152602001611a2161ffff168152602001601561ffff16815260200161091a61ffff168152602001610ac861ffff1681526020016104f161ffff16815260200161136461ffff16815260200161146a61ffff1681526020016112d561ffff1681526020016114f361ffff16815260200161052861ffff1681526020016102e961ffff16815260200161061f61ffff16815260200161143661ffff1681526020016113a761ffff16815260200161172c61ffff1681526020016110ae61ffff16815260200161063461ffff16815260200161167461ffff16815260200161103f61ffff16815260200161119d61ffff168152602001610b0861ffff168152602001610c9761ffff16815260200161017d61ffff168152602001610d3d61ffff168152602001611b0a61ffff16815260200161035861ffff16815260200161074761ffff16815260200161048861ffff16815260200161125a61ffff1681526020016116bc61ffff1681526020016101f961ffff16815260200161040161ffff168152602001610d7861ffff1681526020016101b861ffff168152602001610a3161ffff16815260200161039161ffff168152602001610b3961ffff1681526020016119a361ffff168152602001610d0361ffff16815260200161087a61ffff1681526020016109d861ffff168152602001610e2861ffff16815260200161065361ffff16815260200161031261ffff168152602001608f61ffff16815260200161111661ffff16815260200161034861ffff1681526020016115bd61ffff16815260200161175561ffff16815260200161040961ffff168152602001611aaa61ffff1681526020016114ef61ffff168152602001610b3161ffff16815260200161031661ffff168152602001610cbe61ffff168152602001610ed661ffff1681526020016117ac61ffff168152602001610b6861ffff1681526020016107e761ffff1681526020016112a561ffff16815260200161042861ffff1681526020016110aa61ffff1681526020016103b861ffff1681526020016102d861ffff16815260200161195861ffff16815260200161181c61ffff16815260200161085361ffff16815260200161067a61ffff16815260200161179561ffff168152602001610ca361ffff1681526020016107bf61ffff1681526020016115a361ffff168152602001610ee661ffff1681526020016110e861ffff1681526020016118ab61ffff1681526020016119c861ffff168152602001610bec61ffff16815260200161186a61ffff1681526020016103bf61ffff1681526020016102b161ffff16815260200161195361ffff168152602001610b1761ffff16815260200161198161ffff16815260200161167b61ffff16815260200161082a61ffff1681526020016115ea61ffff168152602001610fa161ffff1681526020016104b361ffff16815260200161116361ffff168152602001610d4261ffff168152602001609461ffff1681526020016105cf61ffff168152602001610db661ffff16815260200161020661ffff168152602001611a3861ffff168152602001610f4261ffff168152602001611a0161ffff16815260200161164661ffff1681526020016111bf61ffff1681526020016106cd61ffff16815260200161051f61ffff168152602001610e3761ffff1681526020016119bf61ffff1681526020016104e661ffff168152602001610b4161ffff168152602001611b3861ffff1681526020016115ca61ffff16815260200161074c61ffff168152602001611a3061ffff168152602001610db261ffff1681526020016118d261ffff16815260200161125561ffff16815260200161175d61ffff1681526020016108cc61ffff16815260200161100961ffff1681526020016117cc61ffff168152602001610cda61ffff1681526020016109b161ffff168152602001610b5161ffff168152602001610ec961ffff1681526020016119bb61ffff16815260200161113a61ffff168152602001611a6161ffff168152602001610eda61ffff1681526020016107cb61ffff16815260200161144661ffff1681526020016114c161ffff16815260200161082661ffff168152602001610e7161ffff16815260200161195f61ffff16815260200161054661ffff16815260200161029e61ffff16815260200161115f61ffff168152602001610fb161ffff16815260200161098761ffff168152602001611b1161ffff1681526020016103a661ffff16815260200161076d61ffff16815260200161106861ffff1681526020016101d361ffff16815260200161122a61ffff16815260200161173661ffff1681526020016105ac61ffff1681526020016118ea61ffff1681526020016105ed61ffff16815260200161126b61ffff1681526020016116af61ffff168152602001610f2761ffff168152602001610b5f61ffff168152602001610e1361ffff1681526020016117a361ffff16815260200161150b61ffff16815260200161098a61ffff1681526020016114f861ffff16815260200161199061ffff168152602001610ff361ffff168152602001610ea261ffff16815260200161057d61ffff16815260200161171b61ffff168152602001611a8661ffff1681526020016110a161ffff1681526020016108b561ffff16815260200161139861ffff168152602001610a7761ffff1681526020016107a461ffff168152602001610a8861ffff168152602001610f9061ffff16815260200161128661ffff168152602001610c0f61ffff16815260200161045661ffff16815260200161134a61ffff16815260200161096f61ffff168152602001610c8461ffff16815260200161057161ffff16815260200161105f61ffff16815260200161069661ffff168152602001610e7f61ffff1681526020016109f661ffff16815260200161083461ffff16815260200161095b61ffff168152602001605461ffff16815260200161109161ffff16815260200161041361ffff16815260200161058561ffff16815260200161061461ffff16815260200161189561ffff16815260200161129261ffff168152602001610c1361ffff168152602001611a7161ffff168152602001610b8661ffff168152602001610c8c61ffff168152602001611ac861ffff1681526020016114a361ffff1681526020016109f261ffff1681526020016111ba61ffff16815260200161180b61ffff16815260200161104861ffff16815260200161069a61ffff16815260200161174261ffff1681526020016101d761ffff168152602001610bd561ffff16815260200161037861ffff168152602001610f2861ffff168152602001610a4e61ffff168152602001610da861ffff16815260200161137361ffff16815260200161099661ffff1681526020016104fe61ffff1681526020016111e461ffff168152602001610ce461ffff168152602001610ea661ffff1681526020016109cf61ffff16815260200161085d61ffff16815260200161138461ffff168152602001611adc61ffff168152602001610a0661ffff1681526020016111a661ffff16815260200161197d61ffff168152602001610d3161ffff168152602001607161ffff16815260200161062861ffff1681526020016112a661ffff168152602001610eea61ffff1681526020016110a561ffff16815260200161019661ffff168152602001610eba61ffff1681526020016119ac61ffff16815260200161064861ffff16815260200161140c61ffff1681526020016116c761ffff1681526020016105f161ffff168152602001610d8361ffff1681526020016105b861ffff16815260200161079161ffff16815260200161153361ffff16815260200161038661ffff1681526020016114e461ffff1681526020016117f661ffff168152602001610e2761ffff16815260200161030d61ffff168152602001610ecd61ffff1681526020016107f061ffff1681526020016118d661ffff16815260200161074861ffff16815260200161039261ffff1681526020016113c561ffff1681526020016101bf61ffff16815260200161123e61ffff16815260200161174a61ffff16815260200161017161ffff16815260200161198561ffff1681526020016102e361ffff168152602001611b0d61ffff16815260200161081161ffff168152602001610c9861ffff168152602001610b9661ffff16815260200161072961ffff16815260200161022b61ffff1681526020016116ee61ffff168152602001606961ffff16815260200161046a61ffff16815260200161059161ffff168152602001610d5a61ffff16815260200161121361ffff16815260200161043361ffff168152602001610a6361ffff1681526020016107b861ffff168152602001610fdc61ffff16815260200161114e61ffff16815260200161101d61ffff168152602001610b2a61ffff16815260200160bf61ffff168152602001611a0561ffff168152602001610bd961ffff168152602001610ae461ffff1681526020016115b661ffff168152602001610f2361ffff1681526020016110fd61ffff1681526020016118e661ffff168152602001610e4a61ffff16815260200161028a61ffff16815260200161080161ffff16815260200161149c61ffff1681526020016102cb61ffff16815260200161015961ffff16815260200161025461ffff168152602001610bf861ffff16815260200161171f61ffff168152602001608161ffff16815260200161189161ffff168152602001610df361ffff16815260200161024361ffff168152602001610aaa61ffff16815260200161093861ffff1681526020016115fe61ffff16815260200161148c61ffff16815260200161180f61ffff16815260200161196d61ffff16815260200161168f61ffff1681526020016119dc61ffff16815260200161024461ffff168152602001610e0461ffff1681526020016108b961ffff1681526020016103d361ffff16815260200161095f61ffff16815260200161158f61ffff168152602001610aa661ffff16815260200161065861ffff16815260200161114a61ffff168152602001610cb161ffff16815260200161147561ffff1681526020016106e161ffff168152602001610a4a61ffff16815260200161174661ffff1681526020016105a861ffff16815260200160bb61ffff16815260200160a861ffff168152602001611a4c61ffff168152602001601e61ffff168152602001610a4b61ffff1681526020016108d961ffff168152602001610bd061ffff168152602001611a2b61ffff168152602001610c5961ffff168152602001610dcb61ffff168152602001611a4d61ffff16815260200161091061ffff168152602001601f61ffff168152602001610e2261ffff168152602001610cb061ffff1681526020016107d961ffff16815260200161165b61ffff1681526020016112df61ffff16815260200161013161ffff168152602001610d5f61ffff168152602001610f8261ffff1681526020016103d261ffff16815260200161071061ffff168152602001610dee61ffff1681526020016118be61ffff168152602001610c4061ffff16815260200161117661ffff16815260200161055761ffff1681526020016102be61ffff1681526020016114cc61ffff16815260200161058061ffff16815260200161189061ffff168152602001610df261ffff168152602001610aab61ffff168152602001604661ffff1681526020016103d561ffff16815260200161117261ffff16815260200161028b61ffff168152602001610c8961ffff16815260200161149d61ffff168152602001611afc61ffff16815260200161130661ffff1681526020016111ab61ffff16815260200160be61ffff168152602001610ae561ffff168152602001610a3f61ffff16815260200161092061ffff1681526020016110fc61ffff16815260200161136261ffff16815260200161101c61ffff168152602001610b2b61ffff1681526020016107ce61ffff16815260200161157061ffff16815260200161032761ffff16815260200161072861ffff16815260200161129b61ffff1681526020016116ef61ffff16815260200161022a61ffff16815260200161061961ffff16815260200161046b61ffff168152602001610d5b61ffff16815260200161019b61ffff168152602001610be961ffff168152602001610a6261ffff168152602001610e9261ffff168152602001611acd61ffff168152602001611b0c61ffff16815260200161081061ffff16815260200161178b61ffff16815260200161067061ffff16815260200161048e61ffff168152602001611a3561ffff1681526020016116c261ffff16815260200161074961ffff1681526020016103ff61ffff1681526020016104a561ffff1681526020016105c161ffff168152602001610eb761ffff16815260200161100c61ffff1681526020016117f761ffff168152602001610ecc61ffff1681526020016117b661ffff168152602001610d8261ffff1681526020016108c961ffff1681526020016113d461ffff1681526020016117eb61ffff1681526020016117c961ffff1681526020016119ad61ffff1681526020016109e261ffff168152602001611aa461ffff168152602001611b3561ffff16815260200161031c61ffff168152602001610b6e61ffff1681526020016110e561ffff168152602001611a5c61ffff168152602001610eeb61ffff1681526020016107a961ffff16815260200161170061ffff16815260200161019761ffff16815260200161121661ffff16815260200161059861ffff16815260200161197c61ffff168152602001610e8e61ffff16815260200161103561ffff168152602001610d3061ffff16815260200161018761ffff168152602001611af261ffff168152602001610a1c61ffff16815260200161137261ffff16815260200161099761ffff16815260200161150e61ffff1681526020016107d561ffff1681526020016106f761ffff16815260200161179e61ffff168152602001610ce561ffff168152602001611a9061ffff168152602001610d9661ffff1681526020016103f761ffff1681526020016108dd61ffff16815260200161037961ffff16815260200161039b61ffff16815260200161151e61ffff1681526020016113f961ffff1681526020016108ee61ffff16815260200161073d61ffff16815260200161021761ffff16815260200161110061ffff168152602001610da961ffff16815260200161105a61ffff168152602001611b0061ffff1681526020016114d061ffff168152602001611ac961ffff1681526020016111bb61ffff168152602001610afe61ffff16815260200161118d61ffff168152602001610d1c61ffff16815260200161095a61ffff168152602001605561ffff16815260200161109061ffff16815260200161041261ffff168152602001611a8361ffff16815260200161170e61ffff16815260200161045361ffff16815260200161189461ffff16815260200161023261ffff1681526020016116d761ffff168152602001610c1261ffff16815260200161129361ffff168152602001610f9961ffff168152602001610a7961ffff16815260200161096e61ffff1681526020016107fc61ffff16815260200161015c61ffff1681526020016102ce61ffff1681526020016114ae61ffff16815260200161171a61ffff168152602001610a7661ffff16815260200161142061ffff16815260200161033b61ffff16815260200161188c61ffff16815260200161045761ffff168152602001610cb461ffff1681526020016114f961ffff16815260200161163d61ffff1681526020016111e261ffff168152602001610b2761ffff168152602001610ff261ffff16815260200161102061ffff16815260200161152261ffff1681526020016113b061ffff168152602001610f3961ffff1681526020016103eb61ffff168152602001610c7a61ffff1681526020016101d261ffff1681526020016101e961ffff168152602001611a1b61ffff16815260200161126a61ffff1681526020016116ae61ffff16815260200161020b61ffff1681526020016108f261ffff1681526020016115b361ffff16815260200161036661ffff16815260200161119761ffff1681526020016106a561ffff16815260200161115e61ffff16815260200161029f61ffff168152602001610fb061ffff16815260200160dd61ffff16815260200161081461ffff16815260200161098661ffff168152602001611b1061ffff16815260200161189e61ffff16815260200161022e61ffff168152602001610edb61ffff168152602001603261ffff16815260200161156c61ffff1681526020016107ca61ffff168152602001610f6a61ffff16815260200161186761ffff16815260200161043661ffff168152602001610cdb61ffff16815260200161165361ffff168152602001610b5061ffff168152602001610fc961ffff16815260200161027261ffff16815260200161140961ffff16815260200161090c61ffff168152602001610aba61ffff1681526020016113db61ffff16815260200161128261ffff1681526020016118d361ffff16815260200161112361ffff1681526020016119f061ffff1681526020016115dc61ffff1681526020016109c061ffff168152602001611b4a61ffff16815260200161164761ffff1681526020016112cb61ffff16815260200161030761ffff168152602001610cd761ffff1681526020016117c561ffff16815260200161101061ffff1681526020016104e761ffff1681526020016119be61ffff168152602001610cc461ffff16815260200161146061ffff16815260200161135a61ffff16815260200161176c61ffff168152602001611a3961ffff16815260200161020761ffff1681526020016115cc61ffff16815260200161183e61ffff16815260200161040f61ffff1681526020016105bd61ffff16815260200161195261ffff1681526020016102b061ffff16815260200161017461ffff16815260200161103161ffff1681526020016106b561ffff1681526020016111a361ffff16815260200161132761ffff1681526020016104b261ffff1681526020016107be61ffff16815260200161143061ffff16815260200161157461ffff168152602001611a5861ffff168152602001610d4b61ffff1681526020016116fc61ffff1681526020016112bc61ffff16815260200161063a61ffff168152602001610f6e61ffff1681526020016103be61ffff168152602001611a9361ffff168152602001610ce661ffff168152602001610fee61ffff168152602001610b5961ffff168152602001610e2161ffff16815260200161021861ffff1681526020016113f661ffff1681526020016108ed61ffff1681526020016115a461ffff1681526020016113bf61ffff168152602001610ae661ffff168152602001610f2a61ffff1681526020016118ef61ffff1681526020016101d961ffff168152602001610c6d61ffff16815260200161122461ffff16815260200161174461ffff1681526020016106ca61ffff16815260200161180d61ffff168152602001610d1b61ffff168152602001611ac661ffff1681526020016114a161ffff16815260200161131661ffff16815260200161080361ffff16815260200161096161ffff168152602001610b8861ffff16815260200161105961ffff168152602001604561ffff168152602001610a7a61ffff168152602001610f9661ffff168152602001610c4361ffff16815260200161189361ffff16815260200161061261ffff1681526020016101a861ffff16815260200161120561ffff168152602001605661ffff16815260200161154c61ffff16815260200161079661ffff1681526020016114b161ffff16815260200161069461ffff168152602001610e8161ffff168152602001610af161ffff16815260200161196f61ffff168152602001610fc761ffff16815260200161056f61ffff168152602001610b8061ffff1681526020016107ff61ffff16815260200161131a61ffff16815260200161141f61ffff168152602001610a8661ffff16815260200161157d61ffff1681526020016107a261ffff16815260200161154461ffff168152602001605a61ffff1681526020016103c161ffff1681526020016119ee61ffff16815260200161042161ffff16815260200161109f61ffff168152602001610ea061ffff168152602001610ff161ffff1681526020016106f361ffff1681526020016117e461ffff16815260200161163a61ffff16815260200161086b61ffff168152602001610e1161ffff1681526020016111f261ffff16815260200161070461ffff1681526020016117a561ffff1681526020016108f561ffff16815260200161036961ffff168152602001611a1861ffff1681526020016110fb61ffff1681526020016105eb61ffff168152602001610dc861ffff168152602001610c7d61ffff1681526020016101d161ffff1681526020016105aa61ffff168152602001610f3661ffff168152602001610ae261ffff168152602001611ae161ffff1681526020016115e461ffff168152602001610b9861ffff1681526020016102a061ffff1681526020016106a661ffff16815260200161103661ffff168152602001610e6f61ffff168152602001610bab61ffff16815260200161016f61ffff16815260200161196161ffff1681526020016114bf61ffff168152602001610be661ffff168152602001610f6961ffff168152602001610a6161ffff168152602001610ed861ffff168152602001610a9861ffff16815260200161032861ffff16815260200161189d61ffff16815260200161044661ffff168152602001610fca61ffff16815260200161011361ffff16815260200161113c61ffff16815260200161064a61ffff16815260200161161561ffff168152602001610eb861ffff168152602001610cdc61ffff168152602001610f4861ffff168152602001610a2861ffff168152602001610d7161ffff16815260200161112061ffff16815260200161184561ffff168152602001611a3261ffff168152602001610db061ffff16815260200161175f61ffff168152602001610c5261ffff16815260200161135d61ffff16815260200161113461ffff16815260200161031f61ffff16815260200161010761ffff1681526020016117b561ffff168152602001610cd461ffff1681526020016111bd61ffff1681526020016117c661ffff16815260200161100f61ffff168152602001610bbf61ffff1681526020016104a661ffff168152602001610d8161ffff16815260200161112861ffff16815260200161153561ffff1681526020016113d761ffff16815260200161076561ffff1681526020016115cf61ffff16815260200161035161ffff168152602001600c61ffff168152602001611a3661ffff16815260200160ea61ffff168152602001610fa361ffff16815260200161183261ffff16815260200161132461ffff168152602001610a1b61ffff168152602001611ade61ffff16815260200161085a61ffff16815260200161054061ffff168152602001610d3361ffff16815260200161017361ffff1681526020016106b261ffff168152602001610a5161ffff168152602001610f7161ffff16815260200161019861ffff168152602001610bea61ffff16815260200161186c61ffff1681526020016116ec61ffff168152602001610f1561ffff168152602001610daa61ffff16815260200161107a61ffff168152602001611a1361ffff168152602001610f5461ffff1681526020016108da61ffff16815260200161051361ffff16815260200161102361ffff1681526020016114fa61ffff16815260200161138661ffff16815260200161165861ffff16815260200161137161ffff16815260200161162161ffff16815260200161065a61ffff16815260200161191361ffff16815260200161114861ffff1681526020016118c161ffff168152602001604161ffff16815260200161094661ffff168152602001610efc61ffff1681526020016108b761ffff1681526020016101ac61ffff16815260200161024661ffff168152602001611a8461ffff16815260200161188061ffff1681526020016114cf61ffff1681526020016106c661ffff16815260200161117961ffff16815260200161105d61ffff16815260200161160061ffff16815260200161148e61ffff16815260200161093a61ffff1681526020016103d661ffff16815260200161025261ffff1681526020016106ba61ffff16815260200161069861ffff16815260200161130961ffff16815260200161134861ffff16815260200161117161ffff1681526020016104d561ffff168152602001610fc361ffff168152602001610c6661ffff1681526020016101e661ffff168152602001610acd61ffff1681526020016108de61ffff168152602001610a3c61ffff1681526020016101d561ffff168152602001611a0761ffff168152602001610bd761ffff1681526020016112d861ffff16815260200161086f61ffff16815260200160ff61ffff16815260200161025d61ffff16815260200161121161ffff16815260200161043561ffff16815260200161186861ffff1681526020016110b361ffff16815260200161072761ffff16815260200161178861ffff16815260200161194a61ffff16815260200161018061ffff16815260200161148a61ffff16815260200161081361ffff168152602001610a0c61ffff168152602001611ace61ffff168152602001610d2361ffff168152602001610e7361ffff168152602001610b0561ffff1681526020016115c861ffff1681526020016105ff61ffff16815260200161099c61ffff168152602001610b7561ffff168152602001610cc761ffff1681526020016119bd61ffff16815260200161011761ffff1681526020016112c861ffff168152602001611ab361ffff1681526020016109dd61ffff16815260200161078f61ffff1681526020016105ba61ffff16815260200161175861ffff16815260200161108a61ffff16815260200161020461ffff1681526020016116c961ffff16815260200161176f61ffff16815260200161074e61ffff168152602001610fda61ffff16815260200161113861ffff168152602001610e3561ffff16815260200161146361ffff1681526020016107ea61ffff168152602001610cfa61ffff1681526020016119aa61ffff168152602001610cd861ffff1681526020016110a761ffff16815260200161019461ffff16815260200161121961ffff1681526020016115a161ffff168152602001603161ffff16815260200161093661ffff16815260200161142f61ffff16815260200161046461ffff168152602001610ddd61ffff1681526020016112a861ffff168152602001610b9c61ffff168152602001610c9e61ffff16815260200161179061ffff16815260200160ee61ffff1681526020016112f161ffff16815260200161081661ffff16815260200161018961ffff16815260200161193f61ffff168152602001610b1461ffff168152602001610e8c61ffff1681526020016102ae61ffff16815260200161085761ffff1681526020016112f061ffff168152602001611adb61ffff1681526020016110a661ffff16815260200161042461ffff16815260200161172061ffff16815260200161059661ffff16815260200161156161ffff16815260200161144561ffff16815260200161139f61ffff16815260200161072261ffff168152602001606e61ffff16815260200161062761ffff16815260200161021c61ffff16815260200161192261ffff16815260200161161061ffff16815260200161146261ffff16815260200161087261ffff1681526020016109c261ffff168152602001610cfb61ffff168152602001610cd961ffff16815260200161038561ffff168152602001611a0261ffff16815260200161123961ffff16815260200161175961ffff16815260200161184061ffff16815260200161020561ffff1681526020016105d061ffff16815260200161140b61ffff16815260200161034c61ffff1681526020016107ef61ffff168152602001611b3b61ffff168152602001610b7461ffff16815260200161030e61ffff168152602001610cc661ffff168152602001610b5261ffff1681526020016119a761ffff168152602001610d0761ffff1681526020016101bc61ffff16815260200161124161ffff1681526020016105bf61ffff16815260200161076061ffff16815260200161074b61ffff168152602001610abc61ffff1681526020016115c961ffff168152602001609761ffff1681526020016116c061ffff16815260200161116061ffff168152602001610b9561ffff168152602001611b0e61ffff168152602001610e7261ffff168152602001610b0461ffff16815260200161059261ffff16815260200161173061ffff16815260200161121061ffff16815260200161129961ffff16815260200161046d61ffff16815260200161072661ffff1681526020016112d961ffff16815260200161086e61ffff1681526020016114f761ffff1681526020016102e561ffff1681526020016111e061ffff168152602001610fdf61ffff16815260200161025c61ffff16815260200161065f61ffff16815260200161150c61ffff1681526020016105ee61ffff16815260200161091e61ffff168152602001601961ffff168152602001610acc61ffff168152602001610f3b61ffff168152602001610f5d61ffff1681526020016118fe61ffff1681526020016101d461ffff16815260200161068261ffff168152602001610b8561ffff16815260200161028d61ffff16815260200161193b61ffff16815260200161033d61ffff168152602001610c1061ffff16815260200161120061ffff1681526020016119eb61ffff168152602001610d6d61ffff168152602001611acb61ffff16815260200161169061ffff16815260200161084761ffff168152602001610d1e61ffff16815260200160d761ffff1681526020016104c461ffff1681526020016116a761ffff168152602001610dec61ffff16815260200161061761ffff168152602001610c3e61ffff168152602001604061ffff1681526020016103e361ffff168152602001610d5d61ffff168152602001610bff61ffff168152602001611a8561ffff1681526020016111d061ffff1681526020016102f561ffff1681526020016106e261ffff16815260200161013361ffff16815260200161138761ffff168152602001610b5c61ffff16815260200161114961ffff168152602001602161ffff16815260200161091261ffff168152602001610c5b61ffff1681526020016118d961ffff16815260200161185061ffff168152602001610bd261ffff16815260200160b861ffff168152602001610f5561ffff16815260200161077e61ffff1681526020016108db61ffff16815260200161037761ffff16815260200161144161ffff168152602001610a5061ffff168152602001610f7061ffff1681526020016116fe61ffff168152602001611a5a61ffff16815260200161062b61ffff1681526020016118ac61ffff1681526020016107bc61ffff168152602001610fa261ffff16815260200161029961ffff16815260200161132561ffff16815260200161147b61ffff168152602001611af061ffff16815260200161054161ffff168152602001610e9061ffff1681526020016104a761ffff168152602001600d61ffff1681526020016105cc61ffff16815260200161145e61ffff16815260200161160c61ffff16815260200161064761ffff16815260200161192661ffff16815260200161027861ffff16815260200161031e61ffff1681526020016119c061ffff168152602001610b4261ffff16815260200161010661ffff168152602001610cd561ffff16815260200161030961ffff16815260200161014761ffff1681526020016109be61ffff16815260200161164561ffff168152602001610f4961ffff168152602001610d7061ffff1681526020016119f261ffff1681526020016101c061ffff168152602001610bc261ffff16815260200161184461ffff16815260200161175e61ffff168152602001610c5361ffff1681526020016113d961ffff1681526020016104d961ffff16815260200161145261ffff16815260200161165561ffff1681526020016112c561ffff16815260200161088261ffff1681526020016117cb61ffff16815260200161062c61ffff168152602001610ed961ffff16815260200161156e61ffff1681526020016107cc61ffff16815260200161189c61ffff168152602001610a1e61ffff16815260200161194f61ffff1681526020016104c061ffff16815260200161119561ffff1681526020016112f461ffff1681526020016115b561ffff16815260200161092261ffff168152602001601d61ffff16815260200161047861ffff16815260200161020961ffff16815260200161106b61ffff1681526020016103e961ffff1681526020016101d061ffff16815260200161122d61ffff168152602001610c7c61ffff16815260200161076e61ffff1681526020016113b261ffff1681526020016117e561ffff168152602001610cf361ffff1681526020016109c861ffff168152602001610e1061ffff168152602001610b6061ffff16815260200161190261ffff1681526020016117a461ffff1681526020016116dd61ffff16815260200161188e61ffff16815260200161141e61ffff16815260200161139761ffff1681526020016107a361ffff16815260200161154561ffff16815260200161025761ffff16815260200161187d61ffff16815260200161109e61ffff168152602001611abb61ffff16815260200161118761ffff1681526020016117fc61ffff16815260200161056e61ffff16815260200161117461ffff16815260200161169761ffff168152602001610aa961ffff1681526020016103e761ffff16815260200161141a61ffff168152602001610f9761ffff16815260200161189261ffff168152602001611a8161ffff16815260200161041061ffff168152602001605761ffff168152602001610d1a61ffff1681526020016109f161ffff16815260200161080261ffff168152602001610b8961ffff168152602001610e3961ffff1681526020016116b461ffff168152602001610da761ffff168152602001610ae761ffff1681526020016113be61ffff16815260200161151c61ffff16815260200161039961ffff16815260200161107761ffff16815260200161185461ffff1681526020016109d061ffff168152602001611a9261ffff168152602001610ce761ffff168152602001610fef61ffff1681526020016107d761ffff168152602001611a5061ffff1681526020016105e561ffff168152602001610ad761ffff168152602001602261ffff168152602001610f5261ffff168152602001610f3061ffff168152602001610bcd61ffff16815260200161184f61ffff1681526020016112e261ffff168152602001610cec61ffff16815260200161012c61ffff16815260200161102961ffff168152602001610fe861ffff1681526020016111ec61ffff16815260200161161f61ffff1681526020016103e061ffff16815260200161094461ffff168152602001611a6961ffff168152602001610c1b61ffff168152602001610d6261ffff16815260200161155261ffff16815260200161104061ffff1681526020016111b261ffff16815260200161168b61ffff16815260200161068d61ffff1681526020016116e261ffff168152602001610df761ffff168152602001610ef261ffff1681526020016103d861ffff168152602001610a6f61ffff168152602001611a8e61ffff16815260200161187661ffff16815260200161168761ffff168152602001611ac061ffff168152602001610e8761ffff1681526020016102c761ffff16815260200161055e61ffff16815260200161105061ffff16815260200161116f61ffff16815260200161134261ffff16815260200161091d61ffff168152602001610acb61ffff1681526020016108fb61ffff168152602001611a4061ffff168152602001610bdd61ffff1681526020016108e461ffff16815260200161152b61ffff1681526020016111db61ffff168152602001610fe061ffff16815260200161190961ffff16815260200161019e61ffff1681526020016112b561ffff16815260200161042f61ffff16815260200161155661ffff1681526020016103b361ffff1681526020016107b461ffff16815260200161144e61ffff168152602001603b61ffff16815260200161032261ffff1681526020016116f261ffff16815260200161129e61ffff168152602001610c2561ffff1681526020016110f061ffff168152602001610c9461ffff16815260200161182c61ffff16815260200161181761ffff1681526020016106ac61ffff168152602001610b0b61ffff1681526020016112fb61ffff16815260200161153b61ffff16815260200161124261ffff16815260200161110961ffff1681526020016116bf61ffff1681526020016101fa61ffff16815260200161074461ffff16815260200161140061ffff1681526020016117bb61ffff168152602001610fd061ffff16815260200161145961ffff16815260200161161b61ffff168152602001611b5761ffff1681526020016109b961ffff168152602001610d0461ffff1681526020016117f261ffff1681526020016105b461ffff16815260200161076b61ffff16815260200161152f61ffff168152602001601261ffff16815260200161034b61ffff1681526020016115be61ffff1681526020016105f561ffff168152602001610c4c61ffff168152602001608c61ffff1681526020016109a661ffff168152602001610cbd61ffff168152602001610b4961ffff1681526020016117af61ffff16815260200161192161ffff16815260200161027f61ffff1681526020016117ee61ffff1681526020016112d261ffff16815260200161121b61ffff1681526020016110e061ffff16815260200161022361ffff1681526020016112a261ffff16815260200161032e61ffff16815260200161159b61ffff16815260200161071d61ffff168152602001610fa961ffff16815260200161081d61ffff168152602001610ffb61ffff1681526020016106e961ffff1681526020016109d361ffff16815260200161138061ffff16815260200161179b61ffff16815260200161190d61ffff16815260200161021261ffff16815260200161048361ffff168152602001611a2261ffff1681526020016101db61ffff1681526020016118f161ffff168152602001610aec61ffff168152602001610f2c61ffff16815260200161151b61ffff16815260200161084061ffff168152602001611ac461ffff16815260200161119061ffff16815260200161180761ffff16815260200161192c61ffff16815260200161117f61ffff168152602001610e3e61ffff168152602001610c9061ffff1681526020016116a061ffff16815260200161096761ffff16815260200161128e61ffff1681526020016116d261ffff16815260200161061061ffff16815260200161034261ffff16815260200161158761ffff16815260200161070961ffff16815260200161141561ffff168152602001610f9c61ffff168152602001600461ffff16815260200161109561ffff168152602001610dfc61ffff1681526020016101a661ffff16815260200161171361ffff168152602001610e8361ffff16815260200161130f61ffff168152602001610c8061ffff16815260200161177261ffff16815260200161094061ffff168152602001610f8c61ffff16815260200161158361ffff168152602001610dfb61ffff16815260200161188961ffff1681526020016111fb61ffff16815260200161109d61ffff16815260200161139461ffff16815260200161095361ffff1681526020016107a061ffff1681526020016109c761ffff16815260200161198c61ffff168152602001610cf061ffff16815260200161115661ffff168152602001610b6361ffff168152602001610fe461ffff16815260200161146d61ffff16815260200161162f61ffff168152602001611b2c61ffff16815260200160b061ffff16815260200161020e61ffff1681526020016105e961ffff1681526020016108f761ffff1681526020016115ae61ffff16815260200161036b61ffff16815260200161073061ffff168152602001610f6261ffff16815260200161173a61ffff168152602001611a0d61ffff168152602001610d3a61ffff16815260200161115b61ffff16815260200160e061ffff16815260200161148461ffff1681526020016112f761ffff16815260200161119a61ffff16815260200161103c61ffff168152602001610ba561ffff168152602001610a5b61ffff16815260200161089961ffff168152602001610be061ffff16815260200161063361ffff168152602001610d5261ffff1681526020016118a361ffff16815260200161047261ffff1681526020016110c261ffff16815260200161156961ffff16815260200161135361ffff16815260200161145561ffff168152602001610fcc61ffff1681526020016117bf61ffff168152602001610b4d61ffff16815260200161026f61ffff16815260200161015061ffff168152602001610cde61ffff1681526020016102fe61ffff16815260200161164e61ffff168152602001611b5361ffff16815260200161049c61ffff16815260200161111e61ffff168152602001610f0b61ffff168152602001610ab761ffff168152602001610dae61ffff168152602001611a2c61ffff16815260200161027b61ffff16815260200161113261ffff16815260200161010961ffff168152602001610b4561ffff168152602001611b4761ffff1681526020016109bd61ffff168152602001611aad61ffff1681526020016117c061ffff1681526020016115d161ffff16815260200161076761ffff16815260200161183b61ffff168152602001610c4861ffff16815260200161176961ffff168152602001600e61ffff168152602001611aeb61ffff168152602001610a1561ffff168152602001610fa561ffff16815260200161183061ffff16815260200161082e61ffff16815260200161121f61ffff1681526020016119cc61ffff1681526020016112b961ffff168152602001610bf061ffff16815260200161157961ffff168152602001610a8e61ffff16815260200161033261ffff168152602001610dd761ffff168152602001610d4f61ffff16815260200161063661ffff168152602001610bf161ffff1681526020016112b861ffff1681526020016113a561ffff16815260200161143f61ffff168152602001610f7261ffff1681526020016110bf61ffff168152602001610c2861ffff1681526020016104b661ffff16815260200160e961ffff16815260200161067861ffff16815260200161183161ffff16815260200161029761ffff16815260200161195661ffff16815260200161119f61ffff1681526020016102d661ffff1681526020016112ea61ffff16815260200161167661ffff1681526020016115d061ffff1681526020016118cb61ffff168152602001610c4961ffff16815260200161049a61ffff1681526020016113e361ffff168152602001600f61ffff16815260200161090061ffff16815260200161164b61ffff16815260200161101461ffff1681526020016119f461ffff16815260200161078861ffff168152602001610ab661ffff16815260200161176061ffff168152602001610c5161ffff16815260200161161661ffff16815260200161088f61ffff16815260200161135261ffff16815260200161065161ffff16815260200161015161ffff1681526020016117d161ffff16815260200161164f61ffff168152602001611b5261ffff168152602001610f6661ffff168152602001610a5a61ffff16815260200161089861ffff16815260200161170861ffff1681526020016112b061ffff1681526020016118a261ffff16815260200161062161ffff16815260200161182961ffff16815260200160e161ffff1681526020016104ba61ffff168152602001611ae661ffff16815260200161085161ffff1681526020016114c461ffff168152602001610e9a61ffff1681526020016106a961ffff16815260200161054b61ffff168152602001610e6c61ffff168152602001610ba461ffff168152602001611a1f61ffff16815260200161020f61ffff16815260200161126661ffff1681526020016108f661ffff16815260200161077061ffff168152602001610f6361ffff168152602001610f3561ffff1681526020016103ef61ffff16815260200161185e61ffff1681526020016105b161ffff1681526020016118f861ffff1681526020016101ce61ffff168152602001610e9f61ffff16815260200161198d61ffff168152602001610b6261ffff1681526020016117a661ffff1681526020016106ff61ffff168152602001610fe561ffff168152602001610cb861ffff16815260200161098f61ffff168152602001610a8561ffff16815260200161142461ffff16815260200161071861ffff168152602001607861ffff1681526020016110dd61ffff16815260200161109c61ffff16815260200161139561ffff16815260200161154361ffff168152602001606161ffff168152602001610d1061ffff168152602001610e8261ffff1681526020016106c161ffff168152602001611abd61ffff1681526020016114aa61ffff1681526020016107f861ffff16815260200161177361ffff168152602001610e4361ffff16815260200161128f61ffff16815260200161023661ffff16815260200161070861ffff16815260200161141461ffff16815260200161079961ffff16815260200161188761ffff1681526020016119e561ffff16815260200161084161ffff168152602001610e7661ffff16815260200161119161ffff16815260200161056461ffff16815260200161117e61ffff168152602001610e3f61ffff16815260200161131161ffff16815260200161096661ffff168152602001602761ffff168152602001610dd361ffff168152602001611a2361ffff168152602001610da561ffff1681526020016113bc61ffff16815260200161039f61ffff1681526020016117db61ffff16815260200161050c61ffff1681526020016112e761ffff1681526020016109d261ffff16815260200161138161ffff16815260200161086061ffff16815260200161163161ffff168152602001611b1d61ffff168152602001610e1a61ffff168152602001610b9f61ffff16815260200161179361ffff168152602001611b1861ffff16815260200161085561ffff16815260200161083361ffff16815260200161197861ffff168152602001610f7661ffff16815260200161042a61ffff16815260200161059c61ffff1681526020016119d161ffff16815260200161019361ffff16815260200161046361ffff16815260200161062561ffff16815260200161032f61ffff168152602001610cbc61ffff1681526020016117ef61ffff168152602001610cfd61ffff16815260200161087461ffff16815260200161123761ffff16815260200161175361ffff16815260200161112f61ffff1681526020016115d461ffff16815260200161152e61ffff168152602001601361ffff16815260200161034a61ffff168152602001610dbf61ffff16815260200161049661ffff168152602001610b7661ffff16815260200161145861ffff1681526020016107f561ffff16815260200161161a61ffff168152602001611b5661ffff168152602001611ab061ffff168152602001610eb361ffff168152602001610ce361ffff168152602001610d0561ffff168152602001610f4f61ffff16815260200161038f61ffff1681526020016113c861ffff16815260200161184a61ffff1681526020016105da61ffff1681526020016101fb61ffff1681526020016116be61ffff1681526020016115c361ffff168152602001611b0861ffff16815260200161178761ffff16815260200161017f61ffff16815260200161194961ffff168152602001610d2461ffff168152602001610e9661ffff1681526020016112fa61ffff168152602001611ad161ffff16815260200161058c61ffff1681526020016112b461ffff16815260200161042e61ffff1681526020016113a961ffff16815260200161155761ffff1681526020016107b561ffff16815260200161144f61ffff168152602001603a61ffff168152602001610de661ffff16815260200161022661ffff168152602001610c2461ffff1681526020016112d761ffff1681526020016104f361ffff1681526020016117aa61ffff16815260200161091c61ffff16815260200161036e61ffff168152602001610dc361ffff1681526020016101e161ffff1681526020016118e361ffff168152602001611a0861ffff168152602001610d8a61ffff16815260200161107161ffff168152602001610bdc61ffff1681526020016113b861ffff168152602001610f5f61ffff1681526020016114d861ffff1681526020016109ff61ffff168152602001611ac161ffff1681526020016106bd61ffff1681526020016111af61ffff168152602001610d1461ffff16815260200161116e61ffff16815260200160cd61ffff1681526020016104ce61ffff16815260200161149961ffff168152602001610c3461ffff16815260200161045f61ffff1681526020016116e361ffff1681526020016103d961ffff168152602001604a61ffff168152602001610f7a61ffff168152602001610bf561ffff1681526020016119e961ffff16815260200161016461ffff1681526020016114c861ffff16815260200161178361ffff16815260200161068c61ffff16815260200161117a61ffff168152602001610aa361ffff168152602001610c1a61ffff168152602001610c3c61ffff1681526020016118ba61ffff168152602001610c0561ffff16815260200161024961ffff1681526020016112e361ffff1681526020016106e461ffff168152602001610ced61ffff16815260200160f461ffff1681526020016104f761ffff16815260200161161e61ffff1681526020016101f161ffff168152602001610f1a61ffff168152602001610bcc61ffff16815260200161184e61ffff168152506013906107d06200aaab92919062010cf7565b506040518061fa000160405280610e8961ffff1661ffff168152602001610b1161ffff1681526020016102d961ffff16815260200161181d61ffff168152602001611b1761ffff16815260200161132c61ffff168152602001610ba061ffff16815260200161033061ffff16815260200161142b61ffff1681526020016110e261ffff1681526020016116e461ffff16815260200161062261ffff1681526020016110c061ffff16815260200161172561ffff168152602001610a5961ffff16815260200161156461ffff1681526020016113a261ffff16815260200161164c61ffff168152602001611aab61ffff1681526020016111c561ffff16815260200161031761ffff168152602001610e3161ffff16815260200161088c61ffff16815260200161127561ffff168152602001608e61ffff168152602001610f0961ffff16815260200161034961ffff1681526020016113cf61ffff1681526020016101c961ffff1681526020016105b661ffff16815260200161040861ffff168152602001610d0261ffff16815260200161087b61ffff1681526020016109d961ffff1681526020016107f261ffff168152602001611b3e61ffff1681526020016109a061ffff16815260200161191b61ffff16815260200161065261ffff1681526020016117bd61ffff1681526020016104e061ffff168152602001610ccb61ffff16815260200161035961ffff1681526020016115c461ffff16815260200161074661ffff168152602001609a61ffff1681526020016105fb61ffff16815260200161174c61ffff1681526020016108d261ffff16815260200161198761ffff168152602001610c9661ffff16815260200161178461ffff168152602001610e5861ffff168152602001611ae961ffff16815260200161061e61ffff16815260200161022961ffff168152602001610ee061ffff1681526020016103b161ffff16815260200161120d61ffff16815260200161172d61ffff1681526020016110af61ffff16815260200161063561ffff16815260200161043161ffff1681526020016104f061ffff168152602001610cbb61ffff168152602001610e1961ffff16815260200161136561ffff1681526020016107e261ffff168152602001610a4061ffff16815260200161173c61ffff16815260200160c561ffff16815260200161185d61ffff168152602001610bdb61ffff1681526020016101e261ffff1681526020016118e461ffff168152602001601461ffff168152602001610ac961ffff16815260200161134461ffff16815260200161116d61ffff1681526020016104d161ffff16815260200161104e61ffff16815260200161130d61ffff16815260200161168561ffff168152602001610e0e61ffff16815260200161187461ffff1681526020016119e661ffff168152602001610f7961ffff16815260200161158561ffff168152602001610ab061ffff16815260200161142761ffff16815260200161128c61ffff168152602001610df961ffff1681526020016104c961ffff16815260200161080b61ffff1681526020016112fd61ffff16815260200161119261ffff1681526020016119e261ffff168152602001610d6061ffff16815260200161024a61ffff16815260200161094261ffff16815260200161146f61ffff16815260200161161d61ffff16815260200161065661ffff1681526020016106fc61ffff1681526020016104f861ffff16815260200161053961ffff16815260200161165c61ffff16815260200161184d61ffff168152602001610c7561ffff1681526020016108d661ffff1681526020016113fe61ffff16815260200161091761ffff168152602001602461ffff168152602001610dd061ffff168152602001611a5761ffff168152602001610c2761ffff168152602001607761ffff1681526020016118a961ffff16815260200161092e61ffff168152602001610ee461ffff1681526020016108a761ffff168152602001610f7561ffff1681526020016119ce61ffff168152602001610d4c61ffff16815260200161083061ffff1681526020016112e961ffff16815260200161195561ffff1681526020016104b561ffff16815260200160e661ffff16815260200161029461ffff1681526020016115f061ffff16815260200161132861ffff16815260200161081f61ffff168152602001611aed61ffff168152602001610a1761ffff16815260200161147e61ffff1681526020016113e461ffff1681526020016105c961ffff168152602001610c4a61ffff168152602001610dbc61ffff168152602001610d7d61ffff1681526020016104aa61ffff1681526020016119fb61ffff168152602001610f3c61ffff168152602001610a3461ffff1681526020016115d361ffff1681526020016117c261ffff1681526020016111c161ffff16815260200161052561ffff16815260200161101361ffff168152602001611b4561ffff16815260200161145b61ffff16815260200161160961ffff16815260200161135961ffff16815260200161113061ffff16815260200161027d61ffff168152602001610ed361ffff168152602001610b4761ffff1681526020016105d961ffff1681526020016113dc61ffff168152602001610ab561ffff1681526020016108ce61ffff168152602001610bc761ffff1681526020016114de61ffff16815260200161100761ffff1681526020016119b561ffff1681526020016104dc61ffff16815260200161010f61ffff168152602001610fce61ffff168152602001610e2d61ffff16815260200161161961ffff16815260200161089061ffff16815260200161072f61ffff1681526020016107c961ffff168152602001610c2361ffff1681526020016112b361ffff16815260200161186061ffff168152602001610a5d61ffff168152602001610f6561ffff16815260200161089b61ffff1681526020016102dd61ffff16815260200161181961ffff16815260200161082061ffff168152602001610a2361ffff1681526020016102a461ffff168152602001610d3861ffff16815260200161066b61ffff16815260200161182a61ffff1681526020016104bd61ffff168152602001610bdf61ffff1681526020016101cd61ffff16815260200161173861ffff16815260200161077361ffff1681526020016103a461ffff16815260200161152961ffff168152602001610d9e61ffff168152602001611a1c61ffff16815260200161020c61ffff168152602001611b2a61ffff16815260200161150561ffff16815260200161098c61ffff168152602001610b6561ffff16815260200161070061ffff168152602001610b2461ffff16815260200161050761ffff1681526020016103c561ffff1681526020016101b461ffff1681526020016111f961ffff168152602001607b61ffff16815260200161142361ffff168152602001610f8e61ffff16815260200161071761ffff16815260200161158161ffff168152602001610b7c61ffff16815260200161106561ffff16815260200161131e61ffff16815260200161169a61ffff1681526020016109fc61ffff16815260200161083a61ffff168152602001610af561ffff168152602001610c0661ffff16815260200161109761ffff16815260200161058761ffff16815260200161171161ffff1681526020016108bf61ffff16815260200161070b61ffff16815260200161141761ffff168152602001608761ffff1681526020016116d061ffff168152602001610c1961ffff16815260200161023561ffff16815260200161134061ffff16815260200161096561ffff168152602001610e3c61ffff168152602001610c8e61ffff16815260200161196761ffff168152602001610d1761ffff16815260200161039c61ffff168152602001610c7161ffff1681526020016101dd61ffff16815260200161126161ffff16815260200161021461ffff1681526020016101f261ffff16815260200161035d61ffff1681526020016111ea61ffff1681526020016109d561ffff16815260200161050b61ffff168152602001610ffd61ffff168152602001610b1c61ffff1681526020016111eb61ffff168152602001610caa61ffff16815260200161099561ffff168152602001611a9661ffff1681526020016109d461ffff16815260200161150361ffff1681526020016117d961ffff16815260200161102a61ffff168152602001610ceb61ffff168152602001610f2f61ffff16815260200161151861ffff1681526020016101dc61ffff16815260200161021561ffff168152602001611a5361ffff168152602001611a2561ffff1681526020016118e161ffff16815260200161134161ffff16815260200161068e61ffff16815260200161178161ffff168152602001610e7461ffff1681526020016102c461ffff168152602001610d1661ffff16815260200161016661ffff168152602001611ac361ffff168152602001611a7d61ffff1681526020016101a561ffff16815260200161095861ffff168152602001605361ffff16815260200161034561ffff1681526020016110cf61ffff16815260200161044d61ffff16815260200161023461ffff16815260200161129161ffff168152602001610c8361ffff16815260200161106461ffff1681526020016109fd61ffff1681526020016114da61ffff16815260200161083b61ffff16815260200161180061ffff168152602001610d1261ffff16815260200161197261ffff168152602001610e8461ffff16815260200161139361ffff168152602001605f61ffff168152602001610e0b61ffff16815260200161188a61ffff168152602001610c0861ffff16815260200161142261ffff168152602001610ef561ffff168152602001611b2b61ffff16815260200161066761ffff1681526020016111ef61ffff168152602001610cb661ffff16815260200161198f61ffff168152602001610cef61ffff1681526020016117e161ffff168152602001610bde61ffff16815260200161106f61ffff1681526020016118f661ffff16815260200161123161ffff1681526020016101cc61ffff16815260200161152861ffff1681526020016103a561ffff168152602001610d9f61ffff1681526020016105e661ffff168152602001610b0c61ffff16815260200161054d61ffff168152602001610a2261ffff1681526020016115e161ffff1681526020016102a561ffff16815260200161066a61ffff168152602001610faa61ffff16815260200161143a61ffff1681526020016107c861ffff168152602001603861ffff16815260200161092b61ffff1681526020016118a061ffff1681526020016112a161ffff16815260200161044361ffff1681526020016110c561ffff16815260200161186161ffff1681526020016119d361ffff16815260200161144d61ffff1681526020016103b461ffff1681526020016114df61ffff168152602001611b5461ffff1681526020016102fd61ffff1681526020016106d661ffff168152602001610b4a61ffff168152602001610e2c61ffff1681526020016109a561ffff168152602001611a2f61ffff16815260200161125661ffff168152602001610c4f61ffff16815260200161075861ffff1681526020016108cf61ffff1681526020016119f661ffff168152602001610b3561ffff16815260200161030561ffff16815260200161014361ffff16815260200161160861ffff16815260200161135861ffff16815260200161113161ffff16815260200161064361ffff168152602001610fd361ffff1681526020016115c161ffff16815260200161075761ffff168152602001610f0461ffff16815260200161090261ffff1681526020016118c961ffff168152602001610c4b61ffff16815260200161127861ffff16815260200161183861ffff168152602001610a3561ffff1681526020016115d261ffff16815260200161167861ffff168152602001610e6661ffff16815260200161053d61ffff16815260200161182f61ffff16815260200161029561ffff16815260200161097c61ffff1681526020016115f161ffff168152602001611b1a61ffff168152602001610dd461ffff168152602001611a5661ffff16815260200161043f61ffff168152602001607661ffff16815260200161157661ffff168152602001602861ffff168152602001610ee561ffff1681526020016108a661ffff16815260200161172861ffff16815260200161059e61ffff16815260200161187161ffff16815260200161184c61ffff168152602001611a0e61ffff168152602001610a4961ffff1681526020016108d761ffff168152602001610ad861ffff1681526020016113ff61ffff16815260200161091661ffff16815260200161199f61ffff16815260200161102661ffff1681526020016117dd61ffff168152602001610f8861ffff16815260200161171461ffff1681526020016119e361ffff168152602001610d6161ffff16815260200161024b61ffff168152602001610c0361ffff168152602001611a6a61ffff168152602001610c3a61ffff168152602001608a61ffff168152602001603c61ffff168152602001610aa161ffff168152602001610c9361ffff16815260200161068a61ffff168152602001610e4161ffff168152602001611b0661ffff16815260200161080a61ffff16815260200161016261ffff16815260200161187561ffff168152602001610f7861ffff168152602001604c61ffff16815260200161128d61ffff16815260200161132361ffff16815260200161057661ffff16815260200161067e61ffff16815260200160cf61ffff1681526020016106bf61ffff16815260200161197661ffff1681526020016111ad61ffff16815260200161180461ffff1681526020016105b361ffff168152602001610bda61ffff168152602001610dc161ffff16815260200161021161ffff168152602001610c6361ffff1681526020016101e361ffff168152602001610f2061ffff168152602001611b2f61ffff16815260200161162c61ffff1681526020016111dc61ffff1681526020016106ea61ffff168152602001611a6661ffff16815260200161022861ffff16815260200161047161ffff1681526020016110ef61ffff168152602001610ee161ffff16815260200161032161ffff16815260200161155561ffff1681526020016103b061ffff1681526020016107b361ffff1681526020016101a161ffff16815260200161058e61ffff16815260200161043061ffff16815260200161170a61ffff168152602001611ad361ffff168152602001610a1161ffff1681526020016114c661ffff16815260200161084f61ffff168152602001610d2661ffff16815260200161178561ffff168152602001610b9161ffff168152602001610e5961ffff16815260200161080e61ffff168152602001610a2661ffff16815260200161110a61ffff16815260200161127c61ffff1681526020016105fa61ffff168152602001610bca61ffff1681526020016105c361ffff16815260200161174d61ffff1681526020016117d361ffff16815260200161012561ffff1681526020016117f561ffff168152602001611aae61ffff168152602001611b3f61ffff168152602001610cca61ffff1681526020016105f661ffff16815260200161020161ffff168152602001611a3f61ffff16815260200161127461ffff1681526020016118cd61ffff168152602001610f0861ffff1681526020016104af61ffff1681526020016105b761ffff16815260200161191e61ffff1681526020016109a961ffff16815260200161088d61ffff16815260200161033161ffff16815260200161159c61ffff16815260200161142a61ffff16815260200161157a61ffff168152602001607261ffff16815260200161062361ffff1681526020016110c161ffff168152602001610d5161ffff16815260200161019161ffff168152602001610a5861ffff1681526020016113a361ffff168152602001610e8861ffff168152602001610b1061ffff1681526020016102aa61ffff168152602001611ad761ffff16815260200161081a61ffff16815260200161132d61ffff16815260200161194361ffff16815260200161018d61ffff168152602001610ba161ffff16815260200161143161ffff16815260200161093461ffff16815260200161157561ffff16815260200161072561ffff1681526020016110ba61ffff1681526020016116fd61ffff16815260200161182361ffff168152602001610bb161ffff1681526020016102d361ffff1681526020016114b961ffff168152602001610a1961ffff16815260200161067561ffff16815260200161183461ffff16815260200161176d61ffff1681526020016118c661ffff168152602001610abf61ffff1681526020016108fd61ffff168152602001600a61ffff16815260200161076361ffff1681526020016115cd61ffff16815260200161183f61ffff16815260200161175a61ffff1681526020016104a861ffff1681526020016105bc61ffff16815260200161112661ffff1681526020016114e861ffff168152602001611b4b61ffff168152602001610cd661ffff1681526020016117c461ffff16815260200161014461ffff16815260200161027761ffff168152602001610ed161ffff16815260200161010561ffff1681526020016107ec61ffff16815260200161146161ffff16815260200161160f61ffff16815260200161088661ffff168152602001610abb61ffff168152602001610f0f61ffff16815260200161128361ffff168152602001610d7361ffff1681526020016104a061ffff16815260200161184361ffff168152602001610a2a61ffff16815260200161051b61ffff1681526020016111cb61ffff1681526020016112c661ffff16815260200161145161ffff1681526020016110c661ffff16815260200161156d61ffff168152602001610f6b61ffff16815260200161043761ffff1681526020016119d861ffff16815260200161059561ffff1681526020016106a461ffff168152602001610e5e61ffff16815260200160dc61ffff168152602001611ae361ffff1681526020016115e661ffff16815260200161152361ffff1681526020016113b161ffff168152602001611a1a61ffff1681526020016101e861ffff168152602001610d9861ffff16815260200161020a61ffff16815260200161073461ffff1681526020016108f361ffff16815260200161190161ffff1681526020016107dc61ffff168152602001611b2861ffff16815260200161163c61ffff1681526020016109cb61ffff16815260200161050161ffff1681526020016117e261ffff168152602001610d6e61ffff1681526020016111ff61ffff168152602001610bfc61ffff168152602001610e0861ffff1681526020016103c361ffff16815260200161094f61ffff16815260200161060461ffff1681526020016110d861ffff168152602001611af961ffff16815260200161068561ffff168152602001610d0d61ffff168152602001610af361ffff16815260200161197161ffff1681526020016114af61ffff16815260200161154a61ffff1681526020016103cf61ffff168152602001611a8261ffff16815260200161120361ffff16815260200161033e61ffff168152602001610f9861ffff16815260200161141961ffff16815260200161105b61ffff16815260200161192861ffff16815260200161084461ffff16815260200161196961ffff168152602001610aff61ffff16815260200161118c61ffff1681526020016105a461ffff16815260200161122661ffff168152602001610ae861ffff16815260200161151f61ffff16815260200161021661ffff1681526020016105dd61ffff16815260200161110161ffff168152602001611a2661ffff1681526020016106f661ffff168152602001610cad61ffff16815260200161199861ffff1681526020016114bd61ffff168152602001610e8f61ffff168152602001610b1361ffff16815260200161181f61ffff16815260200161018661ffff168152602001610ca061ffff168152602001611af361ffff16815260200161097761ffff168152602001611b1561ffff1681526020016118af61ffff16815260200161021f61ffff16815260200161155e61ffff1681526020016103bb61ffff16815260200161042761ffff16815260200161172361ffff16815260200161011a61ffff16815260200161030a61ffff1681526020016109e361ffff168152602001611aa561ffff16815260200161135f61ffff168152602001611b3461ffff1681526020016109aa61ffff1681526020016107e861ffff1681526020016104ea61ffff168152602001610cc161ffff16815260200161031d61ffff168152602001610b6f61ffff1681526020016115ba61ffff16815260200161034f61ffff1681526020016113ea61ffff16815260200161127361ffff16815260200161111561ffff16815260200161049361ffff1681526020016101c361ffff168152602001610bc161ffff16815260200161108c61ffff16815260200161088161ffff16815260200161165661ffff1681526020016119a461ffff1681526020016117b761ffff16815260200161099e61ffff16815260200161089661ffff16815260200161048f61ffff1681526020016101f661ffff16815260200161035361ffff16815260200161140461ffff16815260200161078161ffff16815260200161107c61ffff1681526020016102b561ffff16815260200161196361ffff168152602001610d2161ffff16815260200161181361ffff168152602001610e9361ffff16815260200161098361ffff16815260200161178a61ffff16815260200161194c61ffff16815260200161157161ffff16815260200161061861ffff16815260200161019a61ffff1681526020016113ac61ffff16815260200161136361ffff16815260200161146561ffff16815260200161070661ffff16815260200161025f61ffff16815260200161052f61ffff16815260200161013861ffff1681526020016111df61ffff168152602001610c7f61ffff16815260200161185761ffff16815260200161037c61ffff1681526020016103aa61ffff168152602001610acf61ffff16815260200161073861ffff168152602001611a4461ffff168152602001610dc661ffff168152602001610c6861ffff16815260200161068161ffff168152602001610c8861ffff16815260200160c861ffff16815260200161097361ffff1681526020016115fa61ffff1681526020016114d561ffff1681526020016114b361ffff1681526020016111aa61ffff16815260200161104c61ffff16815260200161055a61ffff168152602001610f7f61ffff16815260200161187a61ffff16815260200161042361ffff168152602001610d6a61ffff168152602001610c3161ffff1681526020016103d461ffff168152602001604761ffff168152602001610f9461ffff16815260200161131861ffff16815260200160d861ffff16815260200161056d61ffff16815260200161028661ffff16815260200161068961ffff16815260200161016161ffff1681526020016111b661ffff168152602001605861ffff16815260200161094861ffff1681526020016103e461ffff1681526020016118bf61ffff16815260200161026361ffff16815260200161099a61ffff168152602001611b2461ffff1681526020016114fc61ffff16815260200161163861ffff16815260200161165a61ffff1681526020016111d361ffff16815260200161102561ffff16815260200161013061ffff16815260200161053361ffff168152602001610f5661ffff1681526020016108d861ffff16815260200161185361ffff168152602001610d9361ffff168152602001611a2a61ffff1681526020016101ec61ffff168152602001610f1761ffff168152602001610ad361ffff168152602001610f5761ffff16815260200161037561ffff16815260200161185261ffff16815260200160ba61ffff1681526020016105a961ffff168152602001610d9261ffff1681526020016118db61ffff16815260200161021b61ffff168152602001610f1661ffff168152602001610fed61ffff16815260200161147461ffff16815260200161099b61ffff16815260200161162261ffff16815260200161136e61ffff1681526020016114fd61ffff16815260200161100261ffff16815260200161102461ffff16815260200161053261ffff1681526020016103e561ffff16815260200161094961ffff16815260200161158e61ffff168152602001610efb61ffff1681526020016115ff61ffff16815260200161131961ffff16815260200160d961ffff1681526020016104c661ffff16815260200161028761ffff16815260200161056c61ffff16815260200161068861ffff16815260200161016061ffff16815260200161180e61ffff16815260200161104561ffff16815260200161168e61ffff1681526020016108b061ffff16815260200161042261ffff168152602001610d6b61ffff16815260200161068061ffff16815260200161134761ffff16815260200161168261ffff1681526020016102ca61ffff168152602001610d8661ffff168152602001610c7e61ffff168152602001610f5b61ffff168152602001610ace61ffff168152602001610f2261ffff16815260200161073961ffff16815260200161162661ffff16815260200161025e61ffff16815260200161052e61ffff1681526020016111de61ffff1681526020016110cb61ffff1681526020016110b461ffff16815260200161155b61ffff1681526020016103ae61ffff16815260200161017061ffff16815260200161181261ffff168152602001610b0661ffff16815260200161084961ffff168152602001610b9761ffff168152602001610e5b61ffff16815260200161127e61ffff16815260200161039361ffff16815260200161123f61ffff1681526020016114e561ffff168152602001611ab461ffff168152602001610b3b61ffff168152602001610b7261ffff168152602001610e2661ffff16815260200161030c61ffff1681526020016107f161ffff16815260200161089761ffff16815260200161034e61ffff1681526020016115bb61ffff16815260200161075161ffff1681526020016113eb61ffff16815260200161127261ffff168152602001609161ffff16815260200161049261ffff16815260200161175761ffff16815260200161040b61ffff16815260200161108d61ffff16815260200161038761ffff16815260200161153261ffff168152602001610cf961ffff16815260200161014961ffff168152602001610ebb61ffff16815260200161087061ffff1681526020016109ab61ffff1681526020016107e961ffff168152602001610e3261ffff16815260200161064961ffff1681526020016118ae61ffff16815260200161021e61ffff16815260200161072061ffff16815260200161139d61ffff16815260200161167e61ffff1681526020016102ac61ffff168152602001610e4f61ffff168152602001610d4761ffff16815260200161193d61ffff168152602001610cac61ffff168152602001610e1e61ffff168152602001610b5a61ffff1681526020016117d761ffff16815260200161013561ffff168152602001610ea761ffff168152602001610ffe61ffff168152602001610b1b61ffff16815260200161051061ffff1681526020016102f761ffff1681526020016109ce61ffff168152602001610c6e61ffff168152602001610bd461ffff16815260200161036261ffff1681526020016115a761ffff1681526020016105dc61ffff16815260200161047e61ffff168152602001611a2761ffff168152602001610c8d61ffff16815260200161080461ffff1681526020016109f361ffff1681526020016114a261ffff16815260200161079561ffff16815260200161120261ffff168152602001608461ffff1681526020016110d161ffff168152602001611a7061ffff16815260200161141861ffff168152602001611af861ffff16815260200161134b61ffff16815260200161169561ffff16815260200161177761ffff168152602001610c8561ffff1681526020016104d661ffff16815260200161193961ffff168152602001610e4761ffff16815260200161068461ffff16815260200161105e61ffff16815260200161118561ffff168152602001610d0c61ffff16815260200161069761ffff1681526020016117fe61ffff168152602001610af261ffff168152602001610e7e61ffff16815260200161083561ffff16815260200161057c61ffff16815260200161041e61ffff168152602001610bfd61ffff16815260200161094e61ffff168152602001610a8961ffff168152602001610c0e61ffff168152602001607c61ffff168152602001610b5e61ffff168152602001610e1261ffff1681526020016111f561ffff16815260200161070361ffff1681526020016117a261ffff16815260200161098b61ffff16815260200161137561ffff16815260200161166b61ffff1681526020016109ca61ffff16815260200161199161ffff168152602001610ea361ffff1681526020016103a761ffff16815260200161076c61ffff16815260200161106961ffff16815260200161122b61ffff168152602001610d9961ffff168152602001611a4961ffff1681526020016114c061ffff16815260200161082761ffff16815260200161166e61ffff168152602001610ba861ffff16815260200161103961ffff16815260200161016c61ffff16815260200161195e61ffff168152602001610e5f61ffff16815260200161066c61ffff168152602001610c9d61ffff168152602001611ae261ffff168152602001610a2061ffff168152602001606c61ffff168152602001610dde61ffff168152602001611a6061ffff168152602001610a5e61ffff16815260200161144761ffff16815260200161173261ffff1681526020016117fb61ffff16815260200161014d61ffff1681526020016117cd61ffff1681526020016119a961ffff1681526020016111ca61ffff168152602001611b4e61ffff1681526020016114e161ffff1681526020016109b061ffff16815260200161089361ffff16815260200161145061ffff168152602001610ec861ffff1681526020016104db61ffff16815260200161074d61ffff168152602001610f0e61ffff168152602001610c5561ffff168152602001610d7261ffff16815260200161039761ffff1681526020016114e961ffff1681526020016106cc61ffff16815260200161014561ffff16815260200161113761ffff168152602001610ed061ffff168152602001610b4061ffff1681526020016107ed61ffff1681526020016109af61ffff16815260200161088761ffff168152602001611b3961ffff168152602001610db761ffff168152602001610abe61ffff1681526020016108fc61ffff168152602001600b61ffff168152602001610f4361ffff16815260200161076261ffff168152602001610bbc61ffff168152602001610d7e61ffff16815260200161112761ffff168152602001610e6061ffff168152602001610bb061ffff1681526020016102d261ffff16815260200161198061ffff1681526020016114b861ffff16815260200161147961ffff168152602001610fa061ffff168152602001610d4361ffff168152602001602e61ffff168152602001610ee761ffff16815260200161043961ffff168152602001610dda61ffff1681526020016110bb61ffff1681526020016118aa61ffff168152602001610a5261ffff16815260200161144361ffff16815260200161085f61ffff1681526020016117d461ffff168152602001610ea861ffff16815260200161199661ffff16815260200161179d61ffff1681526020016111e661ffff168152602001611b2261ffff16815260200161162561ffff1681526020016116b561ffff16815260200161048161ffff168152602001611a2861ffff168152602001610f5861ffff16815260200161077b61ffff16815260200161151d61ffff16815260200160bd61ffff16815260200161107661ffff168152602001610b0161ffff168152602001610e7961ffff16815260200161069c61ffff16815260200161055861ffff16815260200161130561ffff1681526020016109f061ffff168152602001611aff61ffff168152602001610e3861ffff16815260200161028861ffff16815260200161141b61ffff16815260200161045061ffff1681526020016110d261ffff168152602001610df161ffff16815260200161129461ffff16815260200161109361ffff16815260200161041161ffff168152602001611a8061ffff16815260200161058361ffff16815260200161083661ffff16815260200161118661ffff1681526020016117fd61ffff168152602001610c8661ffff16815260200161117561ffff16815260200161169661ffff16815260200161024161ffff1681526020016110d661ffff168152602001607f61ffff16815260200161045861ffff168152602001610f9261ffff16815260200161033861ffff16815260200161094d61ffff16815260200161057f61ffff1681526020016101b061ffff168152602001610b2861ffff168152602001610cf261ffff1681526020016107da61ffff16815260200161150961ffff168152602001610b6161ffff16815260200161026161ffff16815260200161190361ffff168152602001610cb361ffff16815260200161073661ffff1681526020016115b461ffff1681526020016113f261ffff16815260200161047961ffff168152602001610c6a61ffff168152602001610d9a61ffff16815260200160aa61ffff16815260200161020861ffff16815260200161106a61ffff16815260200161152561ffff16815260200161148661ffff168152602001610a1f61ffff16815260200161133461ffff16815260200161182661ffff16815260200161194e61ffff168152602001610d3461ffff168152602001610faf61ffff16815260200161054861ffff16815260200161166d61ffff16815260200161062d61ffff16815260200161121561ffff1681526020016113ae61ffff16815260200161089f61ffff168152602001603561ffff168152602001611a5f61ffff168152602001610b4f61ffff1681526020016104d861ffff16815260200161145361ffff16815260200161165461ffff1681526020016112c461ffff16815260200161088361ffff1681526020016111cd61ffff1681526020016102f861ffff16815260200161075d61ffff1681526020016105d561ffff16815260200161125361ffff168152602001610f1161ffff168152602001610ab961ffff1681526020016113d861ffff16815260200161145f61ffff16815260200161088461ffff16815260200161160d61ffff16815260200161192761ffff1681526020016106cf61ffff16815260200161014661ffff16815260200161052161ffff1681526020016109bf61ffff1681526020016112cc61ffff1681526020016119ff61ffff16815260200161123c61ffff168152602001610f4061ffff1681526020016108c661ffff168152602001610ac161ffff1681526020016113e861ffff1681526020016105cd61ffff168152602001610db861ffff16815260200161147a61ffff168152602001611af161ffff1681526020016112ed61ffff16815260200161082c61ffff16815260200161167d61ffff1681526020016114bb61ffff168152602001610baf61ffff168152602001610e9161ffff1681526020016108a361ffff168152602001610d4861ffff16815260200161063d61ffff168152602001610dd961ffff1681526020016118ad61ffff16815260200161046861ffff168152602001610ee861ffff1681526020016108f161ffff168152602001602061ffff1681526020016101ea61ffff168152602001610dcc61ffff168152602001611a4a61ffff16815260200161185161ffff168152602001610bd361ffff16815260200161122861ffff16815260200160b961ffff16815260200161152161ffff168152602001610a4c61ffff16815260200161077f61ffff16815260200161037661ffff1681526020016111d161ffff16815260200161053561ffff16815260200161147361ffff168152602001610b5d61ffff168152602001611a6f61ffff16815260200161061661ffff1681526020016103e261ffff168152602001610a6561ffff168152602001610d5c61ffff168152602001610bfe61ffff1681526020016109f461ffff16815260200161169161ffff16815260200161068761ffff168152602001610a8a61ffff16815260200161187861ffff16815260200161120161ffff16815260200161154861ffff1681526020016107a661ffff16815260200161139a61ffff1681526020016108b361ffff1681526020016111a861ffff16815260200161015b61ffff16815260200161168161ffff16815260200161149a61ffff1681526020016115f861ffff168152602001610b8461ffff16815260200161028c61ffff1681526020016118e861ffff168152602001610f3a61ffff1681526020016118ff61ffff16815260200161166861ffff168152602001611aa361ffff16815260200161013661ffff1681526020016106ef61ffff168152602001610fde61ffff16815260200161065e61ffff16815260200161136161ffff1681526020016107b661ffff1681526020016103ad61ffff16815260200161059361ffff1681526020016119da61ffff16815260200161061a61ffff168152602001606b61ffff16815260200161143361ffff16815260200161116161ffff168152602001610e5c61ffff1681526020016115e861ffff168152602001611b0f61ffff1681526020016102b361ffff16815260200161181161ffff168152602001610e9561ffff16815260200161198361ffff16815260200161107e61ffff1681526020016103fc61ffff16815260200161174861ffff16815260200161124061ffff1681526020016101bd61ffff16815260200161078361ffff16815260200161076161ffff1681526020016115df61ffff16815260200161090f61ffff16815260200161140661ffff168152602001609661ffff168152602001610db461ffff168152602001611b3a61ffff16815260200161030f61ffff1681526020016117b961ffff168152602001610b5361ffff1681526020016119a661ffff168152602001610b3c61ffff1681526020016117f861ffff16815260200161038461ffff16815260200161153161ffff168152602001611a0361ffff16815260200161040c61ffff16815260200161184161ffff168152602001609261ffff1681526020016105d161ffff16815260200161049561ffff1681526020016115b861ffff16815260200161031b61ffff16815260200161192361ffff168152602001611b3661ffff16815260200161161161ffff16815260200161087361ffff1681526020016109c361ffff1681526020016117e861ffff168152602001610b2c61ffff168152602001610ebc61ffff16815260200161172161ffff16815260200161156061ffff1681526020016107aa61ffff168152602001610a9461ffff16815260200161032c61ffff168152602001606f61ffff1681526020016110e661ffff16815260200161062661ffff16815260200161021d61ffff1681526020016116e861ffff16815260200161097561ffff16815260200161018861ffff16815260200161183661ffff168152602001610b1561ffff16815260200161054461ffff16815260200161085661ffff16815260200161097461ffff168152602001610b9d61ffff168152602001610c9f61ffff16815260200160ef61ffff16815260200161179161ffff16815260200161197e61ffff16815260200161182061ffff16815260200161054561ffff16815260200161121861ffff16815260200161019561ffff1681526020016103bc61ffff1681526020016115a061ffff168152602001610c2e61ffff16815260200161046561ffff1681526020016112a961ffff1681526020016116e961ffff16815260200161031a61ffff168152602001610b6c61ffff1681526020016109e461ffff168152602001611aa661ffff1681526020016117e961ffff168152602001610b2d61ffff168152602001610ebd61ffff1681526020016119ab61ffff1681526020016113d261ffff1681526020016105bb61ffff16815260200161040d61ffff16815260200161108b61ffff1681526020016116c861ffff16815260200161049461ffff1681526020016115b961ffff1681526020016117b861ffff1681526020016106de61ffff16815260200161051c61ffff168152602001611ab261ffff1681526020016112c961ffff1681526020016109dc61ffff16815260200161107f61ffff16815260200161112561ffff16815260200161039561ffff16815260200161078261ffff16815260200161090e61ffff1681526020016105fe61ffff168152602001610db561ffff16815260200161128061ffff16815260200161018161ffff16815260200161098461ffff16815260200161082961ffff168152602001611acf61ffff16815260200161084b61ffff16815260200161181061ffff16815260200161043461ffff1681526020016116f161ffff16815260200161044b61ffff1681526020016110eb61ffff16815260200161032561ffff16815260200161159061ffff168152602001611aa261ffff168152602001610cf761ffff16815260200161052c61ffff16815260200161013761ffff16815260200160fe61ffff168152602001611a4761ffff1681526020016101e761ffff16815260200161047c61ffff168152602001610c6761ffff168152602001610a3d61ffff16815260200160c061ffff168152602001611a0661ffff168152602001610bd661ffff1681526020016111a961ffff16815260200161015a61ffff16815260200161069961ffff16815260200161130861ffff16815260200161149b61ffff1681526020016104d461ffff16815260200161177961ffff168152602001610eed61ffff168152602001610aad61ffff1681526020016103d761ffff168152602001610df461ffff16815260200161187961ffff16815260200161025361ffff16815260200161139b61ffff16815260200161104761ffff1681526020016106c761ffff168152602001610fb661ffff16815260200161117861ffff16815260200161028561ffff16815260200161105c61ffff16815260200161133961ffff16815260200161160161ffff1681526020016116d961ffff1681526020016118c061ffff16815260200161045561ffff168152602001610aa561ffff168152602001610efd61ffff168152602001610f8461ffff1681526020016119df61ffff1681526020016112e161ffff16815260200161162061ffff16815260200161065b61ffff168152602001610ad461ffff16815260200161036461ffff168152602001610dcd61ffff168152602001611a4b61ffff168152602001610d9461ffff16815260200161152061ffff1681526020016108a261ffff16815260200161019961ffff168152602001610beb61ffff16815260200161063c61ffff1681526020016116ed61ffff16815260200161046961ffff168152602001610c2a61ffff168152602001602c61ffff16815260200160eb61ffff1681526020016104b061ffff168152602001610d4561ffff16815260200161067261ffff168152602001611adf61ffff16815260200161195061ffff16815260200161017261ffff1681526020016106b361ffff1681526020016102d061ffff168152602001610bbe61ffff1681526020016119fe61ffff16815260200161112961ffff168152602001610d8061ffff168152602001610a3961ffff16815260200161079261ffff168152602001610f4161ffff1681526020016113d661ffff168152602001610f0061ffff168152602001611a3761ffff16815260200161088561ffff16815260200161113561ffff168152602001610fd761ffff1681526020016106ce61ffff1681526020016117c761ffff16815260200161100e61ffff16815260200161052061ffff168152602001611b4861ffff1681526020016108cb61ffff168152602001610a2961ffff16815260200161112161ffff168152602001611a3361ffff16815260200161060261ffff1681526020016118d561ffff1681526020016105d461ffff16815260200161125261ffff168152602001610eca61ffff1681526020016119b861ffff16815260200161027061ffff16815260200161064b61ffff16815260200161089561ffff1681526020016109e061ffff168152602001611ab661ffff168152602001611b5061ffff1681526020016114e361ffff168152602001610d0b61ffff16815260200161014b61ffff16815260200161100a61ffff1681526020016111cc61ffff16815260200161186561ffff1681526020016110b661ffff168152602001610be761ffff1681526020016119d761ffff168152602001610d5961ffff168152602001610a6061ffff16815260200161092761ffff168152602001610c1e61ffff168152602001610de061ffff16815260200161148761ffff1681526020016115e561ffff168152602001610b9961ffff1681526020016102a161ffff168152602001610fae61ffff1681526020016106a761ffff168152602001610e6e61ffff168152602001610baa61ffff16815260200161196061ffff16815260200161073761ffff16815260200160ab61ffff1681526020016116ac61ffff1681526020016118fa61ffff16815260200161152461ffff168152602001610ae361ffff168152602001610ff061ffff1681526020016106f261ffff16815260200161086a61ffff16815260200161137761ffff1681526020016107db61ffff16815260200161098961ffff168152602001611b2761ffff1681526020016111f361ffff16815260200161010261ffff168152602001610c0c61ffff16815260200161060761ffff168152602001610a8761ffff168152602001610f8061ffff16815260200161094c61ffff1681526020016101b161ffff16815260200161171c61ffff1681526020016111fc61ffff1681526020016109f961ffff16815260200161069561ffff168152602001610e8061ffff16815260200161196e61ffff168152602001610c8761ffff16815260200161193761ffff168152602001610e4961ffff1681526020016115fd61ffff16815260200161097061ffff16815260200161070e61ffff16815260200161158c61ffff168152602001604461ffff168152602001610a7b61ffff16815260200161045161ffff1681526020016110d361ffff168152602001608261ffff16815260200161061361ffff1681526020016116d561ffff16815260200161120461ffff16815260200161154d61ffff16815260200161095c61ffff16815260200161069d61ffff16815260200161118b61ffff16815260200161055961ffff16815260200161130461ffff1681526020016114a061ffff16815260200161096061ffff16815260200161028961ffff16815260200161177d61ffff16815260200161021961ffff16815260200161036061ffff16815260200161077a61ffff1681526020016105a761ffff168152602001611a1661ffff168152602001610c6c61ffff16815260200161174561ffff16815260200161163761ffff168152602001610b1961ffff16815260200161100061ffff168152602001610ea961ffff16815260200161199761ffff1681526020016106f561ffff1681526020016111e761ffff16815260200161114d61ffff168152602001610b5861ffff168152602001610e2061ffff168152602001611b2361ffff16815260200161099961ffff16815260200161147661ffff1681526020016101f061ffff168152602001610c5c61ffff168152602001610a4661ffff1681526020016118f561ffff168152602001611a1161ffff1681526020016109d761ffff168152602001610eae61ffff16815260200161065461ffff16815260200160f561ffff1681526020016104f661ffff16815260200161147161ffff168152602001610a8061ffff168152602001610ef661ffff16815260200161109961ffff16815260200161139061ffff16815260200161055261ffff1681526020016102c361ffff1681526020016112ff61ffff16815260200161160261ffff16815260200160d461ffff16815260200161178261ffff16815260200161028261ffff168152602001610c3561ffff168152602001611a7961ffff16815260200161093c61ffff168152602001604b61ffff1681526020016108ad61ffff1681526020016101b661ffff16815260200161083c61ffff1681526020016109fe61ffff1681526020016106bc61ffff168152602001610d1561ffff16815260200161067d61ffff168152602001610fc161ffff16815260200161149861ffff168152602001610c6461ffff168152602001611a0961ffff16815260200161185b61ffff16815260200161038061ffff16815260200161077561ffff168152602001610a4261ffff16815260200161013c61ffff1681526020016102ea61ffff1681526020016106ed61ffff1681526020016112d661ffff1681526020016117ab61ffff16815260200161025b61ffff16815260200161172b61ffff1681526020016110b161ffff16815260200161143961ffff168152602001610a9e61ffff16815260200161046e61ffff168152602001606561ffff16815260200161080d61ffff16815260200160e461ffff168152602001610b9261ffff16815260200161054e61ffff168152602001611ad061ffff168152602001610a0e61ffff16815260200161084c61ffff16815260200161038e61ffff16815260200161040261ffff16815260200161174e61ffff1681526020016105db61ffff1681526020016105fd61ffff16815260200161114261ffff16815260200161031161ffff1681526020016107f461ffff168152602001611b4061ffff1681526020016109db61ffff168152602001610eb261ffff16815260200161012261ffff1681526020016119a061ffff168152602001610ce261ffff16815260200161112e61ffff16815260200161108861ffff1681526020016113d161ffff16815260200161038a61ffff16815260200161078d61ffff16815260200161090561ffff168152602001610dbe61ffff1681526020016116cb61ffff16815260200161111961ffff1681526020016119c761ffff168152602001610b6b61ffff1681526020016119b061ffff16815260200161011e61ffff1681526020016106d561ffff16815260200161087561ffff16815260200161156261ffff16815260200161042b61ffff1681526020016110a961ffff16815260200161019261ffff16815260200161044061ffff1681526020016116e661ffff16815260200161062461ffff16815260200161142961ffff16815260200161179261ffff168152602001610ca461ffff168152602001611b1961ffff1681526020016115f261ffff16815260200161097b61ffff16815260200161085461ffff168152602001610b0f61ffff168152602001610e8b61ffff16815260200161197961ffff1681526020016102a961ffff168152602001610e6961ffff1681526020016117da61ffff168152602001610ce861ffff16815260200161050d61ffff168152602001610eaa61ffff1681526020016112e661ffff16815260200161086161ffff16815260200161151361ffff168152602001610ca961ffff168152602001610b5761ffff16815260200161026b61ffff168152602001602661ffff16815260200161035f61ffff1681526020016108eb61ffff1681526020016105e161ffff1681526020016116b761ffff168152602001610c6061ffff16815260200160a061ffff16815260200161107461ffff1681526020016103f261ffff168152602001610afb61ffff168152602001610d1961ffff16815260200161105761ffff16815260200161177e61ffff16815260200161149461ffff168152602001611b0561ffff16815260200161160661ffff168152602001610f8b61ffff1681526020016103cb61ffff168152602001605061ffff16815260200161095761ffff16815260200161138c61ffff16815260200161188661ffff16815260200161056261ffff168152602001610d1161ffff168152602001610af761ffff168152602001611abc61ffff1681526020016114ab61ffff168152602001611af561ffff16815260200161169861ffff16815260200160d061ffff168152602001610b7e61ffff168152602001604f61ffff168152602001610a8461ffff16815260200161023b61ffff168152602001610c3961ffff16815260200161045a61ffff16815260200161171761ffff16815260200161041b61ffff168152602001611a8a61ffff16815260200161154261ffff168152602001606061ffff1681526020016103c761ffff16815260200161086961ffff168152602001611a9d61ffff1681526020016117de61ffff1681526020016106fe61ffff168152602001610cb961ffff1681526020016107e061ffff168152602001611a1e61ffff1681526020016116ab61ffff168152602001610f3461ffff1681526020016113b561ffff1681526020016103ee61ffff1681526020016105b061ffff168152602001610c7761ffff16815260200161122e61ffff1681526020016101cf61ffff1681526020016102a261ffff16815260200161182861ffff16815260200161066961ffff1681526020016104bb61ffff168152602001611ae761ffff1681526020016115e261ffff16815260200161132e61ffff168152602001611ad461ffff16815260200161054a61ffff168152602001610e6d61ffff168152602001610f6761ffff16815260200161170961ffff16815260200161186261ffff1681526020016119d461ffff16815260200161044461ffff168152602001610de361ffff16815260200161062061ffff16815260200161161761ffff16815260200161031561ffff1681526020016104de61ffff16815260200161011161ffff168152602001610b7b61ffff16815260200161191d61ffff16815260200161051761ffff1681526020016106d961ffff1681526020016112c261ffff1681526020016109b561ffff16815260200161124661ffff16815260200161184761ffff16815260200161108461ffff16815260200161075b61ffff1681526020016113cd61ffff1681526020016108d061ffff16815260200161153f61ffff168152602001610f4a61ffff16815260200161090961ffff1681526020016113de61ffff16815260200161035b61ffff16815260200161125961ffff1681526020016118ce61ffff168152602001610fd461ffff1681526020016104e261ffff16815260200161160b61ffff16815260200161087961ffff1681526020016114ec61ffff1681526020016109eb61ffff1681526020016112ce61ffff168152602001610ec261ffff1681526020016106d161ffff168152602001610cd261ffff16815260200161014061ffff168152602001610a3261ffff1681526020016108c061ffff168152602001610d7b61ffff16815260200161112a61ffff1681526020016119fd61ffff1681526020016104ac61ffff1681526020016101cb61ffff1681526020016105cb61ffff1681526020016118ca61ffff1681526020016116cf61ffff168152602001610ac361ffff1681526020016115ee61ffff16815260200161147c61ffff16815260200160e861ffff16815260200161179661ffff16815260200161067961ffff16815260200161018e61ffff16815260200161029661ffff16815260200161194461ffff168152602001610bb561ffff16815260200161102c61ffff168152602001610e6561ffff16815260200161195761ffff168152602001610d4e61ffff16815260200161063761ffff1681526020016116f961ffff16815260200161156661ffff168152602001610a5761ffff1681526020016110be61ffff168152602001611a5561ffff1681526020016118a761ffff1681526020016119cd61ffff16815260200161121e61ffff16815260200161186f61ffff1681526020016110ac61ffff1681526020016116f861ffff1681526020016107b161ffff16815260200161157861ffff1681526020016107c261ffff16815260200161033361ffff168152602001610dd661ffff16815260200161043d61ffff168152602001611a5461ffff16815260200161132b61ffff168152602001611aea61ffff168152602001610fa461ffff16815260200161018f61ffff168152602001610d3f61ffff168152602001610bb461ffff168152602001610e6461ffff16815260200161102d61ffff168152602001610a3361ffff168152602001610f3f61ffff16815260200161076661ffff168152602001610bb861ffff1681526020016119fc61ffff16815260200161176861ffff168152602001610f0661ffff16815260200161027a61ffff168152602001610b4461ffff1681526020016119c261ffff1681526020016104e361ffff16815260200161135661ffff16815260200161160a61ffff1681526020016109ea61ffff1681526020016112cf61ffff1681526020016117c161ffff16815260200161111f61ffff16815260200161184661ffff1681526020016113cc61ffff1681526020016115d861ffff168152602001610a2f61ffff1681526020016113df61ffff16815260200161035a61ffff16815260200161125861ffff1681526020016105d661ffff1681526020016117be61ffff168152602001610fcd61ffff168152602001610b4c61ffff1681526020016111c661ffff1681526020016112c361ffff1681526020016114dd61ffff16815260200161144b61ffff16815260200161186361ffff16815260200161063261ffff1681526020016116f761ffff16815260200161115a61ffff168152602001610d3b61ffff168152602001610a2461ffff16815260200161148561ffff168152602001610a1361ffff16815260200161167261ffff1681526020016112f661ffff1681526020016110f461ffff1681526020016116aa61ffff1681526020016105e861ffff16815260200161036a61ffff1681526020016115af61ffff1681526020016113ed61ffff1681526020016103a361ffff168152602001610add61ffff1681526020016113b461ffff16815260200161106d61ffff16815260200161173b61ffff16815260200161122f61ffff168152602001610c7661ffff16815260200161086861ffff168152602001611a9c61ffff168152602001610ff661ffff168152602001610b2361ffff16815260200161050461ffff1681526020016117df61ffff16815260200161190461ffff168152602001610e1661ffff1681526020016111f161ffff16815260200161162e61ffff16815260200161150661ffff16815260200161094161ffff1681526020016103dd61ffff168152602001610ab361ffff16815260200161158261ffff168152602001610dfa61ffff16815260200161188861ffff16815260200161023a61ffff1681526020016116df61ffff16815260200161128b61ffff16815260200161045b61ffff1681526020016101b361ffff1681526020016111fa61ffff16815260200161057861ffff168152602001610e0d61ffff16815260200161041a61ffff16815260200161095261ffff16815260200161180261ffff16815260200161118161ffff16815260200161056361ffff168152602001610af661ffff16815260200161130e61ffff16815260200161096a61ffff16815260200161169961ffff16815260200160d161ffff16815260200161106261ffff168152602001610b7f61ffff168152602001608861ffff16815260200161044f61ffff168152602001610c1661ffff1681526020016116d361ffff16815260200161158661ffff168152602001610a7d61ffff168152602001610f9d61ffff168152602001610f8a61ffff16815260200161095661ffff1681526020016103ca61ffff16815260200161024d61ffff168152602001611a7f61ffff16815260200161041661ffff16815260200161058861ffff16815260200161171261ffff1681526020016101a761ffff16815260200161105661ffff1681526020016116a161ffff168152602001611b0461ffff16815260200161160761ffff1681526020016113fd61ffff16815260200161048261ffff16815260200161122361ffff168152602001610c7261ffff16815260200161173f61ffff1681526020016101da61ffff1681526020016105a161ffff1681526020016118f061ffff16815260200161077861ffff16815260200161053a61ffff168152602001610ce961ffff16815260200161199d61ffff168152602001610b1f61ffff168152602001611a9461ffff16815260200161151261ffff168152602001610ca861ffff1681526020016111e961ffff1681526020016106fb61ffff168152602001610b5661ffff16815260200161190c61ffff16815260200161116a61ffff16815260200161018b61ffff168152602001610fa861ffff16815260200161148161ffff168152602001610a0361ffff1681526020016102a861ffff1681526020016107ad61ffff1681526020016110e161ffff16815260200161044161ffff1681526020016112a361ffff16815260200161159a61ffff16815260200161071c61ffff1681526020016109a761ffff168152602001611b3161ffff1681526020016119c661ffff16815260200161031861ffff168152602001610b6a61ffff1681526020016119b161ffff168152602001610b3361ffff1681526020016112d361ffff16815260200161040761ffff16815260200161076a61ffff16815260200161078c61ffff16815260200161075561ffff1681526020016115bf61ffff16815260200161127661ffff1681526020016101ff61ffff168152602001610c4d61ffff168152602001608d61ffff16815260200161114361ffff16815260200161191861ffff168152602001611b4161ffff1681526020016109b861ffff1681526020016109da61ffff16815260200161012361ffff1681526020016119a161ffff1681526020016117f361ffff16815260200161078461ffff16815260200161040361ffff16815260200161108161ffff1681526020016105c561ffff16815260200161124361ffff16815260200161176461ffff16815260200161048a61ffff16815260200161074561ffff16815260200161140161ffff16815260200161080c61ffff168152602001610c9561ffff16815260200160e561ffff168152602001610e5761ffff1681526020016102a761ffff1681526020016102b861ffff16815260200161198861ffff16815260200161084d61ffff16815260200161019f61ffff16815260200161143861ffff16815260200161072c61ffff16815260200161032361ffff16815260200161061d61ffff16815260200161046f61ffff168152602001606461ffff1681526020016110f161ffff16815260200161101861ffff1681526020016102eb61ffff16815260200161050861ffff1681526020016111da61ffff16815260200161166361ffff16815260200161137d61ffff168152602001610fe161ffff168152602001610b6661ffff16815260200161190861ffff16815260200161123361ffff16815260200161185a61ffff16815260200161077461ffff168152602001610a4361ffff16815260200161083d61ffff168152602001610e8661ffff16815260200161015461ffff16815260200161105161ffff16815260200161028f61ffff16815260200161067c61ffff1681526020016115f761ffff16815260200161134361ffff168152602001610df661ffff168152602001610aaf61ffff16815260200161055361ffff1681526020016111b361ffff1681526020016102c261ffff1681526020016106c561ffff1681526020016112fe61ffff16815260200161149161ffff1681526020016104ca61ffff168152602001603e61ffff168152602001610dea61ffff1681526020016119e161ffff168152602001610d6361ffff16815260200161139161ffff16815260200161155361ffff16815260200161079d61ffff16815260200161086461ffff16815260200161150161ffff16815260200161165f61ffff16815260200161053661ffff16815260200161102861ffff16815260200161114761ffff168152602001610fe961ffff16815260200161147061ffff16815260200161151661ffff1681526020016118df61ffff16815260200161048661ffff168152602001610c5d61ffff168152602001611a5161ffff1681526020016116ba61ffff1681526020016105e461ffff16815260200161091461ffff168152602001610f5361ffff168152602001610f3161ffff168152602001611a1061ffff168152506014906107d06201084892919062010cf7565b503480156201085657600080fd5b50604051620142c5380380620142c583398181016040528101906201087c919062010df5565b6201089c620108906201096760201b60201c565b6201096f60201b60201c565b33600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505062010ec6565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82805482825590600052602060002090600f0160109004810192821562010ad15791602002820160005b8382111562010a9f57835183826101000a81548161ffff021916908361ffff160217905550926020019260020160208160010104928301926001030262010a5d565b801562010acf5782816101000a81549061ffff021916905560020160208160010104928301926001030262010a9f565b505b50905062010ae0919062010da8565b5090565b82805482825590600052602060002090600f0160109004810192821562010b825791602002820160005b8382111562010b5057835183826101000a81548161ffff021916908361ffff160217905550926020019260020160208160010104928301926001030262010b0e565b801562010b805782816101000a81549061ffff021916905560020160208160010104928301926001030262010b50565b505b50905062010b91919062010da8565b5090565b82805482825590600052602060002090600f0160109004810192821562010c335791602002820160005b8382111562010c0157835183826101000a81548161ffff021916908361ffff160217905550926020019260020160208160010104928301926001030262010bbf565b801562010c315782816101000a81549061ffff021916905560020160208160010104928301926001030262010c01565b505b50905062010c42919062010da8565b5090565b82805482825590600052602060002090600f0160109004810192821562010ce45791602002820160005b8382111562010cb257835183826101000a81548161ffff021916908361ffff160217905550926020019260020160208160010104928301926001030262010c70565b801562010ce25782816101000a81549061ffff021916905560020160208160010104928301926001030262010cb2565b505b50905062010cf3919062010da8565b5090565b82805482825590600052602060002090600f0160109004810192821562010d955791602002820160005b8382111562010d6357835183826101000a81548161ffff021916908361ffff160217905550926020019260020160208160010104928301926001030262010d21565b801562010d935782816101000a81549061ffff021916905560020160208160010104928301926001030262010d63565b505b50905062010da4919062010da8565b5090565b5b8082111562010dc357600081600090555060010162010da9565b5090565b60008151905062010dd88162010e92565b92915050565b60008151905062010def8162010eac565b92915050565b6000806040838503121562010e0957600080fd5b600062010e198582860162010dc7565b925050602062010e2c8582860162010dde565b9150509250929050565b600062010e438262010e72565b9050919050565b600062010e578262010e36565b9050919050565b600062010e6b8262010e36565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b62010e9d8162010e4a565b811462010ea957600080fd5b50565b62010eb78162010e5e565b811462010ec357600080fd5b50565b6133ef8062010ed66000396000f3fe6080604052600436106101bb5760003560e01c806381a36fb6116100ec578063c36be3571161008a578063e449f34111610064578063e449f34114610661578063efebfc471461068a578063f2fde38b146106b5578063f951e738146106de57610214565b8063c36be357146105e2578063cacfaa061461060b578063cc4bf4421461063657610214565b80638e0f914c116100c65780638e0f914c14610536578063a3510e0b14610561578063a69915d61461058c578063a9d3f219146105b757610214565b806381a36fb61461048f5780638462151c146104ce5780638da5cb5b1461050b57610214565b80636098c94c11610159578063715018a611610133578063715018a6146103e55780637e75dd60146103fc57806380e6c61a14610439578063817b1cd21461046457610214565b80636098c94c146103545780636ba4c1381461037f57806370a08231146103a857610214565b8063150b7a0211610195578063150b7a0214610298578063207ee739146102d55780632680fd6d146103005780632e1a7d4d1461032b57610214565b80630fbf0a9314610219578063110f7f4f14610242578063128e1b6b1461026d57610214565b366102145734600360008282546101d29190612f8f565b925050819055507ff1b03f708b9c39f453fe3f0cef84164c7d6f7df836df0796e1e9c2bce6ee397e333460405161020a929190612d0e565b60405180910390a1005b600080fd5b34801561022557600080fd5b50610240600480360381019061023b91906129bd565b610709565b005b34801561024e57600080fd5b50610257610acc565b6040516102649190612efd565b60405180910390f35b34801561027957600080fd5b50610282610ad2565b60405161028f9190612efd565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba91906128e5565b610ad8565b6040516102cc9190612dab565b60405180910390f35b3480156102e157600080fd5b506102ea610b5b565b6040516102f79190612efd565b60405180910390f35b34801561030c57600080fd5b50610315610b61565b6040516103229190612efd565b60405180910390f35b34801561033757600080fd5b50610352600480360381019061034d9190612a2b565b610b67565b005b34801561036057600080fd5b50610369610d43565b6040516103769190612cbc565b60405180910390f35b34801561038b57600080fd5b506103a660048036038101906103a191906129bd565b610d69565b005b3480156103b457600080fd5b506103cf60048036038101906103ca9190612893565b610d7a565b6040516103dc9190612efd565b60405180910390f35b3480156103f157600080fd5b506103fa610ecb565b005b34801561040857600080fd5b50610423600480360381019061041e9190612965565b610f53565b6040516104309190612d6e565b60405180910390f35b34801561044557600080fd5b5061044e6113f7565b60405161045b9190612efd565b60405180910390f35b34801561047057600080fd5b506104796113fd565b6040516104869190612efd565b60405180910390f35b34801561049b57600080fd5b506104b660048036038101906104b19190612a2b565b611403565b6040516104c593929190612ec6565b60405180910390f35b3480156104da57600080fd5b506104f560048036038101906104f09190612893565b61146e565b6040516105029190612d89565b60405180910390f35b34801561051757600080fd5b506105206117aa565b60405161052d9190612cbc565b60405180910390f35b34801561054257600080fd5b5061054b6117d3565b6040516105589190612efd565b60405180910390f35b34801561056d57600080fd5b506105766117d9565b6040516105839190612efd565b60405180910390f35b34801561059857600080fd5b506105a16117df565b6040516105ae9190612efd565b60405180910390f35b3480156105c357600080fd5b506105cc6117e5565b6040516105d99190612efd565b60405180910390f35b3480156105ee57600080fd5b5061060960048036038101906106049190612965565b6117eb565b005b34801561061757600080fd5b506106206117fd565b60405161062d9190612efd565b60405180910390f35b34801561064257600080fd5b5061064b611803565b6040516106589190612efd565b60405180910390f35b34801561066d57600080fd5b50610688600480360381019061068391906129bd565b611809565b005b34801561069657600080fd5b5061069f61181a565b6040516106ac9190612efd565b60405180910390f35b3480156106c157600080fd5b506106dc60048036038101906106d79190612893565b6118cc565b005b3480156106ea57600080fd5b506106f36119c4565b6040516107009190612efd565b60405180910390f35b600082829050600160008282546107209190612f8f565b9250508190555060005b83839050811015610ac65783838281811061076e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002013591503373ffffffffffffffffffffffffffffffffffffffff16601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004016107e99190612efd565b60206040518083038186803b15801561080157600080fd5b505afa158015610815573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083991906128bc565b73ffffffffffffffffffffffffffffffffffffffff161461088f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088690612e06565b60405180910390fd5b60006017600084815260200190815260200160002060000160009054906101000a900462ffffff1662ffffff16146108fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f390612ea6565b60405180910390fd5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b815260040161095b93929190612cd7565b600060405180830381600087803b15801561097557600080fd5b505af1158015610989573d6000803e3d6000fd5b505050507f36b3725f1783bad4ff05b7f4c077c3aa68eeb23a4d054ba189db4d01ac278d393383426040516109c093929190612d37565b60405180910390a160405180606001604052808362ffffff1681526020014265ffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152506017600084815260200190815260200160002060008201518160000160006101000a81548162ffffff021916908362ffffff16021790555060208201518160000160036101000a81548165ffffffffffff021916908365ffffffffffff16021790555060408201518160000160096101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050508080610abe90613139565b91505061072a565b50505050565b60045481565b60065481565b60008073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3f90612e86565b60405180910390fd5b63150b7a0260e01b905095945050505050565b600e5481565b600a5481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bee90612de6565b60405180910390fd5b600354811115610c3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3390612e26565b60405180910390fd5b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610c99929190612d0e565b602060405180830381600087803b158015610cb357600080fd5b505af1158015610cc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ceb9190612a02565b508060036000828254610cfe9190613070565b925050819055507ffda3a3e0e1479b43cb1c701f7576187f4c4ad80768d627387e00184302f7d88e333383604051610d3893929190612cd7565b60405180910390a150565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d7633838360006119ca565b5050565b600080600090506000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610deb57600080fd5b505afa158015610dff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e239190612a54565b90506000600190505b818111610ec0578473ffffffffffffffffffffffffffffffffffffffff166017600083815260200190815260200160002060000160099054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610ead57600183610eaa9190612f8f565b92505b8080610eb890613139565b915050610e2c565b508192505050919050565b610ed3612030565b73ffffffffffffffffffffffffffffffffffffffff16610ef16117aa565b73ffffffffffffffffffffffffffffffffffffffff1614610f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3e90612e46565b60405180910390fd5b610f516000612038565b565b610f5b612774565b60008060009050600080600080600090505b888890508110156113c557888882818110610fb1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002013595506000601760008881526020019081526020016000206040518060600160405290816000820160009054906101000a900462ffffff1662ffffff1662ffffff1681526020016000820160039054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020016000820160099054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090508a73ffffffffffffffffffffffffffffffffffffffff16816040015173ffffffffffffffffffffffffffffffffffffffff16146110f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ea90612e66565b60405180910390fd5b6000816020015165ffffffffffff16905061110d886120fc565b955061111888612294565b9450611123886123d3565b9350610ec488116111c85762015180814261113e9190613070565b606486600b5461114e9190613016565b6111589190612fe5565b606488600b546111689190613016565b6111729190612fe5565b60648a600b546111829190613016565b61118c9190612fe5565b600b546111999190612f8f565b6111a39190612f8f565b6111ad9190612f8f565b6111b79190613016565b6111c19190612fe5565b96506113b0565b611810881161126b576201518081426111e19190613070565b606486600c546111f19190613016565b6111fb9190612fe5565b606488600c5461120b9190613016565b6112159190612fe5565b60648a600c546112259190613016565b61122f9190612fe5565b600c5461123c9190612f8f565b6112469190612f8f565b6112509190612f8f565b61125a9190613016565b6112649190612fe5565b96506113af565b611acc881161130e576201518081426112849190613070565b606486600d546112949190613016565b61129e9190612fe5565b606488600d546112ae9190613016565b6112b89190612fe5565b60648a600d546112c89190613016565b6112d29190612fe5565b600d546112df9190612f8f565b6112e99190612f8f565b6112f39190612f8f565b6112fd9190613016565b6113079190612fe5565b96506113ae565b611b5888116113ad576201518081426113279190613070565b606486600e546113379190613016565b6113419190612fe5565b606488600e546113519190613016565b61135b9190612fe5565b60648a600e5461136b9190613016565b6113759190612fe5565b600e546113829190612f8f565b61138c9190612f8f565b6113969190612f8f565b6113a09190613016565b6113aa9190612fe5565b96505b5b5b5b505080806113bd90613139565b915050610f6d565b5060008411156113ea57604051806020016040528085815250955050505050506113f0565b50505050505b9392505050565b600d5481565b60015481565b60176020528060005260406000206000915090508060000160009054906101000a900462ffffff16908060000160039054906101000a900465ffffffffffff16908060000160099054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905083565b6060600073bfce321046aaf5879c74cc4555db8fd9629fde9273ffffffffffffffffffffffffffffffffffffffff1663d5abeb016040518163ffffffff1660e01b815260040160206040518083038186803b1580156114cc57600080fd5b505afa1580156114e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115049190612a54565b905060008167ffffffffffffffff811115611548577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156115765781602001602082028036833780820191505090505b509050600080600190505b838111611685578573ffffffffffffffffffffffffffffffffffffffff166017600083815260200190815260200160002060000160099054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611672576017600082815260200190815260200160002060000160009054906101000a900462ffffff1662ffffff16838381518110611656577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505060018261166f9190612f8f565b91505b808061167d90613139565b915050611581565b5060008167ffffffffffffffff8111156116c8577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156116f65781602001602082028036833780820191505090505b50905060005b8281101561179d5783818151811061173d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015182828151811061177e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061179590613139565b9150506116fc565b5080945050505050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60035481565b60085481565b600c5481565b60055481565b6117f883838360006119ca565b505050565b60095481565b60075481565b61181633838360016119ca565b5050565b6000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016118779190612cbc565b60206040518083038186803b15801561188f57600080fd5b505afa1580156118a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c79190612a54565b905090565b6118d4612030565b73ffffffffffffffffffffffffffffffffffffffff166118f26117aa565b73ffffffffffffffffffffffffffffffffffffffff1614611948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193f90612e46565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119af90612dc6565b60405180910390fd5b6119c181612038565b50565b600b5481565b60008060009050600080600080600090505b88889050811015611f1f57888882818110611a20577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002013595506000601760008881526020019081526020016000206040518060600160405290816000820160009054906101000a900462ffffff1662ffffff1662ffffff1681526020016000820160039054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020016000820160099054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090508a73ffffffffffffffffffffffffffffffffffffffff16816040015173ffffffffffffffffffffffffffffffffffffffff1614611b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5990612e66565b60405180910390fd5b6000816020015165ffffffffffff169050611b7c886120fc565b9550611b8788612294565b9450611b92886123d3565b9350610ec48811611c3757620151808142611bad9190613070565b606486600b54611bbd9190613016565b611bc79190612fe5565b606488600b54611bd79190613016565b611be19190612fe5565b60648a600b54611bf19190613016565b611bfb9190612fe5565b600b54611c089190612f8f565b611c129190612f8f565b611c1c9190612f8f565b611c269190613016565b611c309190612fe5565b9650611e1f565b6118108811611cda57620151808142611c509190613070565b606486600c54611c609190613016565b611c6a9190612fe5565b606488600c54611c7a9190613016565b611c849190612fe5565b60648a600c54611c949190613016565b611c9e9190612fe5565b600c54611cab9190612f8f565b611cb59190612f8f565b611cbf9190612f8f565b611cc99190613016565b611cd39190612fe5565b9650611e1e565b611acc8811611d7d57620151808142611cf39190613070565b606486600d54611d039190613016565b611d0d9190612fe5565b606488600d54611d1d9190613016565b611d279190612fe5565b60648a600d54611d379190613016565b611d419190612fe5565b600d54611d4e9190612f8f565b611d589190612f8f565b611d629190612f8f565b611d6c9190613016565b611d769190612fe5565b9650611e1d565b611b588811611e1c57620151808142611d969190613070565b606486600e54611da69190613016565b611db09190612fe5565b606488600e54611dc09190613016565b611dca9190612fe5565b60648a600e54611dda9190613016565b611de49190612fe5565b600e54611df19190612f8f565b611dfb9190612f8f565b611e059190612f8f565b611e0f9190613016565b611e199190612fe5565b96505b5b5b5b60405180606001604052808962ffffff1681526020014265ffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815250601760008a815260200190815260200160002060008201518160000160006101000a81548162ffffff021916908362ffffff16021790555060208201518160000160036101000a81548165ffffffffffff021916908365ffffffffffff16021790555060408201518160000160096101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555090505050508080611f1790613139565b9150506119dc565b506000841115611fda57601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff1660e01b8152600401611f86929190612d0e565b602060405180830381600087803b158015611fa057600080fd5b505af1158015611fb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd89190612a02565b505b8515611fec57611feb89898961247a565b5b7fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a898560405161201d929190612d0e565b60405180910390a1505050505050505050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080600090505b6107d0811015612288578260148281548110612149577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff1614156121825760055491505061228f565b82601382815481106121bd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff1614156121f65760065491505061228f565b6103e881101561227557826012828154811061223b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff1614156122745760075491505061228f565b5b808061228090613139565b915050612104565b5060045490505b919050565b600080600090505b600f805490508110156123305782600f82815481106122e4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff16141561231d576008549150506123ce565b808061232890613139565b91505061229c565b5060005b6010805490508110156123c857826010828154811061237c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff1614156123b5576009549150506123ce565b80806123c090613139565b915050612334565b50600090505b919050565b600080600090505b60118054905081101561246f578260118281548110612423577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff16141561245c57600a54915050612475565b808061246790613139565b9150506123db565b50600090505b919050565b600082829050600160008282546124919190613070565b9250508190555060005b8383905081101561276d578383828181106124df577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002013591506000601760008481526020019081526020016000206040518060600160405290816000820160009054906101000a900462ffffff1662ffffff1662ffffff1681526020016000820160039054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020016000820160099054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090503373ffffffffffffffffffffffffffffffffffffffff16816040015173ffffffffffffffffffffffffffffffffffffffff1614612621576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261890612e66565b60405180910390fd5b60176000848152602001908152602001600020600080820160006101000a81549062ffffff02191690556000820160036101000a81549065ffffffffffff02191690556000820160096101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550507fc486b9458a8637650d84d262414833a5a457bc91ae86b7da110386c8c3fa255b8684426040516126c093929190612d37565b60405180910390a1601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3088866040518463ffffffff1660e01b815260040161272793929190612cd7565b600060405180830381600087803b15801561274157600080fd5b505af1158015612755573d6000803e3d6000fd5b5050505050808061276590613139565b91505061249b565b5050505050565b6040518060200160405280600190602082028036833780820191505090505090565b6000813590506127a581613374565b92915050565b6000815190506127ba81613374565b92915050565b60008083601f8401126127d257600080fd5b8235905067ffffffffffffffff8111156127eb57600080fd5b60208301915083602082028301111561280357600080fd5b9250929050565b6000815190506128198161338b565b92915050565b60008083601f84011261283157600080fd5b8235905067ffffffffffffffff81111561284a57600080fd5b60208301915083600182028301111561286257600080fd5b9250929050565b600081359050612878816133a2565b92915050565b60008151905061288d816133a2565b92915050565b6000602082840312156128a557600080fd5b60006128b384828501612796565b91505092915050565b6000602082840312156128ce57600080fd5b60006128dc848285016127ab565b91505092915050565b6000806000806000608086880312156128fd57600080fd5b600061290b88828901612796565b955050602061291c88828901612796565b945050604061292d88828901612869565b935050606086013567ffffffffffffffff81111561294a57600080fd5b6129568882890161281f565b92509250509295509295909350565b60008060006040848603121561297a57600080fd5b600061298886828701612796565b935050602084013567ffffffffffffffff8111156129a557600080fd5b6129b1868287016127c0565b92509250509250925092565b600080602083850312156129d057600080fd5b600083013567ffffffffffffffff8111156129ea57600080fd5b6129f6858286016127c0565b92509250509250929050565b600060208284031215612a1457600080fd5b6000612a228482850161280a565b91505092915050565b600060208284031215612a3d57600080fd5b6000612a4b84828501612869565b91505092915050565b600060208284031215612a6657600080fd5b6000612a748482850161287e565b91505092915050565b6000612a898383612c8f565b60208301905092915050565b612a9e816130a4565b82525050565b612aad81612f32565b612ab78184612f62565b9250612ac282612f18565b8060005b83811015612af3578151612ada8782612a7d565b9650612ae583612f48565b925050600181019050612ac6565b505050505050565b6000612b0682612f3d565b612b108185612f6d565b9350612b1b83612f22565b8060005b83811015612b4c578151612b338882612a7d565b9750612b3e83612f55565b925050600181019050612b1f565b5085935050505092915050565b612b62816130c2565b82525050565b6000612b75602683612f7e565b9150612b80826131e0565b604082019050919050565b6000612b98601d83612f7e565b9150612ba38261322f565b602082019050919050565b6000612bbb600e83612f7e565b9150612bc682613258565b602082019050919050565b6000612bde600e83612f7e565b9150612be982613281565b602082019050919050565b6000612c01602083612f7e565b9150612c0c826132aa565b602082019050919050565b6000612c24600c83612f7e565b9150612c2f826132d3565b602082019050919050565b6000612c47602283612f7e565b9150612c52826132fc565b604082019050919050565b6000612c6a600e83612f7e565b9150612c758261334b565b602082019050919050565b612c898161310e565b82525050565b612c988161311d565b82525050565b612ca78161311d565b82525050565b612cb681613127565b82525050565b6000602082019050612cd16000830184612a95565b92915050565b6000606082019050612cec6000830186612a95565b612cf96020830185612a95565b612d066040830184612c9e565b949350505050565b6000604082019050612d236000830185612a95565b612d306020830184612c9e565b9392505050565b6000606082019050612d4c6000830186612a95565b612d596020830185612c9e565b612d666040830184612c9e565b949350505050565b6000602082019050612d836000830184612aa4565b92915050565b60006020820190508181036000830152612da38184612afb565b905092915050565b6000602082019050612dc06000830184612b59565b92915050565b60006020820190508181036000830152612ddf81612b68565b9050919050565b60006020820190508181036000830152612dff81612b8b565b9050919050565b60006020820190508181036000830152612e1f81612bae565b9050919050565b60006020820190508181036000830152612e3f81612bd1565b9050919050565b60006020820190508181036000830152612e5f81612bf4565b9050919050565b60006020820190508181036000830152612e7f81612c17565b9050919050565b60006020820190508181036000830152612e9f81612c3a565b9050919050565b60006020820190508181036000830152612ebf81612c5d565b9050919050565b6000606082019050612edb6000830186612c80565b612ee86020830185612cad565b612ef56040830184612a95565b949350505050565b6000602082019050612f126000830184612c9e565b92915050565b6000819050919050565b6000819050602082019050919050565b600060019050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612f9a8261311d565b9150612fa58361311d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612fda57612fd9613182565b5b828201905092915050565b6000612ff08261311d565b9150612ffb8361311d565b92508261300b5761300a6131b1565b5b828204905092915050565b60006130218261311d565b915061302c8361311d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561306557613064613182565b5b828202905092915050565b600061307b8261311d565b91506130868361311d565b92508282101561309957613098613182565b5b828203905092915050565b60006130af826130ee565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062ffffff82169050919050565b6000819050919050565b600065ffffffffffff82169050919050565b60006131448261311d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561317757613176613182565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c79206f776e65722063616e2077697468647261772066756e6473000000600082015250565b7f6e6f7420796f757220746f6b656e000000000000000000000000000000000000600082015250565b7f62616c616e6365206973206c6f77000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f6e6f7420616e206f776e65720000000000000000000000000000000000000000600082015250565b7f43616e6e6f742073656e64206e66747320746f205661756c742064697265637460008201527f6c79000000000000000000000000000000000000000000000000000000000000602082015250565b7f616c7265616479207374616b6564000000000000000000000000000000000000600082015250565b61337d816130a4565b811461338857600080fd5b50565b613394816130b6565b811461339f57600080fd5b50565b6133ab8161311d565b81146133b657600080fd5b5056fea26469706673582212206899b7ee04c616a8a4c411df2a775d7580e83a30b0b40fbe63c0b3e82939ec8364736f6c63430008040033000000000000000000000000bfce321046aaf5879c74cc4555db8fd9629fde920000000000000000000000005281a43403b9a537520bcb67e98a717c6ff13ea2
Deployed Bytecode
0x6080604052600436106101bb5760003560e01c806381a36fb6116100ec578063c36be3571161008a578063e449f34111610064578063e449f34114610661578063efebfc471461068a578063f2fde38b146106b5578063f951e738146106de57610214565b8063c36be357146105e2578063cacfaa061461060b578063cc4bf4421461063657610214565b80638e0f914c116100c65780638e0f914c14610536578063a3510e0b14610561578063a69915d61461058c578063a9d3f219146105b757610214565b806381a36fb61461048f5780638462151c146104ce5780638da5cb5b1461050b57610214565b80636098c94c11610159578063715018a611610133578063715018a6146103e55780637e75dd60146103fc57806380e6c61a14610439578063817b1cd21461046457610214565b80636098c94c146103545780636ba4c1381461037f57806370a08231146103a857610214565b8063150b7a0211610195578063150b7a0214610298578063207ee739146102d55780632680fd6d146103005780632e1a7d4d1461032b57610214565b80630fbf0a9314610219578063110f7f4f14610242578063128e1b6b1461026d57610214565b366102145734600360008282546101d29190612f8f565b925050819055507ff1b03f708b9c39f453fe3f0cef84164c7d6f7df836df0796e1e9c2bce6ee397e333460405161020a929190612d0e565b60405180910390a1005b600080fd5b34801561022557600080fd5b50610240600480360381019061023b91906129bd565b610709565b005b34801561024e57600080fd5b50610257610acc565b6040516102649190612efd565b60405180910390f35b34801561027957600080fd5b50610282610ad2565b60405161028f9190612efd565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba91906128e5565b610ad8565b6040516102cc9190612dab565b60405180910390f35b3480156102e157600080fd5b506102ea610b5b565b6040516102f79190612efd565b60405180910390f35b34801561030c57600080fd5b50610315610b61565b6040516103229190612efd565b60405180910390f35b34801561033757600080fd5b50610352600480360381019061034d9190612a2b565b610b67565b005b34801561036057600080fd5b50610369610d43565b6040516103769190612cbc565b60405180910390f35b34801561038b57600080fd5b506103a660048036038101906103a191906129bd565b610d69565b005b3480156103b457600080fd5b506103cf60048036038101906103ca9190612893565b610d7a565b6040516103dc9190612efd565b60405180910390f35b3480156103f157600080fd5b506103fa610ecb565b005b34801561040857600080fd5b50610423600480360381019061041e9190612965565b610f53565b6040516104309190612d6e565b60405180910390f35b34801561044557600080fd5b5061044e6113f7565b60405161045b9190612efd565b60405180910390f35b34801561047057600080fd5b506104796113fd565b6040516104869190612efd565b60405180910390f35b34801561049b57600080fd5b506104b660048036038101906104b19190612a2b565b611403565b6040516104c593929190612ec6565b60405180910390f35b3480156104da57600080fd5b506104f560048036038101906104f09190612893565b61146e565b6040516105029190612d89565b60405180910390f35b34801561051757600080fd5b506105206117aa565b60405161052d9190612cbc565b60405180910390f35b34801561054257600080fd5b5061054b6117d3565b6040516105589190612efd565b60405180910390f35b34801561056d57600080fd5b506105766117d9565b6040516105839190612efd565b60405180910390f35b34801561059857600080fd5b506105a16117df565b6040516105ae9190612efd565b60405180910390f35b3480156105c357600080fd5b506105cc6117e5565b6040516105d99190612efd565b60405180910390f35b3480156105ee57600080fd5b5061060960048036038101906106049190612965565b6117eb565b005b34801561061757600080fd5b506106206117fd565b60405161062d9190612efd565b60405180910390f35b34801561064257600080fd5b5061064b611803565b6040516106589190612efd565b60405180910390f35b34801561066d57600080fd5b50610688600480360381019061068391906129bd565b611809565b005b34801561069657600080fd5b5061069f61181a565b6040516106ac9190612efd565b60405180910390f35b3480156106c157600080fd5b506106dc60048036038101906106d79190612893565b6118cc565b005b3480156106ea57600080fd5b506106f36119c4565b6040516107009190612efd565b60405180910390f35b600082829050600160008282546107209190612f8f565b9250508190555060005b83839050811015610ac65783838281811061076e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002013591503373ffffffffffffffffffffffffffffffffffffffff16601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004016107e99190612efd565b60206040518083038186803b15801561080157600080fd5b505afa158015610815573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083991906128bc565b73ffffffffffffffffffffffffffffffffffffffff161461088f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088690612e06565b60405180910390fd5b60006017600084815260200190815260200160002060000160009054906101000a900462ffffff1662ffffff16146108fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f390612ea6565b60405180910390fd5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b815260040161095b93929190612cd7565b600060405180830381600087803b15801561097557600080fd5b505af1158015610989573d6000803e3d6000fd5b505050507f36b3725f1783bad4ff05b7f4c077c3aa68eeb23a4d054ba189db4d01ac278d393383426040516109c093929190612d37565b60405180910390a160405180606001604052808362ffffff1681526020014265ffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152506017600084815260200190815260200160002060008201518160000160006101000a81548162ffffff021916908362ffffff16021790555060208201518160000160036101000a81548165ffffffffffff021916908365ffffffffffff16021790555060408201518160000160096101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050508080610abe90613139565b91505061072a565b50505050565b60045481565b60065481565b60008073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3f90612e86565b60405180910390fd5b63150b7a0260e01b905095945050505050565b600e5481565b600a5481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bee90612de6565b60405180910390fd5b600354811115610c3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3390612e26565b60405180910390fd5b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610c99929190612d0e565b602060405180830381600087803b158015610cb357600080fd5b505af1158015610cc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ceb9190612a02565b508060036000828254610cfe9190613070565b925050819055507ffda3a3e0e1479b43cb1c701f7576187f4c4ad80768d627387e00184302f7d88e333383604051610d3893929190612cd7565b60405180910390a150565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d7633838360006119ca565b5050565b600080600090506000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610deb57600080fd5b505afa158015610dff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e239190612a54565b90506000600190505b818111610ec0578473ffffffffffffffffffffffffffffffffffffffff166017600083815260200190815260200160002060000160099054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610ead57600183610eaa9190612f8f565b92505b8080610eb890613139565b915050610e2c565b508192505050919050565b610ed3612030565b73ffffffffffffffffffffffffffffffffffffffff16610ef16117aa565b73ffffffffffffffffffffffffffffffffffffffff1614610f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3e90612e46565b60405180910390fd5b610f516000612038565b565b610f5b612774565b60008060009050600080600080600090505b888890508110156113c557888882818110610fb1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002013595506000601760008881526020019081526020016000206040518060600160405290816000820160009054906101000a900462ffffff1662ffffff1662ffffff1681526020016000820160039054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020016000820160099054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090508a73ffffffffffffffffffffffffffffffffffffffff16816040015173ffffffffffffffffffffffffffffffffffffffff16146110f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ea90612e66565b60405180910390fd5b6000816020015165ffffffffffff16905061110d886120fc565b955061111888612294565b9450611123886123d3565b9350610ec488116111c85762015180814261113e9190613070565b606486600b5461114e9190613016565b6111589190612fe5565b606488600b546111689190613016565b6111729190612fe5565b60648a600b546111829190613016565b61118c9190612fe5565b600b546111999190612f8f565b6111a39190612f8f565b6111ad9190612f8f565b6111b79190613016565b6111c19190612fe5565b96506113b0565b611810881161126b576201518081426111e19190613070565b606486600c546111f19190613016565b6111fb9190612fe5565b606488600c5461120b9190613016565b6112159190612fe5565b60648a600c546112259190613016565b61122f9190612fe5565b600c5461123c9190612f8f565b6112469190612f8f565b6112509190612f8f565b61125a9190613016565b6112649190612fe5565b96506113af565b611acc881161130e576201518081426112849190613070565b606486600d546112949190613016565b61129e9190612fe5565b606488600d546112ae9190613016565b6112b89190612fe5565b60648a600d546112c89190613016565b6112d29190612fe5565b600d546112df9190612f8f565b6112e99190612f8f565b6112f39190612f8f565b6112fd9190613016565b6113079190612fe5565b96506113ae565b611b5888116113ad576201518081426113279190613070565b606486600e546113379190613016565b6113419190612fe5565b606488600e546113519190613016565b61135b9190612fe5565b60648a600e5461136b9190613016565b6113759190612fe5565b600e546113829190612f8f565b61138c9190612f8f565b6113969190612f8f565b6113a09190613016565b6113aa9190612fe5565b96505b5b5b5b505080806113bd90613139565b915050610f6d565b5060008411156113ea57604051806020016040528085815250955050505050506113f0565b50505050505b9392505050565b600d5481565b60015481565b60176020528060005260406000206000915090508060000160009054906101000a900462ffffff16908060000160039054906101000a900465ffffffffffff16908060000160099054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905083565b6060600073bfce321046aaf5879c74cc4555db8fd9629fde9273ffffffffffffffffffffffffffffffffffffffff1663d5abeb016040518163ffffffff1660e01b815260040160206040518083038186803b1580156114cc57600080fd5b505afa1580156114e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115049190612a54565b905060008167ffffffffffffffff811115611548577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156115765781602001602082028036833780820191505090505b509050600080600190505b838111611685578573ffffffffffffffffffffffffffffffffffffffff166017600083815260200190815260200160002060000160099054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611672576017600082815260200190815260200160002060000160009054906101000a900462ffffff1662ffffff16838381518110611656577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505060018261166f9190612f8f565b91505b808061167d90613139565b915050611581565b5060008167ffffffffffffffff8111156116c8577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156116f65781602001602082028036833780820191505090505b50905060005b8281101561179d5783818151811061173d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015182828151811061177e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061179590613139565b9150506116fc565b5080945050505050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60035481565b60085481565b600c5481565b60055481565b6117f883838360006119ca565b505050565b60095481565b60075481565b61181633838360016119ca565b5050565b6000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016118779190612cbc565b60206040518083038186803b15801561188f57600080fd5b505afa1580156118a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c79190612a54565b905090565b6118d4612030565b73ffffffffffffffffffffffffffffffffffffffff166118f26117aa565b73ffffffffffffffffffffffffffffffffffffffff1614611948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193f90612e46565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119af90612dc6565b60405180910390fd5b6119c181612038565b50565b600b5481565b60008060009050600080600080600090505b88889050811015611f1f57888882818110611a20577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002013595506000601760008881526020019081526020016000206040518060600160405290816000820160009054906101000a900462ffffff1662ffffff1662ffffff1681526020016000820160039054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020016000820160099054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090508a73ffffffffffffffffffffffffffffffffffffffff16816040015173ffffffffffffffffffffffffffffffffffffffff1614611b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5990612e66565b60405180910390fd5b6000816020015165ffffffffffff169050611b7c886120fc565b9550611b8788612294565b9450611b92886123d3565b9350610ec48811611c3757620151808142611bad9190613070565b606486600b54611bbd9190613016565b611bc79190612fe5565b606488600b54611bd79190613016565b611be19190612fe5565b60648a600b54611bf19190613016565b611bfb9190612fe5565b600b54611c089190612f8f565b611c129190612f8f565b611c1c9190612f8f565b611c269190613016565b611c309190612fe5565b9650611e1f565b6118108811611cda57620151808142611c509190613070565b606486600c54611c609190613016565b611c6a9190612fe5565b606488600c54611c7a9190613016565b611c849190612fe5565b60648a600c54611c949190613016565b611c9e9190612fe5565b600c54611cab9190612f8f565b611cb59190612f8f565b611cbf9190612f8f565b611cc99190613016565b611cd39190612fe5565b9650611e1e565b611acc8811611d7d57620151808142611cf39190613070565b606486600d54611d039190613016565b611d0d9190612fe5565b606488600d54611d1d9190613016565b611d279190612fe5565b60648a600d54611d379190613016565b611d419190612fe5565b600d54611d4e9190612f8f565b611d589190612f8f565b611d629190612f8f565b611d6c9190613016565b611d769190612fe5565b9650611e1d565b611b588811611e1c57620151808142611d969190613070565b606486600e54611da69190613016565b611db09190612fe5565b606488600e54611dc09190613016565b611dca9190612fe5565b60648a600e54611dda9190613016565b611de49190612fe5565b600e54611df19190612f8f565b611dfb9190612f8f565b611e059190612f8f565b611e0f9190613016565b611e199190612fe5565b96505b5b5b5b60405180606001604052808962ffffff1681526020014265ffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815250601760008a815260200190815260200160002060008201518160000160006101000a81548162ffffff021916908362ffffff16021790555060208201518160000160036101000a81548165ffffffffffff021916908365ffffffffffff16021790555060408201518160000160096101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555090505050508080611f1790613139565b9150506119dc565b506000841115611fda57601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff1660e01b8152600401611f86929190612d0e565b602060405180830381600087803b158015611fa057600080fd5b505af1158015611fb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd89190612a02565b505b8515611fec57611feb89898961247a565b5b7fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a898560405161201d929190612d0e565b60405180910390a1505050505050505050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080600090505b6107d0811015612288578260148281548110612149577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff1614156121825760055491505061228f565b82601382815481106121bd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff1614156121f65760065491505061228f565b6103e881101561227557826012828154811061223b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff1614156122745760075491505061228f565b5b808061228090613139565b915050612104565b5060045490505b919050565b600080600090505b600f805490508110156123305782600f82815481106122e4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff16141561231d576008549150506123ce565b808061232890613139565b91505061229c565b5060005b6010805490508110156123c857826010828154811061237c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff1614156123b5576009549150506123ce565b80806123c090613139565b915050612334565b50600090505b919050565b600080600090505b60118054905081101561246f578260118281548110612423577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff16141561245c57600a54915050612475565b808061246790613139565b9150506123db565b50600090505b919050565b600082829050600160008282546124919190613070565b9250508190555060005b8383905081101561276d578383828181106124df577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002013591506000601760008481526020019081526020016000206040518060600160405290816000820160009054906101000a900462ffffff1662ffffff1662ffffff1681526020016000820160039054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020016000820160099054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090503373ffffffffffffffffffffffffffffffffffffffff16816040015173ffffffffffffffffffffffffffffffffffffffff1614612621576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261890612e66565b60405180910390fd5b60176000848152602001908152602001600020600080820160006101000a81549062ffffff02191690556000820160036101000a81549065ffffffffffff02191690556000820160096101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550507fc486b9458a8637650d84d262414833a5a457bc91ae86b7da110386c8c3fa255b8684426040516126c093929190612d37565b60405180910390a1601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3088866040518463ffffffff1660e01b815260040161272793929190612cd7565b600060405180830381600087803b15801561274157600080fd5b505af1158015612755573d6000803e3d6000fd5b5050505050808061276590613139565b91505061249b565b5050505050565b6040518060200160405280600190602082028036833780820191505090505090565b6000813590506127a581613374565b92915050565b6000815190506127ba81613374565b92915050565b60008083601f8401126127d257600080fd5b8235905067ffffffffffffffff8111156127eb57600080fd5b60208301915083602082028301111561280357600080fd5b9250929050565b6000815190506128198161338b565b92915050565b60008083601f84011261283157600080fd5b8235905067ffffffffffffffff81111561284a57600080fd5b60208301915083600182028301111561286257600080fd5b9250929050565b600081359050612878816133a2565b92915050565b60008151905061288d816133a2565b92915050565b6000602082840312156128a557600080fd5b60006128b384828501612796565b91505092915050565b6000602082840312156128ce57600080fd5b60006128dc848285016127ab565b91505092915050565b6000806000806000608086880312156128fd57600080fd5b600061290b88828901612796565b955050602061291c88828901612796565b945050604061292d88828901612869565b935050606086013567ffffffffffffffff81111561294a57600080fd5b6129568882890161281f565b92509250509295509295909350565b60008060006040848603121561297a57600080fd5b600061298886828701612796565b935050602084013567ffffffffffffffff8111156129a557600080fd5b6129b1868287016127c0565b92509250509250925092565b600080602083850312156129d057600080fd5b600083013567ffffffffffffffff8111156129ea57600080fd5b6129f6858286016127c0565b92509250509250929050565b600060208284031215612a1457600080fd5b6000612a228482850161280a565b91505092915050565b600060208284031215612a3d57600080fd5b6000612a4b84828501612869565b91505092915050565b600060208284031215612a6657600080fd5b6000612a748482850161287e565b91505092915050565b6000612a898383612c8f565b60208301905092915050565b612a9e816130a4565b82525050565b612aad81612f32565b612ab78184612f62565b9250612ac282612f18565b8060005b83811015612af3578151612ada8782612a7d565b9650612ae583612f48565b925050600181019050612ac6565b505050505050565b6000612b0682612f3d565b612b108185612f6d565b9350612b1b83612f22565b8060005b83811015612b4c578151612b338882612a7d565b9750612b3e83612f55565b925050600181019050612b1f565b5085935050505092915050565b612b62816130c2565b82525050565b6000612b75602683612f7e565b9150612b80826131e0565b604082019050919050565b6000612b98601d83612f7e565b9150612ba38261322f565b602082019050919050565b6000612bbb600e83612f7e565b9150612bc682613258565b602082019050919050565b6000612bde600e83612f7e565b9150612be982613281565b602082019050919050565b6000612c01602083612f7e565b9150612c0c826132aa565b602082019050919050565b6000612c24600c83612f7e565b9150612c2f826132d3565b602082019050919050565b6000612c47602283612f7e565b9150612c52826132fc565b604082019050919050565b6000612c6a600e83612f7e565b9150612c758261334b565b602082019050919050565b612c898161310e565b82525050565b612c988161311d565b82525050565b612ca78161311d565b82525050565b612cb681613127565b82525050565b6000602082019050612cd16000830184612a95565b92915050565b6000606082019050612cec6000830186612a95565b612cf96020830185612a95565b612d066040830184612c9e565b949350505050565b6000604082019050612d236000830185612a95565b612d306020830184612c9e565b9392505050565b6000606082019050612d4c6000830186612a95565b612d596020830185612c9e565b612d666040830184612c9e565b949350505050565b6000602082019050612d836000830184612aa4565b92915050565b60006020820190508181036000830152612da38184612afb565b905092915050565b6000602082019050612dc06000830184612b59565b92915050565b60006020820190508181036000830152612ddf81612b68565b9050919050565b60006020820190508181036000830152612dff81612b8b565b9050919050565b60006020820190508181036000830152612e1f81612bae565b9050919050565b60006020820190508181036000830152612e3f81612bd1565b9050919050565b60006020820190508181036000830152612e5f81612bf4565b9050919050565b60006020820190508181036000830152612e7f81612c17565b9050919050565b60006020820190508181036000830152612e9f81612c3a565b9050919050565b60006020820190508181036000830152612ebf81612c5d565b9050919050565b6000606082019050612edb6000830186612c80565b612ee86020830185612cad565b612ef56040830184612a95565b949350505050565b6000602082019050612f126000830184612c9e565b92915050565b6000819050919050565b6000819050602082019050919050565b600060019050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612f9a8261311d565b9150612fa58361311d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612fda57612fd9613182565b5b828201905092915050565b6000612ff08261311d565b9150612ffb8361311d565b92508261300b5761300a6131b1565b5b828204905092915050565b60006130218261311d565b915061302c8361311d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561306557613064613182565b5b828202905092915050565b600061307b8261311d565b91506130868361311d565b92508282101561309957613098613182565b5b828203905092915050565b60006130af826130ee565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062ffffff82169050919050565b6000819050919050565b600065ffffffffffff82169050919050565b60006131448261311d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561317757613176613182565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c79206f776e65722063616e2077697468647261772066756e6473000000600082015250565b7f6e6f7420796f757220746f6b656e000000000000000000000000000000000000600082015250565b7f62616c616e6365206973206c6f77000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f6e6f7420616e206f776e65720000000000000000000000000000000000000000600082015250565b7f43616e6e6f742073656e64206e66747320746f205661756c742064697265637460008201527f6c79000000000000000000000000000000000000000000000000000000000000602082015250565b7f616c7265616479207374616b6564000000000000000000000000000000000000600082015250565b61337d816130a4565b811461338857600080fd5b50565b613394816130b6565b811461339f57600080fd5b50565b6133ab8161311d565b81146133b657600080fd5b5056fea26469706673582212206899b7ee04c616a8a4c411df2a775d7580e83a30b0b40fbe63c0b3e82939ec8364736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000bfce321046aaf5879c74cc4555db8fd9629fde920000000000000000000000005281a43403b9a537520bcb67e98a717c6ff13ea2
-----Decoded View---------------
Arg [0] : _nft (address): 0xBfcE321046aaf5879c74cc4555Db8fd9629fde92
Arg [1] : _token (address): 0x5281a43403B9a537520Bcb67e98A717c6ff13eA2
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000bfce321046aaf5879c74cc4555db8fd9629fde92
Arg [1] : 0000000000000000000000005281a43403b9a537520bcb67e98a717c6ff13ea2
Deployed Bytecode Sourcemap
62293:42856:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;97042:9;97026:12;;:25;;;;;;;:::i;:::-;;;;;;;;97067:39;97084:10;97096:9;97067:39;;;;;;;:::i;:::-;;;;;;;;62293:42856;;;;;97122:698;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;62456:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62530;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;104840:302;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62855:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62680:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;104471:363;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;62387:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;98374:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;103363:322;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61239:103;;;;;;;;;;;;;:::i;:::-;;101778:1577;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62812:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62354:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;96792:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;103693:652;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60588:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62422:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62604:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62769:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62493:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;98489:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;62642:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62567:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;98628:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;104351:114;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61497:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;62724:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;97122:698;97186:15;97227:8;;:15;;97212:11;;:30;;;;;;;:::i;:::-;;;;;;;;97258:6;97253:560;97274:8;;:15;;97270:1;:19;97253:560;;;97321:8;;97330:1;97321:11;;;;;;;;;;;;;;;;;;;;;97311:21;;97379:10;97355:34;;:3;;;;;;;;;;;:11;;;97367:7;97355:20;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:34;;;97347:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;97457:1;97431:5;:14;97437:7;97431:14;;;;;;;;;;;:22;;;;;;;;;;;;:27;;;97423:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;97494:3;;;;;;;;;;;:16;;;97511:10;97531:4;97538:7;97494:52;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;97566:47;97576:10;97588:7;97597:15;97566:47;;;;;;;;:::i;:::-;;;;;;;;97647:154;;;;;;;;97724:7;97647:154;;;;;;97769:15;97647:154;;;;;;97679:10;97647:154;;;;;97630:5;:14;97636:7;97630:14;;;;;;;;;;;:171;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;97291:3;;;;;:::i;:::-;;;;97253:560;;;;97122:698;;;:::o;62456:30::-;;;;:::o;62530:::-;;;;:::o;104840:302::-;104989:6;105032:3;105016:20;;:4;:20;;;105008:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;105093:41;;;105086:48;;104840:302;;;;;;;:::o;62855:40::-;;;;:::o;62680:37::-;;;;:::o;104471:363::-;104552:13;;;;;;;;;;;104538:27;;:10;:27;;;104530:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;104636:12;;104619:13;:29;;104611:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;104678:5;;;;;;;;;;;:14;;;104693:10;104705:13;104678:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;104746:13;104730:12;;:29;;;;;;;:::i;:::-;;;;;;;;104775:51;104788:10;104800;104812:13;104775:51;;;;;;;;:::i;:::-;;;;;;;;104471:363;:::o;62387:28::-;;;;;;;;;;;;;:::o;98374:107::-;98438:35;98445:10;98457:8;;98467:5;98438:6;:35::i;:::-;98374:107;;:::o;103363:322::-;103420:7;103440:15;103458:1;103440:19;;103470:14;103487:3;;;;;;;;;;;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;103470:34;;103519:6;103528:1;103519:10;;103515:138;103536:6;103531:1;:11;103515:138;;103586:7;103568:25;;:5;:8;103574:1;103568:8;;;;;;;;;;;:14;;;;;;;;;;;;:25;;;103564:78;;;103625:1;103614:12;;;;;:::i;:::-;;;103564:78;103544:3;;;;;:::i;:::-;;;;103515:138;;;;103670:7;103663:14;;;;103363:322;;;:::o;61239:103::-;60819:12;:10;:12::i;:::-;60808:23;;:7;:5;:7::i;:::-;:23;;;60800:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;61304:30:::1;61331:1;61304:18;:30::i;:::-;61239:103::o:0;101778:1577::-;101868:22;;:::i;:::-;101903:15;101929:14;101946:1;101929:18;;101958:12;101981:17;102009:20;102045:6;102054:1;102045:10;;102040:1240;102061:8;;:15;;102057:1;:19;102040:1240;;;102108:8;;102117:1;102108:11;;;;;;;;;;;;;;;;;;;;;102098:21;;102134:19;102156:5;:14;102162:7;102156:14;;;;;;;;;;;102134:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;102209:7;102193:23;;:6;:12;;;:23;;;102185:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;102248:16;102267:6;:16;;;102248:35;;;;102305:21;102318:7;102305:12;:21::i;:::-;102298:28;;102353:26;102371:7;102353:17;:26::i;:::-;102341:38;;102408:28;102428:7;102408:19;:28::i;:::-;102394:42;;102464:4;102455:7;:13;102451:816;;102635:5;102623:8;102605:15;:26;;;;:::i;:::-;102598:3;102585:12;102572;;:25;;;;:::i;:::-;:29;;;;:::i;:::-;102564:3;102554:9;102541:12;;:22;;;;:::i;:::-;:26;;;;:::i;:::-;102533:3;102528:4;102515:12;;:17;;;;:::i;:::-;:21;;;;:::i;:::-;102499:12;;:38;;;;:::i;:::-;:69;;;;:::i;:::-;:103;;;;:::i;:::-;102498:134;;;;:::i;:::-;102497:143;;;;:::i;:::-;102489:151;;102451:816;;;102674:4;102665:7;:13;102661:606;;102836:5;102824:8;102806:15;:26;;;;:::i;:::-;102799:3;102786:12;102775:10;;:23;;;;:::i;:::-;:27;;;;:::i;:::-;102767:3;102757:9;102746:10;;:20;;;;:::i;:::-;:24;;;;:::i;:::-;102738:3;102733:4;102722:10;;:15;;;;:::i;:::-;:19;;;;:::i;:::-;102708:10;;:34;;;;:::i;:::-;:63;;;;:::i;:::-;:95;;;;:::i;:::-;102707:126;;;;:::i;:::-;102706:135;;;;:::i;:::-;102698:143;;102661:606;;;102875:4;102866:7;:13;102862:405;;103033:5;103021:8;103003:15;:26;;;;:::i;:::-;102996:3;102983:12;102973:9;;:22;;;;:::i;:::-;:26;;;;:::i;:::-;102965:3;102955:9;102945;;:19;;;;:::i;:::-;:23;;;;:::i;:::-;102937:3;102932:4;102922:9;;:14;;;;:::i;:::-;:18;;;;:::i;:::-;102909:9;;:32;;;;:::i;:::-;:60;;;;:::i;:::-;:91;;;;:::i;:::-;102908:122;;;;:::i;:::-;102907:131;;;;:::i;:::-;102899:139;;102862:405;;;103072:4;103063:7;:13;103059:208;;103246:5;103234:8;103216:15;:26;;;;:::i;:::-;103209:3;103196:12;103182:13;;:26;;;;:::i;:::-;:30;;;;:::i;:::-;103174:3;103164:9;103150:13;;:23;;;;:::i;:::-;:27;;;;:::i;:::-;103142:3;103137:4;103123:13;;:18;;;;:::i;:::-;:22;;;;:::i;:::-;103106:13;;:40;;;;:::i;:::-;:72;;;;:::i;:::-;:107;;;;:::i;:::-;103105:138;;;;:::i;:::-;103104:147;;;;:::i;:::-;103096:155;;103059:208;102862:405;102661:606;102451:816;102040:1240;;102078:3;;;;;:::i;:::-;;;;102040:1240;;;;103303:1;103294:6;:10;103290:58;;;103321:15;;;;;;;;103329:6;103321:15;;;;;;;;;;;;103290:58;101778:1577;;;;;;;;;;;:::o;62812:36::-;;;;:::o;62354:26::-;;;;:::o;96792:38::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;103693:652::-;103754:28;103797:14;96713:42;103814:41;;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;103797:60;;103868:20;103905:6;103891:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;103868:44;;103925:13;103957:12;103972:1;103957:16;;103953:213;103986:6;103975:7;:17;103953:213;;104048:7;104024:31;;:5;:14;104030:7;104024:14;;;;;;;;;;;:20;;;;;;;;;;;;:31;;;104020:135;;;104089:5;:14;104095:7;104089:14;;;;;;;;;;;:22;;;;;;;;;;;;104076:35;;:3;104080:5;104076:10;;;;;;;;;;;;;;;;;;;;;:35;;;;;104138:1;104130:9;;;;;:::i;:::-;;;104020:135;103994:9;;;;;:::i;:::-;;;;103953:213;;;;104178:23;104218:5;104204:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;104178:46;;104239:6;104235:77;104255:5;104251:1;:9;104235:77;;;104294:3;104298:1;104294:6;;;;;;;;;;;;;;;;;;;;;;104282;104289:1;104282:9;;;;;;;;;;;;;;;;;;;;;:18;;;;;104262:3;;;;;:::i;:::-;;;;104235:77;;;;104331:6;104324:13;;;;;;103693:652;;;:::o;60588:87::-;60634:7;60661:6;;;;;;;;;;;60654:13;;60588:87;:::o;62422:27::-;;;;:::o;62604:31::-;;;;:::o;62769:36::-;;;;:::o;62493:30::-;;;;:::o;98489:131::-;98580:32;98587:7;98596:8;;98606:5;98580:6;:32::i;:::-;98489:131;;;:::o;62642:31::-;;;;:::o;62567:30::-;;;;:::o;98628:108::-;98694:34;98701:10;98713:8;;98723:4;98694:6;:34::i;:::-;98628:108;;:::o;104351:114::-;104394:13;104427:5;;;;;;;;;;;:15;;;104451:4;104427:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;104420:37;;104351:114;:::o;61497:201::-;60819:12;:10;:12::i;:::-;60808:23;;:7;:5;:7::i;:::-;:23;;;60800:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;61606:1:::1;61586:22;;:8;:22;;;;61578:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;61662:28;61681:8;61662:18;:28::i;:::-;61497:201:::0;:::o;62724:38::-;;;;:::o;99892:1878::-;99989:15;100015:14;100032:1;100015:18;;100044:12;100067:17;100095:20;100131:6;100140:1;100131:10;;100126:1431;100147:8;;:15;;100143:1;:19;100126:1431;;;100194:8;;100203:1;100194:11;;;;;;;;;;;;;;;;;;;;;100184:21;;100220:19;100242:5;:14;100248:7;100242:14;;;;;;;;;;;100220:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;100303:7;100287:23;;:6;:12;;;:23;;;100279:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;100342:16;100361:6;:16;;;100342:35;;;;100399:21;100412:7;100399:12;:21::i;:::-;100392:28;;100447:26;100465:7;100447:17;:26::i;:::-;100435:38;;100502:28;100522:7;100502:19;:28::i;:::-;100488:42;;100558:4;100549:7;:13;100545:816;;100729:5;100717:8;100699:15;:26;;;;:::i;:::-;100692:3;100679:12;100666;;:25;;;;:::i;:::-;:29;;;;:::i;:::-;100658:3;100648:9;100635:12;;:22;;;;:::i;:::-;:26;;;;:::i;:::-;100627:3;100622:4;100609:12;;:17;;;;:::i;:::-;:21;;;;:::i;:::-;100593:12;;:38;;;;:::i;:::-;:69;;;;:::i;:::-;:103;;;;:::i;:::-;100592:134;;;;:::i;:::-;100591:143;;;;:::i;:::-;100583:151;;100545:816;;;100768:4;100759:7;:13;100755:606;;100930:5;100918:8;100900:15;:26;;;;:::i;:::-;100893:3;100880:12;100869:10;;:23;;;;:::i;:::-;:27;;;;:::i;:::-;100861:3;100851:9;100840:10;;:20;;;;:::i;:::-;:24;;;;:::i;:::-;100832:3;100827:4;100816:10;;:15;;;;:::i;:::-;:19;;;;:::i;:::-;100802:10;;:34;;;;:::i;:::-;:63;;;;:::i;:::-;:95;;;;:::i;:::-;100801:126;;;;:::i;:::-;100800:135;;;;:::i;:::-;100792:143;;100755:606;;;100969:4;100960:7;:13;100956:405;;101127:5;101115:8;101097:15;:26;;;;:::i;:::-;101090:3;101077:12;101067:9;;:22;;;;:::i;:::-;:26;;;;:::i;:::-;101059:3;101049:9;101039;;:19;;;;:::i;:::-;:23;;;;:::i;:::-;101031:3;101026:4;101016:9;;:14;;;;:::i;:::-;:18;;;;:::i;:::-;101003:9;;:32;;;;:::i;:::-;:60;;;;:::i;:::-;:91;;;;:::i;:::-;101002:122;;;;:::i;:::-;101001:131;;;;:::i;:::-;100993:139;;100956:405;;;101166:4;101157:7;:13;101153:208;;101340:5;101328:8;101310:15;:26;;;;:::i;:::-;101303:3;101290:12;101276:13;;:26;;;;:::i;:::-;:30;;;;:::i;:::-;101268:3;101258:9;101244:13;;:23;;;;:::i;:::-;:27;;;;:::i;:::-;101236:3;101231:4;101217:13;;:18;;;;:::i;:::-;:22;;;;:::i;:::-;101200:13;;:40;;;;:::i;:::-;:72;;;;:::i;:::-;:107;;;;:::i;:::-;101199:138;;;;:::i;:::-;101198:147;;;;:::i;:::-;101190:155;;101153:208;100956:405;100755:606;100545:816;101394:151;;;;;;;;101468:7;101394:151;;;;;;101513:15;101394:151;;;;;;101426:7;101394:151;;;;;101377:5;:14;101383:7;101377:14;;;;;;;;;;;:168;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;100126:1431;;100164:3;;;;;:::i;:::-;;;;100126:1431;;;;101580:1;101571:6;:10;101567:74;;;101598:5;;;;;;;;;;;:14;;;101613:7;101622:6;101598:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;101567:74;101655:8;101651:72;;;101680:31;101693:7;101702:8;;101680:12;:31::i;:::-;101651:72;101738:24;101746:7;101755:6;101738:24;;;;;;;:::i;:::-;;;;;;;;99892:1878;;;;;;;;;:::o;24690:98::-;24743:7;24770:10;24763:17;;24690:98;:::o;61858:191::-;61932:16;61951:6;;;;;;;;;;;61932:25;;61977:8;61968:6;;:17;;;;;;;;;;;;;;;;;;62032:8;62001:40;;62022:8;62001:40;;;;;;;;;;;;61858:191;;:::o;98744:465::-;98806:7;98829:6;98836:1;98829:8;;98825:348;98841:4;98839:1;:6;98825:348;;;98882:8;98870:5;98876:1;98870:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:20;;;98866:296;;;98918:11;;98911:18;;;;;98866:296;98965:8;98953:5;98959:1;98953:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:20;;;98950:212;;;99000:11;;98993:18;;;;;98950:212;99037:4;99035:1;:6;99032:130;;;99077:8;99065:5;99071:1;99065:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:20;;;99061:86;;;99116:11;;99109:18;;;;;99061:86;99032:130;98847:3;;;;;:::i;:::-;;;;98825:348;;;;99190:11;;99183:18;;98744:465;;;;:::o;99215:396::-;99282:7;99305:6;99312:1;99305:8;;99301:137;99317:5;:12;;;;99315:1;:14;99301:137;;;99365:8;99353:5;99359:1;99353:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:20;;;99350:77;;;99400:11;;99393:18;;;;;99350:77;99331:3;;;;;:::i;:::-;;;;99301:137;;;;99452:6;99448:137;99464:5;:12;;;;99462:1;:14;99448:137;;;99512:8;99500:5;99506:1;99500:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:20;;;99497:77;;;99547:11;;99540:18;;;;;99497:77;99478:3;;;;;:::i;:::-;;;;99448:137;;;;99602:1;99595:8;;99215:396;;;;:::o;99617:269::-;99686:7;99709:6;99716:1;99709:8;;99705:155;99721:11;:18;;;;99719:1;:20;99705:155;;;99781:8;99763:11;99775:1;99763:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;99760:89;;;99816:17;;99809:24;;;;;99760:89;99741:3;;;;;:::i;:::-;;;;99705:155;;;;99877:1;99870:8;;99617:269;;;;:::o;97828:538::-;97916:15;97957:8;;:15;;97942:11;;:30;;;;;;;:::i;:::-;;;;;;;;97988:6;97983:376;98004:8;;:15;;98000:1;:19;97983:376;;;98051:8;;98060:1;98051:11;;;;;;;;;;;;;;;;;;;;;98041:21;;98077:19;98099:5;:14;98105:7;98099:14;;;;;;;;;;;98077:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;98152:10;98136:26;;:6;:12;;;:26;;;98128:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;98203:5;:14;98209:7;98203:14;;;;;;;;;;;;98196:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;98237:46;98249:7;98258;98267:15;98237:46;;;;;;;;:::i;:::-;;;;;;;;98298:3;;;;;;;;;;;:16;;;98323:4;98330:7;98339;98298:49;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;97983:376;98021:3;;;;;:::i;:::-;;;;97983:376;;;;97828:538;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;318:367::-;391:8;401:6;451:3;444:4;436:6;432:17;428:27;418:2;;469:1;466;459:12;418:2;505:6;492:20;482:30;;535:18;527:6;524:30;521:2;;;567:1;564;557:12;521:2;604:4;596:6;592:17;580:29;;658:3;650:4;642:6;638:17;628:8;624:32;621:41;618:2;;;675:1;672;665:12;618:2;408:277;;;;;:::o;691:137::-;745:5;776:6;770:13;761:22;;792:30;816:5;792:30;:::i;:::-;751:77;;;;:::o;847:351::-;904:8;914:6;964:3;957:4;949:6;945:17;941:27;931:2;;982:1;979;972:12;931:2;1018:6;1005:20;995:30;;1048:18;1040:6;1037:30;1034:2;;;1080:1;1077;1070:12;1034:2;1117:4;1109:6;1105:17;1093:29;;1171:3;1163:4;1155:6;1151:17;1141:8;1137:32;1134:41;1131:2;;;1188:1;1185;1178:12;1131:2;921:277;;;;;:::o;1204:139::-;1250:5;1288:6;1275:20;1266:29;;1304:33;1331:5;1304:33;:::i;:::-;1256:87;;;;:::o;1349:143::-;1406:5;1437:6;1431:13;1422:22;;1453:33;1480:5;1453:33;:::i;:::-;1412:80;;;;:::o;1498:262::-;1557:6;1606:2;1594:9;1585:7;1581:23;1577:32;1574:2;;;1622:1;1619;1612:12;1574:2;1665:1;1690:53;1735:7;1726:6;1715:9;1711:22;1690:53;:::i;:::-;1680:63;;1636:117;1564:196;;;;:::o;1766:284::-;1836:6;1885:2;1873:9;1864:7;1860:23;1856:32;1853:2;;;1901:1;1898;1891:12;1853:2;1944:1;1969:64;2025:7;2016:6;2005:9;2001:22;1969:64;:::i;:::-;1959:74;;1915:128;1843:207;;;;:::o;2056:829::-;2153:6;2161;2169;2177;2185;2234:3;2222:9;2213:7;2209:23;2205:33;2202:2;;;2251:1;2248;2241:12;2202:2;2294:1;2319:53;2364:7;2355:6;2344:9;2340:22;2319:53;:::i;:::-;2309:63;;2265:117;2421:2;2447:53;2492:7;2483:6;2472:9;2468:22;2447:53;:::i;:::-;2437:63;;2392:118;2549:2;2575:53;2620:7;2611:6;2600:9;2596:22;2575:53;:::i;:::-;2565:63;;2520:118;2705:2;2694:9;2690:18;2677:32;2736:18;2728:6;2725:30;2722:2;;;2768:1;2765;2758:12;2722:2;2804:64;2860:7;2851:6;2840:9;2836:22;2804:64;:::i;:::-;2786:82;;;;2648:230;2192:693;;;;;;;;:::o;2891:570::-;2986:6;2994;3002;3051:2;3039:9;3030:7;3026:23;3022:32;3019:2;;;3067:1;3064;3057:12;3019:2;3110:1;3135:53;3180:7;3171:6;3160:9;3156:22;3135:53;:::i;:::-;3125:63;;3081:117;3265:2;3254:9;3250:18;3237:32;3296:18;3288:6;3285:30;3282:2;;;3328:1;3325;3318:12;3282:2;3364:80;3436:7;3427:6;3416:9;3412:22;3364:80;:::i;:::-;3346:98;;;;3208:246;3009:452;;;;;:::o;3467:425::-;3553:6;3561;3610:2;3598:9;3589:7;3585:23;3581:32;3578:2;;;3626:1;3623;3616:12;3578:2;3697:1;3686:9;3682:17;3669:31;3727:18;3719:6;3716:30;3713:2;;;3759:1;3756;3749:12;3713:2;3795:80;3867:7;3858:6;3847:9;3843:22;3795:80;:::i;:::-;3777:98;;;;3640:245;3568:324;;;;;:::o;3898:278::-;3965:6;4014:2;4002:9;3993:7;3989:23;3985:32;3982:2;;;4030:1;4027;4020:12;3982:2;4073:1;4098:61;4151:7;4142:6;4131:9;4127:22;4098:61;:::i;:::-;4088:71;;4044:125;3972:204;;;;:::o;4182:262::-;4241:6;4290:2;4278:9;4269:7;4265:23;4261:32;4258:2;;;4306:1;4303;4296:12;4258:2;4349:1;4374:53;4419:7;4410:6;4399:9;4395:22;4374:53;:::i;:::-;4364:63;;4320:117;4248:196;;;;:::o;4450:284::-;4520:6;4569:2;4557:9;4548:7;4544:23;4540:32;4537:2;;;4585:1;4582;4575:12;4537:2;4628:1;4653:64;4709:7;4700:6;4689:9;4685:22;4653:64;:::i;:::-;4643:74;;4599:128;4527:207;;;;:::o;4740:179::-;4809:10;4830:46;4872:3;4864:6;4830:46;:::i;:::-;4908:4;4903:3;4899:14;4885:28;;4820:99;;;;:::o;4925:118::-;5012:24;5030:5;5012:24;:::i;:::-;5007:3;5000:37;4990:53;;:::o;5081:694::-;5217:52;5263:5;5217:52;:::i;:::-;5285:84;5362:6;5357:3;5285:84;:::i;:::-;5278:91;;5393:54;5441:5;5393:54;:::i;:::-;5470:7;5501:1;5486:282;5511:6;5508:1;5505:13;5486:282;;;5587:6;5581:13;5614:63;5673:3;5658:13;5614:63;:::i;:::-;5607:70;;5700:58;5751:6;5700:58;:::i;:::-;5690:68;;5546:222;5533:1;5530;5526:9;5521:14;;5486:282;;;5490:14;5193:582;;;;;:::o;5811:732::-;5930:3;5959:54;6007:5;5959:54;:::i;:::-;6029:86;6108:6;6103:3;6029:86;:::i;:::-;6022:93;;6139:56;6189:5;6139:56;:::i;:::-;6218:7;6249:1;6234:284;6259:6;6256:1;6253:13;6234:284;;;6335:6;6329:13;6362:63;6421:3;6406:13;6362:63;:::i;:::-;6355:70;;6448:60;6501:6;6448:60;:::i;:::-;6438:70;;6294:224;6281:1;6278;6274:9;6269:14;;6234:284;;;6238:14;6534:3;6527:10;;5935:608;;;;;;;:::o;6549:115::-;6634:23;6651:5;6634:23;:::i;:::-;6629:3;6622:36;6612:52;;:::o;6670:366::-;6812:3;6833:67;6897:2;6892:3;6833:67;:::i;:::-;6826:74;;6909:93;6998:3;6909:93;:::i;:::-;7027:2;7022:3;7018:12;7011:19;;6816:220;;;:::o;7042:366::-;7184:3;7205:67;7269:2;7264:3;7205:67;:::i;:::-;7198:74;;7281:93;7370:3;7281:93;:::i;:::-;7399:2;7394:3;7390:12;7383:19;;7188:220;;;:::o;7414:366::-;7556:3;7577:67;7641:2;7636:3;7577:67;:::i;:::-;7570:74;;7653:93;7742:3;7653:93;:::i;:::-;7771:2;7766:3;7762:12;7755:19;;7560:220;;;:::o;7786:366::-;7928:3;7949:67;8013:2;8008:3;7949:67;:::i;:::-;7942:74;;8025:93;8114:3;8025:93;:::i;:::-;8143:2;8138:3;8134:12;8127:19;;7932:220;;;:::o;8158:366::-;8300:3;8321:67;8385:2;8380:3;8321:67;:::i;:::-;8314:74;;8397:93;8486:3;8397:93;:::i;:::-;8515:2;8510:3;8506:12;8499:19;;8304:220;;;:::o;8530:366::-;8672:3;8693:67;8757:2;8752:3;8693:67;:::i;:::-;8686:74;;8769:93;8858:3;8769:93;:::i;:::-;8887:2;8882:3;8878:12;8871:19;;8676:220;;;:::o;8902:366::-;9044:3;9065:67;9129:2;9124:3;9065:67;:::i;:::-;9058:74;;9141:93;9230:3;9141:93;:::i;:::-;9259:2;9254:3;9250:12;9243:19;;9048:220;;;:::o;9274:366::-;9416:3;9437:67;9501:2;9496:3;9437:67;:::i;:::-;9430:74;;9513:93;9602:3;9513:93;:::i;:::-;9631:2;9626:3;9622:12;9615:19;;9420:220;;;:::o;9646:115::-;9731:23;9748:5;9731:23;:::i;:::-;9726:3;9719:36;9709:52;;:::o;9767:108::-;9844:24;9862:5;9844:24;:::i;:::-;9839:3;9832:37;9822:53;;:::o;9881:118::-;9968:24;9986:5;9968:24;:::i;:::-;9963:3;9956:37;9946:53;;:::o;10005:115::-;10090:23;10107:5;10090:23;:::i;:::-;10085:3;10078:36;10068:52;;:::o;10126:222::-;10219:4;10257:2;10246:9;10242:18;10234:26;;10270:71;10338:1;10327:9;10323:17;10314:6;10270:71;:::i;:::-;10224:124;;;;:::o;10354:442::-;10503:4;10541:2;10530:9;10526:18;10518:26;;10554:71;10622:1;10611:9;10607:17;10598:6;10554:71;:::i;:::-;10635:72;10703:2;10692:9;10688:18;10679:6;10635:72;:::i;:::-;10717;10785:2;10774:9;10770:18;10761:6;10717:72;:::i;:::-;10508:288;;;;;;:::o;10802:332::-;10923:4;10961:2;10950:9;10946:18;10938:26;;10974:71;11042:1;11031:9;11027:17;11018:6;10974:71;:::i;:::-;11055:72;11123:2;11112:9;11108:18;11099:6;11055:72;:::i;:::-;10928:206;;;;;:::o;11140:442::-;11289:4;11327:2;11316:9;11312:18;11304:26;;11340:71;11408:1;11397:9;11393:17;11384:6;11340:71;:::i;:::-;11421:72;11489:2;11478:9;11474:18;11465:6;11421:72;:::i;:::-;11503;11571:2;11560:9;11556:18;11547:6;11503:72;:::i;:::-;11294:288;;;;;;:::o;11588:314::-;11727:4;11765:2;11754:9;11750:18;11742:26;;11778:117;11892:1;11881:9;11877:17;11868:6;11778:117;:::i;:::-;11732:170;;;;:::o;11908:373::-;12051:4;12089:2;12078:9;12074:18;12066:26;;12138:9;12132:4;12128:20;12124:1;12113:9;12109:17;12102:47;12166:108;12269:4;12260:6;12166:108;:::i;:::-;12158:116;;12056:225;;;;:::o;12287:218::-;12378:4;12416:2;12405:9;12401:18;12393:26;;12429:69;12495:1;12484:9;12480:17;12471:6;12429:69;:::i;:::-;12383:122;;;;:::o;12511:419::-;12677:4;12715:2;12704:9;12700:18;12692:26;;12764:9;12758:4;12754:20;12750:1;12739:9;12735:17;12728:47;12792:131;12918:4;12792:131;:::i;:::-;12784:139;;12682:248;;;:::o;12936:419::-;13102:4;13140:2;13129:9;13125:18;13117:26;;13189:9;13183:4;13179:20;13175:1;13164:9;13160:17;13153:47;13217:131;13343:4;13217:131;:::i;:::-;13209:139;;13107:248;;;:::o;13361:419::-;13527:4;13565:2;13554:9;13550:18;13542:26;;13614:9;13608:4;13604:20;13600:1;13589:9;13585:17;13578:47;13642:131;13768:4;13642:131;:::i;:::-;13634:139;;13532:248;;;:::o;13786:419::-;13952:4;13990:2;13979:9;13975:18;13967:26;;14039:9;14033:4;14029:20;14025:1;14014:9;14010:17;14003:47;14067:131;14193:4;14067:131;:::i;:::-;14059:139;;13957:248;;;:::o;14211:419::-;14377:4;14415:2;14404:9;14400:18;14392:26;;14464:9;14458:4;14454:20;14450:1;14439:9;14435:17;14428:47;14492:131;14618:4;14492:131;:::i;:::-;14484:139;;14382:248;;;:::o;14636:419::-;14802:4;14840:2;14829:9;14825:18;14817:26;;14889:9;14883:4;14879:20;14875:1;14864:9;14860:17;14853:47;14917:131;15043:4;14917:131;:::i;:::-;14909:139;;14807:248;;;:::o;15061:419::-;15227:4;15265:2;15254:9;15250:18;15242:26;;15314:9;15308:4;15304:20;15300:1;15289:9;15285:17;15278:47;15342:131;15468:4;15342:131;:::i;:::-;15334:139;;15232:248;;;:::o;15486:419::-;15652:4;15690:2;15679:9;15675:18;15667:26;;15739:9;15733:4;15729:20;15725:1;15714:9;15710:17;15703:47;15767:131;15893:4;15767:131;:::i;:::-;15759:139;;15657:248;;;:::o;15911:434::-;16056:4;16094:2;16083:9;16079:18;16071:26;;16107:69;16173:1;16162:9;16158:17;16149:6;16107:69;:::i;:::-;16186:70;16252:2;16241:9;16237:18;16228:6;16186:70;:::i;:::-;16266:72;16334:2;16323:9;16319:18;16310:6;16266:72;:::i;:::-;16061:284;;;;;;:::o;16351:222::-;16444:4;16482:2;16471:9;16467:18;16459:26;;16495:71;16563:1;16552:9;16548:17;16539:6;16495:71;:::i;:::-;16449:124;;;;:::o;16579:98::-;16644:4;16667:3;16659:11;;16649:28;;;:::o;16683:132::-;16750:4;16773:3;16765:11;;16803:4;16798:3;16794:14;16786:22;;16755:60;;;:::o;16821:104::-;16886:6;16914:4;16904:14;;16893:32;;;:::o;16931:114::-;16998:6;17032:5;17026:12;17016:22;;17005:40;;;:::o;17051:111::-;17119:4;17151;17146:3;17142:14;17134:22;;17124:38;;;:::o;17168:113::-;17238:4;17270;17265:3;17261:14;17253:22;;17243:38;;;:::o;17287:143::-;17384:11;17421:3;17406:18;;17396:34;;;;:::o;17436:184::-;17535:11;17569:6;17564:3;17557:19;17609:4;17604:3;17600:14;17585:29;;17547:73;;;;:::o;17626:169::-;17710:11;17744:6;17739:3;17732:19;17784:4;17779:3;17775:14;17760:29;;17722:73;;;;:::o;17801:305::-;17841:3;17860:20;17878:1;17860:20;:::i;:::-;17855:25;;17894:20;17912:1;17894:20;:::i;:::-;17889:25;;18048:1;17980:66;17976:74;17973:1;17970:81;17967:2;;;18054:18;;:::i;:::-;17967:2;18098:1;18095;18091:9;18084:16;;17845:261;;;;:::o;18112:185::-;18152:1;18169:20;18187:1;18169:20;:::i;:::-;18164:25;;18203:20;18221:1;18203:20;:::i;:::-;18198:25;;18242:1;18232:2;;18247:18;;:::i;:::-;18232:2;18289:1;18286;18282:9;18277:14;;18154:143;;;;:::o;18303:348::-;18343:7;18366:20;18384:1;18366:20;:::i;:::-;18361:25;;18400:20;18418:1;18400:20;:::i;:::-;18395:25;;18588:1;18520:66;18516:74;18513:1;18510:81;18505:1;18498:9;18491:17;18487:105;18484:2;;;18595:18;;:::i;:::-;18484:2;18643:1;18640;18636:9;18625:20;;18351:300;;;;:::o;18657:191::-;18697:4;18717:20;18735:1;18717:20;:::i;:::-;18712:25;;18751:20;18769:1;18751:20;:::i;:::-;18746:25;;18790:1;18787;18784:8;18781:2;;;18795:18;;:::i;:::-;18781:2;18840:1;18837;18833:9;18825:17;;18702:146;;;;:::o;18854:96::-;18891:7;18920:24;18938:5;18920:24;:::i;:::-;18909:35;;18899:51;;;:::o;18956:90::-;18990:7;19033:5;19026:13;19019:21;19008:32;;18998:48;;;:::o;19052:149::-;19088:7;19128:66;19121:5;19117:78;19106:89;;19096:105;;;:::o;19207:126::-;19244:7;19284:42;19277:5;19273:54;19262:65;;19252:81;;;:::o;19339:91::-;19375:7;19415:8;19408:5;19404:20;19393:31;;19383:47;;;:::o;19436:77::-;19473:7;19502:5;19491:16;;19481:32;;;:::o;19519:97::-;19555:7;19595:14;19588:5;19584:26;19573:37;;19563:53;;;:::o;19622:233::-;19661:3;19684:24;19702:5;19684:24;:::i;:::-;19675:33;;19730:66;19723:5;19720:77;19717:2;;;19800:18;;:::i;:::-;19717:2;19847:1;19840:5;19836:13;19829:20;;19665:190;;;:::o;19861:180::-;19909:77;19906:1;19899:88;20006:4;20003:1;19996:15;20030:4;20027:1;20020:15;20047:180;20095:77;20092:1;20085:88;20192:4;20189:1;20182:15;20216:4;20213:1;20206:15;20233:225;20373:34;20369:1;20361:6;20357:14;20350:58;20442:8;20437:2;20429:6;20425:15;20418:33;20339:119;:::o;20464:179::-;20604:31;20600:1;20592:6;20588:14;20581:55;20570:73;:::o;20649:164::-;20789:16;20785:1;20777:6;20773:14;20766:40;20755:58;:::o;20819:164::-;20959:16;20955:1;20947:6;20943:14;20936:40;20925:58;:::o;20989:182::-;21129:34;21125:1;21117:6;21113:14;21106:58;21095:76;:::o;21177:162::-;21317:14;21313:1;21305:6;21301:14;21294:38;21283:56;:::o;21345:221::-;21485:34;21481:1;21473:6;21469:14;21462:58;21554:4;21549:2;21541:6;21537:15;21530:29;21451:115;:::o;21572:164::-;21712:16;21708:1;21700:6;21696:14;21689:40;21678:58;:::o;21742:122::-;21815:24;21833:5;21815:24;:::i;:::-;21808:5;21805:35;21795:2;;21854:1;21851;21844:12;21795:2;21785:79;:::o;21870:116::-;21940:21;21955:5;21940:21;:::i;:::-;21933:5;21930:32;21920:2;;21976:1;21973;21966:12;21920:2;21910:76;:::o;21992:122::-;22065:24;22083:5;22065:24;:::i;:::-;22058:5;22055:35;22045:2;;22104:1;22101;22094:12;22045:2;22035:79;:::o
Swarm Source
ipfs://6899b7ee04c616a8a4c411df2a775d7580e83a30b0b40fbe63c0b3e82939ec83
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.