ERC-721
Overview
Max Total Supply
1,311 TWF!
Holders
212
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
9 TWF!Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
TWF
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-29 */ // File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol // OpenZeppelin Contracts v4.4.1 (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 = keccak256(abi.encodePacked(computedHash, proofElement)); } else { // Hash(current element of the proof + current computed hash) computedHash = keccak256(abi.encodePacked(proofElement, computedHash)); } } return computedHash; } } // 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 v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Pausable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Pausable.sol) pragma solidity ^0.8.0; /** * @dev ERC721 token with pausable token transfers, minting and burning. * * Useful for scenarios such as preventing trades until the end of an evaluation * period, or having an emergency switch for freezing all token transfers in the * event of a large bug. */ abstract contract ERC721Pausable is ERC721, Pausable { /** * @dev See {ERC721-_beforeTokenTransfer}. * * Requirements: * * - the contract must not be paused. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); require(!paused(), "ERC721Pausable: token transfer while paused"); } } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Burnable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Burnable.sol) pragma solidity ^0.8.0; /** * @title ERC721 Burnable Token * @dev ERC721 Token that can be irreversibly burned (destroyed). */ abstract contract ERC721Burnable is Context, ERC721 { /** * @dev Burns `tokenId`. See {ERC721-_burn}. * * Requirements: * * - The caller must own `tokenId` or be an approved operator. */ function burn(uint256 tokenId) public virtual { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved"); _burn(tokenId); } } // File: twf2.sol pragma solidity ^0.8.0; contract TWF is ERC721, Ownable, ERC721Burnable, ERC721Pausable { uint256 private _tokenIdTracker; uint256 public constant MAX_ELEMENTS = 9999; uint256 public constant PRESALE_ELEMENTS = 9999; uint256 public constant PRESALE_PRICE = 0.059 ether; uint256 public constant PRICE = 0.069 ether; uint256 public constant MAX_BY_MINT = 5; uint256 public constant maxMintPreSale = 5; string public baseTokenURI; address public withdrawAddress; bytes32 public merkleRoot; mapping(address => uint256) public whitelistClaimed; bool public publicSaleOpen; event CreateItem(uint256 indexed id); event PublicSaleStarted(bool started); constructor() ERC721("Trees With Faces", "TWF!") { pause(true); setWithdrawAddress(0xA1d34Fd7c675d95d2d03Fb3576f9f0D2DC8239eF); } modifier saleIsOpen { require(_tokenIdTracker <= MAX_ELEMENTS, "Sale end"); if (_msgSender() != owner()) { require(!paused(), "Pausable: paused"); } _; } modifier noContract() { address account = msg.sender; require(account == tx.origin, "Caller is a contract"); require(account.code.length == 0, "Caller is a contract"); _; } function totalSupply() public view returns (uint256) { return _tokenIdTracker; } function setPublicSale(bool val) public onlyOwner { publicSaleOpen = val; emit PublicSaleStarted(val); } function mint(uint256 _count) public payable saleIsOpen noContract { uint256 total = totalSupply(); require(publicSaleOpen, "Public sale not open yet"); require(total + _count <= MAX_ELEMENTS, "Max limit"); require(_count <= MAX_BY_MINT, "Exceeds number"); require(msg.value == PRICE * _count, "Value is over or under price."); for (uint256 i = 0; i < _count; i++) { _mintAnElement(msg.sender); } } function presaleMint(uint256 _count, bytes32[] calldata _proof) public payable saleIsOpen noContract { uint256 total = totalSupply(); require(msg.value == PRESALE_PRICE * _count, "Value is over or under price."); require(total + _count <= PRESALE_ELEMENTS, "Max limit"); require(verifySender(_proof), "Sender is not whitelisted"); require(canMintAmount(_count), "Sender max presale mint amount already met"); whitelistClaimed[msg.sender] += _count; for (uint256 i = 0; i < _count; i++) { _mintAnElement(msg.sender); } } function ownerMint(uint256 _count) public onlyOwner { uint256 total = totalSupply(); require(total + _count <= MAX_ELEMENTS, "Sale end"); for (uint256 i = 0; i < _count; i++) { _mintAnElement(msg.sender); } } function _mintAnElement(address _to) private { uint id = totalSupply(); _tokenIdTracker += 1; _mint(_to, id); emit CreateItem(id); } function canMintAmount(uint256 _count) public view returns (bool) { return whitelistClaimed[msg.sender] + _count <= maxMintPreSale; } function setWhitelistMerkleRoot(bytes32 _merkleRoot) external onlyOwner { merkleRoot = _merkleRoot; } function verifySender(bytes32[] calldata proof) public view returns (bool) { return _verify(proof, _hash(msg.sender)); } function _verify(bytes32[] calldata proof, bytes32 addressHash) internal view returns (bool) { return MerkleProof.verify(proof, merkleRoot, addressHash); } function _hash(address _address) internal pure returns (bytes32) { return keccak256(abi.encodePacked(_address)); } function _baseURI() internal view virtual override returns (string memory) { return baseTokenURI; } function setBaseURI(string memory baseURI) public onlyOwner { baseTokenURI = baseURI; } function pause(bool val) public onlyOwner { if (val == true) { _pause(); return; } _unpause(); } function withdrawAll() public onlyOwner { uint256 balance = address(this).balance; require(balance > 0); _withdraw(withdrawAddress, balance); } function setWithdrawAddress(address _withdrawAddress) public onlyOwner { withdrawAddress = _withdrawAddress; } 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 virtual override(ERC721, ERC721Pausable) { super._beforeTokenTransfer(from, to, tokenId); } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721) returns (bool) { return super.supportsInterface(interfaceId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"CreateItem","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":false,"internalType":"bool","name":"started","type":"bool"}],"name":"PublicSaleStarted","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":[],"name":"MAX_BY_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_ELEMENTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRESALE_ELEMENTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRESALE_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"canMintAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintPreSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","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":"_count","type":"uint256"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"presaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicSaleOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"setPublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setWhitelistMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_withdrawAddress","type":"address"}],"name":"setWithdrawAddress","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":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"verifySender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040518060400160405280601081526020017f54726565732057697468204661636573000000000000000000000000000000008152506040518060400160405280600481526020017f545746210000000000000000000000000000000000000000000000000000000081525081600090805190602001906200009692919062000542565b508060019080519060200190620000af92919062000542565b505050620000d2620000c66200012a60201b60201c565b6200013260201b60201c565b6000600660146101000a81548160ff021916908315150217905550620000ff6001620001f860201b60201c565b6200012473a1d34fd7c675d95d2d03fb3576f9f0d2dc8239ef620002bf60201b60201c565b62000820565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002086200012a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200022e6200039260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000287576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200027e90620006d9565b60405180910390fd5b600115158115151415620002ab57620002a5620003bc60201b60201c565b620002bc565b620002bb6200047460201b60201c565b5b50565b620002cf6200012a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002f56200039260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200034e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200034590620006d9565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620003cc6200052b60201b60201c565b156200040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200040690620006b7565b60405180910390fd5b6001600660146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586200045b6200012a60201b60201c565b6040516200046a919062000678565b60405180910390a1565b620004846200052b60201b60201c565b620004c6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004bd9062000695565b60405180910390fd5b6000600660146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa620005126200012a60201b60201c565b60405162000521919062000678565b60405180910390a1565b6000600660149054906101000a900460ff16905090565b828054620005509062000740565b90600052602060002090601f016020900481019282620005745760008555620005c0565b82601f106200058f57805160ff1916838001178555620005c0565b82800160010185558215620005c0579182015b82811115620005bf578251825591602001919060010190620005a2565b5b509050620005cf9190620005d3565b5090565b5b80821115620005ee576000816000905550600101620005d4565b5090565b620005fd816200070c565b82525050565b600062000612601483620006fb565b91506200061f82620007a5565b602082019050919050565b600062000639601083620006fb565b91506200064682620007ce565b602082019050919050565b600062000660602083620006fb565b91506200066d82620007f7565b602082019050919050565b60006020820190506200068f6000830184620005f2565b92915050565b60006020820190508181036000830152620006b08162000603565b9050919050565b60006020820190508181036000830152620006d2816200062a565b9050919050565b60006020820190508181036000830152620006f48162000651565b9050919050565b600082825260208201905092915050565b6000620007198262000720565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060028204905060018216806200075957607f821691505b6020821081141562000770576200076f62000776565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b614e5b80620008306000396000f3fe6080604052600436106102455760003560e01c806370a0823111610139578063b88d4fde116100b6578063db4bec441161007a578063db4bec441461085c578063e3e1e8ef14610899578063e985e9c5146108b5578063f19e75d4146108f2578063f2fde38b1461091b578063f9e237991461094457610245565b8063b88d4fde14610777578063bd32fb66146107a0578063c0cf3f41146107c9578063c87b56dd146107f4578063d547cfb71461083157610245565b80638da5cb5b116100fd5780638da5cb5b1461069f57806395d89b41146106ca578063a0712d68146106f5578063a22cb46514610711578063b0cfbf161461073a57610245565b806370a08231146105de578063715018a61461061b578063853828b6146106325780638ad5de28146106495780638d859f3e1461067457610245565b80633502a716116101c75780635aca1bb61161018b5780635aca1bb6146104f75780635c975abb1461052057806362dc6e211461054b5780636352211e146105765780636a5da9ee146105b357610245565b80633502a716146104285780633ab1a4941461045357806342842e0e1461047c57806342966c68146104a557806355f804b3146104ce57610245565b8063095ea7b31161020e578063095ea7b3146103555780631581b6001461037e57806318160ddd146103a957806323b872dd146103d45780632eb4a7ab146103fd57610245565b80629204e91461024a57806301ffc9a71461028757806302329a29146102c457806306fdde03146102ed578063081812fc14610318575b600080fd5b34801561025657600080fd5b50610271600480360381019061026c91906135fc565b61096f565b60405161027e9190613de1565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a991906136a3565b61098c565b6040516102bb9190613de1565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e69190613649565b61099e565b005b3480156102f957600080fd5b50610302610a40565b60405161030f9190613e17565b60405180910390f35b34801561032457600080fd5b5061033f600480360381019061033a9190613746565b610ad2565b60405161034c9190613d7a565b60405180910390f35b34801561036157600080fd5b5061037c600480360381019061037791906135bc565b610b57565b005b34801561038a57600080fd5b50610393610c6f565b6040516103a09190613d7a565b60405180910390f35b3480156103b557600080fd5b506103be610c95565b6040516103cb91906141d9565b60405180910390f35b3480156103e057600080fd5b506103fb60048036038101906103f691906134a6565b610c9f565b005b34801561040957600080fd5b50610412610cff565b60405161041f9190613dfc565b60405180910390f35b34801561043457600080fd5b5061043d610d05565b60405161044a91906141d9565b60405180910390f35b34801561045f57600080fd5b5061047a60048036038101906104759190613439565b610d0b565b005b34801561048857600080fd5b506104a3600480360381019061049e91906134a6565b610dcb565b005b3480156104b157600080fd5b506104cc60048036038101906104c79190613746565b610deb565b005b3480156104da57600080fd5b506104f560048036038101906104f091906136fd565b610e47565b005b34801561050357600080fd5b5061051e60048036038101906105199190613649565b610edd565b005b34801561052c57600080fd5b50610535610fad565b6040516105429190613de1565b60405180910390f35b34801561055757600080fd5b50610560610fc4565b60405161056d91906141d9565b60405180910390f35b34801561058257600080fd5b5061059d60048036038101906105989190613746565b610fcf565b6040516105aa9190613d7a565b60405180910390f35b3480156105bf57600080fd5b506105c8611081565b6040516105d591906141d9565b60405180910390f35b3480156105ea57600080fd5b5061060560048036038101906106009190613439565b611087565b60405161061291906141d9565b60405180910390f35b34801561062757600080fd5b5061063061113f565b005b34801561063e57600080fd5b506106476111c7565b005b34801561065557600080fd5b5061065e611284565b60405161066b91906141d9565b60405180910390f35b34801561068057600080fd5b50610689611289565b60405161069691906141d9565b60405180910390f35b3480156106ab57600080fd5b506106b4611294565b6040516106c19190613d7a565b60405180910390f35b3480156106d657600080fd5b506106df6112be565b6040516106ec9190613e17565b60405180910390f35b61070f600480360381019061070a9190613746565b611350565b005b34801561071d57600080fd5b506107386004803603810190610733919061357c565b61165e565b005b34801561074657600080fd5b50610761600480360381019061075c9190613746565b611674565b60405161076e9190613de1565b60405180910390f35b34801561078357600080fd5b5061079e600480360381019061079991906134f9565b6116cc565b005b3480156107ac57600080fd5b506107c760048036038101906107c29190613676565b61172e565b005b3480156107d557600080fd5b506107de6117b4565b6040516107eb91906141d9565b60405180910390f35b34801561080057600080fd5b5061081b60048036038101906108169190613746565b6117b9565b6040516108289190613e17565b60405180910390f35b34801561083d57600080fd5b50610846611860565b6040516108539190613e17565b60405180910390f35b34801561086857600080fd5b50610883600480360381019061087e9190613439565b6118ee565b60405161089091906141d9565b60405180910390f35b6108b360048036038101906108ae9190613773565b611906565b005b3480156108c157600080fd5b506108dc60048036038101906108d79190613466565b611c6a565b6040516108e99190613de1565b60405180910390f35b3480156108fe57600080fd5b5061091960048036038101906109149190613746565b611cfe565b005b34801561092757600080fd5b50610942600480360381019061093d9190613439565b611e02565b005b34801561095057600080fd5b50610959611efa565b6040516109669190613de1565b60405180910390f35b6000610984838361097f33611f0d565b611f3d565b905092915050565b600061099782611f96565b9050919050565b6109a6612078565b73ffffffffffffffffffffffffffffffffffffffff166109c4611294565b73ffffffffffffffffffffffffffffffffffffffff1614610a1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a11906140b9565b60405180910390fd5b600115158115151415610a3457610a2f612080565b610a3d565b610a3c612123565b5b50565b606060008054610a4f9061449e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7b9061449e565b8015610ac85780601f10610a9d57610100808354040283529160200191610ac8565b820191906000526020600020905b815481529060010190602001808311610aab57829003601f168201915b5050505050905090565b6000610add826121c5565b610b1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1390614099565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b6282610fcf565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bca90614119565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bf2612078565b73ffffffffffffffffffffffffffffffffffffffff161480610c215750610c2081610c1b612078565b611c6a565b5b610c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5790613ff9565b60405180910390fd5b610c6a8383612231565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600754905090565b610cb0610caa612078565b826122ea565b610cef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce690614179565b60405180910390fd5b610cfa8383836123c8565b505050565b600a5481565b61270f81565b610d13612078565b73ffffffffffffffffffffffffffffffffffffffff16610d31611294565b73ffffffffffffffffffffffffffffffffffffffff1614610d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7e906140b9565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610de6838383604051806020016040528060008152506116cc565b505050565b610dfc610df6612078565b826122ea565b610e3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e32906141b9565b60405180910390fd5b610e4481612624565b50565b610e4f612078565b73ffffffffffffffffffffffffffffffffffffffff16610e6d611294565b73ffffffffffffffffffffffffffffffffffffffff1614610ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eba906140b9565b60405180910390fd5b8060089080519060200190610ed99291906131e2565b5050565b610ee5612078565b73ffffffffffffffffffffffffffffffffffffffff16610f03611294565b73ffffffffffffffffffffffffffffffffffffffff1614610f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f50906140b9565b60405180910390fd5b80600c60006101000a81548160ff0219169083151502179055507fc2f34ac4d4e4272753586e1cbe726ed857aa2028d24b138c153671957acdd26081604051610fa29190613de1565b60405180910390a150565b6000600660149054906101000a900460ff16905090565b66d19c2ff9bf800081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106f90614039565b60405180910390fd5b80915050919050565b61270f81565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ef90614019565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611147612078565b73ffffffffffffffffffffffffffffffffffffffff16611165611294565b73ffffffffffffffffffffffffffffffffffffffff16146111bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b2906140b9565b60405180910390fd5b6111c56000612735565b565b6111cf612078565b73ffffffffffffffffffffffffffffffffffffffff166111ed611294565b73ffffffffffffffffffffffffffffffffffffffff1614611243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123a906140b9565b60405180910390fd5b60004790506000811161125557600080fd5b611281600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826127fb565b50565b600581565b66f523226980800081565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546112cd9061449e565b80601f01602080910402602001604051908101604052809291908181526020018280546112f99061449e565b80156113465780601f1061131b57610100808354040283529160200191611346565b820191906000526020600020905b81548152906001019060200180831161132957829003601f168201915b5050505050905090565b61270f6007541115611397576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138e90614079565b60405180910390fd5b61139f611294565b73ffffffffffffffffffffffffffffffffffffffff166113bd612078565b73ffffffffffffffffffffffffffffffffffffffff1614611421576113e0610fad565b15611420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141790613fd9565b60405180910390fd5b5b60003390503273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148b90613f19565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff163b146114ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e590613f19565b60405180910390fd5b60006114f8610c95565b9050600c60009054906101000a900460ff16611549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154090614199565b60405180910390fd5b61270f838261155891906142c9565b1115611599576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159090613f99565b60405180910390fd5b60058311156115dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d490613e79565b60405180910390fd5b8266f52322698080006115f09190614350565b3414611631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162890613f39565b60405180910390fd5b60005b8381101561165857611645336128ac565b808061165090614501565b915050611634565b50505050565b611670611669612078565b838361290d565b5050565b6000600582600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116c391906142c9565b11159050919050565b6116dd6116d7612078565b836122ea565b61171c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171390614179565b60405180910390fd5b61172884848484612a7a565b50505050565b611736612078565b73ffffffffffffffffffffffffffffffffffffffff16611754611294565b73ffffffffffffffffffffffffffffffffffffffff16146117aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a1906140b9565b60405180910390fd5b80600a8190555050565b600581565b60606117c4826121c5565b611803576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fa906140f9565b60405180910390fd5b600061180d612ad6565b9050600081511161182d5760405180602001604052806000815250611858565b8061183784612b68565b604051602001611848929190613d41565b6040516020818303038152906040525b915050919050565b6008805461186d9061449e565b80601f01602080910402602001604051908101604052809291908181526020018280546118999061449e565b80156118e65780601f106118bb576101008083540402835291602001916118e6565b820191906000526020600020905b8154815290600101906020018083116118c957829003601f168201915b505050505081565b600b6020528060005260406000206000915090505481565b61270f600754111561194d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194490614079565b60405180910390fd5b611955611294565b73ffffffffffffffffffffffffffffffffffffffff16611973612078565b73ffffffffffffffffffffffffffffffffffffffff16146119d757611996610fad565b156119d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cd90613fd9565b60405180910390fd5b5b60003390503273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4190613f19565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff163b14611aa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9b90613f19565b60405180910390fd5b6000611aae610c95565b90508466d19c2ff9bf8000611ac39190614350565b3414611b04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afb90613f39565b60405180910390fd5b61270f8582611b1391906142c9565b1115611b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4b90613f99565b60405180910390fd5b611b5e848461096f565b611b9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9490613eb9565b60405180910390fd5b611ba685611674565b611be5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdc90614139565b60405180910390fd5b84600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c3491906142c9565b9250508190555060005b85811015611c6257611c4f336128ac565b8080611c5a90614501565b915050611c3e565b505050505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d06612078565b73ffffffffffffffffffffffffffffffffffffffff16611d24611294565b73ffffffffffffffffffffffffffffffffffffffff1614611d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d71906140b9565b60405180910390fd5b6000611d84610c95565b905061270f8282611d9591906142c9565b1115611dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcd90614079565b60405180910390fd5b60005b82811015611dfd57611dea336128ac565b8080611df590614501565b915050611dd9565b505050565b611e0a612078565b73ffffffffffffffffffffffffffffffffffffffff16611e28611294565b73ffffffffffffffffffffffffffffffffffffffff1614611e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e75906140b9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611eee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee590613ed9565b60405180910390fd5b611ef781612735565b50565b600c60009054906101000a900460ff1681565b600081604051602001611f209190613cfa565b604051602081830303815290604052805190602001209050919050565b6000611f8d848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600a5484612cc9565b90509392505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061206157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612071575061207082612ce0565b5b9050919050565b600033905090565b612088610fad565b156120c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bf90613fd9565b60405180910390fd5b6001600660146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861210c612078565b6040516121199190613d7a565b60405180910390a1565b61212b610fad565b61216a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216190613e59565b60405180910390fd5b6000600660146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6121ae612078565b6040516121bb9190613d7a565b60405180910390a1565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166122a483610fcf565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006122f5826121c5565b612334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232b90613fb9565b60405180910390fd5b600061233f83610fcf565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123ae57508373ffffffffffffffffffffffffffffffffffffffff1661239684610ad2565b73ffffffffffffffffffffffffffffffffffffffff16145b806123bf57506123be8185611c6a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166123e882610fcf565b73ffffffffffffffffffffffffffffffffffffffff161461243e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612435906140d9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a590613f59565b60405180910390fd5b6124b9838383612d4a565b6124c4600082612231565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461251491906143aa565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461256b91906142c9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061262f82610fcf565b905061263d81600084612d4a565b612648600083612231565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461269891906143aa565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008273ffffffffffffffffffffffffffffffffffffffff168260405161282190613d65565b60006040518083038185875af1925050503d806000811461285e576040519150601f19603f3d011682016040523d82523d6000602084013e612863565b606091505b50509050806128a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289e90614159565b60405180910390fd5b505050565b60006128b6610c95565b90506001600760008282546128cb91906142c9565b925050819055506128dc8282612d5a565b807fdfe3e57736ff136c528786ad701a1b04e118a2c7a62a61f5fd8ea48b8729ea2360405160405180910390a25050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561297c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297390613f79565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612a6d9190613de1565b60405180910390a3505050565b612a858484846123c8565b612a9184848484612f28565b612ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac790613e99565b60405180910390fd5b50505050565b606060088054612ae59061449e565b80601f0160208091040260200160405190810160405280929190818152602001828054612b119061449e565b8015612b5e5780601f10612b3357610100808354040283529160200191612b5e565b820191906000526020600020905b815481529060010190602001808311612b4157829003601f168201915b5050505050905090565b60606000821415612bb0576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612cc4565b600082905060005b60008214612be2578080612bcb90614501565b915050600a82612bdb919061431f565b9150612bb8565b60008167ffffffffffffffff811115612bfe57612bfd614665565b5b6040519080825280601f01601f191660200182016040528015612c305781602001600182028036833780820191505090505b5090505b60008514612cbd57600182612c4991906143aa565b9150600a85612c589190614578565b6030612c6491906142c9565b60f81b818381518110612c7a57612c79614636565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612cb6919061431f565b9450612c34565b8093505050505b919050565b600082612cd685846130bf565b1490509392505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612d55838383613172565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612dca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc190614059565b60405180910390fd5b612dd3816121c5565b15612e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0a90613ef9565b60405180910390fd5b612e1f60008383612d4a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e6f91906142c9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000612f498473ffffffffffffffffffffffffffffffffffffffff166131ca565b156130b2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f72612078565b8786866040518563ffffffff1660e01b8152600401612f949493929190613d95565b602060405180830381600087803b158015612fae57600080fd5b505af1925050508015612fdf57506040513d601f19601f82011682018060405250810190612fdc91906136d0565b60015b613062573d806000811461300f576040519150601f19603f3d011682016040523d82523d6000602084013e613014565b606091505b5060008151141561305a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305190613e99565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506130b7565b600190505b949350505050565b60008082905060005b84518110156131675760008582815181106130e6576130e5614636565b5b6020026020010151905080831161312757828160405160200161310a929190613d15565b604051602081830303815290604052805190602001209250613153565b808360405160200161313a929190613d15565b6040516020818303038152906040528051906020012092505b50808061315f90614501565b9150506130c8565b508091505092915050565b61317d8383836131dd565b613185610fad565b156131c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131bc90613e39565b60405180910390fd5b505050565b600080823b905060008111915050919050565b505050565b8280546131ee9061449e565b90600052602060002090601f0160209004810192826132105760008555613257565b82601f1061322957805160ff1916838001178555613257565b82800160010185558215613257579182015b8281111561325657825182559160200191906001019061323b565b5b5090506132649190613268565b5090565b5b80821115613281576000816000905550600101613269565b5090565b600061329861329384614219565b6141f4565b9050828152602081018484840111156132b4576132b36146a3565b5b6132bf84828561445c565b509392505050565b60006132da6132d58461424a565b6141f4565b9050828152602081018484840111156132f6576132f56146a3565b5b61330184828561445c565b509392505050565b60008135905061331881614db2565b92915050565b60008083601f84011261333457613333614699565b5b8235905067ffffffffffffffff81111561335157613350614694565b5b60208301915083602082028301111561336d5761336c61469e565b5b9250929050565b60008135905061338381614dc9565b92915050565b60008135905061339881614de0565b92915050565b6000813590506133ad81614df7565b92915050565b6000815190506133c281614df7565b92915050565b600082601f8301126133dd576133dc614699565b5b81356133ed848260208601613285565b91505092915050565b600082601f83011261340b5761340a614699565b5b813561341b8482602086016132c7565b91505092915050565b60008135905061343381614e0e565b92915050565b60006020828403121561344f5761344e6146ad565b5b600061345d84828501613309565b91505092915050565b6000806040838503121561347d5761347c6146ad565b5b600061348b85828601613309565b925050602061349c85828601613309565b9150509250929050565b6000806000606084860312156134bf576134be6146ad565b5b60006134cd86828701613309565b93505060206134de86828701613309565b92505060406134ef86828701613424565b9150509250925092565b60008060008060808587031215613513576135126146ad565b5b600061352187828801613309565b945050602061353287828801613309565b935050604061354387828801613424565b925050606085013567ffffffffffffffff811115613564576135636146a8565b5b613570878288016133c8565b91505092959194509250565b60008060408385031215613593576135926146ad565b5b60006135a185828601613309565b92505060206135b285828601613374565b9150509250929050565b600080604083850312156135d3576135d26146ad565b5b60006135e185828601613309565b92505060206135f285828601613424565b9150509250929050565b60008060208385031215613613576136126146ad565b5b600083013567ffffffffffffffff811115613631576136306146a8565b5b61363d8582860161331e565b92509250509250929050565b60006020828403121561365f5761365e6146ad565b5b600061366d84828501613374565b91505092915050565b60006020828403121561368c5761368b6146ad565b5b600061369a84828501613389565b91505092915050565b6000602082840312156136b9576136b86146ad565b5b60006136c78482850161339e565b91505092915050565b6000602082840312156136e6576136e56146ad565b5b60006136f4848285016133b3565b91505092915050565b600060208284031215613713576137126146ad565b5b600082013567ffffffffffffffff811115613731576137306146a8565b5b61373d848285016133f6565b91505092915050565b60006020828403121561375c5761375b6146ad565b5b600061376a84828501613424565b91505092915050565b60008060006040848603121561378c5761378b6146ad565b5b600061379a86828701613424565b935050602084013567ffffffffffffffff8111156137bb576137ba6146a8565b5b6137c78682870161331e565b92509250509250925092565b6137dc816143de565b82525050565b6137f36137ee826143de565b61454a565b82525050565b613802816143f0565b82525050565b613811816143fc565b82525050565b613828613823826143fc565b61455c565b82525050565b60006138398261427b565b6138438185614291565b935061385381856020860161446b565b61385c816146b2565b840191505092915050565b600061387282614286565b61387c81856142ad565b935061388c81856020860161446b565b613895816146b2565b840191505092915050565b60006138ab82614286565b6138b581856142be565b93506138c581856020860161446b565b80840191505092915050565b60006138de602b836142ad565b91506138e9826146d0565b604082019050919050565b60006139016014836142ad565b915061390c8261471f565b602082019050919050565b6000613924600e836142ad565b915061392f82614748565b602082019050919050565b60006139476032836142ad565b915061395282614771565b604082019050919050565b600061396a6019836142ad565b9150613975826147c0565b602082019050919050565b600061398d6026836142ad565b9150613998826147e9565b604082019050919050565b60006139b0601c836142ad565b91506139bb82614838565b602082019050919050565b60006139d36014836142ad565b91506139de82614861565b602082019050919050565b60006139f6601d836142ad565b9150613a018261488a565b602082019050919050565b6000613a196024836142ad565b9150613a24826148b3565b604082019050919050565b6000613a3c6019836142ad565b9150613a4782614902565b602082019050919050565b6000613a5f6009836142ad565b9150613a6a8261492b565b602082019050919050565b6000613a82602c836142ad565b9150613a8d82614954565b604082019050919050565b6000613aa56010836142ad565b9150613ab0826149a3565b602082019050919050565b6000613ac86038836142ad565b9150613ad3826149cc565b604082019050919050565b6000613aeb602a836142ad565b9150613af682614a1b565b604082019050919050565b6000613b0e6029836142ad565b9150613b1982614a6a565b604082019050919050565b6000613b316020836142ad565b9150613b3c82614ab9565b602082019050919050565b6000613b546008836142ad565b9150613b5f82614ae2565b602082019050919050565b6000613b77602c836142ad565b9150613b8282614b0b565b604082019050919050565b6000613b9a6020836142ad565b9150613ba582614b5a565b602082019050919050565b6000613bbd6029836142ad565b9150613bc882614b83565b604082019050919050565b6000613be0602f836142ad565b9150613beb82614bd2565b604082019050919050565b6000613c036021836142ad565b9150613c0e82614c21565b604082019050919050565b6000613c26602a836142ad565b9150613c3182614c70565b604082019050919050565b6000613c496000836142a2565b9150613c5482614cbf565b600082019050919050565b6000613c6c6010836142ad565b9150613c7782614cc2565b602082019050919050565b6000613c8f6031836142ad565b9150613c9a82614ceb565b604082019050919050565b6000613cb26018836142ad565b9150613cbd82614d3a565b602082019050919050565b6000613cd56030836142ad565b9150613ce082614d63565b604082019050919050565b613cf481614452565b82525050565b6000613d0682846137e2565b60148201915081905092915050565b6000613d218285613817565b602082019150613d318284613817565b6020820191508190509392505050565b6000613d4d82856138a0565b9150613d5982846138a0565b91508190509392505050565b6000613d7082613c3c565b9150819050919050565b6000602082019050613d8f60008301846137d3565b92915050565b6000608082019050613daa60008301876137d3565b613db760208301866137d3565b613dc46040830185613ceb565b8181036060830152613dd6818461382e565b905095945050505050565b6000602082019050613df660008301846137f9565b92915050565b6000602082019050613e116000830184613808565b92915050565b60006020820190508181036000830152613e318184613867565b905092915050565b60006020820190508181036000830152613e52816138d1565b9050919050565b60006020820190508181036000830152613e72816138f4565b9050919050565b60006020820190508181036000830152613e9281613917565b9050919050565b60006020820190508181036000830152613eb28161393a565b9050919050565b60006020820190508181036000830152613ed28161395d565b9050919050565b60006020820190508181036000830152613ef281613980565b9050919050565b60006020820190508181036000830152613f12816139a3565b9050919050565b60006020820190508181036000830152613f32816139c6565b9050919050565b60006020820190508181036000830152613f52816139e9565b9050919050565b60006020820190508181036000830152613f7281613a0c565b9050919050565b60006020820190508181036000830152613f9281613a2f565b9050919050565b60006020820190508181036000830152613fb281613a52565b9050919050565b60006020820190508181036000830152613fd281613a75565b9050919050565b60006020820190508181036000830152613ff281613a98565b9050919050565b6000602082019050818103600083015261401281613abb565b9050919050565b6000602082019050818103600083015261403281613ade565b9050919050565b6000602082019050818103600083015261405281613b01565b9050919050565b6000602082019050818103600083015261407281613b24565b9050919050565b6000602082019050818103600083015261409281613b47565b9050919050565b600060208201905081810360008301526140b281613b6a565b9050919050565b600060208201905081810360008301526140d281613b8d565b9050919050565b600060208201905081810360008301526140f281613bb0565b9050919050565b6000602082019050818103600083015261411281613bd3565b9050919050565b6000602082019050818103600083015261413281613bf6565b9050919050565b6000602082019050818103600083015261415281613c19565b9050919050565b6000602082019050818103600083015261417281613c5f565b9050919050565b6000602082019050818103600083015261419281613c82565b9050919050565b600060208201905081810360008301526141b281613ca5565b9050919050565b600060208201905081810360008301526141d281613cc8565b9050919050565b60006020820190506141ee6000830184613ceb565b92915050565b60006141fe61420f565b905061420a82826144d0565b919050565b6000604051905090565b600067ffffffffffffffff82111561423457614233614665565b5b61423d826146b2565b9050602081019050919050565b600067ffffffffffffffff82111561426557614264614665565b5b61426e826146b2565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006142d482614452565b91506142df83614452565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614314576143136145a9565b5b828201905092915050565b600061432a82614452565b915061433583614452565b925082614345576143446145d8565b5b828204905092915050565b600061435b82614452565b915061436683614452565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561439f5761439e6145a9565b5b828202905092915050565b60006143b582614452565b91506143c083614452565b9250828210156143d3576143d26145a9565b5b828203905092915050565b60006143e982614432565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561448957808201518184015260208101905061446e565b83811115614498576000848401525b50505050565b600060028204905060018216806144b657607f821691505b602082108114156144ca576144c9614607565b5b50919050565b6144d9826146b2565b810181811067ffffffffffffffff821117156144f8576144f7614665565b5b80604052505050565b600061450c82614452565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561453f5761453e6145a9565b5b600182019050919050565b600061455582614566565b9050919050565b6000819050919050565b6000614571826146c3565b9050919050565b600061458382614452565b915061458e83614452565b92508261459e5761459d6145d8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4552433732315061757361626c653a20746f6b656e207472616e73666572207760008201527f68696c6520706175736564000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f45786365656473206e756d626572000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f53656e646572206973206e6f742077686974656c697374656400000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f43616c6c6572206973206120636f6e7472616374000000000000000000000000600082015250565b7f56616c7565206973206f766572206f7220756e6465722070726963652e000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4d6178206c696d69740000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f53616c6520656e64000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f53656e646572206d61782070726573616c65206d696e7420616d6f756e74206160008201527f6c7265616479206d657400000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f5075626c69632073616c65206e6f74206f70656e207965740000000000000000600082015250565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b614dbb816143de565b8114614dc657600080fd5b50565b614dd2816143f0565b8114614ddd57600080fd5b50565b614de9816143fc565b8114614df457600080fd5b50565b614e0081614406565b8114614e0b57600080fd5b50565b614e1781614452565b8114614e2257600080fd5b5056fea26469706673582212206a4fba0c3356d0df3d68511986987d8c3b6ec5eb1c86f803b4d6ee4ba5a96c2b64736f6c63430008070033
Deployed Bytecode
0x6080604052600436106102455760003560e01c806370a0823111610139578063b88d4fde116100b6578063db4bec441161007a578063db4bec441461085c578063e3e1e8ef14610899578063e985e9c5146108b5578063f19e75d4146108f2578063f2fde38b1461091b578063f9e237991461094457610245565b8063b88d4fde14610777578063bd32fb66146107a0578063c0cf3f41146107c9578063c87b56dd146107f4578063d547cfb71461083157610245565b80638da5cb5b116100fd5780638da5cb5b1461069f57806395d89b41146106ca578063a0712d68146106f5578063a22cb46514610711578063b0cfbf161461073a57610245565b806370a08231146105de578063715018a61461061b578063853828b6146106325780638ad5de28146106495780638d859f3e1461067457610245565b80633502a716116101c75780635aca1bb61161018b5780635aca1bb6146104f75780635c975abb1461052057806362dc6e211461054b5780636352211e146105765780636a5da9ee146105b357610245565b80633502a716146104285780633ab1a4941461045357806342842e0e1461047c57806342966c68146104a557806355f804b3146104ce57610245565b8063095ea7b31161020e578063095ea7b3146103555780631581b6001461037e57806318160ddd146103a957806323b872dd146103d45780632eb4a7ab146103fd57610245565b80629204e91461024a57806301ffc9a71461028757806302329a29146102c457806306fdde03146102ed578063081812fc14610318575b600080fd5b34801561025657600080fd5b50610271600480360381019061026c91906135fc565b61096f565b60405161027e9190613de1565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a991906136a3565b61098c565b6040516102bb9190613de1565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e69190613649565b61099e565b005b3480156102f957600080fd5b50610302610a40565b60405161030f9190613e17565b60405180910390f35b34801561032457600080fd5b5061033f600480360381019061033a9190613746565b610ad2565b60405161034c9190613d7a565b60405180910390f35b34801561036157600080fd5b5061037c600480360381019061037791906135bc565b610b57565b005b34801561038a57600080fd5b50610393610c6f565b6040516103a09190613d7a565b60405180910390f35b3480156103b557600080fd5b506103be610c95565b6040516103cb91906141d9565b60405180910390f35b3480156103e057600080fd5b506103fb60048036038101906103f691906134a6565b610c9f565b005b34801561040957600080fd5b50610412610cff565b60405161041f9190613dfc565b60405180910390f35b34801561043457600080fd5b5061043d610d05565b60405161044a91906141d9565b60405180910390f35b34801561045f57600080fd5b5061047a60048036038101906104759190613439565b610d0b565b005b34801561048857600080fd5b506104a3600480360381019061049e91906134a6565b610dcb565b005b3480156104b157600080fd5b506104cc60048036038101906104c79190613746565b610deb565b005b3480156104da57600080fd5b506104f560048036038101906104f091906136fd565b610e47565b005b34801561050357600080fd5b5061051e60048036038101906105199190613649565b610edd565b005b34801561052c57600080fd5b50610535610fad565b6040516105429190613de1565b60405180910390f35b34801561055757600080fd5b50610560610fc4565b60405161056d91906141d9565b60405180910390f35b34801561058257600080fd5b5061059d60048036038101906105989190613746565b610fcf565b6040516105aa9190613d7a565b60405180910390f35b3480156105bf57600080fd5b506105c8611081565b6040516105d591906141d9565b60405180910390f35b3480156105ea57600080fd5b5061060560048036038101906106009190613439565b611087565b60405161061291906141d9565b60405180910390f35b34801561062757600080fd5b5061063061113f565b005b34801561063e57600080fd5b506106476111c7565b005b34801561065557600080fd5b5061065e611284565b60405161066b91906141d9565b60405180910390f35b34801561068057600080fd5b50610689611289565b60405161069691906141d9565b60405180910390f35b3480156106ab57600080fd5b506106b4611294565b6040516106c19190613d7a565b60405180910390f35b3480156106d657600080fd5b506106df6112be565b6040516106ec9190613e17565b60405180910390f35b61070f600480360381019061070a9190613746565b611350565b005b34801561071d57600080fd5b506107386004803603810190610733919061357c565b61165e565b005b34801561074657600080fd5b50610761600480360381019061075c9190613746565b611674565b60405161076e9190613de1565b60405180910390f35b34801561078357600080fd5b5061079e600480360381019061079991906134f9565b6116cc565b005b3480156107ac57600080fd5b506107c760048036038101906107c29190613676565b61172e565b005b3480156107d557600080fd5b506107de6117b4565b6040516107eb91906141d9565b60405180910390f35b34801561080057600080fd5b5061081b60048036038101906108169190613746565b6117b9565b6040516108289190613e17565b60405180910390f35b34801561083d57600080fd5b50610846611860565b6040516108539190613e17565b60405180910390f35b34801561086857600080fd5b50610883600480360381019061087e9190613439565b6118ee565b60405161089091906141d9565b60405180910390f35b6108b360048036038101906108ae9190613773565b611906565b005b3480156108c157600080fd5b506108dc60048036038101906108d79190613466565b611c6a565b6040516108e99190613de1565b60405180910390f35b3480156108fe57600080fd5b5061091960048036038101906109149190613746565b611cfe565b005b34801561092757600080fd5b50610942600480360381019061093d9190613439565b611e02565b005b34801561095057600080fd5b50610959611efa565b6040516109669190613de1565b60405180910390f35b6000610984838361097f33611f0d565b611f3d565b905092915050565b600061099782611f96565b9050919050565b6109a6612078565b73ffffffffffffffffffffffffffffffffffffffff166109c4611294565b73ffffffffffffffffffffffffffffffffffffffff1614610a1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a11906140b9565b60405180910390fd5b600115158115151415610a3457610a2f612080565b610a3d565b610a3c612123565b5b50565b606060008054610a4f9061449e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7b9061449e565b8015610ac85780601f10610a9d57610100808354040283529160200191610ac8565b820191906000526020600020905b815481529060010190602001808311610aab57829003601f168201915b5050505050905090565b6000610add826121c5565b610b1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1390614099565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b6282610fcf565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bca90614119565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bf2612078565b73ffffffffffffffffffffffffffffffffffffffff161480610c215750610c2081610c1b612078565b611c6a565b5b610c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5790613ff9565b60405180910390fd5b610c6a8383612231565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600754905090565b610cb0610caa612078565b826122ea565b610cef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce690614179565b60405180910390fd5b610cfa8383836123c8565b505050565b600a5481565b61270f81565b610d13612078565b73ffffffffffffffffffffffffffffffffffffffff16610d31611294565b73ffffffffffffffffffffffffffffffffffffffff1614610d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7e906140b9565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610de6838383604051806020016040528060008152506116cc565b505050565b610dfc610df6612078565b826122ea565b610e3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e32906141b9565b60405180910390fd5b610e4481612624565b50565b610e4f612078565b73ffffffffffffffffffffffffffffffffffffffff16610e6d611294565b73ffffffffffffffffffffffffffffffffffffffff1614610ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eba906140b9565b60405180910390fd5b8060089080519060200190610ed99291906131e2565b5050565b610ee5612078565b73ffffffffffffffffffffffffffffffffffffffff16610f03611294565b73ffffffffffffffffffffffffffffffffffffffff1614610f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f50906140b9565b60405180910390fd5b80600c60006101000a81548160ff0219169083151502179055507fc2f34ac4d4e4272753586e1cbe726ed857aa2028d24b138c153671957acdd26081604051610fa29190613de1565b60405180910390a150565b6000600660149054906101000a900460ff16905090565b66d19c2ff9bf800081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106f90614039565b60405180910390fd5b80915050919050565b61270f81565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ef90614019565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611147612078565b73ffffffffffffffffffffffffffffffffffffffff16611165611294565b73ffffffffffffffffffffffffffffffffffffffff16146111bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b2906140b9565b60405180910390fd5b6111c56000612735565b565b6111cf612078565b73ffffffffffffffffffffffffffffffffffffffff166111ed611294565b73ffffffffffffffffffffffffffffffffffffffff1614611243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123a906140b9565b60405180910390fd5b60004790506000811161125557600080fd5b611281600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826127fb565b50565b600581565b66f523226980800081565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546112cd9061449e565b80601f01602080910402602001604051908101604052809291908181526020018280546112f99061449e565b80156113465780601f1061131b57610100808354040283529160200191611346565b820191906000526020600020905b81548152906001019060200180831161132957829003601f168201915b5050505050905090565b61270f6007541115611397576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138e90614079565b60405180910390fd5b61139f611294565b73ffffffffffffffffffffffffffffffffffffffff166113bd612078565b73ffffffffffffffffffffffffffffffffffffffff1614611421576113e0610fad565b15611420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141790613fd9565b60405180910390fd5b5b60003390503273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148b90613f19565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff163b146114ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e590613f19565b60405180910390fd5b60006114f8610c95565b9050600c60009054906101000a900460ff16611549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154090614199565b60405180910390fd5b61270f838261155891906142c9565b1115611599576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159090613f99565b60405180910390fd5b60058311156115dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d490613e79565b60405180910390fd5b8266f52322698080006115f09190614350565b3414611631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162890613f39565b60405180910390fd5b60005b8381101561165857611645336128ac565b808061165090614501565b915050611634565b50505050565b611670611669612078565b838361290d565b5050565b6000600582600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116c391906142c9565b11159050919050565b6116dd6116d7612078565b836122ea565b61171c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171390614179565b60405180910390fd5b61172884848484612a7a565b50505050565b611736612078565b73ffffffffffffffffffffffffffffffffffffffff16611754611294565b73ffffffffffffffffffffffffffffffffffffffff16146117aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a1906140b9565b60405180910390fd5b80600a8190555050565b600581565b60606117c4826121c5565b611803576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fa906140f9565b60405180910390fd5b600061180d612ad6565b9050600081511161182d5760405180602001604052806000815250611858565b8061183784612b68565b604051602001611848929190613d41565b6040516020818303038152906040525b915050919050565b6008805461186d9061449e565b80601f01602080910402602001604051908101604052809291908181526020018280546118999061449e565b80156118e65780601f106118bb576101008083540402835291602001916118e6565b820191906000526020600020905b8154815290600101906020018083116118c957829003601f168201915b505050505081565b600b6020528060005260406000206000915090505481565b61270f600754111561194d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194490614079565b60405180910390fd5b611955611294565b73ffffffffffffffffffffffffffffffffffffffff16611973612078565b73ffffffffffffffffffffffffffffffffffffffff16146119d757611996610fad565b156119d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cd90613fd9565b60405180910390fd5b5b60003390503273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4190613f19565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff163b14611aa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9b90613f19565b60405180910390fd5b6000611aae610c95565b90508466d19c2ff9bf8000611ac39190614350565b3414611b04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afb90613f39565b60405180910390fd5b61270f8582611b1391906142c9565b1115611b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4b90613f99565b60405180910390fd5b611b5e848461096f565b611b9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9490613eb9565b60405180910390fd5b611ba685611674565b611be5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdc90614139565b60405180910390fd5b84600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c3491906142c9565b9250508190555060005b85811015611c6257611c4f336128ac565b8080611c5a90614501565b915050611c3e565b505050505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d06612078565b73ffffffffffffffffffffffffffffffffffffffff16611d24611294565b73ffffffffffffffffffffffffffffffffffffffff1614611d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d71906140b9565b60405180910390fd5b6000611d84610c95565b905061270f8282611d9591906142c9565b1115611dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcd90614079565b60405180910390fd5b60005b82811015611dfd57611dea336128ac565b8080611df590614501565b915050611dd9565b505050565b611e0a612078565b73ffffffffffffffffffffffffffffffffffffffff16611e28611294565b73ffffffffffffffffffffffffffffffffffffffff1614611e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e75906140b9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611eee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee590613ed9565b60405180910390fd5b611ef781612735565b50565b600c60009054906101000a900460ff1681565b600081604051602001611f209190613cfa565b604051602081830303815290604052805190602001209050919050565b6000611f8d848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600a5484612cc9565b90509392505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061206157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612071575061207082612ce0565b5b9050919050565b600033905090565b612088610fad565b156120c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bf90613fd9565b60405180910390fd5b6001600660146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861210c612078565b6040516121199190613d7a565b60405180910390a1565b61212b610fad565b61216a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216190613e59565b60405180910390fd5b6000600660146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6121ae612078565b6040516121bb9190613d7a565b60405180910390a1565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166122a483610fcf565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006122f5826121c5565b612334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232b90613fb9565b60405180910390fd5b600061233f83610fcf565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123ae57508373ffffffffffffffffffffffffffffffffffffffff1661239684610ad2565b73ffffffffffffffffffffffffffffffffffffffff16145b806123bf57506123be8185611c6a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166123e882610fcf565b73ffffffffffffffffffffffffffffffffffffffff161461243e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612435906140d9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a590613f59565b60405180910390fd5b6124b9838383612d4a565b6124c4600082612231565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461251491906143aa565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461256b91906142c9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061262f82610fcf565b905061263d81600084612d4a565b612648600083612231565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461269891906143aa565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008273ffffffffffffffffffffffffffffffffffffffff168260405161282190613d65565b60006040518083038185875af1925050503d806000811461285e576040519150601f19603f3d011682016040523d82523d6000602084013e612863565b606091505b50509050806128a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289e90614159565b60405180910390fd5b505050565b60006128b6610c95565b90506001600760008282546128cb91906142c9565b925050819055506128dc8282612d5a565b807fdfe3e57736ff136c528786ad701a1b04e118a2c7a62a61f5fd8ea48b8729ea2360405160405180910390a25050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561297c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297390613f79565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612a6d9190613de1565b60405180910390a3505050565b612a858484846123c8565b612a9184848484612f28565b612ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac790613e99565b60405180910390fd5b50505050565b606060088054612ae59061449e565b80601f0160208091040260200160405190810160405280929190818152602001828054612b119061449e565b8015612b5e5780601f10612b3357610100808354040283529160200191612b5e565b820191906000526020600020905b815481529060010190602001808311612b4157829003601f168201915b5050505050905090565b60606000821415612bb0576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612cc4565b600082905060005b60008214612be2578080612bcb90614501565b915050600a82612bdb919061431f565b9150612bb8565b60008167ffffffffffffffff811115612bfe57612bfd614665565b5b6040519080825280601f01601f191660200182016040528015612c305781602001600182028036833780820191505090505b5090505b60008514612cbd57600182612c4991906143aa565b9150600a85612c589190614578565b6030612c6491906142c9565b60f81b818381518110612c7a57612c79614636565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612cb6919061431f565b9450612c34565b8093505050505b919050565b600082612cd685846130bf565b1490509392505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612d55838383613172565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612dca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc190614059565b60405180910390fd5b612dd3816121c5565b15612e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0a90613ef9565b60405180910390fd5b612e1f60008383612d4a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e6f91906142c9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000612f498473ffffffffffffffffffffffffffffffffffffffff166131ca565b156130b2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f72612078565b8786866040518563ffffffff1660e01b8152600401612f949493929190613d95565b602060405180830381600087803b158015612fae57600080fd5b505af1925050508015612fdf57506040513d601f19601f82011682018060405250810190612fdc91906136d0565b60015b613062573d806000811461300f576040519150601f19603f3d011682016040523d82523d6000602084013e613014565b606091505b5060008151141561305a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305190613e99565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506130b7565b600190505b949350505050565b60008082905060005b84518110156131675760008582815181106130e6576130e5614636565b5b6020026020010151905080831161312757828160405160200161310a929190613d15565b604051602081830303815290604052805190602001209250613153565b808360405160200161313a929190613d15565b6040516020818303038152906040528051906020012092505b50808061315f90614501565b9150506130c8565b508091505092915050565b61317d8383836131dd565b613185610fad565b156131c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131bc90613e39565b60405180910390fd5b505050565b600080823b905060008111915050919050565b505050565b8280546131ee9061449e565b90600052602060002090601f0160209004810192826132105760008555613257565b82601f1061322957805160ff1916838001178555613257565b82800160010185558215613257579182015b8281111561325657825182559160200191906001019061323b565b5b5090506132649190613268565b5090565b5b80821115613281576000816000905550600101613269565b5090565b600061329861329384614219565b6141f4565b9050828152602081018484840111156132b4576132b36146a3565b5b6132bf84828561445c565b509392505050565b60006132da6132d58461424a565b6141f4565b9050828152602081018484840111156132f6576132f56146a3565b5b61330184828561445c565b509392505050565b60008135905061331881614db2565b92915050565b60008083601f84011261333457613333614699565b5b8235905067ffffffffffffffff81111561335157613350614694565b5b60208301915083602082028301111561336d5761336c61469e565b5b9250929050565b60008135905061338381614dc9565b92915050565b60008135905061339881614de0565b92915050565b6000813590506133ad81614df7565b92915050565b6000815190506133c281614df7565b92915050565b600082601f8301126133dd576133dc614699565b5b81356133ed848260208601613285565b91505092915050565b600082601f83011261340b5761340a614699565b5b813561341b8482602086016132c7565b91505092915050565b60008135905061343381614e0e565b92915050565b60006020828403121561344f5761344e6146ad565b5b600061345d84828501613309565b91505092915050565b6000806040838503121561347d5761347c6146ad565b5b600061348b85828601613309565b925050602061349c85828601613309565b9150509250929050565b6000806000606084860312156134bf576134be6146ad565b5b60006134cd86828701613309565b93505060206134de86828701613309565b92505060406134ef86828701613424565b9150509250925092565b60008060008060808587031215613513576135126146ad565b5b600061352187828801613309565b945050602061353287828801613309565b935050604061354387828801613424565b925050606085013567ffffffffffffffff811115613564576135636146a8565b5b613570878288016133c8565b91505092959194509250565b60008060408385031215613593576135926146ad565b5b60006135a185828601613309565b92505060206135b285828601613374565b9150509250929050565b600080604083850312156135d3576135d26146ad565b5b60006135e185828601613309565b92505060206135f285828601613424565b9150509250929050565b60008060208385031215613613576136126146ad565b5b600083013567ffffffffffffffff811115613631576136306146a8565b5b61363d8582860161331e565b92509250509250929050565b60006020828403121561365f5761365e6146ad565b5b600061366d84828501613374565b91505092915050565b60006020828403121561368c5761368b6146ad565b5b600061369a84828501613389565b91505092915050565b6000602082840312156136b9576136b86146ad565b5b60006136c78482850161339e565b91505092915050565b6000602082840312156136e6576136e56146ad565b5b60006136f4848285016133b3565b91505092915050565b600060208284031215613713576137126146ad565b5b600082013567ffffffffffffffff811115613731576137306146a8565b5b61373d848285016133f6565b91505092915050565b60006020828403121561375c5761375b6146ad565b5b600061376a84828501613424565b91505092915050565b60008060006040848603121561378c5761378b6146ad565b5b600061379a86828701613424565b935050602084013567ffffffffffffffff8111156137bb576137ba6146a8565b5b6137c78682870161331e565b92509250509250925092565b6137dc816143de565b82525050565b6137f36137ee826143de565b61454a565b82525050565b613802816143f0565b82525050565b613811816143fc565b82525050565b613828613823826143fc565b61455c565b82525050565b60006138398261427b565b6138438185614291565b935061385381856020860161446b565b61385c816146b2565b840191505092915050565b600061387282614286565b61387c81856142ad565b935061388c81856020860161446b565b613895816146b2565b840191505092915050565b60006138ab82614286565b6138b581856142be565b93506138c581856020860161446b565b80840191505092915050565b60006138de602b836142ad565b91506138e9826146d0565b604082019050919050565b60006139016014836142ad565b915061390c8261471f565b602082019050919050565b6000613924600e836142ad565b915061392f82614748565b602082019050919050565b60006139476032836142ad565b915061395282614771565b604082019050919050565b600061396a6019836142ad565b9150613975826147c0565b602082019050919050565b600061398d6026836142ad565b9150613998826147e9565b604082019050919050565b60006139b0601c836142ad565b91506139bb82614838565b602082019050919050565b60006139d36014836142ad565b91506139de82614861565b602082019050919050565b60006139f6601d836142ad565b9150613a018261488a565b602082019050919050565b6000613a196024836142ad565b9150613a24826148b3565b604082019050919050565b6000613a3c6019836142ad565b9150613a4782614902565b602082019050919050565b6000613a5f6009836142ad565b9150613a6a8261492b565b602082019050919050565b6000613a82602c836142ad565b9150613a8d82614954565b604082019050919050565b6000613aa56010836142ad565b9150613ab0826149a3565b602082019050919050565b6000613ac86038836142ad565b9150613ad3826149cc565b604082019050919050565b6000613aeb602a836142ad565b9150613af682614a1b565b604082019050919050565b6000613b0e6029836142ad565b9150613b1982614a6a565b604082019050919050565b6000613b316020836142ad565b9150613b3c82614ab9565b602082019050919050565b6000613b546008836142ad565b9150613b5f82614ae2565b602082019050919050565b6000613b77602c836142ad565b9150613b8282614b0b565b604082019050919050565b6000613b9a6020836142ad565b9150613ba582614b5a565b602082019050919050565b6000613bbd6029836142ad565b9150613bc882614b83565b604082019050919050565b6000613be0602f836142ad565b9150613beb82614bd2565b604082019050919050565b6000613c036021836142ad565b9150613c0e82614c21565b604082019050919050565b6000613c26602a836142ad565b9150613c3182614c70565b604082019050919050565b6000613c496000836142a2565b9150613c5482614cbf565b600082019050919050565b6000613c6c6010836142ad565b9150613c7782614cc2565b602082019050919050565b6000613c8f6031836142ad565b9150613c9a82614ceb565b604082019050919050565b6000613cb26018836142ad565b9150613cbd82614d3a565b602082019050919050565b6000613cd56030836142ad565b9150613ce082614d63565b604082019050919050565b613cf481614452565b82525050565b6000613d0682846137e2565b60148201915081905092915050565b6000613d218285613817565b602082019150613d318284613817565b6020820191508190509392505050565b6000613d4d82856138a0565b9150613d5982846138a0565b91508190509392505050565b6000613d7082613c3c565b9150819050919050565b6000602082019050613d8f60008301846137d3565b92915050565b6000608082019050613daa60008301876137d3565b613db760208301866137d3565b613dc46040830185613ceb565b8181036060830152613dd6818461382e565b905095945050505050565b6000602082019050613df660008301846137f9565b92915050565b6000602082019050613e116000830184613808565b92915050565b60006020820190508181036000830152613e318184613867565b905092915050565b60006020820190508181036000830152613e52816138d1565b9050919050565b60006020820190508181036000830152613e72816138f4565b9050919050565b60006020820190508181036000830152613e9281613917565b9050919050565b60006020820190508181036000830152613eb28161393a565b9050919050565b60006020820190508181036000830152613ed28161395d565b9050919050565b60006020820190508181036000830152613ef281613980565b9050919050565b60006020820190508181036000830152613f12816139a3565b9050919050565b60006020820190508181036000830152613f32816139c6565b9050919050565b60006020820190508181036000830152613f52816139e9565b9050919050565b60006020820190508181036000830152613f7281613a0c565b9050919050565b60006020820190508181036000830152613f9281613a2f565b9050919050565b60006020820190508181036000830152613fb281613a52565b9050919050565b60006020820190508181036000830152613fd281613a75565b9050919050565b60006020820190508181036000830152613ff281613a98565b9050919050565b6000602082019050818103600083015261401281613abb565b9050919050565b6000602082019050818103600083015261403281613ade565b9050919050565b6000602082019050818103600083015261405281613b01565b9050919050565b6000602082019050818103600083015261407281613b24565b9050919050565b6000602082019050818103600083015261409281613b47565b9050919050565b600060208201905081810360008301526140b281613b6a565b9050919050565b600060208201905081810360008301526140d281613b8d565b9050919050565b600060208201905081810360008301526140f281613bb0565b9050919050565b6000602082019050818103600083015261411281613bd3565b9050919050565b6000602082019050818103600083015261413281613bf6565b9050919050565b6000602082019050818103600083015261415281613c19565b9050919050565b6000602082019050818103600083015261417281613c5f565b9050919050565b6000602082019050818103600083015261419281613c82565b9050919050565b600060208201905081810360008301526141b281613ca5565b9050919050565b600060208201905081810360008301526141d281613cc8565b9050919050565b60006020820190506141ee6000830184613ceb565b92915050565b60006141fe61420f565b905061420a82826144d0565b919050565b6000604051905090565b600067ffffffffffffffff82111561423457614233614665565b5b61423d826146b2565b9050602081019050919050565b600067ffffffffffffffff82111561426557614264614665565b5b61426e826146b2565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006142d482614452565b91506142df83614452565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614314576143136145a9565b5b828201905092915050565b600061432a82614452565b915061433583614452565b925082614345576143446145d8565b5b828204905092915050565b600061435b82614452565b915061436683614452565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561439f5761439e6145a9565b5b828202905092915050565b60006143b582614452565b91506143c083614452565b9250828210156143d3576143d26145a9565b5b828203905092915050565b60006143e982614432565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561448957808201518184015260208101905061446e565b83811115614498576000848401525b50505050565b600060028204905060018216806144b657607f821691505b602082108114156144ca576144c9614607565b5b50919050565b6144d9826146b2565b810181811067ffffffffffffffff821117156144f8576144f7614665565b5b80604052505050565b600061450c82614452565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561453f5761453e6145a9565b5b600182019050919050565b600061455582614566565b9050919050565b6000819050919050565b6000614571826146c3565b9050919050565b600061458382614452565b915061458e83614452565b92508261459e5761459d6145d8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4552433732315061757361626c653a20746f6b656e207472616e73666572207760008201527f68696c6520706175736564000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f45786365656473206e756d626572000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f53656e646572206973206e6f742077686974656c697374656400000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f43616c6c6572206973206120636f6e7472616374000000000000000000000000600082015250565b7f56616c7565206973206f766572206f7220756e6465722070726963652e000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4d6178206c696d69740000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f53616c6520656e64000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f53656e646572206d61782070726573616c65206d696e7420616d6f756e74206160008201527f6c7265616479206d657400000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f5075626c69632073616c65206e6f74206f70656e207965740000000000000000600082015250565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b614dbb816143de565b8114614dc657600080fd5b50565b614dd2816143f0565b8114614ddd57600080fd5b50565b614de9816143fc565b8114614df457600080fd5b50565b614e0081614406565b8114614e0b57600080fd5b50565b614e1781614452565b8114614e2257600080fd5b5056fea26469706673582212206a4fba0c3356d0df3d68511986987d8c3b6ec5eb1c86f803b4d6ee4ba5a96c2b64736f6c63430008070033
Deployed Bytecode Sourcemap
42476:5135:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45868:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47447:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46553:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29173:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30732:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30255:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42931:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43792:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31482:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42970:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42587:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46898:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31892:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42164:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46444:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43894:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6317:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42691:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28867:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42637:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28597:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9216:103;;;;;;;;;;;;;:::i;:::-;;46715:175;;;;;;;;;;;;;:::i;:::-;;42799:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42749:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8565:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29342:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44029:481;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31025:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45590:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32148:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45745:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42845:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29517:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42896:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43004:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44518:611;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31251:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45137:264;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9474:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43064:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45868:134;45937:4;45961:33;45969:5;;45976:17;45982:10;45976:5;:17::i;:::-;45961:7;:33::i;:::-;45954:40;;45868:134;;;;:::o;47447:161::-;47540:4;47564:36;47588:11;47564:23;:36::i;:::-;47557:43;;47447:161;;;:::o;46553:154::-;8796:12;:10;:12::i;:::-;8785:23;;:7;:5;:7::i;:::-;:23;;;8777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46617:4:::1;46610:11;;:3;:11;;;46606:73;;;46638:8;:6;:8::i;:::-;46661:7;;46606:73;46689:10;:8;:10::i;:::-;8856:1;46553:154:::0;:::o;29173:100::-;29227:13;29260:5;29253:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29173:100;:::o;30732:221::-;30808:7;30836:16;30844:7;30836;:16::i;:::-;30828:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30921:15;:24;30937:7;30921:24;;;;;;;;;;;;;;;;;;;;;30914:31;;30732:221;;;:::o;30255:411::-;30336:13;30352:23;30367:7;30352:14;:23::i;:::-;30336:39;;30400:5;30394:11;;:2;:11;;;;30386:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;30494:5;30478:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;30503:37;30520:5;30527:12;:10;:12::i;:::-;30503:16;:37::i;:::-;30478:62;30456:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;30637:21;30646:2;30650:7;30637:8;:21::i;:::-;30325:341;30255:411;;:::o;42931:30::-;;;;;;;;;;;;;:::o;43792:94::-;43836:7;43863:15;;43856:22;;43792:94;:::o;31482:339::-;31677:41;31696:12;:10;:12::i;:::-;31710:7;31677:18;:41::i;:::-;31669:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31785:28;31795:4;31801:2;31805:7;31785:9;:28::i;:::-;31482:339;;;:::o;42970:25::-;;;;:::o;42587:43::-;42626:4;42587:43;:::o;46898:124::-;8796:12;:10;:12::i;:::-;8785:23;;:7;:5;:7::i;:::-;:23;;;8777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46998:16:::1;46980:15;;:34;;;;;;;;;;;;;;;;;;46898:124:::0;:::o;31892:185::-;32030:39;32047:4;32053:2;32057:7;32030:39;;;;;;;;;;;;:16;:39::i;:::-;31892:185;;;:::o;42164:245::-;42282:41;42301:12;:10;:12::i;:::-;42315:7;42282:18;:41::i;:::-;42274:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;42387:14;42393:7;42387:5;:14::i;:::-;42164:245;:::o;46444:101::-;8796:12;:10;:12::i;:::-;8785:23;;:7;:5;:7::i;:::-;:23;;;8777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46530:7:::1;46515:12;:22;;;;;;;;;;;;:::i;:::-;;46444:101:::0;:::o;43894:127::-;8796:12;:10;:12::i;:::-;8785:23;;:7;:5;:7::i;:::-;:23;;;8777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43972:3:::1;43955:14;;:20;;;;;;;;;;;;;;;;;;43991:22;44009:3;43991:22;;;;;;:::i;:::-;;;;;;;;43894:127:::0;:::o;6317:86::-;6364:4;6388:7;;;;;;;;;;;6381:14;;6317:86;:::o;42691:51::-;42731:11;42691:51;:::o;28867:239::-;28939:7;28959:13;28975:7;:16;28983:7;28975:16;;;;;;;;;;;;;;;;;;;;;28959:32;;29027:1;29010:19;;:5;:19;;;;29002:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29093:5;29086:12;;;28867:239;;;:::o;42637:47::-;42680:4;42637:47;:::o;28597:208::-;28669:7;28714:1;28697:19;;:5;:19;;;;28689:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;28781:9;:16;28791:5;28781:16;;;;;;;;;;;;;;;;28774:23;;28597:208;;;:::o;9216:103::-;8796:12;:10;:12::i;:::-;8785:23;;:7;:5;:7::i;:::-;:23;;;8777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9281:30:::1;9308:1;9281:18;:30::i;:::-;9216:103::o:0;46715:175::-;8796:12;:10;:12::i;:::-;8785:23;;:7;:5;:7::i;:::-;:23;;;8777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46766:15:::1;46784:21;46766:39;;46834:1;46824:7;:11;46816:20;;;::::0;::::1;;46847:35;46857:15;;;;;;;;;;;46874:7;46847:9;:35::i;:::-;46755:135;46715:175::o:0;42799:39::-;42837:1;42799:39;:::o;42749:43::-;42781:11;42749:43;:::o;8565:87::-;8611:7;8638:6;;;;;;;;;;;8631:13;;8565:87;:::o;29342:104::-;29398:13;29431:7;29424:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29342:104;:::o;44029:481::-;42626:4;43395:15;;:31;;43387:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;43470:7;:5;:7::i;:::-;43454:23;;:12;:10;:12::i;:::-;:23;;;43450:94;;43503:8;:6;:8::i;:::-;43502:9;43494:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;43450:94;43604:15:::1;43622:10;43604:28;;43662:9;43651:20;;:7;:20;;;43643:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;43738:1;43715:7;:19;;;:24;43707:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;44107:13:::2;44123;:11;:13::i;:::-;44107:29;;44155:14;;;;;;;;;;;44147:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;42626:4;44225:6;44217:5;:14;;;;:::i;:::-;:30;;44209:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;42837:1;44280:6;:21;;44272:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;44360:6;42781:11;44352:14;;;;:::i;:::-;44339:9;:27;44331:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;44418:9;44413:90;44437:6;44433:1;:10;44413:90;;;44465:26;44480:10;44465:14;:26::i;:::-;44445:3;;;;;:::i;:::-;;;;44413:90;;;;44096:414;43593:191:::1;44029:481:::0;:::o;31025:155::-;31120:52;31139:12;:10;:12::i;:::-;31153:8;31163;31120:18;:52::i;:::-;31025:155;;:::o;45590:147::-;45650:4;42886:1;45705:6;45674:16;:28;45691:10;45674:28;;;;;;;;;;;;;;;;:37;;;;:::i;:::-;:55;;45667:62;;45590:147;;;:::o;32148:328::-;32323:41;32342:12;:10;:12::i;:::-;32356:7;32323:18;:41::i;:::-;32315:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;32429:39;32443:4;32449:2;32453:7;32462:5;32429:13;:39::i;:::-;32148:328;;;;:::o;45745:115::-;8796:12;:10;:12::i;:::-;8785:23;;:7;:5;:7::i;:::-;:23;;;8777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45841:11:::1;45828:10;:24;;;;45745:115:::0;:::o;42845:42::-;42886:1;42845:42;:::o;29517:334::-;29590:13;29624:16;29632:7;29624;:16::i;:::-;29616:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;29705:21;29729:10;:8;:10::i;:::-;29705:34;;29781:1;29763:7;29757:21;:25;:86;;;;;;;;;;;;;;;;;29809:7;29818:18;:7;:16;:18::i;:::-;29792:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29757:86;29750:93;;;29517:334;;;:::o;42896:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43004:51::-;;;;;;;;;;;;;;;;;:::o;44518:611::-;42626:4;43395:15;;:31;;43387:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;43470:7;:5;:7::i;:::-;43454:23;;:12;:10;:12::i;:::-;:23;;;43450:94;;43503:8;:6;:8::i;:::-;43502:9;43494:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;43450:94;43604:15:::1;43622:10;43604:28;;43662:9;43651:20;;:7;:20;;;43643:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;43738:1;43715:7;:19;;;:24;43707:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;44630:13:::2;44646;:11;:13::i;:::-;44630:29;;44707:6;42731:11;44691:22;;;;:::i;:::-;44678:9;:35;44670:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;42680:4;44774:6;44766:5;:14;;;;:::i;:::-;:34;;44758:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;44833:20;44846:6;;44833:12;:20::i;:::-;44825:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;44902:21;44916:6;44902:13;:21::i;:::-;44894:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;45015:6;44983:16;:28;45000:10;44983:28;;;;;;;;;;;;;;;;:38;;;;;;;:::i;:::-;;;;;;;;45037:9;45032:90;45056:6;45052:1;:10;45032:90;;;45084:26;45099:10;45084:14;:26::i;:::-;45064:3;;;;;:::i;:::-;;;;45032:90;;;;44619:510;43593:191:::1;44518:611:::0;;;:::o;31251:164::-;31348:4;31372:18;:25;31391:5;31372:25;;;;;;;;;;;;;;;:35;31398:8;31372:35;;;;;;;;;;;;;;;;;;;;;;;;;31365:42;;31251:164;;;;:::o;45137:264::-;8796:12;:10;:12::i;:::-;8785:23;;:7;:5;:7::i;:::-;:23;;;8777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45200:13:::1;45216;:11;:13::i;:::-;45200:29;;42626:4;45256:6;45248:5;:14;;;;:::i;:::-;:30;;45240:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;45309:9;45304:90;45328:6;45324:1;:10;45304:90;;;45356:26;45371:10;45356:14;:26::i;:::-;45336:3;;;;;:::i;:::-;;;;45304:90;;;;45189:212;45137:264:::0;:::o;9474:201::-;8796:12;:10;:12::i;:::-;8785:23;;:7;:5;:7::i;:::-;:23;;;8777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9583:1:::1;9563:22;;:8;:22;;;;9555:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;9639:28;9658:8;9639:18;:28::i;:::-;9474:201:::0;:::o;43064:26::-;;;;;;;;;;;;;:::o;46187:128::-;46243:7;46297:8;46280:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;46270:37;;;;;;46263:44;;46187:128;;;:::o;46010:169::-;46097:4;46121:50;46140:5;;46121:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46147:10;;46159:11;46121:18;:50::i;:::-;46114:57;;46010:169;;;;;:::o;28228:305::-;28330:4;28382:25;28367:40;;;:11;:40;;;;:105;;;;28439:33;28424:48;;;:11;:48;;;;28367:105;:158;;;;28489:36;28513:11;28489:23;:36::i;:::-;28367:158;28347:178;;28228:305;;;:::o;4971:98::-;5024:7;5051:10;5044:17;;4971:98;:::o;7117:118::-;6643:8;:6;:8::i;:::-;6642:9;6634:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;7187:4:::1;7177:7;;:14;;;;;;;;;;;;;;;;;;7207:20;7214:12;:10;:12::i;:::-;7207:20;;;;;;:::i;:::-;;;;;;;;7117:118::o:0;7376:120::-;6920:8;:6;:8::i;:::-;6912:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;7445:5:::1;7435:7;;:15;;;;;;;;;;;;;;;;;;7466:22;7475:12;:10;:12::i;:::-;7466:22;;;;;;:::i;:::-;;;;;;;;7376:120::o:0;33986:127::-;34051:4;34103:1;34075:30;;:7;:16;34083:7;34075:16;;;;;;;;;;;;;;;;;;;;;:30;;;;34068:37;;33986:127;;;:::o;37968:174::-;38070:2;38043:15;:24;38059:7;38043:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;38126:7;38122:2;38088:46;;38097:23;38112:7;38097:14;:23::i;:::-;38088:46;;;;;;;;;;;;37968:174;;:::o;34280:348::-;34373:4;34398:16;34406:7;34398;:16::i;:::-;34390:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34474:13;34490:23;34505:7;34490:14;:23::i;:::-;34474:39;;34543:5;34532:16;;:7;:16;;;:51;;;;34576:7;34552:31;;:20;34564:7;34552:11;:20::i;:::-;:31;;;34532:51;:87;;;;34587:32;34604:5;34611:7;34587:16;:32::i;:::-;34532:87;34524:96;;;34280:348;;;;:::o;37272:578::-;37431:4;37404:31;;:23;37419:7;37404:14;:23::i;:::-;:31;;;37396:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;37514:1;37500:16;;:2;:16;;;;37492:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;37570:39;37591:4;37597:2;37601:7;37570:20;:39::i;:::-;37674:29;37691:1;37695:7;37674:8;:29::i;:::-;37735:1;37716:9;:15;37726:4;37716:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;37764:1;37747:9;:13;37757:2;37747:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;37795:2;37776:7;:16;37784:7;37776:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;37834:7;37830:2;37815:27;;37824:4;37815:27;;;;;;;;;;;;37272:578;;;:::o;36575:360::-;36635:13;36651:23;36666:7;36651:14;:23::i;:::-;36635:39;;36687:48;36708:5;36723:1;36727:7;36687:20;:48::i;:::-;36776:29;36793:1;36797:7;36776:8;:29::i;:::-;36838:1;36818:9;:16;36828:5;36818:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;36857:7;:16;36865:7;36857:16;;;;;;;;;;;;36850:23;;;;;;;;;;;36919:7;36915:1;36891:36;;36900:5;36891:36;;;;;;;;;;;;36624:311;36575:360;:::o;9835:191::-;9909:16;9928:6;;;;;;;;;;;9909:25;;9954:8;9945:6;;:17;;;;;;;;;;;;;;;;;;10009:8;9978:40;;9999:8;9978:40;;;;;;;;;;;;9898:128;9835:191;:::o;47030:180::-;47104:12;47122:8;:13;;47143:7;47122:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47103:52;;;47174:7;47166:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;47092:118;47030:180;;:::o;45409:173::-;45465:7;45475:13;:11;:13::i;:::-;45465:23;;45518:1;45499:15;;:20;;;;;;;:::i;:::-;;;;;;;;45530:14;45536:3;45541:2;45530:5;:14::i;:::-;45571:2;45560:14;;;;;;;;;;45454:128;45409:173;:::o;38284:315::-;38439:8;38430:17;;:5;:17;;;;38422:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;38526:8;38488:18;:25;38507:5;38488:25;;;;;;;;;;;;;;;:35;38514:8;38488:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;38572:8;38550:41;;38565:5;38550:41;;;38582:8;38550:41;;;;;;:::i;:::-;;;;;;;;38284:315;;;:::o;33358:::-;33515:28;33525:4;33531:2;33535:7;33515:9;:28::i;:::-;33562:48;33585:4;33591:2;33595:7;33604:5;33562:22;:48::i;:::-;33554:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;33358:315;;;;:::o;46323:113::-;46383:13;46416:12;46409:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46323:113;:::o;2533:723::-;2589:13;2819:1;2810:5;:10;2806:53;;;2837:10;;;;;;;;;;;;;;;;;;;;;2806:53;2869:12;2884:5;2869:20;;2900:14;2925:78;2940:1;2932:4;:9;2925:78;;2958:8;;;;;:::i;:::-;;;;2989:2;2981:10;;;;;:::i;:::-;;;2925:78;;;3013:19;3045:6;3035:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3013:39;;3063:154;3079:1;3070:5;:10;3063:154;;3107:1;3097:11;;;;;:::i;:::-;;;3174:2;3166:5;:10;;;;:::i;:::-;3153:2;:24;;;;:::i;:::-;3140:39;;3123:6;3130;3123:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3203:2;3194:11;;;;;:::i;:::-;;;3063:154;;;3241:6;3227:21;;;;;2533:723;;;;:::o;908:190::-;1033:4;1086;1057:25;1070:5;1077:4;1057:12;:25::i;:::-;:33;1050:40;;908:190;;;;;:::o;20997:157::-;21082:4;21121:25;21106:40;;;:11;:40;;;;21099:47;;20997:157;;;:::o;47218:221::-;47386:45;47413:4;47419:2;47423:7;47386:26;:45::i;:::-;47218:221;;;:::o;35964:382::-;36058:1;36044:16;;:2;:16;;;;36036:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36117:16;36125:7;36117;:16::i;:::-;36116:17;36108:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;36179:45;36208:1;36212:2;36216:7;36179:20;:45::i;:::-;36254:1;36237:9;:13;36247:2;36237:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36285:2;36266:7;:16;36274:7;36266:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36330:7;36326:2;36305:33;;36322:1;36305:33;;;;;;;;;;;;35964:382;;:::o;39164:799::-;39319:4;39340:15;:2;:13;;;:15::i;:::-;39336:620;;;39392:2;39376:36;;;39413:12;:10;:12::i;:::-;39427:4;39433:7;39442:5;39376:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39372:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39635:1;39618:6;:13;:18;39614:272;;;39661:60;;;;;;;;;;:::i;:::-;;;;;;;;39614:272;39836:6;39830:13;39821:6;39817:2;39813:15;39806:38;39372:529;39509:41;;;39499:51;;;:6;:51;;;;39492:58;;;;;39336:620;39940:4;39933:11;;39164:799;;;;;;;:::o;1460:701::-;1543:7;1563:20;1586:4;1563:27;;1606:9;1601:523;1625:5;:12;1621:1;:16;1601:523;;;1659:20;1682:5;1688:1;1682:8;;;;;;;;:::i;:::-;;;;;;;;1659:31;;1725:12;1709;:28;1705:408;;1879:12;1893;1862:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1852:55;;;;;;1837:70;;1705:408;;;2069:12;2083;2052:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2042:55;;;;;;2027:70;;1705:408;1644:480;1639:3;;;;;:::i;:::-;;;;1601:523;;;;2141:12;2134:19;;;1460:701;;;;:::o;41346:275::-;41490:45;41517:4;41523:2;41527:7;41490:26;:45::i;:::-;41557:8;:6;:8::i;:::-;41556:9;41548:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;41346:275;;;:::o;10853:387::-;10913:4;11121:12;11188:7;11176:20;11168:28;;11231:1;11224:4;:8;11217:15;;;10853:387;;;:::o;40535:126::-;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410: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:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:139::-;1762:5;1800:6;1787:20;1778:29;;1816:33;1843:5;1816:33;:::i;:::-;1716:139;;;;:::o;1861:137::-;1906:5;1944:6;1931:20;1922:29;;1960:32;1986:5;1960:32;:::i;:::-;1861:137;;;;:::o;2004:141::-;2060:5;2091:6;2085:13;2076:22;;2107:32;2133:5;2107:32;:::i;:::-;2004:141;;;;:::o;2164:338::-;2219:5;2268:3;2261:4;2253:6;2249:17;2245:27;2235:122;;2276:79;;:::i;:::-;2235:122;2393:6;2380:20;2418:78;2492:3;2484:6;2477:4;2469:6;2465:17;2418:78;:::i;:::-;2409:87;;2225:277;2164:338;;;;:::o;2522:340::-;2578:5;2627:3;2620:4;2612:6;2608:17;2604:27;2594:122;;2635:79;;:::i;:::-;2594:122;2752:6;2739:20;2777:79;2852:3;2844:6;2837:4;2829:6;2825:17;2777:79;:::i;:::-;2768:88;;2584:278;2522:340;;;;:::o;2868:139::-;2914:5;2952:6;2939:20;2930:29;;2968:33;2995:5;2968:33;:::i;:::-;2868:139;;;;:::o;3013:329::-;3072:6;3121:2;3109:9;3100:7;3096:23;3092:32;3089:119;;;3127:79;;:::i;:::-;3089:119;3247:1;3272:53;3317:7;3308:6;3297:9;3293:22;3272:53;:::i;:::-;3262:63;;3218:117;3013:329;;;;:::o;3348:474::-;3416:6;3424;3473:2;3461:9;3452:7;3448:23;3444:32;3441:119;;;3479:79;;:::i;:::-;3441:119;3599:1;3624:53;3669:7;3660:6;3649:9;3645:22;3624:53;:::i;:::-;3614:63;;3570:117;3726:2;3752:53;3797:7;3788:6;3777:9;3773:22;3752:53;:::i;:::-;3742:63;;3697:118;3348:474;;;;;:::o;3828:619::-;3905:6;3913;3921;3970:2;3958:9;3949:7;3945:23;3941:32;3938:119;;;3976:79;;:::i;:::-;3938:119;4096:1;4121:53;4166:7;4157:6;4146:9;4142:22;4121:53;:::i;:::-;4111:63;;4067:117;4223:2;4249:53;4294:7;4285:6;4274:9;4270:22;4249:53;:::i;:::-;4239:63;;4194:118;4351:2;4377:53;4422:7;4413:6;4402:9;4398:22;4377:53;:::i;:::-;4367:63;;4322:118;3828:619;;;;;:::o;4453:943::-;4548:6;4556;4564;4572;4621:3;4609:9;4600:7;4596:23;4592:33;4589:120;;;4628:79;;:::i;:::-;4589:120;4748:1;4773:53;4818:7;4809:6;4798:9;4794:22;4773:53;:::i;:::-;4763:63;;4719:117;4875:2;4901:53;4946:7;4937:6;4926:9;4922:22;4901:53;:::i;:::-;4891:63;;4846:118;5003:2;5029:53;5074:7;5065:6;5054:9;5050:22;5029:53;:::i;:::-;5019:63;;4974:118;5159:2;5148:9;5144:18;5131:32;5190:18;5182:6;5179:30;5176:117;;;5212:79;;:::i;:::-;5176:117;5317:62;5371:7;5362:6;5351:9;5347:22;5317:62;:::i;:::-;5307:72;;5102:287;4453:943;;;;;;;:::o;5402:468::-;5467:6;5475;5524:2;5512:9;5503:7;5499:23;5495:32;5492:119;;;5530:79;;:::i;:::-;5492:119;5650:1;5675:53;5720:7;5711:6;5700:9;5696:22;5675:53;:::i;:::-;5665:63;;5621:117;5777:2;5803:50;5845:7;5836:6;5825:9;5821:22;5803:50;:::i;:::-;5793:60;;5748:115;5402:468;;;;;:::o;5876:474::-;5944:6;5952;6001:2;5989:9;5980:7;5976:23;5972:32;5969:119;;;6007:79;;:::i;:::-;5969:119;6127:1;6152:53;6197:7;6188:6;6177:9;6173:22;6152:53;:::i;:::-;6142:63;;6098:117;6254:2;6280:53;6325:7;6316:6;6305:9;6301:22;6280:53;:::i;:::-;6270:63;;6225:118;5876:474;;;;;:::o;6356:559::-;6442:6;6450;6499:2;6487:9;6478:7;6474:23;6470:32;6467:119;;;6505:79;;:::i;:::-;6467:119;6653:1;6642:9;6638:17;6625:31;6683:18;6675:6;6672:30;6669:117;;;6705:79;;:::i;:::-;6669:117;6818:80;6890:7;6881:6;6870:9;6866:22;6818:80;:::i;:::-;6800:98;;;;6596:312;6356:559;;;;;:::o;6921:323::-;6977:6;7026:2;7014:9;7005:7;7001:23;6997:32;6994:119;;;7032:79;;:::i;:::-;6994:119;7152:1;7177:50;7219:7;7210:6;7199:9;7195:22;7177:50;:::i;:::-;7167:60;;7123:114;6921:323;;;;:::o;7250:329::-;7309:6;7358:2;7346:9;7337:7;7333:23;7329:32;7326:119;;;7364:79;;:::i;:::-;7326:119;7484:1;7509:53;7554:7;7545:6;7534:9;7530:22;7509:53;:::i;:::-;7499:63;;7455:117;7250:329;;;;:::o;7585:327::-;7643:6;7692:2;7680:9;7671:7;7667:23;7663:32;7660:119;;;7698:79;;:::i;:::-;7660:119;7818:1;7843:52;7887:7;7878:6;7867:9;7863:22;7843:52;:::i;:::-;7833:62;;7789:116;7585:327;;;;:::o;7918:349::-;7987:6;8036:2;8024:9;8015:7;8011:23;8007:32;8004:119;;;8042:79;;:::i;:::-;8004:119;8162:1;8187:63;8242:7;8233:6;8222:9;8218:22;8187:63;:::i;:::-;8177:73;;8133:127;7918:349;;;;:::o;8273:509::-;8342:6;8391:2;8379:9;8370:7;8366:23;8362:32;8359:119;;;8397:79;;:::i;:::-;8359:119;8545:1;8534:9;8530:17;8517:31;8575:18;8567:6;8564:30;8561:117;;;8597:79;;:::i;:::-;8561:117;8702:63;8757:7;8748:6;8737:9;8733:22;8702:63;:::i;:::-;8692:73;;8488:287;8273:509;;;;:::o;8788:329::-;8847:6;8896:2;8884:9;8875:7;8871:23;8867:32;8864:119;;;8902:79;;:::i;:::-;8864:119;9022:1;9047:53;9092:7;9083:6;9072:9;9068:22;9047:53;:::i;:::-;9037:63;;8993:117;8788:329;;;;:::o;9123:704::-;9218:6;9226;9234;9283:2;9271:9;9262:7;9258:23;9254:32;9251:119;;;9289:79;;:::i;:::-;9251:119;9409:1;9434:53;9479:7;9470:6;9459:9;9455:22;9434:53;:::i;:::-;9424:63;;9380:117;9564:2;9553:9;9549:18;9536:32;9595:18;9587:6;9584:30;9581:117;;;9617:79;;:::i;:::-;9581:117;9730:80;9802:7;9793:6;9782:9;9778:22;9730:80;:::i;:::-;9712:98;;;;9507:313;9123:704;;;;;:::o;9833:118::-;9920:24;9938:5;9920:24;:::i;:::-;9915:3;9908:37;9833:118;;:::o;9957:157::-;10062:45;10082:24;10100:5;10082:24;:::i;:::-;10062:45;:::i;:::-;10057:3;10050:58;9957:157;;:::o;10120:109::-;10201:21;10216:5;10201:21;:::i;:::-;10196:3;10189:34;10120:109;;:::o;10235:118::-;10322:24;10340:5;10322:24;:::i;:::-;10317:3;10310:37;10235:118;;:::o;10359:157::-;10464:45;10484:24;10502:5;10484:24;:::i;:::-;10464:45;:::i;:::-;10459:3;10452:58;10359:157;;:::o;10522:360::-;10608:3;10636:38;10668:5;10636:38;:::i;:::-;10690:70;10753:6;10748:3;10690:70;:::i;:::-;10683:77;;10769:52;10814:6;10809:3;10802:4;10795:5;10791:16;10769:52;:::i;:::-;10846:29;10868:6;10846:29;:::i;:::-;10841:3;10837:39;10830:46;;10612:270;10522:360;;;;:::o;10888:364::-;10976:3;11004:39;11037:5;11004:39;:::i;:::-;11059:71;11123:6;11118:3;11059:71;:::i;:::-;11052:78;;11139:52;11184:6;11179:3;11172:4;11165:5;11161:16;11139:52;:::i;:::-;11216:29;11238:6;11216:29;:::i;:::-;11211:3;11207:39;11200:46;;10980:272;10888:364;;;;:::o;11258:377::-;11364:3;11392:39;11425:5;11392:39;:::i;:::-;11447:89;11529:6;11524:3;11447:89;:::i;:::-;11440:96;;11545:52;11590:6;11585:3;11578:4;11571:5;11567:16;11545:52;:::i;:::-;11622:6;11617:3;11613:16;11606:23;;11368:267;11258:377;;;;:::o;11641:366::-;11783:3;11804:67;11868:2;11863:3;11804:67;:::i;:::-;11797:74;;11880:93;11969:3;11880:93;:::i;:::-;11998:2;11993:3;11989:12;11982:19;;11641:366;;;:::o;12013:::-;12155:3;12176:67;12240:2;12235:3;12176:67;:::i;:::-;12169:74;;12252:93;12341:3;12252:93;:::i;:::-;12370:2;12365:3;12361:12;12354:19;;12013:366;;;:::o;12385:::-;12527:3;12548:67;12612:2;12607:3;12548:67;:::i;:::-;12541:74;;12624:93;12713:3;12624:93;:::i;:::-;12742:2;12737:3;12733:12;12726:19;;12385:366;;;:::o;12757:::-;12899:3;12920:67;12984:2;12979:3;12920:67;:::i;:::-;12913:74;;12996:93;13085:3;12996:93;:::i;:::-;13114:2;13109:3;13105:12;13098:19;;12757:366;;;:::o;13129:::-;13271:3;13292:67;13356:2;13351:3;13292:67;:::i;:::-;13285:74;;13368:93;13457:3;13368:93;:::i;:::-;13486:2;13481:3;13477:12;13470:19;;13129:366;;;:::o;13501:::-;13643:3;13664:67;13728:2;13723:3;13664:67;:::i;:::-;13657:74;;13740:93;13829:3;13740:93;:::i;:::-;13858:2;13853:3;13849:12;13842:19;;13501:366;;;:::o;13873:::-;14015:3;14036:67;14100:2;14095:3;14036:67;:::i;:::-;14029:74;;14112:93;14201:3;14112:93;:::i;:::-;14230:2;14225:3;14221:12;14214:19;;13873:366;;;:::o;14245:::-;14387:3;14408:67;14472:2;14467:3;14408:67;:::i;:::-;14401:74;;14484:93;14573:3;14484:93;:::i;:::-;14602:2;14597:3;14593:12;14586:19;;14245:366;;;:::o;14617:::-;14759:3;14780:67;14844:2;14839:3;14780:67;:::i;:::-;14773:74;;14856:93;14945:3;14856:93;:::i;:::-;14974:2;14969:3;14965:12;14958:19;;14617:366;;;:::o;14989:::-;15131:3;15152:67;15216:2;15211:3;15152:67;:::i;:::-;15145:74;;15228:93;15317:3;15228:93;:::i;:::-;15346:2;15341:3;15337:12;15330:19;;14989:366;;;:::o;15361:::-;15503:3;15524:67;15588:2;15583:3;15524:67;:::i;:::-;15517:74;;15600:93;15689:3;15600:93;:::i;:::-;15718:2;15713:3;15709:12;15702:19;;15361:366;;;:::o;15733:365::-;15875:3;15896:66;15960:1;15955:3;15896:66;:::i;:::-;15889:73;;15971:93;16060:3;15971:93;:::i;:::-;16089:2;16084:3;16080:12;16073:19;;15733:365;;;:::o;16104:366::-;16246:3;16267:67;16331:2;16326:3;16267:67;:::i;:::-;16260:74;;16343:93;16432:3;16343:93;:::i;:::-;16461:2;16456:3;16452:12;16445:19;;16104:366;;;:::o;16476:::-;16618:3;16639:67;16703:2;16698:3;16639:67;:::i;:::-;16632:74;;16715:93;16804:3;16715:93;:::i;:::-;16833:2;16828:3;16824:12;16817:19;;16476:366;;;:::o;16848:::-;16990:3;17011:67;17075:2;17070:3;17011:67;:::i;:::-;17004:74;;17087:93;17176:3;17087:93;:::i;:::-;17205:2;17200:3;17196:12;17189:19;;16848:366;;;:::o;17220:::-;17362:3;17383:67;17447:2;17442:3;17383:67;:::i;:::-;17376:74;;17459:93;17548:3;17459:93;:::i;:::-;17577:2;17572:3;17568:12;17561:19;;17220:366;;;:::o;17592:::-;17734:3;17755:67;17819:2;17814:3;17755:67;:::i;:::-;17748:74;;17831:93;17920:3;17831:93;:::i;:::-;17949:2;17944:3;17940:12;17933:19;;17592:366;;;:::o;17964:::-;18106:3;18127:67;18191:2;18186:3;18127:67;:::i;:::-;18120:74;;18203:93;18292:3;18203:93;:::i;:::-;18321:2;18316:3;18312:12;18305:19;;17964:366;;;:::o;18336:365::-;18478:3;18499:66;18563:1;18558:3;18499:66;:::i;:::-;18492:73;;18574:93;18663:3;18574:93;:::i;:::-;18692:2;18687:3;18683:12;18676:19;;18336:365;;;:::o;18707:366::-;18849:3;18870:67;18934:2;18929:3;18870:67;:::i;:::-;18863:74;;18946:93;19035:3;18946:93;:::i;:::-;19064:2;19059:3;19055:12;19048:19;;18707:366;;;:::o;19079:::-;19221:3;19242:67;19306:2;19301:3;19242:67;:::i;:::-;19235:74;;19318:93;19407:3;19318:93;:::i;:::-;19436:2;19431:3;19427:12;19420:19;;19079:366;;;:::o;19451:::-;19593:3;19614:67;19678:2;19673:3;19614:67;:::i;:::-;19607:74;;19690:93;19779:3;19690:93;:::i;:::-;19808:2;19803:3;19799:12;19792:19;;19451:366;;;:::o;19823:::-;19965:3;19986:67;20050:2;20045:3;19986:67;:::i;:::-;19979:74;;20062:93;20151:3;20062:93;:::i;:::-;20180:2;20175:3;20171:12;20164:19;;19823:366;;;:::o;20195:::-;20337:3;20358:67;20422:2;20417:3;20358:67;:::i;:::-;20351:74;;20434:93;20523:3;20434:93;:::i;:::-;20552:2;20547:3;20543:12;20536:19;;20195:366;;;:::o;20567:::-;20709:3;20730:67;20794:2;20789:3;20730:67;:::i;:::-;20723:74;;20806:93;20895:3;20806:93;:::i;:::-;20924:2;20919:3;20915:12;20908:19;;20567:366;;;:::o;20939:398::-;21098:3;21119:83;21200:1;21195:3;21119:83;:::i;:::-;21112:90;;21211:93;21300:3;21211:93;:::i;:::-;21329:1;21324:3;21320:11;21313:18;;20939:398;;;:::o;21343:366::-;21485:3;21506:67;21570:2;21565:3;21506:67;:::i;:::-;21499:74;;21582:93;21671:3;21582:93;:::i;:::-;21700:2;21695:3;21691:12;21684:19;;21343:366;;;:::o;21715:::-;21857:3;21878:67;21942:2;21937:3;21878:67;:::i;:::-;21871:74;;21954:93;22043:3;21954:93;:::i;:::-;22072:2;22067:3;22063:12;22056:19;;21715:366;;;:::o;22087:::-;22229:3;22250:67;22314:2;22309:3;22250:67;:::i;:::-;22243:74;;22326:93;22415:3;22326:93;:::i;:::-;22444:2;22439:3;22435:12;22428:19;;22087:366;;;:::o;22459:::-;22601:3;22622:67;22686:2;22681:3;22622:67;:::i;:::-;22615:74;;22698:93;22787:3;22698:93;:::i;:::-;22816:2;22811:3;22807:12;22800:19;;22459:366;;;:::o;22831:118::-;22918:24;22936:5;22918:24;:::i;:::-;22913:3;22906:37;22831:118;;:::o;22955:256::-;23067:3;23082:75;23153:3;23144:6;23082:75;:::i;:::-;23182:2;23177:3;23173:12;23166:19;;23202:3;23195:10;;22955:256;;;;:::o;23217:397::-;23357:3;23372:75;23443:3;23434:6;23372:75;:::i;:::-;23472:2;23467:3;23463:12;23456:19;;23485:75;23556:3;23547:6;23485:75;:::i;:::-;23585:2;23580:3;23576:12;23569:19;;23605:3;23598:10;;23217:397;;;;;:::o;23620:435::-;23800:3;23822:95;23913:3;23904:6;23822:95;:::i;:::-;23815:102;;23934:95;24025:3;24016:6;23934:95;:::i;:::-;23927:102;;24046:3;24039:10;;23620:435;;;;;:::o;24061:379::-;24245:3;24267:147;24410:3;24267:147;:::i;:::-;24260:154;;24431:3;24424:10;;24061:379;;;:::o;24446:222::-;24539:4;24577:2;24566:9;24562:18;24554:26;;24590:71;24658:1;24647:9;24643:17;24634:6;24590:71;:::i;:::-;24446:222;;;;:::o;24674:640::-;24869:4;24907:3;24896:9;24892:19;24884:27;;24921:71;24989:1;24978:9;24974:17;24965:6;24921:71;:::i;:::-;25002:72;25070:2;25059:9;25055:18;25046:6;25002:72;:::i;:::-;25084;25152:2;25141:9;25137:18;25128:6;25084:72;:::i;:::-;25203:9;25197:4;25193:20;25188:2;25177:9;25173:18;25166:48;25231:76;25302:4;25293:6;25231:76;:::i;:::-;25223:84;;24674:640;;;;;;;:::o;25320:210::-;25407:4;25445:2;25434:9;25430:18;25422:26;;25458:65;25520:1;25509:9;25505:17;25496:6;25458:65;:::i;:::-;25320:210;;;;:::o;25536:222::-;25629:4;25667:2;25656:9;25652:18;25644:26;;25680:71;25748:1;25737:9;25733:17;25724:6;25680:71;:::i;:::-;25536:222;;;;:::o;25764:313::-;25877:4;25915:2;25904:9;25900:18;25892:26;;25964:9;25958:4;25954:20;25950:1;25939:9;25935:17;25928:47;25992:78;26065:4;26056:6;25992:78;:::i;:::-;25984:86;;25764:313;;;;:::o;26083:419::-;26249:4;26287:2;26276:9;26272:18;26264:26;;26336:9;26330:4;26326:20;26322:1;26311:9;26307:17;26300:47;26364:131;26490:4;26364:131;:::i;:::-;26356:139;;26083:419;;;:::o;26508:::-;26674:4;26712:2;26701:9;26697:18;26689:26;;26761:9;26755:4;26751:20;26747:1;26736:9;26732:17;26725:47;26789:131;26915:4;26789:131;:::i;:::-;26781:139;;26508:419;;;:::o;26933:::-;27099:4;27137:2;27126:9;27122:18;27114:26;;27186:9;27180:4;27176:20;27172:1;27161:9;27157:17;27150:47;27214:131;27340:4;27214:131;:::i;:::-;27206:139;;26933:419;;;:::o;27358:::-;27524:4;27562:2;27551:9;27547:18;27539:26;;27611:9;27605:4;27601:20;27597:1;27586:9;27582:17;27575:47;27639:131;27765:4;27639:131;:::i;:::-;27631:139;;27358:419;;;:::o;27783:::-;27949:4;27987:2;27976:9;27972:18;27964:26;;28036:9;28030:4;28026:20;28022:1;28011:9;28007:17;28000:47;28064:131;28190:4;28064:131;:::i;:::-;28056:139;;27783:419;;;:::o;28208:::-;28374:4;28412:2;28401:9;28397:18;28389:26;;28461:9;28455:4;28451:20;28447:1;28436:9;28432:17;28425:47;28489:131;28615:4;28489:131;:::i;:::-;28481:139;;28208:419;;;:::o;28633:::-;28799:4;28837:2;28826:9;28822:18;28814:26;;28886:9;28880:4;28876:20;28872:1;28861:9;28857:17;28850:47;28914:131;29040:4;28914:131;:::i;:::-;28906:139;;28633:419;;;:::o;29058:::-;29224:4;29262:2;29251:9;29247:18;29239:26;;29311:9;29305:4;29301:20;29297:1;29286:9;29282:17;29275:47;29339:131;29465:4;29339:131;:::i;:::-;29331:139;;29058:419;;;:::o;29483:::-;29649:4;29687:2;29676:9;29672:18;29664:26;;29736:9;29730:4;29726:20;29722:1;29711:9;29707:17;29700:47;29764:131;29890:4;29764:131;:::i;:::-;29756:139;;29483:419;;;:::o;29908:::-;30074:4;30112:2;30101:9;30097:18;30089:26;;30161:9;30155:4;30151:20;30147:1;30136:9;30132:17;30125:47;30189:131;30315:4;30189:131;:::i;:::-;30181:139;;29908:419;;;:::o;30333:::-;30499:4;30537:2;30526:9;30522:18;30514:26;;30586:9;30580:4;30576:20;30572:1;30561:9;30557:17;30550:47;30614:131;30740:4;30614:131;:::i;:::-;30606:139;;30333:419;;;:::o;30758:::-;30924:4;30962:2;30951:9;30947:18;30939:26;;31011:9;31005:4;31001:20;30997:1;30986:9;30982:17;30975:47;31039:131;31165:4;31039:131;:::i;:::-;31031:139;;30758:419;;;:::o;31183:::-;31349:4;31387:2;31376:9;31372:18;31364:26;;31436:9;31430:4;31426:20;31422:1;31411:9;31407:17;31400:47;31464:131;31590:4;31464:131;:::i;:::-;31456:139;;31183:419;;;:::o;31608:::-;31774:4;31812:2;31801:9;31797:18;31789:26;;31861:9;31855:4;31851:20;31847:1;31836:9;31832:17;31825:47;31889:131;32015:4;31889:131;:::i;:::-;31881:139;;31608:419;;;:::o;32033:::-;32199:4;32237:2;32226:9;32222:18;32214:26;;32286:9;32280:4;32276:20;32272:1;32261:9;32257:17;32250:47;32314:131;32440:4;32314:131;:::i;:::-;32306:139;;32033:419;;;:::o;32458:::-;32624:4;32662:2;32651:9;32647:18;32639:26;;32711:9;32705:4;32701:20;32697:1;32686:9;32682:17;32675:47;32739:131;32865:4;32739:131;:::i;:::-;32731:139;;32458:419;;;:::o;32883:::-;33049:4;33087:2;33076:9;33072:18;33064:26;;33136:9;33130:4;33126:20;33122:1;33111:9;33107:17;33100:47;33164:131;33290:4;33164:131;:::i;:::-;33156:139;;32883:419;;;:::o;33308:::-;33474:4;33512:2;33501:9;33497:18;33489:26;;33561:9;33555:4;33551:20;33547:1;33536:9;33532:17;33525:47;33589:131;33715:4;33589:131;:::i;:::-;33581:139;;33308:419;;;:::o;33733:::-;33899:4;33937:2;33926:9;33922:18;33914:26;;33986:9;33980:4;33976:20;33972:1;33961:9;33957:17;33950:47;34014:131;34140:4;34014:131;:::i;:::-;34006:139;;33733:419;;;:::o;34158:::-;34324:4;34362:2;34351:9;34347:18;34339:26;;34411:9;34405:4;34401:20;34397:1;34386:9;34382:17;34375:47;34439:131;34565:4;34439:131;:::i;:::-;34431:139;;34158:419;;;:::o;34583:::-;34749:4;34787:2;34776:9;34772:18;34764:26;;34836:9;34830:4;34826:20;34822:1;34811:9;34807:17;34800:47;34864:131;34990:4;34864:131;:::i;:::-;34856:139;;34583:419;;;:::o;35008:::-;35174:4;35212:2;35201:9;35197:18;35189:26;;35261:9;35255:4;35251:20;35247:1;35236:9;35232:17;35225:47;35289:131;35415:4;35289:131;:::i;:::-;35281:139;;35008:419;;;:::o;35433:::-;35599:4;35637:2;35626:9;35622:18;35614:26;;35686:9;35680:4;35676:20;35672:1;35661:9;35657:17;35650:47;35714:131;35840:4;35714:131;:::i;:::-;35706:139;;35433:419;;;:::o;35858:::-;36024:4;36062:2;36051:9;36047:18;36039:26;;36111:9;36105:4;36101:20;36097:1;36086:9;36082:17;36075:47;36139:131;36265:4;36139:131;:::i;:::-;36131:139;;35858:419;;;:::o;36283:::-;36449:4;36487:2;36476:9;36472:18;36464:26;;36536:9;36530:4;36526:20;36522:1;36511:9;36507:17;36500:47;36564:131;36690:4;36564:131;:::i;:::-;36556:139;;36283:419;;;:::o;36708:::-;36874:4;36912:2;36901:9;36897:18;36889:26;;36961:9;36955:4;36951:20;36947:1;36936:9;36932:17;36925:47;36989:131;37115:4;36989:131;:::i;:::-;36981:139;;36708:419;;;:::o;37133:::-;37299:4;37337:2;37326:9;37322:18;37314:26;;37386:9;37380:4;37376:20;37372:1;37361:9;37357:17;37350:47;37414:131;37540:4;37414:131;:::i;:::-;37406:139;;37133:419;;;:::o;37558:::-;37724:4;37762:2;37751:9;37747:18;37739:26;;37811:9;37805:4;37801:20;37797:1;37786:9;37782:17;37775:47;37839:131;37965:4;37839:131;:::i;:::-;37831:139;;37558:419;;;:::o;37983:::-;38149:4;38187:2;38176:9;38172:18;38164:26;;38236:9;38230:4;38226:20;38222:1;38211:9;38207:17;38200:47;38264:131;38390:4;38264:131;:::i;:::-;38256:139;;37983:419;;;:::o;38408:222::-;38501:4;38539:2;38528:9;38524:18;38516:26;;38552:71;38620:1;38609:9;38605:17;38596:6;38552:71;:::i;:::-;38408:222;;;;:::o;38636:129::-;38670:6;38697:20;;:::i;:::-;38687:30;;38726:33;38754:4;38746:6;38726:33;:::i;:::-;38636:129;;;:::o;38771:75::-;38804:6;38837:2;38831:9;38821:19;;38771:75;:::o;38852:307::-;38913:4;39003:18;38995:6;38992:30;38989:56;;;39025:18;;:::i;:::-;38989:56;39063:29;39085:6;39063:29;:::i;:::-;39055:37;;39147:4;39141;39137:15;39129:23;;38852:307;;;:::o;39165:308::-;39227:4;39317:18;39309:6;39306:30;39303:56;;;39339:18;;:::i;:::-;39303:56;39377:29;39399:6;39377:29;:::i;:::-;39369:37;;39461:4;39455;39451:15;39443:23;;39165:308;;;:::o;39479:98::-;39530:6;39564:5;39558:12;39548:22;;39479:98;;;:::o;39583:99::-;39635:6;39669:5;39663:12;39653:22;;39583:99;;;:::o;39688:168::-;39771:11;39805:6;39800:3;39793:19;39845:4;39840:3;39836:14;39821:29;;39688:168;;;;:::o;39862:147::-;39963:11;40000:3;39985:18;;39862:147;;;;:::o;40015:169::-;40099:11;40133:6;40128:3;40121:19;40173:4;40168:3;40164:14;40149:29;;40015:169;;;;:::o;40190:148::-;40292:11;40329:3;40314:18;;40190:148;;;;:::o;40344:305::-;40384:3;40403:20;40421:1;40403:20;:::i;:::-;40398:25;;40437:20;40455:1;40437:20;:::i;:::-;40432:25;;40591:1;40523:66;40519:74;40516:1;40513:81;40510:107;;;40597:18;;:::i;:::-;40510:107;40641:1;40638;40634:9;40627:16;;40344:305;;;;:::o;40655:185::-;40695:1;40712:20;40730:1;40712:20;:::i;:::-;40707:25;;40746:20;40764:1;40746:20;:::i;:::-;40741:25;;40785:1;40775:35;;40790:18;;:::i;:::-;40775:35;40832:1;40829;40825:9;40820:14;;40655:185;;;;:::o;40846:348::-;40886:7;40909:20;40927:1;40909:20;:::i;:::-;40904:25;;40943:20;40961:1;40943:20;:::i;:::-;40938:25;;41131:1;41063:66;41059:74;41056:1;41053:81;41048:1;41041:9;41034:17;41030:105;41027:131;;;41138:18;;:::i;:::-;41027:131;41186:1;41183;41179:9;41168:20;;40846:348;;;;:::o;41200:191::-;41240:4;41260:20;41278:1;41260:20;:::i;:::-;41255:25;;41294:20;41312:1;41294:20;:::i;:::-;41289:25;;41333:1;41330;41327:8;41324:34;;;41338:18;;:::i;:::-;41324:34;41383:1;41380;41376:9;41368:17;;41200:191;;;;:::o;41397:96::-;41434:7;41463:24;41481:5;41463:24;:::i;:::-;41452:35;;41397:96;;;:::o;41499:90::-;41533:7;41576:5;41569:13;41562:21;41551:32;;41499:90;;;:::o;41595:77::-;41632:7;41661:5;41650:16;;41595:77;;;:::o;41678:149::-;41714:7;41754:66;41747:5;41743:78;41732:89;;41678:149;;;:::o;41833:126::-;41870:7;41910:42;41903:5;41899:54;41888:65;;41833:126;;;:::o;41965:77::-;42002:7;42031:5;42020:16;;41965:77;;;:::o;42048:154::-;42132:6;42127:3;42122;42109:30;42194:1;42185:6;42180:3;42176:16;42169:27;42048:154;;;:::o;42208:307::-;42276:1;42286:113;42300:6;42297:1;42294:13;42286:113;;;42385:1;42380:3;42376:11;42370:18;42366:1;42361:3;42357:11;42350:39;42322:2;42319:1;42315:10;42310:15;;42286:113;;;42417:6;42414:1;42411:13;42408:101;;;42497:1;42488:6;42483:3;42479:16;42472:27;42408:101;42257:258;42208:307;;;:::o;42521:320::-;42565:6;42602:1;42596:4;42592:12;42582:22;;42649:1;42643:4;42639:12;42670:18;42660:81;;42726:4;42718:6;42714:17;42704:27;;42660:81;42788:2;42780:6;42777:14;42757:18;42754:38;42751:84;;;42807:18;;:::i;:::-;42751:84;42572:269;42521:320;;;:::o;42847:281::-;42930:27;42952:4;42930:27;:::i;:::-;42922:6;42918:40;43060:6;43048:10;43045:22;43024:18;43012:10;43009:34;43006:62;43003:88;;;43071:18;;:::i;:::-;43003:88;43111:10;43107:2;43100:22;42890:238;42847:281;;:::o;43134:233::-;43173:3;43196:24;43214:5;43196:24;:::i;:::-;43187:33;;43242:66;43235:5;43232:77;43229:103;;;43312:18;;:::i;:::-;43229:103;43359:1;43352:5;43348:13;43341:20;;43134:233;;;:::o;43373:100::-;43412:7;43441:26;43461:5;43441:26;:::i;:::-;43430:37;;43373:100;;;:::o;43479:79::-;43518:7;43547:5;43536:16;;43479:79;;;:::o;43564:94::-;43603:7;43632:20;43646:5;43632:20;:::i;:::-;43621:31;;43564:94;;;:::o;43664:176::-;43696:1;43713:20;43731:1;43713:20;:::i;:::-;43708:25;;43747:20;43765:1;43747:20;:::i;:::-;43742:25;;43786:1;43776:35;;43791:18;;:::i;:::-;43776:35;43832:1;43829;43825:9;43820:14;;43664:176;;;;:::o;43846:180::-;43894:77;43891:1;43884:88;43991:4;43988:1;43981:15;44015:4;44012:1;44005:15;44032:180;44080:77;44077:1;44070:88;44177:4;44174:1;44167:15;44201:4;44198:1;44191:15;44218:180;44266:77;44263:1;44256:88;44363:4;44360:1;44353:15;44387:4;44384:1;44377:15;44404:180;44452:77;44449:1;44442:88;44549:4;44546:1;44539:15;44573:4;44570:1;44563:15;44590:180;44638:77;44635:1;44628:88;44735:4;44732:1;44725:15;44759:4;44756:1;44749:15;44776:117;44885:1;44882;44875:12;44899:117;45008:1;45005;44998:12;45022:117;45131:1;45128;45121:12;45145:117;45254:1;45251;45244:12;45268:117;45377:1;45374;45367:12;45391:117;45500:1;45497;45490:12;45514:102;45555:6;45606:2;45602:7;45597:2;45590:5;45586:14;45582:28;45572:38;;45514:102;;;:::o;45622:94::-;45655:8;45703:5;45699:2;45695:14;45674:35;;45622:94;;;:::o;45722:230::-;45862:34;45858:1;45850:6;45846:14;45839:58;45931:13;45926:2;45918:6;45914:15;45907:38;45722:230;:::o;45958:170::-;46098:22;46094:1;46086:6;46082:14;46075:46;45958:170;:::o;46134:164::-;46274:16;46270:1;46262:6;46258:14;46251:40;46134:164;:::o;46304:237::-;46444:34;46440:1;46432:6;46428:14;46421:58;46513:20;46508:2;46500:6;46496:15;46489:45;46304:237;:::o;46547:175::-;46687:27;46683:1;46675:6;46671:14;46664:51;46547:175;:::o;46728:225::-;46868:34;46864:1;46856:6;46852:14;46845:58;46937:8;46932:2;46924:6;46920:15;46913:33;46728:225;:::o;46959:178::-;47099:30;47095:1;47087:6;47083:14;47076:54;46959:178;:::o;47143:170::-;47283:22;47279:1;47271:6;47267:14;47260:46;47143:170;:::o;47319:179::-;47459:31;47455:1;47447:6;47443:14;47436:55;47319:179;:::o;47504:223::-;47644:34;47640:1;47632:6;47628:14;47621:58;47713:6;47708:2;47700:6;47696:15;47689:31;47504:223;:::o;47733:175::-;47873:27;47869:1;47861:6;47857:14;47850:51;47733:175;:::o;47914:159::-;48054:11;48050:1;48042:6;48038:14;48031:35;47914:159;:::o;48079:231::-;48219:34;48215:1;48207:6;48203:14;48196:58;48288:14;48283:2;48275:6;48271:15;48264:39;48079:231;:::o;48316:166::-;48456:18;48452:1;48444:6;48440:14;48433:42;48316:166;:::o;48488:243::-;48628:34;48624:1;48616:6;48612:14;48605:58;48697:26;48692:2;48684:6;48680:15;48673:51;48488:243;:::o;48737:229::-;48877:34;48873:1;48865:6;48861:14;48854:58;48946:12;48941:2;48933:6;48929:15;48922:37;48737:229;:::o;48972:228::-;49112:34;49108:1;49100:6;49096:14;49089:58;49181:11;49176:2;49168:6;49164:15;49157:36;48972:228;:::o;49206:182::-;49346:34;49342:1;49334:6;49330:14;49323:58;49206:182;:::o;49394:158::-;49534:10;49530:1;49522:6;49518:14;49511:34;49394:158;:::o;49558:231::-;49698:34;49694:1;49686:6;49682:14;49675:58;49767:14;49762:2;49754:6;49750:15;49743:39;49558:231;:::o;49795:182::-;49935:34;49931:1;49923:6;49919:14;49912:58;49795:182;:::o;49983:228::-;50123:34;50119:1;50111:6;50107:14;50100:58;50192:11;50187:2;50179:6;50175:15;50168:36;49983:228;:::o;50217:234::-;50357:34;50353:1;50345:6;50341:14;50334:58;50426:17;50421:2;50413:6;50409:15;50402:42;50217:234;:::o;50457:220::-;50597:34;50593:1;50585:6;50581:14;50574:58;50666:3;50661:2;50653:6;50649:15;50642:28;50457:220;:::o;50683:229::-;50823:34;50819:1;50811:6;50807:14;50800:58;50892:12;50887:2;50879:6;50875:15;50868:37;50683:229;:::o;50918:114::-;;:::o;51038:166::-;51178:18;51174:1;51166:6;51162:14;51155:42;51038:166;:::o;51210:236::-;51350:34;51346:1;51338:6;51334:14;51327:58;51419:19;51414:2;51406:6;51402:15;51395:44;51210:236;:::o;51452:174::-;51592:26;51588:1;51580:6;51576:14;51569:50;51452:174;:::o;51632:235::-;51772:34;51768:1;51760:6;51756:14;51749:58;51841:18;51836:2;51828:6;51824:15;51817:43;51632:235;:::o;51873:122::-;51946:24;51964:5;51946:24;:::i;:::-;51939:5;51936:35;51926:63;;51985:1;51982;51975:12;51926:63;51873:122;:::o;52001:116::-;52071:21;52086:5;52071:21;:::i;:::-;52064:5;52061:32;52051:60;;52107:1;52104;52097:12;52051:60;52001:116;:::o;52123:122::-;52196:24;52214:5;52196:24;:::i;:::-;52189:5;52186:35;52176:63;;52235:1;52232;52225:12;52176:63;52123:122;:::o;52251:120::-;52323:23;52340:5;52323:23;:::i;:::-;52316:5;52313:34;52303:62;;52361:1;52358;52351:12;52303:62;52251:120;:::o;52377:122::-;52450:24;52468:5;52450:24;:::i;:::-;52443:5;52440:35;52430:63;;52489:1;52486;52479:12;52430:63;52377:122;:::o
Swarm Source
ipfs://6a4fba0c3356d0df3d68511986987d8c3b6ec5eb1c86f803b4d6ee4ba5a96c2b
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.