Token Hunters
Overview ERC-721
Total Supply:
191 HNTR
Holders:
18 addresses
Profile Summary
Contract:
Balance
119 HNTR
[ Download CSV Export ]
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Hunters
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-30 */ // File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/security/Pausable.sol // OpenZeppelin Contracts v4.4.1 (security/Pausable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (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/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: Hunters.sol pragma solidity 0.8.4; contract Hunters is ERC721, Ownable, Pausable { /* EVENTS */ event HunterLocked(address account, uint256 id); event HunterUnlocked(address account, uint256 id); // ID -> Account mapping(uint256 => address) public lockedHunters; string constant ERR_LOCK_BALANCE = "Account doesn't own hunter"; string constant ERR_LOCKED = "Hunter is locked"; using Strings for uint256; using Counters for Counters.Counter; Counters.Counter private supply; mapping (address => uint) hunterCounts; bytes32 constant merkleRoot = 0xa81682d80bb19f95b0f54b6763d7a4f3cbe9964f7d37527abde729429d34180b; string public uriPrefix = "https://api.nftroyale.com/h/"; string public uriSuffix = ""; uint256 constant cost = 0.1 ether; uint256 constant maxSupply = 10000; uint256 constant maxMintAmountPerTx = 10; uint256 constant maxMintAmountPerWallet = 10; bool public isWhitelistMintActive = false; bool public isPublicMintActive = false; constructor() ERC721("Hunters", "HNTR") {} /* HUNTER LOCKING */ function lockHunter( address account, uint256 id ) external onlyOwner { // Check if hunter is owned by user require(ownerOf(id) == account, ERR_LOCK_BALANCE); lockedHunters[id] = account; emit HunterLocked(account, id); } function unlockHunter( address account, uint256 id ) external onlyOwner { // Check if hunter is owned by user require(ownerOf(id) == account, ERR_LOCK_BALANCE); lockedHunters[id] = address(0x0); emit HunterUnlocked(account, id); } function isHunterLocked( uint256 id ) public view returns (bool) { return (lockedHunters[id] != address(0x0)); } function getHunterLocker( uint256 id ) public view returns (address) { return lockedHunters[id]; } modifier onlyOrigin () { require(msg.sender == tx.origin, "Contract calls are not allowed"); _; } modifier mintCompliance(uint256 _mintAmount) { require(_mintAmount > 0 && _mintAmount <= maxMintAmountPerTx, "Invalid mint amount!"); require(supply.current() + _mintAmount <= maxSupply, "Max supply exceeded!"); _; } function pause() public onlyOwner { _pause(); } function unpause() public onlyOwner { _unpause(); } function publicSaleMintHunter(uint256 _mintAmount) external payable mintCompliance(_mintAmount) onlyOrigin { require(isPublicMintActive, "Public mint is not active!"); require(msg.value >= cost * _mintAmount, "Insufficient funds!"); require(hunterCounts[msg.sender] + _mintAmount <= maxMintAmountPerWallet, "Exceeds mint amount per wallet!"); hunterCounts[msg.sender] += _mintAmount; _mintLoop(msg.sender, _mintAmount); } function preSaleMintHunter(uint256 _mintAmount, bytes32[] calldata proof) external payable mintCompliance(_mintAmount) onlyOrigin { require(isWhitelistMintActive, "Whitelist mint is not active!"); require(msg.value >= cost * _mintAmount, "Insufficient funds!"); require(hunterCounts[msg.sender] + _mintAmount <= maxMintAmountPerWallet, "Exceeds mint amount per wallet!"); require(MerkleProof.verify(proof, merkleRoot, keccak256(abi.encodePacked(msg.sender))), "You are not whitelisted!"); hunterCounts[msg.sender] += _mintAmount; _mintLoop(msg.sender, _mintAmount); } function studioMint(uint256 _mintAmount) external onlyOwner { _mintLoop(msg.sender, _mintAmount); } function _mintLoop(address _receiver, uint256 _mintAmount) internal { for (uint256 i = 0; i < _mintAmount; i++) { supply.increment(); _safeMint(_receiver, supply.current()); } } function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require(_exists(_tokenId), "Non-existent hunter token given!"); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix)) : ""; } function _baseURI() internal view virtual override returns (string memory) { return uriPrefix; } function totalSupply() external view returns (uint256) { return supply.current(); } function setUriPrefix(string memory _uriPrefix) external onlyOwner { uriPrefix = _uriPrefix; } function setUriSuffix(string memory _uriSuffix) external onlyOwner { uriSuffix = _uriSuffix; } function setIsWhitelistMintActive(bool _state) external onlyOwner { isWhitelistMintActive = _state; } function setIsPublicMintActive(bool _state) external onlyOwner { isPublicMintActive = _state; } function withdrawAll() external onlyOwner { uint256 balance = address(this).balance; require(balance > 0); _withdraw(payable(0xC13109635A71D00A8701F1607105B3ca476dFE39), (balance * 100) / 100); _withdraw(owner(), address(this).balance); } function _withdraw(address _address, uint256 _amount) private { (bool success, ) = _address.call{value: _amount}(""); require(success, "Transfer failed."); } function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal whenNotPaused override { require(!isHunterLocked(tokenId), ERR_LOCKED); super._beforeTokenTransfer(from, to, tokenId); } }
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"HunterLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"HunterUnlocked","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":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getHunterLocker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"isHunterLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicMintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isWhitelistMintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"lockHunter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lockedHunters","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"preSaleMintHunter","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"publicSaleMintHunter","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setIsPublicMintActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setIsWhitelistMintActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"studioMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"unlockHunter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280601c81526020017f68747470733a2f2f6170692e6e6674726f79616c652e636f6d2f682f00000000815250600a9080519060200190620000519291906200026d565b5060405180602001604052806000815250600b9080519060200190620000799291906200026d565b506000600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff021916908315150217905550348015620000bd57600080fd5b506040518060400160405280600781526020017f48756e74657273000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f484e5452000000000000000000000000000000000000000000000000000000008152508160009080519060200190620001429291906200026d565b5080600190805190602001906200015b9291906200026d565b5050506200017e620001726200019f60201b60201c565b620001a760201b60201c565b6000600660146101000a81548160ff02191690831515021790555062000382565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200027b906200031d565b90600052602060002090601f0160209004810192826200029f5760008555620002eb565b82601f10620002ba57805160ff1916838001178555620002eb565b82800160010185558215620002eb579182015b82811115620002ea578251825591602001919060010190620002cd565b5b509050620002fa9190620002fe565b5090565b5b8082111562000319576000816000905550600101620002ff565b5090565b600060028204905060018216806200033657607f821691505b602082108114156200034d576200034c62000353565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614ddb80620003926000396000f3fe60806040526004361061021a5760003560e01c8063715018a611610123578063ae55b5f4116100ab578063dccdfde81161006f578063dccdfde81461078d578063e4ad1838146107b6578063e985e9c5146107df578063f2fde38b1461081c578063fabd1d2d146108455761021a565b8063ae55b5f4146106a5578063b88d4fde146106ce578063c033afa7146106f7578063c10e2a4e14610734578063c87b56dd146107505761021a565b8063853828b6116100f2578063853828b6146105d25780638c68ec24146105e95780638da5cb5b1461062657806395d89b4114610651578063a22cb4651461067c5761021a565b8063715018a61461053e5780637ec4a659146105555780637f8986af1461057e5780638456cb59146105bb5761021a565b80632d6b6224116101a65780635c975abb116101755780635c975abb146104455780635ec243321461047057806362b99ad4146104995780636352211e146104c457806370a08231146105015761021a565b80632d6b6224146103af5780633f4ba83a146103da57806342842e0e146103f15780635503a0e81461041a5761021a565b806316ba10e0116101ed57806316ba10e0146102ed57806318160ddd1461031657806323b872dd1461034157806323f631231461036a578063246f167b146103935761021a565b806301ffc9a71461021f57806306fdde031461025c578063081812fc14610287578063095ea7b3146102c4575b600080fd5b34801561022b57600080fd5b50610246600480360381019061024191906137ca565b610870565b6040516102539190613f09565b60405180910390f35b34801561026857600080fd5b50610271610952565b60405161027e9190613f24565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a9919061385d565b6109e4565b6040516102bb9190613e79565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e69190613765565b610a69565b005b3480156102f957600080fd5b50610314600480360381019061030f919061381c565b610b81565b005b34801561032257600080fd5b5061032b610c17565b60405161033891906142a6565b60405180910390f35b34801561034d57600080fd5b506103686004803603810190610363919061365f565b610c28565b005b34801561037657600080fd5b50610391600480360381019061038c91906137a1565b610c88565b005b6103ad60048036038101906103a8919061385d565b610d21565b005b3480156103bb57600080fd5b506103c4610fd0565b6040516103d19190613f09565b60405180910390f35b3480156103e657600080fd5b506103ef610fe3565b005b3480156103fd57600080fd5b506104186004803603810190610413919061365f565b611069565b005b34801561042657600080fd5b5061042f611089565b60405161043c9190613f24565b60405180910390f35b34801561045157600080fd5b5061045a611117565b6040516104679190613f09565b60405180910390f35b34801561047c57600080fd5b5061049760048036038101906104929190613765565b61112e565b005b3480156104a557600080fd5b506104ae6112e9565b6040516104bb9190613f24565b60405180910390f35b3480156104d057600080fd5b506104eb60048036038101906104e6919061385d565b611377565b6040516104f89190613e79565b60405180910390f35b34801561050d57600080fd5b50610528600480360381019061052391906135fa565b611429565b60405161053591906142a6565b60405180910390f35b34801561054a57600080fd5b506105536114e1565b005b34801561056157600080fd5b5061057c6004803603810190610577919061381c565b611569565b005b34801561058a57600080fd5b506105a560048036038101906105a0919061385d565b6115ff565b6040516105b29190613e79565b60405180910390f35b3480156105c757600080fd5b506105d061163c565b005b3480156105de57600080fd5b506105e76116c2565b005b3480156105f557600080fd5b50610610600480360381019061060b919061385d565b611799565b60405161061d9190613f09565b60405180910390f35b34801561063257600080fd5b5061063b611805565b6040516106489190613e79565b60405180910390f35b34801561065d57600080fd5b5061066661182f565b6040516106739190613f24565b60405180910390f35b34801561068857600080fd5b506106a3600480360381019061069e9190613729565b6118c1565b005b3480156106b157600080fd5b506106cc60048036038101906106c7919061385d565b6118d7565b005b3480156106da57600080fd5b506106f560048036038101906106f091906136ae565b611960565b005b34801561070357600080fd5b5061071e6004803603810190610719919061385d565b6119c2565b60405161072b9190613e79565b60405180910390f35b61074e60048036038101906107499190613886565b6119f5565b005b34801561075c57600080fd5b506107776004803603810190610772919061385d565b611d7a565b6040516107849190613f24565b60405180910390f35b34801561079957600080fd5b506107b460048036038101906107af9190613765565b611e24565b005b3480156107c257600080fd5b506107dd60048036038101906107d891906137a1565b611fde565b005b3480156107eb57600080fd5b5061080660048036038101906108019190613623565b612077565b6040516108139190613f09565b60405180910390f35b34801561082857600080fd5b50610843600480360381019061083e91906135fa565b61210b565b005b34801561085157600080fd5b5061085a612203565b6040516108679190613f09565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061093b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061094b575061094a82612216565b5b9050919050565b60606000805461096190614576565b80601f016020809104026020016040519081016040528092919081815260200182805461098d90614576565b80156109da5780601f106109af576101008083540402835291602001916109da565b820191906000526020600020905b8154815290600101906020018083116109bd57829003601f168201915b5050505050905090565b60006109ef82612280565b610a2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2590614166565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a7482611377565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610adc906141c6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b046122ec565b73ffffffffffffffffffffffffffffffffffffffff161480610b335750610b3281610b2d6122ec565b612077565b5b610b72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b69906140e6565b60405180910390fd5b610b7c83836122f4565b505050565b610b896122ec565b73ffffffffffffffffffffffffffffffffffffffff16610ba7611805565b73ffffffffffffffffffffffffffffffffffffffff1614610bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf490614186565b60405180910390fd5b80600b9080519060200190610c139291906133d4565b5050565b6000610c2360086123ad565b905090565b610c39610c336122ec565b826123bb565b610c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6f90614226565b60405180910390fd5b610c83838383612499565b505050565b610c906122ec565b73ffffffffffffffffffffffffffffffffffffffff16610cae611805565b73ffffffffffffffffffffffffffffffffffffffff1614610d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfb90614186565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b80600081118015610d335750600a8111155b610d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6990613fe6565b60405180910390fd5b61271081610d8060086123ad565b610d8a91906143ab565b1115610dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc2906141e6565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3090614266565b60405180910390fd5b600c60019054906101000a900460ff16610e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7f90614066565b60405180910390fd5b8167016345785d8a0000610e9c9190614432565b341015610ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed590614286565b60405180910390fd5b600a82600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f2b91906143ab565b1115610f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f63906141a6565b60405180910390fd5b81600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610fbb91906143ab565b92505081905550610fcc3383612700565b5050565b600c60019054906101000a900460ff1681565b610feb6122ec565b73ffffffffffffffffffffffffffffffffffffffff16611009611805565b73ffffffffffffffffffffffffffffffffffffffff161461105f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105690614186565b60405180910390fd5b611067612740565b565b61108483838360405180602001604052806000815250611960565b505050565b600b805461109690614576565b80601f01602080910402602001604051908101604052809291908181526020018280546110c290614576565b801561110f5780601f106110e45761010080835404028352916020019161110f565b820191906000526020600020905b8154815290600101906020018083116110f257829003601f168201915b505050505081565b6000600660149054906101000a900460ff16905090565b6111366122ec565b73ffffffffffffffffffffffffffffffffffffffff16611154611805565b73ffffffffffffffffffffffffffffffffffffffff16146111aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a190614186565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166111ca82611377565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280601a81526020017f4163636f756e7420646f65736e2774206f776e2068756e74657200000000000081525090611258576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124f9190613f24565b60405180910390fd5b5060006007600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f468e49aee39bdebc29a197898fc861dff5355d0bdf00b995e3ba429b1730ef0e82826040516112dd929190613ee0565b60405180910390a15050565b600a80546112f690614576565b80601f016020809104026020016040519081016040528092919081815260200182805461132290614576565b801561136f5780601f106113445761010080835404028352916020019161136f565b820191906000526020600020905b81548152906001019060200180831161135257829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141790614126565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561149a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149190614106565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114e96122ec565b73ffffffffffffffffffffffffffffffffffffffff16611507611805565b73ffffffffffffffffffffffffffffffffffffffff161461155d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155490614186565b60405180910390fd5b61156760006127e2565b565b6115716122ec565b73ffffffffffffffffffffffffffffffffffffffff1661158f611805565b73ffffffffffffffffffffffffffffffffffffffff16146115e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115dc90614186565b60405180910390fd5b80600a90805190602001906115fb9291906133d4565b5050565b60006007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6116446122ec565b73ffffffffffffffffffffffffffffffffffffffff16611662611805565b73ffffffffffffffffffffffffffffffffffffffff16146116b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116af90614186565b60405180910390fd5b6116c06128a8565b565b6116ca6122ec565b73ffffffffffffffffffffffffffffffffffffffff166116e8611805565b73ffffffffffffffffffffffffffffffffffffffff161461173e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173590614186565b60405180910390fd5b60004790506000811161175057600080fd5b61178573c13109635a71d00a8701f1607105b3ca476dfe39606480846117769190614432565b6117809190614401565b61294b565b611796611790611805565b4761294b565b50565b60008073ffffffffffffffffffffffffffffffffffffffff166007600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461183e90614576565b80601f016020809104026020016040519081016040528092919081815260200182805461186a90614576565b80156118b75780601f1061188c576101008083540402835291602001916118b7565b820191906000526020600020905b81548152906001019060200180831161189a57829003601f168201915b5050505050905090565b6118d36118cc6122ec565b83836129fc565b5050565b6118df6122ec565b73ffffffffffffffffffffffffffffffffffffffff166118fd611805565b73ffffffffffffffffffffffffffffffffffffffff1614611953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194a90614186565b60405180910390fd5b61195d3382612700565b50565b61197161196b6122ec565b836123bb565b6119b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a790614226565b60405180910390fd5b6119bc84848484612b69565b50505050565b60076020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b82600081118015611a075750600a8111155b611a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3d90613fe6565b60405180910390fd5b61271081611a5460086123ad565b611a5e91906143ab565b1115611a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a96906141e6565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0490614266565b60405180910390fd5b600c60009054906101000a900460ff16611b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5390614246565b60405180910390fd5b8367016345785d8a0000611b709190614432565b341015611bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba990614286565b60405180910390fd5b600a84600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bff91906143ab565b1115611c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c37906141a6565b60405180910390fd5b611cd5838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050507fa81682d80bb19f95b0f54b6763d7a4f3cbe9964f7d37527abde729429d34180b60001b33604051602001611cba9190613e18565b60405160208183030381529060405280519060200120612bc5565b611d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0b90614006565b60405180910390fd5b83600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d6391906143ab565b92505081905550611d743385612700565b50505050565b6060611d8582612280565b611dc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbb906140a6565b60405180910390fd5b6000611dce612bdc565b90506000815111611dee5760405180602001604052806000815250611e1c565b80611df884612c6e565b600b604051602001611e0c93929190613e33565b6040516020818303038152906040525b915050919050565b611e2c6122ec565b73ffffffffffffffffffffffffffffffffffffffff16611e4a611805565b73ffffffffffffffffffffffffffffffffffffffff1614611ea0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9790614186565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16611ec082611377565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280601a81526020017f4163636f756e7420646f65736e2774206f776e2068756e74657200000000000081525090611f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f459190613f24565b60405180910390fd5b50816007600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f8bf17c3e73cd2a6ec88bd3216a3efc4637f510f0a3a76fdba9b6485233db00a18282604051611fd2929190613ee0565b60405180910390a15050565b611fe66122ec565b73ffffffffffffffffffffffffffffffffffffffff16612004611805565b73ffffffffffffffffffffffffffffffffffffffff161461205a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205190614186565b60405180910390fd5b80600c60016101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6121136122ec565b73ffffffffffffffffffffffffffffffffffffffff16612131611805565b73ffffffffffffffffffffffffffffffffffffffff1614612187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217e90614186565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ee90613f86565b60405180910390fd5b612200816127e2565b50565b600c60009054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661236783611377565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b60006123c682612280565b612405576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fc90614086565b60405180910390fd5b600061241083611377565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061247f57508373ffffffffffffffffffffffffffffffffffffffff16612467846109e4565b73ffffffffffffffffffffffffffffffffffffffff16145b80612490575061248f8185612077565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166124b982611377565b73ffffffffffffffffffffffffffffffffffffffff161461250f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250690613fa6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561257f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257690614026565b60405180910390fd5b61258a838383612e1b565b6125956000826122f4565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125e5919061448c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461263c91906143ab565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46126fb838383612ef5565b505050565b60005b8181101561273b576127156008612efa565b6127288361272360086123ad565b612f10565b8080612733906145d9565b915050612703565b505050565b612748611117565b612787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277e90613f46565b60405180910390fd5b6000600660146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6127cb6122ec565b6040516127d89190613e79565b60405180910390a1565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6128b0611117565b156128f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e7906140c6565b60405180910390fd5b6001600660146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586129346122ec565b6040516129419190613e79565b60405180910390a1565b60008273ffffffffffffffffffffffffffffffffffffffff168260405161297190613e64565b60006040518083038185875af1925050503d80600081146129ae576040519150601f19603f3d011682016040523d82523d6000602084013e6129b3565b606091505b50509050806129f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ee90614206565b60405180910390fd5b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6290614046565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612b5c9190613f09565b60405180910390a3505050565b612b74848484612499565b612b8084848484612f2e565b612bbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb690613f66565b60405180910390fd5b50505050565b600082612bd285846130c5565b1490509392505050565b6060600a8054612beb90614576565b80601f0160208091040260200160405190810160405280929190818152602001828054612c1790614576565b8015612c645780601f10612c3957610100808354040283529160200191612c64565b820191906000526020600020905b815481529060010190602001808311612c4757829003601f168201915b5050505050905090565b60606000821415612cb6576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e16565b600082905060005b60008214612ce8578080612cd1906145d9565b915050600a82612ce19190614401565b9150612cbe565b60008167ffffffffffffffff811115612d2a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612d5c5781602001600182028036833780820191505090505b5090505b60008514612e0f57600182612d75919061448c565b9150600a85612d849190614646565b6030612d9091906143ab565b60f81b818381518110612dcc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e089190614401565b9450612d60565b8093505050505b919050565b612e23611117565b15612e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5a906140c6565b60405180910390fd5b612e6c81611799565b156040518060400160405280601081526020017f48756e746572206973206c6f636b65640000000000000000000000000000000081525090612ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612edb9190613f24565b60405180910390fd5b50612ef0838383613160565b505050565b505050565b6001816000016000828254019250508190555050565b612f2a828260405180602001604052806000815250613165565b5050565b6000612f4f8473ffffffffffffffffffffffffffffffffffffffff166131c0565b156130b8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f786122ec565b8786866040518563ffffffff1660e01b8152600401612f9a9493929190613e94565b602060405180830381600087803b158015612fb457600080fd5b505af1925050508015612fe557506040513d601f19601f82011682018060405250810190612fe291906137f3565b60015b613068573d8060008114613015576040519150601f19603f3d011682016040523d82523d6000602084013e61301a565b606091505b50600081511415613060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305790613f66565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506130bd565b600190505b949350505050565b60008082905060005b8451811015613155576000858281518110613112577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190508083116131345761312d83826131e3565b9250613141565b61313e81846131e3565b92505b50808061314d906145d9565b9150506130ce565b508091505092915050565b505050565b61316f83836131fa565b61317c6000848484612f2e565b6131bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b290613f66565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082600052816020526040600020905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561326a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326190614146565b60405180910390fd5b61327381612280565b156132b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132aa90613fc6565b60405180910390fd5b6132bf60008383612e1b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461330f91906143ab565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46133d060008383612ef5565b5050565b8280546133e090614576565b90600052602060002090601f0160209004810192826134025760008555613449565b82601f1061341b57805160ff1916838001178555613449565b82800160010185558215613449579182015b8281111561344857825182559160200191906001019061342d565b5b509050613456919061345a565b5090565b5b8082111561347357600081600090555060010161345b565b5090565b600061348a613485846142e6565b6142c1565b9050828152602081018484840111156134a257600080fd5b6134ad848285614534565b509392505050565b60006134c86134c384614317565b6142c1565b9050828152602081018484840111156134e057600080fd5b6134eb848285614534565b509392505050565b60008135905061350281614d49565b92915050565b60008083601f84011261351a57600080fd5b8235905067ffffffffffffffff81111561353357600080fd5b60208301915083602082028301111561354b57600080fd5b9250929050565b60008135905061356181614d60565b92915050565b60008135905061357681614d77565b92915050565b60008151905061358b81614d77565b92915050565b600082601f8301126135a257600080fd5b81356135b2848260208601613477565b91505092915050565b600082601f8301126135cc57600080fd5b81356135dc8482602086016134b5565b91505092915050565b6000813590506135f481614d8e565b92915050565b60006020828403121561360c57600080fd5b600061361a848285016134f3565b91505092915050565b6000806040838503121561363657600080fd5b6000613644858286016134f3565b9250506020613655858286016134f3565b9150509250929050565b60008060006060848603121561367457600080fd5b6000613682868287016134f3565b9350506020613693868287016134f3565b92505060406136a4868287016135e5565b9150509250925092565b600080600080608085870312156136c457600080fd5b60006136d2878288016134f3565b94505060206136e3878288016134f3565b93505060406136f4878288016135e5565b925050606085013567ffffffffffffffff81111561371157600080fd5b61371d87828801613591565b91505092959194509250565b6000806040838503121561373c57600080fd5b600061374a858286016134f3565b925050602061375b85828601613552565b9150509250929050565b6000806040838503121561377857600080fd5b6000613786858286016134f3565b9250506020613797858286016135e5565b9150509250929050565b6000602082840312156137b357600080fd5b60006137c184828501613552565b91505092915050565b6000602082840312156137dc57600080fd5b60006137ea84828501613567565b91505092915050565b60006020828403121561380557600080fd5b60006138138482850161357c565b91505092915050565b60006020828403121561382e57600080fd5b600082013567ffffffffffffffff81111561384857600080fd5b613854848285016135bb565b91505092915050565b60006020828403121561386f57600080fd5b600061387d848285016135e5565b91505092915050565b60008060006040848603121561389b57600080fd5b60006138a9868287016135e5565b935050602084013567ffffffffffffffff8111156138c657600080fd5b6138d286828701613508565b92509250509250925092565b6138e7816144c0565b82525050565b6138fe6138f9826144c0565b614622565b82525050565b61390d816144d2565b82525050565b600061391e8261435d565b6139288185614373565b9350613938818560208601614543565b61394181614733565b840191505092915050565b600061395782614368565b613961818561438f565b9350613971818560208601614543565b61397a81614733565b840191505092915050565b600061399082614368565b61399a81856143a0565b93506139aa818560208601614543565b80840191505092915050565b600081546139c381614576565b6139cd81866143a0565b945060018216600081146139e857600181146139f957613a2c565b60ff19831686528186019350613a2c565b613a0285614348565b60005b83811015613a2457815481890152600182019150602081019050613a05565b838801955050505b50505092915050565b6000613a4260148361438f565b9150613a4d82614751565b602082019050919050565b6000613a6560328361438f565b9150613a708261477a565b604082019050919050565b6000613a8860268361438f565b9150613a93826147c9565b604082019050919050565b6000613aab60258361438f565b9150613ab682614818565b604082019050919050565b6000613ace601c8361438f565b9150613ad982614867565b602082019050919050565b6000613af160148361438f565b9150613afc82614890565b602082019050919050565b6000613b1460188361438f565b9150613b1f826148b9565b602082019050919050565b6000613b3760248361438f565b9150613b42826148e2565b604082019050919050565b6000613b5a60198361438f565b9150613b6582614931565b602082019050919050565b6000613b7d601a8361438f565b9150613b888261495a565b602082019050919050565b6000613ba0602c8361438f565b9150613bab82614983565b604082019050919050565b6000613bc360208361438f565b9150613bce826149d2565b602082019050919050565b6000613be660108361438f565b9150613bf1826149fb565b602082019050919050565b6000613c0960388361438f565b9150613c1482614a24565b604082019050919050565b6000613c2c602a8361438f565b9150613c3782614a73565b604082019050919050565b6000613c4f60298361438f565b9150613c5a82614ac2565b604082019050919050565b6000613c7260208361438f565b9150613c7d82614b11565b602082019050919050565b6000613c95602c8361438f565b9150613ca082614b3a565b604082019050919050565b6000613cb860208361438f565b9150613cc382614b89565b602082019050919050565b6000613cdb601f8361438f565b9150613ce682614bb2565b602082019050919050565b6000613cfe60218361438f565b9150613d0982614bdb565b604082019050919050565b6000613d21600083614384565b9150613d2c82614c2a565b600082019050919050565b6000613d4460148361438f565b9150613d4f82614c2d565b602082019050919050565b6000613d6760108361438f565b9150613d7282614c56565b602082019050919050565b6000613d8a60318361438f565b9150613d9582614c7f565b604082019050919050565b6000613dad601d8361438f565b9150613db882614cce565b602082019050919050565b6000613dd0601e8361438f565b9150613ddb82614cf7565b602082019050919050565b6000613df360138361438f565b9150613dfe82614d20565b602082019050919050565b613e128161452a565b82525050565b6000613e2482846138ed565b60148201915081905092915050565b6000613e3f8286613985565b9150613e4b8285613985565b9150613e5782846139b6565b9150819050949350505050565b6000613e6f82613d14565b9150819050919050565b6000602082019050613e8e60008301846138de565b92915050565b6000608082019050613ea960008301876138de565b613eb660208301866138de565b613ec36040830185613e09565b8181036060830152613ed58184613913565b905095945050505050565b6000604082019050613ef560008301856138de565b613f026020830184613e09565b9392505050565b6000602082019050613f1e6000830184613904565b92915050565b60006020820190508181036000830152613f3e818461394c565b905092915050565b60006020820190508181036000830152613f5f81613a35565b9050919050565b60006020820190508181036000830152613f7f81613a58565b9050919050565b60006020820190508181036000830152613f9f81613a7b565b9050919050565b60006020820190508181036000830152613fbf81613a9e565b9050919050565b60006020820190508181036000830152613fdf81613ac1565b9050919050565b60006020820190508181036000830152613fff81613ae4565b9050919050565b6000602082019050818103600083015261401f81613b07565b9050919050565b6000602082019050818103600083015261403f81613b2a565b9050919050565b6000602082019050818103600083015261405f81613b4d565b9050919050565b6000602082019050818103600083015261407f81613b70565b9050919050565b6000602082019050818103600083015261409f81613b93565b9050919050565b600060208201905081810360008301526140bf81613bb6565b9050919050565b600060208201905081810360008301526140df81613bd9565b9050919050565b600060208201905081810360008301526140ff81613bfc565b9050919050565b6000602082019050818103600083015261411f81613c1f565b9050919050565b6000602082019050818103600083015261413f81613c42565b9050919050565b6000602082019050818103600083015261415f81613c65565b9050919050565b6000602082019050818103600083015261417f81613c88565b9050919050565b6000602082019050818103600083015261419f81613cab565b9050919050565b600060208201905081810360008301526141bf81613cce565b9050919050565b600060208201905081810360008301526141df81613cf1565b9050919050565b600060208201905081810360008301526141ff81613d37565b9050919050565b6000602082019050818103600083015261421f81613d5a565b9050919050565b6000602082019050818103600083015261423f81613d7d565b9050919050565b6000602082019050818103600083015261425f81613da0565b9050919050565b6000602082019050818103600083015261427f81613dc3565b9050919050565b6000602082019050818103600083015261429f81613de6565b9050919050565b60006020820190506142bb6000830184613e09565b92915050565b60006142cb6142dc565b90506142d782826145a8565b919050565b6000604051905090565b600067ffffffffffffffff82111561430157614300614704565b5b61430a82614733565b9050602081019050919050565b600067ffffffffffffffff82111561433257614331614704565b5b61433b82614733565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006143b68261452a565b91506143c18361452a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143f6576143f5614677565b5b828201905092915050565b600061440c8261452a565b91506144178361452a565b925082614427576144266146a6565b5b828204905092915050565b600061443d8261452a565b91506144488361452a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561448157614480614677565b5b828202905092915050565b60006144978261452a565b91506144a28361452a565b9250828210156144b5576144b4614677565b5b828203905092915050565b60006144cb8261450a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614561578082015181840152602081019050614546565b83811115614570576000848401525b50505050565b6000600282049050600182168061458e57607f821691505b602082108114156145a2576145a16146d5565b5b50919050565b6145b182614733565b810181811067ffffffffffffffff821117156145d0576145cf614704565b5b80604052505050565b60006145e48261452a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561461757614616614677565b5b600182019050919050565b600061462d82614634565b9050919050565b600061463f82614744565b9050919050565b60006146518261452a565b915061465c8361452a565b92508261466c5761466b6146a6565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f596f7520617265206e6f742077686974656c6973746564210000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5075626c6963206d696e74206973206e6f742061637469766521000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4e6f6e2d6578697374656e742068756e74657220746f6b656e20676976656e21600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45786365656473206d696e7420616d6f756e74207065722077616c6c65742100600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f57686974656c697374206d696e74206973206e6f742061637469766521000000600082015250565b7f436f6e74726163742063616c6c7320617265206e6f7420616c6c6f7765640000600082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b614d52816144c0565b8114614d5d57600080fd5b50565b614d69816144d2565b8114614d7457600080fd5b50565b614d80816144de565b8114614d8b57600080fd5b50565b614d978161452a565b8114614da257600080fd5b5056fea2646970667358221220adf71f4782813c8362da14a98e95e9893bb06f68d6ea81a4b689e636b0fce0ad64736f6c63430008040033
Deployed ByteCode Sourcemap
43459:5520:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30281:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31226:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32785:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32308:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47934:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47729:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33535:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48042:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45857:457;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44414:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45786:65;;;;;;;;;;;;;:::i;:::-;;33945:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44154:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8003:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44813:280;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44093:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30920:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30650:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10902:103;;;;;;;;;;;;;:::i;:::-;;47826:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45237:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45717:61;;;;;;;;;;;;;:::i;:::-;;48266:271;;;;;;;;;;;;;:::i;:::-;;45099:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10251:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31395:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33078:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46932:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34201:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43658:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46320:604;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47255:358;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44533:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48157:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33304:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11160:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44368:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30281:305;30383:4;30435:25;30420:40;;;:11;:40;;;;:105;;;;30492:33;30477:48;;;:11;:48;;;;30420:105;:158;;;;30542:36;30566:11;30542:23;:36::i;:::-;30420:158;30400:178;;30281:305;;;:::o;31226:100::-;31280:13;31313:5;31306:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31226:100;:::o;32785:221::-;32861:7;32889:16;32897:7;32889;:16::i;:::-;32881:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32974:15;:24;32990:7;32974:24;;;;;;;;;;;;;;;;;;;;;32967:31;;32785:221;;;:::o;32308:411::-;32389:13;32405:23;32420:7;32405:14;:23::i;:::-;32389:39;;32453:5;32447:11;;:2;:11;;;;32439:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;32547:5;32531:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;32556:37;32573:5;32580:12;:10;:12::i;:::-;32556:16;:37::i;:::-;32531:62;32509:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;32690:21;32699:2;32703:7;32690:8;:21::i;:::-;32308:411;;;:::o;47934:102::-;10482:12;:10;:12::i;:::-;10471:23;;:7;:5;:7::i;:::-;:23;;;10463:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48020:10:::1;48008:9;:22;;;;;;;;;;;;:::i;:::-;;47934:102:::0;:::o;47729:91::-;47775:7;47798:16;:6;:14;:16::i;:::-;47791:23;;47729:91;:::o;33535:339::-;33730:41;33749:12;:10;:12::i;:::-;33763:7;33730:18;:41::i;:::-;33722:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;33838:28;33848:4;33854:2;33858:7;33838:9;:28::i;:::-;33535:339;;;:::o;48042:109::-;10482:12;:10;:12::i;:::-;10471:23;;:7;:5;:7::i;:::-;:23;;;10463:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48139:6:::1;48115:21;;:30;;;;;;;;;;;;;;;;;;48042:109:::0;:::o;45857:457::-;45940:11;45551:1;45537:11;:15;:52;;;;;44310:2;45556:11;:33;;45537:52;45529:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;44258:5;45648:11;45629:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;45621:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;45413:9:::1;45399:23;;:10;:23;;;45391:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;45979:18:::2;;;;;;;;;;;45971:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;46063:11;44215:9;46056:18;;;;:::i;:::-;46043:9;:31;;46035:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;44359:2;46140:11;46113:12;:24;46126:10;46113:24;;;;;;;;;;;;;;;;:38;;;;:::i;:::-;:64;;46105:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;46254:11;46226:12;:24;46239:10;46226:24;;;;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;46274:34;46284:10;46296:11;46274:9;:34::i;:::-;45857:457:::0;;:::o;44414:38::-;;;;;;;;;;;;;:::o;45786:65::-;10482:12;:10;:12::i;:::-;10471:23;;:7;:5;:7::i;:::-;:23;;;10463:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45833:10:::1;:8;:10::i;:::-;45786:65::o:0;33945:185::-;34083:39;34100:4;34106:2;34110:7;34083:39;;;;;;;;;;;;:16;:39::i;:::-;33945:185;;;:::o;44154:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8003:86::-;8050:4;8074:7;;;;;;;;;;;8067:14;;8003:86;:::o;44813:280::-;10482:12;:10;:12::i;:::-;10471:23;;:7;:5;:7::i;:::-;:23;;;10463:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44977:7:::1;44962:22;;:11;44970:2;44962:7;:11::i;:::-;:22;;;44986:16;;;;;;;;;;;;;;;;::::0;44954:49:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;45042:3;45014:13;:17;45028:2;45014:17;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;45060:27;45075:7;45084:2;45060:27;;;;;;;:::i;:::-;;;;;;;;44813:280:::0;;:::o;44093:56::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30920:239::-;30992:7;31012:13;31028:7;:16;31036:7;31028:16;;;;;;;;;;;;;;;;;;;;;31012:32;;31080:1;31063:19;;:5;:19;;;;31055:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31146:5;31139:12;;;30920:239;;;:::o;30650:208::-;30722:7;30767:1;30750:19;;:5;:19;;;;30742:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;30834:9;:16;30844:5;30834:16;;;;;;;;;;;;;;;;30827:23;;30650:208;;;:::o;10902:103::-;10482:12;:10;:12::i;:::-;10471:23;;:7;:5;:7::i;:::-;:23;;;10463:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10967:30:::1;10994:1;10967:18;:30::i;:::-;10902:103::o:0;47826:102::-;10482:12;:10;:12::i;:::-;10471:23;;:7;:5;:7::i;:::-;:23;;;10463:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47912:10:::1;47900:9;:22;;;;;;;;;;;;:::i;:::-;;47826:102:::0;:::o;45237:118::-;45307:7;45332:13;:17;45346:2;45332:17;;;;;;;;;;;;;;;;;;;;;45325:24;;45237:118;;;:::o;45717:61::-;10482:12;:10;:12::i;:::-;10471:23;;:7;:5;:7::i;:::-;:23;;;10463:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45762:8:::1;:6;:8::i;:::-;45717:61::o:0;48266:271::-;10482:12;:10;:12::i;:::-;10471:23;;:7;:5;:7::i;:::-;:23;;;10463:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48315:15:::1;48333:21;48315:39;;48379:1;48369:7;:11;48361:20;;;::::0;::::1;;48390:85;48408:42;48471:3;48464::::0;48454:7:::1;:13;;;;:::i;:::-;48453:21;;;;:::i;:::-;48390:9;:85::i;:::-;48490:41;48500:7;:5;:7::i;:::-;48509:21;48490:9;:41::i;:::-;10542:1;48266:271::o:0;45099:132::-;45168:4;45220:3;45191:33;;:13;:17;45205:2;45191:17;;;;;;;;;;;;;;;;;;;;;:33;;;;45183:42;;45099:132;;;:::o;10251:87::-;10297:7;10324:6;;;;;;;;;;;10317:13;;10251:87;:::o;31395:104::-;31451:13;31484:7;31477:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31395:104;:::o;33078:155::-;33173:52;33192:12;:10;:12::i;:::-;33206:8;33216;33173:18;:52::i;:::-;33078:155;;:::o;46932:107::-;10482:12;:10;:12::i;:::-;10471:23;;:7;:5;:7::i;:::-;:23;;;10463:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46999:34:::1;47009:10;47021:11;46999:9;:34::i;:::-;46932:107:::0;:::o;34201:328::-;34376:41;34395:12;:10;:12::i;:::-;34409:7;34376:18;:41::i;:::-;34368:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;34482:39;34496:4;34502:2;34506:7;34515:5;34482:13;:39::i;:::-;34201:328;;;;:::o;43658:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;46320:604::-;46426:11;45551:1;45537:11;:15;:52;;;;;44310:2;45556:11;:33;;45537:52;45529:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;44258:5;45648:11;45629:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;45621:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;45413:9:::1;45399:23;;:10;:23;;;45391:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;46465:21:::2;;;;;;;;;;;46457:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;46555:11;44215:9;46548:18;;;;:::i;:::-;46535:9;:31;;46527:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;44359:2;46632:11;46605:12;:24;46618:10;46605:24;;;;;;;;;;;;;;;;:38;;;;:::i;:::-;:64;;46597:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;46720:78;46739:5;;46720:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44018:66;46746:10;;46785;46768:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;46758:39;;;;;;46720:18;:78::i;:::-;46712:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;46864:11;46836:12;:24;46849:10;46836:24;;;;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;46884:34;46894:10;46906:11;46884:9;:34::i;:::-;46320:604:::0;;;;:::o;47255:358::-;47329:13;47359:17;47367:8;47359:7;:17::i;:::-;47351:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;47422:28;47453:10;:8;:10::i;:::-;47422:41;;47508:1;47483:14;47477:28;:32;:130;;;;;;;;;;;;;;;;;47545:14;47561:19;:8;:17;:19::i;:::-;47582:9;47528:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47477:130;47470:137;;;47255:358;;;:::o;44533:274::-;10482:12;:10;:12::i;:::-;10471:23;;:7;:5;:7::i;:::-;:23;;;10463:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44696:7:::1;44681:22;;:11;44689:2;44681:7;:11::i;:::-;:22;;;44705:16;;;;;;;;;;;;;;;;::::0;44673:49:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;44753:7;44733:13;:17;44747:2;44733:17;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;44774:25;44787:7;44796:2;44774:25;;;;;;;:::i;:::-;;;;;;;;44533:274:::0;;:::o;48157:103::-;10482:12;:10;:12::i;:::-;10471:23;;:7;:5;:7::i;:::-;:23;;;10463:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48248:6:::1;48227:18;;:27;;;;;;;;;;;;;;;;;;48157:103:::0;:::o;33304:164::-;33401:4;33425:18;:25;33444:5;33425:25;;;;;;;;;;;;;;;:35;33451:8;33425:35;;;;;;;;;;;;;;;;;;;;;;;;;33418:42;;33304:164;;;;:::o;11160:201::-;10482:12;:10;:12::i;:::-;10471:23;;:7;:5;:7::i;:::-;:23;;;10463:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11269:1:::1;11249:22;;:8;:22;;;;11241:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11325:28;11344:8;11325:18;:28::i;:::-;11160:201:::0;:::o;44368:41::-;;;;;;;;;;;;;:::o;23035:157::-;23120:4;23159:25;23144:40;;;:11;:40;;;;23137:47;;23035:157;;;:::o;36039:127::-;36104:4;36156:1;36128:30;;:7;:16;36136:7;36128:16;;;;;;;;;;;;;;;;;;;;;:30;;;;36121:37;;36039:127;;;:::o;6657:98::-;6710:7;6737:10;6730:17;;6657:98;:::o;40185:174::-;40287:2;40260:15;:24;40276:7;40260:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;40343:7;40339:2;40305:46;;40314:23;40329:7;40314:14;:23::i;:::-;40305:46;;;;;;;;;;;;40185:174;;:::o;3261:114::-;3326:7;3353;:14;;;3346:21;;3261:114;;;:::o;36333:348::-;36426:4;36451:16;36459:7;36451;:16::i;:::-;36443:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36527:13;36543:23;36558:7;36543:14;:23::i;:::-;36527:39;;36596:5;36585:16;;:7;:16;;;:51;;;;36629:7;36605:31;;:20;36617:7;36605:11;:20::i;:::-;:31;;;36585:51;:87;;;;36640:32;36657:5;36664:7;36640:16;:32::i;:::-;36585:87;36577:96;;;36333:348;;;;:::o;39442:625::-;39601:4;39574:31;;:23;39589:7;39574:14;:23::i;:::-;:31;;;39566:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;39680:1;39666:16;;:2;:16;;;;39658:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;39736:39;39757:4;39763:2;39767:7;39736:20;:39::i;:::-;39840:29;39857:1;39861:7;39840:8;:29::i;:::-;39901:1;39882:9;:15;39892:4;39882:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;39930:1;39913:9;:13;39923:2;39913:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;39961:2;39942:7;:16;39950:7;39942:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;40000:7;39996:2;39981:27;;39990:4;39981:27;;;;;;;;;;;;40021:38;40041:4;40047:2;40051:7;40021:19;:38::i;:::-;39442:625;;;:::o;47045:204::-;47125:9;47120:124;47144:11;47140:1;:15;47120:124;;;47171:18;:6;:16;:18::i;:::-;47198:38;47208:9;47219:16;:6;:14;:16::i;:::-;47198:9;:38::i;:::-;47157:3;;;;;:::i;:::-;;;;47120:124;;;;47045:204;;:::o;9062:120::-;8606:8;:6;:8::i;:::-;8598:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;9131:5:::1;9121:7;;:15;;;;;;;;;;;;;;;;;;9152:22;9161:12;:10;:12::i;:::-;9152:22;;;;;;:::i;:::-;;;;;;;;9062:120::o:0;11521:191::-;11595:16;11614:6;;;;;;;;;;;11595:25;;11640:8;11631:6;;:17;;;;;;;;;;;;;;;;;;11695:8;11664:40;;11685:8;11664:40;;;;;;;;;;;;11521:191;;:::o;8803:118::-;8329:8;:6;:8::i;:::-;8328:9;8320:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;8873:4:::1;8863:7;;:14;;;;;;;;;;;;;;;;;;8893:20;8900:12;:10;:12::i;:::-;8893:20;;;;;;:::i;:::-;;;;;;;;8803:118::o:0;48543:170::-;48613:12;48631:8;:13;;48652:7;48631:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48612:52;;;48679:7;48671:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;48543:170;;;:::o;40501:315::-;40656:8;40647:17;;:5;:17;;;;40639:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;40743:8;40705:18;:25;40724:5;40705:25;;;;;;;;;;;;;;;:35;40731:8;40705:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;40789:8;40767:41;;40782:5;40767:41;;;40799:8;40767:41;;;;;;:::i;:::-;;;;;;;;40501:315;;;:::o;35411:::-;35568:28;35578:4;35584:2;35588:7;35568:9;:28::i;:::-;35615:48;35638:4;35644:2;35648:7;35657:5;35615:22;:48::i;:::-;35607:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;35411:315;;;;:::o;923:190::-;1048:4;1101;1072:25;1085:5;1092:4;1072:12;:25::i;:::-;:33;1065:40;;923:190;;;;;:::o;47619:104::-;47679:13;47708:9;47701:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47619:104;:::o;4219:723::-;4275:13;4505:1;4496:5;:10;4492:53;;;4523:10;;;;;;;;;;;;;;;;;;;;;4492:53;4555:12;4570:5;4555:20;;4586:14;4611:78;4626:1;4618:4;:9;4611:78;;4644:8;;;;;:::i;:::-;;;;4675:2;4667:10;;;;;:::i;:::-;;;4611:78;;;4699:19;4731:6;4721:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4699:39;;4749:154;4765:1;4756:5;:10;4749:154;;4793:1;4783:11;;;;;:::i;:::-;;;4860:2;4852:5;:10;;;;:::i;:::-;4839:2;:24;;;;:::i;:::-;4826:39;;4809:6;4816;4809:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;4889:2;4880:11;;;;;:::i;:::-;;;4749:154;;;4927:6;4913:21;;;;;4219:723;;;;:::o;48719:257::-;8329:8;:6;:8::i;:::-;8328:9;8320:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;48876:23:::1;48891:7;48876:14;:23::i;:::-;48875:24;48901:10;;;;;;;;;;;;;;;;::::0;48867:45:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;48923;48950:4;48956:2;48960:7;48923:26;:45::i;:::-;48719:257:::0;;;:::o;43263:125::-;;;;:::o;3383:127::-;3490:1;3472:7;:14;;;:19;;;;;;;;;;;3383:127;:::o;37023:110::-;37099:26;37109:2;37113:7;37099:26;;;;;;;;;;;;:9;:26::i;:::-;37023:110;;:::o;41381:799::-;41536:4;41557:15;:2;:13;;;:15::i;:::-;41553:620;;;41609:2;41593:36;;;41630:12;:10;:12::i;:::-;41644:4;41650:7;41659:5;41593:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41589:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41852:1;41835:6;:13;:18;41831:272;;;41878:60;;;;;;;;;;:::i;:::-;;;;;;;;41831:272;42053:6;42047:13;42038:6;42034:2;42030:15;42023:38;41589:529;41726:41;;;41716:51;;;:6;:51;;;;41709:58;;;;;41553:620;42157:4;42150:11;;41381:799;;;;;;;:::o;1475:675::-;1558:7;1578:20;1601:4;1578:27;;1621:9;1616:497;1640:5;:12;1636:1;:16;1616:497;;;1674:20;1697:5;1703:1;1697:8;;;;;;;;;;;;;;;;;;;;;;1674:31;;1740:12;1724;:28;1720:382;;1867:42;1882:12;1896;1867:14;:42::i;:::-;1852:57;;1720:382;;;2044:42;2059:12;2073;2044:14;:42::i;:::-;2029:57;;1720:382;1616:497;1654:3;;;;;:::i;:::-;;;;1616:497;;;;2130:12;2123:19;;;1475:675;;;;:::o;42752:126::-;;;;:::o;37360:321::-;37490:18;37496:2;37500:7;37490:5;:18::i;:::-;37541:54;37572:1;37576:2;37580:7;37589:5;37541:22;:54::i;:::-;37519:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;37360:321;;;:::o;12952:326::-;13012:4;13269:1;13247:7;:19;;;:23;13240:30;;12952:326;;;:::o;2158:224::-;2226:13;2289:1;2283:4;2276:15;2318:1;2312:4;2305:15;2359:4;2353;2343:21;2334:30;;2261:114;;;;:::o;38017:439::-;38111:1;38097:16;;:2;:16;;;;38089:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;38170:16;38178:7;38170;:16::i;:::-;38169:17;38161:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;38232:45;38261:1;38265:2;38269:7;38232:20;:45::i;:::-;38307:1;38290:9;:13;38300:2;38290:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;38338:2;38319:7;:16;38327:7;38319:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38383:7;38379:2;38358:33;;38375:1;38358:33;;;;;;;;;;;;38404:44;38432:1;38436:2;38440:7;38404:19;:44::i;:::-;38017:439;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;434:5;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;753:5;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;869:367::-;942:8;952:6;1002:3;995:4;987:6;983:17;979:27;969:2;;1020:1;1017;1010:12;969:2;1056:6;1043:20;1033:30;;1086:18;1078:6;1075:30;1072:2;;;1118:1;1115;1108:12;1072:2;1155:4;1147:6;1143:17;1131:29;;1209:3;1201:4;1193:6;1189:17;1179:8;1175:32;1172:41;1169:2;;;1226:1;1223;1216:12;1169:2;959:277;;;;;:::o;1242:133::-;1285:5;1323:6;1310:20;1301:29;;1339:30;1363:5;1339:30;:::i;:::-;1291:84;;;;:::o;1381:137::-;1426:5;1464:6;1451:20;1442:29;;1480:32;1506:5;1480:32;:::i;:::-;1432:86;;;;:::o;1524:141::-;1580:5;1611:6;1605:13;1596:22;;1627:32;1653:5;1627:32;:::i;:::-;1586:79;;;;:::o;1684:271::-;1739:5;1788:3;1781:4;1773:6;1769:17;1765:27;1755:2;;1806:1;1803;1796:12;1755:2;1846:6;1833:20;1871:78;1945:3;1937:6;1930:4;1922:6;1918:17;1871:78;:::i;:::-;1862:87;;1745:210;;;;;:::o;1975:273::-;2031:5;2080:3;2073:4;2065:6;2061:17;2057:27;2047:2;;2098:1;2095;2088:12;2047:2;2138:6;2125:20;2163:79;2238:3;2230:6;2223:4;2215:6;2211:17;2163:79;:::i;:::-;2154:88;;2037:211;;;;;:::o;2254:139::-;2300:5;2338:6;2325:20;2316:29;;2354:33;2381:5;2354:33;:::i;:::-;2306:87;;;;:::o;2399:262::-;2458:6;2507:2;2495:9;2486:7;2482:23;2478:32;2475:2;;;2523:1;2520;2513:12;2475:2;2566:1;2591:53;2636:7;2627:6;2616:9;2612:22;2591:53;:::i;:::-;2581:63;;2537:117;2465:196;;;;:::o;2667:407::-;2735:6;2743;2792:2;2780:9;2771:7;2767:23;2763:32;2760:2;;;2808:1;2805;2798:12;2760:2;2851:1;2876:53;2921:7;2912:6;2901:9;2897:22;2876:53;:::i;:::-;2866:63;;2822:117;2978:2;3004:53;3049:7;3040:6;3029:9;3025:22;3004:53;:::i;:::-;2994:63;;2949:118;2750:324;;;;;:::o;3080:552::-;3157:6;3165;3173;3222:2;3210:9;3201:7;3197:23;3193:32;3190:2;;;3238:1;3235;3228:12;3190:2;3281:1;3306:53;3351:7;3342:6;3331:9;3327:22;3306:53;:::i;:::-;3296:63;;3252:117;3408:2;3434:53;3479:7;3470:6;3459:9;3455:22;3434:53;:::i;:::-;3424:63;;3379:118;3536:2;3562:53;3607:7;3598:6;3587:9;3583:22;3562:53;:::i;:::-;3552:63;;3507:118;3180:452;;;;;:::o;3638:809::-;3733:6;3741;3749;3757;3806:3;3794:9;3785:7;3781:23;3777:33;3774:2;;;3823:1;3820;3813:12;3774:2;3866:1;3891:53;3936:7;3927:6;3916:9;3912:22;3891:53;:::i;:::-;3881:63;;3837:117;3993:2;4019:53;4064:7;4055:6;4044:9;4040:22;4019:53;:::i;:::-;4009:63;;3964:118;4121:2;4147:53;4192:7;4183:6;4172:9;4168:22;4147:53;:::i;:::-;4137:63;;4092:118;4277:2;4266:9;4262:18;4249:32;4308:18;4300:6;4297:30;4294:2;;;4340:1;4337;4330:12;4294:2;4368:62;4422:7;4413:6;4402:9;4398:22;4368:62;:::i;:::-;4358:72;;4220:220;3764:683;;;;;;;:::o;4453:401::-;4518:6;4526;4575:2;4563:9;4554:7;4550:23;4546:32;4543:2;;;4591:1;4588;4581:12;4543:2;4634:1;4659:53;4704:7;4695:6;4684:9;4680:22;4659:53;:::i;:::-;4649:63;;4605:117;4761:2;4787:50;4829:7;4820:6;4809:9;4805:22;4787:50;:::i;:::-;4777:60;;4732:115;4533:321;;;;;:::o;4860:407::-;4928:6;4936;4985:2;4973:9;4964:7;4960:23;4956:32;4953:2;;;5001:1;4998;4991:12;4953:2;5044:1;5069:53;5114:7;5105:6;5094:9;5090:22;5069:53;:::i;:::-;5059:63;;5015:117;5171:2;5197:53;5242:7;5233:6;5222:9;5218:22;5197:53;:::i;:::-;5187:63;;5142:118;4943:324;;;;;:::o;5273:256::-;5329:6;5378:2;5366:9;5357:7;5353:23;5349:32;5346:2;;;5394:1;5391;5384:12;5346:2;5437:1;5462:50;5504:7;5495:6;5484:9;5480:22;5462:50;:::i;:::-;5452:60;;5408:114;5336:193;;;;:::o;5535:260::-;5593:6;5642:2;5630:9;5621:7;5617:23;5613:32;5610:2;;;5658:1;5655;5648:12;5610:2;5701:1;5726:52;5770:7;5761:6;5750:9;5746:22;5726:52;:::i;:::-;5716:62;;5672:116;5600:195;;;;:::o;5801:282::-;5870:6;5919:2;5907:9;5898:7;5894:23;5890:32;5887:2;;;5935:1;5932;5925:12;5887:2;5978:1;6003:63;6058:7;6049:6;6038:9;6034:22;6003:63;:::i;:::-;5993:73;;5949:127;5877:206;;;;:::o;6089:375::-;6158:6;6207:2;6195:9;6186:7;6182:23;6178:32;6175:2;;;6223:1;6220;6213:12;6175:2;6294:1;6283:9;6279:17;6266:31;6324:18;6316:6;6313:30;6310:2;;;6356:1;6353;6346:12;6310:2;6384:63;6439:7;6430:6;6419:9;6415:22;6384:63;:::i;:::-;6374:73;;6237:220;6165:299;;;;:::o;6470:262::-;6529:6;6578:2;6566:9;6557:7;6553:23;6549:32;6546:2;;;6594:1;6591;6584:12;6546:2;6637:1;6662:53;6707:7;6698:6;6687:9;6683:22;6662:53;:::i;:::-;6652:63;;6608:117;6536:196;;;;:::o;6738:570::-;6833:6;6841;6849;6898:2;6886:9;6877:7;6873:23;6869:32;6866:2;;;6914:1;6911;6904:12;6866:2;6957:1;6982:53;7027:7;7018:6;7007:9;7003:22;6982:53;:::i;:::-;6972:63;;6928:117;7112:2;7101:9;7097:18;7084:32;7143:18;7135:6;7132:30;7129:2;;;7175:1;7172;7165:12;7129:2;7211:80;7283:7;7274:6;7263:9;7259:22;7211:80;:::i;:::-;7193:98;;;;7055:246;6856:452;;;;;:::o;7314:118::-;7401:24;7419:5;7401:24;:::i;:::-;7396:3;7389:37;7379:53;;:::o;7438:157::-;7543:45;7563:24;7581:5;7563:24;:::i;:::-;7543:45;:::i;:::-;7538:3;7531:58;7521:74;;:::o;7601:109::-;7682:21;7697:5;7682:21;:::i;:::-;7677:3;7670:34;7660:50;;:::o;7716:360::-;7802:3;7830:38;7862:5;7830:38;:::i;:::-;7884:70;7947:6;7942:3;7884:70;:::i;:::-;7877:77;;7963:52;8008:6;8003:3;7996:4;7989:5;7985:16;7963:52;:::i;:::-;8040:29;8062:6;8040:29;:::i;:::-;8035:3;8031:39;8024:46;;7806:270;;;;;:::o;8082:364::-;8170:3;8198:39;8231:5;8198:39;:::i;:::-;8253:71;8317:6;8312:3;8253:71;:::i;:::-;8246:78;;8333:52;8378:6;8373:3;8366:4;8359:5;8355:16;8333:52;:::i;:::-;8410:29;8432:6;8410:29;:::i;:::-;8405:3;8401:39;8394:46;;8174:272;;;;;:::o;8452:377::-;8558:3;8586:39;8619:5;8586:39;:::i;:::-;8641:89;8723:6;8718:3;8641:89;:::i;:::-;8634:96;;8739:52;8784:6;8779:3;8772:4;8765:5;8761:16;8739:52;:::i;:::-;8816:6;8811:3;8807:16;8800:23;;8562:267;;;;;:::o;8859:845::-;8962:3;8999:5;8993:12;9028:36;9054:9;9028:36;:::i;:::-;9080:89;9162:6;9157:3;9080:89;:::i;:::-;9073:96;;9200:1;9189:9;9185:17;9216:1;9211:137;;;;9362:1;9357:341;;;;9178:520;;9211:137;9295:4;9291:9;9280;9276:25;9271:3;9264:38;9331:6;9326:3;9322:16;9315:23;;9211:137;;9357:341;9424:38;9456:5;9424:38;:::i;:::-;9484:1;9498:154;9512:6;9509:1;9506:13;9498:154;;;9586:7;9580:14;9576:1;9571:3;9567:11;9560:35;9636:1;9627:7;9623:15;9612:26;;9534:4;9531:1;9527:12;9522:17;;9498:154;;;9681:6;9676:3;9672:16;9665:23;;9364:334;;9178:520;;8966:738;;;;;;:::o;9710:366::-;9852:3;9873:67;9937:2;9932:3;9873:67;:::i;:::-;9866:74;;9949:93;10038:3;9949:93;:::i;:::-;10067:2;10062:3;10058:12;10051:19;;9856:220;;;:::o;10082:366::-;10224:3;10245:67;10309:2;10304:3;10245:67;:::i;:::-;10238:74;;10321:93;10410:3;10321:93;:::i;:::-;10439:2;10434:3;10430:12;10423:19;;10228:220;;;:::o;10454:366::-;10596:3;10617:67;10681:2;10676:3;10617:67;:::i;:::-;10610:74;;10693:93;10782:3;10693:93;:::i;:::-;10811:2;10806:3;10802:12;10795:19;;10600:220;;;:::o;10826:366::-;10968:3;10989:67;11053:2;11048:3;10989:67;:::i;:::-;10982:74;;11065:93;11154:3;11065:93;:::i;:::-;11183:2;11178:3;11174:12;11167:19;;10972:220;;;:::o;11198:366::-;11340:3;11361:67;11425:2;11420:3;11361:67;:::i;:::-;11354:74;;11437:93;11526:3;11437:93;:::i;:::-;11555:2;11550:3;11546:12;11539:19;;11344:220;;;:::o;11570:366::-;11712:3;11733:67;11797:2;11792:3;11733:67;:::i;:::-;11726:74;;11809:93;11898:3;11809:93;:::i;:::-;11927:2;11922:3;11918:12;11911:19;;11716:220;;;:::o;11942:366::-;12084:3;12105:67;12169:2;12164:3;12105:67;:::i;:::-;12098:74;;12181:93;12270:3;12181:93;:::i;:::-;12299:2;12294:3;12290:12;12283:19;;12088:220;;;:::o;12314:366::-;12456:3;12477:67;12541:2;12536:3;12477:67;:::i;:::-;12470:74;;12553:93;12642:3;12553:93;:::i;:::-;12671:2;12666:3;12662:12;12655:19;;12460:220;;;:::o;12686:366::-;12828:3;12849:67;12913:2;12908:3;12849:67;:::i;:::-;12842:74;;12925:93;13014:3;12925:93;:::i;:::-;13043:2;13038:3;13034:12;13027:19;;12832:220;;;:::o;13058:366::-;13200:3;13221:67;13285:2;13280:3;13221:67;:::i;:::-;13214:74;;13297:93;13386:3;13297:93;:::i;:::-;13415:2;13410:3;13406:12;13399:19;;13204:220;;;:::o;13430:366::-;13572:3;13593:67;13657:2;13652:3;13593:67;:::i;:::-;13586:74;;13669:93;13758:3;13669:93;:::i;:::-;13787:2;13782:3;13778:12;13771:19;;13576:220;;;:::o;13802:366::-;13944:3;13965:67;14029:2;14024:3;13965:67;:::i;:::-;13958:74;;14041:93;14130:3;14041:93;:::i;:::-;14159:2;14154:3;14150:12;14143:19;;13948:220;;;:::o;14174:366::-;14316:3;14337:67;14401:2;14396:3;14337:67;:::i;:::-;14330:74;;14413:93;14502:3;14413:93;:::i;:::-;14531:2;14526:3;14522:12;14515:19;;14320:220;;;:::o;14546:366::-;14688:3;14709:67;14773:2;14768:3;14709:67;:::i;:::-;14702:74;;14785:93;14874:3;14785:93;:::i;:::-;14903:2;14898:3;14894:12;14887:19;;14692:220;;;:::o;14918:366::-;15060:3;15081:67;15145:2;15140:3;15081:67;:::i;:::-;15074:74;;15157:93;15246:3;15157:93;:::i;:::-;15275:2;15270:3;15266:12;15259:19;;15064:220;;;:::o;15290:366::-;15432:3;15453:67;15517:2;15512:3;15453:67;:::i;:::-;15446:74;;15529:93;15618:3;15529:93;:::i;:::-;15647:2;15642:3;15638:12;15631:19;;15436:220;;;:::o;15662:366::-;15804:3;15825:67;15889:2;15884:3;15825:67;:::i;:::-;15818:74;;15901:93;15990:3;15901:93;:::i;:::-;16019:2;16014:3;16010:12;16003:19;;15808:220;;;:::o;16034:366::-;16176:3;16197:67;16261:2;16256:3;16197:67;:::i;:::-;16190:74;;16273:93;16362:3;16273:93;:::i;:::-;16391:2;16386:3;16382:12;16375:19;;16180:220;;;:::o;16406:366::-;16548:3;16569:67;16633:2;16628:3;16569:67;:::i;:::-;16562:74;;16645:93;16734:3;16645:93;:::i;:::-;16763:2;16758:3;16754:12;16747:19;;16552:220;;;:::o;16778:366::-;16920:3;16941:67;17005:2;17000:3;16941:67;:::i;:::-;16934:74;;17017:93;17106:3;17017:93;:::i;:::-;17135:2;17130:3;17126:12;17119:19;;16924:220;;;:::o;17150:366::-;17292:3;17313:67;17377:2;17372:3;17313:67;:::i;:::-;17306:74;;17389:93;17478:3;17389:93;:::i;:::-;17507:2;17502:3;17498:12;17491:19;;17296:220;;;:::o;17522:398::-;17681:3;17702:83;17783:1;17778:3;17702:83;:::i;:::-;17695:90;;17794:93;17883:3;17794:93;:::i;:::-;17912:1;17907:3;17903:11;17896:18;;17685:235;;;:::o;17926:366::-;18068:3;18089:67;18153:2;18148:3;18089:67;:::i;:::-;18082:74;;18165:93;18254:3;18165:93;:::i;:::-;18283:2;18278:3;18274:12;18267:19;;18072:220;;;:::o;18298:366::-;18440:3;18461:67;18525:2;18520:3;18461:67;:::i;:::-;18454:74;;18537:93;18626:3;18537:93;:::i;:::-;18655:2;18650:3;18646:12;18639:19;;18444:220;;;:::o;18670:366::-;18812:3;18833:67;18897:2;18892:3;18833:67;:::i;:::-;18826:74;;18909:93;18998:3;18909:93;:::i;:::-;19027:2;19022:3;19018:12;19011:19;;18816:220;;;:::o;19042:366::-;19184:3;19205:67;19269:2;19264:3;19205:67;:::i;:::-;19198:74;;19281:93;19370:3;19281:93;:::i;:::-;19399:2;19394:3;19390:12;19383:19;;19188:220;;;:::o;19414:366::-;19556:3;19577:67;19641:2;19636:3;19577:67;:::i;:::-;19570:74;;19653:93;19742:3;19653:93;:::i;:::-;19771:2;19766:3;19762:12;19755:19;;19560:220;;;:::o;19786:366::-;19928:3;19949:67;20013:2;20008:3;19949:67;:::i;:::-;19942:74;;20025:93;20114:3;20025:93;:::i;:::-;20143:2;20138:3;20134:12;20127:19;;19932:220;;;:::o;20158:118::-;20245:24;20263:5;20245:24;:::i;:::-;20240:3;20233:37;20223:53;;:::o;20282:256::-;20394:3;20409:75;20480:3;20471:6;20409:75;:::i;:::-;20509:2;20504:3;20500:12;20493:19;;20529:3;20522:10;;20398:140;;;;:::o;20544:589::-;20769:3;20791:95;20882:3;20873:6;20791:95;:::i;:::-;20784:102;;20903:95;20994:3;20985:6;20903:95;:::i;:::-;20896:102;;21015:92;21103:3;21094:6;21015:92;:::i;:::-;21008:99;;21124:3;21117:10;;20773:360;;;;;;:::o;21139:379::-;21323:3;21345:147;21488:3;21345:147;:::i;:::-;21338:154;;21509:3;21502:10;;21327:191;;;:::o;21524:222::-;21617:4;21655:2;21644:9;21640:18;21632:26;;21668:71;21736:1;21725:9;21721:17;21712:6;21668:71;:::i;:::-;21622:124;;;;:::o;21752:640::-;21947:4;21985:3;21974:9;21970:19;21962:27;;21999:71;22067:1;22056:9;22052:17;22043:6;21999:71;:::i;:::-;22080:72;22148:2;22137:9;22133:18;22124:6;22080:72;:::i;:::-;22162;22230:2;22219:9;22215:18;22206:6;22162:72;:::i;:::-;22281:9;22275:4;22271:20;22266:2;22255:9;22251:18;22244:48;22309:76;22380:4;22371:6;22309:76;:::i;:::-;22301:84;;21952:440;;;;;;;:::o;22398:332::-;22519:4;22557:2;22546:9;22542:18;22534:26;;22570:71;22638:1;22627:9;22623:17;22614:6;22570:71;:::i;:::-;22651:72;22719:2;22708:9;22704:18;22695:6;22651:72;:::i;:::-;22524:206;;;;;:::o;22736:210::-;22823:4;22861:2;22850:9;22846:18;22838:26;;22874:65;22936:1;22925:9;22921:17;22912:6;22874:65;:::i;:::-;22828:118;;;;:::o;22952:313::-;23065:4;23103:2;23092:9;23088:18;23080:26;;23152:9;23146:4;23142:20;23138:1;23127:9;23123:17;23116:47;23180:78;23253:4;23244:6;23180:78;:::i;:::-;23172:86;;23070:195;;;;:::o;23271:419::-;23437:4;23475:2;23464:9;23460:18;23452:26;;23524:9;23518:4;23514:20;23510:1;23499:9;23495:17;23488:47;23552:131;23678:4;23552:131;:::i;:::-;23544:139;;23442:248;;;:::o;23696:419::-;23862:4;23900:2;23889:9;23885:18;23877:26;;23949:9;23943:4;23939:20;23935:1;23924:9;23920:17;23913:47;23977:131;24103:4;23977:131;:::i;:::-;23969:139;;23867:248;;;:::o;24121:419::-;24287:4;24325:2;24314:9;24310:18;24302:26;;24374:9;24368:4;24364:20;24360:1;24349:9;24345:17;24338:47;24402:131;24528:4;24402:131;:::i;:::-;24394:139;;24292:248;;;:::o;24546:419::-;24712:4;24750:2;24739:9;24735:18;24727:26;;24799:9;24793:4;24789:20;24785:1;24774:9;24770:17;24763:47;24827:131;24953:4;24827:131;:::i;:::-;24819:139;;24717:248;;;:::o;24971:419::-;25137:4;25175:2;25164:9;25160:18;25152:26;;25224:9;25218:4;25214:20;25210:1;25199:9;25195:17;25188:47;25252:131;25378:4;25252:131;:::i;:::-;25244:139;;25142:248;;;:::o;25396:419::-;25562:4;25600:2;25589:9;25585:18;25577:26;;25649:9;25643:4;25639:20;25635:1;25624:9;25620:17;25613:47;25677:131;25803:4;25677:131;:::i;:::-;25669:139;;25567:248;;;:::o;25821:419::-;25987:4;26025:2;26014:9;26010:18;26002:26;;26074:9;26068:4;26064:20;26060:1;26049:9;26045:17;26038:47;26102:131;26228:4;26102:131;:::i;:::-;26094:139;;25992:248;;;:::o;26246:419::-;26412:4;26450:2;26439:9;26435:18;26427:26;;26499:9;26493:4;26489:20;26485:1;26474:9;26470:17;26463:47;26527:131;26653:4;26527:131;:::i;:::-;26519:139;;26417:248;;;:::o;26671:419::-;26837:4;26875:2;26864:9;26860:18;26852:26;;26924:9;26918:4;26914:20;26910:1;26899:9;26895:17;26888:47;26952:131;27078:4;26952:131;:::i;:::-;26944:139;;26842:248;;;:::o;27096:419::-;27262:4;27300:2;27289:9;27285:18;27277:26;;27349:9;27343:4;27339:20;27335:1;27324:9;27320:17;27313:47;27377:131;27503:4;27377:131;:::i;:::-;27369:139;;27267:248;;;:::o;27521:419::-;27687:4;27725:2;27714:9;27710:18;27702:26;;27774:9;27768:4;27764:20;27760:1;27749:9;27745:17;27738:47;27802:131;27928:4;27802:131;:::i;:::-;27794:139;;27692:248;;;:::o;27946:419::-;28112:4;28150:2;28139:9;28135:18;28127:26;;28199:9;28193:4;28189:20;28185:1;28174:9;28170:17;28163:47;28227:131;28353:4;28227:131;:::i;:::-;28219:139;;28117:248;;;:::o;28371:419::-;28537:4;28575:2;28564:9;28560:18;28552:26;;28624:9;28618:4;28614:20;28610:1;28599:9;28595:17;28588:47;28652:131;28778:4;28652:131;:::i;:::-;28644:139;;28542:248;;;:::o;28796:419::-;28962:4;29000:2;28989:9;28985:18;28977:26;;29049:9;29043:4;29039:20;29035:1;29024:9;29020:17;29013:47;29077:131;29203:4;29077:131;:::i;:::-;29069:139;;28967:248;;;:::o;29221:419::-;29387:4;29425:2;29414:9;29410:18;29402:26;;29474:9;29468:4;29464:20;29460:1;29449:9;29445:17;29438:47;29502:131;29628:4;29502:131;:::i;:::-;29494:139;;29392:248;;;:::o;29646:419::-;29812:4;29850:2;29839:9;29835:18;29827:26;;29899:9;29893:4;29889:20;29885:1;29874:9;29870:17;29863:47;29927:131;30053:4;29927:131;:::i;:::-;29919:139;;29817:248;;;:::o;30071:419::-;30237:4;30275:2;30264:9;30260:18;30252:26;;30324:9;30318:4;30314:20;30310:1;30299:9;30295:17;30288:47;30352:131;30478:4;30352:131;:::i;:::-;30344:139;;30242:248;;;:::o;30496:419::-;30662:4;30700:2;30689:9;30685:18;30677:26;;30749:9;30743:4;30739:20;30735:1;30724:9;30720:17;30713:47;30777:131;30903:4;30777:131;:::i;:::-;30769:139;;30667:248;;;:::o;30921:419::-;31087:4;31125:2;31114:9;31110:18;31102:26;;31174:9;31168:4;31164:20;31160:1;31149:9;31145:17;31138:47;31202:131;31328:4;31202:131;:::i;:::-;31194:139;;31092:248;;;:::o;31346:419::-;31512:4;31550:2;31539:9;31535:18;31527:26;;31599:9;31593:4;31589:20;31585:1;31574:9;31570:17;31563:47;31627:131;31753:4;31627:131;:::i;:::-;31619:139;;31517:248;;;:::o;31771:419::-;31937:4;31975:2;31964:9;31960:18;31952:26;;32024:9;32018:4;32014:20;32010:1;31999:9;31995:17;31988:47;32052:131;32178:4;32052:131;:::i;:::-;32044:139;;31942:248;;;:::o;32196:419::-;32362:4;32400:2;32389:9;32385:18;32377:26;;32449:9;32443:4;32439:20;32435:1;32424:9;32420:17;32413:47;32477:131;32603:4;32477:131;:::i;:::-;32469:139;;32367:248;;;:::o;32621:419::-;32787:4;32825:2;32814:9;32810:18;32802:26;;32874:9;32868:4;32864:20;32860:1;32849:9;32845:17;32838:47;32902:131;33028:4;32902:131;:::i;:::-;32894:139;;32792:248;;;:::o;33046:419::-;33212:4;33250:2;33239:9;33235:18;33227:26;;33299:9;33293:4;33289:20;33285:1;33274:9;33270:17;33263:47;33327:131;33453:4;33327:131;:::i;:::-;33319:139;;33217:248;;;:::o;33471:419::-;33637:4;33675:2;33664:9;33660:18;33652:26;;33724:9;33718:4;33714:20;33710:1;33699:9;33695:17;33688:47;33752:131;33878:4;33752:131;:::i;:::-;33744:139;;33642:248;;;:::o;33896:419::-;34062:4;34100:2;34089:9;34085:18;34077:26;;34149:9;34143:4;34139:20;34135:1;34124:9;34120:17;34113:47;34177:131;34303:4;34177:131;:::i;:::-;34169:139;;34067:248;;;:::o;34321:419::-;34487:4;34525:2;34514:9;34510:18;34502:26;;34574:9;34568:4;34564:20;34560:1;34549:9;34545:17;34538:47;34602:131;34728:4;34602:131;:::i;:::-;34594:139;;34492:248;;;:::o;34746:222::-;34839:4;34877:2;34866:9;34862:18;34854:26;;34890:71;34958:1;34947:9;34943:17;34934:6;34890:71;:::i;:::-;34844:124;;;;:::o;34974:129::-;35008:6;35035:20;;:::i;:::-;35025:30;;35064:33;35092:4;35084:6;35064:33;:::i;:::-;35015:88;;;:::o;35109:75::-;35142:6;35175:2;35169:9;35159:19;;35149:35;:::o;35190:307::-;35251:4;35341:18;35333:6;35330:30;35327:2;;;35363:18;;:::i;:::-;35327:2;35401:29;35423:6;35401:29;:::i;:::-;35393:37;;35485:4;35479;35475:15;35467:23;;35256:241;;;:::o;35503:308::-;35565:4;35655:18;35647:6;35644:30;35641:2;;;35677:18;;:::i;:::-;35641:2;35715:29;35737:6;35715:29;:::i;:::-;35707:37;;35799:4;35793;35789:15;35781:23;;35570:241;;;:::o;35817:141::-;35866:4;35889:3;35881:11;;35912:3;35909:1;35902:14;35946:4;35943:1;35933:18;35925:26;;35871:87;;;:::o;35964:98::-;36015:6;36049:5;36043:12;36033:22;;36022:40;;;:::o;36068:99::-;36120:6;36154:5;36148:12;36138:22;;36127:40;;;:::o;36173:168::-;36256:11;36290:6;36285:3;36278:19;36330:4;36325:3;36321:14;36306:29;;36268:73;;;;:::o;36347:147::-;36448:11;36485:3;36470:18;;36460:34;;;;:::o;36500:169::-;36584:11;36618:6;36613:3;36606:19;36658:4;36653:3;36649:14;36634:29;;36596:73;;;;:::o;36675:148::-;36777:11;36814:3;36799:18;;36789:34;;;;:::o;36829:305::-;36869:3;36888:20;36906:1;36888:20;:::i;:::-;36883:25;;36922:20;36940:1;36922:20;:::i;:::-;36917:25;;37076:1;37008:66;37004:74;37001:1;36998:81;36995:2;;;37082:18;;:::i;:::-;36995:2;37126:1;37123;37119:9;37112:16;;36873:261;;;;:::o;37140:185::-;37180:1;37197:20;37215:1;37197:20;:::i;:::-;37192:25;;37231:20;37249:1;37231:20;:::i;:::-;37226:25;;37270:1;37260:2;;37275:18;;:::i;:::-;37260:2;37317:1;37314;37310:9;37305:14;;37182:143;;;;:::o;37331:348::-;37371:7;37394:20;37412:1;37394:20;:::i;:::-;37389:25;;37428:20;37446:1;37428:20;:::i;:::-;37423:25;;37616:1;37548:66;37544:74;37541:1;37538:81;37533:1;37526:9;37519:17;37515:105;37512:2;;;37623:18;;:::i;:::-;37512:2;37671:1;37668;37664:9;37653:20;;37379:300;;;;:::o;37685:191::-;37725:4;37745:20;37763:1;37745:20;:::i;:::-;37740:25;;37779:20;37797:1;37779:20;:::i;:::-;37774:25;;37818:1;37815;37812:8;37809:2;;;37823:18;;:::i;:::-;37809:2;37868:1;37865;37861:9;37853:17;;37730:146;;;;:::o;37882:96::-;37919:7;37948:24;37966:5;37948:24;:::i;:::-;37937:35;;37927:51;;;:::o;37984:90::-;38018:7;38061:5;38054:13;38047:21;38036:32;;38026:48;;;:::o;38080:149::-;38116:7;38156:66;38149:5;38145:78;38134:89;;38124:105;;;:::o;38235:126::-;38272:7;38312:42;38305:5;38301:54;38290:65;;38280:81;;;:::o;38367:77::-;38404:7;38433:5;38422:16;;38412:32;;;:::o;38450:154::-;38534:6;38529:3;38524;38511:30;38596:1;38587:6;38582:3;38578:16;38571:27;38501:103;;;:::o;38610:307::-;38678:1;38688:113;38702:6;38699:1;38696:13;38688:113;;;38787:1;38782:3;38778:11;38772:18;38768:1;38763:3;38759:11;38752:39;38724:2;38721:1;38717:10;38712:15;;38688:113;;;38819:6;38816:1;38813:13;38810:2;;;38899:1;38890:6;38885:3;38881:16;38874:27;38810:2;38659:258;;;;:::o;38923:320::-;38967:6;39004:1;38998:4;38994:12;38984:22;;39051:1;39045:4;39041:12;39072:18;39062:2;;39128:4;39120:6;39116:17;39106:27;;39062:2;39190;39182:6;39179:14;39159:18;39156:38;39153:2;;;39209:18;;:::i;:::-;39153:2;38974:269;;;;:::o;39249:281::-;39332:27;39354:4;39332:27;:::i;:::-;39324:6;39320:40;39462:6;39450:10;39447:22;39426:18;39414:10;39411:34;39408:62;39405:2;;;39473:18;;:::i;:::-;39405:2;39513:10;39509:2;39502:22;39292:238;;;:::o;39536:233::-;39575:3;39598:24;39616:5;39598:24;:::i;:::-;39589:33;;39644:66;39637:5;39634:77;39631:2;;;39714:18;;:::i;:::-;39631:2;39761:1;39754:5;39750:13;39743:20;;39579:190;;;:::o;39775:100::-;39814:7;39843:26;39863:5;39843:26;:::i;:::-;39832:37;;39822:53;;;:::o;39881:94::-;39920:7;39949:20;39963:5;39949:20;:::i;:::-;39938:31;;39928:47;;;:::o;39981:176::-;40013:1;40030:20;40048:1;40030:20;:::i;:::-;40025:25;;40064:20;40082:1;40064:20;:::i;:::-;40059:25;;40103:1;40093:2;;40108:18;;:::i;:::-;40093:2;40149:1;40146;40142:9;40137:14;;40015:142;;;;:::o;40163:180::-;40211:77;40208:1;40201:88;40308:4;40305:1;40298:15;40332:4;40329:1;40322:15;40349:180;40397:77;40394:1;40387:88;40494:4;40491:1;40484:15;40518:4;40515:1;40508:15;40535:180;40583:77;40580:1;40573:88;40680:4;40677:1;40670:15;40704:4;40701:1;40694:15;40721:180;40769:77;40766:1;40759:88;40866:4;40863:1;40856:15;40890:4;40887:1;40880:15;40907:102;40948:6;40999:2;40995:7;40990:2;40983:5;40979:14;40975:28;40965:38;;40955:54;;;:::o;41015:94::-;41048:8;41096:5;41092:2;41088:14;41067:35;;41057:52;;;:::o;41115:170::-;41255:22;41251:1;41243:6;41239:14;41232:46;41221:64;:::o;41291:237::-;41431:34;41427:1;41419:6;41415:14;41408:58;41500:20;41495:2;41487:6;41483:15;41476:45;41397:131;:::o;41534:225::-;41674:34;41670:1;41662:6;41658:14;41651:58;41743:8;41738:2;41730:6;41726:15;41719:33;41640:119;:::o;41765:224::-;41905:34;41901:1;41893:6;41889:14;41882:58;41974:7;41969:2;41961:6;41957:15;41950:32;41871:118;:::o;41995:178::-;42135:30;42131:1;42123:6;42119:14;42112:54;42101:72;:::o;42179:170::-;42319:22;42315:1;42307:6;42303:14;42296:46;42285:64;:::o;42355:174::-;42495:26;42491:1;42483:6;42479:14;42472:50;42461:68;:::o;42535:223::-;42675:34;42671:1;42663:6;42659:14;42652:58;42744:6;42739:2;42731:6;42727:15;42720:31;42641:117;:::o;42764:175::-;42904:27;42900:1;42892:6;42888:14;42881:51;42870:69;:::o;42945:176::-;43085:28;43081:1;43073:6;43069:14;43062:52;43051:70;:::o;43127:231::-;43267:34;43263:1;43255:6;43251:14;43244:58;43336:14;43331:2;43323:6;43319:15;43312:39;43233:125;:::o;43364:182::-;43504:34;43500:1;43492:6;43488:14;43481:58;43470:76;:::o;43552:166::-;43692:18;43688:1;43680:6;43676:14;43669:42;43658:60;:::o;43724:243::-;43864:34;43860:1;43852:6;43848:14;43841:58;43933:26;43928:2;43920:6;43916:15;43909:51;43830:137;:::o;43973:229::-;44113:34;44109:1;44101:6;44097:14;44090:58;44182:12;44177:2;44169:6;44165:15;44158:37;44079:123;:::o;44208:228::-;44348:34;44344:1;44336:6;44332:14;44325:58;44417:11;44412:2;44404:6;44400:15;44393:36;44314:122;:::o;44442:182::-;44582:34;44578:1;44570:6;44566:14;44559:58;44548:76;:::o;44630:231::-;44770:34;44766:1;44758:6;44754:14;44747:58;44839:14;44834:2;44826:6;44822:15;44815:39;44736:125;:::o;44867:182::-;45007:34;45003:1;44995:6;44991:14;44984:58;44973:76;:::o;45055:181::-;45195:33;45191:1;45183:6;45179:14;45172:57;45161:75;:::o;45242:220::-;45382:34;45378:1;45370:6;45366:14;45359:58;45451:3;45446:2;45438:6;45434:15;45427:28;45348:114;:::o;45468:::-;45574:8;:::o;45588:170::-;45728:22;45724:1;45716:6;45712:14;45705:46;45694:64;:::o;45764:166::-;45904:18;45900:1;45892:6;45888:14;45881:42;45870:60;:::o;45936:236::-;46076:34;46072:1;46064:6;46060:14;46053:58;46145:19;46140:2;46132:6;46128:15;46121:44;46042:130;:::o;46178:179::-;46318:31;46314:1;46306:6;46302:14;46295:55;46284:73;:::o;46363:180::-;46503:32;46499:1;46491:6;46487:14;46480:56;46469:74;:::o;46549:169::-;46689:21;46685:1;46677:6;46673:14;46666:45;46655:63;:::o;46724:122::-;46797:24;46815:5;46797:24;:::i;:::-;46790:5;46787:35;46777:2;;46836:1;46833;46826:12;46777:2;46767:79;:::o;46852:116::-;46922:21;46937:5;46922:21;:::i;:::-;46915:5;46912:32;46902:2;;46958:1;46955;46948:12;46902:2;46892:76;:::o;46974:120::-;47046:23;47063:5;47046:23;:::i;:::-;47039:5;47036:34;47026:2;;47084:1;47081;47074:12;47026:2;47016:78;:::o;47100:122::-;47173:24;47191:5;47173:24;:::i;:::-;47166:5;47163:35;47153:2;;47212:1;47209;47202:12;47153:2;47143:79;:::o
Swarm Source
ipfs://adf71f4782813c8362da14a98e95e9893bb06f68d6ea81a4b689e636b0fce0ad