Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
NFT
Overview
Max Total Supply
1,500 Shrohm
Holders
803
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 ShrohmLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MUSHROHMS
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-10-18 */ 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; } } 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. *dsadasdasdassa * 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); } 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); } /** * @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; } pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: @openzeppelin/contracts/access/Ownable.sol 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/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/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/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 // 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/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // 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(), ".json")) : ""; } /** * @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/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]; } 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 MUSHROHMS is ERC721Enumerable, Ownable { using Strings for uint256; uint256 public PRICE = 0 ether; uint256 public MAX_MUSHROHMS = 1500; uint256 public MAX_PER_MINT = 1; uint256 public MAX_MUSHROHMS_MINT = 1; address public constant founderAddress = 0xFA5af8c17736B69a4CEE0E6C05DC139A92897aA9; uint256 public numshrohmsMinted; string public baseTokenURI = "ipfs://QmbJT54Bx7hxN5NJ29F8wFZ4YNq59Vf5tSSTeCQqeN9swf/"; bool public presaleStarted = true; bool public pause = false; mapping(address => bool) private _presaleEligible; mapping(address => uint256) private _totalClaimed; event MushrohmMint(address minter, uint256 amountOfshrohms); constructor() ERC721("MUSHROHMS", "Shrohm") {} function togglePresaleStarted() external onlyOwner { presaleStarted = !presaleStarted; } function togglePause() external onlyOwner { pause = !pause; } function setbaseTokenURI(string memory baseURI) public onlyOwner returns (string memory) { baseTokenURI = baseURI; return baseTokenURI; } function setPrice(uint256 inPrice) public onlyOwner returns (uint256) { PRICE = inPrice; return PRICE; } function checkBal(address owner) external view returns (uint256) { uint256 currentBal = address(this).balance; return currentBal; } function addToPresale(address[] calldata addresses) external onlyOwner { for (uint256 i = 0; i < addresses.length; i++) { require(addresses[i] != address(0), "Cannot add null address"); _presaleEligible[addresses[i]] = true; _totalClaimed[addresses[i]] > 0 ? _totalClaimed[addresses[i]] : 0; } } function checkPresaleEligiblity(address addr) external view returns (bool) { return _presaleEligible[addr]; } function amountClaimedBy(address owner) external view returns (uint256) { require(owner != address(0), "Cannot add null address"); return _totalClaimed[owner]; } function mint(uint256 amountOfshrohms) external payable { require(pause == false); if (presaleStarted == true) { require(_presaleEligible[msg.sender], "You are not eligible for the presale!"); } require(totalSupply() < MAX_MUSHROHMS, "All tokens have been minted."); require(amountOfshrohms <= MAX_PER_MINT, "You can only mint one Mushrohm per address."); require(totalSupply() + amountOfshrohms <= MAX_MUSHROHMS, "Minting would exceed max supply!"); require(_totalClaimed[msg.sender] + amountOfshrohms <= MAX_MUSHROHMS_MINT, "Purchase exceeds max allowed per wallet."); require(amountOfshrohms > 0, "Must mint at least one Mushrohm."); require(PRICE * amountOfshrohms == msg.value, "ETH amount is incorrect."); for (uint256 i = 0; i < amountOfshrohms; i++) { uint256 tokenId = numshrohmsMinted + 1; numshrohmsMinted += 1; _totalClaimed[msg.sender] += 1; _safeMint(msg.sender, tokenId); } emit MushrohmMint(msg.sender, amountOfshrohms); } function withdrawAll() public onlyOwner { uint256 balance = address(this).balance; require(balance > 0, "Insufficent balance"); _widthdraw(founderAddress, balance); } function _widthdraw(address _address, uint256 _amount) private { (bool success, ) = _address.call{ value: _amount }(""); require(success, "Failed to widthdraw Ether"); } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); return bytes(baseTokenURI).length > 0 ? string(abi.encodePacked(baseTokenURI, tokenId.toString(), ".json")) : ""; } }
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":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountOfshrohms","type":"uint256"}],"name":"MushrohmMint","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":"MAX_MUSHROHMS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MUSHROHMS_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addToPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"amountClaimedBy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"checkBal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"checkPresaleEligiblity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"founderAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOfshrohms","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numshrohmsMinted","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":"pause","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"inPrice","type":"uint256"}],"name":"setPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setbaseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"togglePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePresaleStarted","outputs":[],"stateMutability":"nonpayable","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":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600b556105dc600c556001600d556001600e556040518060600160405280603681526020016200506e60369139601090805190602001906200004a92919062000223565b506001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055503480156200008e57600080fd5b506040518060400160405280600981526020017f4d555348524f484d5300000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f5368726f686d000000000000000000000000000000000000000000000000000081525081600090805190602001906200011392919062000223565b5080600190805190602001906200012c92919062000223565b5050506200014f620001436200015560201b60201c565b6200015d60201b60201c565b62000338565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200023190620002d3565b90600052602060002090601f016020900481019282620002555760008555620002a1565b82601f106200027057805160ff1916838001178555620002a1565b82800160010185558215620002a1579182015b82811115620002a057825182559160200191906001019062000283565b5b509050620002b09190620002b4565b5090565b5b80821115620002cf576000816000905550600101620002b5565b5090565b60006002820490506001821680620002ec57607f821691505b6020821081141562000303576200030262000309565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614d2680620003486000396000f3fe6080604052600436106102255760003560e01c80638456cb5911610123578063aef6ee1f116100ab578063d04ba57e1161006f578063d04ba57e14610836578063d547cfb714610861578063e985e9c51461088c578063ed1fc2a2146108c9578063f2fde38b146108e057610225565b8063aef6ee1f14610765578063b88d4fde1461078e578063c32dbe50146107b7578063c4ae3168146107e2578063c87b56dd146107f957610225565b806391b7f5ed116100f257806391b7f5ed1461068d57806395d89b41146106ca578063a0712d68146106f5578063a22cb46514610711578063ad5bb23c1461073a57610225565b80638456cb59146105f5578063853828b6146106205780638d859f3e146106375780638da5cb5b1461066257610225565b806323b872dd116101b15780634f6ccce7116101755780634f6ccce7146104ea578063584a0927146105275780636352211e1461056457806370a08231146105a1578063715018a6146105de57610225565b806323b872dd146103f35780632f745c591461041c57806337c0df0c1461045957806342842e0e1461049657806346bb2833146104bf57610225565b8063095ea7b3116101f8578063095ea7b3146102fa57806309d42b301461032357806318160ddd1461034e578063191f65ac146103795780631978f469146103b657610225565b806301ffc9a71461022a57806304549d6f1461026757806306fdde0314610292578063081812fc146102bd575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c91906135a6565b610909565b60405161025e9190613cb3565b60405180910390f35b34801561027357600080fd5b5061027c610983565b6040516102899190613cb3565b60405180910390f35b34801561029e57600080fd5b506102a7610996565b6040516102b49190613cce565b60405180910390f35b3480156102c957600080fd5b506102e460048036038101906102df9190613649565b610a28565b6040516102f19190613c23565b60405180910390f35b34801561030657600080fd5b50610321600480360381019061031c9190613519565b610aad565b005b34801561032f57600080fd5b50610338610bc5565b6040516103459190614070565b60405180910390f35b34801561035a57600080fd5b50610363610bcb565b6040516103709190614070565b60405180910390f35b34801561038557600080fd5b506103a0600480360381019061039b9190613396565b610bd8565b6040516103ad9190613cb3565b60405180910390f35b3480156103c257600080fd5b506103dd60048036038101906103d89190613396565b610c2e565b6040516103ea9190614070565b60405180910390f35b3480156103ff57600080fd5b5061041a60048036038101906104159190613403565b610ce6565b005b34801561042857600080fd5b50610443600480360381019061043e9190613519565b610d46565b6040516104509190614070565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b9190613600565b610deb565b60405161048d9190613cce565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b89190613403565b610f12565b005b3480156104cb57600080fd5b506104d4610f32565b6040516104e19190613c23565b60405180910390f35b3480156104f657600080fd5b50610511600480360381019061050c9190613649565b610f4a565b60405161051e9190614070565b60405180910390f35b34801561053357600080fd5b5061054e60048036038101906105499190613396565b610fbb565b60405161055b9190614070565b60405180910390f35b34801561057057600080fd5b5061058b60048036038101906105869190613649565b610fca565b6040516105989190613c23565b60405180910390f35b3480156105ad57600080fd5b506105c860048036038101906105c39190613396565b61107c565b6040516105d59190614070565b60405180910390f35b3480156105ea57600080fd5b506105f3611134565b005b34801561060157600080fd5b5061060a6111bc565b6040516106179190613cb3565b60405180910390f35b34801561062c57600080fd5b506106356111cf565b005b34801561064357600080fd5b5061064c6112b4565b6040516106599190614070565b60405180910390f35b34801561066e57600080fd5b506106776112ba565b6040516106849190613c23565b60405180910390f35b34801561069957600080fd5b506106b460048036038101906106af9190613649565b6112e4565b6040516106c19190614070565b60405180910390f35b3480156106d657600080fd5b506106df611373565b6040516106ec9190613cce565b60405180910390f35b61070f600480360381019061070a9190613649565b611405565b005b34801561071d57600080fd5b50610738600480360381019061073391906134d9565b6117c0565b005b34801561074657600080fd5b5061074f611941565b60405161075c9190614070565b60405180910390f35b34801561077157600080fd5b5061078c60048036038101906107879190613559565b611947565b005b34801561079a57600080fd5b506107b560048036038101906107b09190613456565b611bdd565b005b3480156107c357600080fd5b506107cc611c3f565b6040516107d99190614070565b60405180910390f35b3480156107ee57600080fd5b506107f7611c45565b005b34801561080557600080fd5b50610820600480360381019061081b9190613649565b611ced565b60405161082d9190613cce565b60405180910390f35b34801561084257600080fd5b5061084b611d95565b6040516108589190614070565b60405180910390f35b34801561086d57600080fd5b50610876611d9b565b6040516108839190613cce565b60405180910390f35b34801561089857600080fd5b506108b360048036038101906108ae91906133c3565b611e29565b6040516108c09190613cb3565b60405180910390f35b3480156108d557600080fd5b506108de611ebd565b005b3480156108ec57600080fd5b5061090760048036038101906109029190613396565b611f65565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061097c575061097b8261205d565b5b9050919050565b601160009054906101000a900460ff1681565b6060600080546109a590614340565b80601f01602080910402602001604051908101604052809291908181526020018280546109d190614340565b8015610a1e5780601f106109f357610100808354040283529160200191610a1e565b820191906000526020600020905b815481529060010190602001808311610a0157829003601f168201915b5050505050905090565b6000610a338261213f565b610a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6990613eb0565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ab882610fca565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2090613f70565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b486121ab565b73ffffffffffffffffffffffffffffffffffffffff161480610b775750610b7681610b716121ab565b611e29565b5b610bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bad90613e30565b60405180910390fd5b610bc083836121b3565b505050565b600d5481565b6000600880549050905090565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9690613f90565b60405180910390fd5b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610cf7610cf16121ab565b8261226c565b610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90613fb0565b60405180910390fd5b610d4183838361234a565b505050565b6000610d518361107c565b8210610d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8990613d10565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6060610df56121ab565b73ffffffffffffffffffffffffffffffffffffffff16610e136112ba565b73ffffffffffffffffffffffffffffffffffffffff1614610e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6090613ef0565b60405180910390fd5b8160109080519060200190610e7f929190613154565b5060108054610e8d90614340565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb990614340565b8015610f065780601f10610edb57610100808354040283529160200191610f06565b820191906000526020600020905b815481529060010190602001808311610ee957829003601f168201915b50505050509050919050565b610f2d83838360405180602001604052806000815250611bdd565b505050565b73fa5af8c17736b69a4cee0e6c05dc139a92897aa981565b6000610f54610bcb565b8210610f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8c90613ff0565b60405180910390fd5b60088281548110610fa957610fa86144d9565b5b90600052602060002001549050919050565b60008047905080915050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106a90613e70565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e490613e50565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61113c6121ab565b73ffffffffffffffffffffffffffffffffffffffff1661115a6112ba565b73ffffffffffffffffffffffffffffffffffffffff16146111b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a790613ef0565b60405180910390fd5b6111ba60006125a6565b565b601160019054906101000a900460ff1681565b6111d76121ab565b73ffffffffffffffffffffffffffffffffffffffff166111f56112ba565b73ffffffffffffffffffffffffffffffffffffffff161461124b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124290613ef0565b60405180910390fd5b600047905060008111611293576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128a90613ed0565b60405180910390fd5b6112b173fa5af8c17736b69a4cee0e6c05dc139a92897aa98261266c565b50565b600b5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006112ee6121ab565b73ffffffffffffffffffffffffffffffffffffffff1661130c6112ba565b73ffffffffffffffffffffffffffffffffffffffff1614611362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135990613ef0565b60405180910390fd5b81600b81905550600b549050919050565b60606001805461138290614340565b80601f01602080910402602001604051908101604052809291908181526020018280546113ae90614340565b80156113fb5780601f106113d0576101008083540402835291602001916113fb565b820191906000526020600020905b8154815290600101906020018083116113de57829003601f168201915b5050505050905090565b60001515601160019054906101000a900460ff1615151461142557600080fd5b60011515601160009054906101000a900460ff16151514156114ce57601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166114cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c490614010565b60405180910390fd5b5b600c546114d9610bcb565b10611519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151090613d90565b60405180910390fd5b600d5481111561155e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155590614050565b60405180910390fd5b600c548161156a610bcb565b6115749190614175565b11156115b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ac90613e10565b60405180910390fd5b600e5481601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116039190614175565b1115611644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163b90613fd0565b60405180910390fd5b60008111611687576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167e90613cf0565b60405180910390fd5b3481600b5461169691906141fc565b146116d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cd90614030565b60405180910390fd5b60005b818110156117835760006001600f546116f29190614175565b90506001600f60008282546117079190614175565b925050819055506001601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461175e9190614175565b9250508190555061176f338261271d565b50808061177b906143a3565b9150506116d9565b507f664de86741840decc1adb511042e42b28d3242a3476241a7eab63de3366e5a2633826040516117b5929190613c8a565b60405180910390a150565b6117c86121ab565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182d90613dd0565b60405180910390fd5b80600560006118436121ab565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118f06121ab565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119359190613cb3565b60405180910390a35050565b600e5481565b61194f6121ab565b73ffffffffffffffffffffffffffffffffffffffff1661196d6112ba565b73ffffffffffffffffffffffffffffffffffffffff16146119c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ba90613ef0565b60405180910390fd5b60005b82829050811015611bd857600073ffffffffffffffffffffffffffffffffffffffff168383838181106119fc576119fb6144d9565b5b9050602002016020810190611a119190613396565b73ffffffffffffffffffffffffffffffffffffffff161415611a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5f90613f90565b60405180910390fd5b600160126000858585818110611a8157611a806144d9565b5b9050602002016020810190611a969190613396565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060136000858585818110611b0057611aff6144d9565b5b9050602002016020810190611b159190613396565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611b5c576000611bc4565b60136000848484818110611b7357611b726144d9565b5b9050602002016020810190611b889190613396565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020545b508080611bd0906143a3565b9150506119c6565b505050565b611bee611be86121ab565b8361226c565b611c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2490613fb0565b60405180910390fd5b611c398484848461273b565b50505050565b600f5481565b611c4d6121ab565b73ffffffffffffffffffffffffffffffffffffffff16611c6b6112ba565b73ffffffffffffffffffffffffffffffffffffffff1614611cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb890613ef0565b60405180910390fd5b601160019054906101000a900460ff1615601160016101000a81548160ff021916908315150217905550565b6060611cf88261213f565b611d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2e90613f30565b60405180910390fd5b600060108054611d4690614340565b905011611d625760405180602001604052806000815250611d8e565b6010611d6d83612797565b604051602001611d7e929190613bdf565b6040516020818303038152906040525b9050919050565b600c5481565b60108054611da890614340565b80601f0160208091040260200160405190810160405280929190818152602001828054611dd490614340565b8015611e215780601f10611df657610100808354040283529160200191611e21565b820191906000526020600020905b815481529060010190602001808311611e0457829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ec56121ab565b73ffffffffffffffffffffffffffffffffffffffff16611ee36112ba565b73ffffffffffffffffffffffffffffffffffffffff1614611f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3090613ef0565b60405180910390fd5b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b611f6d6121ab565b73ffffffffffffffffffffffffffffffffffffffff16611f8b6112ba565b73ffffffffffffffffffffffffffffffffffffffff1614611fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd890613ef0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612051576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204890613d50565b60405180910390fd5b61205a816125a6565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061212857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806121385750612137826128f8565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661222683610fca565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006122778261213f565b6122b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ad90613df0565b60405180910390fd5b60006122c183610fca565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061233057508373ffffffffffffffffffffffffffffffffffffffff1661231884610a28565b73ffffffffffffffffffffffffffffffffffffffff16145b8061234157506123408185611e29565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661236a82610fca565b73ffffffffffffffffffffffffffffffffffffffff16146123c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b790613f10565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612430576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242790613db0565b60405180910390fd5b61243b838383612962565b6124466000826121b3565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124969190614256565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124ed9190614175565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008273ffffffffffffffffffffffffffffffffffffffff168260405161269290613c0e565b60006040518083038185875af1925050503d80600081146126cf576040519150601f19603f3d011682016040523d82523d6000602084013e6126d4565b606091505b5050905080612718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270f90613f50565b60405180910390fd5b505050565b612737828260405180602001604052806000815250612a76565b5050565b61274684848461234a565b61275284848484612ad1565b612791576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278890613d30565b60405180910390fd5b50505050565b606060008214156127df576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506128f3565b600082905060005b600082146128115780806127fa906143a3565b915050600a8261280a91906141cb565b91506127e7565b60008167ffffffffffffffff81111561282d5761282c614508565b5b6040519080825280601f01601f19166020018201604052801561285f5781602001600182028036833780820191505090505b5090505b600085146128ec576001826128789190614256565b9150600a8561288791906143ec565b60306128939190614175565b60f81b8183815181106128a9576128a86144d9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128e591906141cb565b9450612863565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61296d838383612c68565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129b0576129ab81612c6d565b6129ef565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146129ee576129ed8382612cb6565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a3257612a2d81612e23565b612a71565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612a7057612a6f8282612ef4565b5b5b505050565b612a808383612f73565b612a8d6000848484612ad1565b612acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac390613d30565b60405180910390fd5b505050565b6000612af28473ffffffffffffffffffffffffffffffffffffffff16613141565b15612c5b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b1b6121ab565b8786866040518563ffffffff1660e01b8152600401612b3d9493929190613c3e565b602060405180830381600087803b158015612b5757600080fd5b505af1925050508015612b8857506040513d601f19601f82011682018060405250810190612b8591906135d3565b60015b612c0b573d8060008114612bb8576040519150601f19603f3d011682016040523d82523d6000602084013e612bbd565b606091505b50600081511415612c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfa90613d30565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c60565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612cc38461107c565b612ccd9190614256565b9050600060076000848152602001908152602001600020549050818114612db2576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612e379190614256565b9050600060096000848152602001908152602001600020549050600060088381548110612e6757612e666144d9565b5b906000526020600020015490508060088381548110612e8957612e886144d9565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612ed857612ed76144aa565b5b6001900381819060005260206000200160009055905550505050565b6000612eff8361107c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fda90613e90565b60405180910390fd5b612fec8161213f565b1561302c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302390613d70565b60405180910390fd5b61303860008383612962565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130889190614175565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461316090614340565b90600052602060002090601f01602090048101928261318257600085556131c9565b82601f1061319b57805160ff19168380011785556131c9565b828001600101855582156131c9579182015b828111156131c85782518255916020019190600101906131ad565b5b5090506131d691906131da565b5090565b5b808211156131f35760008160009055506001016131db565b5090565b600061320a613205846140b0565b61408b565b90508281526020810184848401111561322657613225614546565b5b6132318482856142fe565b509392505050565b600061324c613247846140e1565b61408b565b90508281526020810184848401111561326857613267614546565b5b6132738482856142fe565b509392505050565b60008135905061328a81614c94565b92915050565b60008083601f8401126132a6576132a561453c565b5b8235905067ffffffffffffffff8111156132c3576132c2614537565b5b6020830191508360208202830111156132df576132de614541565b5b9250929050565b6000813590506132f581614cab565b92915050565b60008135905061330a81614cc2565b92915050565b60008151905061331f81614cc2565b92915050565b600082601f83011261333a5761333961453c565b5b813561334a8482602086016131f7565b91505092915050565b600082601f8301126133685761336761453c565b5b8135613378848260208601613239565b91505092915050565b60008135905061339081614cd9565b92915050565b6000602082840312156133ac576133ab614550565b5b60006133ba8482850161327b565b91505092915050565b600080604083850312156133da576133d9614550565b5b60006133e88582860161327b565b92505060206133f98582860161327b565b9150509250929050565b60008060006060848603121561341c5761341b614550565b5b600061342a8682870161327b565b935050602061343b8682870161327b565b925050604061344c86828701613381565b9150509250925092565b600080600080608085870312156134705761346f614550565b5b600061347e8782880161327b565b945050602061348f8782880161327b565b93505060406134a087828801613381565b925050606085013567ffffffffffffffff8111156134c1576134c061454b565b5b6134cd87828801613325565b91505092959194509250565b600080604083850312156134f0576134ef614550565b5b60006134fe8582860161327b565b925050602061350f858286016132e6565b9150509250929050565b600080604083850312156135305761352f614550565b5b600061353e8582860161327b565b925050602061354f85828601613381565b9150509250929050565b600080602083850312156135705761356f614550565b5b600083013567ffffffffffffffff81111561358e5761358d61454b565b5b61359a85828601613290565b92509250509250929050565b6000602082840312156135bc576135bb614550565b5b60006135ca848285016132fb565b91505092915050565b6000602082840312156135e9576135e8614550565b5b60006135f784828501613310565b91505092915050565b60006020828403121561361657613615614550565b5b600082013567ffffffffffffffff8111156136345761363361454b565b5b61364084828501613353565b91505092915050565b60006020828403121561365f5761365e614550565b5b600061366d84828501613381565b91505092915050565b61367f8161428a565b82525050565b61368e8161429c565b82525050565b600061369f82614127565b6136a9818561413d565b93506136b981856020860161430d565b6136c281614555565b840191505092915050565b60006136d882614132565b6136e28185614159565b93506136f281856020860161430d565b6136fb81614555565b840191505092915050565b600061371182614132565b61371b818561416a565b935061372b81856020860161430d565b80840191505092915050565b6000815461374481614340565b61374e818661416a565b94506001821660008114613769576001811461377a576137ad565b60ff198316865281860193506137ad565b61378385614112565b60005b838110156137a557815481890152600182019150602081019050613786565b838801955050505b50505092915050565b60006137c3602083614159565b91506137ce82614566565b602082019050919050565b60006137e6602b83614159565b91506137f18261458f565b604082019050919050565b6000613809603283614159565b9150613814826145de565b604082019050919050565b600061382c602683614159565b91506138378261462d565b604082019050919050565b600061384f601c83614159565b915061385a8261467c565b602082019050919050565b6000613872601c83614159565b915061387d826146a5565b602082019050919050565b6000613895602483614159565b91506138a0826146ce565b604082019050919050565b60006138b8601983614159565b91506138c38261471d565b602082019050919050565b60006138db602c83614159565b91506138e682614746565b604082019050919050565b60006138fe602083614159565b915061390982614795565b602082019050919050565b6000613921603883614159565b915061392c826147be565b604082019050919050565b6000613944602a83614159565b915061394f8261480d565b604082019050919050565b6000613967602983614159565b91506139728261485c565b604082019050919050565b600061398a602083614159565b9150613995826148ab565b602082019050919050565b60006139ad602c83614159565b91506139b8826148d4565b604082019050919050565b60006139d060058361416a565b91506139db82614923565b600582019050919050565b60006139f3601383614159565b91506139fe8261494c565b602082019050919050565b6000613a16602083614159565b9150613a2182614975565b602082019050919050565b6000613a39602983614159565b9150613a448261499e565b604082019050919050565b6000613a5c602f83614159565b9150613a67826149ed565b604082019050919050565b6000613a7f601983614159565b9150613a8a82614a3c565b602082019050919050565b6000613aa2602183614159565b9150613aad82614a65565b604082019050919050565b6000613ac560008361414e565b9150613ad082614ab4565b600082019050919050565b6000613ae8601783614159565b9150613af382614ab7565b602082019050919050565b6000613b0b603183614159565b9150613b1682614ae0565b604082019050919050565b6000613b2e602883614159565b9150613b3982614b2f565b604082019050919050565b6000613b51602c83614159565b9150613b5c82614b7e565b604082019050919050565b6000613b74602583614159565b9150613b7f82614bcd565b604082019050919050565b6000613b97601883614159565b9150613ba282614c1c565b602082019050919050565b6000613bba602b83614159565b9150613bc582614c45565b604082019050919050565b613bd9816142f4565b82525050565b6000613beb8285613737565b9150613bf78284613706565b9150613c02826139c3565b91508190509392505050565b6000613c1982613ab8565b9150819050919050565b6000602082019050613c386000830184613676565b92915050565b6000608082019050613c536000830187613676565b613c606020830186613676565b613c6d6040830185613bd0565b8181036060830152613c7f8184613694565b905095945050505050565b6000604082019050613c9f6000830185613676565b613cac6020830184613bd0565b9392505050565b6000602082019050613cc86000830184613685565b92915050565b60006020820190508181036000830152613ce881846136cd565b905092915050565b60006020820190508181036000830152613d09816137b6565b9050919050565b60006020820190508181036000830152613d29816137d9565b9050919050565b60006020820190508181036000830152613d49816137fc565b9050919050565b60006020820190508181036000830152613d698161381f565b9050919050565b60006020820190508181036000830152613d8981613842565b9050919050565b60006020820190508181036000830152613da981613865565b9050919050565b60006020820190508181036000830152613dc981613888565b9050919050565b60006020820190508181036000830152613de9816138ab565b9050919050565b60006020820190508181036000830152613e09816138ce565b9050919050565b60006020820190508181036000830152613e29816138f1565b9050919050565b60006020820190508181036000830152613e4981613914565b9050919050565b60006020820190508181036000830152613e6981613937565b9050919050565b60006020820190508181036000830152613e898161395a565b9050919050565b60006020820190508181036000830152613ea98161397d565b9050919050565b60006020820190508181036000830152613ec9816139a0565b9050919050565b60006020820190508181036000830152613ee9816139e6565b9050919050565b60006020820190508181036000830152613f0981613a09565b9050919050565b60006020820190508181036000830152613f2981613a2c565b9050919050565b60006020820190508181036000830152613f4981613a4f565b9050919050565b60006020820190508181036000830152613f6981613a72565b9050919050565b60006020820190508181036000830152613f8981613a95565b9050919050565b60006020820190508181036000830152613fa981613adb565b9050919050565b60006020820190508181036000830152613fc981613afe565b9050919050565b60006020820190508181036000830152613fe981613b21565b9050919050565b6000602082019050818103600083015261400981613b44565b9050919050565b6000602082019050818103600083015261402981613b67565b9050919050565b6000602082019050818103600083015261404981613b8a565b9050919050565b6000602082019050818103600083015261406981613bad565b9050919050565b60006020820190506140856000830184613bd0565b92915050565b60006140956140a6565b90506140a18282614372565b919050565b6000604051905090565b600067ffffffffffffffff8211156140cb576140ca614508565b5b6140d482614555565b9050602081019050919050565b600067ffffffffffffffff8211156140fc576140fb614508565b5b61410582614555565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614180826142f4565b915061418b836142f4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141c0576141bf61441d565b5b828201905092915050565b60006141d6826142f4565b91506141e1836142f4565b9250826141f1576141f061444c565b5b828204905092915050565b6000614207826142f4565b9150614212836142f4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561424b5761424a61441d565b5b828202905092915050565b6000614261826142f4565b915061426c836142f4565b92508282101561427f5761427e61441d565b5b828203905092915050565b6000614295826142d4565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561432b578082015181840152602081019050614310565b8381111561433a576000848401525b50505050565b6000600282049050600182168061435857607f821691505b6020821081141561436c5761436b61447b565b5b50919050565b61437b82614555565b810181811067ffffffffffffffff8211171561439a57614399614508565b5b80604052505050565b60006143ae826142f4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156143e1576143e061441d565b5b600182019050919050565b60006143f7826142f4565b9150614402836142f4565b9250826144125761441161444c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d757374206d696e74206174206c65617374206f6e65204d757368726f686d2e600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f416c6c20746f6b656e732068617665206265656e206d696e7465642e00000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d696e74696e6720776f756c6420657863656564206d617820737570706c7921600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f496e737566666963656e742062616c616e636500000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4661696c656420746f2077696474686472617720457468657200000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f43616e6e6f7420616464206e756c6c2061646472657373000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f50757263686173652065786365656473206d617820616c6c6f7765642070657260008201527f2077616c6c65742e000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f596f7520617265206e6f7420656c696769626c6520666f72207468652070726560008201527f73616c6521000000000000000000000000000000000000000000000000000000602082015250565b7f45544820616d6f756e7420697320696e636f72726563742e0000000000000000600082015250565b7f596f752063616e206f6e6c79206d696e74206f6e65204d757368726f686d207060008201527f657220616464726573732e000000000000000000000000000000000000000000602082015250565b614c9d8161428a565b8114614ca857600080fd5b50565b614cb48161429c565b8114614cbf57600080fd5b50565b614ccb816142a8565b8114614cd657600080fd5b50565b614ce2816142f4565b8114614ced57600080fd5b5056fea264697066735822122003c2839ddcc41a5caf28b70ff36d5ed63871b943a0450e9f83c75ecdd0d0fdb964736f6c63430008070033697066733a2f2f516d624a54353442783768784e354e4a3239463877465a34594e7135395666357453535465435171654e397377662f
Deployed Bytecode
0x6080604052600436106102255760003560e01c80638456cb5911610123578063aef6ee1f116100ab578063d04ba57e1161006f578063d04ba57e14610836578063d547cfb714610861578063e985e9c51461088c578063ed1fc2a2146108c9578063f2fde38b146108e057610225565b8063aef6ee1f14610765578063b88d4fde1461078e578063c32dbe50146107b7578063c4ae3168146107e2578063c87b56dd146107f957610225565b806391b7f5ed116100f257806391b7f5ed1461068d57806395d89b41146106ca578063a0712d68146106f5578063a22cb46514610711578063ad5bb23c1461073a57610225565b80638456cb59146105f5578063853828b6146106205780638d859f3e146106375780638da5cb5b1461066257610225565b806323b872dd116101b15780634f6ccce7116101755780634f6ccce7146104ea578063584a0927146105275780636352211e1461056457806370a08231146105a1578063715018a6146105de57610225565b806323b872dd146103f35780632f745c591461041c57806337c0df0c1461045957806342842e0e1461049657806346bb2833146104bf57610225565b8063095ea7b3116101f8578063095ea7b3146102fa57806309d42b301461032357806318160ddd1461034e578063191f65ac146103795780631978f469146103b657610225565b806301ffc9a71461022a57806304549d6f1461026757806306fdde0314610292578063081812fc146102bd575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c91906135a6565b610909565b60405161025e9190613cb3565b60405180910390f35b34801561027357600080fd5b5061027c610983565b6040516102899190613cb3565b60405180910390f35b34801561029e57600080fd5b506102a7610996565b6040516102b49190613cce565b60405180910390f35b3480156102c957600080fd5b506102e460048036038101906102df9190613649565b610a28565b6040516102f19190613c23565b60405180910390f35b34801561030657600080fd5b50610321600480360381019061031c9190613519565b610aad565b005b34801561032f57600080fd5b50610338610bc5565b6040516103459190614070565b60405180910390f35b34801561035a57600080fd5b50610363610bcb565b6040516103709190614070565b60405180910390f35b34801561038557600080fd5b506103a0600480360381019061039b9190613396565b610bd8565b6040516103ad9190613cb3565b60405180910390f35b3480156103c257600080fd5b506103dd60048036038101906103d89190613396565b610c2e565b6040516103ea9190614070565b60405180910390f35b3480156103ff57600080fd5b5061041a60048036038101906104159190613403565b610ce6565b005b34801561042857600080fd5b50610443600480360381019061043e9190613519565b610d46565b6040516104509190614070565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b9190613600565b610deb565b60405161048d9190613cce565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b89190613403565b610f12565b005b3480156104cb57600080fd5b506104d4610f32565b6040516104e19190613c23565b60405180910390f35b3480156104f657600080fd5b50610511600480360381019061050c9190613649565b610f4a565b60405161051e9190614070565b60405180910390f35b34801561053357600080fd5b5061054e60048036038101906105499190613396565b610fbb565b60405161055b9190614070565b60405180910390f35b34801561057057600080fd5b5061058b60048036038101906105869190613649565b610fca565b6040516105989190613c23565b60405180910390f35b3480156105ad57600080fd5b506105c860048036038101906105c39190613396565b61107c565b6040516105d59190614070565b60405180910390f35b3480156105ea57600080fd5b506105f3611134565b005b34801561060157600080fd5b5061060a6111bc565b6040516106179190613cb3565b60405180910390f35b34801561062c57600080fd5b506106356111cf565b005b34801561064357600080fd5b5061064c6112b4565b6040516106599190614070565b60405180910390f35b34801561066e57600080fd5b506106776112ba565b6040516106849190613c23565b60405180910390f35b34801561069957600080fd5b506106b460048036038101906106af9190613649565b6112e4565b6040516106c19190614070565b60405180910390f35b3480156106d657600080fd5b506106df611373565b6040516106ec9190613cce565b60405180910390f35b61070f600480360381019061070a9190613649565b611405565b005b34801561071d57600080fd5b50610738600480360381019061073391906134d9565b6117c0565b005b34801561074657600080fd5b5061074f611941565b60405161075c9190614070565b60405180910390f35b34801561077157600080fd5b5061078c60048036038101906107879190613559565b611947565b005b34801561079a57600080fd5b506107b560048036038101906107b09190613456565b611bdd565b005b3480156107c357600080fd5b506107cc611c3f565b6040516107d99190614070565b60405180910390f35b3480156107ee57600080fd5b506107f7611c45565b005b34801561080557600080fd5b50610820600480360381019061081b9190613649565b611ced565b60405161082d9190613cce565b60405180910390f35b34801561084257600080fd5b5061084b611d95565b6040516108589190614070565b60405180910390f35b34801561086d57600080fd5b50610876611d9b565b6040516108839190613cce565b60405180910390f35b34801561089857600080fd5b506108b360048036038101906108ae91906133c3565b611e29565b6040516108c09190613cb3565b60405180910390f35b3480156108d557600080fd5b506108de611ebd565b005b3480156108ec57600080fd5b5061090760048036038101906109029190613396565b611f65565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061097c575061097b8261205d565b5b9050919050565b601160009054906101000a900460ff1681565b6060600080546109a590614340565b80601f01602080910402602001604051908101604052809291908181526020018280546109d190614340565b8015610a1e5780601f106109f357610100808354040283529160200191610a1e565b820191906000526020600020905b815481529060010190602001808311610a0157829003601f168201915b5050505050905090565b6000610a338261213f565b610a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6990613eb0565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ab882610fca565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2090613f70565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b486121ab565b73ffffffffffffffffffffffffffffffffffffffff161480610b775750610b7681610b716121ab565b611e29565b5b610bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bad90613e30565b60405180910390fd5b610bc083836121b3565b505050565b600d5481565b6000600880549050905090565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9690613f90565b60405180910390fd5b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610cf7610cf16121ab565b8261226c565b610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90613fb0565b60405180910390fd5b610d4183838361234a565b505050565b6000610d518361107c565b8210610d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8990613d10565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6060610df56121ab565b73ffffffffffffffffffffffffffffffffffffffff16610e136112ba565b73ffffffffffffffffffffffffffffffffffffffff1614610e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6090613ef0565b60405180910390fd5b8160109080519060200190610e7f929190613154565b5060108054610e8d90614340565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb990614340565b8015610f065780601f10610edb57610100808354040283529160200191610f06565b820191906000526020600020905b815481529060010190602001808311610ee957829003601f168201915b50505050509050919050565b610f2d83838360405180602001604052806000815250611bdd565b505050565b73fa5af8c17736b69a4cee0e6c05dc139a92897aa981565b6000610f54610bcb565b8210610f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8c90613ff0565b60405180910390fd5b60088281548110610fa957610fa86144d9565b5b90600052602060002001549050919050565b60008047905080915050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106a90613e70565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e490613e50565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61113c6121ab565b73ffffffffffffffffffffffffffffffffffffffff1661115a6112ba565b73ffffffffffffffffffffffffffffffffffffffff16146111b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a790613ef0565b60405180910390fd5b6111ba60006125a6565b565b601160019054906101000a900460ff1681565b6111d76121ab565b73ffffffffffffffffffffffffffffffffffffffff166111f56112ba565b73ffffffffffffffffffffffffffffffffffffffff161461124b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124290613ef0565b60405180910390fd5b600047905060008111611293576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128a90613ed0565b60405180910390fd5b6112b173fa5af8c17736b69a4cee0e6c05dc139a92897aa98261266c565b50565b600b5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006112ee6121ab565b73ffffffffffffffffffffffffffffffffffffffff1661130c6112ba565b73ffffffffffffffffffffffffffffffffffffffff1614611362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135990613ef0565b60405180910390fd5b81600b81905550600b549050919050565b60606001805461138290614340565b80601f01602080910402602001604051908101604052809291908181526020018280546113ae90614340565b80156113fb5780601f106113d0576101008083540402835291602001916113fb565b820191906000526020600020905b8154815290600101906020018083116113de57829003601f168201915b5050505050905090565b60001515601160019054906101000a900460ff1615151461142557600080fd5b60011515601160009054906101000a900460ff16151514156114ce57601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166114cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c490614010565b60405180910390fd5b5b600c546114d9610bcb565b10611519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151090613d90565b60405180910390fd5b600d5481111561155e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155590614050565b60405180910390fd5b600c548161156a610bcb565b6115749190614175565b11156115b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ac90613e10565b60405180910390fd5b600e5481601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116039190614175565b1115611644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163b90613fd0565b60405180910390fd5b60008111611687576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167e90613cf0565b60405180910390fd5b3481600b5461169691906141fc565b146116d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cd90614030565b60405180910390fd5b60005b818110156117835760006001600f546116f29190614175565b90506001600f60008282546117079190614175565b925050819055506001601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461175e9190614175565b9250508190555061176f338261271d565b50808061177b906143a3565b9150506116d9565b507f664de86741840decc1adb511042e42b28d3242a3476241a7eab63de3366e5a2633826040516117b5929190613c8a565b60405180910390a150565b6117c86121ab565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182d90613dd0565b60405180910390fd5b80600560006118436121ab565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118f06121ab565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119359190613cb3565b60405180910390a35050565b600e5481565b61194f6121ab565b73ffffffffffffffffffffffffffffffffffffffff1661196d6112ba565b73ffffffffffffffffffffffffffffffffffffffff16146119c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ba90613ef0565b60405180910390fd5b60005b82829050811015611bd857600073ffffffffffffffffffffffffffffffffffffffff168383838181106119fc576119fb6144d9565b5b9050602002016020810190611a119190613396565b73ffffffffffffffffffffffffffffffffffffffff161415611a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5f90613f90565b60405180910390fd5b600160126000858585818110611a8157611a806144d9565b5b9050602002016020810190611a969190613396565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060136000858585818110611b0057611aff6144d9565b5b9050602002016020810190611b159190613396565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611b5c576000611bc4565b60136000848484818110611b7357611b726144d9565b5b9050602002016020810190611b889190613396565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020545b508080611bd0906143a3565b9150506119c6565b505050565b611bee611be86121ab565b8361226c565b611c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2490613fb0565b60405180910390fd5b611c398484848461273b565b50505050565b600f5481565b611c4d6121ab565b73ffffffffffffffffffffffffffffffffffffffff16611c6b6112ba565b73ffffffffffffffffffffffffffffffffffffffff1614611cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb890613ef0565b60405180910390fd5b601160019054906101000a900460ff1615601160016101000a81548160ff021916908315150217905550565b6060611cf88261213f565b611d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2e90613f30565b60405180910390fd5b600060108054611d4690614340565b905011611d625760405180602001604052806000815250611d8e565b6010611d6d83612797565b604051602001611d7e929190613bdf565b6040516020818303038152906040525b9050919050565b600c5481565b60108054611da890614340565b80601f0160208091040260200160405190810160405280929190818152602001828054611dd490614340565b8015611e215780601f10611df657610100808354040283529160200191611e21565b820191906000526020600020905b815481529060010190602001808311611e0457829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ec56121ab565b73ffffffffffffffffffffffffffffffffffffffff16611ee36112ba565b73ffffffffffffffffffffffffffffffffffffffff1614611f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3090613ef0565b60405180910390fd5b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b611f6d6121ab565b73ffffffffffffffffffffffffffffffffffffffff16611f8b6112ba565b73ffffffffffffffffffffffffffffffffffffffff1614611fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd890613ef0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612051576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204890613d50565b60405180910390fd5b61205a816125a6565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061212857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806121385750612137826128f8565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661222683610fca565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006122778261213f565b6122b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ad90613df0565b60405180910390fd5b60006122c183610fca565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061233057508373ffffffffffffffffffffffffffffffffffffffff1661231884610a28565b73ffffffffffffffffffffffffffffffffffffffff16145b8061234157506123408185611e29565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661236a82610fca565b73ffffffffffffffffffffffffffffffffffffffff16146123c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b790613f10565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612430576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242790613db0565b60405180910390fd5b61243b838383612962565b6124466000826121b3565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124969190614256565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124ed9190614175565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008273ffffffffffffffffffffffffffffffffffffffff168260405161269290613c0e565b60006040518083038185875af1925050503d80600081146126cf576040519150601f19603f3d011682016040523d82523d6000602084013e6126d4565b606091505b5050905080612718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270f90613f50565b60405180910390fd5b505050565b612737828260405180602001604052806000815250612a76565b5050565b61274684848461234a565b61275284848484612ad1565b612791576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278890613d30565b60405180910390fd5b50505050565b606060008214156127df576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506128f3565b600082905060005b600082146128115780806127fa906143a3565b915050600a8261280a91906141cb565b91506127e7565b60008167ffffffffffffffff81111561282d5761282c614508565b5b6040519080825280601f01601f19166020018201604052801561285f5781602001600182028036833780820191505090505b5090505b600085146128ec576001826128789190614256565b9150600a8561288791906143ec565b60306128939190614175565b60f81b8183815181106128a9576128a86144d9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128e591906141cb565b9450612863565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61296d838383612c68565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129b0576129ab81612c6d565b6129ef565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146129ee576129ed8382612cb6565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a3257612a2d81612e23565b612a71565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612a7057612a6f8282612ef4565b5b5b505050565b612a808383612f73565b612a8d6000848484612ad1565b612acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac390613d30565b60405180910390fd5b505050565b6000612af28473ffffffffffffffffffffffffffffffffffffffff16613141565b15612c5b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b1b6121ab565b8786866040518563ffffffff1660e01b8152600401612b3d9493929190613c3e565b602060405180830381600087803b158015612b5757600080fd5b505af1925050508015612b8857506040513d601f19601f82011682018060405250810190612b8591906135d3565b60015b612c0b573d8060008114612bb8576040519150601f19603f3d011682016040523d82523d6000602084013e612bbd565b606091505b50600081511415612c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfa90613d30565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c60565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612cc38461107c565b612ccd9190614256565b9050600060076000848152602001908152602001600020549050818114612db2576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612e379190614256565b9050600060096000848152602001908152602001600020549050600060088381548110612e6757612e666144d9565b5b906000526020600020015490508060088381548110612e8957612e886144d9565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612ed857612ed76144aa565b5b6001900381819060005260206000200160009055905550505050565b6000612eff8361107c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fda90613e90565b60405180910390fd5b612fec8161213f565b1561302c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302390613d70565b60405180910390fd5b61303860008383612962565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130889190614175565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461316090614340565b90600052602060002090601f01602090048101928261318257600085556131c9565b82601f1061319b57805160ff19168380011785556131c9565b828001600101855582156131c9579182015b828111156131c85782518255916020019190600101906131ad565b5b5090506131d691906131da565b5090565b5b808211156131f35760008160009055506001016131db565b5090565b600061320a613205846140b0565b61408b565b90508281526020810184848401111561322657613225614546565b5b6132318482856142fe565b509392505050565b600061324c613247846140e1565b61408b565b90508281526020810184848401111561326857613267614546565b5b6132738482856142fe565b509392505050565b60008135905061328a81614c94565b92915050565b60008083601f8401126132a6576132a561453c565b5b8235905067ffffffffffffffff8111156132c3576132c2614537565b5b6020830191508360208202830111156132df576132de614541565b5b9250929050565b6000813590506132f581614cab565b92915050565b60008135905061330a81614cc2565b92915050565b60008151905061331f81614cc2565b92915050565b600082601f83011261333a5761333961453c565b5b813561334a8482602086016131f7565b91505092915050565b600082601f8301126133685761336761453c565b5b8135613378848260208601613239565b91505092915050565b60008135905061339081614cd9565b92915050565b6000602082840312156133ac576133ab614550565b5b60006133ba8482850161327b565b91505092915050565b600080604083850312156133da576133d9614550565b5b60006133e88582860161327b565b92505060206133f98582860161327b565b9150509250929050565b60008060006060848603121561341c5761341b614550565b5b600061342a8682870161327b565b935050602061343b8682870161327b565b925050604061344c86828701613381565b9150509250925092565b600080600080608085870312156134705761346f614550565b5b600061347e8782880161327b565b945050602061348f8782880161327b565b93505060406134a087828801613381565b925050606085013567ffffffffffffffff8111156134c1576134c061454b565b5b6134cd87828801613325565b91505092959194509250565b600080604083850312156134f0576134ef614550565b5b60006134fe8582860161327b565b925050602061350f858286016132e6565b9150509250929050565b600080604083850312156135305761352f614550565b5b600061353e8582860161327b565b925050602061354f85828601613381565b9150509250929050565b600080602083850312156135705761356f614550565b5b600083013567ffffffffffffffff81111561358e5761358d61454b565b5b61359a85828601613290565b92509250509250929050565b6000602082840312156135bc576135bb614550565b5b60006135ca848285016132fb565b91505092915050565b6000602082840312156135e9576135e8614550565b5b60006135f784828501613310565b91505092915050565b60006020828403121561361657613615614550565b5b600082013567ffffffffffffffff8111156136345761363361454b565b5b61364084828501613353565b91505092915050565b60006020828403121561365f5761365e614550565b5b600061366d84828501613381565b91505092915050565b61367f8161428a565b82525050565b61368e8161429c565b82525050565b600061369f82614127565b6136a9818561413d565b93506136b981856020860161430d565b6136c281614555565b840191505092915050565b60006136d882614132565b6136e28185614159565b93506136f281856020860161430d565b6136fb81614555565b840191505092915050565b600061371182614132565b61371b818561416a565b935061372b81856020860161430d565b80840191505092915050565b6000815461374481614340565b61374e818661416a565b94506001821660008114613769576001811461377a576137ad565b60ff198316865281860193506137ad565b61378385614112565b60005b838110156137a557815481890152600182019150602081019050613786565b838801955050505b50505092915050565b60006137c3602083614159565b91506137ce82614566565b602082019050919050565b60006137e6602b83614159565b91506137f18261458f565b604082019050919050565b6000613809603283614159565b9150613814826145de565b604082019050919050565b600061382c602683614159565b91506138378261462d565b604082019050919050565b600061384f601c83614159565b915061385a8261467c565b602082019050919050565b6000613872601c83614159565b915061387d826146a5565b602082019050919050565b6000613895602483614159565b91506138a0826146ce565b604082019050919050565b60006138b8601983614159565b91506138c38261471d565b602082019050919050565b60006138db602c83614159565b91506138e682614746565b604082019050919050565b60006138fe602083614159565b915061390982614795565b602082019050919050565b6000613921603883614159565b915061392c826147be565b604082019050919050565b6000613944602a83614159565b915061394f8261480d565b604082019050919050565b6000613967602983614159565b91506139728261485c565b604082019050919050565b600061398a602083614159565b9150613995826148ab565b602082019050919050565b60006139ad602c83614159565b91506139b8826148d4565b604082019050919050565b60006139d060058361416a565b91506139db82614923565b600582019050919050565b60006139f3601383614159565b91506139fe8261494c565b602082019050919050565b6000613a16602083614159565b9150613a2182614975565b602082019050919050565b6000613a39602983614159565b9150613a448261499e565b604082019050919050565b6000613a5c602f83614159565b9150613a67826149ed565b604082019050919050565b6000613a7f601983614159565b9150613a8a82614a3c565b602082019050919050565b6000613aa2602183614159565b9150613aad82614a65565b604082019050919050565b6000613ac560008361414e565b9150613ad082614ab4565b600082019050919050565b6000613ae8601783614159565b9150613af382614ab7565b602082019050919050565b6000613b0b603183614159565b9150613b1682614ae0565b604082019050919050565b6000613b2e602883614159565b9150613b3982614b2f565b604082019050919050565b6000613b51602c83614159565b9150613b5c82614b7e565b604082019050919050565b6000613b74602583614159565b9150613b7f82614bcd565b604082019050919050565b6000613b97601883614159565b9150613ba282614c1c565b602082019050919050565b6000613bba602b83614159565b9150613bc582614c45565b604082019050919050565b613bd9816142f4565b82525050565b6000613beb8285613737565b9150613bf78284613706565b9150613c02826139c3565b91508190509392505050565b6000613c1982613ab8565b9150819050919050565b6000602082019050613c386000830184613676565b92915050565b6000608082019050613c536000830187613676565b613c606020830186613676565b613c6d6040830185613bd0565b8181036060830152613c7f8184613694565b905095945050505050565b6000604082019050613c9f6000830185613676565b613cac6020830184613bd0565b9392505050565b6000602082019050613cc86000830184613685565b92915050565b60006020820190508181036000830152613ce881846136cd565b905092915050565b60006020820190508181036000830152613d09816137b6565b9050919050565b60006020820190508181036000830152613d29816137d9565b9050919050565b60006020820190508181036000830152613d49816137fc565b9050919050565b60006020820190508181036000830152613d698161381f565b9050919050565b60006020820190508181036000830152613d8981613842565b9050919050565b60006020820190508181036000830152613da981613865565b9050919050565b60006020820190508181036000830152613dc981613888565b9050919050565b60006020820190508181036000830152613de9816138ab565b9050919050565b60006020820190508181036000830152613e09816138ce565b9050919050565b60006020820190508181036000830152613e29816138f1565b9050919050565b60006020820190508181036000830152613e4981613914565b9050919050565b60006020820190508181036000830152613e6981613937565b9050919050565b60006020820190508181036000830152613e898161395a565b9050919050565b60006020820190508181036000830152613ea98161397d565b9050919050565b60006020820190508181036000830152613ec9816139a0565b9050919050565b60006020820190508181036000830152613ee9816139e6565b9050919050565b60006020820190508181036000830152613f0981613a09565b9050919050565b60006020820190508181036000830152613f2981613a2c565b9050919050565b60006020820190508181036000830152613f4981613a4f565b9050919050565b60006020820190508181036000830152613f6981613a72565b9050919050565b60006020820190508181036000830152613f8981613a95565b9050919050565b60006020820190508181036000830152613fa981613adb565b9050919050565b60006020820190508181036000830152613fc981613afe565b9050919050565b60006020820190508181036000830152613fe981613b21565b9050919050565b6000602082019050818103600083015261400981613b44565b9050919050565b6000602082019050818103600083015261402981613b67565b9050919050565b6000602082019050818103600083015261404981613b8a565b9050919050565b6000602082019050818103600083015261406981613bad565b9050919050565b60006020820190506140856000830184613bd0565b92915050565b60006140956140a6565b90506140a18282614372565b919050565b6000604051905090565b600067ffffffffffffffff8211156140cb576140ca614508565b5b6140d482614555565b9050602081019050919050565b600067ffffffffffffffff8211156140fc576140fb614508565b5b61410582614555565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614180826142f4565b915061418b836142f4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141c0576141bf61441d565b5b828201905092915050565b60006141d6826142f4565b91506141e1836142f4565b9250826141f1576141f061444c565b5b828204905092915050565b6000614207826142f4565b9150614212836142f4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561424b5761424a61441d565b5b828202905092915050565b6000614261826142f4565b915061426c836142f4565b92508282101561427f5761427e61441d565b5b828203905092915050565b6000614295826142d4565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561432b578082015181840152602081019050614310565b8381111561433a576000848401525b50505050565b6000600282049050600182168061435857607f821691505b6020821081141561436c5761436b61447b565b5b50919050565b61437b82614555565b810181811067ffffffffffffffff8211171561439a57614399614508565b5b80604052505050565b60006143ae826142f4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156143e1576143e061441d565b5b600182019050919050565b60006143f7826142f4565b9150614402836142f4565b9250826144125761441161444c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d757374206d696e74206174206c65617374206f6e65204d757368726f686d2e600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f416c6c20746f6b656e732068617665206265656e206d696e7465642e00000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d696e74696e6720776f756c6420657863656564206d617820737570706c7921600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f496e737566666963656e742062616c616e636500000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4661696c656420746f2077696474686472617720457468657200000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f43616e6e6f7420616464206e756c6c2061646472657373000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f50757263686173652065786365656473206d617820616c6c6f7765642070657260008201527f2077616c6c65742e000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f596f7520617265206e6f7420656c696769626c6520666f72207468652070726560008201527f73616c6521000000000000000000000000000000000000000000000000000000602082015250565b7f45544820616d6f756e7420697320696e636f72726563742e0000000000000000600082015250565b7f596f752063616e206f6e6c79206d696e74206f6e65204d757368726f686d207060008201527f657220616464726573732e000000000000000000000000000000000000000000602082015250565b614c9d8161428a565b8114614ca857600080fd5b50565b614cb48161429c565b8114614cbf57600080fd5b50565b614ccb816142a8565b8114614cd657600080fd5b50565b614ce2816142f4565b8114614ced57600080fd5b5056fea264697066735822122003c2839ddcc41a5caf28b70ff36d5ed63871b943a0450e9f83c75ecdd0d0fdb964736f6c63430008070033
Deployed Bytecode Sourcemap
45041:4043:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39153:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45521:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27036:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28604:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28127:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45213:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39793:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46890:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47021:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29494:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39461:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46044:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29904:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45295:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39983:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46355:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26730:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26460:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11017:94;;;;;;;;;;;;;:::i;:::-;;45561:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48361:198;;;;;;;;;;;;;:::i;:::-;;45128:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10366:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46216:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27205:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47219:1130;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28897:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45251:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46521:361;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30160:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45385:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45957:75;;;;;;;;;;;;;:::i;:::-;;48775:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45171:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45429:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29263:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45843:102;;;;;;;;;;;;;:::i;:::-;;11266:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39153:224;39255:4;39294:35;39279:50;;;:11;:50;;;;:90;;;;39333:36;39357:11;39333:23;:36::i;:::-;39279:90;39272:97;;39153:224;;;:::o;45521:33::-;;;;;;;;;;;;;:::o;27036:100::-;27090:13;27123:5;27116:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27036:100;:::o;28604:221::-;28680:7;28708:16;28716:7;28708;:16::i;:::-;28700:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28793:15;:24;28809:7;28793:24;;;;;;;;;;;;;;;;;;;;;28786:31;;28604:221;;;:::o;28127:411::-;28208:13;28224:23;28239:7;28224:14;:23::i;:::-;28208:39;;28272:5;28266:11;;:2;:11;;;;28258:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28366:5;28350:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28375:37;28392:5;28399:12;:10;:12::i;:::-;28375:16;:37::i;:::-;28350:62;28328:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;28509:21;28518:2;28522:7;28509:8;:21::i;:::-;28197:341;28127:411;;:::o;45213:31::-;;;;:::o;39793:113::-;39854:7;39881:10;:17;;;;39874:24;;39793:113;:::o;46890:123::-;46959:4;46983:16;:22;47000:4;46983:22;;;;;;;;;;;;;;;;;;;;;;;;;46976:29;;46890:123;;;:::o;47021:186::-;47084:7;47129:1;47112:19;;:5;:19;;;;47104:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;47179:13;:20;47193:5;47179:20;;;;;;;;;;;;;;;;47172:27;;47021:186;;;:::o;29494:339::-;29689:41;29708:12;:10;:12::i;:::-;29722:7;29689:18;:41::i;:::-;29681:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29797:28;29807:4;29813:2;29817:7;29797:9;:28::i;:::-;29494:339;;;:::o;39461:256::-;39558:7;39594:23;39611:5;39594:16;:23::i;:::-;39586:5;:31;39578:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39683:12;:19;39696:5;39683:19;;;;;;;;;;;;;;;:26;39703:5;39683:26;;;;;;;;;;;;39676:33;;39461:256;;;;:::o;46044:160::-;46118:13;10597:12;:10;:12::i;:::-;10586:23;;:7;:5;:7::i;:::-;:23;;;10578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46159:7:::1;46144:12;:22;;;;;;;;;;;;:::i;:::-;;46184:12;46177:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46044:160:::0;;;:::o;29904:185::-;30042:39;30059:4;30065:2;30069:7;30042:39;;;;;;;;;;;;:16;:39::i;:::-;29904:185;;;:::o;45295:83::-;45336:42;45295:83;:::o;39983:233::-;40058:7;40094:30;:28;:30::i;:::-;40086:5;:38;40078:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;40191:10;40202:5;40191:17;;;;;;;;:::i;:::-;;;;;;;;;;40184:24;;39983:233;;;:::o;46355:154::-;46411:7;46431:18;46452:21;46431:42;;46491:10;46484:17;;;46355:154;;;:::o;26730:239::-;26802:7;26822:13;26838:7;:16;26846:7;26838:16;;;;;;;;;;;;;;;;;;;;;26822:32;;26890:1;26873:19;;:5;:19;;;;26865:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26956:5;26949:12;;;26730:239;;;:::o;26460:208::-;26532:7;26577:1;26560:19;;:5;:19;;;;26552:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26644:9;:16;26654:5;26644:16;;;;;;;;;;;;;;;;26637:23;;26460:208;;;:::o;11017:94::-;10597:12;:10;:12::i;:::-;10586:23;;:7;:5;:7::i;:::-;:23;;;10578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11082:21:::1;11100:1;11082:9;:21::i;:::-;11017:94::o:0;45561:25::-;;;;;;;;;;;;;:::o;48361:198::-;10597:12;:10;:12::i;:::-;10586:23;;:7;:5;:7::i;:::-;:23;;;10578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48412:15:::1;48430:21;48412:39;;48480:1;48470:7;:11;48462:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;48516:35;45336:42;48543:7;48516:10;:35::i;:::-;48401:158;48361:198::o:0;45128:30::-;;;;:::o;10366:87::-;10412:7;10439:6;;;;;;;;;;;10432:13;;10366:87;:::o;46216:127::-;46277:7;10597:12;:10;:12::i;:::-;10586:23;;:7;:5;:7::i;:::-;:23;;;10578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46305:7:::1;46297:5;:15;;;;46330:5;;46323:12;;46216:127:::0;;;:::o;27205:104::-;27261:13;27294:7;27287:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27205:104;:::o;47219:1130::-;47303:5;47294:14;;:5;;;;;;;;;;;:14;;;47286:23;;;;;;47342:4;47324:22;;:14;;;;;;;;;;;:22;;;47320:133;;;47371:16;:28;47388:10;47371:28;;;;;;;;;;;;;;;;;;;;;;;;;47363:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;47320:133;47487:13;;47471;:11;:13::i;:::-;:29;47463:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;47571:12;;47552:15;:31;;47544:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;47685:13;;47666:15;47650:13;:11;:13::i;:::-;:31;;;;:::i;:::-;:48;;47642:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;47801:18;;47782:15;47754:13;:25;47768:10;47754:25;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;:65;;47746:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;47901:1;47883:15;:19;47875:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;47985:9;47966:15;47958:5;;:23;;;;:::i;:::-;:36;47950:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;48049:9;48044:239;48068:15;48064:1;:19;48044:239;;;48105:15;48142:1;48123:16;;:20;;;;:::i;:::-;48105:38;;48180:1;48160:16;;:21;;;;;;;:::i;:::-;;;;;;;;48225:1;48196:13;:25;48210:10;48196:25;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;48241;48251:10;48263:7;48241:9;:30::i;:::-;48090:193;48085:3;;;;;:::i;:::-;;;;48044:239;;;;48300:41;48313:10;48325:15;48300:41;;;;;;;:::i;:::-;;;;;;;;47219:1130;:::o;28897:295::-;29012:12;:10;:12::i;:::-;29000:24;;:8;:24;;;;28992:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29112:8;29067:18;:32;29086:12;:10;:12::i;:::-;29067:32;;;;;;;;;;;;;;;:42;29100:8;29067:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;29165:8;29136:48;;29151:12;:10;:12::i;:::-;29136:48;;;29175:8;29136:48;;;;;;:::i;:::-;;;;;;;;28897:295;;:::o;45251:37::-;;;;:::o;46521:361::-;10597:12;:10;:12::i;:::-;10586:23;;:7;:5;:7::i;:::-;:23;;;10578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46608:9:::1;46603:272;46627:9;;:16;;46623:1;:20;46603:272;;;46697:1;46673:26;;:9;;46683:1;46673:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:26;;;;46665:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;46777:4;46744:16;:30;46761:9;;46771:1;46761:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;46744:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;46828:1;46798:13;:27;46812:9;;46822:1;46812:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;46798:27;;;;;;;;;;;;;;;;:31;:65;;46862:1;46798:65;;;46832:13;:27;46846:9;;46856:1;46846:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;46832:27;;;;;;;;;;;;;;;;46798:65;;46645:3;;;;;:::i;:::-;;;;46603:272;;;;46521:361:::0;;:::o;30160:328::-;30335:41;30354:12;:10;:12::i;:::-;30368:7;30335:18;:41::i;:::-;30327:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30441:39;30455:4;30461:2;30465:7;30474:5;30441:13;:39::i;:::-;30160:328;;;;:::o;45385:31::-;;;;:::o;45957:75::-;10597:12;:10;:12::i;:::-;10586:23;;:7;:5;:7::i;:::-;:23;;;10578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46019:5:::1;;;;;;;;;;;46018:6;46010:5;;:14;;;;;;;;;;;;;;;;;;45957:75::o:0;48775:306::-;48848:13;48882:16;48890:7;48882;:16::i;:::-;48874:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;48997:1;48974:12;48968:26;;;;;:::i;:::-;;;:30;:105;;;;;;;;;;;;;;;;;49025:12;49039:18;:7;:16;:18::i;:::-;49008:59;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48968:105;48961:112;;48775:306;;;:::o;45171:35::-;;;;:::o;45429:85::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29263:164::-;29360:4;29384:18;:25;29403:5;29384:25;;;;;;;;;;;;;;;:35;29410:8;29384:35;;;;;;;;;;;;;;;;;;;;;;;;;29377:42;;29263:164;;;;:::o;45843:102::-;10597:12;:10;:12::i;:::-;10586:23;;:7;:5;:7::i;:::-;:23;;;10578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45923:14:::1;;;;;;;;;;;45922:15;45905:14;;:32;;;;;;;;;;;;;;;;;;45843:102::o:0;11266:192::-;10597:12;:10;:12::i;:::-;10586:23;;:7;:5;:7::i;:::-;:23;;;10578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11375:1:::1;11355:22;;:8;:22;;;;11347:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11431:19;11441:8;11431:9;:19::i;:::-;11266:192:::0;:::o;26091:305::-;26193:4;26245:25;26230:40;;;:11;:40;;;;:105;;;;26302:33;26287:48;;;:11;:48;;;;26230:105;:158;;;;26352:36;26376:11;26352:23;:36::i;:::-;26230:158;26210:178;;26091:305;;;:::o;31998:127::-;32063:4;32115:1;32087:30;;:7;:16;32095:7;32087:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32080:37;;31998:127;;;:::o;567:98::-;620:7;647:10;640:17;;567:98;:::o;35980:174::-;36082:2;36055:15;:24;36071:7;36055:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36138:7;36134:2;36100:46;;36109:23;36124:7;36109:14;:23::i;:::-;36100:46;;;;;;;;;;;;35980:174;;:::o;32292:348::-;32385:4;32410:16;32418:7;32410;:16::i;:::-;32402:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32486:13;32502:23;32517:7;32502:14;:23::i;:::-;32486:39;;32555:5;32544:16;;:7;:16;;;:51;;;;32588:7;32564:31;;:20;32576:7;32564:11;:20::i;:::-;:31;;;32544:51;:87;;;;32599:32;32616:5;32623:7;32599:16;:32::i;:::-;32544:87;32536:96;;;32292:348;;;;:::o;35284:578::-;35443:4;35416:31;;:23;35431:7;35416:14;:23::i;:::-;:31;;;35408:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;35526:1;35512:16;;:2;:16;;;;35504:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35582:39;35603:4;35609:2;35613:7;35582:20;:39::i;:::-;35686:29;35703:1;35707:7;35686:8;:29::i;:::-;35747:1;35728:9;:15;35738:4;35728:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35776:1;35759:9;:13;35769:2;35759:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35807:2;35788:7;:16;35796:7;35788:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35846:7;35842:2;35827:27;;35836:4;35827:27;;;;;;;;;;;;35284:578;;;:::o;11466:173::-;11522:16;11541:6;;;;;;;;;;;11522:25;;11567:8;11558:6;;:17;;;;;;;;;;;;;;;;;;11622:8;11591:40;;11612:8;11591:40;;;;;;;;;;;;11511:128;11466:173;:::o;48571:192::-;48646:12;48664:8;:13;;48686:7;48664:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48645:54;;;48718:7;48710:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;48634:129;48571:192;;:::o;32982:110::-;33058:26;33068:2;33072:7;33058:26;;;;;;;;;;;;:9;:26::i;:::-;32982:110;;:::o;31370:315::-;31527:28;31537:4;31543:2;31547:7;31527:9;:28::i;:::-;31574:48;31597:4;31603:2;31607:7;31616:5;31574:22;:48::i;:::-;31566:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;31370:315;;;;:::o;13910:723::-;13966:13;14196:1;14187:5;:10;14183:53;;;14214:10;;;;;;;;;;;;;;;;;;;;;14183:53;14246:12;14261:5;14246:20;;14277:14;14302:78;14317:1;14309:4;:9;14302:78;;14335:8;;;;;:::i;:::-;;;;14366:2;14358:10;;;;;:::i;:::-;;;14302:78;;;14390:19;14422:6;14412:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14390:39;;14440:154;14456:1;14447:5;:10;14440:154;;14484:1;14474:11;;;;;:::i;:::-;;;14551:2;14543:5;:10;;;;:::i;:::-;14530:2;:24;;;;:::i;:::-;14517:39;;14500:6;14507;14500:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;14580:2;14571:11;;;;;:::i;:::-;;;14440:154;;;14618:6;14604:21;;;;;13910:723;;;;:::o;13435:157::-;13520:4;13559:25;13544:40;;;:11;:40;;;;13537:47;;13435:157;;;:::o;40829:589::-;40973:45;41000:4;41006:2;41010:7;40973:26;:45::i;:::-;41051:1;41035:18;;:4;:18;;;41031:187;;;41070:40;41102:7;41070:31;:40::i;:::-;41031:187;;;41140:2;41132:10;;:4;:10;;;41128:90;;41159:47;41192:4;41198:7;41159:32;:47::i;:::-;41128:90;41031:187;41246:1;41232:16;;:2;:16;;;41228:183;;;41265:45;41302:7;41265:36;:45::i;:::-;41228:183;;;41338:4;41332:10;;:2;:10;;;41328:83;;41359:40;41387:2;41391:7;41359:27;:40::i;:::-;41328:83;41228:183;40829:589;;;:::o;33319:321::-;33449:18;33455:2;33459:7;33449:5;:18::i;:::-;33500:54;33531:1;33535:2;33539:7;33548:5;33500:22;:54::i;:::-;33478:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;33319:321;;;:::o;36719:799::-;36874:4;36895:15;:2;:13;;;:15::i;:::-;36891:620;;;36947:2;36931:36;;;36968:12;:10;:12::i;:::-;36982:4;36988:7;36997:5;36931:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36927:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37190:1;37173:6;:13;:18;37169:272;;;37216:60;;;;;;;;;;:::i;:::-;;;;;;;;37169:272;37391:6;37385:13;37376:6;37372:2;37368:15;37361:38;36927:529;37064:41;;;37054:51;;;:6;:51;;;;37047:58;;;;;36891:620;37495:4;37488:11;;36719:799;;;;;;;:::o;38090:126::-;;;;:::o;42141:164::-;42245:10;:17;;;;42218:15;:24;42234:7;42218:24;;;;;;;;;;;:44;;;;42273:10;42289:7;42273:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42141:164;:::o;42932:988::-;43198:22;43248:1;43223:22;43240:4;43223:16;:22::i;:::-;:26;;;;:::i;:::-;43198:51;;43260:18;43281:17;:26;43299:7;43281:26;;;;;;;;;;;;43260:47;;43428:14;43414:10;:28;43410:328;;43459:19;43481:12;:18;43494:4;43481:18;;;;;;;;;;;;;;;:34;43500:14;43481:34;;;;;;;;;;;;43459:56;;43565:11;43532:12;:18;43545:4;43532:18;;;;;;;;;;;;;;;:30;43551:10;43532:30;;;;;;;;;;;:44;;;;43682:10;43649:17;:30;43667:11;43649:30;;;;;;;;;;;:43;;;;43444:294;43410:328;43834:17;:26;43852:7;43834:26;;;;;;;;;;;43827:33;;;43878:12;:18;43891:4;43878:18;;;;;;;;;;;;;;;:34;43897:14;43878:34;;;;;;;;;;;43871:41;;;43013:907;;42932:988;;:::o;43928:1079::-;44181:22;44226:1;44206:10;:17;;;;:21;;;;:::i;:::-;44181:46;;44238:18;44259:15;:24;44275:7;44259:24;;;;;;;;;;;;44238:45;;44610:19;44632:10;44643:14;44632:26;;;;;;;;:::i;:::-;;;;;;;;;;44610:48;;44696:11;44671:10;44682;44671:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;44807:10;44776:15;:28;44792:11;44776:28;;;;;;;;;;;:41;;;;44948:15;:24;44964:7;44948:24;;;;;;;;;;;44941:31;;;44983:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43999:1008;;;43928:1079;:::o;41719:221::-;41804:14;41821:20;41838:2;41821:16;:20::i;:::-;41804:37;;41879:7;41852:12;:16;41865:2;41852:16;;;;;;;;;;;;;;;:24;41869:6;41852:24;;;;;;;;;;;:34;;;;41926:6;41897:17;:26;41915:7;41897:26;;;;;;;;;;;:35;;;;41793:147;41719:221;;:::o;33976:382::-;34070:1;34056:16;;:2;:16;;;;34048:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34129:16;34137:7;34129;:16::i;:::-;34128:17;34120:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34191:45;34220:1;34224:2;34228:7;34191:20;:45::i;:::-;34266:1;34249:9;:13;34259:2;34249:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34297:2;34278:7;:16;34286:7;34278:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34342:7;34338:2;34317:33;;34334:1;34317:33;;;;;;;;;;;;33976:382;;:::o;16491:387::-;16551:4;16759:12;16826:7;16814:20;16806:28;;16869:1;16862:4;:8;16855:15;;;16491:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:139::-;2769:5;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2723:139;;;;:::o;2868:329::-;2927:6;2976:2;2964:9;2955:7;2951:23;2947:32;2944:119;;;2982:79;;:::i;:::-;2944:119;3102:1;3127:53;3172:7;3163:6;3152:9;3148:22;3127:53;:::i;:::-;3117:63;;3073:117;2868:329;;;;:::o;3203:474::-;3271:6;3279;3328:2;3316:9;3307:7;3303:23;3299:32;3296:119;;;3334:79;;:::i;:::-;3296:119;3454:1;3479:53;3524:7;3515:6;3504:9;3500:22;3479:53;:::i;:::-;3469:63;;3425:117;3581:2;3607:53;3652:7;3643:6;3632:9;3628:22;3607:53;:::i;:::-;3597:63;;3552:118;3203:474;;;;;:::o;3683:619::-;3760:6;3768;3776;3825:2;3813:9;3804:7;3800:23;3796:32;3793:119;;;3831:79;;:::i;:::-;3793:119;3951:1;3976:53;4021:7;4012:6;4001:9;3997:22;3976:53;:::i;:::-;3966:63;;3922:117;4078:2;4104:53;4149:7;4140:6;4129:9;4125:22;4104:53;:::i;:::-;4094:63;;4049:118;4206:2;4232:53;4277:7;4268:6;4257:9;4253:22;4232:53;:::i;:::-;4222:63;;4177:118;3683:619;;;;;:::o;4308:943::-;4403:6;4411;4419;4427;4476:3;4464:9;4455:7;4451:23;4447:33;4444:120;;;4483:79;;:::i;:::-;4444:120;4603:1;4628:53;4673:7;4664:6;4653:9;4649:22;4628:53;:::i;:::-;4618:63;;4574:117;4730:2;4756:53;4801:7;4792:6;4781:9;4777:22;4756:53;:::i;:::-;4746:63;;4701:118;4858:2;4884:53;4929:7;4920:6;4909:9;4905:22;4884:53;:::i;:::-;4874:63;;4829:118;5014:2;5003:9;4999:18;4986:32;5045:18;5037:6;5034:30;5031:117;;;5067:79;;:::i;:::-;5031:117;5172:62;5226:7;5217:6;5206:9;5202:22;5172:62;:::i;:::-;5162:72;;4957:287;4308:943;;;;;;;:::o;5257:468::-;5322:6;5330;5379:2;5367:9;5358:7;5354:23;5350:32;5347:119;;;5385:79;;:::i;:::-;5347:119;5505:1;5530:53;5575:7;5566:6;5555:9;5551:22;5530:53;:::i;:::-;5520:63;;5476:117;5632:2;5658:50;5700:7;5691:6;5680:9;5676:22;5658:50;:::i;:::-;5648:60;;5603:115;5257:468;;;;;:::o;5731:474::-;5799:6;5807;5856:2;5844:9;5835:7;5831:23;5827:32;5824:119;;;5862:79;;:::i;:::-;5824:119;5982:1;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5953:117;6109:2;6135:53;6180:7;6171:6;6160:9;6156:22;6135:53;:::i;:::-;6125:63;;6080:118;5731:474;;;;;:::o;6211:559::-;6297:6;6305;6354:2;6342:9;6333:7;6329:23;6325:32;6322:119;;;6360:79;;:::i;:::-;6322:119;6508:1;6497:9;6493:17;6480:31;6538:18;6530:6;6527:30;6524:117;;;6560:79;;:::i;:::-;6524:117;6673:80;6745:7;6736:6;6725:9;6721:22;6673:80;:::i;:::-;6655:98;;;;6451:312;6211:559;;;;;:::o;6776:327::-;6834:6;6883:2;6871:9;6862:7;6858:23;6854:32;6851:119;;;6889:79;;:::i;:::-;6851:119;7009:1;7034:52;7078:7;7069:6;7058:9;7054:22;7034:52;:::i;:::-;7024:62;;6980:116;6776:327;;;;:::o;7109:349::-;7178:6;7227:2;7215:9;7206:7;7202:23;7198:32;7195:119;;;7233:79;;:::i;:::-;7195:119;7353:1;7378:63;7433:7;7424:6;7413:9;7409:22;7378:63;:::i;:::-;7368:73;;7324:127;7109:349;;;;:::o;7464:509::-;7533:6;7582:2;7570:9;7561:7;7557:23;7553:32;7550:119;;;7588:79;;:::i;:::-;7550:119;7736:1;7725:9;7721:17;7708:31;7766:18;7758:6;7755:30;7752:117;;;7788:79;;:::i;:::-;7752:117;7893:63;7948:7;7939:6;7928:9;7924:22;7893:63;:::i;:::-;7883:73;;7679:287;7464:509;;;;:::o;7979:329::-;8038:6;8087:2;8075:9;8066:7;8062:23;8058:32;8055:119;;;8093:79;;:::i;:::-;8055:119;8213:1;8238:53;8283:7;8274:6;8263:9;8259:22;8238:53;:::i;:::-;8228:63;;8184:117;7979:329;;;;:::o;8314:118::-;8401:24;8419:5;8401:24;:::i;:::-;8396:3;8389:37;8314:118;;:::o;8438:109::-;8519:21;8534:5;8519:21;:::i;:::-;8514:3;8507:34;8438:109;;:::o;8553:360::-;8639:3;8667:38;8699:5;8667:38;:::i;:::-;8721:70;8784:6;8779:3;8721:70;:::i;:::-;8714:77;;8800:52;8845:6;8840:3;8833:4;8826:5;8822:16;8800:52;:::i;:::-;8877:29;8899:6;8877:29;:::i;:::-;8872:3;8868:39;8861:46;;8643:270;8553:360;;;;:::o;8919:364::-;9007:3;9035:39;9068:5;9035:39;:::i;:::-;9090:71;9154:6;9149:3;9090:71;:::i;:::-;9083:78;;9170:52;9215:6;9210:3;9203:4;9196:5;9192:16;9170:52;:::i;:::-;9247:29;9269:6;9247:29;:::i;:::-;9242:3;9238:39;9231:46;;9011:272;8919:364;;;;:::o;9289:377::-;9395:3;9423:39;9456:5;9423:39;:::i;:::-;9478:89;9560:6;9555:3;9478:89;:::i;:::-;9471:96;;9576:52;9621:6;9616:3;9609:4;9602:5;9598:16;9576:52;:::i;:::-;9653:6;9648:3;9644:16;9637:23;;9399:267;9289:377;;;;:::o;9696:845::-;9799:3;9836:5;9830:12;9865:36;9891:9;9865:36;:::i;:::-;9917:89;9999:6;9994:3;9917:89;:::i;:::-;9910:96;;10037:1;10026:9;10022:17;10053:1;10048:137;;;;10199:1;10194:341;;;;10015:520;;10048:137;10132:4;10128:9;10117;10113:25;10108:3;10101:38;10168:6;10163:3;10159:16;10152:23;;10048:137;;10194:341;10261:38;10293:5;10261:38;:::i;:::-;10321:1;10335:154;10349:6;10346:1;10343:13;10335:154;;;10423:7;10417:14;10413:1;10408:3;10404:11;10397:35;10473:1;10464:7;10460:15;10449:26;;10371:4;10368:1;10364:12;10359:17;;10335:154;;;10518:6;10513:3;10509:16;10502:23;;10201:334;;10015:520;;9803:738;;9696:845;;;;:::o;10547:366::-;10689:3;10710:67;10774:2;10769:3;10710:67;:::i;:::-;10703:74;;10786:93;10875:3;10786:93;:::i;:::-;10904:2;10899:3;10895:12;10888:19;;10547:366;;;:::o;10919:::-;11061:3;11082:67;11146:2;11141:3;11082:67;:::i;:::-;11075:74;;11158:93;11247:3;11158:93;:::i;:::-;11276:2;11271:3;11267:12;11260:19;;10919:366;;;:::o;11291:::-;11433:3;11454:67;11518:2;11513:3;11454:67;:::i;:::-;11447:74;;11530:93;11619:3;11530:93;:::i;:::-;11648:2;11643:3;11639:12;11632:19;;11291:366;;;:::o;11663:::-;11805:3;11826:67;11890:2;11885:3;11826:67;:::i;:::-;11819:74;;11902:93;11991:3;11902:93;:::i;:::-;12020:2;12015:3;12011:12;12004:19;;11663:366;;;:::o;12035:::-;12177:3;12198:67;12262:2;12257:3;12198:67;:::i;:::-;12191:74;;12274:93;12363:3;12274:93;:::i;:::-;12392:2;12387:3;12383:12;12376:19;;12035:366;;;:::o;12407:::-;12549:3;12570:67;12634:2;12629:3;12570:67;:::i;:::-;12563:74;;12646:93;12735:3;12646:93;:::i;:::-;12764:2;12759:3;12755:12;12748:19;;12407:366;;;:::o;12779:::-;12921:3;12942:67;13006:2;13001:3;12942:67;:::i;:::-;12935:74;;13018:93;13107:3;13018:93;:::i;:::-;13136:2;13131:3;13127:12;13120:19;;12779:366;;;:::o;13151:::-;13293:3;13314:67;13378:2;13373:3;13314:67;:::i;:::-;13307:74;;13390:93;13479:3;13390:93;:::i;:::-;13508:2;13503:3;13499:12;13492:19;;13151:366;;;:::o;13523:::-;13665:3;13686:67;13750:2;13745:3;13686:67;:::i;:::-;13679:74;;13762:93;13851:3;13762:93;:::i;:::-;13880:2;13875:3;13871:12;13864:19;;13523:366;;;:::o;13895:::-;14037:3;14058:67;14122:2;14117:3;14058:67;:::i;:::-;14051:74;;14134:93;14223:3;14134:93;:::i;:::-;14252:2;14247:3;14243:12;14236:19;;13895:366;;;:::o;14267:::-;14409:3;14430:67;14494:2;14489:3;14430:67;:::i;:::-;14423:74;;14506:93;14595:3;14506:93;:::i;:::-;14624:2;14619:3;14615:12;14608:19;;14267:366;;;:::o;14639:::-;14781:3;14802:67;14866:2;14861:3;14802:67;:::i;:::-;14795:74;;14878:93;14967:3;14878:93;:::i;:::-;14996:2;14991:3;14987:12;14980:19;;14639:366;;;:::o;15011:::-;15153:3;15174:67;15238:2;15233:3;15174:67;:::i;:::-;15167:74;;15250:93;15339:3;15250:93;:::i;:::-;15368:2;15363:3;15359:12;15352:19;;15011:366;;;:::o;15383:::-;15525:3;15546:67;15610:2;15605:3;15546:67;:::i;:::-;15539:74;;15622:93;15711:3;15622:93;:::i;:::-;15740:2;15735:3;15731:12;15724:19;;15383:366;;;:::o;15755:::-;15897:3;15918:67;15982:2;15977:3;15918:67;:::i;:::-;15911:74;;15994:93;16083:3;15994:93;:::i;:::-;16112:2;16107:3;16103:12;16096:19;;15755:366;;;:::o;16127:400::-;16287:3;16308:84;16390:1;16385:3;16308:84;:::i;:::-;16301:91;;16401:93;16490:3;16401:93;:::i;:::-;16519:1;16514:3;16510:11;16503:18;;16127:400;;;:::o;16533:366::-;16675:3;16696:67;16760:2;16755:3;16696:67;:::i;:::-;16689:74;;16772:93;16861:3;16772:93;:::i;:::-;16890:2;16885:3;16881:12;16874:19;;16533:366;;;:::o;16905:::-;17047:3;17068:67;17132:2;17127:3;17068:67;:::i;:::-;17061:74;;17144:93;17233:3;17144:93;:::i;:::-;17262:2;17257:3;17253:12;17246:19;;16905:366;;;:::o;17277:::-;17419:3;17440:67;17504:2;17499:3;17440:67;:::i;:::-;17433:74;;17516:93;17605:3;17516:93;:::i;:::-;17634:2;17629:3;17625:12;17618:19;;17277:366;;;:::o;17649:::-;17791:3;17812:67;17876:2;17871:3;17812:67;:::i;:::-;17805:74;;17888:93;17977:3;17888:93;:::i;:::-;18006:2;18001:3;17997:12;17990:19;;17649:366;;;:::o;18021:::-;18163:3;18184:67;18248:2;18243:3;18184:67;:::i;:::-;18177:74;;18260:93;18349:3;18260:93;:::i;:::-;18378:2;18373:3;18369:12;18362:19;;18021:366;;;:::o;18393:::-;18535:3;18556:67;18620:2;18615:3;18556:67;:::i;:::-;18549:74;;18632:93;18721:3;18632:93;:::i;:::-;18750:2;18745:3;18741:12;18734:19;;18393:366;;;:::o;18765:398::-;18924:3;18945:83;19026:1;19021:3;18945:83;:::i;:::-;18938:90;;19037:93;19126:3;19037:93;:::i;:::-;19155:1;19150:3;19146:11;19139:18;;18765:398;;;:::o;19169:366::-;19311:3;19332:67;19396:2;19391:3;19332:67;:::i;:::-;19325:74;;19408:93;19497:3;19408:93;:::i;:::-;19526:2;19521:3;19517:12;19510:19;;19169:366;;;:::o;19541:::-;19683:3;19704:67;19768:2;19763:3;19704:67;:::i;:::-;19697:74;;19780:93;19869:3;19780:93;:::i;:::-;19898:2;19893:3;19889:12;19882:19;;19541:366;;;:::o;19913:::-;20055:3;20076:67;20140:2;20135:3;20076:67;:::i;:::-;20069:74;;20152:93;20241:3;20152:93;:::i;:::-;20270:2;20265:3;20261:12;20254:19;;19913:366;;;:::o;20285:::-;20427:3;20448:67;20512:2;20507:3;20448:67;:::i;:::-;20441:74;;20524:93;20613:3;20524:93;:::i;:::-;20642:2;20637:3;20633:12;20626:19;;20285:366;;;:::o;20657:::-;20799:3;20820:67;20884:2;20879:3;20820:67;:::i;:::-;20813:74;;20896:93;20985:3;20896:93;:::i;:::-;21014:2;21009:3;21005:12;20998:19;;20657:366;;;:::o;21029:::-;21171:3;21192:67;21256:2;21251:3;21192:67;:::i;:::-;21185:74;;21268:93;21357:3;21268:93;:::i;:::-;21386:2;21381:3;21377:12;21370:19;;21029:366;;;:::o;21401:::-;21543:3;21564:67;21628:2;21623:3;21564:67;:::i;:::-;21557:74;;21640:93;21729:3;21640:93;:::i;:::-;21758:2;21753:3;21749:12;21742:19;;21401:366;;;:::o;21773:118::-;21860:24;21878:5;21860:24;:::i;:::-;21855:3;21848:37;21773:118;;:::o;21897:695::-;22175:3;22197:92;22285:3;22276:6;22197:92;:::i;:::-;22190:99;;22306:95;22397:3;22388:6;22306:95;:::i;:::-;22299:102;;22418:148;22562:3;22418:148;:::i;:::-;22411:155;;22583:3;22576:10;;21897:695;;;;;:::o;22598:379::-;22782:3;22804:147;22947:3;22804:147;:::i;:::-;22797:154;;22968:3;22961:10;;22598:379;;;:::o;22983:222::-;23076:4;23114:2;23103:9;23099:18;23091:26;;23127:71;23195:1;23184:9;23180:17;23171:6;23127:71;:::i;:::-;22983:222;;;;:::o;23211:640::-;23406:4;23444:3;23433:9;23429:19;23421:27;;23458:71;23526:1;23515:9;23511:17;23502:6;23458:71;:::i;:::-;23539:72;23607:2;23596:9;23592:18;23583:6;23539:72;:::i;:::-;23621;23689:2;23678:9;23674:18;23665:6;23621:72;:::i;:::-;23740:9;23734:4;23730:20;23725:2;23714:9;23710:18;23703:48;23768:76;23839:4;23830:6;23768:76;:::i;:::-;23760:84;;23211:640;;;;;;;:::o;23857:332::-;23978:4;24016:2;24005:9;24001:18;23993:26;;24029:71;24097:1;24086:9;24082:17;24073:6;24029:71;:::i;:::-;24110:72;24178:2;24167:9;24163:18;24154:6;24110:72;:::i;:::-;23857:332;;;;;:::o;24195:210::-;24282:4;24320:2;24309:9;24305:18;24297:26;;24333:65;24395:1;24384:9;24380:17;24371:6;24333:65;:::i;:::-;24195:210;;;;:::o;24411:313::-;24524:4;24562:2;24551:9;24547:18;24539:26;;24611:9;24605:4;24601:20;24597:1;24586:9;24582:17;24575:47;24639:78;24712:4;24703:6;24639:78;:::i;:::-;24631:86;;24411:313;;;;:::o;24730:419::-;24896:4;24934:2;24923:9;24919:18;24911:26;;24983:9;24977:4;24973:20;24969:1;24958:9;24954:17;24947:47;25011:131;25137:4;25011:131;:::i;:::-;25003:139;;24730:419;;;:::o;25155:::-;25321:4;25359:2;25348:9;25344:18;25336:26;;25408:9;25402:4;25398:20;25394:1;25383:9;25379:17;25372:47;25436:131;25562:4;25436:131;:::i;:::-;25428:139;;25155:419;;;:::o;25580:::-;25746:4;25784:2;25773:9;25769:18;25761:26;;25833:9;25827:4;25823:20;25819:1;25808:9;25804:17;25797:47;25861:131;25987:4;25861:131;:::i;:::-;25853:139;;25580:419;;;:::o;26005:::-;26171:4;26209:2;26198:9;26194:18;26186:26;;26258:9;26252:4;26248:20;26244:1;26233:9;26229:17;26222:47;26286:131;26412:4;26286:131;:::i;:::-;26278:139;;26005:419;;;:::o;26430:::-;26596:4;26634:2;26623:9;26619:18;26611:26;;26683:9;26677:4;26673:20;26669:1;26658:9;26654:17;26647:47;26711:131;26837:4;26711:131;:::i;:::-;26703:139;;26430:419;;;:::o;26855:::-;27021:4;27059:2;27048:9;27044:18;27036:26;;27108:9;27102:4;27098:20;27094:1;27083:9;27079:17;27072:47;27136:131;27262:4;27136:131;:::i;:::-;27128:139;;26855:419;;;:::o;27280:::-;27446:4;27484:2;27473:9;27469:18;27461:26;;27533:9;27527:4;27523:20;27519:1;27508:9;27504:17;27497:47;27561:131;27687:4;27561:131;:::i;:::-;27553:139;;27280:419;;;:::o;27705:::-;27871:4;27909:2;27898:9;27894:18;27886:26;;27958:9;27952:4;27948:20;27944:1;27933:9;27929:17;27922:47;27986:131;28112:4;27986:131;:::i;:::-;27978:139;;27705:419;;;:::o;28130:::-;28296:4;28334:2;28323:9;28319:18;28311:26;;28383:9;28377:4;28373:20;28369:1;28358:9;28354:17;28347:47;28411:131;28537:4;28411:131;:::i;:::-;28403:139;;28130:419;;;:::o;28555:::-;28721:4;28759:2;28748:9;28744:18;28736:26;;28808:9;28802:4;28798:20;28794:1;28783:9;28779:17;28772:47;28836:131;28962:4;28836:131;:::i;:::-;28828:139;;28555:419;;;:::o;28980:::-;29146:4;29184:2;29173:9;29169:18;29161:26;;29233:9;29227:4;29223:20;29219:1;29208:9;29204:17;29197:47;29261:131;29387:4;29261:131;:::i;:::-;29253:139;;28980:419;;;:::o;29405:::-;29571:4;29609:2;29598:9;29594:18;29586:26;;29658:9;29652:4;29648:20;29644:1;29633:9;29629:17;29622:47;29686:131;29812:4;29686:131;:::i;:::-;29678:139;;29405:419;;;:::o;29830:::-;29996:4;30034:2;30023:9;30019:18;30011:26;;30083:9;30077:4;30073:20;30069:1;30058:9;30054:17;30047:47;30111:131;30237:4;30111:131;:::i;:::-;30103:139;;29830:419;;;:::o;30255:::-;30421:4;30459:2;30448:9;30444:18;30436:26;;30508:9;30502:4;30498:20;30494:1;30483:9;30479:17;30472:47;30536:131;30662:4;30536:131;:::i;:::-;30528:139;;30255:419;;;:::o;30680:::-;30846:4;30884:2;30873:9;30869:18;30861:26;;30933:9;30927:4;30923:20;30919:1;30908:9;30904:17;30897:47;30961:131;31087:4;30961:131;:::i;:::-;30953:139;;30680:419;;;:::o;31105:::-;31271:4;31309:2;31298:9;31294:18;31286:26;;31358:9;31352:4;31348:20;31344:1;31333:9;31329:17;31322:47;31386:131;31512:4;31386:131;:::i;:::-;31378:139;;31105:419;;;:::o;31530:::-;31696:4;31734:2;31723:9;31719:18;31711:26;;31783:9;31777:4;31773:20;31769:1;31758:9;31754:17;31747:47;31811:131;31937:4;31811:131;:::i;:::-;31803:139;;31530:419;;;:::o;31955:::-;32121:4;32159:2;32148:9;32144:18;32136:26;;32208:9;32202:4;32198:20;32194:1;32183:9;32179:17;32172:47;32236:131;32362:4;32236:131;:::i;:::-;32228:139;;31955:419;;;:::o;32380:::-;32546:4;32584:2;32573:9;32569:18;32561:26;;32633:9;32627:4;32623:20;32619:1;32608:9;32604:17;32597:47;32661:131;32787:4;32661:131;:::i;:::-;32653:139;;32380:419;;;:::o;32805:::-;32971:4;33009:2;32998:9;32994:18;32986:26;;33058:9;33052:4;33048:20;33044:1;33033:9;33029:17;33022:47;33086:131;33212:4;33086:131;:::i;:::-;33078:139;;32805:419;;;:::o;33230:::-;33396:4;33434:2;33423:9;33419:18;33411:26;;33483:9;33477:4;33473:20;33469:1;33458:9;33454:17;33447:47;33511:131;33637:4;33511:131;:::i;:::-;33503:139;;33230:419;;;:::o;33655:::-;33821:4;33859:2;33848:9;33844:18;33836:26;;33908:9;33902:4;33898:20;33894:1;33883:9;33879:17;33872:47;33936:131;34062:4;33936:131;:::i;:::-;33928:139;;33655:419;;;:::o;34080:::-;34246:4;34284:2;34273:9;34269:18;34261:26;;34333:9;34327:4;34323:20;34319:1;34308:9;34304:17;34297:47;34361:131;34487:4;34361:131;:::i;:::-;34353:139;;34080:419;;;:::o;34505:::-;34671:4;34709:2;34698:9;34694:18;34686:26;;34758:9;34752:4;34748:20;34744:1;34733:9;34729:17;34722:47;34786:131;34912:4;34786:131;:::i;:::-;34778:139;;34505:419;;;:::o;34930:::-;35096:4;35134:2;35123:9;35119:18;35111:26;;35183:9;35177:4;35173:20;35169:1;35158:9;35154:17;35147:47;35211:131;35337:4;35211:131;:::i;:::-;35203:139;;34930:419;;;:::o;35355:::-;35521:4;35559:2;35548:9;35544:18;35536:26;;35608:9;35602:4;35598:20;35594:1;35583:9;35579:17;35572:47;35636:131;35762:4;35636:131;:::i;:::-;35628:139;;35355:419;;;:::o;35780:::-;35946:4;35984:2;35973:9;35969:18;35961:26;;36033:9;36027:4;36023:20;36019:1;36008:9;36004:17;35997:47;36061:131;36187:4;36061:131;:::i;:::-;36053:139;;35780:419;;;:::o;36205:::-;36371:4;36409:2;36398:9;36394:18;36386:26;;36458:9;36452:4;36448:20;36444:1;36433:9;36429:17;36422:47;36486:131;36612:4;36486:131;:::i;:::-;36478:139;;36205:419;;;:::o;36630:222::-;36723:4;36761:2;36750:9;36746:18;36738:26;;36774:71;36842:1;36831:9;36827:17;36818:6;36774:71;:::i;:::-;36630:222;;;;:::o;36858:129::-;36892:6;36919:20;;:::i;:::-;36909:30;;36948:33;36976:4;36968:6;36948:33;:::i;:::-;36858:129;;;:::o;36993:75::-;37026:6;37059:2;37053:9;37043:19;;36993:75;:::o;37074:307::-;37135:4;37225:18;37217:6;37214:30;37211:56;;;37247:18;;:::i;:::-;37211:56;37285:29;37307:6;37285:29;:::i;:::-;37277:37;;37369:4;37363;37359:15;37351:23;;37074:307;;;:::o;37387:308::-;37449:4;37539:18;37531:6;37528:30;37525:56;;;37561:18;;:::i;:::-;37525:56;37599:29;37621:6;37599:29;:::i;:::-;37591:37;;37683:4;37677;37673:15;37665:23;;37387:308;;;:::o;37701:141::-;37750:4;37773:3;37765:11;;37796:3;37793:1;37786:14;37830:4;37827:1;37817:18;37809:26;;37701:141;;;:::o;37848:98::-;37899:6;37933:5;37927:12;37917:22;;37848:98;;;:::o;37952:99::-;38004:6;38038:5;38032:12;38022:22;;37952:99;;;:::o;38057:168::-;38140:11;38174:6;38169:3;38162:19;38214:4;38209:3;38205:14;38190:29;;38057:168;;;;:::o;38231:147::-;38332:11;38369:3;38354:18;;38231:147;;;;:::o;38384:169::-;38468:11;38502:6;38497:3;38490:19;38542:4;38537:3;38533:14;38518:29;;38384:169;;;;:::o;38559:148::-;38661:11;38698:3;38683:18;;38559:148;;;;:::o;38713:305::-;38753:3;38772:20;38790:1;38772:20;:::i;:::-;38767:25;;38806:20;38824:1;38806:20;:::i;:::-;38801:25;;38960:1;38892:66;38888:74;38885:1;38882:81;38879:107;;;38966:18;;:::i;:::-;38879:107;39010:1;39007;39003:9;38996:16;;38713:305;;;;:::o;39024:185::-;39064:1;39081:20;39099:1;39081:20;:::i;:::-;39076:25;;39115:20;39133:1;39115:20;:::i;:::-;39110:25;;39154:1;39144:35;;39159:18;;:::i;:::-;39144:35;39201:1;39198;39194:9;39189:14;;39024:185;;;;:::o;39215:348::-;39255:7;39278:20;39296:1;39278:20;:::i;:::-;39273:25;;39312:20;39330:1;39312:20;:::i;:::-;39307:25;;39500:1;39432:66;39428:74;39425:1;39422:81;39417:1;39410:9;39403:17;39399:105;39396:131;;;39507:18;;:::i;:::-;39396:131;39555:1;39552;39548:9;39537:20;;39215:348;;;;:::o;39569:191::-;39609:4;39629:20;39647:1;39629:20;:::i;:::-;39624:25;;39663:20;39681:1;39663:20;:::i;:::-;39658:25;;39702:1;39699;39696:8;39693:34;;;39707:18;;:::i;:::-;39693:34;39752:1;39749;39745:9;39737:17;;39569:191;;;;:::o;39766:96::-;39803:7;39832:24;39850:5;39832:24;:::i;:::-;39821:35;;39766:96;;;:::o;39868:90::-;39902:7;39945:5;39938:13;39931:21;39920:32;;39868:90;;;:::o;39964:149::-;40000:7;40040:66;40033:5;40029:78;40018:89;;39964:149;;;:::o;40119:126::-;40156:7;40196:42;40189:5;40185:54;40174:65;;40119:126;;;:::o;40251:77::-;40288:7;40317:5;40306:16;;40251:77;;;:::o;40334:154::-;40418:6;40413:3;40408;40395:30;40480:1;40471:6;40466:3;40462:16;40455:27;40334:154;;;:::o;40494:307::-;40562:1;40572:113;40586:6;40583:1;40580:13;40572:113;;;40671:1;40666:3;40662:11;40656:18;40652:1;40647:3;40643:11;40636:39;40608:2;40605:1;40601:10;40596:15;;40572:113;;;40703:6;40700:1;40697:13;40694:101;;;40783:1;40774:6;40769:3;40765:16;40758:27;40694:101;40543:258;40494:307;;;:::o;40807:320::-;40851:6;40888:1;40882:4;40878:12;40868:22;;40935:1;40929:4;40925:12;40956:18;40946:81;;41012:4;41004:6;41000:17;40990:27;;40946:81;41074:2;41066:6;41063:14;41043:18;41040:38;41037:84;;;41093:18;;:::i;:::-;41037:84;40858:269;40807:320;;;:::o;41133:281::-;41216:27;41238:4;41216:27;:::i;:::-;41208:6;41204:40;41346:6;41334:10;41331:22;41310:18;41298:10;41295:34;41292:62;41289:88;;;41357:18;;:::i;:::-;41289:88;41397:10;41393:2;41386:22;41176:238;41133:281;;:::o;41420:233::-;41459:3;41482:24;41500:5;41482:24;:::i;:::-;41473:33;;41528:66;41521:5;41518:77;41515:103;;;41598:18;;:::i;:::-;41515:103;41645:1;41638:5;41634:13;41627:20;;41420:233;;;:::o;41659:176::-;41691:1;41708:20;41726:1;41708:20;:::i;:::-;41703:25;;41742:20;41760:1;41742:20;:::i;:::-;41737:25;;41781:1;41771:35;;41786:18;;:::i;:::-;41771:35;41827:1;41824;41820:9;41815:14;;41659:176;;;;:::o;41841:180::-;41889:77;41886:1;41879:88;41986:4;41983:1;41976:15;42010:4;42007:1;42000:15;42027:180;42075:77;42072:1;42065:88;42172:4;42169:1;42162:15;42196:4;42193:1;42186:15;42213:180;42261:77;42258:1;42251:88;42358:4;42355:1;42348:15;42382:4;42379:1;42372:15;42399:180;42447:77;42444:1;42437:88;42544:4;42541:1;42534:15;42568:4;42565:1;42558:15;42585:180;42633:77;42630:1;42623:88;42730:4;42727:1;42720:15;42754:4;42751:1;42744:15;42771:180;42819:77;42816:1;42809:88;42916:4;42913:1;42906:15;42940:4;42937:1;42930:15;42957:117;43066:1;43063;43056:12;43080:117;43189:1;43186;43179:12;43203:117;43312:1;43309;43302:12;43326:117;43435:1;43432;43425:12;43449:117;43558:1;43555;43548:12;43572:117;43681:1;43678;43671:12;43695:102;43736:6;43787:2;43783:7;43778:2;43771:5;43767:14;43763:28;43753:38;;43695:102;;;:::o;43803:182::-;43943:34;43939:1;43931:6;43927:14;43920:58;43803:182;:::o;43991:230::-;44131:34;44127:1;44119:6;44115:14;44108:58;44200:13;44195:2;44187:6;44183:15;44176:38;43991:230;:::o;44227:237::-;44367:34;44363:1;44355:6;44351:14;44344:58;44436:20;44431:2;44423:6;44419:15;44412:45;44227:237;:::o;44470:225::-;44610:34;44606:1;44598:6;44594:14;44587:58;44679:8;44674:2;44666:6;44662:15;44655:33;44470:225;:::o;44701:178::-;44841:30;44837:1;44829:6;44825:14;44818:54;44701:178;:::o;44885:::-;45025:30;45021:1;45013:6;45009:14;45002:54;44885:178;:::o;45069:223::-;45209:34;45205:1;45197:6;45193:14;45186:58;45278:6;45273:2;45265:6;45261:15;45254:31;45069:223;:::o;45298:175::-;45438:27;45434:1;45426:6;45422:14;45415:51;45298:175;:::o;45479:231::-;45619:34;45615:1;45607:6;45603:14;45596:58;45688:14;45683:2;45675:6;45671:15;45664:39;45479:231;:::o;45716:182::-;45856:34;45852:1;45844:6;45840:14;45833:58;45716:182;:::o;45904:243::-;46044:34;46040:1;46032:6;46028:14;46021:58;46113:26;46108:2;46100:6;46096:15;46089:51;45904:243;:::o;46153:229::-;46293:34;46289:1;46281:6;46277:14;46270:58;46362:12;46357:2;46349:6;46345:15;46338:37;46153:229;:::o;46388:228::-;46528:34;46524:1;46516:6;46512:14;46505:58;46597:11;46592:2;46584:6;46580:15;46573:36;46388:228;:::o;46622:182::-;46762:34;46758:1;46750:6;46746:14;46739:58;46622:182;:::o;46810:231::-;46950:34;46946:1;46938:6;46934:14;46927:58;47019:14;47014:2;47006:6;47002:15;46995:39;46810:231;:::o;47047:155::-;47187:7;47183:1;47175:6;47171:14;47164:31;47047:155;:::o;47208:169::-;47348:21;47344:1;47336:6;47332:14;47325:45;47208:169;:::o;47383:182::-;47523:34;47519:1;47511:6;47507:14;47500:58;47383:182;:::o;47571:228::-;47711:34;47707:1;47699:6;47695:14;47688:58;47780:11;47775:2;47767:6;47763:15;47756:36;47571:228;:::o;47805:234::-;47945:34;47941:1;47933:6;47929:14;47922:58;48014:17;48009:2;48001:6;47997:15;47990:42;47805:234;:::o;48045:175::-;48185:27;48181:1;48173:6;48169:14;48162:51;48045:175;:::o;48226:220::-;48366:34;48362:1;48354:6;48350:14;48343:58;48435:3;48430:2;48422:6;48418:15;48411:28;48226:220;:::o;48452:114::-;;:::o;48572:173::-;48712:25;48708:1;48700:6;48696:14;48689:49;48572:173;:::o;48751:236::-;48891:34;48887:1;48879:6;48875:14;48868:58;48960:19;48955:2;48947:6;48943:15;48936:44;48751:236;:::o;48993:227::-;49133:34;49129:1;49121:6;49117:14;49110:58;49202:10;49197:2;49189:6;49185:15;49178:35;48993:227;:::o;49226:231::-;49366:34;49362:1;49354:6;49350:14;49343:58;49435:14;49430:2;49422:6;49418:15;49411:39;49226:231;:::o;49463:224::-;49603:34;49599:1;49591:6;49587:14;49580:58;49672:7;49667:2;49659:6;49655:15;49648:32;49463:224;:::o;49693:174::-;49833:26;49829:1;49821:6;49817:14;49810:50;49693:174;:::o;49873:230::-;50013:34;50009:1;50001:6;49997:14;49990:58;50082:13;50077:2;50069:6;50065:15;50058:38;49873:230;:::o;50109:122::-;50182:24;50200:5;50182:24;:::i;:::-;50175:5;50172:35;50162:63;;50221:1;50218;50211:12;50162:63;50109:122;:::o;50237:116::-;50307:21;50322:5;50307:21;:::i;:::-;50300:5;50297:32;50287:60;;50343:1;50340;50333:12;50287:60;50237:116;:::o;50359:120::-;50431:23;50448:5;50431:23;:::i;:::-;50424:5;50421:34;50411:62;;50469:1;50466;50459:12;50411:62;50359:120;:::o;50485:122::-;50558:24;50576:5;50558:24;:::i;:::-;50551:5;50548:35;50538:63;;50597:1;50594;50587:12;50538:63;50485:122;:::o
Swarm Source
ipfs://03c2839ddcc41a5caf28b70ff36d5ed63871b943a0450e9f83c75ecdd0d0fdb9
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.