Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
78 CHORB
Holders
74
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 CHORBLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ChaoticOrbits
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-05-03 */ // File: @openzeppelin/contracts/utils/structs/BitMaps.sol pragma solidity ^0.8.0; /** * @dev Library for managing uint256 to bool mapping in a compact and efficient way, providing the keys are sequential. * Largelly inspired by Uniswap's https://github.com/Uniswap/merkle-distributor/blob/master/contracts/MerkleDistributor.sol[merkle-distributor]. */ library BitMaps { struct BitMap { mapping(uint256 => uint256) _data; } /** * @dev Returns whether the bit at `index` is set. */ function get(BitMap storage bitmap, uint256 index) internal view returns (bool) { uint256 bucket = index >> 8; uint256 mask = 1 << (index & 0xff); return bitmap._data[bucket] & mask != 0; } /** * @dev Sets the bit at `index` to the boolean `value`. */ function setTo( BitMap storage bitmap, uint256 index, bool value ) internal { if (value) { set(bitmap, index); } else { unset(bitmap, index); } } /** * @dev Sets the bit at `index`. */ function set(BitMap storage bitmap, uint256 index) internal { uint256 bucket = index >> 8; uint256 mask = 1 << (index & 0xff); bitmap._data[bucket] |= mask; } /** * @dev Unsets the bit at `index`. */ function unset(BitMap storage bitmap, uint256 index) internal { uint256 bucket = index >> 8; uint256 mask = 1 << (index & 0xff); bitmap._data[bucket] &= ~mask; } } // File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = keccak256(abi.encodePacked(computedHash, proofElement)); } else { // Hash(current element of the proof + current computed hash) computedHash = keccak256(abi.encodePacked(proofElement, computedHash)); } } // Check if the computed hash (root) is equal to the provided root return computedHash == root; } } // File: @openzeppelin/contracts/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 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 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() { _setOwner(_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 { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol 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 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 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 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 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 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 { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } pragma solidity ^0.8.0; contract ChaoticOrbits is Ownable, ERC721Enumerable { using Strings for uint256; string public sourceCode; bytes32 private _merkleRoot = 0x1c22d6092e58ea95b5a62dd224736136a645e454d9d8a7c3d8c8542dd35934e1; string private _baseTokenURI; uint256 public constant MAX_MINT = 32; // max number of ORB to be minted publicly uint256 public constant ABS_MAX = 305; // hard cap to prevent funky business uint256 public constant orbitPrice = 150000000000000000; // 0.15 ETH bool public _publicSaleIsActive = false; uint256 private _totalMinted = 0; uint256 private _mintNr = 1; mapping (address => bool) private _claimed; constructor() ERC721("Chaotic Orbits", "CHORB") { } function flipSaleStatePublic() public onlyOwner { _publicSaleIsActive = !_publicSaleIsActive; } function withdraw() onlyOwner public { Address.sendValue(payable(owner()), address(this).balance); } function _baseURI() internal view override returns (string memory) { return _baseTokenURI; } function setBaseURI(string memory baseTokenURI) onlyOwner public { _baseTokenURI = baseTokenURI; } function setMerkleProof(bytes32 root) onlyOwner public { _merkleRoot = root; } function uploadSourceCode(string calldata code) onlyOwner public { sourceCode = code; } function publicMint() public payable { require(msg.sender == tx.origin,"byebye"); require(_publicSaleIsActive, "wait for pub"); // open minting require(_totalMinted+_mintNr < MAX_MINT, "too many"); // does adding 1 exceed max? require(totalSupply()+_mintNr < ABS_MAX, "max reached"); require(msg.value >= orbitPrice, "more eth"); // value needs to be correct _safeMint(msg.sender, totalSupply()); _totalMinted++; } function merkleClaim(bytes32[] calldata proof) public { require(!_claimed[msg.sender], "already claimed"); require(totalSupply()+_mintNr < ABS_MAX, "max reached"); _claimed[msg.sender] = true; bytes32 node = keccak256(abi.encodePacked(msg.sender)); require(MerkleProof.verify(proof, _merkleRoot, node), "invalid proof"); _safeMint(msg.sender, totalSupply()); } // incase any issues arise with claiming - though they shoulnd't - owner can mint up to mint max to then send to relevant addy of user function safetyBackdoor() onlyOwner public { require(totalSupply()+_mintNr < ABS_MAX, "max reached"); _safeMint(msg.sender, totalSupply()); } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { return string(abi.encodePacked(_baseURI(), "/", tokenId.toString())); } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"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":[],"name":"ABS_MAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_publicSaleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipSaleStatePublic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"merkleClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"orbitPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"safetyBackdoor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseTokenURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"setMerkleProof","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sourceCode","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"code","type":"string"}],"name":"uploadSourceCode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040527f1c22d6092e58ea95b5a62dd224736136a645e454d9d8a7c3d8c8542dd35934e160001b600c556000600e60006101000a81548160ff0219169083151502179055506000600f5560016010553480156200005d57600080fd5b506040518060400160405280600e81526020017f4368616f746963204f72626974730000000000000000000000000000000000008152506040518060400160405280600581526020017f43484f5242000000000000000000000000000000000000000000000000000000815250620000ea620000de6200012460201b60201c565b6200012c60201b60201c565b816001908051906020019062000102929190620001f0565b5080600290805190602001906200011b929190620001f0565b50505062000305565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001fe90620002a0565b90600052602060002090601f0160209004810192826200022257600085556200026e565b82601f106200023d57805160ff19168380011785556200026e565b828001600101855582156200026e579182015b828111156200026d57825182559160200191906001019062000250565b5b5090506200027d919062000281565b5090565b5b808211156200029c57600081600090555060010162000282565b5090565b60006002820490506001821680620002b957607f821691505b60208210811415620002d057620002cf620002d6565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61474b80620003156000396000f3fe6080604052600436106101e35760003560e01c80636352211e1161010257806395d89b4111610095578063c87b56dd11610064578063c87b56dd14610685578063e985e9c5146106c2578063f0292a03146106ff578063f2fde38b1461072a576101e3565b806395d89b41146105dd578063a22cb46514610608578063b7c8b06514610631578063b88d4fde1461065c576101e3565b80637a490137116100d15780637a4901371461054957806386758912146105725780638da5cb5b1461059b57806392ea7d9c146105c6576101e3565b80636352211e1461048d57806365feeafa146104ca57806370a08231146104f5578063715018a614610532576101e3565b806318eb27241161017a5780633ccfd60b116101495780633ccfd60b146103e757806342842e0e146103fe5780634f6ccce71461042757806355f804b314610464576101e3565b806318eb27241461034e57806323b872dd1461037757806326092b83146103a05780632f745c59146103aa576101e3565b8063095ea7b3116101b6578063095ea7b3146102b85780630b2abb4a146102e157806313c60177146102f857806318160ddd14610323576101e3565b806301ffc9a7146101e85780630687a99a1461022557806306fdde0314610250578063081812fc1461027b575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a919061331d565b610753565b60405161021c9190613efc565b60405180910390f35b34801561023157600080fd5b5061023a610765565b6040516102479190614279565b60405180910390f35b34801561025c57600080fd5b5061026561076b565b6040516102729190613f17565b60405180910390f35b34801561028757600080fd5b506102a2600480360381019061029d91906133f5565b6107fd565b6040516102af9190613e95565b60405180910390f35b3480156102c457600080fd5b506102df60048036038101906102da9190613273565b610882565b005b3480156102ed57600080fd5b506102f661099a565b005b34801561030457600080fd5b5061030d610a81565b60405161031a9190613f17565b60405180910390f35b34801561032f57600080fd5b50610338610b0f565b6040516103459190614279565b60405180910390f35b34801561035a57600080fd5b506103756004803603810190610370919061336f565b610b1c565b005b34801561038357600080fd5b5061039e6004803603810190610399919061316d565b610bae565b005b6103a8610c0e565b005b3480156103b657600080fd5b506103d160048036038101906103cc9190613273565b610deb565b6040516103de9190614279565b60405180910390f35b3480156103f357600080fd5b506103fc610e90565b005b34801561040a57600080fd5b506104256004803603810190610420919061316d565b610f1f565b005b34801561043357600080fd5b5061044e600480360381019061044991906133f5565b610f3f565b60405161045b9190614279565b60405180910390f35b34801561047057600080fd5b5061048b600480360381019061048691906133b4565b610fd6565b005b34801561049957600080fd5b506104b460048036038101906104af91906133f5565b61106c565b6040516104c19190613e95565b60405180910390f35b3480156104d657600080fd5b506104df61111e565b6040516104ec9190613efc565b60405180910390f35b34801561050157600080fd5b5061051c60048036038101906105179190613108565b611131565b6040516105299190614279565b60405180910390f35b34801561053e57600080fd5b506105476111e9565b005b34801561055557600080fd5b50610570600480360381019061056b91906132af565b611271565b005b34801561057e57600080fd5b50610599600480360381019061059491906132f4565b61147c565b005b3480156105a757600080fd5b506105b0611502565b6040516105bd9190613e95565b60405180910390f35b3480156105d257600080fd5b506105db61152b565b005b3480156105e957600080fd5b506105f26115d3565b6040516105ff9190613f17565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a9190613237565b611665565b005b34801561063d57600080fd5b506106466117e6565b6040516106539190614279565b60405180910390f35b34801561066857600080fd5b50610683600480360381019061067e91906131bc565b6117f2565b005b34801561069157600080fd5b506106ac60048036038101906106a791906133f5565b611854565b6040516106b99190613f17565b60405180910390f35b3480156106ce57600080fd5b506106e960048036038101906106e49190613131565b61188e565b6040516106f69190613efc565b60405180910390f35b34801561070b57600080fd5b50610714611922565b6040516107219190614279565b60405180910390f35b34801561073657600080fd5b50610751600480360381019061074c9190613108565b611927565b005b600061075e82611a1f565b9050919050565b61013181565b60606001805461077a906144ee565b80601f01602080910402602001604051908101604052809291908181526020018280546107a6906144ee565b80156107f35780601f106107c8576101008083540402835291602001916107f3565b820191906000526020600020905b8154815290600101906020018083116107d657829003601f168201915b5050505050905090565b600061080882611a99565b610847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083e90614119565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061088d8261106c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f5906141b9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661091d611b05565b73ffffffffffffffffffffffffffffffffffffffff16148061094c575061094b81610946611b05565b61188e565b5b61098b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098290614099565b60405180910390fd5b6109958383611b0d565b505050565b6109a2611b05565b73ffffffffffffffffffffffffffffffffffffffff166109c0611502565b73ffffffffffffffffffffffffffffffffffffffff1614610a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0d90614139565b60405180910390fd5b610131601054610a24610b0f565b610a2e9190614373565b10610a6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6590614239565b60405180910390fd5b610a7f33610a7a610b0f565b611bc6565b565b600b8054610a8e906144ee565b80601f0160208091040260200160405190810160405280929190818152602001828054610aba906144ee565b8015610b075780601f10610adc57610100808354040283529160200191610b07565b820191906000526020600020905b815481529060010190602001808311610aea57829003601f168201915b505050505081565b6000600980549050905090565b610b24611b05565b73ffffffffffffffffffffffffffffffffffffffff16610b42611502565b73ffffffffffffffffffffffffffffffffffffffff1614610b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8f90614139565b60405180910390fd5b8181600b9190610ba9929190612dfd565b505050565b610bbf610bb9611b05565b82611be4565b610bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf5906141d9565b60405180910390fd5b610c09838383611cc2565b505050565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7390614259565b60405180910390fd5b600e60009054906101000a900460ff16610ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc290614179565b60405180910390fd5b6020601054600f54610cdd9190614373565b10610d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1490614199565b60405180910390fd5b610131601054610d2b610b0f565b610d359190614373565b10610d75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6c90614239565b60405180910390fd5b670214e8348c4f0000341015610dc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db790613fd9565b60405180910390fd5b610dd133610dcc610b0f565b611bc6565b600f6000815480929190610de490614520565b9190505550565b6000610df683611131565b8210610e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2e90613f39565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610e98611b05565b73ffffffffffffffffffffffffffffffffffffffff16610eb6611502565b73ffffffffffffffffffffffffffffffffffffffff1614610f0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0390614139565b60405180910390fd5b610f1d610f17611502565b47611f1e565b565b610f3a838383604051806020016040528060008152506117f2565b505050565b6000610f49610b0f565b8210610f8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8190614219565b60405180910390fd5b60098281548110610fc4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610fde611b05565b73ffffffffffffffffffffffffffffffffffffffff16610ffc611502565b73ffffffffffffffffffffffffffffffffffffffff1614611052576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104990614139565b60405180910390fd5b80600d9080519060200190611068929190612e83565b5050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110c906140d9565b60405180910390fd5b80915050919050565b600e60009054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611199906140b9565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111f1611b05565b73ffffffffffffffffffffffffffffffffffffffff1661120f611502565b73ffffffffffffffffffffffffffffffffffffffff1614611265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125c90614139565b60405180910390fd5b61126f6000612012565b565b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156112fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f590613fb9565b60405180910390fd5b61013160105461130c610b0f565b6113169190614373565b10611356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134d90614239565b60405180910390fd5b6001601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000336040516020016113c19190613e0a565b604051602081830303815290604052805190602001209050611427838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600c54836120d6565b611466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145d906141f9565b60405180910390fd5b61147733611472610b0f565b611bc6565b505050565b611484611b05565b73ffffffffffffffffffffffffffffffffffffffff166114a2611502565b73ffffffffffffffffffffffffffffffffffffffff16146114f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ef90614139565b60405180910390fd5b80600c8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611533611b05565b73ffffffffffffffffffffffffffffffffffffffff16611551611502565b73ffffffffffffffffffffffffffffffffffffffff16146115a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159e90614139565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b6060600280546115e2906144ee565b80601f016020809104026020016040519081016040528092919081815260200182805461160e906144ee565b801561165b5780601f106116305761010080835404028352916020019161165b565b820191906000526020600020905b81548152906001019060200180831161163e57829003601f168201915b5050505050905090565b61166d611b05565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d290614019565b60405180910390fd5b80600660006116e8611b05565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611795611b05565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117da9190613efc565b60405180910390a35050565b670214e8348c4f000081565b6118036117fd611b05565b83611be4565b611842576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611839906141d9565b60405180910390fd5b61184e848484846121b2565b50505050565b606061185e61220e565b611867836122a0565b604051602001611878929190613e51565b6040516020818303038152906040529050919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b602081565b61192f611b05565b73ffffffffffffffffffffffffffffffffffffffff1661194d611502565b73ffffffffffffffffffffffffffffffffffffffff16146119a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199a90614139565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0a90613f79565b60405180910390fd5b611a1c81612012565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611a925750611a918261244d565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b808361106c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611be082826040518060200160405280600081525061252f565b5050565b6000611bef82611a99565b611c2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2590614079565b60405180910390fd5b6000611c398361106c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611ca857508373ffffffffffffffffffffffffffffffffffffffff16611c90846107fd565b73ffffffffffffffffffffffffffffffffffffffff16145b80611cb95750611cb8818561188e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ce28261106c565b73ffffffffffffffffffffffffffffffffffffffff1614611d38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2f90614159565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611da8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9f90613ff9565b60405180910390fd5b611db383838361258a565b611dbe600082611b0d565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e0e91906143fa565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e659190614373565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b80471015611f61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5890614059565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611f8790613e80565b60006040518083038185875af1925050503d8060008114611fc4576040519150601f19603f3d011682016040523d82523d6000602084013e611fc9565b606091505b505090508061200d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200490614039565b60405180910390fd5b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008082905060005b85518110156121a4576000868281518110612123577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050808311612164578281604051602001612147929190613e25565b604051602081830303815290604052805190602001209250612190565b8083604051602001612177929190613e25565b6040516020818303038152906040528051906020012092505b50808061219c90614520565b9150506120df565b508381149150509392505050565b6121bd848484611cc2565b6121c98484848461269e565b612208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ff90613f59565b60405180910390fd5b50505050565b6060600d805461221d906144ee565b80601f0160208091040260200160405190810160405280929190818152602001828054612249906144ee565b80156122965780601f1061226b57610100808354040283529160200191612296565b820191906000526020600020905b81548152906001019060200180831161227957829003601f168201915b5050505050905090565b606060008214156122e8576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612448565b600082905060005b6000821461231a57808061230390614520565b915050600a8261231391906143c9565b91506122f0565b60008167ffffffffffffffff81111561235c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561238e5781602001600182028036833780820191505090505b5090505b60008514612441576001826123a791906143fa565b9150600a856123b69190614597565b60306123c29190614373565b60f81b8183815181106123fe577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561243a91906143c9565b9450612392565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061251857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612528575061252782612835565b5b9050919050565b612539838361289f565b612546600084848461269e565b612585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257c90613f59565b60405180910390fd5b505050565b612595838383612a6d565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125d8576125d381612a72565b612617565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612616576126158382612abb565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561265a5761265581612c28565b612699565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612698576126978282612d6b565b5b5b505050565b60006126bf8473ffffffffffffffffffffffffffffffffffffffff16612dea565b15612828578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026126e8611b05565b8786866040518563ffffffff1660e01b815260040161270a9493929190613eb0565b602060405180830381600087803b15801561272457600080fd5b505af192505050801561275557506040513d601f19601f820116820180604052508101906127529190613346565b60015b6127d8573d8060008114612785576040519150601f19603f3d011682016040523d82523d6000602084013e61278a565b606091505b506000815114156127d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c790613f59565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061282d565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561290f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612906906140f9565b60405180910390fd5b61291881611a99565b15612958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294f90613f99565b60405180910390fd5b6129646000838361258a565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129b49190614373565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612ac884611131565b612ad291906143fa565b9050600060086000848152602001908152602001600020549050818114612bb7576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600980549050612c3c91906143fa565b90506000600a6000848152602001908152602001600020549050600060098381548110612c92577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060098381548110612cda577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a6000858152602001908152602001600020600090556009805480612d4f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612d7683611131565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054612e09906144ee565b90600052602060002090601f016020900481019282612e2b5760008555612e72565b82601f10612e4457803560ff1916838001178555612e72565b82800160010185558215612e72579182015b82811115612e71578235825591602001919060010190612e56565b5b509050612e7f9190612f09565b5090565b828054612e8f906144ee565b90600052602060002090601f016020900481019282612eb15760008555612ef8565b82601f10612eca57805160ff1916838001178555612ef8565b82800160010185558215612ef8579182015b82811115612ef7578251825591602001919060010190612edc565b5b509050612f059190612f09565b5090565b5b80821115612f22576000816000905550600101612f0a565b5090565b6000612f39612f34846142c5565b614294565b905082815260208101848484011115612f5157600080fd5b612f5c8482856144ac565b509392505050565b6000612f77612f72846142f5565b614294565b905082815260208101848484011115612f8f57600080fd5b612f9a8482856144ac565b509392505050565b600081359050612fb1816146a2565b92915050565b60008083601f840112612fc957600080fd5b8235905067ffffffffffffffff811115612fe257600080fd5b602083019150836020820283011115612ffa57600080fd5b9250929050565b600081359050613010816146b9565b92915050565b600081359050613025816146d0565b92915050565b60008135905061303a816146e7565b92915050565b60008151905061304f816146e7565b92915050565b600082601f83011261306657600080fd5b8135613076848260208601612f26565b91505092915050565b60008083601f84011261309157600080fd5b8235905067ffffffffffffffff8111156130aa57600080fd5b6020830191508360018202830111156130c257600080fd5b9250929050565b600082601f8301126130da57600080fd5b81356130ea848260208601612f64565b91505092915050565b600081359050613102816146fe565b92915050565b60006020828403121561311a57600080fd5b600061312884828501612fa2565b91505092915050565b6000806040838503121561314457600080fd5b600061315285828601612fa2565b925050602061316385828601612fa2565b9150509250929050565b60008060006060848603121561318257600080fd5b600061319086828701612fa2565b93505060206131a186828701612fa2565b92505060406131b2868287016130f3565b9150509250925092565b600080600080608085870312156131d257600080fd5b60006131e087828801612fa2565b94505060206131f187828801612fa2565b9350506040613202878288016130f3565b925050606085013567ffffffffffffffff81111561321f57600080fd5b61322b87828801613055565b91505092959194509250565b6000806040838503121561324a57600080fd5b600061325885828601612fa2565b925050602061326985828601613001565b9150509250929050565b6000806040838503121561328657600080fd5b600061329485828601612fa2565b92505060206132a5858286016130f3565b9150509250929050565b600080602083850312156132c257600080fd5b600083013567ffffffffffffffff8111156132dc57600080fd5b6132e885828601612fb7565b92509250509250929050565b60006020828403121561330657600080fd5b600061331484828501613016565b91505092915050565b60006020828403121561332f57600080fd5b600061333d8482850161302b565b91505092915050565b60006020828403121561335857600080fd5b600061336684828501613040565b91505092915050565b6000806020838503121561338257600080fd5b600083013567ffffffffffffffff81111561339c57600080fd5b6133a88582860161307f565b92509250509250929050565b6000602082840312156133c657600080fd5b600082013567ffffffffffffffff8111156133e057600080fd5b6133ec848285016130c9565b91505092915050565b60006020828403121561340757600080fd5b6000613415848285016130f3565b91505092915050565b6134278161442e565b82525050565b61343e6134398261442e565b614569565b82525050565b61344d81614440565b82525050565b61346461345f8261444c565b61457b565b82525050565b600061347582614325565b61347f818561433b565b935061348f8185602086016144bb565b61349881614684565b840191505092915050565b60006134ae82614330565b6134b88185614357565b93506134c88185602086016144bb565b6134d181614684565b840191505092915050565b60006134e782614330565b6134f18185614368565b93506135018185602086016144bb565b80840191505092915050565b600061351a602b83614357565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000613580603283614357565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b60006135e6602683614357565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061364c601c83614357565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b600061368c600f83614357565b91507f616c726561647920636c61696d656400000000000000000000000000000000006000830152602082019050919050565b60006136cc600883614357565b91507f6d6f7265206574680000000000000000000000000000000000000000000000006000830152602082019050919050565b600061370c602483614357565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613772601983614357565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006137b2603a83614357565b91507f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008301527f6563697069656e74206d617920686176652072657665727465640000000000006020830152604082019050919050565b6000613818601d83614357565b91507f416464726573733a20696e73756666696369656e742062616c616e63650000006000830152602082019050919050565b6000613858602c83614357565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006138be603883614357565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000613924602a83614357565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b600061398a602983614357565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006139f0602083614357565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000613a30602c83614357565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613a96602083614357565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613ad6602983614357565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b3c600c83614357565b91507f7761697420666f722070756200000000000000000000000000000000000000006000830152602082019050919050565b6000613b7c600883614357565b91507f746f6f206d616e790000000000000000000000000000000000000000000000006000830152602082019050919050565b6000613bbc602183614357565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613c2260008361434c565b9150600082019050919050565b6000613c3c603183614357565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613ca2600d83614357565b91507f696e76616c69642070726f6f66000000000000000000000000000000000000006000830152602082019050919050565b6000613ce2602c83614357565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000613d48600b83614357565b91507f6d617820726561636865640000000000000000000000000000000000000000006000830152602082019050919050565b6000613d88600683614357565b91507f62796562796500000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000613dc8600183614368565b91507f2f000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b613e04816144a2565b82525050565b6000613e16828461342d565b60148201915081905092915050565b6000613e318285613453565b602082019150613e418284613453565b6020820191508190509392505050565b6000613e5d82856134dc565b9150613e6882613dbb565b9150613e7482846134dc565b91508190509392505050565b6000613e8b82613c15565b9150819050919050565b6000602082019050613eaa600083018461341e565b92915050565b6000608082019050613ec5600083018761341e565b613ed2602083018661341e565b613edf6040830185613dfb565b8181036060830152613ef1818461346a565b905095945050505050565b6000602082019050613f116000830184613444565b92915050565b60006020820190508181036000830152613f3181846134a3565b905092915050565b60006020820190508181036000830152613f528161350d565b9050919050565b60006020820190508181036000830152613f7281613573565b9050919050565b60006020820190508181036000830152613f92816135d9565b9050919050565b60006020820190508181036000830152613fb28161363f565b9050919050565b60006020820190508181036000830152613fd28161367f565b9050919050565b60006020820190508181036000830152613ff2816136bf565b9050919050565b60006020820190508181036000830152614012816136ff565b9050919050565b6000602082019050818103600083015261403281613765565b9050919050565b60006020820190508181036000830152614052816137a5565b9050919050565b600060208201905081810360008301526140728161380b565b9050919050565b600060208201905081810360008301526140928161384b565b9050919050565b600060208201905081810360008301526140b2816138b1565b9050919050565b600060208201905081810360008301526140d281613917565b9050919050565b600060208201905081810360008301526140f28161397d565b9050919050565b60006020820190508181036000830152614112816139e3565b9050919050565b6000602082019050818103600083015261413281613a23565b9050919050565b6000602082019050818103600083015261415281613a89565b9050919050565b6000602082019050818103600083015261417281613ac9565b9050919050565b6000602082019050818103600083015261419281613b2f565b9050919050565b600060208201905081810360008301526141b281613b6f565b9050919050565b600060208201905081810360008301526141d281613baf565b9050919050565b600060208201905081810360008301526141f281613c2f565b9050919050565b6000602082019050818103600083015261421281613c95565b9050919050565b6000602082019050818103600083015261423281613cd5565b9050919050565b6000602082019050818103600083015261425281613d3b565b9050919050565b6000602082019050818103600083015261427281613d7b565b9050919050565b600060208201905061428e6000830184613dfb565b92915050565b6000604051905081810181811067ffffffffffffffff821117156142bb576142ba614655565b5b8060405250919050565b600067ffffffffffffffff8211156142e0576142df614655565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156143105761430f614655565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061437e826144a2565b9150614389836144a2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143be576143bd6145c8565b5b828201905092915050565b60006143d4826144a2565b91506143df836144a2565b9250826143ef576143ee6145f7565b5b828204905092915050565b6000614405826144a2565b9150614410836144a2565b925082821015614423576144226145c8565b5b828203905092915050565b600061443982614482565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156144d95780820151818401526020810190506144be565b838111156144e8576000848401525b50505050565b6000600282049050600182168061450657607f821691505b6020821081141561451a57614519614626565b5b50919050565b600061452b826144a2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561455e5761455d6145c8565b5b600182019050919050565b600061457482614585565b9050919050565b6000819050919050565b600061459082614695565b9050919050565b60006145a2826144a2565b91506145ad836144a2565b9250826145bd576145bc6145f7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b6146ab8161442e565b81146146b657600080fd5b50565b6146c281614440565b81146146cd57600080fd5b50565b6146d98161444c565b81146146e457600080fd5b50565b6146f081614456565b81146146fb57600080fd5b50565b614707816144a2565b811461471257600080fd5b5056fea26469706673582212205a91dcc8e9efb9790b0b797e284f9c1d573a754df53c22e552bc689c1ad424bd64736f6c63430008000033
Deployed Bytecode
0x6080604052600436106101e35760003560e01c80636352211e1161010257806395d89b4111610095578063c87b56dd11610064578063c87b56dd14610685578063e985e9c5146106c2578063f0292a03146106ff578063f2fde38b1461072a576101e3565b806395d89b41146105dd578063a22cb46514610608578063b7c8b06514610631578063b88d4fde1461065c576101e3565b80637a490137116100d15780637a4901371461054957806386758912146105725780638da5cb5b1461059b57806392ea7d9c146105c6576101e3565b80636352211e1461048d57806365feeafa146104ca57806370a08231146104f5578063715018a614610532576101e3565b806318eb27241161017a5780633ccfd60b116101495780633ccfd60b146103e757806342842e0e146103fe5780634f6ccce71461042757806355f804b314610464576101e3565b806318eb27241461034e57806323b872dd1461037757806326092b83146103a05780632f745c59146103aa576101e3565b8063095ea7b3116101b6578063095ea7b3146102b85780630b2abb4a146102e157806313c60177146102f857806318160ddd14610323576101e3565b806301ffc9a7146101e85780630687a99a1461022557806306fdde0314610250578063081812fc1461027b575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a919061331d565b610753565b60405161021c9190613efc565b60405180910390f35b34801561023157600080fd5b5061023a610765565b6040516102479190614279565b60405180910390f35b34801561025c57600080fd5b5061026561076b565b6040516102729190613f17565b60405180910390f35b34801561028757600080fd5b506102a2600480360381019061029d91906133f5565b6107fd565b6040516102af9190613e95565b60405180910390f35b3480156102c457600080fd5b506102df60048036038101906102da9190613273565b610882565b005b3480156102ed57600080fd5b506102f661099a565b005b34801561030457600080fd5b5061030d610a81565b60405161031a9190613f17565b60405180910390f35b34801561032f57600080fd5b50610338610b0f565b6040516103459190614279565b60405180910390f35b34801561035a57600080fd5b506103756004803603810190610370919061336f565b610b1c565b005b34801561038357600080fd5b5061039e6004803603810190610399919061316d565b610bae565b005b6103a8610c0e565b005b3480156103b657600080fd5b506103d160048036038101906103cc9190613273565b610deb565b6040516103de9190614279565b60405180910390f35b3480156103f357600080fd5b506103fc610e90565b005b34801561040a57600080fd5b506104256004803603810190610420919061316d565b610f1f565b005b34801561043357600080fd5b5061044e600480360381019061044991906133f5565b610f3f565b60405161045b9190614279565b60405180910390f35b34801561047057600080fd5b5061048b600480360381019061048691906133b4565b610fd6565b005b34801561049957600080fd5b506104b460048036038101906104af91906133f5565b61106c565b6040516104c19190613e95565b60405180910390f35b3480156104d657600080fd5b506104df61111e565b6040516104ec9190613efc565b60405180910390f35b34801561050157600080fd5b5061051c60048036038101906105179190613108565b611131565b6040516105299190614279565b60405180910390f35b34801561053e57600080fd5b506105476111e9565b005b34801561055557600080fd5b50610570600480360381019061056b91906132af565b611271565b005b34801561057e57600080fd5b50610599600480360381019061059491906132f4565b61147c565b005b3480156105a757600080fd5b506105b0611502565b6040516105bd9190613e95565b60405180910390f35b3480156105d257600080fd5b506105db61152b565b005b3480156105e957600080fd5b506105f26115d3565b6040516105ff9190613f17565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a9190613237565b611665565b005b34801561063d57600080fd5b506106466117e6565b6040516106539190614279565b60405180910390f35b34801561066857600080fd5b50610683600480360381019061067e91906131bc565b6117f2565b005b34801561069157600080fd5b506106ac60048036038101906106a791906133f5565b611854565b6040516106b99190613f17565b60405180910390f35b3480156106ce57600080fd5b506106e960048036038101906106e49190613131565b61188e565b6040516106f69190613efc565b60405180910390f35b34801561070b57600080fd5b50610714611922565b6040516107219190614279565b60405180910390f35b34801561073657600080fd5b50610751600480360381019061074c9190613108565b611927565b005b600061075e82611a1f565b9050919050565b61013181565b60606001805461077a906144ee565b80601f01602080910402602001604051908101604052809291908181526020018280546107a6906144ee565b80156107f35780601f106107c8576101008083540402835291602001916107f3565b820191906000526020600020905b8154815290600101906020018083116107d657829003601f168201915b5050505050905090565b600061080882611a99565b610847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083e90614119565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061088d8261106c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f5906141b9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661091d611b05565b73ffffffffffffffffffffffffffffffffffffffff16148061094c575061094b81610946611b05565b61188e565b5b61098b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098290614099565b60405180910390fd5b6109958383611b0d565b505050565b6109a2611b05565b73ffffffffffffffffffffffffffffffffffffffff166109c0611502565b73ffffffffffffffffffffffffffffffffffffffff1614610a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0d90614139565b60405180910390fd5b610131601054610a24610b0f565b610a2e9190614373565b10610a6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6590614239565b60405180910390fd5b610a7f33610a7a610b0f565b611bc6565b565b600b8054610a8e906144ee565b80601f0160208091040260200160405190810160405280929190818152602001828054610aba906144ee565b8015610b075780601f10610adc57610100808354040283529160200191610b07565b820191906000526020600020905b815481529060010190602001808311610aea57829003601f168201915b505050505081565b6000600980549050905090565b610b24611b05565b73ffffffffffffffffffffffffffffffffffffffff16610b42611502565b73ffffffffffffffffffffffffffffffffffffffff1614610b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8f90614139565b60405180910390fd5b8181600b9190610ba9929190612dfd565b505050565b610bbf610bb9611b05565b82611be4565b610bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf5906141d9565b60405180910390fd5b610c09838383611cc2565b505050565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7390614259565b60405180910390fd5b600e60009054906101000a900460ff16610ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc290614179565b60405180910390fd5b6020601054600f54610cdd9190614373565b10610d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1490614199565b60405180910390fd5b610131601054610d2b610b0f565b610d359190614373565b10610d75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6c90614239565b60405180910390fd5b670214e8348c4f0000341015610dc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db790613fd9565b60405180910390fd5b610dd133610dcc610b0f565b611bc6565b600f6000815480929190610de490614520565b9190505550565b6000610df683611131565b8210610e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2e90613f39565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610e98611b05565b73ffffffffffffffffffffffffffffffffffffffff16610eb6611502565b73ffffffffffffffffffffffffffffffffffffffff1614610f0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0390614139565b60405180910390fd5b610f1d610f17611502565b47611f1e565b565b610f3a838383604051806020016040528060008152506117f2565b505050565b6000610f49610b0f565b8210610f8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8190614219565b60405180910390fd5b60098281548110610fc4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610fde611b05565b73ffffffffffffffffffffffffffffffffffffffff16610ffc611502565b73ffffffffffffffffffffffffffffffffffffffff1614611052576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104990614139565b60405180910390fd5b80600d9080519060200190611068929190612e83565b5050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110c906140d9565b60405180910390fd5b80915050919050565b600e60009054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611199906140b9565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111f1611b05565b73ffffffffffffffffffffffffffffffffffffffff1661120f611502565b73ffffffffffffffffffffffffffffffffffffffff1614611265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125c90614139565b60405180910390fd5b61126f6000612012565b565b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156112fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f590613fb9565b60405180910390fd5b61013160105461130c610b0f565b6113169190614373565b10611356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134d90614239565b60405180910390fd5b6001601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000336040516020016113c19190613e0a565b604051602081830303815290604052805190602001209050611427838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600c54836120d6565b611466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145d906141f9565b60405180910390fd5b61147733611472610b0f565b611bc6565b505050565b611484611b05565b73ffffffffffffffffffffffffffffffffffffffff166114a2611502565b73ffffffffffffffffffffffffffffffffffffffff16146114f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ef90614139565b60405180910390fd5b80600c8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611533611b05565b73ffffffffffffffffffffffffffffffffffffffff16611551611502565b73ffffffffffffffffffffffffffffffffffffffff16146115a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159e90614139565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b6060600280546115e2906144ee565b80601f016020809104026020016040519081016040528092919081815260200182805461160e906144ee565b801561165b5780601f106116305761010080835404028352916020019161165b565b820191906000526020600020905b81548152906001019060200180831161163e57829003601f168201915b5050505050905090565b61166d611b05565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d290614019565b60405180910390fd5b80600660006116e8611b05565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611795611b05565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117da9190613efc565b60405180910390a35050565b670214e8348c4f000081565b6118036117fd611b05565b83611be4565b611842576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611839906141d9565b60405180910390fd5b61184e848484846121b2565b50505050565b606061185e61220e565b611867836122a0565b604051602001611878929190613e51565b6040516020818303038152906040529050919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b602081565b61192f611b05565b73ffffffffffffffffffffffffffffffffffffffff1661194d611502565b73ffffffffffffffffffffffffffffffffffffffff16146119a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199a90614139565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0a90613f79565b60405180910390fd5b611a1c81612012565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611a925750611a918261244d565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b808361106c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611be082826040518060200160405280600081525061252f565b5050565b6000611bef82611a99565b611c2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2590614079565b60405180910390fd5b6000611c398361106c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611ca857508373ffffffffffffffffffffffffffffffffffffffff16611c90846107fd565b73ffffffffffffffffffffffffffffffffffffffff16145b80611cb95750611cb8818561188e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ce28261106c565b73ffffffffffffffffffffffffffffffffffffffff1614611d38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2f90614159565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611da8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9f90613ff9565b60405180910390fd5b611db383838361258a565b611dbe600082611b0d565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e0e91906143fa565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e659190614373565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b80471015611f61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5890614059565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611f8790613e80565b60006040518083038185875af1925050503d8060008114611fc4576040519150601f19603f3d011682016040523d82523d6000602084013e611fc9565b606091505b505090508061200d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200490614039565b60405180910390fd5b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008082905060005b85518110156121a4576000868281518110612123577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050808311612164578281604051602001612147929190613e25565b604051602081830303815290604052805190602001209250612190565b8083604051602001612177929190613e25565b6040516020818303038152906040528051906020012092505b50808061219c90614520565b9150506120df565b508381149150509392505050565b6121bd848484611cc2565b6121c98484848461269e565b612208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ff90613f59565b60405180910390fd5b50505050565b6060600d805461221d906144ee565b80601f0160208091040260200160405190810160405280929190818152602001828054612249906144ee565b80156122965780601f1061226b57610100808354040283529160200191612296565b820191906000526020600020905b81548152906001019060200180831161227957829003601f168201915b5050505050905090565b606060008214156122e8576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612448565b600082905060005b6000821461231a57808061230390614520565b915050600a8261231391906143c9565b91506122f0565b60008167ffffffffffffffff81111561235c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561238e5781602001600182028036833780820191505090505b5090505b60008514612441576001826123a791906143fa565b9150600a856123b69190614597565b60306123c29190614373565b60f81b8183815181106123fe577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561243a91906143c9565b9450612392565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061251857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612528575061252782612835565b5b9050919050565b612539838361289f565b612546600084848461269e565b612585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257c90613f59565b60405180910390fd5b505050565b612595838383612a6d565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125d8576125d381612a72565b612617565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612616576126158382612abb565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561265a5761265581612c28565b612699565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612698576126978282612d6b565b5b5b505050565b60006126bf8473ffffffffffffffffffffffffffffffffffffffff16612dea565b15612828578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026126e8611b05565b8786866040518563ffffffff1660e01b815260040161270a9493929190613eb0565b602060405180830381600087803b15801561272457600080fd5b505af192505050801561275557506040513d601f19601f820116820180604052508101906127529190613346565b60015b6127d8573d8060008114612785576040519150601f19603f3d011682016040523d82523d6000602084013e61278a565b606091505b506000815114156127d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c790613f59565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061282d565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561290f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612906906140f9565b60405180910390fd5b61291881611a99565b15612958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294f90613f99565b60405180910390fd5b6129646000838361258a565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129b49190614373565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612ac884611131565b612ad291906143fa565b9050600060086000848152602001908152602001600020549050818114612bb7576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600980549050612c3c91906143fa565b90506000600a6000848152602001908152602001600020549050600060098381548110612c92577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060098381548110612cda577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a6000858152602001908152602001600020600090556009805480612d4f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612d7683611131565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054612e09906144ee565b90600052602060002090601f016020900481019282612e2b5760008555612e72565b82601f10612e4457803560ff1916838001178555612e72565b82800160010185558215612e72579182015b82811115612e71578235825591602001919060010190612e56565b5b509050612e7f9190612f09565b5090565b828054612e8f906144ee565b90600052602060002090601f016020900481019282612eb15760008555612ef8565b82601f10612eca57805160ff1916838001178555612ef8565b82800160010185558215612ef8579182015b82811115612ef7578251825591602001919060010190612edc565b5b509050612f059190612f09565b5090565b5b80821115612f22576000816000905550600101612f0a565b5090565b6000612f39612f34846142c5565b614294565b905082815260208101848484011115612f5157600080fd5b612f5c8482856144ac565b509392505050565b6000612f77612f72846142f5565b614294565b905082815260208101848484011115612f8f57600080fd5b612f9a8482856144ac565b509392505050565b600081359050612fb1816146a2565b92915050565b60008083601f840112612fc957600080fd5b8235905067ffffffffffffffff811115612fe257600080fd5b602083019150836020820283011115612ffa57600080fd5b9250929050565b600081359050613010816146b9565b92915050565b600081359050613025816146d0565b92915050565b60008135905061303a816146e7565b92915050565b60008151905061304f816146e7565b92915050565b600082601f83011261306657600080fd5b8135613076848260208601612f26565b91505092915050565b60008083601f84011261309157600080fd5b8235905067ffffffffffffffff8111156130aa57600080fd5b6020830191508360018202830111156130c257600080fd5b9250929050565b600082601f8301126130da57600080fd5b81356130ea848260208601612f64565b91505092915050565b600081359050613102816146fe565b92915050565b60006020828403121561311a57600080fd5b600061312884828501612fa2565b91505092915050565b6000806040838503121561314457600080fd5b600061315285828601612fa2565b925050602061316385828601612fa2565b9150509250929050565b60008060006060848603121561318257600080fd5b600061319086828701612fa2565b93505060206131a186828701612fa2565b92505060406131b2868287016130f3565b9150509250925092565b600080600080608085870312156131d257600080fd5b60006131e087828801612fa2565b94505060206131f187828801612fa2565b9350506040613202878288016130f3565b925050606085013567ffffffffffffffff81111561321f57600080fd5b61322b87828801613055565b91505092959194509250565b6000806040838503121561324a57600080fd5b600061325885828601612fa2565b925050602061326985828601613001565b9150509250929050565b6000806040838503121561328657600080fd5b600061329485828601612fa2565b92505060206132a5858286016130f3565b9150509250929050565b600080602083850312156132c257600080fd5b600083013567ffffffffffffffff8111156132dc57600080fd5b6132e885828601612fb7565b92509250509250929050565b60006020828403121561330657600080fd5b600061331484828501613016565b91505092915050565b60006020828403121561332f57600080fd5b600061333d8482850161302b565b91505092915050565b60006020828403121561335857600080fd5b600061336684828501613040565b91505092915050565b6000806020838503121561338257600080fd5b600083013567ffffffffffffffff81111561339c57600080fd5b6133a88582860161307f565b92509250509250929050565b6000602082840312156133c657600080fd5b600082013567ffffffffffffffff8111156133e057600080fd5b6133ec848285016130c9565b91505092915050565b60006020828403121561340757600080fd5b6000613415848285016130f3565b91505092915050565b6134278161442e565b82525050565b61343e6134398261442e565b614569565b82525050565b61344d81614440565b82525050565b61346461345f8261444c565b61457b565b82525050565b600061347582614325565b61347f818561433b565b935061348f8185602086016144bb565b61349881614684565b840191505092915050565b60006134ae82614330565b6134b88185614357565b93506134c88185602086016144bb565b6134d181614684565b840191505092915050565b60006134e782614330565b6134f18185614368565b93506135018185602086016144bb565b80840191505092915050565b600061351a602b83614357565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000613580603283614357565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b60006135e6602683614357565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061364c601c83614357565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b600061368c600f83614357565b91507f616c726561647920636c61696d656400000000000000000000000000000000006000830152602082019050919050565b60006136cc600883614357565b91507f6d6f7265206574680000000000000000000000000000000000000000000000006000830152602082019050919050565b600061370c602483614357565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613772601983614357565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006137b2603a83614357565b91507f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008301527f6563697069656e74206d617920686176652072657665727465640000000000006020830152604082019050919050565b6000613818601d83614357565b91507f416464726573733a20696e73756666696369656e742062616c616e63650000006000830152602082019050919050565b6000613858602c83614357565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006138be603883614357565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000613924602a83614357565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b600061398a602983614357565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006139f0602083614357565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000613a30602c83614357565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613a96602083614357565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613ad6602983614357565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b3c600c83614357565b91507f7761697420666f722070756200000000000000000000000000000000000000006000830152602082019050919050565b6000613b7c600883614357565b91507f746f6f206d616e790000000000000000000000000000000000000000000000006000830152602082019050919050565b6000613bbc602183614357565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613c2260008361434c565b9150600082019050919050565b6000613c3c603183614357565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613ca2600d83614357565b91507f696e76616c69642070726f6f66000000000000000000000000000000000000006000830152602082019050919050565b6000613ce2602c83614357565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000613d48600b83614357565b91507f6d617820726561636865640000000000000000000000000000000000000000006000830152602082019050919050565b6000613d88600683614357565b91507f62796562796500000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000613dc8600183614368565b91507f2f000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b613e04816144a2565b82525050565b6000613e16828461342d565b60148201915081905092915050565b6000613e318285613453565b602082019150613e418284613453565b6020820191508190509392505050565b6000613e5d82856134dc565b9150613e6882613dbb565b9150613e7482846134dc565b91508190509392505050565b6000613e8b82613c15565b9150819050919050565b6000602082019050613eaa600083018461341e565b92915050565b6000608082019050613ec5600083018761341e565b613ed2602083018661341e565b613edf6040830185613dfb565b8181036060830152613ef1818461346a565b905095945050505050565b6000602082019050613f116000830184613444565b92915050565b60006020820190508181036000830152613f3181846134a3565b905092915050565b60006020820190508181036000830152613f528161350d565b9050919050565b60006020820190508181036000830152613f7281613573565b9050919050565b60006020820190508181036000830152613f92816135d9565b9050919050565b60006020820190508181036000830152613fb28161363f565b9050919050565b60006020820190508181036000830152613fd28161367f565b9050919050565b60006020820190508181036000830152613ff2816136bf565b9050919050565b60006020820190508181036000830152614012816136ff565b9050919050565b6000602082019050818103600083015261403281613765565b9050919050565b60006020820190508181036000830152614052816137a5565b9050919050565b600060208201905081810360008301526140728161380b565b9050919050565b600060208201905081810360008301526140928161384b565b9050919050565b600060208201905081810360008301526140b2816138b1565b9050919050565b600060208201905081810360008301526140d281613917565b9050919050565b600060208201905081810360008301526140f28161397d565b9050919050565b60006020820190508181036000830152614112816139e3565b9050919050565b6000602082019050818103600083015261413281613a23565b9050919050565b6000602082019050818103600083015261415281613a89565b9050919050565b6000602082019050818103600083015261417281613ac9565b9050919050565b6000602082019050818103600083015261419281613b2f565b9050919050565b600060208201905081810360008301526141b281613b6f565b9050919050565b600060208201905081810360008301526141d281613baf565b9050919050565b600060208201905081810360008301526141f281613c2f565b9050919050565b6000602082019050818103600083015261421281613c95565b9050919050565b6000602082019050818103600083015261423281613cd5565b9050919050565b6000602082019050818103600083015261425281613d3b565b9050919050565b6000602082019050818103600083015261427281613d7b565b9050919050565b600060208201905061428e6000830184613dfb565b92915050565b6000604051905081810181811067ffffffffffffffff821117156142bb576142ba614655565b5b8060405250919050565b600067ffffffffffffffff8211156142e0576142df614655565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156143105761430f614655565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061437e826144a2565b9150614389836144a2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143be576143bd6145c8565b5b828201905092915050565b60006143d4826144a2565b91506143df836144a2565b9250826143ef576143ee6145f7565b5b828204905092915050565b6000614405826144a2565b9150614410836144a2565b925082821015614423576144226145c8565b5b828203905092915050565b600061443982614482565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156144d95780820151818401526020810190506144be565b838111156144e8576000848401525b50505050565b6000600282049050600182168061450657607f821691505b6020821081141561451a57614519614626565b5b50919050565b600061452b826144a2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561455e5761455d6145c8565b5b600182019050919050565b600061457482614585565b9050919050565b6000819050919050565b600061459082614695565b9050919050565b60006145a2826144a2565b91506145ad836144a2565b9250826145bd576145bc6145f7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b6146ab8161442e565b81146146b657600080fd5b50565b6146c281614440565b81146146cd57600080fd5b50565b6146d98161444c565b81146146e457600080fd5b50565b6146f081614456565b81146146fb57600080fd5b50565b614707816144a2565b811461471257600080fd5b5056fea26469706673582212205a91dcc8e9efb9790b0b797e284f9c1d573a754df53c22e552bc689c1ad424bd64736f6c63430008000033
Deployed Bytecode Sourcemap
46418:3028:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49272:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46771:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27144:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28703:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28226:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48915:166;;;;;;;;;;;;;:::i;:::-;;46513:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40883:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47743:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29593:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47852:484;;;:::i;:::-;;40551:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47287:114;;;;;;;;;;;;;:::i;:::-;;30003:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41073:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47523:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26838:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46927:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26568:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7834:94;;;;;;;;;;;;;:::i;:::-;;48344:419;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47643:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7183:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47170:109;;;;;;;;;;;;;:::i;:::-;;27313:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28996:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46853:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30259:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49089:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29362:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46684:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8083:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49272:171;49375:4;49399:36;49423:11;49399:23;:36::i;:::-;49392:43;;49272:171;;;:::o;46771:37::-;46805:3;46771:37;:::o;27144:100::-;27198:13;27231:5;27224:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27144:100;:::o;28703:221::-;28779:7;28807:16;28815:7;28807;:16::i;:::-;28799:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28892:15;:24;28908:7;28892:24;;;;;;;;;;;;;;;;;;;;;28885:31;;28703:221;;;:::o;28226:411::-;28307:13;28323:23;28338:7;28323:14;:23::i;:::-;28307:39;;28371:5;28365:11;;:2;:11;;;;28357:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28465:5;28449:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28474:37;28491:5;28498:12;:10;:12::i;:::-;28474:16;:37::i;:::-;28449:62;28427:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;28608:21;28617:2;28621:7;28608:8;:21::i;:::-;28226:411;;;:::o;48915:166::-;7414:12;:10;:12::i;:::-;7403:23;;:7;:5;:7::i;:::-;:23;;;7395:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46805:3:::1;48992:7;;48978:13;:11;:13::i;:::-;:21;;;;:::i;:::-;:31;48970:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;49037:36;49047:10;49059:13;:11;:13::i;:::-;49037:9;:36::i;:::-;48915:166::o:0;46513:25::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40883:113::-;40944:7;40971:10;:17;;;;40964:24;;40883:113;:::o;47743:101::-;7414:12;:10;:12::i;:::-;7403:23;;:7;:5;:7::i;:::-;:23;;;7395:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47832:4:::1;;47819:10;:17;;;;;;;:::i;:::-;;47743:101:::0;;:::o;29593:339::-;29788:41;29807:12;:10;:12::i;:::-;29821:7;29788:18;:41::i;:::-;29780:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29896:28;29906:4;29912:2;29916:7;29896:9;:28::i;:::-;29593:339;;;:::o;47852:484::-;47923:9;47909:23;;:10;:23;;;47901:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;47961:19;;;;;;;;;;;47953:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;46719:2;48045:7;;48032:12;;:20;;;;:::i;:::-;:31;48024:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;46805:3;48138:7;;48124:13;:11;:13::i;:::-;:21;;;;:::i;:::-;:31;48116:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;46890:18;48191:9;:23;;48183:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;48267:36;48277:10;48289:13;:11;:13::i;:::-;48267:9;:36::i;:::-;48314:12;;:14;;;;;;;;;:::i;:::-;;;;;;47852:484::o;40551:256::-;40648:7;40684:23;40701:5;40684:16;:23::i;:::-;40676:5;:31;40668:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;40773:12;:19;40786:5;40773:19;;;;;;;;;;;;;;;:26;40793:5;40773:26;;;;;;;;;;;;40766:33;;40551:256;;;;:::o;47287:114::-;7414:12;:10;:12::i;:::-;7403:23;;:7;:5;:7::i;:::-;:23;;;7395:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47335:58:::1;47361:7;:5;:7::i;:::-;47371:21;47335:17;:58::i;:::-;47287:114::o:0;30003:185::-;30141:39;30158:4;30164:2;30168:7;30141:39;;;;;;;;;;;;:16;:39::i;:::-;30003:185;;;:::o;41073:233::-;41148:7;41184:30;:28;:30::i;:::-;41176:5;:38;41168:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;41281:10;41292:5;41281:17;;;;;;;;;;;;;;;;;;;;;;;;41274:24;;41073:233;;;:::o;47523:112::-;7414:12;:10;:12::i;:::-;7403:23;;:7;:5;:7::i;:::-;:23;;;7395:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47615:12:::1;47599:13;:28;;;;;;;;;;;;:::i;:::-;;47523:112:::0;:::o;26838:239::-;26910:7;26930:13;26946:7;:16;26954:7;26946:16;;;;;;;;;;;;;;;;;;;;;26930:32;;26998:1;26981:19;;:5;:19;;;;26973:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27064:5;27057:12;;;26838:239;;;:::o;46927:42::-;;;;;;;;;;;;;:::o;26568:208::-;26640:7;26685:1;26668:19;;:5;:19;;;;26660:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26752:9;:16;26762:5;26752:16;;;;;;;;;;;;;;;;26745:23;;26568:208;;;:::o;7834:94::-;7414:12;:10;:12::i;:::-;7403:23;;:7;:5;:7::i;:::-;:23;;;7395:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7899:21:::1;7917:1;7899:9;:21::i;:::-;7834:94::o:0;48344:419::-;48418:8;:20;48427:10;48418:20;;;;;;;;;;;;;;;;;;;;;;;;;48417:21;48409:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;46805:3;48491:7;;48477:13;:11;:13::i;:::-;:21;;;;:::i;:::-;:31;48469:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;48558:4;48535:8;:20;48544:10;48535:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;48573:12;48615:10;48598:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;48588:39;;;;;;48573:54;;48646:44;48665:5;;48646:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48672:11;;48685:4;48646:18;:44::i;:::-;48638:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;48719:36;48729:10;48741:13;:11;:13::i;:::-;48719:9;:36::i;:::-;48344:419;;;:::o;47643:92::-;7414:12;:10;:12::i;:::-;7403:23;;:7;:5;:7::i;:::-;:23;;;7395:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47723:4:::1;47709:11;:18;;;;47643:92:::0;:::o;7183:87::-;7229:7;7256:6;;;;;;;;;;;7249:13;;7183:87;:::o;47170:109::-;7414:12;:10;:12::i;:::-;7403:23;;:7;:5;:7::i;:::-;:23;;;7395:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47252:19:::1;;;;;;;;;;;47251:20;47229:19;;:42;;;;;;;;;;;;;;;;;;47170:109::o:0;27313:104::-;27369:13;27402:7;27395:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27313:104;:::o;28996:295::-;29111:12;:10;:12::i;:::-;29099:24;;:8;:24;;;;29091:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29211:8;29166:18;:32;29185:12;:10;:12::i;:::-;29166:32;;;;;;;;;;;;;;;:42;29199:8;29166:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;29264:8;29235:48;;29250:12;:10;:12::i;:::-;29235:48;;;29274:8;29235:48;;;;;;:::i;:::-;;;;;;;;28996:295;;:::o;46853:55::-;46890:18;46853:55;:::o;30259:328::-;30434:41;30453:12;:10;:12::i;:::-;30467:7;30434:18;:41::i;:::-;30426:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30540:39;30554:4;30560:2;30564:7;30573:5;30540:13;:39::i;:::-;30259:328;;;;:::o;49089:175::-;49162:13;49219:10;:8;:10::i;:::-;49236:18;:7;:16;:18::i;:::-;49202:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49188:68;;49089:175;;;:::o;29362:164::-;29459:4;29483:18;:25;29502:5;29483:25;;;;;;;;;;;;;;;:35;29509:8;29483:35;;;;;;;;;;;;;;;;;;;;;;;;;29476:42;;29362:164;;;;:::o;46684:37::-;46719:2;46684:37;:::o;8083:192::-;7414:12;:10;:12::i;:::-;7403:23;;:7;:5;:7::i;:::-;:23;;;7395:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8192:1:::1;8172:22;;:8;:22;;;;8164:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8248:19;8258:8;8248:9;:19::i;:::-;8083:192:::0;:::o;40243:224::-;40345:4;40384:35;40369:50;;;:11;:50;;;;:90;;;;40423:36;40447:11;40423:23;:36::i;:::-;40369:90;40362:97;;40243:224;;;:::o;32097:127::-;32162:4;32214:1;32186:30;;:7;:16;32194:7;32186:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32179:37;;32097:127;;;:::o;5971:98::-;6024:7;6051:10;6044:17;;5971:98;:::o;36079:174::-;36181:2;36154:15;:24;36170:7;36154:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36237:7;36233:2;36199:46;;36208:23;36223:7;36208:14;:23::i;:::-;36199:46;;;;;;;;;;;;36079:174;;:::o;33081:110::-;33157:26;33167:2;33171:7;33157:26;;;;;;;;;;;;:9;:26::i;:::-;33081:110;;:::o;32391:348::-;32484:4;32509:16;32517:7;32509;:16::i;:::-;32501:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32585:13;32601:23;32616:7;32601:14;:23::i;:::-;32585:39;;32654:5;32643:16;;:7;:16;;;:51;;;;32687:7;32663:31;;:20;32675:7;32663:11;:20::i;:::-;:31;;;32643:51;:87;;;;32698:32;32715:5;32722:7;32698:16;:32::i;:::-;32643:87;32635:96;;;32391:348;;;;:::o;35383:578::-;35542:4;35515:31;;:23;35530:7;35515:14;:23::i;:::-;:31;;;35507:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;35625:1;35611:16;;:2;:16;;;;35603:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35681:39;35702:4;35708:2;35712:7;35681:20;:39::i;:::-;35785:29;35802:1;35806:7;35785:8;:29::i;:::-;35846:1;35827:9;:15;35837:4;35827:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35875:1;35858:9;:13;35868:2;35858:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35906:2;35887:7;:16;35895:7;35887:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35945:7;35941:2;35926:27;;35935:4;35926:27;;;;;;;;;;;;35383:578;;;:::o;10551:317::-;10666:6;10641:21;:31;;10633:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10720:12;10738:9;:14;;10760:6;10738:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10719:52;;;10790:7;10782:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;10551:317;;;:::o;8283:173::-;8339:16;8358:6;;;;;;;;;;;8339:25;;8384:8;8375:6;;:17;;;;;;;;;;;;;;;;;;8439:8;8408:40;;8429:8;8408:40;;;;;;;;;;;;8283:173;;:::o;2439:830::-;2564:4;2581:20;2604:4;2581:27;;2626:9;2621:525;2645:5;:12;2641:1;:16;2621:525;;;2679:20;2702:5;2708:1;2702:8;;;;;;;;;;;;;;;;;;;;;;2679:31;;2747:12;2731;:28;2727:408;;2901:12;2915;2884:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2874:55;;;;;;2859:70;;2727:408;;;3091:12;3105;3074:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3064:55;;;;;;3049:70;;2727:408;2621:525;2659:3;;;;;:::i;:::-;;;;2621:525;;;;3257:4;3241:12;:20;3234:27;;;2439:830;;;;;:::o;31469:315::-;31626:28;31636:4;31642:2;31646:7;31626:9;:28::i;:::-;31673:48;31696:4;31702:2;31706:7;31715:5;31673:22;:48::i;:::-;31665:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;31469:315;;;;:::o;47409:106::-;47461:13;47494;47487:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47409:106;:::o;3587:723::-;3643:13;3873:1;3864:5;:10;3860:53;;;3891:10;;;;;;;;;;;;;;;;;;;;;3860:53;3923:12;3938:5;3923:20;;3954:14;3979:78;3994:1;3986:4;:9;3979:78;;4012:8;;;;;:::i;:::-;;;;4043:2;4035:10;;;;;:::i;:::-;;;3979:78;;;4067:19;4099:6;4089:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4067:39;;4117:154;4133:1;4124:5;:10;4117:154;;4161:1;4151:11;;;;;:::i;:::-;;;4228:2;4220:5;:10;;;;:::i;:::-;4207:2;:24;;;;:::i;:::-;4194:39;;4177:6;4184;4177:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;4257:2;4248:11;;;;;:::i;:::-;;;4117:154;;;4295:6;4281:21;;;;;3587:723;;;;:::o;26199:305::-;26301:4;26353:25;26338:40;;;:11;:40;;;;:105;;;;26410:33;26395:48;;;:11;:48;;;;26338:105;:158;;;;26460:36;26484:11;26460:23;:36::i;:::-;26338:158;26318:178;;26199:305;;;:::o;33418:321::-;33548:18;33554:2;33558:7;33548:5;:18::i;:::-;33599:54;33630:1;33634:2;33638:7;33647:5;33599:22;:54::i;:::-;33577:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;33418:321;;;:::o;41919:589::-;42063:45;42090:4;42096:2;42100:7;42063:26;:45::i;:::-;42141:1;42125:18;;:4;:18;;;42121:187;;;42160:40;42192:7;42160:31;:40::i;:::-;42121:187;;;42230:2;42222:10;;:4;:10;;;42218:90;;42249:47;42282:4;42288:7;42249:32;:47::i;:::-;42218:90;42121:187;42336:1;42322:16;;:2;:16;;;42318:183;;;42355:45;42392:7;42355:36;:45::i;:::-;42318:183;;;42428:4;42422:10;;:2;:10;;;42418:83;;42449:40;42477:2;42481:7;42449:27;:40::i;:::-;42418:83;42318:183;41919:589;;;:::o;36818:799::-;36973:4;36994:15;:2;:13;;;:15::i;:::-;36990:620;;;37046:2;37030:36;;;37067:12;:10;:12::i;:::-;37081:4;37087:7;37096:5;37030:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37026:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37289:1;37272:6;:13;:18;37268:272;;;37315:60;;;;;;;;;;:::i;:::-;;;;;;;;37268:272;37490:6;37484:13;37475:6;37471:2;37467:15;37460:38;37026:529;37163:41;;;37153:51;;;:6;:51;;;;37146:58;;;;;36990:620;37594:4;37587:11;;36818:799;;;;;;;:::o;19169:157::-;19254:4;19293:25;19278:40;;;:11;:40;;;;19271:47;;19169:157;;;:::o;34075:382::-;34169:1;34155:16;;:2;:16;;;;34147:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34228:16;34236:7;34228;:16::i;:::-;34227:17;34219:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34290:45;34319:1;34323:2;34327:7;34290:20;:45::i;:::-;34365:1;34348:9;:13;34358:2;34348:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34396:2;34377:7;:16;34385:7;34377:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34441:7;34437:2;34416:33;;34433:1;34416:33;;;;;;;;;;;;34075:382;;:::o;38189:126::-;;;;:::o;43231:164::-;43335:10;:17;;;;43308:15;:24;43324:7;43308:24;;;;;;;;;;;:44;;;;43363:10;43379:7;43363:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43231:164;:::o;44022:988::-;44288:22;44338:1;44313:22;44330:4;44313:16;:22::i;:::-;:26;;;;:::i;:::-;44288:51;;44350:18;44371:17;:26;44389:7;44371:26;;;;;;;;;;;;44350:47;;44518:14;44504:10;:28;44500:328;;44549:19;44571:12;:18;44584:4;44571:18;;;;;;;;;;;;;;;:34;44590:14;44571:34;;;;;;;;;;;;44549:56;;44655:11;44622:12;:18;44635:4;44622:18;;;;;;;;;;;;;;;:30;44641:10;44622:30;;;;;;;;;;;:44;;;;44772:10;44739:17;:30;44757:11;44739:30;;;;;;;;;;;:43;;;;44500:328;;44924:17;:26;44942:7;44924:26;;;;;;;;;;;44917:33;;;44968:12;:18;44981:4;44968:18;;;;;;;;;;;;;;;:34;44987:14;44968:34;;;;;;;;;;;44961:41;;;44022:988;;;;:::o;45305:1079::-;45558:22;45603:1;45583:10;:17;;;;:21;;;;:::i;:::-;45558:46;;45615:18;45636:15;:24;45652:7;45636:24;;;;;;;;;;;;45615:45;;45987:19;46009:10;46020:14;46009:26;;;;;;;;;;;;;;;;;;;;;;;;45987:48;;46073:11;46048:10;46059;46048:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;46184:10;46153:15;:28;46169:11;46153:28;;;;;;;;;;;:41;;;;46325:15;:24;46341:7;46325:24;;;;;;;;;;;46318:31;;;46360:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45305:1079;;;;:::o;42809:221::-;42894:14;42911:20;42928:2;42911:16;:20::i;:::-;42894:37;;42969:7;42942:12;:16;42955:2;42942:16;;;;;;;;;;;;;;;:24;42959:6;42942:24;;;;;;;;;;;:34;;;;43016:6;42987:17;:26;43005:7;42987:26;;;;;;;;;;;:35;;;;42809:221;;;:::o;9229:387::-;9289:4;9497:12;9564:7;9552:20;9544:28;;9607:1;9600:4;:8;9593:15;;;9229:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:344::-;;458:65;473:49;515:6;473:49;:::i;:::-;458:65;:::i;:::-;449:74;;546:6;539:5;532:21;584:4;577:5;573:16;622:3;613:6;608:3;604:16;601:25;598:2;;;639:1;636;629:12;598:2;652:41;686:6;681:3;676;652:41;:::i;:::-;439:260;;;;;;:::o;705:139::-;;789:6;776:20;767:29;;805:33;832:5;805:33;:::i;:::-;757:87;;;;:::o;867:367::-;;;1000:3;993:4;985:6;981:17;977:27;967:2;;1018:1;1015;1008:12;967:2;1054:6;1041:20;1031:30;;1084:18;1076:6;1073:30;1070:2;;;1116:1;1113;1106:12;1070:2;1153:4;1145:6;1141:17;1129:29;;1207:3;1199:4;1191:6;1187:17;1177:8;1173:32;1170:41;1167:2;;;1224:1;1221;1214:12;1167:2;957:277;;;;;:::o;1240:133::-;;1321:6;1308:20;1299:29;;1337:30;1361:5;1337:30;:::i;:::-;1289:84;;;;:::o;1379:139::-;;1463:6;1450:20;1441:29;;1479:33;1506:5;1479:33;:::i;:::-;1431:87;;;;:::o;1524:137::-;;1607:6;1594:20;1585:29;;1623:32;1649:5;1623:32;:::i;:::-;1575:86;;;;:::o;1667:141::-;;1754:6;1748:13;1739:22;;1770:32;1796:5;1770:32;:::i;:::-;1729:79;;;;:::o;1827:271::-;;1931:3;1924:4;1916:6;1912:17;1908:27;1898:2;;1949:1;1946;1939:12;1898:2;1989:6;1976:20;2014:78;2088:3;2080:6;2073:4;2065:6;2061:17;2014:78;:::i;:::-;2005:87;;1888:210;;;;;:::o;2118:352::-;;;2236:3;2229:4;2221:6;2217:17;2213:27;2203:2;;2254:1;2251;2244:12;2203:2;2290:6;2277:20;2267:30;;2320:18;2312:6;2309:30;2306:2;;;2352:1;2349;2342:12;2306:2;2389:4;2381:6;2377:17;2365:29;;2443:3;2435:4;2427:6;2423:17;2413:8;2409:32;2406:41;2403:2;;;2460:1;2457;2450:12;2403:2;2193:277;;;;;:::o;2490:273::-;;2595:3;2588:4;2580:6;2576:17;2572:27;2562:2;;2613:1;2610;2603:12;2562:2;2653:6;2640:20;2678:79;2753:3;2745:6;2738:4;2730:6;2726:17;2678:79;:::i;:::-;2669:88;;2552:211;;;;;:::o;2769:139::-;;2853:6;2840:20;2831:29;;2869:33;2896:5;2869:33;:::i;:::-;2821:87;;;;:::o;2914:262::-;;3022:2;3010:9;3001:7;2997:23;2993:32;2990:2;;;3038:1;3035;3028:12;2990:2;3081:1;3106:53;3151:7;3142:6;3131:9;3127:22;3106:53;:::i;:::-;3096:63;;3052:117;2980:196;;;;:::o;3182:407::-;;;3307:2;3295:9;3286:7;3282:23;3278:32;3275:2;;;3323:1;3320;3313:12;3275:2;3366:1;3391:53;3436:7;3427:6;3416:9;3412:22;3391:53;:::i;:::-;3381:63;;3337:117;3493:2;3519:53;3564:7;3555:6;3544:9;3540:22;3519:53;:::i;:::-;3509:63;;3464:118;3265:324;;;;;:::o;3595:552::-;;;;3737:2;3725:9;3716:7;3712:23;3708:32;3705:2;;;3753:1;3750;3743:12;3705:2;3796:1;3821:53;3866:7;3857:6;3846:9;3842:22;3821:53;:::i;:::-;3811:63;;3767:117;3923:2;3949:53;3994:7;3985:6;3974:9;3970:22;3949:53;:::i;:::-;3939:63;;3894:118;4051:2;4077:53;4122:7;4113:6;4102:9;4098:22;4077:53;:::i;:::-;4067:63;;4022:118;3695:452;;;;;:::o;4153:809::-;;;;;4321:3;4309:9;4300:7;4296:23;4292:33;4289:2;;;4338:1;4335;4328:12;4289:2;4381:1;4406:53;4451:7;4442:6;4431:9;4427:22;4406:53;:::i;:::-;4396:63;;4352:117;4508:2;4534:53;4579:7;4570:6;4559:9;4555:22;4534:53;:::i;:::-;4524:63;;4479:118;4636:2;4662:53;4707:7;4698:6;4687:9;4683:22;4662:53;:::i;:::-;4652:63;;4607:118;4792:2;4781:9;4777:18;4764:32;4823:18;4815:6;4812:30;4809:2;;;4855:1;4852;4845:12;4809:2;4883:62;4937:7;4928:6;4917:9;4913:22;4883:62;:::i;:::-;4873:72;;4735:220;4279:683;;;;;;;:::o;4968:401::-;;;5090:2;5078:9;5069:7;5065:23;5061:32;5058:2;;;5106:1;5103;5096:12;5058:2;5149:1;5174:53;5219:7;5210:6;5199:9;5195:22;5174:53;:::i;:::-;5164:63;;5120:117;5276:2;5302:50;5344:7;5335:6;5324:9;5320:22;5302:50;:::i;:::-;5292:60;;5247:115;5048:321;;;;;:::o;5375:407::-;;;5500:2;5488:9;5479:7;5475:23;5471:32;5468:2;;;5516:1;5513;5506:12;5468:2;5559:1;5584:53;5629:7;5620:6;5609:9;5605:22;5584:53;:::i;:::-;5574:63;;5530:117;5686:2;5712:53;5757:7;5748:6;5737:9;5733:22;5712:53;:::i;:::-;5702:63;;5657:118;5458:324;;;;;:::o;5788:425::-;;;5931:2;5919:9;5910:7;5906:23;5902:32;5899:2;;;5947:1;5944;5937:12;5899:2;6018:1;6007:9;6003:17;5990:31;6048:18;6040:6;6037:30;6034:2;;;6080:1;6077;6070:12;6034:2;6116:80;6188:7;6179:6;6168:9;6164:22;6116:80;:::i;:::-;6098:98;;;;5961:245;5889:324;;;;;:::o;6219:262::-;;6327:2;6315:9;6306:7;6302:23;6298:32;6295:2;;;6343:1;6340;6333:12;6295:2;6386:1;6411:53;6456:7;6447:6;6436:9;6432:22;6411:53;:::i;:::-;6401:63;;6357:117;6285:196;;;;:::o;6487:260::-;;6594:2;6582:9;6573:7;6569:23;6565:32;6562:2;;;6610:1;6607;6600:12;6562:2;6653:1;6678:52;6722:7;6713:6;6702:9;6698:22;6678:52;:::i;:::-;6668:62;;6624:116;6552:195;;;;:::o;6753:282::-;;6871:2;6859:9;6850:7;6846:23;6842:32;6839:2;;;6887:1;6884;6877:12;6839:2;6930:1;6955:63;7010:7;7001:6;6990:9;6986:22;6955:63;:::i;:::-;6945:73;;6901:127;6829:206;;;;:::o;7041:395::-;;;7169:2;7157:9;7148:7;7144:23;7140:32;7137:2;;;7185:1;7182;7175:12;7137:2;7256:1;7245:9;7241:17;7228:31;7286:18;7278:6;7275:30;7272:2;;;7318:1;7315;7308:12;7272:2;7354:65;7411:7;7402:6;7391:9;7387:22;7354:65;:::i;:::-;7336:83;;;;7199:230;7127:309;;;;;:::o;7442:375::-;;7560:2;7548:9;7539:7;7535:23;7531:32;7528:2;;;7576:1;7573;7566:12;7528:2;7647:1;7636:9;7632:17;7619:31;7677:18;7669:6;7666:30;7663:2;;;7709:1;7706;7699:12;7663:2;7737:63;7792:7;7783:6;7772:9;7768:22;7737:63;:::i;:::-;7727:73;;7590:220;7518:299;;;;:::o;7823:262::-;;7931:2;7919:9;7910:7;7906:23;7902:32;7899:2;;;7947:1;7944;7937:12;7899:2;7990:1;8015:53;8060:7;8051:6;8040:9;8036:22;8015:53;:::i;:::-;8005:63;;7961:117;7889:196;;;;:::o;8091:118::-;8178:24;8196:5;8178:24;:::i;:::-;8173:3;8166:37;8156:53;;:::o;8215:157::-;8320:45;8340:24;8358:5;8340:24;:::i;:::-;8320:45;:::i;:::-;8315:3;8308:58;8298:74;;:::o;8378:109::-;8459:21;8474:5;8459:21;:::i;:::-;8454:3;8447:34;8437:50;;:::o;8493:157::-;8598:45;8618:24;8636:5;8618:24;:::i;:::-;8598:45;:::i;:::-;8593:3;8586:58;8576:74;;:::o;8656:360::-;;8770:38;8802:5;8770:38;:::i;:::-;8824:70;8887:6;8882:3;8824:70;:::i;:::-;8817:77;;8903:52;8948:6;8943:3;8936:4;8929:5;8925:16;8903:52;:::i;:::-;8980:29;9002:6;8980:29;:::i;:::-;8975:3;8971:39;8964:46;;8746:270;;;;;:::o;9022:364::-;;9138:39;9171:5;9138:39;:::i;:::-;9193:71;9257:6;9252:3;9193:71;:::i;:::-;9186:78;;9273:52;9318:6;9313:3;9306:4;9299:5;9295:16;9273:52;:::i;:::-;9350:29;9372:6;9350:29;:::i;:::-;9345:3;9341:39;9334:46;;9114:272;;;;;:::o;9392:377::-;;9526:39;9559:5;9526:39;:::i;:::-;9581:89;9663:6;9658:3;9581:89;:::i;:::-;9574:96;;9679:52;9724:6;9719:3;9712:4;9705:5;9701:16;9679:52;:::i;:::-;9756:6;9751:3;9747:16;9740:23;;9502:267;;;;;:::o;9775:375::-;;9938:67;10002:2;9997:3;9938:67;:::i;:::-;9931:74;;10035:34;10031:1;10026:3;10022:11;10015:55;10101:13;10096:2;10091:3;10087:12;10080:35;10141:2;10136:3;10132:12;10125:19;;9921:229;;;:::o;10156:382::-;;10319:67;10383:2;10378:3;10319:67;:::i;:::-;10312:74;;10416:34;10412:1;10407:3;10403:11;10396:55;10482:20;10477:2;10472:3;10468:12;10461:42;10529:2;10524:3;10520:12;10513:19;;10302:236;;;:::o;10544:370::-;;10707:67;10771:2;10766:3;10707:67;:::i;:::-;10700:74;;10804:34;10800:1;10795:3;10791:11;10784:55;10870:8;10865:2;10860:3;10856:12;10849:30;10905:2;10900:3;10896:12;10889:19;;10690:224;;;:::o;10920:326::-;;11083:67;11147:2;11142:3;11083:67;:::i;:::-;11076:74;;11180:30;11176:1;11171:3;11167:11;11160:51;11237:2;11232:3;11228:12;11221:19;;11066:180;;;:::o;11252:313::-;;11415:67;11479:2;11474:3;11415:67;:::i;:::-;11408:74;;11512:17;11508:1;11503:3;11499:11;11492:38;11556:2;11551:3;11547:12;11540:19;;11398:167;;;:::o;11571:305::-;;11734:66;11798:1;11793:3;11734:66;:::i;:::-;11727:73;;11830:10;11826:1;11821:3;11817:11;11810:31;11867:2;11862:3;11858:12;11851:19;;11717:159;;;:::o;11882:368::-;;12045:67;12109:2;12104:3;12045:67;:::i;:::-;12038:74;;12142:34;12138:1;12133:3;12129:11;12122:55;12208:6;12203:2;12198:3;12194:12;12187:28;12241:2;12236:3;12232:12;12225:19;;12028:222;;;:::o;12256:323::-;;12419:67;12483:2;12478:3;12419:67;:::i;:::-;12412:74;;12516:27;12512:1;12507:3;12503:11;12496:48;12570:2;12565:3;12561:12;12554:19;;12402:177;;;:::o;12585:390::-;;12748:67;12812:2;12807:3;12748:67;:::i;:::-;12741:74;;12845:34;12841:1;12836:3;12832:11;12825:55;12911:28;12906:2;12901:3;12897:12;12890:50;12966:2;12961:3;12957:12;12950:19;;12731:244;;;:::o;12981:327::-;;13144:67;13208:2;13203:3;13144:67;:::i;:::-;13137:74;;13241:31;13237:1;13232:3;13228:11;13221:52;13299:2;13294:3;13290:12;13283:19;;13127:181;;;:::o;13314:376::-;;13477:67;13541:2;13536:3;13477:67;:::i;:::-;13470:74;;13574:34;13570:1;13565:3;13561:11;13554:55;13640:14;13635:2;13630:3;13626:12;13619:36;13681:2;13676:3;13672:12;13665:19;;13460:230;;;:::o;13696:388::-;;13859:67;13923:2;13918:3;13859:67;:::i;:::-;13852:74;;13956:34;13952:1;13947:3;13943:11;13936:55;14022:26;14017:2;14012:3;14008:12;14001:48;14075:2;14070:3;14066:12;14059:19;;13842:242;;;:::o;14090:374::-;;14253:67;14317:2;14312:3;14253:67;:::i;:::-;14246:74;;14350:34;14346:1;14341:3;14337:11;14330:55;14416:12;14411:2;14406:3;14402:12;14395:34;14455:2;14450:3;14446:12;14439:19;;14236:228;;;:::o;14470:373::-;;14633:67;14697:2;14692:3;14633:67;:::i;:::-;14626:74;;14730:34;14726:1;14721:3;14717:11;14710:55;14796:11;14791:2;14786:3;14782:12;14775:33;14834:2;14829:3;14825:12;14818:19;;14616:227;;;:::o;14849:330::-;;15012:67;15076:2;15071:3;15012:67;:::i;:::-;15005:74;;15109:34;15105:1;15100:3;15096:11;15089:55;15170:2;15165:3;15161:12;15154:19;;14995:184;;;:::o;15185:376::-;;15348:67;15412:2;15407:3;15348:67;:::i;:::-;15341:74;;15445:34;15441:1;15436:3;15432:11;15425:55;15511:14;15506:2;15501:3;15497:12;15490:36;15552:2;15547:3;15543:12;15536:19;;15331:230;;;:::o;15567:330::-;;15730:67;15794:2;15789:3;15730:67;:::i;:::-;15723:74;;15827:34;15823:1;15818:3;15814:11;15807:55;15888:2;15883:3;15879:12;15872:19;;15713:184;;;:::o;15903:373::-;;16066:67;16130:2;16125:3;16066:67;:::i;:::-;16059:74;;16163:34;16159:1;16154:3;16150:11;16143:55;16229:11;16224:2;16219:3;16215:12;16208:33;16267:2;16262:3;16258:12;16251:19;;16049:227;;;:::o;16282:310::-;;16445:67;16509:2;16504:3;16445:67;:::i;:::-;16438:74;;16542:14;16538:1;16533:3;16529:11;16522:35;16583:2;16578:3;16574:12;16567:19;;16428:164;;;:::o;16598:305::-;;16761:66;16825:1;16820:3;16761:66;:::i;:::-;16754:73;;16857:10;16853:1;16848:3;16844:11;16837:31;16894:2;16889:3;16885:12;16878:19;;16744:159;;;:::o;16909:365::-;;17072:67;17136:2;17131:3;17072:67;:::i;:::-;17065:74;;17169:34;17165:1;17160:3;17156:11;17149:55;17235:3;17230:2;17225:3;17221:12;17214:25;17265:2;17260:3;17256:12;17249:19;;17055:219;;;:::o;17280:297::-;;17460:83;17541:1;17536:3;17460:83;:::i;:::-;17453:90;;17569:1;17564:3;17560:11;17553:18;;17443:134;;;:::o;17583:381::-;;17746:67;17810:2;17805:3;17746:67;:::i;:::-;17739:74;;17843:34;17839:1;17834:3;17830:11;17823:55;17909:19;17904:2;17899:3;17895:12;17888:41;17955:2;17950:3;17946:12;17939:19;;17729:235;;;:::o;17970:311::-;;18133:67;18197:2;18192:3;18133:67;:::i;:::-;18126:74;;18230:15;18226:1;18221:3;18217:11;18210:36;18272:2;18267:3;18263:12;18256:19;;18116:165;;;:::o;18287:376::-;;18450:67;18514:2;18509:3;18450:67;:::i;:::-;18443:74;;18547:34;18543:1;18538:3;18534:11;18527:55;18613:14;18608:2;18603:3;18599:12;18592:36;18654:2;18649:3;18645:12;18638:19;;18433:230;;;:::o;18669:309::-;;18832:67;18896:2;18891:3;18832:67;:::i;:::-;18825:74;;18929:13;18925:1;18920:3;18916:11;18909:34;18969:2;18964:3;18960:12;18953:19;;18815:163;;;:::o;18984:303::-;;19147:66;19211:1;19206:3;19147:66;:::i;:::-;19140:73;;19243:8;19239:1;19234:3;19230:11;19223:29;19278:2;19273:3;19269:12;19262:19;;19130:157;;;:::o;19293:333::-;;19474:84;19556:1;19551:3;19474:84;:::i;:::-;19467:91;;19588:3;19584:1;19579:3;19575:11;19568:24;19618:1;19613:3;19609:11;19602:18;;19457:169;;;:::o;19632:118::-;19719:24;19737:5;19719:24;:::i;:::-;19714:3;19707:37;19697:53;;:::o;19756:256::-;;19883:75;19954:3;19945:6;19883:75;:::i;:::-;19983:2;19978:3;19974:12;19967:19;;20003:3;19996:10;;19872:140;;;;:::o;20018:397::-;;20173:75;20244:3;20235:6;20173:75;:::i;:::-;20273:2;20268:3;20264:12;20257:19;;20286:75;20357:3;20348:6;20286:75;:::i;:::-;20386:2;20381:3;20377:12;20370:19;;20406:3;20399:10;;20162:253;;;;;:::o;20421:701::-;;20724:95;20815:3;20806:6;20724:95;:::i;:::-;20717:102;;20836:148;20980:3;20836:148;:::i;:::-;20829:155;;21001:95;21092:3;21083:6;21001:95;:::i;:::-;20994:102;;21113:3;21106:10;;20706:416;;;;;:::o;21128:379::-;;21334:147;21477:3;21334:147;:::i;:::-;21327:154;;21498:3;21491:10;;21316:191;;;:::o;21513:222::-;;21644:2;21633:9;21629:18;21621:26;;21657:71;21725:1;21714:9;21710:17;21701:6;21657:71;:::i;:::-;21611:124;;;;:::o;21741:640::-;;21974:3;21963:9;21959:19;21951:27;;21988:71;22056:1;22045:9;22041:17;22032:6;21988:71;:::i;:::-;22069:72;22137:2;22126:9;22122:18;22113:6;22069:72;:::i;:::-;22151;22219:2;22208:9;22204:18;22195:6;22151:72;:::i;:::-;22270:9;22264:4;22260:20;22255:2;22244:9;22240:18;22233:48;22298:76;22369:4;22360:6;22298:76;:::i;:::-;22290:84;;21941:440;;;;;;;:::o;22387:210::-;;22512:2;22501:9;22497:18;22489:26;;22525:65;22587:1;22576:9;22572:17;22563:6;22525:65;:::i;:::-;22479:118;;;;:::o;22603:313::-;;22754:2;22743:9;22739:18;22731:26;;22803:9;22797:4;22793:20;22789:1;22778:9;22774:17;22767:47;22831:78;22904:4;22895:6;22831:78;:::i;:::-;22823:86;;22721:195;;;;:::o;22922:419::-;;23126:2;23115:9;23111:18;23103:26;;23175:9;23169:4;23165:20;23161:1;23150:9;23146:17;23139:47;23203:131;23329:4;23203:131;:::i;:::-;23195:139;;23093:248;;;:::o;23347:419::-;;23551:2;23540:9;23536:18;23528:26;;23600:9;23594:4;23590:20;23586:1;23575:9;23571:17;23564:47;23628:131;23754:4;23628:131;:::i;:::-;23620:139;;23518:248;;;:::o;23772:419::-;;23976:2;23965:9;23961:18;23953:26;;24025:9;24019:4;24015:20;24011:1;24000:9;23996:17;23989:47;24053:131;24179:4;24053:131;:::i;:::-;24045:139;;23943:248;;;:::o;24197:419::-;;24401:2;24390:9;24386:18;24378:26;;24450:9;24444:4;24440:20;24436:1;24425:9;24421:17;24414:47;24478:131;24604:4;24478:131;:::i;:::-;24470:139;;24368:248;;;:::o;24622:419::-;;24826:2;24815:9;24811:18;24803:26;;24875:9;24869:4;24865:20;24861:1;24850:9;24846:17;24839:47;24903:131;25029:4;24903:131;:::i;:::-;24895:139;;24793:248;;;:::o;25047:419::-;;25251:2;25240:9;25236:18;25228:26;;25300:9;25294:4;25290:20;25286:1;25275:9;25271:17;25264:47;25328:131;25454:4;25328:131;:::i;:::-;25320:139;;25218:248;;;:::o;25472:419::-;;25676:2;25665:9;25661:18;25653:26;;25725:9;25719:4;25715:20;25711:1;25700:9;25696:17;25689:47;25753:131;25879:4;25753:131;:::i;:::-;25745:139;;25643:248;;;:::o;25897:419::-;;26101:2;26090:9;26086:18;26078:26;;26150:9;26144:4;26140:20;26136:1;26125:9;26121:17;26114:47;26178:131;26304:4;26178:131;:::i;:::-;26170:139;;26068:248;;;:::o;26322:419::-;;26526:2;26515:9;26511:18;26503:26;;26575:9;26569:4;26565:20;26561:1;26550:9;26546:17;26539:47;26603:131;26729:4;26603:131;:::i;:::-;26595:139;;26493:248;;;:::o;26747:419::-;;26951:2;26940:9;26936:18;26928:26;;27000:9;26994:4;26990:20;26986:1;26975:9;26971:17;26964:47;27028:131;27154:4;27028:131;:::i;:::-;27020:139;;26918:248;;;:::o;27172:419::-;;27376:2;27365:9;27361:18;27353:26;;27425:9;27419:4;27415:20;27411:1;27400:9;27396:17;27389:47;27453:131;27579:4;27453:131;:::i;:::-;27445:139;;27343:248;;;:::o;27597:419::-;;27801:2;27790:9;27786:18;27778:26;;27850:9;27844:4;27840:20;27836:1;27825:9;27821:17;27814:47;27878:131;28004:4;27878:131;:::i;:::-;27870:139;;27768:248;;;:::o;28022:419::-;;28226:2;28215:9;28211:18;28203:26;;28275:9;28269:4;28265:20;28261:1;28250:9;28246:17;28239:47;28303:131;28429:4;28303:131;:::i;:::-;28295:139;;28193:248;;;:::o;28447:419::-;;28651:2;28640:9;28636:18;28628:26;;28700:9;28694:4;28690:20;28686:1;28675:9;28671:17;28664:47;28728:131;28854:4;28728:131;:::i;:::-;28720:139;;28618:248;;;:::o;28872:419::-;;29076:2;29065:9;29061:18;29053:26;;29125:9;29119:4;29115:20;29111:1;29100:9;29096:17;29089:47;29153:131;29279:4;29153:131;:::i;:::-;29145:139;;29043:248;;;:::o;29297:419::-;;29501:2;29490:9;29486:18;29478:26;;29550:9;29544:4;29540:20;29536:1;29525:9;29521:17;29514:47;29578:131;29704:4;29578:131;:::i;:::-;29570:139;;29468:248;;;:::o;29722:419::-;;29926:2;29915:9;29911:18;29903:26;;29975:9;29969:4;29965:20;29961:1;29950:9;29946:17;29939:47;30003:131;30129:4;30003:131;:::i;:::-;29995:139;;29893:248;;;:::o;30147:419::-;;30351:2;30340:9;30336:18;30328:26;;30400:9;30394:4;30390:20;30386:1;30375:9;30371:17;30364:47;30428:131;30554:4;30428:131;:::i;:::-;30420:139;;30318:248;;;:::o;30572:419::-;;30776:2;30765:9;30761:18;30753:26;;30825:9;30819:4;30815:20;30811:1;30800:9;30796:17;30789:47;30853:131;30979:4;30853:131;:::i;:::-;30845:139;;30743:248;;;:::o;30997:419::-;;31201:2;31190:9;31186:18;31178:26;;31250:9;31244:4;31240:20;31236:1;31225:9;31221:17;31214:47;31278:131;31404:4;31278:131;:::i;:::-;31270:139;;31168:248;;;:::o;31422:419::-;;31626:2;31615:9;31611:18;31603:26;;31675:9;31669:4;31665:20;31661:1;31650:9;31646:17;31639:47;31703:131;31829:4;31703:131;:::i;:::-;31695:139;;31593:248;;;:::o;31847:419::-;;32051:2;32040:9;32036:18;32028:26;;32100:9;32094:4;32090:20;32086:1;32075:9;32071:17;32064:47;32128:131;32254:4;32128:131;:::i;:::-;32120:139;;32018:248;;;:::o;32272:419::-;;32476:2;32465:9;32461:18;32453:26;;32525:9;32519:4;32515:20;32511:1;32500:9;32496:17;32489:47;32553:131;32679:4;32553:131;:::i;:::-;32545:139;;32443:248;;;:::o;32697:419::-;;32901:2;32890:9;32886:18;32878:26;;32950:9;32944:4;32940:20;32936:1;32925:9;32921:17;32914:47;32978:131;33104:4;32978:131;:::i;:::-;32970:139;;32868:248;;;:::o;33122:419::-;;33326:2;33315:9;33311:18;33303:26;;33375:9;33369:4;33365:20;33361:1;33350:9;33346:17;33339:47;33403:131;33529:4;33403:131;:::i;:::-;33395:139;;33293:248;;;:::o;33547:419::-;;33751:2;33740:9;33736:18;33728:26;;33800:9;33794:4;33790:20;33786:1;33775:9;33771:17;33764:47;33828:131;33954:4;33828:131;:::i;:::-;33820:139;;33718:248;;;:::o;33972:222::-;;34103:2;34092:9;34088:18;34080:26;;34116:71;34184:1;34173:9;34169:17;34160:6;34116:71;:::i;:::-;34070:124;;;;:::o;34200:283::-;;34266:2;34260:9;34250:19;;34308:4;34300:6;34296:17;34415:6;34403:10;34400:22;34379:18;34367:10;34364:34;34361:62;34358:2;;;34426:18;;:::i;:::-;34358:2;34466:10;34462:2;34455:22;34240:243;;;;:::o;34489:331::-;;34640:18;34632:6;34629:30;34626:2;;;34662:18;;:::i;:::-;34626:2;34747:4;34743:9;34736:4;34728:6;34724:17;34720:33;34712:41;;34808:4;34802;34798:15;34790:23;;34555:265;;;:::o;34826:332::-;;34978:18;34970:6;34967:30;34964:2;;;35000:18;;:::i;:::-;34964:2;35085:4;35081:9;35074:4;35066:6;35062:17;35058:33;35050:41;;35146:4;35140;35136:15;35128:23;;34893:265;;;:::o;35164:98::-;;35249:5;35243:12;35233:22;;35222:40;;;:::o;35268:99::-;;35354:5;35348:12;35338:22;;35327:40;;;:::o;35373:168::-;;35490:6;35485:3;35478:19;35530:4;35525:3;35521:14;35506:29;;35468:73;;;;:::o;35547:147::-;;35685:3;35670:18;;35660:34;;;;:::o;35700:169::-;;35818:6;35813:3;35806:19;35858:4;35853:3;35849:14;35834:29;;35796:73;;;;:::o;35875:148::-;;36014:3;35999:18;;35989:34;;;;:::o;36029:305::-;;36088:20;36106:1;36088:20;:::i;:::-;36083:25;;36122:20;36140:1;36122:20;:::i;:::-;36117:25;;36276:1;36208:66;36204:74;36201:1;36198:81;36195:2;;;36282:18;;:::i;:::-;36195:2;36326:1;36323;36319:9;36312:16;;36073:261;;;;:::o;36340:185::-;;36397:20;36415:1;36397:20;:::i;:::-;36392:25;;36431:20;36449:1;36431:20;:::i;:::-;36426:25;;36470:1;36460:2;;36475:18;;:::i;:::-;36460:2;36517:1;36514;36510:9;36505:14;;36382:143;;;;:::o;36531:191::-;;36591:20;36609:1;36591:20;:::i;:::-;36586:25;;36625:20;36643:1;36625:20;:::i;:::-;36620:25;;36664:1;36661;36658:8;36655:2;;;36669:18;;:::i;:::-;36655:2;36714:1;36711;36707:9;36699:17;;36576:146;;;;:::o;36728:96::-;;36794:24;36812:5;36794:24;:::i;:::-;36783:35;;36773:51;;;:::o;36830:90::-;;36907:5;36900:13;36893:21;36882:32;;36872:48;;;:::o;36926:77::-;;36992:5;36981:16;;36971:32;;;:::o;37009:149::-;;37085:66;37078:5;37074:78;37063:89;;37053:105;;;:::o;37164:126::-;;37241:42;37234:5;37230:54;37219:65;;37209:81;;;:::o;37296:77::-;;37362:5;37351:16;;37341:32;;;:::o;37379:154::-;37463:6;37458:3;37453;37440:30;37525:1;37516:6;37511:3;37507:16;37500:27;37430:103;;;:::o;37539:307::-;37607:1;37617:113;37631:6;37628:1;37625:13;37617:113;;;37716:1;37711:3;37707:11;37701:18;37697:1;37692:3;37688:11;37681:39;37653:2;37650:1;37646:10;37641:15;;37617:113;;;37748:6;37745:1;37742:13;37739:2;;;37828:1;37819:6;37814:3;37810:16;37803:27;37739:2;37588:258;;;;:::o;37852:320::-;;37933:1;37927:4;37923:12;37913:22;;37980:1;37974:4;37970:12;38001:18;37991:2;;38057:4;38049:6;38045:17;38035:27;;37991:2;38119;38111:6;38108:14;38088:18;38085:38;38082:2;;;38138:18;;:::i;:::-;38082:2;37903:269;;;;:::o;38178:233::-;;38240:24;38258:5;38240:24;:::i;:::-;38231:33;;38286:66;38279:5;38276:77;38273:2;;;38356:18;;:::i;:::-;38273:2;38403:1;38396:5;38392:13;38385:20;;38221:190;;;:::o;38417:100::-;;38485:26;38505:5;38485:26;:::i;:::-;38474:37;;38464:53;;;:::o;38523:79::-;;38591:5;38580:16;;38570:32;;;:::o;38608:94::-;;38676:20;38690:5;38676:20;:::i;:::-;38665:31;;38655:47;;;:::o;38708:176::-;;38757:20;38775:1;38757:20;:::i;:::-;38752:25;;38791:20;38809:1;38791:20;:::i;:::-;38786:25;;38830:1;38820:2;;38835:18;;:::i;:::-;38820:2;38876:1;38873;38869:9;38864:14;;38742:142;;;;:::o;38890:180::-;38938:77;38935:1;38928:88;39035:4;39032:1;39025:15;39059:4;39056:1;39049:15;39076:180;39124:77;39121:1;39114:88;39221:4;39218:1;39211:15;39245:4;39242:1;39235:15;39262:180;39310:77;39307:1;39300:88;39407:4;39404:1;39397:15;39431:4;39428:1;39421:15;39448:180;39496:77;39493:1;39486:88;39593:4;39590:1;39583:15;39617:4;39614:1;39607:15;39634:102;;39726:2;39722:7;39717:2;39710:5;39706:14;39702:28;39692:38;;39682:54;;;:::o;39742:94::-;;39823:5;39819:2;39815:14;39794:35;;39784:52;;;:::o;39842:122::-;39915:24;39933:5;39915:24;:::i;:::-;39908:5;39905:35;39895:2;;39954:1;39951;39944:12;39895:2;39885:79;:::o;39970:116::-;40040:21;40055:5;40040:21;:::i;:::-;40033:5;40030:32;40020:2;;40076:1;40073;40066:12;40020:2;40010:76;:::o;40092:122::-;40165:24;40183:5;40165:24;:::i;:::-;40158:5;40155:35;40145:2;;40204:1;40201;40194:12;40145:2;40135:79;:::o;40220:120::-;40292:23;40309:5;40292:23;:::i;:::-;40285:5;40282:34;40272:2;;40330:1;40327;40320:12;40272:2;40262:78;:::o;40346:122::-;40419:24;40437:5;40419:24;:::i;:::-;40412:5;40409:35;40399:2;;40458:1;40455;40448:12;40399:2;40389:79;:::o
Swarm Source
ipfs://5a91dcc8e9efb9790b0b797e284f9c1d573a754df53c22e552bc689c1ad424bd
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.