ERC-721
Overview
Max Total Supply
10,000 CCC
Holders
1,604
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
5 CCCLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CreatureCultureCollection
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-16 */ // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: CreatureCultureCollection.sol pragma solidity >= 0.7.0 < 0.9.0; contract CreatureCultureCollection is ERC721, Ownable { using Strings for uint256; using Counters for Counters.Counter; Counters.Counter private supply; // URIs string public uriPrefix = "https://creatureculturecollection.com/collection/jsons/"; string public uriSuffix = ".json"; string public hiddenMetadataUri; // Costs uint256 public presaleCost = 0.02 ether; uint256 public publicsaleCost = 0.03 ether; // Supplies uint256 public maxSupply = 10001; uint256 public maxSupplyLimit = 10000; // Per Address & TX Limits uint256 public nftPresalePerAddressLimit = 8; uint256 public nftPublicsalePerAddressLimit = 12; uint256 public maxMintAmountPerTx = 5; // Stats bool public paused = false; bool public presale = true; bool public onlyWhitelisted = true; // Whitelist Addresses mapping(address => bool) public whitelistedAddressesList; // Minted Balances mapping(address => uint256) public addressPresaleMintedBalance; mapping(address => uint256) public addressPublicsaleMintedBalance; // Constructor constructor() ERC721("Creature Culture Collection", "CCC") {} // Mint Compliance modifier mintCompliance(uint256 _mintAmount) { if(presale == true) { if(onlyWhitelisted == true) { require(isInWhiteList(msg.sender), "MSG: User is not whitelisted"); } uint256 ownerMintedCount = addressPresaleMintedBalance[msg.sender]; require(ownerMintedCount + _mintAmount <= nftPresalePerAddressLimit, "MSG: Max NFT per address exceeded for presale"); } else { uint256 ownerMintedCount = addressPublicsaleMintedBalance[msg.sender]; require(ownerMintedCount + _mintAmount <= nftPublicsalePerAddressLimit, "MSG: Max NFT per address exceeded for publicsale"); } require(_mintAmount > 0 && _mintAmount <= maxMintAmountPerTx, "MSG: Invalid mint amount"); require(supply.current() + _mintAmount <= maxSupplyLimit, "MSG: Max supply exceeded"); _; } // Total Supply function totalSupply() public view returns (uint256) { return supply.current(); } // Mint function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) { require(!paused, "MSG: The contract is paused"); if(presale == true) { require(msg.value >= presaleCost * _mintAmount, "MSG: Insufficient funds"); } else { require(msg.value >= publicsaleCost * _mintAmount, "MSG: Insufficient funds"); } _mintLoop(msg.sender, _mintAmount); withdraw(); } // Mint Functions function ownerMint(uint256 _mintAmount) public onlyOwner { require(!paused, "MSG: The contract is paused"); _mintLoop(msg.sender, _mintAmount); } function ownerMintSpecific(uint256 _tokenId) public onlyOwner { require(!paused, "MSG: The contract is paused"); _safeMint(msg.sender, _tokenId); if(presale == true) { addressPublicsaleMintedBalance[msg.sender]++; } else { addressPublicsaleMintedBalance[msg.sender]++; } } function mintForAddress(uint256 _mintAmount, address _receiver) public mintCompliance(_mintAmount) onlyOwner { _mintLoop(_receiver, _mintAmount); } // Wallet Of Owner function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount); uint256 currentTokenId = 1; uint256 ownedTokenIndex = 0; while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) { address currentTokenOwner = ownerOf(currentTokenId); if (currentTokenOwner == _owner) { ownedTokenIds[ownedTokenIndex] = currentTokenId; ownedTokenIndex++; } currentTokenId++; } return ownedTokenIds; } // Token URI function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require(_exists(_tokenId), "MSG: URI query for nonexistent token"); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix)) : ""; } // Presale Cost function setPresaleCost(uint256 _cost) public onlyOwner { presaleCost = _cost; } // Publicsale Cost function setPublicsaleCost(uint256 _cost) public onlyOwner { publicsaleCost = _cost; } // Set NFT Publicsale Per Address Limit function setNFTPublicsalePerAddressLimit(uint256 _cost) public onlyOwner { nftPublicsalePerAddressLimit = _cost; } // Set NFT Presale Per Address Limit function setNFTPresalePerAddressLimit(uint256 _cost) public onlyOwner { nftPresalePerAddressLimit = _cost; } // Set URI Prefix function setUriPrefix(string memory _uriPrefix) public onlyOwner { uriPrefix = _uriPrefix; } // Set URI Suffix function setUriSuffix(string memory _uriSuffix) public onlyOwner { uriSuffix = _uriSuffix; } // Set Paused function setPaused(bool _state) public onlyOwner { paused = _state; } // Set Presale function setPresale(bool _state) public onlyOwner { presale = _state; } // Withdraw function withdraw() public payable { (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); } // Mint Loop function _mintLoop(address _receiver, uint256 _mintAmount) internal { for (uint256 i = 0; i < _mintAmount; i++) { supply.increment(); _safeMint(_receiver, supply.current()); if(presale == true) { addressPresaleMintedBalance[msg.sender]++; } else { addressPublicsaleMintedBalance[msg.sender]++; } } } // Base URI function _baseURI() internal view virtual override returns (string memory) { return uriPrefix; } // Set Only Whitelisted function setOnlyWhitelisted(bool _state) public onlyOwner { onlyWhitelisted = _state; } // Whitelist Functions function addToWhiteList(address _addr) public onlyOwner { whitelistedAddressesList[_addr] = true; } function addArrayToWhiteList(address[] memory _addrs) public onlyOwner { for (uint256 i = 0;i< _addrs.length; i++) { whitelistedAddressesList[_addrs[i]] = true; } } function removeFromWhiteList(address _addr) public onlyOwner { whitelistedAddressesList[_addr] = false; } function isInWhiteList(address _addr) public view returns (bool) { return whitelistedAddressesList[_addr] || _addr == owner(); } }
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":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"_addrs","type":"address[]"}],"name":"addArrayToWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"addToWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressPresaleMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressPublicsaleMintedBalance","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"isInWhiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupplyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPresalePerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPublicsalePerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"ownerMintSpecific","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":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicsaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"removeFromWhiteList","outputs":[],"stateMutability":"nonpayable","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":"uint256","name":"_cost","type":"uint256"}],"name":"setNFTPresalePerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setNFTPublicsalePerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setPresaleCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setPublicsaleCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistedAddressesList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
608060405260405180606001604052806037815260200162005714603791396008908051906020019062000035929190620002a8565b506040518060400160405280600581526020017f2e6a736f6e0000000000000000000000000000000000000000000000000000008152506009908051906020019062000083929190620002a8565b5066470de4df820000600b55666a94d74f430000600c55612711600d55612710600e556008600f55600c60105560056011556000601260006101000a81548160ff0219169083151502179055506001601260016101000a81548160ff0219169083151502179055506001601260026101000a81548160ff0219169083151502179055503480156200011357600080fd5b506040518060400160405280601b81526020017f43726561747572652043756c7475726520436f6c6c656374696f6e00000000008152506040518060400160405280600381526020017f4343430000000000000000000000000000000000000000000000000000000000815250816000908051906020019062000198929190620002a8565b508060019080519060200190620001b1929190620002a8565b505050620001d4620001c8620001da60201b60201c565b620001e260201b60201c565b620003bd565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002b69062000358565b90600052602060002090601f016020900481019282620002da576000855562000326565b82601f10620002f557805160ff191683800117855562000326565b8280016001018555821562000326579182015b828111156200032557825182559160200191906001019062000308565b5b50905062000335919062000339565b5090565b5b80821115620003545760008160009055506001016200033a565b5090565b600060028204905060018216806200037157607f821691505b602082108114156200038857620003876200038e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61534780620003cd6000396000f3fe6080604052600436106102ff5760003560e01c80638fdcf94211610190578063c54e73e3116100dc578063eb95416011610095578063f2fde38b1161006f578063f2fde38b14610b4a578063f9d38e9714610b73578063fa65b59214610bb0578063fdea8e0b14610bed576102ff565b8063eb95416014610acd578063efbd73f414610af8578063f19e75d414610b21576102ff565b8063c54e73e3146109ad578063c87b56dd146109d6578063d5abeb0114610a13578063e08823c514610a3e578063e9058c3714610a67578063e985e9c514610a90576102ff565b8063a0712d6811610149578063ae13730711610123578063ae13730714610907578063b88d4fde14610930578063b8d988a214610959578063c243c6c114610984576102ff565b8063a0712d6814610897578063a22cb465146108b3578063a45ba8e7146108dc576102ff565b80638fdcf9421461078557806392829d74146107ae57806394354fd0146107d957806395d89b411461080457806396bfc2291461082f5780639c70b5121461086c576102ff565b806342842e0e1161024f5780636352211e1161020857806370a08231116101e257806370a08231146106dd578063715018a61461071a5780637ec4a659146107315780638da5cb5b1461075a576102ff565b80636352211e1461064c5780636905b184146106895780636f636e8b146106b2576102ff565b806342842e0e1461053c578063438b63001461056557806347ee0394146105a25780635503a0e8146105cb5780635c975abb146105f657806362b99ad414610621576102ff565b806316ba10e0116102bc57806323b872dd1161029657806323b872dd146104b55780632a23d07d146104de5780633c952764146105095780633ccfd60b14610532576102ff565b806316ba10e01461043857806316c38b3c1461046157806318160ddd1461048a576102ff565b806301bf66481461030457806301ffc9a71461032d57806306fdde031461036a57806307b9f56d14610395578063081812fc146103d2578063095ea7b31461040f575b600080fd5b34801561031057600080fd5b5061032b60048036038101906103269190613b77565b610c18565b005b34801561033957600080fd5b50610354600480360381019061034f9190613db0565b610cef565b60405161036191906144ab565b60405180910390f35b34801561037657600080fd5b5061037f610dd1565b60405161038c91906144c6565b60405180910390f35b3480156103a157600080fd5b506103bc60048036038101906103b79190613b77565b610e63565b6040516103c991906147c8565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f49190613e53565b610e7b565b6040516104069190614422565b60405180910390f35b34801561041b57600080fd5b5061043660048036038101906104319190613cfa565b610f00565b005b34801561044457600080fd5b5061045f600480360381019061045a9190613e0a565b611018565b005b34801561046d57600080fd5b5061048860048036038101906104839190613d83565b6110ae565b005b34801561049657600080fd5b5061049f611147565b6040516104ac91906147c8565b60405180910390f35b3480156104c157600080fd5b506104dc60048036038101906104d79190613be4565b611158565b005b3480156104ea57600080fd5b506104f36111b8565b60405161050091906147c8565b60405180910390f35b34801561051557600080fd5b50610530600480360381019061052b9190613d83565b6111be565b005b61053a611257565b005b34801561054857600080fd5b50610563600480360381019061055e9190613be4565b6112d7565b005b34801561057157600080fd5b5061058c60048036038101906105879190613b77565b6112f7565b6040516105999190614489565b60405180910390f35b3480156105ae57600080fd5b506105c960048036038101906105c49190613b77565b611402565b005b3480156105d757600080fd5b506105e06114d9565b6040516105ed91906144c6565b60405180910390f35b34801561060257600080fd5b5061060b611567565b60405161061891906144ab565b60405180910390f35b34801561062d57600080fd5b5061063661157a565b60405161064391906144c6565b60405180910390f35b34801561065857600080fd5b50610673600480360381019061066e9190613e53565b611608565b6040516106809190614422565b60405180910390f35b34801561069557600080fd5b506106b060048036038101906106ab9190613e53565b6116ba565b005b3480156106be57600080fd5b506106c7611740565b6040516106d491906147c8565b60405180910390f35b3480156106e957600080fd5b5061070460048036038101906106ff9190613b77565b611746565b60405161071191906147c8565b60405180910390f35b34801561072657600080fd5b5061072f6117fe565b005b34801561073d57600080fd5b5061075860048036038101906107539190613e0a565b611886565b005b34801561076657600080fd5b5061076f61191c565b60405161077c9190614422565b60405180910390f35b34801561079157600080fd5b506107ac60048036038101906107a79190613e53565b611946565b005b3480156107ba57600080fd5b506107c36119cc565b6040516107d091906147c8565b60405180910390f35b3480156107e557600080fd5b506107ee6119d2565b6040516107fb91906147c8565b60405180910390f35b34801561081057600080fd5b506108196119d8565b60405161082691906144c6565b60405180910390f35b34801561083b57600080fd5b5061085660048036038101906108519190613b77565b611a6a565b60405161086391906144ab565b60405180910390f35b34801561087857600080fd5b50610881611afd565b60405161088e91906144ab565b60405180910390f35b6108b160048036038101906108ac9190613e53565b611b10565b005b3480156108bf57600080fd5b506108da60048036038101906108d59190613cba565b611e94565b005b3480156108e857600080fd5b506108f1611eaa565b6040516108fe91906144c6565b60405180910390f35b34801561091357600080fd5b5061092e60048036038101906109299190613e53565b611f38565b005b34801561093c57600080fd5b5061095760048036038101906109529190613c37565b611fbe565b005b34801561096557600080fd5b5061096e612020565b60405161097b91906147c8565b60405180910390f35b34801561099057600080fd5b506109ab60048036038101906109a69190613d3a565b612026565b005b3480156109b957600080fd5b506109d460048036038101906109cf9190613d83565b612137565b005b3480156109e257600080fd5b506109fd60048036038101906109f89190613e53565b6121d0565b604051610a0a91906144c6565b60405180910390f35b348015610a1f57600080fd5b50610a2861227a565b604051610a3591906147c8565b60405180910390f35b348015610a4a57600080fd5b50610a656004803603810190610a609190613e53565b612280565b005b348015610a7357600080fd5b50610a8e6004803603810190610a899190613e53565b612425565b005b348015610a9c57600080fd5b50610ab76004803603810190610ab29190613ba4565b6124ab565b604051610ac491906144ab565b60405180910390f35b348015610ad957600080fd5b50610ae261253f565b604051610aef91906147c8565b60405180910390f35b348015610b0457600080fd5b50610b1f6004803603810190610b1a9190613e80565b612545565b005b348015610b2d57600080fd5b50610b486004803603810190610b439190613e53565b61282c565b005b348015610b5657600080fd5b50610b716004803603810190610b6c9190613b77565b612905565b005b348015610b7f57600080fd5b50610b9a6004803603810190610b959190613b77565b6129fd565b604051610ba791906147c8565b60405180910390f35b348015610bbc57600080fd5b50610bd76004803603810190610bd29190613b77565b612a15565b604051610be491906144ab565b60405180910390f35b348015610bf957600080fd5b50610c02612a35565b604051610c0f91906144ab565b60405180910390f35b610c20612a48565b73ffffffffffffffffffffffffffffffffffffffff16610c3e61191c565b73ffffffffffffffffffffffffffffffffffffffff1614610c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8b906146e8565b60405180910390fd5b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610dba57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610dca5750610dc982612a50565b5b9050919050565b606060008054610de090614afd565b80601f0160208091040260200160405190810160405280929190818152602001828054610e0c90614afd565b8015610e595780601f10610e2e57610100808354040283529160200191610e59565b820191906000526020600020905b815481529060010190602001808311610e3c57829003601f168201915b5050505050905090565b60156020528060005260406000206000915090505481565b6000610e8682612aba565b610ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebc906146a8565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610f0b82611608565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7390614748565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f9b612a48565b73ffffffffffffffffffffffffffffffffffffffff161480610fca5750610fc981610fc4612a48565b6124ab565b5b611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100090614608565b60405180910390fd5b6110138383612b26565b505050565b611020612a48565b73ffffffffffffffffffffffffffffffffffffffff1661103e61191c565b73ffffffffffffffffffffffffffffffffffffffff1614611094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108b906146e8565b60405180910390fd5b80600990805190602001906110aa9291906138ed565b5050565b6110b6612a48565b73ffffffffffffffffffffffffffffffffffffffff166110d461191c565b73ffffffffffffffffffffffffffffffffffffffff161461112a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611121906146e8565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b60006111536007612bdf565b905090565b611169611163612a48565b82612bed565b6111a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119f90614768565b60405180910390fd5b6111b3838383612ccb565b505050565b600b5481565b6111c6612a48565b73ffffffffffffffffffffffffffffffffffffffff166111e461191c565b73ffffffffffffffffffffffffffffffffffffffff161461123a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611231906146e8565b60405180910390fd5b80601260026101000a81548160ff02191690831515021790555050565b600061126161191c565b73ffffffffffffffffffffffffffffffffffffffff16476040516112849061440d565b60006040518083038185875af1925050503d80600081146112c1576040519150601f19603f3d011682016040523d82523d6000602084013e6112c6565b606091505b50509050806112d457600080fd5b50565b6112f283838360405180602001604052806000815250611fbe565b505050565b6060600061130483611746565b905060008167ffffffffffffffff81111561132257611321614c96565b5b6040519080825280602002602001820160405280156113505781602001602082028036833780820191505090505b50905060006001905060005b838110801561136d5750600d548211155b156113f657600061137d83611608565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113e257828483815181106113c7576113c6614c67565b5b60200260200101818152505081806113de90614b60565b9250505b82806113ed90614b60565b9350505061135c565b82945050505050919050565b61140a612a48565b73ffffffffffffffffffffffffffffffffffffffff1661142861191c565b73ffffffffffffffffffffffffffffffffffffffff161461147e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611475906146e8565b60405180910390fd5b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600980546114e690614afd565b80601f016020809104026020016040519081016040528092919081815260200182805461151290614afd565b801561155f5780601f106115345761010080835404028352916020019161155f565b820191906000526020600020905b81548152906001019060200180831161154257829003601f168201915b505050505081565b601260009054906101000a900460ff1681565b6008805461158790614afd565b80601f01602080910402602001604051908101604052809291908181526020018280546115b390614afd565b80156116005780601f106115d557610100808354040283529160200191611600565b820191906000526020600020905b8154815290600101906020018083116115e357829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a890614648565b60405180910390fd5b80915050919050565b6116c2612a48565b73ffffffffffffffffffffffffffffffffffffffff166116e061191c565b73ffffffffffffffffffffffffffffffffffffffff1614611736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172d906146e8565b60405180910390fd5b80600c8190555050565b600f5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ae90614628565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611806612a48565b73ffffffffffffffffffffffffffffffffffffffff1661182461191c565b73ffffffffffffffffffffffffffffffffffffffff161461187a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611871906146e8565b60405180910390fd5b6118846000612f32565b565b61188e612a48565b73ffffffffffffffffffffffffffffffffffffffff166118ac61191c565b73ffffffffffffffffffffffffffffffffffffffff1614611902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f9906146e8565b60405180910390fd5b80600890805190602001906119189291906138ed565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61194e612a48565b73ffffffffffffffffffffffffffffffffffffffff1661196c61191c565b73ffffffffffffffffffffffffffffffffffffffff16146119c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b9906146e8565b60405180910390fd5b80600b8190555050565b600c5481565b60115481565b6060600180546119e790614afd565b80601f0160208091040260200160405190810160405280929190818152602001828054611a1390614afd565b8015611a605780601f10611a3557610100808354040283529160200191611a60565b820191906000526020600020905b815481529060010190602001808311611a4357829003601f168201915b5050505050905090565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611af65750611ac761191c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b601260029054906101000a900460ff1681565b8060011515601260019054906101000a900460ff1615151415611c2c5760011515601260029054906101000a900460ff1615151415611b9257611b5233611a6a565b611b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b88906144e8565b60405180910390fd5b5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600f548282611be59190614932565b1115611c26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1d90614688565b60405180910390fd5b50611cc2565b6000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506010548282611c7f9190614932565b1115611cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb790614788565b60405180910390fd5b505b600081118015611cd457506011548111155b611d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0a90614708565b60405180910390fd5b600e5481611d216007612bdf565b611d2b9190614932565b1115611d6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d63906147a8565b60405180910390fd5b601260009054906101000a900460ff1615611dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db390614588565b60405180910390fd5b60011515601260019054906101000a900460ff1615151415611e2d5781600b54611de691906149b9565b341015611e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1f906146c8565b60405180910390fd5b611e7e565b81600c54611e3b91906149b9565b341015611e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e74906146c8565b60405180910390fd5b5b611e883383612ff8565b611e90611257565b5050565b611ea6611e9f612a48565b8383613104565b5050565b600a8054611eb790614afd565b80601f0160208091040260200160405190810160405280929190818152602001828054611ee390614afd565b8015611f305780601f10611f0557610100808354040283529160200191611f30565b820191906000526020600020905b815481529060010190602001808311611f1357829003601f168201915b505050505081565b611f40612a48565b73ffffffffffffffffffffffffffffffffffffffff16611f5e61191c565b73ffffffffffffffffffffffffffffffffffffffff1614611fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fab906146e8565b60405180910390fd5b8060108190555050565b611fcf611fc9612a48565b83612bed565b61200e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200590614768565b60405180910390fd5b61201a84848484613271565b50505050565b60105481565b61202e612a48565b73ffffffffffffffffffffffffffffffffffffffff1661204c61191c565b73ffffffffffffffffffffffffffffffffffffffff16146120a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612099906146e8565b60405180910390fd5b60005b8151811015612133576001601360008484815181106120c7576120c6614c67565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061212b90614b60565b9150506120a5565b5050565b61213f612a48565b73ffffffffffffffffffffffffffffffffffffffff1661215d61191c565b73ffffffffffffffffffffffffffffffffffffffff16146121b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121aa906146e8565b60405180910390fd5b80601260016101000a81548160ff02191690831515021790555050565b60606121db82612aba565b61221a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221190614728565b60405180910390fd5b60006122246132cd565b905060008151116122445760405180602001604052806000815250612272565b8061224e8461335f565b6009604051602001612262939291906143dc565b6040516020818303038152906040525b915050919050565b600d5481565b612288612a48565b73ffffffffffffffffffffffffffffffffffffffff166122a661191c565b73ffffffffffffffffffffffffffffffffffffffff16146122fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f3906146e8565b60405180910390fd5b601260009054906101000a900460ff161561234c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234390614588565b60405180910390fd5b61235633826134c0565b60011515601260019054906101000a900460ff16151514156123cc57601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906123c290614b60565b9190505550612422565b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061241c90614b60565b91905055505b50565b61242d612a48565b73ffffffffffffffffffffffffffffffffffffffff1661244b61191c565b73ffffffffffffffffffffffffffffffffffffffff16146124a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612498906146e8565b60405180910390fd5b80600f8190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600e5481565b8160011515601260019054906101000a900460ff16151514156126615760011515601260029054906101000a900460ff16151514156125c75761258733611a6a565b6125c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125bd906144e8565b60405180910390fd5b5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600f54828261261a9190614932565b111561265b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265290614688565b60405180910390fd5b506126f7565b6000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060105482826126b49190614932565b11156126f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ec90614788565b60405180910390fd5b505b60008111801561270957506011548111155b612748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273f90614708565b60405180910390fd5b600e54816127566007612bdf565b6127609190614932565b11156127a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612798906147a8565b60405180910390fd5b6127a9612a48565b73ffffffffffffffffffffffffffffffffffffffff166127c761191c565b73ffffffffffffffffffffffffffffffffffffffff161461281d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612814906146e8565b60405180910390fd5b6128278284612ff8565b505050565b612834612a48565b73ffffffffffffffffffffffffffffffffffffffff1661285261191c565b73ffffffffffffffffffffffffffffffffffffffff16146128a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289f906146e8565b60405180910390fd5b601260009054906101000a900460ff16156128f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ef90614588565b60405180910390fd5b6129023382612ff8565b50565b61290d612a48565b73ffffffffffffffffffffffffffffffffffffffff1661292b61191c565b73ffffffffffffffffffffffffffffffffffffffff1614612981576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612978906146e8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156129f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e890614528565b60405180910390fd5b6129fa81612f32565b50565b60146020528060005260406000206000915090505481565b60136020528060005260406000206000915054906101000a900460ff1681565b601260019054906101000a900460ff1681565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612b9983611608565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6000612bf882612aba565b612c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2e906145e8565b60405180910390fd5b6000612c4283611608565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612cb157508373ffffffffffffffffffffffffffffffffffffffff16612c9984610e7b565b73ffffffffffffffffffffffffffffffffffffffff16145b80612cc25750612cc181856124ab565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612ceb82611608565b73ffffffffffffffffffffffffffffffffffffffff1614612d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3890614548565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612db1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da8906145a8565b60405180910390fd5b612dbc8383836134de565b612dc7600082612b26565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e179190614a13565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e6e9190614932565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612f2d8383836134e3565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b818110156130ff5761300d60076134e8565b6130208361301b6007612bdf565b6134c0565b60011515601260019054906101000a900460ff161515141561309657601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061308c90614b60565b91905055506130ec565b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906130e690614b60565b91905055505b80806130f790614b60565b915050612ffb565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613173576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316a906145c8565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161326491906144ab565b60405180910390a3505050565b61327c848484612ccb565b613288848484846134fe565b6132c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132be90614508565b60405180910390fd5b50505050565b6060600880546132dc90614afd565b80601f016020809104026020016040519081016040528092919081815260200182805461330890614afd565b80156133555780601f1061332a57610100808354040283529160200191613355565b820191906000526020600020905b81548152906001019060200180831161333857829003601f168201915b5050505050905090565b606060008214156133a7576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506134bb565b600082905060005b600082146133d95780806133c290614b60565b915050600a826133d29190614988565b91506133af565b60008167ffffffffffffffff8111156133f5576133f4614c96565b5b6040519080825280601f01601f1916602001820160405280156134275781602001600182028036833780820191505090505b5090505b600085146134b4576001826134409190614a13565b9150600a8561344f9190614ba9565b603061345b9190614932565b60f81b81838151811061347157613470614c67565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856134ad9190614988565b945061342b565b8093505050505b919050565b6134da828260405180602001604052806000815250613695565b5050565b505050565b505050565b6001816000016000828254019250508190555050565b600061351f8473ffffffffffffffffffffffffffffffffffffffff166136f0565b15613688578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613548612a48565b8786866040518563ffffffff1660e01b815260040161356a949392919061443d565b602060405180830381600087803b15801561358457600080fd5b505af19250505080156135b557506040513d601f19601f820116820180604052508101906135b29190613ddd565b60015b613638573d80600081146135e5576040519150601f19603f3d011682016040523d82523d6000602084013e6135ea565b606091505b50600081511415613630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161362790614508565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061368d565b600190505b949350505050565b61369f8383613713565b6136ac60008484846134fe565b6136eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136e290614508565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161377a90614668565b60405180910390fd5b61378c81612aba565b156137cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137c390614568565b60405180910390fd5b6137d8600083836134de565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546138289190614932565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46138e9600083836134e3565b5050565b8280546138f990614afd565b90600052602060002090601f01602090048101928261391b5760008555613962565b82601f1061393457805160ff1916838001178555613962565b82800160010185558215613962579182015b82811115613961578251825591602001919060010190613946565b5b50905061396f9190613973565b5090565b5b8082111561398c576000816000905550600101613974565b5090565b60006139a361399e84614808565b6147e3565b905080838252602082019050828560208602820111156139c6576139c5614cca565b5b60005b858110156139f657816139dc8882613a84565b8452602084019350602083019250506001810190506139c9565b5050509392505050565b6000613a13613a0e84614834565b6147e3565b905082815260208101848484011115613a2f57613a2e614ccf565b5b613a3a848285614abb565b509392505050565b6000613a55613a5084614865565b6147e3565b905082815260208101848484011115613a7157613a70614ccf565b5b613a7c848285614abb565b509392505050565b600081359050613a93816152b5565b92915050565b600082601f830112613aae57613aad614cc5565b5b8135613abe848260208601613990565b91505092915050565b600081359050613ad6816152cc565b92915050565b600081359050613aeb816152e3565b92915050565b600081519050613b00816152e3565b92915050565b600082601f830112613b1b57613b1a614cc5565b5b8135613b2b848260208601613a00565b91505092915050565b600082601f830112613b4957613b48614cc5565b5b8135613b59848260208601613a42565b91505092915050565b600081359050613b71816152fa565b92915050565b600060208284031215613b8d57613b8c614cd9565b5b6000613b9b84828501613a84565b91505092915050565b60008060408385031215613bbb57613bba614cd9565b5b6000613bc985828601613a84565b9250506020613bda85828601613a84565b9150509250929050565b600080600060608486031215613bfd57613bfc614cd9565b5b6000613c0b86828701613a84565b9350506020613c1c86828701613a84565b9250506040613c2d86828701613b62565b9150509250925092565b60008060008060808587031215613c5157613c50614cd9565b5b6000613c5f87828801613a84565b9450506020613c7087828801613a84565b9350506040613c8187828801613b62565b925050606085013567ffffffffffffffff811115613ca257613ca1614cd4565b5b613cae87828801613b06565b91505092959194509250565b60008060408385031215613cd157613cd0614cd9565b5b6000613cdf85828601613a84565b9250506020613cf085828601613ac7565b9150509250929050565b60008060408385031215613d1157613d10614cd9565b5b6000613d1f85828601613a84565b9250506020613d3085828601613b62565b9150509250929050565b600060208284031215613d5057613d4f614cd9565b5b600082013567ffffffffffffffff811115613d6e57613d6d614cd4565b5b613d7a84828501613a99565b91505092915050565b600060208284031215613d9957613d98614cd9565b5b6000613da784828501613ac7565b91505092915050565b600060208284031215613dc657613dc5614cd9565b5b6000613dd484828501613adc565b91505092915050565b600060208284031215613df357613df2614cd9565b5b6000613e0184828501613af1565b91505092915050565b600060208284031215613e2057613e1f614cd9565b5b600082013567ffffffffffffffff811115613e3e57613e3d614cd4565b5b613e4a84828501613b34565b91505092915050565b600060208284031215613e6957613e68614cd9565b5b6000613e7784828501613b62565b91505092915050565b60008060408385031215613e9757613e96614cd9565b5b6000613ea585828601613b62565b9250506020613eb685828601613a84565b9150509250929050565b6000613ecc83836143be565b60208301905092915050565b613ee181614a47565b82525050565b6000613ef2826148bb565b613efc81856148e9565b9350613f0783614896565b8060005b83811015613f38578151613f1f8882613ec0565b9750613f2a836148dc565b925050600181019050613f0b565b5085935050505092915050565b613f4e81614a59565b82525050565b6000613f5f826148c6565b613f6981856148fa565b9350613f79818560208601614aca565b613f8281614cde565b840191505092915050565b6000613f98826148d1565b613fa28185614916565b9350613fb2818560208601614aca565b613fbb81614cde565b840191505092915050565b6000613fd1826148d1565b613fdb8185614927565b9350613feb818560208601614aca565b80840191505092915050565b6000815461400481614afd565b61400e8186614927565b94506001821660008114614029576001811461403a5761406d565b60ff1983168652818601935061406d565b614043856148a6565b60005b8381101561406557815481890152600182019150602081019050614046565b838801955050505b50505092915050565b6000614083601c83614916565b915061408e82614cef565b602082019050919050565b60006140a6603283614916565b91506140b182614d18565b604082019050919050565b60006140c9602683614916565b91506140d482614d67565b604082019050919050565b60006140ec602583614916565b91506140f782614db6565b604082019050919050565b600061410f601c83614916565b915061411a82614e05565b602082019050919050565b6000614132601b83614916565b915061413d82614e2e565b602082019050919050565b6000614155602483614916565b915061416082614e57565b604082019050919050565b6000614178601983614916565b915061418382614ea6565b602082019050919050565b600061419b602c83614916565b91506141a682614ecf565b604082019050919050565b60006141be603883614916565b91506141c982614f1e565b604082019050919050565b60006141e1602a83614916565b91506141ec82614f6d565b604082019050919050565b6000614204602983614916565b915061420f82614fbc565b604082019050919050565b6000614227602083614916565b91506142328261500b565b602082019050919050565b600061424a602d83614916565b915061425582615034565b604082019050919050565b600061426d602c83614916565b915061427882615083565b604082019050919050565b6000614290601783614916565b915061429b826150d2565b602082019050919050565b60006142b3602083614916565b91506142be826150fb565b602082019050919050565b60006142d6601883614916565b91506142e182615124565b602082019050919050565b60006142f9602483614916565b91506143048261514d565b604082019050919050565b600061431c602183614916565b91506143278261519c565b604082019050919050565b600061433f60008361490b565b915061434a826151eb565b600082019050919050565b6000614362603183614916565b915061436d826151ee565b604082019050919050565b6000614385603083614916565b91506143908261523d565b604082019050919050565b60006143a8601883614916565b91506143b38261528c565b602082019050919050565b6143c781614ab1565b82525050565b6143d681614ab1565b82525050565b60006143e88286613fc6565b91506143f48285613fc6565b91506144008284613ff7565b9150819050949350505050565b600061441882614332565b9150819050919050565b60006020820190506144376000830184613ed8565b92915050565b60006080820190506144526000830187613ed8565b61445f6020830186613ed8565b61446c60408301856143cd565b818103606083015261447e8184613f54565b905095945050505050565b600060208201905081810360008301526144a38184613ee7565b905092915050565b60006020820190506144c06000830184613f45565b92915050565b600060208201905081810360008301526144e08184613f8d565b905092915050565b6000602082019050818103600083015261450181614076565b9050919050565b6000602082019050818103600083015261452181614099565b9050919050565b60006020820190508181036000830152614541816140bc565b9050919050565b60006020820190508181036000830152614561816140df565b9050919050565b6000602082019050818103600083015261458181614102565b9050919050565b600060208201905081810360008301526145a181614125565b9050919050565b600060208201905081810360008301526145c181614148565b9050919050565b600060208201905081810360008301526145e18161416b565b9050919050565b600060208201905081810360008301526146018161418e565b9050919050565b60006020820190508181036000830152614621816141b1565b9050919050565b60006020820190508181036000830152614641816141d4565b9050919050565b60006020820190508181036000830152614661816141f7565b9050919050565b600060208201905081810360008301526146818161421a565b9050919050565b600060208201905081810360008301526146a18161423d565b9050919050565b600060208201905081810360008301526146c181614260565b9050919050565b600060208201905081810360008301526146e181614283565b9050919050565b60006020820190508181036000830152614701816142a6565b9050919050565b60006020820190508181036000830152614721816142c9565b9050919050565b60006020820190508181036000830152614741816142ec565b9050919050565b600060208201905081810360008301526147618161430f565b9050919050565b6000602082019050818103600083015261478181614355565b9050919050565b600060208201905081810360008301526147a181614378565b9050919050565b600060208201905081810360008301526147c18161439b565b9050919050565b60006020820190506147dd60008301846143cd565b92915050565b60006147ed6147fe565b90506147f98282614b2f565b919050565b6000604051905090565b600067ffffffffffffffff82111561482357614822614c96565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561484f5761484e614c96565b5b61485882614cde565b9050602081019050919050565b600067ffffffffffffffff8211156148805761487f614c96565b5b61488982614cde565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061493d82614ab1565b915061494883614ab1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561497d5761497c614bda565b5b828201905092915050565b600061499382614ab1565b915061499e83614ab1565b9250826149ae576149ad614c09565b5b828204905092915050565b60006149c482614ab1565b91506149cf83614ab1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a0857614a07614bda565b5b828202905092915050565b6000614a1e82614ab1565b9150614a2983614ab1565b925082821015614a3c57614a3b614bda565b5b828203905092915050565b6000614a5282614a91565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614ae8578082015181840152602081019050614acd565b83811115614af7576000848401525b50505050565b60006002820490506001821680614b1557607f821691505b60208210811415614b2957614b28614c38565b5b50919050565b614b3882614cde565b810181811067ffffffffffffffff82111715614b5757614b56614c96565b5b80604052505050565b6000614b6b82614ab1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b9e57614b9d614bda565b5b600182019050919050565b6000614bb482614ab1565b9150614bbf83614ab1565b925082614bcf57614bce614c09565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d53473a2055736572206973206e6f742077686974656c697374656400000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4d53473a2054686520636f6e7472616374206973207061757365640000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4d53473a204d6178204e4654207065722061646472657373206578636565646560008201527f6420666f722070726573616c6500000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d53473a20496e73756666696369656e742066756e6473000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d53473a20496e76616c6964206d696e7420616d6f756e740000000000000000600082015250565b7f4d53473a2055524920717565727920666f72206e6f6e6578697374656e74207460008201527f6f6b656e00000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d53473a204d6178204e4654207065722061646472657373206578636565646560008201527f6420666f72207075626c696373616c6500000000000000000000000000000000602082015250565b7f4d53473a204d617820737570706c792065786365656465640000000000000000600082015250565b6152be81614a47565b81146152c957600080fd5b50565b6152d581614a59565b81146152e057600080fd5b50565b6152ec81614a65565b81146152f757600080fd5b50565b61530381614ab1565b811461530e57600080fd5b5056fea26469706673582212208e608d1c21701217edf0aa5dfee76cd9eb80ec44ee329cb2bf0d0ac40046b5bc64736f6c6343000807003368747470733a2f2f637265617475726563756c74757265636f6c6c656374696f6e2e636f6d2f636f6c6c656374696f6e2f6a736f6e732f
Deployed Bytecode
0x6080604052600436106102ff5760003560e01c80638fdcf94211610190578063c54e73e3116100dc578063eb95416011610095578063f2fde38b1161006f578063f2fde38b14610b4a578063f9d38e9714610b73578063fa65b59214610bb0578063fdea8e0b14610bed576102ff565b8063eb95416014610acd578063efbd73f414610af8578063f19e75d414610b21576102ff565b8063c54e73e3146109ad578063c87b56dd146109d6578063d5abeb0114610a13578063e08823c514610a3e578063e9058c3714610a67578063e985e9c514610a90576102ff565b8063a0712d6811610149578063ae13730711610123578063ae13730714610907578063b88d4fde14610930578063b8d988a214610959578063c243c6c114610984576102ff565b8063a0712d6814610897578063a22cb465146108b3578063a45ba8e7146108dc576102ff565b80638fdcf9421461078557806392829d74146107ae57806394354fd0146107d957806395d89b411461080457806396bfc2291461082f5780639c70b5121461086c576102ff565b806342842e0e1161024f5780636352211e1161020857806370a08231116101e257806370a08231146106dd578063715018a61461071a5780637ec4a659146107315780638da5cb5b1461075a576102ff565b80636352211e1461064c5780636905b184146106895780636f636e8b146106b2576102ff565b806342842e0e1461053c578063438b63001461056557806347ee0394146105a25780635503a0e8146105cb5780635c975abb146105f657806362b99ad414610621576102ff565b806316ba10e0116102bc57806323b872dd1161029657806323b872dd146104b55780632a23d07d146104de5780633c952764146105095780633ccfd60b14610532576102ff565b806316ba10e01461043857806316c38b3c1461046157806318160ddd1461048a576102ff565b806301bf66481461030457806301ffc9a71461032d57806306fdde031461036a57806307b9f56d14610395578063081812fc146103d2578063095ea7b31461040f575b600080fd5b34801561031057600080fd5b5061032b60048036038101906103269190613b77565b610c18565b005b34801561033957600080fd5b50610354600480360381019061034f9190613db0565b610cef565b60405161036191906144ab565b60405180910390f35b34801561037657600080fd5b5061037f610dd1565b60405161038c91906144c6565b60405180910390f35b3480156103a157600080fd5b506103bc60048036038101906103b79190613b77565b610e63565b6040516103c991906147c8565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f49190613e53565b610e7b565b6040516104069190614422565b60405180910390f35b34801561041b57600080fd5b5061043660048036038101906104319190613cfa565b610f00565b005b34801561044457600080fd5b5061045f600480360381019061045a9190613e0a565b611018565b005b34801561046d57600080fd5b5061048860048036038101906104839190613d83565b6110ae565b005b34801561049657600080fd5b5061049f611147565b6040516104ac91906147c8565b60405180910390f35b3480156104c157600080fd5b506104dc60048036038101906104d79190613be4565b611158565b005b3480156104ea57600080fd5b506104f36111b8565b60405161050091906147c8565b60405180910390f35b34801561051557600080fd5b50610530600480360381019061052b9190613d83565b6111be565b005b61053a611257565b005b34801561054857600080fd5b50610563600480360381019061055e9190613be4565b6112d7565b005b34801561057157600080fd5b5061058c60048036038101906105879190613b77565b6112f7565b6040516105999190614489565b60405180910390f35b3480156105ae57600080fd5b506105c960048036038101906105c49190613b77565b611402565b005b3480156105d757600080fd5b506105e06114d9565b6040516105ed91906144c6565b60405180910390f35b34801561060257600080fd5b5061060b611567565b60405161061891906144ab565b60405180910390f35b34801561062d57600080fd5b5061063661157a565b60405161064391906144c6565b60405180910390f35b34801561065857600080fd5b50610673600480360381019061066e9190613e53565b611608565b6040516106809190614422565b60405180910390f35b34801561069557600080fd5b506106b060048036038101906106ab9190613e53565b6116ba565b005b3480156106be57600080fd5b506106c7611740565b6040516106d491906147c8565b60405180910390f35b3480156106e957600080fd5b5061070460048036038101906106ff9190613b77565b611746565b60405161071191906147c8565b60405180910390f35b34801561072657600080fd5b5061072f6117fe565b005b34801561073d57600080fd5b5061075860048036038101906107539190613e0a565b611886565b005b34801561076657600080fd5b5061076f61191c565b60405161077c9190614422565b60405180910390f35b34801561079157600080fd5b506107ac60048036038101906107a79190613e53565b611946565b005b3480156107ba57600080fd5b506107c36119cc565b6040516107d091906147c8565b60405180910390f35b3480156107e557600080fd5b506107ee6119d2565b6040516107fb91906147c8565b60405180910390f35b34801561081057600080fd5b506108196119d8565b60405161082691906144c6565b60405180910390f35b34801561083b57600080fd5b5061085660048036038101906108519190613b77565b611a6a565b60405161086391906144ab565b60405180910390f35b34801561087857600080fd5b50610881611afd565b60405161088e91906144ab565b60405180910390f35b6108b160048036038101906108ac9190613e53565b611b10565b005b3480156108bf57600080fd5b506108da60048036038101906108d59190613cba565b611e94565b005b3480156108e857600080fd5b506108f1611eaa565b6040516108fe91906144c6565b60405180910390f35b34801561091357600080fd5b5061092e60048036038101906109299190613e53565b611f38565b005b34801561093c57600080fd5b5061095760048036038101906109529190613c37565b611fbe565b005b34801561096557600080fd5b5061096e612020565b60405161097b91906147c8565b60405180910390f35b34801561099057600080fd5b506109ab60048036038101906109a69190613d3a565b612026565b005b3480156109b957600080fd5b506109d460048036038101906109cf9190613d83565b612137565b005b3480156109e257600080fd5b506109fd60048036038101906109f89190613e53565b6121d0565b604051610a0a91906144c6565b60405180910390f35b348015610a1f57600080fd5b50610a2861227a565b604051610a3591906147c8565b60405180910390f35b348015610a4a57600080fd5b50610a656004803603810190610a609190613e53565b612280565b005b348015610a7357600080fd5b50610a8e6004803603810190610a899190613e53565b612425565b005b348015610a9c57600080fd5b50610ab76004803603810190610ab29190613ba4565b6124ab565b604051610ac491906144ab565b60405180910390f35b348015610ad957600080fd5b50610ae261253f565b604051610aef91906147c8565b60405180910390f35b348015610b0457600080fd5b50610b1f6004803603810190610b1a9190613e80565b612545565b005b348015610b2d57600080fd5b50610b486004803603810190610b439190613e53565b61282c565b005b348015610b5657600080fd5b50610b716004803603810190610b6c9190613b77565b612905565b005b348015610b7f57600080fd5b50610b9a6004803603810190610b959190613b77565b6129fd565b604051610ba791906147c8565b60405180910390f35b348015610bbc57600080fd5b50610bd76004803603810190610bd29190613b77565b612a15565b604051610be491906144ab565b60405180910390f35b348015610bf957600080fd5b50610c02612a35565b604051610c0f91906144ab565b60405180910390f35b610c20612a48565b73ffffffffffffffffffffffffffffffffffffffff16610c3e61191c565b73ffffffffffffffffffffffffffffffffffffffff1614610c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8b906146e8565b60405180910390fd5b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610dba57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610dca5750610dc982612a50565b5b9050919050565b606060008054610de090614afd565b80601f0160208091040260200160405190810160405280929190818152602001828054610e0c90614afd565b8015610e595780601f10610e2e57610100808354040283529160200191610e59565b820191906000526020600020905b815481529060010190602001808311610e3c57829003601f168201915b5050505050905090565b60156020528060005260406000206000915090505481565b6000610e8682612aba565b610ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebc906146a8565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610f0b82611608565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7390614748565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f9b612a48565b73ffffffffffffffffffffffffffffffffffffffff161480610fca5750610fc981610fc4612a48565b6124ab565b5b611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100090614608565b60405180910390fd5b6110138383612b26565b505050565b611020612a48565b73ffffffffffffffffffffffffffffffffffffffff1661103e61191c565b73ffffffffffffffffffffffffffffffffffffffff1614611094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108b906146e8565b60405180910390fd5b80600990805190602001906110aa9291906138ed565b5050565b6110b6612a48565b73ffffffffffffffffffffffffffffffffffffffff166110d461191c565b73ffffffffffffffffffffffffffffffffffffffff161461112a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611121906146e8565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b60006111536007612bdf565b905090565b611169611163612a48565b82612bed565b6111a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119f90614768565b60405180910390fd5b6111b3838383612ccb565b505050565b600b5481565b6111c6612a48565b73ffffffffffffffffffffffffffffffffffffffff166111e461191c565b73ffffffffffffffffffffffffffffffffffffffff161461123a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611231906146e8565b60405180910390fd5b80601260026101000a81548160ff02191690831515021790555050565b600061126161191c565b73ffffffffffffffffffffffffffffffffffffffff16476040516112849061440d565b60006040518083038185875af1925050503d80600081146112c1576040519150601f19603f3d011682016040523d82523d6000602084013e6112c6565b606091505b50509050806112d457600080fd5b50565b6112f283838360405180602001604052806000815250611fbe565b505050565b6060600061130483611746565b905060008167ffffffffffffffff81111561132257611321614c96565b5b6040519080825280602002602001820160405280156113505781602001602082028036833780820191505090505b50905060006001905060005b838110801561136d5750600d548211155b156113f657600061137d83611608565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113e257828483815181106113c7576113c6614c67565b5b60200260200101818152505081806113de90614b60565b9250505b82806113ed90614b60565b9350505061135c565b82945050505050919050565b61140a612a48565b73ffffffffffffffffffffffffffffffffffffffff1661142861191c565b73ffffffffffffffffffffffffffffffffffffffff161461147e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611475906146e8565b60405180910390fd5b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600980546114e690614afd565b80601f016020809104026020016040519081016040528092919081815260200182805461151290614afd565b801561155f5780601f106115345761010080835404028352916020019161155f565b820191906000526020600020905b81548152906001019060200180831161154257829003601f168201915b505050505081565b601260009054906101000a900460ff1681565b6008805461158790614afd565b80601f01602080910402602001604051908101604052809291908181526020018280546115b390614afd565b80156116005780601f106115d557610100808354040283529160200191611600565b820191906000526020600020905b8154815290600101906020018083116115e357829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a890614648565b60405180910390fd5b80915050919050565b6116c2612a48565b73ffffffffffffffffffffffffffffffffffffffff166116e061191c565b73ffffffffffffffffffffffffffffffffffffffff1614611736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172d906146e8565b60405180910390fd5b80600c8190555050565b600f5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ae90614628565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611806612a48565b73ffffffffffffffffffffffffffffffffffffffff1661182461191c565b73ffffffffffffffffffffffffffffffffffffffff161461187a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611871906146e8565b60405180910390fd5b6118846000612f32565b565b61188e612a48565b73ffffffffffffffffffffffffffffffffffffffff166118ac61191c565b73ffffffffffffffffffffffffffffffffffffffff1614611902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f9906146e8565b60405180910390fd5b80600890805190602001906119189291906138ed565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61194e612a48565b73ffffffffffffffffffffffffffffffffffffffff1661196c61191c565b73ffffffffffffffffffffffffffffffffffffffff16146119c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b9906146e8565b60405180910390fd5b80600b8190555050565b600c5481565b60115481565b6060600180546119e790614afd565b80601f0160208091040260200160405190810160405280929190818152602001828054611a1390614afd565b8015611a605780601f10611a3557610100808354040283529160200191611a60565b820191906000526020600020905b815481529060010190602001808311611a4357829003601f168201915b5050505050905090565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611af65750611ac761191c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b601260029054906101000a900460ff1681565b8060011515601260019054906101000a900460ff1615151415611c2c5760011515601260029054906101000a900460ff1615151415611b9257611b5233611a6a565b611b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b88906144e8565b60405180910390fd5b5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600f548282611be59190614932565b1115611c26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1d90614688565b60405180910390fd5b50611cc2565b6000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506010548282611c7f9190614932565b1115611cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb790614788565b60405180910390fd5b505b600081118015611cd457506011548111155b611d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0a90614708565b60405180910390fd5b600e5481611d216007612bdf565b611d2b9190614932565b1115611d6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d63906147a8565b60405180910390fd5b601260009054906101000a900460ff1615611dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db390614588565b60405180910390fd5b60011515601260019054906101000a900460ff1615151415611e2d5781600b54611de691906149b9565b341015611e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1f906146c8565b60405180910390fd5b611e7e565b81600c54611e3b91906149b9565b341015611e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e74906146c8565b60405180910390fd5b5b611e883383612ff8565b611e90611257565b5050565b611ea6611e9f612a48565b8383613104565b5050565b600a8054611eb790614afd565b80601f0160208091040260200160405190810160405280929190818152602001828054611ee390614afd565b8015611f305780601f10611f0557610100808354040283529160200191611f30565b820191906000526020600020905b815481529060010190602001808311611f1357829003601f168201915b505050505081565b611f40612a48565b73ffffffffffffffffffffffffffffffffffffffff16611f5e61191c565b73ffffffffffffffffffffffffffffffffffffffff1614611fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fab906146e8565b60405180910390fd5b8060108190555050565b611fcf611fc9612a48565b83612bed565b61200e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200590614768565b60405180910390fd5b61201a84848484613271565b50505050565b60105481565b61202e612a48565b73ffffffffffffffffffffffffffffffffffffffff1661204c61191c565b73ffffffffffffffffffffffffffffffffffffffff16146120a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612099906146e8565b60405180910390fd5b60005b8151811015612133576001601360008484815181106120c7576120c6614c67565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061212b90614b60565b9150506120a5565b5050565b61213f612a48565b73ffffffffffffffffffffffffffffffffffffffff1661215d61191c565b73ffffffffffffffffffffffffffffffffffffffff16146121b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121aa906146e8565b60405180910390fd5b80601260016101000a81548160ff02191690831515021790555050565b60606121db82612aba565b61221a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221190614728565b60405180910390fd5b60006122246132cd565b905060008151116122445760405180602001604052806000815250612272565b8061224e8461335f565b6009604051602001612262939291906143dc565b6040516020818303038152906040525b915050919050565b600d5481565b612288612a48565b73ffffffffffffffffffffffffffffffffffffffff166122a661191c565b73ffffffffffffffffffffffffffffffffffffffff16146122fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f3906146e8565b60405180910390fd5b601260009054906101000a900460ff161561234c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234390614588565b60405180910390fd5b61235633826134c0565b60011515601260019054906101000a900460ff16151514156123cc57601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906123c290614b60565b9190505550612422565b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061241c90614b60565b91905055505b50565b61242d612a48565b73ffffffffffffffffffffffffffffffffffffffff1661244b61191c565b73ffffffffffffffffffffffffffffffffffffffff16146124a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612498906146e8565b60405180910390fd5b80600f8190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600e5481565b8160011515601260019054906101000a900460ff16151514156126615760011515601260029054906101000a900460ff16151514156125c75761258733611a6a565b6125c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125bd906144e8565b60405180910390fd5b5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600f54828261261a9190614932565b111561265b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265290614688565b60405180910390fd5b506126f7565b6000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060105482826126b49190614932565b11156126f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ec90614788565b60405180910390fd5b505b60008111801561270957506011548111155b612748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273f90614708565b60405180910390fd5b600e54816127566007612bdf565b6127609190614932565b11156127a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612798906147a8565b60405180910390fd5b6127a9612a48565b73ffffffffffffffffffffffffffffffffffffffff166127c761191c565b73ffffffffffffffffffffffffffffffffffffffff161461281d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612814906146e8565b60405180910390fd5b6128278284612ff8565b505050565b612834612a48565b73ffffffffffffffffffffffffffffffffffffffff1661285261191c565b73ffffffffffffffffffffffffffffffffffffffff16146128a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289f906146e8565b60405180910390fd5b601260009054906101000a900460ff16156128f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ef90614588565b60405180910390fd5b6129023382612ff8565b50565b61290d612a48565b73ffffffffffffffffffffffffffffffffffffffff1661292b61191c565b73ffffffffffffffffffffffffffffffffffffffff1614612981576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612978906146e8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156129f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e890614528565b60405180910390fd5b6129fa81612f32565b50565b60146020528060005260406000206000915090505481565b60136020528060005260406000206000915054906101000a900460ff1681565b601260019054906101000a900460ff1681565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612b9983611608565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6000612bf882612aba565b612c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2e906145e8565b60405180910390fd5b6000612c4283611608565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612cb157508373ffffffffffffffffffffffffffffffffffffffff16612c9984610e7b565b73ffffffffffffffffffffffffffffffffffffffff16145b80612cc25750612cc181856124ab565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612ceb82611608565b73ffffffffffffffffffffffffffffffffffffffff1614612d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3890614548565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612db1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da8906145a8565b60405180910390fd5b612dbc8383836134de565b612dc7600082612b26565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e179190614a13565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e6e9190614932565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612f2d8383836134e3565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b818110156130ff5761300d60076134e8565b6130208361301b6007612bdf565b6134c0565b60011515601260019054906101000a900460ff161515141561309657601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061308c90614b60565b91905055506130ec565b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906130e690614b60565b91905055505b80806130f790614b60565b915050612ffb565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613173576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316a906145c8565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161326491906144ab565b60405180910390a3505050565b61327c848484612ccb565b613288848484846134fe565b6132c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132be90614508565b60405180910390fd5b50505050565b6060600880546132dc90614afd565b80601f016020809104026020016040519081016040528092919081815260200182805461330890614afd565b80156133555780601f1061332a57610100808354040283529160200191613355565b820191906000526020600020905b81548152906001019060200180831161333857829003601f168201915b5050505050905090565b606060008214156133a7576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506134bb565b600082905060005b600082146133d95780806133c290614b60565b915050600a826133d29190614988565b91506133af565b60008167ffffffffffffffff8111156133f5576133f4614c96565b5b6040519080825280601f01601f1916602001820160405280156134275781602001600182028036833780820191505090505b5090505b600085146134b4576001826134409190614a13565b9150600a8561344f9190614ba9565b603061345b9190614932565b60f81b81838151811061347157613470614c67565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856134ad9190614988565b945061342b565b8093505050505b919050565b6134da828260405180602001604052806000815250613695565b5050565b505050565b505050565b6001816000016000828254019250508190555050565b600061351f8473ffffffffffffffffffffffffffffffffffffffff166136f0565b15613688578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613548612a48565b8786866040518563ffffffff1660e01b815260040161356a949392919061443d565b602060405180830381600087803b15801561358457600080fd5b505af19250505080156135b557506040513d601f19601f820116820180604052508101906135b29190613ddd565b60015b613638573d80600081146135e5576040519150601f19603f3d011682016040523d82523d6000602084013e6135ea565b606091505b50600081511415613630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161362790614508565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061368d565b600190505b949350505050565b61369f8383613713565b6136ac60008484846134fe565b6136eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136e290614508565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161377a90614668565b60405180910390fd5b61378c81612aba565b156137cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137c390614568565b60405180910390fd5b6137d8600083836134de565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546138289190614932565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46138e9600083836134e3565b5050565b8280546138f990614afd565b90600052602060002090601f01602090048101928261391b5760008555613962565b82601f1061393457805160ff1916838001178555613962565b82800160010185558215613962579182015b82811115613961578251825591602001919060010190613946565b5b50905061396f9190613973565b5090565b5b8082111561398c576000816000905550600101613974565b5090565b60006139a361399e84614808565b6147e3565b905080838252602082019050828560208602820111156139c6576139c5614cca565b5b60005b858110156139f657816139dc8882613a84565b8452602084019350602083019250506001810190506139c9565b5050509392505050565b6000613a13613a0e84614834565b6147e3565b905082815260208101848484011115613a2f57613a2e614ccf565b5b613a3a848285614abb565b509392505050565b6000613a55613a5084614865565b6147e3565b905082815260208101848484011115613a7157613a70614ccf565b5b613a7c848285614abb565b509392505050565b600081359050613a93816152b5565b92915050565b600082601f830112613aae57613aad614cc5565b5b8135613abe848260208601613990565b91505092915050565b600081359050613ad6816152cc565b92915050565b600081359050613aeb816152e3565b92915050565b600081519050613b00816152e3565b92915050565b600082601f830112613b1b57613b1a614cc5565b5b8135613b2b848260208601613a00565b91505092915050565b600082601f830112613b4957613b48614cc5565b5b8135613b59848260208601613a42565b91505092915050565b600081359050613b71816152fa565b92915050565b600060208284031215613b8d57613b8c614cd9565b5b6000613b9b84828501613a84565b91505092915050565b60008060408385031215613bbb57613bba614cd9565b5b6000613bc985828601613a84565b9250506020613bda85828601613a84565b9150509250929050565b600080600060608486031215613bfd57613bfc614cd9565b5b6000613c0b86828701613a84565b9350506020613c1c86828701613a84565b9250506040613c2d86828701613b62565b9150509250925092565b60008060008060808587031215613c5157613c50614cd9565b5b6000613c5f87828801613a84565b9450506020613c7087828801613a84565b9350506040613c8187828801613b62565b925050606085013567ffffffffffffffff811115613ca257613ca1614cd4565b5b613cae87828801613b06565b91505092959194509250565b60008060408385031215613cd157613cd0614cd9565b5b6000613cdf85828601613a84565b9250506020613cf085828601613ac7565b9150509250929050565b60008060408385031215613d1157613d10614cd9565b5b6000613d1f85828601613a84565b9250506020613d3085828601613b62565b9150509250929050565b600060208284031215613d5057613d4f614cd9565b5b600082013567ffffffffffffffff811115613d6e57613d6d614cd4565b5b613d7a84828501613a99565b91505092915050565b600060208284031215613d9957613d98614cd9565b5b6000613da784828501613ac7565b91505092915050565b600060208284031215613dc657613dc5614cd9565b5b6000613dd484828501613adc565b91505092915050565b600060208284031215613df357613df2614cd9565b5b6000613e0184828501613af1565b91505092915050565b600060208284031215613e2057613e1f614cd9565b5b600082013567ffffffffffffffff811115613e3e57613e3d614cd4565b5b613e4a84828501613b34565b91505092915050565b600060208284031215613e6957613e68614cd9565b5b6000613e7784828501613b62565b91505092915050565b60008060408385031215613e9757613e96614cd9565b5b6000613ea585828601613b62565b9250506020613eb685828601613a84565b9150509250929050565b6000613ecc83836143be565b60208301905092915050565b613ee181614a47565b82525050565b6000613ef2826148bb565b613efc81856148e9565b9350613f0783614896565b8060005b83811015613f38578151613f1f8882613ec0565b9750613f2a836148dc565b925050600181019050613f0b565b5085935050505092915050565b613f4e81614a59565b82525050565b6000613f5f826148c6565b613f6981856148fa565b9350613f79818560208601614aca565b613f8281614cde565b840191505092915050565b6000613f98826148d1565b613fa28185614916565b9350613fb2818560208601614aca565b613fbb81614cde565b840191505092915050565b6000613fd1826148d1565b613fdb8185614927565b9350613feb818560208601614aca565b80840191505092915050565b6000815461400481614afd565b61400e8186614927565b94506001821660008114614029576001811461403a5761406d565b60ff1983168652818601935061406d565b614043856148a6565b60005b8381101561406557815481890152600182019150602081019050614046565b838801955050505b50505092915050565b6000614083601c83614916565b915061408e82614cef565b602082019050919050565b60006140a6603283614916565b91506140b182614d18565b604082019050919050565b60006140c9602683614916565b91506140d482614d67565b604082019050919050565b60006140ec602583614916565b91506140f782614db6565b604082019050919050565b600061410f601c83614916565b915061411a82614e05565b602082019050919050565b6000614132601b83614916565b915061413d82614e2e565b602082019050919050565b6000614155602483614916565b915061416082614e57565b604082019050919050565b6000614178601983614916565b915061418382614ea6565b602082019050919050565b600061419b602c83614916565b91506141a682614ecf565b604082019050919050565b60006141be603883614916565b91506141c982614f1e565b604082019050919050565b60006141e1602a83614916565b91506141ec82614f6d565b604082019050919050565b6000614204602983614916565b915061420f82614fbc565b604082019050919050565b6000614227602083614916565b91506142328261500b565b602082019050919050565b600061424a602d83614916565b915061425582615034565b604082019050919050565b600061426d602c83614916565b915061427882615083565b604082019050919050565b6000614290601783614916565b915061429b826150d2565b602082019050919050565b60006142b3602083614916565b91506142be826150fb565b602082019050919050565b60006142d6601883614916565b91506142e182615124565b602082019050919050565b60006142f9602483614916565b91506143048261514d565b604082019050919050565b600061431c602183614916565b91506143278261519c565b604082019050919050565b600061433f60008361490b565b915061434a826151eb565b600082019050919050565b6000614362603183614916565b915061436d826151ee565b604082019050919050565b6000614385603083614916565b91506143908261523d565b604082019050919050565b60006143a8601883614916565b91506143b38261528c565b602082019050919050565b6143c781614ab1565b82525050565b6143d681614ab1565b82525050565b60006143e88286613fc6565b91506143f48285613fc6565b91506144008284613ff7565b9150819050949350505050565b600061441882614332565b9150819050919050565b60006020820190506144376000830184613ed8565b92915050565b60006080820190506144526000830187613ed8565b61445f6020830186613ed8565b61446c60408301856143cd565b818103606083015261447e8184613f54565b905095945050505050565b600060208201905081810360008301526144a38184613ee7565b905092915050565b60006020820190506144c06000830184613f45565b92915050565b600060208201905081810360008301526144e08184613f8d565b905092915050565b6000602082019050818103600083015261450181614076565b9050919050565b6000602082019050818103600083015261452181614099565b9050919050565b60006020820190508181036000830152614541816140bc565b9050919050565b60006020820190508181036000830152614561816140df565b9050919050565b6000602082019050818103600083015261458181614102565b9050919050565b600060208201905081810360008301526145a181614125565b9050919050565b600060208201905081810360008301526145c181614148565b9050919050565b600060208201905081810360008301526145e18161416b565b9050919050565b600060208201905081810360008301526146018161418e565b9050919050565b60006020820190508181036000830152614621816141b1565b9050919050565b60006020820190508181036000830152614641816141d4565b9050919050565b60006020820190508181036000830152614661816141f7565b9050919050565b600060208201905081810360008301526146818161421a565b9050919050565b600060208201905081810360008301526146a18161423d565b9050919050565b600060208201905081810360008301526146c181614260565b9050919050565b600060208201905081810360008301526146e181614283565b9050919050565b60006020820190508181036000830152614701816142a6565b9050919050565b60006020820190508181036000830152614721816142c9565b9050919050565b60006020820190508181036000830152614741816142ec565b9050919050565b600060208201905081810360008301526147618161430f565b9050919050565b6000602082019050818103600083015261478181614355565b9050919050565b600060208201905081810360008301526147a181614378565b9050919050565b600060208201905081810360008301526147c18161439b565b9050919050565b60006020820190506147dd60008301846143cd565b92915050565b60006147ed6147fe565b90506147f98282614b2f565b919050565b6000604051905090565b600067ffffffffffffffff82111561482357614822614c96565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561484f5761484e614c96565b5b61485882614cde565b9050602081019050919050565b600067ffffffffffffffff8211156148805761487f614c96565b5b61488982614cde565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061493d82614ab1565b915061494883614ab1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561497d5761497c614bda565b5b828201905092915050565b600061499382614ab1565b915061499e83614ab1565b9250826149ae576149ad614c09565b5b828204905092915050565b60006149c482614ab1565b91506149cf83614ab1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a0857614a07614bda565b5b828202905092915050565b6000614a1e82614ab1565b9150614a2983614ab1565b925082821015614a3c57614a3b614bda565b5b828203905092915050565b6000614a5282614a91565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614ae8578082015181840152602081019050614acd565b83811115614af7576000848401525b50505050565b60006002820490506001821680614b1557607f821691505b60208210811415614b2957614b28614c38565b5b50919050565b614b3882614cde565b810181811067ffffffffffffffff82111715614b5757614b56614c96565b5b80604052505050565b6000614b6b82614ab1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b9e57614b9d614bda565b5b600182019050919050565b6000614bb482614ab1565b9150614bbf83614ab1565b925082614bcf57614bce614c09565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d53473a2055736572206973206e6f742077686974656c697374656400000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4d53473a2054686520636f6e7472616374206973207061757365640000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4d53473a204d6178204e4654207065722061646472657373206578636565646560008201527f6420666f722070726573616c6500000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d53473a20496e73756666696369656e742066756e6473000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d53473a20496e76616c6964206d696e7420616d6f756e740000000000000000600082015250565b7f4d53473a2055524920717565727920666f72206e6f6e6578697374656e74207460008201527f6f6b656e00000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d53473a204d6178204e4654207065722061646472657373206578636565646560008201527f6420666f72207075626c696373616c6500000000000000000000000000000000602082015250565b7f4d53473a204d617820737570706c792065786365656465640000000000000000600082015250565b6152be81614a47565b81146152c957600080fd5b50565b6152d581614a59565b81146152e057600080fd5b50565b6152ec81614a65565b81146152f757600080fd5b50565b61530381614ab1565b811461530e57600080fd5b5056fea26469706673582212208e608d1c21701217edf0aa5dfee76cd9eb80ec44ee329cb2bf0d0ac40046b5bc64736f6c63430008070033
Deployed Bytecode Sourcemap
38775:7249:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45751:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25574:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26519:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39845:65;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28078:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27601:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44158:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44291:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40964:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28828:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39153:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45280:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44512:145;;;:::i;:::-;;29238:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42309:687;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45421:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39055:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39550:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38965:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26213:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43537:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39384:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25943:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6195:103;;;;;;;;;;;;;:::i;:::-;;44021:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5544:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43411:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39199:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39490:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26688:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45878:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39616:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41080:465;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28371:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39095:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43690:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29494:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39435:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45542:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44402:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43022:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39267:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41754:352;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43868:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28597:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39306:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42116:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41576:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6453:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39776:62;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39687:56;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39583:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45751:119;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45857:5:::1;45823:24;:31;45848:5;45823:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;45751:119:::0;:::o;25574:305::-;25676:4;25728:25;25713:40;;;:11;:40;;;;:105;;;;25785:33;25770:48;;;:11;:48;;;;25713:105;:158;;;;25835:36;25859:11;25835:23;:36::i;:::-;25713:158;25693:178;;25574:305;;;:::o;26519:100::-;26573:13;26606:5;26599:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26519:100;:::o;39845:65::-;;;;;;;;;;;;;;;;;:::o;28078:221::-;28154:7;28182:16;28190:7;28182;:16::i;:::-;28174:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28267:15;:24;28283:7;28267:24;;;;;;;;;;;;;;;;;;;;;28260:31;;28078:221;;;:::o;27601:411::-;27682:13;27698:23;27713:7;27698:14;:23::i;:::-;27682:39;;27746:5;27740:11;;:2;:11;;;;27732:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27840:5;27824:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27849:37;27866:5;27873:12;:10;:12::i;:::-;27849:16;:37::i;:::-;27824:62;27802:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27983:21;27992:2;27996:7;27983:8;:21::i;:::-;27671:341;27601:411;;:::o;44158:106::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44246:10:::1;44234:9;:22;;;;;;;;;;;;:::i;:::-;;44158:106:::0;:::o;44291:83::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44360:6:::1;44351;;:15;;;;;;;;;;;;;;;;;;44291:83:::0;:::o;40964:95::-;41008:7;41035:16;:6;:14;:16::i;:::-;41028:23;;40964:95;:::o;28828:339::-;29023:41;29042:12;:10;:12::i;:::-;29056:7;29023:18;:41::i;:::-;29015:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29131:28;29141:4;29147:2;29151:7;29131:9;:28::i;:::-;28828:339;;;:::o;39153:39::-;;;;:::o;45280:101::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45367:6:::1;45349:15;;:24;;;;;;;;;;;;;;;;;;45280:101:::0;:::o;44512:145::-;44559:7;44580;:5;:7::i;:::-;44572:21;;44601;44572:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44558:69;;;44646:2;44638:11;;;;;;44547:110;44512:145::o;29238:185::-;29376:39;29393:4;29399:2;29403:7;29376:39;;;;;;;;;;;;:16;:39::i;:::-;29238:185;;;:::o;42309:687::-;42369:16;42398:23;42424:17;42434:6;42424:9;:17::i;:::-;42398:43;;42452:30;42499:15;42485:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42452:63;;42528:22;42553:1;42528:26;;42565:23;42605:351;42630:15;42612;:33;:64;;;;;42667:9;;42649:14;:27;;42612:64;42605:351;;;42693:25;42721:23;42729:14;42721:7;:23::i;:::-;42693:51;;42786:6;42765:27;;:17;:27;;;42761:151;;;42846:14;42813:13;42827:15;42813:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;42879:17;;;;;:::i;:::-;;;;42761:151;42928:16;;;;;:::i;:::-;;;;42678:278;42605:351;;;42975:13;42968:20;;;;;;42309:687;;;:::o;45421:113::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45522:4:::1;45488:24;:31;45513:5;45488:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;45421:113:::0;:::o;39055:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39550:26::-;;;;;;;;;;;;;:::o;38965:83::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26213:239::-;26285:7;26305:13;26321:7;:16;26329:7;26321:16;;;;;;;;;;;;;;;;;;;;;26305:32;;26373:1;26356:19;;:5;:19;;;;26348:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26439:5;26432:12;;;26213:239;;;:::o;43537:100::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43624:5:::1;43607:14;:22;;;;43537:100:::0;:::o;39384:44::-;;;;:::o;25943:208::-;26015:7;26060:1;26043:19;;:5;:19;;;;26035:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26127:9;:16;26137:5;26127:16;;;;;;;;;;;;;;;;26120:23;;25943:208;;;:::o;6195:103::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6260:30:::1;6287:1;6260:18;:30::i;:::-;6195:103::o:0;44021:106::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44109:10:::1;44097:9;:22;;;;;;;;;;;;:::i;:::-;;44021:106:::0;:::o;5544:87::-;5590:7;5617:6;;;;;;;;;;;5610:13;;5544:87;:::o;43411:94::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43492:5:::1;43478:11;:19;;;;43411:94:::0;:::o;39199:42::-;;;;:::o;39490:37::-;;;;:::o;26688:104::-;26744:13;26777:7;26770:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26688:104;:::o;45878:143::-;45937:4;45961:24;:31;45986:5;45961:31;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;46006:7;:5;:7::i;:::-;45997:16;;:5;:16;;;45961:52;45954:59;;45878:143;;;:::o;39616:34::-;;;;;;;;;;;;;:::o;41080:465::-;41145:11;40102:4;40091:15;;:7;;;;;;;;;;;:15;;;40088:630;;;40145:4;40126:23;;:15;;;;;;;;;;;:23;;;40123:129;;;40178:25;40192:10;40178:13;:25::i;:::-;40170:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;40123:129;40268:24;40295:27;:39;40323:10;40295:39;;;;;;;;;;;;;;;;40268:66;;40391:25;;40376:11;40357:16;:30;;;;:::i;:::-;:59;;40349:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;40108:370;40088:630;;;40499:24;40526:30;:42;40557:10;40526:42;;;;;;;;;;;;;;;;40499:69;;40625:28;;40610:11;40591:16;:30;;;;:::i;:::-;:62;;40583:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;40484:234;40088:630;40752:1;40738:11;:15;:52;;;;;40772:18;;40757:11;:33;;40738:52;40730:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;40872:14;;40857:11;40838:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:48;;40830:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;41178:6:::1;;;;;;;;;;;41177:7;41169:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;41251:4;41240:15;;:7;;;;;;;;;;;:15;;;41237:231;;;41307:11;41293;;:25;;;;:::i;:::-;41280:9;:38;;41272:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;41237:231;;;41417:11;41400:14;;:28;;;;:::i;:::-;41387:9;:41;;41379:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;41237:231;41480:34;41490:10;41502:11;41480:9;:34::i;:::-;41527:10;:8;:10::i;:::-;41080:465:::0;;:::o;28371:155::-;28466:52;28485:12;:10;:12::i;:::-;28499:8;28509;28466:18;:52::i;:::-;28371:155;;:::o;39095:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43690:128::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43805:5:::1;43774:28;:36;;;;43690:128:::0;:::o;29494:328::-;29669:41;29688:12;:10;:12::i;:::-;29702:7;29669:18;:41::i;:::-;29661:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29775:39;29789:4;29795:2;29799:7;29808:5;29775:13;:39::i;:::-;29494:328;;;;:::o;39435:48::-;;;;:::o;45542:201::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45629:9:::1;45624:112;45646:6;:13;45643:1;:16;45624:112;;;45719:4;45681:24;:35;45706:6;45713:1;45706:9;;;;;;;;:::i;:::-;;;;;;;;45681:35;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;45661:3;;;;;:::i;:::-;;;;45624:112;;;;45542:201:::0;:::o;44402:85::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44473:6:::1;44463:7;;:16;;;;;;;;;;;;;;;;;;44402:85:::0;:::o;43022:360::-;43096:13;43130:17;43138:8;43130:7;:17::i;:::-;43122:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;43201:28;43232:10;:8;:10::i;:::-;43201:41;;43293:1;43268:14;43262:28;:32;:112;;;;;;;;;;;;;;;;;43321:14;43337:19;:8;:17;:19::i;:::-;43358:9;43304:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43262:112;43255:119;;;43022:360;;;:::o;39267:32::-;;;;:::o;41754:352::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41836:6:::1;;;;;;;;;;;41835:7;41827:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;41887:31;41897:10;41909:8;41887:9;:31::i;:::-;41945:4;41934:15;;:7;;;;;;;;;;;:15;;;41931:168;;;41966:30;:42;41997:10;41966:42;;;;;;;;;;;;;;;;:44;;;;;;;;;:::i;:::-;;;;;;41931:168;;;42043:30;:42;42074:10;42043:42;;;;;;;;;;;;;;;;:44;;;;;;;;;:::i;:::-;;;;;;41931:168;41754:352:::0;:::o;43868:122::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43977:5:::1;43949:25;:33;;;;43868:122:::0;:::o;28597:164::-;28694:4;28718:18;:25;28737:5;28718:25;;;;;;;;;;;;;;;:35;28744:8;28718:35;;;;;;;;;;;;;;;;;;;;;;;;;28711:42;;28597:164;;;;:::o;39306:37::-;;;;:::o;42116:161::-;42202:11;40102:4;40091:15;;:7;;;;;;;;;;;:15;;;40088:630;;;40145:4;40126:23;;:15;;;;;;;;;;;:23;;;40123:129;;;40178:25;40192:10;40178:13;:25::i;:::-;40170:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;40123:129;40268:24;40295:27;:39;40323:10;40295:39;;;;;;;;;;;;;;;;40268:66;;40391:25;;40376:11;40357:16;:30;;;;:::i;:::-;:59;;40349:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;40108:370;40088:630;;;40499:24;40526:30;:42;40557:10;40526:42;;;;;;;;;;;;;;;;40499:69;;40625:28;;40610:11;40591:16;:30;;;;:::i;:::-;:62;;40583:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;40484:234;40088:630;40752:1;40738:11;:15;:52;;;;;40772:18;;40757:11;:33;;40738:52;40730:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;40872:14;;40857:11;40838:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:48;;40830:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;5775:12:::1;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42236:33:::2;42246:9;42257:11;42236:9;:33::i;:::-;42116:161:::0;;;:::o;41576:170::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41653:6:::1;;;;;;;;;;;41652:7;41644:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;41704:34;41714:10;41726:11;41704:9;:34::i;:::-;41576:170:::0;:::o;6453:201::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6562:1:::1;6542:22;;:8;:22;;;;6534:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6618:28;6637:8;6618:18;:28::i;:::-;6453:201:::0;:::o;39776:62::-;;;;;;;;;;;;;;;;;:::o;39687:56::-;;;;;;;;;;;;;;;;;;;;;;:::o;39583:26::-;;;;;;;;;;;;;:::o;4268:98::-;4321:7;4348:10;4341:17;;4268:98;:::o;18328:157::-;18413:4;18452:25;18437:40;;;:11;:40;;;;18430:47;;18328:157;;;:::o;31332:127::-;31397:4;31449:1;31421:30;;:7;:16;31429:7;31421:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31414:37;;31332:127;;;:::o;35478:174::-;35580:2;35553:15;:24;35569:7;35553:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35636:7;35632:2;35598:46;;35607:23;35622:7;35607:14;:23::i;:::-;35598:46;;;;;;;;;;;;35478:174;;:::o;872:114::-;937:7;964;:14;;;957:21;;872:114;;;:::o;31626:348::-;31719:4;31744:16;31752:7;31744;:16::i;:::-;31736:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31820:13;31836:23;31851:7;31836:14;:23::i;:::-;31820:39;;31889:5;31878:16;;:7;:16;;;:51;;;;31922:7;31898:31;;:20;31910:7;31898:11;:20::i;:::-;:31;;;31878:51;:87;;;;31933:32;31950:5;31957:7;31933:16;:32::i;:::-;31878:87;31870:96;;;31626:348;;;;:::o;34735:625::-;34894:4;34867:31;;:23;34882:7;34867:14;:23::i;:::-;:31;;;34859:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;34973:1;34959:16;;:2;:16;;;;34951:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35029:39;35050:4;35056:2;35060:7;35029:20;:39::i;:::-;35133:29;35150:1;35154:7;35133:8;:29::i;:::-;35194:1;35175:9;:15;35185:4;35175:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35223:1;35206:9;:13;35216:2;35206:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35254:2;35235:7;:16;35243:7;35235:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35293:7;35289:2;35274:27;;35283:4;35274:27;;;;;;;;;;;;35314:38;35334:4;35340:2;35344:7;35314:19;:38::i;:::-;34735:625;;;:::o;6814:191::-;6888:16;6907:6;;;;;;;;;;;6888:25;;6933:8;6924:6;;:17;;;;;;;;;;;;;;;;;;6988:8;6957:40;;6978:8;6957:40;;;;;;;;;;;;6877:128;6814:191;:::o;44683:425::-;44767:9;44762:339;44786:11;44782:1;:15;44762:339;;;44819:18;:6;:16;:18::i;:::-;44854:38;44864:9;44875:16;:6;:14;:16::i;:::-;44854:9;:38::i;:::-;44923:4;44912:15;;:7;;;;;;;;;;;:15;;;44909:181;;;44948:27;:39;44976:10;44948:39;;;;;;;;;;;;;;;;:41;;;;;;;;;:::i;:::-;;;;;;44909:181;;;45030:30;:42;45061:10;45030:42;;;;;;;;;;;;;;;;:44;;;;;;;;;:::i;:::-;;;;;;44909:181;44799:3;;;;;:::i;:::-;;;;44762:339;;;;44683:425;;:::o;35794:315::-;35949:8;35940:17;;:5;:17;;;;35932:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36036:8;35998:18;:25;36017:5;35998:25;;;;;;;;;;;;;;;:35;36024:8;35998:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36082:8;36060:41;;36075:5;36060:41;;;36092:8;36060:41;;;;;;:::i;:::-;;;;;;;;35794:315;;;:::o;30704:::-;30861:28;30871:4;30877:2;30881:7;30861:9;:28::i;:::-;30908:48;30931:4;30937:2;30941:7;30950:5;30908:22;:48::i;:::-;30900:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30704:315;;;;:::o;45133:110::-;45193:13;45226:9;45219:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45133:110;:::o;1830:723::-;1886:13;2116:1;2107:5;:10;2103:53;;;2134:10;;;;;;;;;;;;;;;;;;;;;2103:53;2166:12;2181:5;2166:20;;2197:14;2222:78;2237:1;2229:4;:9;2222:78;;2255:8;;;;;:::i;:::-;;;;2286:2;2278:10;;;;;:::i;:::-;;;2222:78;;;2310:19;2342:6;2332:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2310:39;;2360:154;2376:1;2367:5;:10;2360:154;;2404:1;2394:11;;;;;:::i;:::-;;;2471:2;2463:5;:10;;;;:::i;:::-;2450:2;:24;;;;:::i;:::-;2437:39;;2420:6;2427;2420:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2500:2;2491:11;;;;;:::i;:::-;;;2360:154;;;2538:6;2524:21;;;;;1830:723;;;;:::o;32316:110::-;32392:26;32402:2;32406:7;32392:26;;;;;;;;;;;;:9;:26::i;:::-;32316:110;;:::o;38045:126::-;;;;:::o;38556:125::-;;;;:::o;994:127::-;1101:1;1083:7;:14;;;:19;;;;;;;;;;;994:127;:::o;36674:799::-;36829:4;36850:15;:2;:13;;;:15::i;:::-;36846:620;;;36902:2;36886:36;;;36923:12;:10;:12::i;:::-;36937:4;36943:7;36952:5;36886:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36882:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37145:1;37128:6;:13;:18;37124:272;;;37171:60;;;;;;;;;;:::i;:::-;;;;;;;;37124:272;37346:6;37340:13;37331:6;37327:2;37323:15;37316:38;36882:529;37019:41;;;37009:51;;;:6;:51;;;;37002:58;;;;;36846:620;37450:4;37443:11;;36674:799;;;;;;;:::o;32653:321::-;32783:18;32789:2;32793:7;32783:5;:18::i;:::-;32834:54;32865:1;32869:2;32873:7;32882:5;32834:22;:54::i;:::-;32812:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32653:321;;;:::o;8245:326::-;8305:4;8562:1;8540:7;:19;;;:23;8533:30;;8245:326;;;:::o;33310:439::-;33404:1;33390:16;;:2;:16;;;;33382:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33463:16;33471:7;33463;:16::i;:::-;33462:17;33454:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33525:45;33554:1;33558:2;33562:7;33525:20;:45::i;:::-;33600:1;33583:9;:13;33593:2;33583:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33631:2;33612:7;:16;33620:7;33612:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33676:7;33672:2;33651:33;;33668:1;33651:33;;;;;;;;;;;;33697:44;33725:1;33729:2;33733:7;33697:19;:44::i;:::-;33310:439;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2924:340::-;2980:5;3029:3;3022:4;3014:6;3010:17;3006:27;2996:122;;3037:79;;:::i;:::-;2996:122;3154:6;3141:20;3179:79;3254:3;3246:6;3239:4;3231:6;3227:17;3179:79;:::i;:::-;3170:88;;2986:278;2924:340;;;;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:329::-;3474:6;3523:2;3511:9;3502:7;3498:23;3494:32;3491:119;;;3529:79;;:::i;:::-;3491:119;3649:1;3674:53;3719:7;3710:6;3699:9;3695:22;3674:53;:::i;:::-;3664:63;;3620:117;3415:329;;;;:::o;3750:474::-;3818:6;3826;3875:2;3863:9;3854:7;3850:23;3846:32;3843:119;;;3881:79;;:::i;:::-;3843:119;4001:1;4026:53;4071:7;4062:6;4051:9;4047:22;4026:53;:::i;:::-;4016:63;;3972:117;4128:2;4154:53;4199:7;4190:6;4179:9;4175:22;4154:53;:::i;:::-;4144:63;;4099:118;3750:474;;;;;:::o;4230:619::-;4307:6;4315;4323;4372:2;4360:9;4351:7;4347:23;4343:32;4340:119;;;4378:79;;:::i;:::-;4340:119;4498:1;4523:53;4568:7;4559:6;4548:9;4544:22;4523:53;:::i;:::-;4513:63;;4469:117;4625:2;4651:53;4696:7;4687:6;4676:9;4672:22;4651:53;:::i;:::-;4641:63;;4596:118;4753:2;4779:53;4824:7;4815:6;4804:9;4800:22;4779:53;:::i;:::-;4769:63;;4724:118;4230:619;;;;;:::o;4855:943::-;4950:6;4958;4966;4974;5023:3;5011:9;5002:7;4998:23;4994:33;4991:120;;;5030:79;;:::i;:::-;4991:120;5150:1;5175:53;5220:7;5211:6;5200:9;5196:22;5175:53;:::i;:::-;5165:63;;5121:117;5277:2;5303:53;5348:7;5339:6;5328:9;5324:22;5303:53;:::i;:::-;5293:63;;5248:118;5405:2;5431:53;5476:7;5467:6;5456:9;5452:22;5431:53;:::i;:::-;5421:63;;5376:118;5561:2;5550:9;5546:18;5533:32;5592:18;5584:6;5581:30;5578:117;;;5614:79;;:::i;:::-;5578:117;5719:62;5773:7;5764:6;5753:9;5749:22;5719:62;:::i;:::-;5709:72;;5504:287;4855:943;;;;;;;:::o;5804:468::-;5869:6;5877;5926:2;5914:9;5905:7;5901:23;5897:32;5894:119;;;5932:79;;:::i;:::-;5894:119;6052:1;6077:53;6122:7;6113:6;6102:9;6098:22;6077:53;:::i;:::-;6067:63;;6023:117;6179:2;6205:50;6247:7;6238:6;6227:9;6223:22;6205:50;:::i;:::-;6195:60;;6150:115;5804:468;;;;;:::o;6278:474::-;6346:6;6354;6403:2;6391:9;6382:7;6378:23;6374:32;6371:119;;;6409:79;;:::i;:::-;6371:119;6529:1;6554:53;6599:7;6590:6;6579:9;6575:22;6554:53;:::i;:::-;6544:63;;6500:117;6656:2;6682:53;6727:7;6718:6;6707:9;6703:22;6682:53;:::i;:::-;6672:63;;6627:118;6278:474;;;;;:::o;6758:539::-;6842:6;6891:2;6879:9;6870:7;6866:23;6862:32;6859:119;;;6897:79;;:::i;:::-;6859:119;7045:1;7034:9;7030:17;7017:31;7075:18;7067:6;7064:30;7061:117;;;7097:79;;:::i;:::-;7061:117;7202:78;7272:7;7263:6;7252:9;7248:22;7202:78;:::i;:::-;7192:88;;6988:302;6758:539;;;;:::o;7303:323::-;7359:6;7408:2;7396:9;7387:7;7383:23;7379:32;7376:119;;;7414:79;;:::i;:::-;7376:119;7534:1;7559:50;7601:7;7592:6;7581:9;7577:22;7559:50;:::i;:::-;7549:60;;7505:114;7303:323;;;;:::o;7632:327::-;7690:6;7739:2;7727:9;7718:7;7714:23;7710:32;7707:119;;;7745:79;;:::i;:::-;7707:119;7865:1;7890:52;7934:7;7925:6;7914:9;7910:22;7890:52;:::i;:::-;7880:62;;7836:116;7632:327;;;;:::o;7965:349::-;8034:6;8083:2;8071:9;8062:7;8058:23;8054:32;8051:119;;;8089:79;;:::i;:::-;8051:119;8209:1;8234:63;8289:7;8280:6;8269:9;8265:22;8234:63;:::i;:::-;8224:73;;8180:127;7965:349;;;;:::o;8320:509::-;8389:6;8438:2;8426:9;8417:7;8413:23;8409:32;8406:119;;;8444:79;;:::i;:::-;8406:119;8592:1;8581:9;8577:17;8564:31;8622:18;8614:6;8611:30;8608:117;;;8644:79;;:::i;:::-;8608:117;8749:63;8804:7;8795:6;8784:9;8780:22;8749:63;:::i;:::-;8739:73;;8535:287;8320:509;;;;:::o;8835:329::-;8894:6;8943:2;8931:9;8922:7;8918:23;8914:32;8911:119;;;8949:79;;:::i;:::-;8911:119;9069:1;9094:53;9139:7;9130:6;9119:9;9115:22;9094:53;:::i;:::-;9084:63;;9040:117;8835:329;;;;:::o;9170:474::-;9238:6;9246;9295:2;9283:9;9274:7;9270:23;9266:32;9263:119;;;9301:79;;:::i;:::-;9263:119;9421:1;9446:53;9491:7;9482:6;9471:9;9467:22;9446:53;:::i;:::-;9436:63;;9392:117;9548:2;9574:53;9619:7;9610:6;9599:9;9595:22;9574:53;:::i;:::-;9564:63;;9519:118;9170:474;;;;;:::o;9650:179::-;9719:10;9740:46;9782:3;9774:6;9740:46;:::i;:::-;9818:4;9813:3;9809:14;9795:28;;9650:179;;;;:::o;9835:118::-;9922:24;9940:5;9922:24;:::i;:::-;9917:3;9910:37;9835:118;;:::o;9989:732::-;10108:3;10137:54;10185:5;10137:54;:::i;:::-;10207:86;10286:6;10281:3;10207:86;:::i;:::-;10200:93;;10317:56;10367:5;10317:56;:::i;:::-;10396:7;10427:1;10412:284;10437:6;10434:1;10431:13;10412:284;;;10513:6;10507:13;10540:63;10599:3;10584:13;10540:63;:::i;:::-;10533:70;;10626:60;10679:6;10626:60;:::i;:::-;10616:70;;10472:224;10459:1;10456;10452:9;10447:14;;10412:284;;;10416:14;10712:3;10705:10;;10113:608;;;9989:732;;;;:::o;10727:109::-;10808:21;10823:5;10808:21;:::i;:::-;10803:3;10796:34;10727:109;;:::o;10842:360::-;10928:3;10956:38;10988:5;10956:38;:::i;:::-;11010:70;11073:6;11068:3;11010:70;:::i;:::-;11003:77;;11089:52;11134:6;11129:3;11122:4;11115:5;11111:16;11089:52;:::i;:::-;11166:29;11188:6;11166:29;:::i;:::-;11161:3;11157:39;11150:46;;10932:270;10842:360;;;;:::o;11208:364::-;11296:3;11324:39;11357:5;11324:39;:::i;:::-;11379:71;11443:6;11438:3;11379:71;:::i;:::-;11372:78;;11459:52;11504:6;11499:3;11492:4;11485:5;11481:16;11459:52;:::i;:::-;11536:29;11558:6;11536:29;:::i;:::-;11531:3;11527:39;11520:46;;11300:272;11208:364;;;;:::o;11578:377::-;11684:3;11712:39;11745:5;11712:39;:::i;:::-;11767:89;11849:6;11844:3;11767:89;:::i;:::-;11760:96;;11865:52;11910:6;11905:3;11898:4;11891:5;11887:16;11865:52;:::i;:::-;11942:6;11937:3;11933:16;11926:23;;11688:267;11578:377;;;;:::o;11985:845::-;12088:3;12125:5;12119:12;12154:36;12180:9;12154:36;:::i;:::-;12206:89;12288:6;12283:3;12206:89;:::i;:::-;12199:96;;12326:1;12315:9;12311:17;12342:1;12337:137;;;;12488:1;12483:341;;;;12304:520;;12337:137;12421:4;12417:9;12406;12402:25;12397:3;12390:38;12457:6;12452:3;12448:16;12441:23;;12337:137;;12483:341;12550:38;12582:5;12550:38;:::i;:::-;12610:1;12624:154;12638:6;12635:1;12632:13;12624:154;;;12712:7;12706:14;12702:1;12697:3;12693:11;12686:35;12762:1;12753:7;12749:15;12738:26;;12660:4;12657:1;12653:12;12648:17;;12624:154;;;12807:6;12802:3;12798:16;12791:23;;12490:334;;12304:520;;12092:738;;11985:845;;;;:::o;12836:366::-;12978:3;12999:67;13063:2;13058:3;12999:67;:::i;:::-;12992:74;;13075:93;13164:3;13075:93;:::i;:::-;13193:2;13188:3;13184:12;13177:19;;12836:366;;;:::o;13208:::-;13350:3;13371:67;13435:2;13430:3;13371:67;:::i;:::-;13364:74;;13447:93;13536:3;13447:93;:::i;:::-;13565:2;13560:3;13556:12;13549:19;;13208:366;;;:::o;13580:::-;13722:3;13743:67;13807:2;13802:3;13743:67;:::i;:::-;13736:74;;13819:93;13908:3;13819:93;:::i;:::-;13937:2;13932:3;13928:12;13921:19;;13580:366;;;:::o;13952:::-;14094:3;14115:67;14179:2;14174:3;14115:67;:::i;:::-;14108:74;;14191:93;14280:3;14191:93;:::i;:::-;14309:2;14304:3;14300:12;14293:19;;13952:366;;;:::o;14324:::-;14466:3;14487:67;14551:2;14546:3;14487:67;:::i;:::-;14480:74;;14563:93;14652:3;14563:93;:::i;:::-;14681:2;14676:3;14672:12;14665:19;;14324:366;;;:::o;14696:::-;14838:3;14859:67;14923:2;14918:3;14859:67;:::i;:::-;14852:74;;14935:93;15024:3;14935:93;:::i;:::-;15053:2;15048:3;15044:12;15037:19;;14696:366;;;:::o;15068:::-;15210:3;15231:67;15295:2;15290:3;15231:67;:::i;:::-;15224:74;;15307:93;15396:3;15307:93;:::i;:::-;15425:2;15420:3;15416:12;15409:19;;15068:366;;;:::o;15440:::-;15582:3;15603:67;15667:2;15662:3;15603:67;:::i;:::-;15596:74;;15679:93;15768:3;15679:93;:::i;:::-;15797:2;15792:3;15788:12;15781:19;;15440:366;;;:::o;15812:::-;15954:3;15975:67;16039:2;16034:3;15975:67;:::i;:::-;15968:74;;16051:93;16140:3;16051:93;:::i;:::-;16169:2;16164:3;16160:12;16153:19;;15812:366;;;:::o;16184:::-;16326:3;16347:67;16411:2;16406:3;16347:67;:::i;:::-;16340:74;;16423:93;16512:3;16423:93;:::i;:::-;16541:2;16536:3;16532:12;16525:19;;16184:366;;;:::o;16556:::-;16698:3;16719:67;16783:2;16778:3;16719:67;:::i;:::-;16712:74;;16795:93;16884:3;16795:93;:::i;:::-;16913:2;16908:3;16904:12;16897:19;;16556:366;;;:::o;16928:::-;17070:3;17091:67;17155:2;17150:3;17091:67;:::i;:::-;17084:74;;17167:93;17256:3;17167:93;:::i;:::-;17285:2;17280:3;17276:12;17269:19;;16928:366;;;:::o;17300:::-;17442:3;17463:67;17527:2;17522:3;17463:67;:::i;:::-;17456:74;;17539:93;17628:3;17539:93;:::i;:::-;17657:2;17652:3;17648:12;17641:19;;17300:366;;;:::o;17672:::-;17814:3;17835:67;17899:2;17894:3;17835:67;:::i;:::-;17828:74;;17911:93;18000:3;17911:93;:::i;:::-;18029:2;18024:3;18020:12;18013:19;;17672:366;;;:::o;18044:::-;18186:3;18207:67;18271:2;18266:3;18207:67;:::i;:::-;18200:74;;18283:93;18372:3;18283:93;:::i;:::-;18401:2;18396:3;18392:12;18385:19;;18044:366;;;:::o;18416:::-;18558:3;18579:67;18643:2;18638:3;18579:67;:::i;:::-;18572:74;;18655:93;18744:3;18655:93;:::i;:::-;18773:2;18768:3;18764:12;18757:19;;18416:366;;;:::o;18788:::-;18930:3;18951:67;19015:2;19010:3;18951:67;:::i;:::-;18944:74;;19027:93;19116:3;19027:93;:::i;:::-;19145:2;19140:3;19136:12;19129:19;;18788:366;;;:::o;19160:::-;19302:3;19323:67;19387:2;19382:3;19323:67;:::i;:::-;19316:74;;19399:93;19488:3;19399:93;:::i;:::-;19517:2;19512:3;19508:12;19501:19;;19160:366;;;:::o;19532:::-;19674:3;19695:67;19759:2;19754:3;19695:67;:::i;:::-;19688:74;;19771:93;19860:3;19771:93;:::i;:::-;19889:2;19884:3;19880:12;19873:19;;19532:366;;;:::o;19904:::-;20046:3;20067:67;20131:2;20126:3;20067:67;:::i;:::-;20060:74;;20143:93;20232:3;20143:93;:::i;:::-;20261:2;20256:3;20252:12;20245:19;;19904:366;;;:::o;20276:398::-;20435:3;20456:83;20537:1;20532:3;20456:83;:::i;:::-;20449:90;;20548:93;20637:3;20548:93;:::i;:::-;20666:1;20661:3;20657:11;20650:18;;20276:398;;;:::o;20680:366::-;20822:3;20843:67;20907:2;20902:3;20843:67;:::i;:::-;20836:74;;20919:93;21008:3;20919:93;:::i;:::-;21037:2;21032:3;21028:12;21021:19;;20680:366;;;:::o;21052:::-;21194:3;21215:67;21279:2;21274:3;21215:67;:::i;:::-;21208:74;;21291:93;21380:3;21291:93;:::i;:::-;21409:2;21404:3;21400:12;21393:19;;21052:366;;;:::o;21424:::-;21566:3;21587:67;21651:2;21646:3;21587:67;:::i;:::-;21580:74;;21663:93;21752:3;21663:93;:::i;:::-;21781:2;21776:3;21772:12;21765:19;;21424:366;;;:::o;21796:108::-;21873:24;21891:5;21873:24;:::i;:::-;21868:3;21861:37;21796:108;;:::o;21910:118::-;21997:24;22015:5;21997:24;:::i;:::-;21992:3;21985:37;21910:118;;:::o;22034:589::-;22259:3;22281:95;22372:3;22363:6;22281:95;:::i;:::-;22274:102;;22393:95;22484:3;22475:6;22393:95;:::i;:::-;22386:102;;22505:92;22593:3;22584:6;22505:92;:::i;:::-;22498:99;;22614:3;22607:10;;22034:589;;;;;;:::o;22629:379::-;22813:3;22835:147;22978:3;22835:147;:::i;:::-;22828:154;;22999:3;22992:10;;22629:379;;;:::o;23014:222::-;23107:4;23145:2;23134:9;23130:18;23122:26;;23158:71;23226:1;23215:9;23211:17;23202:6;23158:71;:::i;:::-;23014:222;;;;:::o;23242:640::-;23437:4;23475:3;23464:9;23460:19;23452:27;;23489:71;23557:1;23546:9;23542:17;23533:6;23489:71;:::i;:::-;23570:72;23638:2;23627:9;23623:18;23614:6;23570:72;:::i;:::-;23652;23720:2;23709:9;23705:18;23696:6;23652:72;:::i;:::-;23771:9;23765:4;23761:20;23756:2;23745:9;23741:18;23734:48;23799:76;23870:4;23861:6;23799:76;:::i;:::-;23791:84;;23242:640;;;;;;;:::o;23888:373::-;24031:4;24069:2;24058:9;24054:18;24046:26;;24118:9;24112:4;24108:20;24104:1;24093:9;24089:17;24082:47;24146:108;24249:4;24240:6;24146:108;:::i;:::-;24138:116;;23888:373;;;;:::o;24267:210::-;24354:4;24392:2;24381:9;24377:18;24369:26;;24405:65;24467:1;24456:9;24452:17;24443:6;24405:65;:::i;:::-;24267:210;;;;:::o;24483:313::-;24596:4;24634:2;24623:9;24619:18;24611:26;;24683:9;24677:4;24673:20;24669:1;24658:9;24654:17;24647:47;24711:78;24784:4;24775:6;24711:78;:::i;:::-;24703:86;;24483:313;;;;:::o;24802:419::-;24968:4;25006:2;24995:9;24991:18;24983:26;;25055:9;25049:4;25045:20;25041:1;25030:9;25026:17;25019:47;25083:131;25209:4;25083:131;:::i;:::-;25075:139;;24802:419;;;:::o;25227:::-;25393:4;25431:2;25420:9;25416:18;25408:26;;25480:9;25474:4;25470:20;25466:1;25455:9;25451:17;25444:47;25508:131;25634:4;25508:131;:::i;:::-;25500:139;;25227:419;;;:::o;25652:::-;25818:4;25856:2;25845:9;25841:18;25833:26;;25905:9;25899:4;25895:20;25891:1;25880:9;25876:17;25869:47;25933:131;26059:4;25933:131;:::i;:::-;25925:139;;25652:419;;;:::o;26077:::-;26243:4;26281:2;26270:9;26266:18;26258:26;;26330:9;26324:4;26320:20;26316:1;26305:9;26301:17;26294:47;26358:131;26484:4;26358:131;:::i;:::-;26350:139;;26077:419;;;:::o;26502:::-;26668:4;26706:2;26695:9;26691:18;26683:26;;26755:9;26749:4;26745:20;26741:1;26730:9;26726:17;26719:47;26783:131;26909:4;26783:131;:::i;:::-;26775:139;;26502:419;;;:::o;26927:::-;27093:4;27131:2;27120:9;27116:18;27108:26;;27180:9;27174:4;27170:20;27166:1;27155:9;27151:17;27144:47;27208:131;27334:4;27208:131;:::i;:::-;27200:139;;26927:419;;;:::o;27352:::-;27518:4;27556:2;27545:9;27541:18;27533:26;;27605:9;27599:4;27595:20;27591:1;27580:9;27576:17;27569:47;27633:131;27759:4;27633:131;:::i;:::-;27625:139;;27352:419;;;:::o;27777:::-;27943:4;27981:2;27970:9;27966:18;27958:26;;28030:9;28024:4;28020:20;28016:1;28005:9;28001:17;27994:47;28058:131;28184:4;28058:131;:::i;:::-;28050:139;;27777:419;;;:::o;28202:::-;28368:4;28406:2;28395:9;28391:18;28383:26;;28455:9;28449:4;28445:20;28441:1;28430:9;28426:17;28419:47;28483:131;28609:4;28483:131;:::i;:::-;28475:139;;28202:419;;;:::o;28627:::-;28793:4;28831:2;28820:9;28816:18;28808:26;;28880:9;28874:4;28870:20;28866:1;28855:9;28851:17;28844:47;28908:131;29034:4;28908:131;:::i;:::-;28900:139;;28627:419;;;:::o;29052:::-;29218:4;29256:2;29245:9;29241:18;29233:26;;29305:9;29299:4;29295:20;29291:1;29280:9;29276:17;29269:47;29333:131;29459:4;29333:131;:::i;:::-;29325:139;;29052:419;;;:::o;29477:::-;29643:4;29681:2;29670:9;29666:18;29658:26;;29730:9;29724:4;29720:20;29716:1;29705:9;29701:17;29694:47;29758:131;29884:4;29758:131;:::i;:::-;29750:139;;29477:419;;;:::o;29902:::-;30068:4;30106:2;30095:9;30091:18;30083:26;;30155:9;30149:4;30145:20;30141:1;30130:9;30126:17;30119:47;30183:131;30309:4;30183:131;:::i;:::-;30175:139;;29902:419;;;:::o;30327:::-;30493:4;30531:2;30520:9;30516:18;30508:26;;30580:9;30574:4;30570:20;30566:1;30555:9;30551:17;30544:47;30608:131;30734:4;30608:131;:::i;:::-;30600:139;;30327:419;;;:::o;30752:::-;30918:4;30956:2;30945:9;30941:18;30933:26;;31005:9;30999:4;30995:20;30991:1;30980:9;30976:17;30969:47;31033:131;31159:4;31033:131;:::i;:::-;31025:139;;30752:419;;;:::o;31177:::-;31343:4;31381:2;31370:9;31366:18;31358:26;;31430:9;31424:4;31420:20;31416:1;31405:9;31401:17;31394:47;31458:131;31584:4;31458:131;:::i;:::-;31450:139;;31177:419;;;:::o;31602:::-;31768:4;31806:2;31795:9;31791:18;31783:26;;31855:9;31849:4;31845:20;31841:1;31830:9;31826:17;31819:47;31883:131;32009:4;31883:131;:::i;:::-;31875:139;;31602:419;;;:::o;32027:::-;32193:4;32231:2;32220:9;32216:18;32208:26;;32280:9;32274:4;32270:20;32266:1;32255:9;32251:17;32244:47;32308:131;32434:4;32308:131;:::i;:::-;32300:139;;32027:419;;;:::o;32452:::-;32618:4;32656:2;32645:9;32641:18;32633:26;;32705:9;32699:4;32695:20;32691:1;32680:9;32676:17;32669:47;32733:131;32859:4;32733:131;:::i;:::-;32725:139;;32452:419;;;:::o;32877:::-;33043:4;33081:2;33070:9;33066:18;33058:26;;33130:9;33124:4;33120:20;33116:1;33105:9;33101:17;33094:47;33158:131;33284:4;33158:131;:::i;:::-;33150:139;;32877:419;;;:::o;33302:::-;33468:4;33506:2;33495:9;33491:18;33483:26;;33555:9;33549:4;33545:20;33541:1;33530:9;33526:17;33519:47;33583:131;33709:4;33583:131;:::i;:::-;33575:139;;33302:419;;;:::o;33727:::-;33893:4;33931:2;33920:9;33916:18;33908:26;;33980:9;33974:4;33970:20;33966:1;33955:9;33951:17;33944:47;34008:131;34134:4;34008:131;:::i;:::-;34000:139;;33727:419;;;:::o;34152:::-;34318:4;34356:2;34345:9;34341:18;34333:26;;34405:9;34399:4;34395:20;34391:1;34380:9;34376:17;34369:47;34433:131;34559:4;34433:131;:::i;:::-;34425:139;;34152:419;;;:::o;34577:222::-;34670:4;34708:2;34697:9;34693:18;34685:26;;34721:71;34789:1;34778:9;34774:17;34765:6;34721:71;:::i;:::-;34577:222;;;;:::o;34805:129::-;34839:6;34866:20;;:::i;:::-;34856:30;;34895:33;34923:4;34915:6;34895:33;:::i;:::-;34805:129;;;:::o;34940:75::-;34973:6;35006:2;35000:9;34990:19;;34940:75;:::o;35021:311::-;35098:4;35188:18;35180:6;35177:30;35174:56;;;35210:18;;:::i;:::-;35174:56;35260:4;35252:6;35248:17;35240:25;;35320:4;35314;35310:15;35302:23;;35021:311;;;:::o;35338:307::-;35399:4;35489:18;35481:6;35478:30;35475:56;;;35511:18;;:::i;:::-;35475:56;35549:29;35571:6;35549:29;:::i;:::-;35541:37;;35633:4;35627;35623:15;35615:23;;35338:307;;;:::o;35651:308::-;35713:4;35803:18;35795:6;35792:30;35789:56;;;35825:18;;:::i;:::-;35789:56;35863:29;35885:6;35863:29;:::i;:::-;35855:37;;35947:4;35941;35937:15;35929:23;;35651:308;;;:::o;35965:132::-;36032:4;36055:3;36047:11;;36085:4;36080:3;36076:14;36068:22;;35965:132;;;:::o;36103:141::-;36152:4;36175:3;36167:11;;36198:3;36195:1;36188:14;36232:4;36229:1;36219:18;36211:26;;36103:141;;;:::o;36250:114::-;36317:6;36351:5;36345:12;36335:22;;36250:114;;;:::o;36370:98::-;36421:6;36455:5;36449:12;36439:22;;36370:98;;;:::o;36474:99::-;36526:6;36560:5;36554:12;36544:22;;36474:99;;;:::o;36579:113::-;36649:4;36681;36676:3;36672:14;36664:22;;36579:113;;;:::o;36698:184::-;36797:11;36831:6;36826:3;36819:19;36871:4;36866:3;36862:14;36847:29;;36698:184;;;;:::o;36888:168::-;36971:11;37005:6;37000:3;36993:19;37045:4;37040:3;37036:14;37021:29;;36888:168;;;;:::o;37062:147::-;37163:11;37200:3;37185:18;;37062:147;;;;:::o;37215:169::-;37299:11;37333:6;37328:3;37321:19;37373:4;37368:3;37364:14;37349:29;;37215:169;;;;:::o;37390:148::-;37492:11;37529:3;37514:18;;37390:148;;;;:::o;37544:305::-;37584:3;37603:20;37621:1;37603:20;:::i;:::-;37598:25;;37637:20;37655:1;37637:20;:::i;:::-;37632:25;;37791:1;37723:66;37719:74;37716:1;37713:81;37710:107;;;37797:18;;:::i;:::-;37710:107;37841:1;37838;37834:9;37827:16;;37544:305;;;;:::o;37855:185::-;37895:1;37912:20;37930:1;37912:20;:::i;:::-;37907:25;;37946:20;37964:1;37946:20;:::i;:::-;37941:25;;37985:1;37975:35;;37990:18;;:::i;:::-;37975:35;38032:1;38029;38025:9;38020:14;;37855:185;;;;:::o;38046:348::-;38086:7;38109:20;38127:1;38109:20;:::i;:::-;38104:25;;38143:20;38161:1;38143:20;:::i;:::-;38138:25;;38331:1;38263:66;38259:74;38256:1;38253:81;38248:1;38241:9;38234:17;38230:105;38227:131;;;38338:18;;:::i;:::-;38227:131;38386:1;38383;38379:9;38368:20;;38046:348;;;;:::o;38400:191::-;38440:4;38460:20;38478:1;38460:20;:::i;:::-;38455:25;;38494:20;38512:1;38494:20;:::i;:::-;38489:25;;38533:1;38530;38527:8;38524:34;;;38538:18;;:::i;:::-;38524:34;38583:1;38580;38576:9;38568:17;;38400:191;;;;:::o;38597:96::-;38634:7;38663:24;38681:5;38663:24;:::i;:::-;38652:35;;38597:96;;;:::o;38699:90::-;38733:7;38776:5;38769:13;38762:21;38751:32;;38699:90;;;:::o;38795:149::-;38831:7;38871:66;38864:5;38860:78;38849:89;;38795:149;;;:::o;38950:126::-;38987:7;39027:42;39020:5;39016:54;39005:65;;38950:126;;;:::o;39082:77::-;39119:7;39148:5;39137:16;;39082:77;;;:::o;39165:154::-;39249:6;39244:3;39239;39226:30;39311:1;39302:6;39297:3;39293:16;39286:27;39165:154;;;:::o;39325:307::-;39393:1;39403:113;39417:6;39414:1;39411:13;39403:113;;;39502:1;39497:3;39493:11;39487:18;39483:1;39478:3;39474:11;39467:39;39439:2;39436:1;39432:10;39427:15;;39403:113;;;39534:6;39531:1;39528:13;39525:101;;;39614:1;39605:6;39600:3;39596:16;39589:27;39525:101;39374:258;39325:307;;;:::o;39638:320::-;39682:6;39719:1;39713:4;39709:12;39699:22;;39766:1;39760:4;39756:12;39787:18;39777:81;;39843:4;39835:6;39831:17;39821:27;;39777:81;39905:2;39897:6;39894:14;39874:18;39871:38;39868:84;;;39924:18;;:::i;:::-;39868:84;39689:269;39638:320;;;:::o;39964:281::-;40047:27;40069:4;40047:27;:::i;:::-;40039:6;40035:40;40177:6;40165:10;40162:22;40141:18;40129:10;40126:34;40123:62;40120:88;;;40188:18;;:::i;:::-;40120:88;40228:10;40224:2;40217:22;40007:238;39964:281;;:::o;40251:233::-;40290:3;40313:24;40331:5;40313:24;:::i;:::-;40304:33;;40359:66;40352:5;40349:77;40346:103;;;40429:18;;:::i;:::-;40346:103;40476:1;40469:5;40465:13;40458:20;;40251:233;;;:::o;40490:176::-;40522:1;40539:20;40557:1;40539:20;:::i;:::-;40534:25;;40573:20;40591:1;40573:20;:::i;:::-;40568:25;;40612:1;40602:35;;40617:18;;:::i;:::-;40602:35;40658:1;40655;40651:9;40646:14;;40490:176;;;;:::o;40672:180::-;40720:77;40717:1;40710:88;40817:4;40814:1;40807:15;40841:4;40838:1;40831:15;40858:180;40906:77;40903:1;40896:88;41003:4;41000:1;40993:15;41027:4;41024:1;41017:15;41044:180;41092:77;41089:1;41082:88;41189:4;41186:1;41179:15;41213:4;41210:1;41203:15;41230:180;41278:77;41275:1;41268:88;41375:4;41372:1;41365:15;41399:4;41396:1;41389:15;41416:180;41464:77;41461:1;41454:88;41561:4;41558:1;41551:15;41585:4;41582:1;41575:15;41602:117;41711:1;41708;41701:12;41725:117;41834:1;41831;41824:12;41848:117;41957:1;41954;41947:12;41971:117;42080:1;42077;42070:12;42094:117;42203:1;42200;42193:12;42217:102;42258:6;42309:2;42305:7;42300:2;42293:5;42289:14;42285:28;42275:38;;42217:102;;;:::o;42325:178::-;42465:30;42461:1;42453:6;42449:14;42442:54;42325:178;:::o;42509:237::-;42649:34;42645:1;42637:6;42633:14;42626:58;42718:20;42713:2;42705:6;42701:15;42694:45;42509:237;:::o;42752:225::-;42892:34;42888:1;42880:6;42876:14;42869:58;42961:8;42956:2;42948:6;42944:15;42937:33;42752:225;:::o;42983:224::-;43123:34;43119:1;43111:6;43107:14;43100:58;43192:7;43187:2;43179:6;43175:15;43168:32;42983:224;:::o;43213:178::-;43353:30;43349:1;43341:6;43337:14;43330:54;43213:178;:::o;43397:177::-;43537:29;43533:1;43525:6;43521:14;43514:53;43397:177;:::o;43580:223::-;43720:34;43716:1;43708:6;43704:14;43697:58;43789:6;43784:2;43776:6;43772:15;43765:31;43580:223;:::o;43809:175::-;43949:27;43945:1;43937:6;43933:14;43926:51;43809:175;:::o;43990:231::-;44130:34;44126:1;44118:6;44114:14;44107:58;44199:14;44194:2;44186:6;44182:15;44175:39;43990:231;:::o;44227:243::-;44367:34;44363:1;44355:6;44351:14;44344:58;44436:26;44431:2;44423:6;44419:15;44412:51;44227:243;:::o;44476:229::-;44616:34;44612:1;44604:6;44600:14;44593:58;44685:12;44680:2;44672:6;44668:15;44661:37;44476:229;:::o;44711:228::-;44851:34;44847:1;44839:6;44835:14;44828:58;44920:11;44915:2;44907:6;44903:15;44896:36;44711:228;:::o;44945:182::-;45085:34;45081:1;45073:6;45069:14;45062:58;44945:182;:::o;45133:232::-;45273:34;45269:1;45261:6;45257:14;45250:58;45342:15;45337:2;45329:6;45325:15;45318:40;45133:232;:::o;45371:231::-;45511:34;45507:1;45499:6;45495:14;45488:58;45580:14;45575:2;45567:6;45563:15;45556:39;45371:231;:::o;45608:173::-;45748:25;45744:1;45736:6;45732:14;45725:49;45608:173;:::o;45787:182::-;45927:34;45923:1;45915:6;45911:14;45904:58;45787:182;:::o;45975:174::-;46115:26;46111:1;46103:6;46099:14;46092:50;45975:174;:::o;46155:223::-;46295:34;46291:1;46283:6;46279:14;46272:58;46364:6;46359:2;46351:6;46347:15;46340:31;46155:223;:::o;46384:220::-;46524:34;46520:1;46512:6;46508:14;46501:58;46593:3;46588:2;46580:6;46576:15;46569:28;46384:220;:::o;46610:114::-;;:::o;46730:236::-;46870:34;46866:1;46858:6;46854:14;46847:58;46939:19;46934:2;46926:6;46922:15;46915:44;46730:236;:::o;46972:235::-;47112:34;47108:1;47100:6;47096:14;47089:58;47181:18;47176:2;47168:6;47164:15;47157:43;46972:235;:::o;47213:174::-;47353:26;47349:1;47341:6;47337:14;47330:50;47213:174;:::o;47393:122::-;47466:24;47484:5;47466:24;:::i;:::-;47459:5;47456:35;47446:63;;47505:1;47502;47495:12;47446:63;47393:122;:::o;47521:116::-;47591:21;47606:5;47591:21;:::i;:::-;47584:5;47581:32;47571:60;;47627:1;47624;47617:12;47571:60;47521:116;:::o;47643:120::-;47715:23;47732:5;47715:23;:::i;:::-;47708:5;47705:34;47695:62;;47753:1;47750;47743:12;47695:62;47643:120;:::o;47769:122::-;47842:24;47860:5;47842:24;:::i;:::-;47835:5;47832:35;47822:63;;47881:1;47878;47871:12;47822:63;47769:122;:::o
Swarm Source
ipfs://8e608d1c21701217edf0aa5dfee76cd9eb80ec44ee329cb2bf0d0ac40046b5bc
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.