Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
1,000 SIMP
Holders
103
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
10 SIMPLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
DefiSimps
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-16 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } 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); } } abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } 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); } 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; } interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } 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); } 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); } 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); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private 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); } } } } abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 private currentIndex = 0; uint256 internal immutable collectionSize; uint256 internal immutable maxBatchSize; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) private _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // 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 * `maxBatchSize` refers to how much a minter can mint at a time. * `collectionSize_` refers to how many tokens are in the collection. */ constructor( string memory name_, string memory symbol_, uint256 maxBatchSize_, uint256 collectionSize_ ) { require( collectionSize_ > 0, "ERC721A: collection must have a nonzero supply" ); require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero"); _name = name_; _symbol = symbol_; maxBatchSize = maxBatchSize_; collectionSize = collectionSize_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), "ERC721A: global index out of bounds"); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(collectionSize). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), "ERC721A: owner index out of bounds"); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx = 0; address currOwnershipAddr = address(0); for (uint256 i = 0; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } revert("ERC721A: unable to get token of owner by index"); } /** * @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 || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require(owner != address(0), "ERC721A: balance query for the zero address"); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require( owner != address(0), "ERC721A: number minted query for the zero address" ); return uint256(_addressData[owner].numberMinted); } function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), "ERC721A: owner query for nonexistent token"); uint256 lowestTokenToCheck; if (tokenId >= maxBatchSize) { lowestTokenToCheck = tokenId - maxBatchSize + 1; } for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } revert("ERC721A: unable to determine the owner of token"); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @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 override { address owner = ERC721A.ownerOf(tokenId); require(to != owner, "ERC721A: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721A: approve caller is not owner nor approved for all" ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), "ERC721A: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), "ERC721A: 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 override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721A: 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`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ""); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - there must be `quantity` tokens remaining unminted in the total collection. * - `to` cannot be the zero address. * - `quantity` cannot be larger than the max batch size. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = currentIndex; require(to != address(0), "ERC721A: mint to the zero address"); // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering. require(!_exists(startTokenId), "ERC721A: token already minted"); require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high"); _beforeTokenTransfers(address(0), to, startTokenId, quantity); AddressData memory addressData = _addressData[to]; _addressData[to] = AddressData( addressData.balance + uint128(quantity), addressData.numberMinted + uint128(quantity) ); _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp)); uint256 updatedIndex = startTokenId; for (uint256 i = 0; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); require( _checkOnERC721Received(address(0), to, updatedIndex, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); updatedIndex++; } currentIndex = updatedIndex; _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * 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 ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require( isApprovedOrOwner, "ERC721A: transfer caller is not owner nor approved" ); require( prevOwnership.addr == from, "ERC721A: transfer from incorrect owner" ); require(to != address(0), "ERC721A: transfer to the zero address"); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp)); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId] = TokenOwnership( prevOwnership.addr, prevOwnership.startTimestamp ); } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } uint256 public nextOwnerToExplicitlySet = 0; /** * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf(). */ function _setOwnersExplicit(uint256 quantity) internal { uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet; require(quantity > 0, "quantity must be nonzero"); uint256 endIndex = oldNextOwnerToSet + quantity - 1; if (endIndex > collectionSize - 1) { endIndex = collectionSize - 1; } // We know if the last one in the group exists, all in the group exist, due to serial ordering. require(_exists(endIndex), "not enough minted yet for this cleanup"); for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) { if (_ownerships[i].addr == address(0)) { TokenOwnership memory ownership = ownershipOf(i); _ownerships[i] = TokenOwnership( ownership.addr, ownership.startTimestamp ); } } nextOwnerToExplicitlySet = endIndex + 1; } /** * @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(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721A: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * 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`. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } 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); } } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } contract DefiSimps is Ownable, ERC721A, ReentrancyGuard { uint256 public immutable maxPerAddressDuringMint; uint256 private requiredamount = 6942000 * 10**18; address private requiredtokenaddress = 0xA40333688D0F5394A4cF0839199eB04BC7314081; IERC20 private requiredtoken; constructor() ERC721A("Defi Simps", "SIMP", 10, 1000) { maxPerAddressDuringMint = 10; requiredtoken = IERC20(requiredtokenaddress); } modifier callerIsUser() { require(tx.origin == msg.sender, "The caller is another contract"); _; } function mint(uint256 quantity) external payable callerIsUser { require(requiredtoken.balanceOf(msg.sender) >= requiredamount, "not enough uDicc"); require(totalSupply() + quantity <= collectionSize, "reached max supply"); require( numberMinted(msg.sender) + quantity <= maxPerAddressDuringMint, "can not mint this many" ); _safeMint(msg.sender, quantity); } // // metadata URI string private _baseTokenURI = "ipfs://QmTiZjqAQrnCB9dB4cakuxzyv6vdcrVQJyQNbu4wNThXnr/"; function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function setBaseURI(string calldata baseURI) external onlyOwner { _baseTokenURI = baseURI; } function setRequiredAmount(uint256 amount) external onlyOwner { requiredamount = amount; } function withdrawMoney() external onlyOwner nonReentrant { (bool success, ) = msg.sender.call{value: address(this).balance}(""); require(success, "Transfer failed."); } function setOwnersExplicit(uint256 quantity) external onlyOwner nonReentrant { _setOwnersExplicit(quantity); } function numberMinted(address owner) public view returns (uint256) { return _numberMinted(owner); } function getOwnershipData(uint256 tokenId) external view returns (TokenOwnership memory) { return ownershipOf(tokenId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerAddressDuringMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"setOwnersExplicit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setRequiredAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"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":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60e0604052600060015560006008556a05be0692f63baaf6c00000600a5573a40333688d0f5394a4cf0839199eb04bc7314081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060600160405280603681526020016200513860369139600d9080519060200190620000a39291906200035b565b50348015620000b157600080fd5b506040518060400160405280600a81526020017f446566692053696d7073000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f53494d5000000000000000000000000000000000000000000000000000000000815250600a6103e862000143620001376200028f60201b60201c565b6200029760201b60201c565b6000811162000189576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000180906200047b565b60405180910390fd5b60008211620001cf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001c69062000459565b60405180910390fd5b8360029080519060200190620001e79291906200035b565b508260039080519060200190620002009291906200035b565b508160a081815250508060808181525050505050506001600981905550600a60c08181525050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005b1565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200036990620004ae565b90600052602060002090601f0160209004810192826200038d5760008555620003d9565b82601f10620003a857805160ff1916838001178555620003d9565b82800160010185558215620003d9579182015b82811115620003d8578251825591602001919060010190620003bb565b5b509050620003e89190620003ec565b5090565b5b8082111562000407576000816000905550600101620003ed565b5090565b60006200041a6027836200049d565b9150620004278262000513565b604082019050919050565b600062000441602e836200049d565b91506200044e8262000562565b604082019050919050565b6000602082019050818103600083015262000474816200040b565b9050919050565b60006020820190508181036000830152620004968162000432565b9050919050565b600082825260208201905092915050565b60006002820490506001821680620004c757607f821691505b60208210811415620004de57620004dd620004e4565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b60805160a05160c051614b346200060460003960008181610fd901526112a201526000818161231f015281816123480152612af101526000818161122d015281816120a701526120db0152614b346000f3fe6080604052600436106101b75760003560e01c80638bc35c2f116100ec578063b88d4fde1161008a578063dc33e68111610064578063dc33e6811461060f578063e80beaa11461064c578063e985e9c514610675578063f2fde38b146106b2576101b7565b8063b88d4fde1461057e578063c87b56dd146105a7578063d7224ba0146105e4576101b7565b806395d89b41116100c657806395d89b41146104f7578063a0712d6814610522578063a22cb4651461053e578063ac44600214610567576101b7565b80638bc35c2f146104645780638da5cb5b1461048f5780639231ab2a146104ba576101b7565b80632f745c591161015957806355f804b31161013357806355f804b3146103aa5780636352211e146103d357806370a0823114610410578063715018a61461044d576101b7565b80632f745c591461030757806342842e0e146103445780634f6ccce71461036d576101b7565b8063095ea7b311610195578063095ea7b31461026157806318160ddd1461028a57806323b872dd146102b55780632d20fb60146102de576101b7565b806301ffc9a7146101bc57806306fdde03146101f9578063081812fc14610224575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de9190613306565b6106db565b6040516101f09190613a0c565b60405180910390f35b34801561020557600080fd5b5061020e610825565b60405161021b9190613a27565b60405180910390f35b34801561023057600080fd5b5061024b600480360381019061024691906133ad565b6108b7565b60405161025891906139a5565b60405180910390f35b34801561026d57600080fd5b50610288600480360381019061028391906132c6565b61093c565b005b34801561029657600080fd5b5061029f610a55565b6040516102ac9190613e04565b60405180910390f35b3480156102c157600080fd5b506102dc60048036038101906102d791906131b0565b610a5f565b005b3480156102ea57600080fd5b50610305600480360381019061030091906133ad565b610a6f565b005b34801561031357600080fd5b5061032e600480360381019061032991906132c6565b610b4d565b60405161033b9190613e04565b60405180910390f35b34801561035057600080fd5b5061036b600480360381019061036691906131b0565b610d4b565b005b34801561037957600080fd5b50610394600480360381019061038f91906133ad565b610d6b565b6040516103a19190613e04565b60405180910390f35b3480156103b657600080fd5b506103d160048036038101906103cc9190613360565b610dbe565b005b3480156103df57600080fd5b506103fa60048036038101906103f591906133ad565b610e50565b60405161040791906139a5565b60405180910390f35b34801561041c57600080fd5b5061043760048036038101906104329190613143565b610e66565b6040516104449190613e04565b60405180910390f35b34801561045957600080fd5b50610462610f4f565b005b34801561047057600080fd5b50610479610fd7565b6040516104869190613e04565b60405180910390f35b34801561049b57600080fd5b506104a4610ffb565b6040516104b191906139a5565b60405180910390f35b3480156104c657600080fd5b506104e160048036038101906104dc91906133ad565b611024565b6040516104ee9190613de9565b60405180910390f35b34801561050357600080fd5b5061050c61103c565b6040516105199190613a27565b60405180910390f35b61053c600480360381019061053791906133ad565b6110ce565b005b34801561054a57600080fd5b5061056560048036038101906105609190613286565b611323565b005b34801561057357600080fd5b5061057c6114a4565b005b34801561058a57600080fd5b506105a560048036038101906105a09190613203565b611625565b005b3480156105b357600080fd5b506105ce60048036038101906105c991906133ad565b611681565b6040516105db9190613a27565b60405180910390f35b3480156105f057600080fd5b506105f9611728565b6040516106069190613e04565b60405180910390f35b34801561061b57600080fd5b5061063660048036038101906106319190613143565b61172e565b6040516106439190613e04565b60405180910390f35b34801561065857600080fd5b50610673600480360381019061066e91906133ad565b611740565b005b34801561068157600080fd5b5061069c60048036038101906106979190613170565b6117c6565b6040516106a99190613a0c565b60405180910390f35b3480156106be57600080fd5b506106d960048036038101906106d49190613143565b61185a565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107a657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061080e57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061081e575061081d82611952565b5b9050919050565b60606002805461083490614108565b80601f016020809104026020016040519081016040528092919081815260200182805461086090614108565b80156108ad5780601f10610882576101008083540402835291602001916108ad565b820191906000526020600020905b81548152906001019060200180831161089057829003601f168201915b5050505050905090565b60006108c2826119bc565b610901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f890613da9565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061094782610e50565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109af90613c69565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109d76119ca565b73ffffffffffffffffffffffffffffffffffffffff161480610a065750610a0581610a006119ca565b6117c6565b5b610a45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3c90613b49565b60405180910390fd5b610a508383836119d2565b505050565b6000600154905090565b610a6a838383611a84565b505050565b610a776119ca565b73ffffffffffffffffffffffffffffffffffffffff16610a95610ffb565b73ffffffffffffffffffffffffffffffffffffffff1614610aeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae290613be9565b60405180910390fd5b60026009541415610b31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2890613d69565b60405180910390fd5b6002600981905550610b428161203d565b600160098190555050565b6000610b5883610e66565b8210610b99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9090613a49565b60405180910390fd5b6000610ba3610a55565b905060008060005b83811015610d09576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610c9d57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cf55786841415610ce6578195505050505050610d45565b8380610cf19061416b565b9450505b508080610d019061416b565b915050610bab565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3c90613d29565b60405180910390fd5b92915050565b610d6683838360405180602001604052806000815250611625565b505050565b6000610d75610a55565b8210610db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dad90613ac9565b60405180910390fd5b819050919050565b610dc66119ca565b73ffffffffffffffffffffffffffffffffffffffff16610de4610ffb565b73ffffffffffffffffffffffffffffffffffffffff1614610e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3190613be9565b60405180910390fd5b8181600d9190610e4b929190612f22565b505050565b6000610e5b826122cb565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ece90613b89565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b610f576119ca565b73ffffffffffffffffffffffffffffffffffffffff16610f75610ffb565b73ffffffffffffffffffffffffffffffffffffffff1614610fcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc290613be9565b60405180910390fd5b610fd560006124ce565b565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61102c612fa8565b611035826122cb565b9050919050565b60606003805461104b90614108565b80601f016020809104026020016040519081016040528092919081815260200182805461107790614108565b80156110c45780601f10611099576101008083540402835291602001916110c4565b820191906000526020600020905b8154815290600101906020018083116110a757829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461113c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113390613b29565b60405180910390fd5b600a54600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161119a91906139a5565b60206040518083038186803b1580156111b257600080fd5b505afa1580156111c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ea91906133da565b101561122b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122290613aa9565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081611255610a55565b61125f9190613f09565b11156112a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129790613ba9565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000816112cb3361172e565b6112d59190613f09565b1115611316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130d90613d09565b60405180910390fd5b6113203382612592565b50565b61132b6119ca565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611399576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139090613c29565b60405180910390fd5b80600760006113a66119ca565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166114536119ca565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114989190613a0c565b60405180910390a35050565b6114ac6119ca565b73ffffffffffffffffffffffffffffffffffffffff166114ca610ffb565b73ffffffffffffffffffffffffffffffffffffffff1614611520576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151790613be9565b60405180910390fd5b60026009541415611566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155d90613d69565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff164760405161159490613990565b60006040518083038185875af1925050503d80600081146115d1576040519150601f19603f3d011682016040523d82523d6000602084013e6115d6565b606091505b505090508061161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161190613c89565b60405180910390fd5b506001600981905550565b611630848484611a84565b61163c848484846125b0565b61167b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167290613ca9565b60405180910390fd5b50505050565b606061168c826119bc565b6116cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c290613c09565b60405180910390fd5b60006116d5612747565b905060008151116116f55760405180602001604052806000815250611720565b806116ff846127d9565b604051602001611710929190613961565b6040516020818303038152906040525b915050919050565b60085481565b60006117398261293a565b9050919050565b6117486119ca565b73ffffffffffffffffffffffffffffffffffffffff16611766610ffb565b73ffffffffffffffffffffffffffffffffffffffff16146117bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b390613be9565b60405180910390fd5b80600a8190555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6118626119ca565b73ffffffffffffffffffffffffffffffffffffffff16611880610ffb565b73ffffffffffffffffffffffffffffffffffffffff16146118d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cd90613be9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611946576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193d90613a69565b60405180910390fd5b61194f816124ce565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611a8f826122cb565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611ab66119ca565b73ffffffffffffffffffffffffffffffffffffffff161480611b125750611adb6119ca565b73ffffffffffffffffffffffffffffffffffffffff16611afa846108b7565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b2e5750611b2d8260000151611b286119ca565b6117c6565b5b905080611b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6790613c49565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd990613bc9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4990613ae9565b60405180910390fd5b611c5f8585856001612a23565b611c6f60008484600001516119d2565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611cdd9190613f90565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611d819190613ec3565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184611e879190613f09565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611fcd57611efd816119bc565b15611fcc576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46120358686866001612a29565b505050505050565b6000600854905060008211612087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207e90613b69565b60405180910390fd5b6000600183836120979190613f09565b6120a19190613fc4565b905060017f00000000000000000000000000000000000000000000000000000000000000006120d09190613fc4565b8111156121075760017f00000000000000000000000000000000000000000000000000000000000000006121049190613fc4565b90505b612110816119bc565b61214f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214690613d49565b60405180910390fd5b60008290505b8181116122b257600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561229f5760006121d2826122cb565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b80806122aa9061416b565b915050612155565b506001816122c09190613f09565b600881905550505050565b6122d3612fa8565b6122dc826119bc565b61231b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231290613a89565b60405180910390fd5b60007f0000000000000000000000000000000000000000000000000000000000000000831061237f5760017f0000000000000000000000000000000000000000000000000000000000000000846123729190613fc4565b61237c9190613f09565b90505b60008390505b81811061248d576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612479578093505050506124c9565b508080612485906140de565b915050612385565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c090613d89565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6125ac828260405180602001604052806000815250612a2f565b5050565b60006125d18473ffffffffffffffffffffffffffffffffffffffff16612f0f565b1561273a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026125fa6119ca565b8786866040518563ffffffff1660e01b815260040161261c94939291906139c0565b602060405180830381600087803b15801561263657600080fd5b505af192505050801561266757506040513d601f19601f820116820180604052508101906126649190613333565b60015b6126ea573d8060008114612697576040519150601f19603f3d011682016040523d82523d6000602084013e61269c565b606091505b506000815114156126e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d990613ca9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061273f565b600190505b949350505050565b6060600d805461275690614108565b80601f016020809104026020016040519081016040528092919081815260200182805461278290614108565b80156127cf5780601f106127a4576101008083540402835291602001916127cf565b820191906000526020600020905b8154815290600101906020018083116127b257829003601f168201915b5050505050905090565b60606000821415612821576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612935565b600082905060005b6000821461285357808061283c9061416b565b915050600a8261284c9190613f5f565b9150612829565b60008167ffffffffffffffff81111561286f5761286e6142a1565b5b6040519080825280601f01601f1916602001820160405280156128a15781602001600182028036833780820191505090505b5090505b6000851461292e576001826128ba9190613fc4565b9150600a856128c991906141b4565b60306128d59190613f09565b60f81b8183815181106128eb576128ea614272565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856129279190613f5f565b94506128a5565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a290613b09565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9d90613ce9565b60405180910390fd5b612aaf816119bc565b15612aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae690613cc9565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000831115612b52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4990613dc9565b60405180910390fd5b612b5f6000858386612a23565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151612c5c9190613ec3565b6fffffffffffffffffffffffffffffffff168152602001858360200151612c839190613ec3565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015612ef257818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612e9260008884886125b0565b612ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec890613ca9565b60405180910390fd5b8180612edc9061416b565b9250508080612eea9061416b565b915050612e21565b5080600181905550612f076000878588612a29565b505050505050565b600080823b905060008111915050919050565b828054612f2e90614108565b90600052602060002090601f016020900481019282612f505760008555612f97565b82601f10612f6957803560ff1916838001178555612f97565b82800160010185558215612f97579182015b82811115612f96578235825591602001919060010190612f7b565b5b509050612fa49190612fe2565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612ffb576000816000905550600101612fe3565b5090565b600061301261300d84613e44565b613e1f565b90508281526020810184848401111561302e5761302d6142df565b5b61303984828561409c565b509392505050565b60008135905061305081614aa2565b92915050565b60008135905061306581614ab9565b92915050565b60008135905061307a81614ad0565b92915050565b60008151905061308f81614ad0565b92915050565b600082601f8301126130aa576130a96142d5565b5b81356130ba848260208601612fff565b91505092915050565b60008083601f8401126130d9576130d86142d5565b5b8235905067ffffffffffffffff8111156130f6576130f56142d0565b5b602083019150836001820283011115613112576131116142da565b5b9250929050565b60008135905061312881614ae7565b92915050565b60008151905061313d81614ae7565b92915050565b600060208284031215613159576131586142e9565b5b600061316784828501613041565b91505092915050565b60008060408385031215613187576131866142e9565b5b600061319585828601613041565b92505060206131a685828601613041565b9150509250929050565b6000806000606084860312156131c9576131c86142e9565b5b60006131d786828701613041565b93505060206131e886828701613041565b92505060406131f986828701613119565b9150509250925092565b6000806000806080858703121561321d5761321c6142e9565b5b600061322b87828801613041565b945050602061323c87828801613041565b935050604061324d87828801613119565b925050606085013567ffffffffffffffff81111561326e5761326d6142e4565b5b61327a87828801613095565b91505092959194509250565b6000806040838503121561329d5761329c6142e9565b5b60006132ab85828601613041565b92505060206132bc85828601613056565b9150509250929050565b600080604083850312156132dd576132dc6142e9565b5b60006132eb85828601613041565b92505060206132fc85828601613119565b9150509250929050565b60006020828403121561331c5761331b6142e9565b5b600061332a8482850161306b565b91505092915050565b600060208284031215613349576133486142e9565b5b600061335784828501613080565b91505092915050565b60008060208385031215613377576133766142e9565b5b600083013567ffffffffffffffff811115613395576133946142e4565b5b6133a1858286016130c3565b92509250509250929050565b6000602082840312156133c3576133c26142e9565b5b60006133d184828501613119565b91505092915050565b6000602082840312156133f0576133ef6142e9565b5b60006133fe8482850161312e565b91505092915050565b61341081613ff8565b82525050565b61341f81613ff8565b82525050565b61342e8161400a565b82525050565b600061343f82613e75565b6134498185613e8b565b93506134598185602086016140ab565b613462816142ee565b840191505092915050565b600061347882613e80565b6134828185613ea7565b93506134928185602086016140ab565b61349b816142ee565b840191505092915050565b60006134b182613e80565b6134bb8185613eb8565b93506134cb8185602086016140ab565b80840191505092915050565b60006134e4602283613ea7565b91506134ef826142ff565b604082019050919050565b6000613507602683613ea7565b91506135128261434e565b604082019050919050565b600061352a602a83613ea7565b91506135358261439d565b604082019050919050565b600061354d601083613ea7565b9150613558826143ec565b602082019050919050565b6000613570602383613ea7565b915061357b82614415565b604082019050919050565b6000613593602583613ea7565b915061359e82614464565b604082019050919050565b60006135b6603183613ea7565b91506135c1826144b3565b604082019050919050565b60006135d9601e83613ea7565b91506135e482614502565b602082019050919050565b60006135fc603983613ea7565b91506136078261452b565b604082019050919050565b600061361f601883613ea7565b915061362a8261457a565b602082019050919050565b6000613642602b83613ea7565b915061364d826145a3565b604082019050919050565b6000613665601283613ea7565b9150613670826145f2565b602082019050919050565b6000613688602683613ea7565b91506136938261461b565b604082019050919050565b60006136ab600583613eb8565b91506136b68261466a565b600582019050919050565b60006136ce602083613ea7565b91506136d982614693565b602082019050919050565b60006136f1602f83613ea7565b91506136fc826146bc565b604082019050919050565b6000613714601a83613ea7565b915061371f8261470b565b602082019050919050565b6000613737603283613ea7565b915061374282614734565b604082019050919050565b600061375a602283613ea7565b915061376582614783565b604082019050919050565b600061377d600083613e9c565b9150613788826147d2565b600082019050919050565b60006137a0601083613ea7565b91506137ab826147d5565b602082019050919050565b60006137c3603383613ea7565b91506137ce826147fe565b604082019050919050565b60006137e6601d83613ea7565b91506137f18261484d565b602082019050919050565b6000613809602183613ea7565b915061381482614876565b604082019050919050565b600061382c601683613ea7565b9150613837826148c5565b602082019050919050565b600061384f602e83613ea7565b915061385a826148ee565b604082019050919050565b6000613872602683613ea7565b915061387d8261493d565b604082019050919050565b6000613895601f83613ea7565b91506138a08261498c565b602082019050919050565b60006138b8602f83613ea7565b91506138c3826149b5565b604082019050919050565b60006138db602d83613ea7565b91506138e682614a04565b604082019050919050565b60006138fe602283613ea7565b915061390982614a53565b604082019050919050565b60408201600082015161392a6000850182613407565b50602082015161393d6020850182613952565b50505050565b61394c8161407e565b82525050565b61395b81614088565b82525050565b600061396d82856134a6565b915061397982846134a6565b91506139848261369e565b91508190509392505050565b600061399b82613770565b9150819050919050565b60006020820190506139ba6000830184613416565b92915050565b60006080820190506139d56000830187613416565b6139e26020830186613416565b6139ef6040830185613943565b8181036060830152613a018184613434565b905095945050505050565b6000602082019050613a216000830184613425565b92915050565b60006020820190508181036000830152613a41818461346d565b905092915050565b60006020820190508181036000830152613a62816134d7565b9050919050565b60006020820190508181036000830152613a82816134fa565b9050919050565b60006020820190508181036000830152613aa28161351d565b9050919050565b60006020820190508181036000830152613ac281613540565b9050919050565b60006020820190508181036000830152613ae281613563565b9050919050565b60006020820190508181036000830152613b0281613586565b9050919050565b60006020820190508181036000830152613b22816135a9565b9050919050565b60006020820190508181036000830152613b42816135cc565b9050919050565b60006020820190508181036000830152613b62816135ef565b9050919050565b60006020820190508181036000830152613b8281613612565b9050919050565b60006020820190508181036000830152613ba281613635565b9050919050565b60006020820190508181036000830152613bc281613658565b9050919050565b60006020820190508181036000830152613be28161367b565b9050919050565b60006020820190508181036000830152613c02816136c1565b9050919050565b60006020820190508181036000830152613c22816136e4565b9050919050565b60006020820190508181036000830152613c4281613707565b9050919050565b60006020820190508181036000830152613c628161372a565b9050919050565b60006020820190508181036000830152613c828161374d565b9050919050565b60006020820190508181036000830152613ca281613793565b9050919050565b60006020820190508181036000830152613cc2816137b6565b9050919050565b60006020820190508181036000830152613ce2816137d9565b9050919050565b60006020820190508181036000830152613d02816137fc565b9050919050565b60006020820190508181036000830152613d228161381f565b9050919050565b60006020820190508181036000830152613d4281613842565b9050919050565b60006020820190508181036000830152613d6281613865565b9050919050565b60006020820190508181036000830152613d8281613888565b9050919050565b60006020820190508181036000830152613da2816138ab565b9050919050565b60006020820190508181036000830152613dc2816138ce565b9050919050565b60006020820190508181036000830152613de2816138f1565b9050919050565b6000604082019050613dfe6000830184613914565b92915050565b6000602082019050613e196000830184613943565b92915050565b6000613e29613e3a565b9050613e35828261413a565b919050565b6000604051905090565b600067ffffffffffffffff821115613e5f57613e5e6142a1565b5b613e68826142ee565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613ece82614042565b9150613ed983614042565b9250826fffffffffffffffffffffffffffffffff03821115613efe57613efd6141e5565b5b828201905092915050565b6000613f148261407e565b9150613f1f8361407e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f5457613f536141e5565b5b828201905092915050565b6000613f6a8261407e565b9150613f758361407e565b925082613f8557613f84614214565b5b828204905092915050565b6000613f9b82614042565b9150613fa683614042565b925082821015613fb957613fb86141e5565b5b828203905092915050565b6000613fcf8261407e565b9150613fda8361407e565b925082821015613fed57613fec6141e5565b5b828203905092915050565b60006140038261405e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b838110156140c95780820151818401526020810190506140ae565b838111156140d8576000848401525b50505050565b60006140e98261407e565b915060008214156140fd576140fc6141e5565b5b600182039050919050565b6000600282049050600182168061412057607f821691505b6020821081141561413457614133614243565b5b50919050565b614143826142ee565b810181811067ffffffffffffffff82111715614162576141616142a1565b5b80604052505050565b60006141768261407e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141a9576141a86141e5565b5b600182019050919050565b60006141bf8261407e565b91506141ca8361407e565b9250826141da576141d9614214565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f75676820754469636300000000000000000000000000000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b614aab81613ff8565b8114614ab657600080fd5b50565b614ac28161400a565b8114614acd57600080fd5b50565b614ad981614016565b8114614ae457600080fd5b50565b614af08161407e565b8114614afb57600080fd5b5056fea2646970667358221220deffadf05db4b62874d905f6ce36ceef5ca52238ab26c9a020c0a51b679b949864736f6c63430008070033697066733a2f2f516d54695a6a714151726e43423964423463616b75787a7976367664637256514a79514e627534774e5468586e722f
Deployed Bytecode
0x6080604052600436106101b75760003560e01c80638bc35c2f116100ec578063b88d4fde1161008a578063dc33e68111610064578063dc33e6811461060f578063e80beaa11461064c578063e985e9c514610675578063f2fde38b146106b2576101b7565b8063b88d4fde1461057e578063c87b56dd146105a7578063d7224ba0146105e4576101b7565b806395d89b41116100c657806395d89b41146104f7578063a0712d6814610522578063a22cb4651461053e578063ac44600214610567576101b7565b80638bc35c2f146104645780638da5cb5b1461048f5780639231ab2a146104ba576101b7565b80632f745c591161015957806355f804b31161013357806355f804b3146103aa5780636352211e146103d357806370a0823114610410578063715018a61461044d576101b7565b80632f745c591461030757806342842e0e146103445780634f6ccce71461036d576101b7565b8063095ea7b311610195578063095ea7b31461026157806318160ddd1461028a57806323b872dd146102b55780632d20fb60146102de576101b7565b806301ffc9a7146101bc57806306fdde03146101f9578063081812fc14610224575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de9190613306565b6106db565b6040516101f09190613a0c565b60405180910390f35b34801561020557600080fd5b5061020e610825565b60405161021b9190613a27565b60405180910390f35b34801561023057600080fd5b5061024b600480360381019061024691906133ad565b6108b7565b60405161025891906139a5565b60405180910390f35b34801561026d57600080fd5b50610288600480360381019061028391906132c6565b61093c565b005b34801561029657600080fd5b5061029f610a55565b6040516102ac9190613e04565b60405180910390f35b3480156102c157600080fd5b506102dc60048036038101906102d791906131b0565b610a5f565b005b3480156102ea57600080fd5b50610305600480360381019061030091906133ad565b610a6f565b005b34801561031357600080fd5b5061032e600480360381019061032991906132c6565b610b4d565b60405161033b9190613e04565b60405180910390f35b34801561035057600080fd5b5061036b600480360381019061036691906131b0565b610d4b565b005b34801561037957600080fd5b50610394600480360381019061038f91906133ad565b610d6b565b6040516103a19190613e04565b60405180910390f35b3480156103b657600080fd5b506103d160048036038101906103cc9190613360565b610dbe565b005b3480156103df57600080fd5b506103fa60048036038101906103f591906133ad565b610e50565b60405161040791906139a5565b60405180910390f35b34801561041c57600080fd5b5061043760048036038101906104329190613143565b610e66565b6040516104449190613e04565b60405180910390f35b34801561045957600080fd5b50610462610f4f565b005b34801561047057600080fd5b50610479610fd7565b6040516104869190613e04565b60405180910390f35b34801561049b57600080fd5b506104a4610ffb565b6040516104b191906139a5565b60405180910390f35b3480156104c657600080fd5b506104e160048036038101906104dc91906133ad565b611024565b6040516104ee9190613de9565b60405180910390f35b34801561050357600080fd5b5061050c61103c565b6040516105199190613a27565b60405180910390f35b61053c600480360381019061053791906133ad565b6110ce565b005b34801561054a57600080fd5b5061056560048036038101906105609190613286565b611323565b005b34801561057357600080fd5b5061057c6114a4565b005b34801561058a57600080fd5b506105a560048036038101906105a09190613203565b611625565b005b3480156105b357600080fd5b506105ce60048036038101906105c991906133ad565b611681565b6040516105db9190613a27565b60405180910390f35b3480156105f057600080fd5b506105f9611728565b6040516106069190613e04565b60405180910390f35b34801561061b57600080fd5b5061063660048036038101906106319190613143565b61172e565b6040516106439190613e04565b60405180910390f35b34801561065857600080fd5b50610673600480360381019061066e91906133ad565b611740565b005b34801561068157600080fd5b5061069c60048036038101906106979190613170565b6117c6565b6040516106a99190613a0c565b60405180910390f35b3480156106be57600080fd5b506106d960048036038101906106d49190613143565b61185a565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107a657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061080e57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061081e575061081d82611952565b5b9050919050565b60606002805461083490614108565b80601f016020809104026020016040519081016040528092919081815260200182805461086090614108565b80156108ad5780601f10610882576101008083540402835291602001916108ad565b820191906000526020600020905b81548152906001019060200180831161089057829003601f168201915b5050505050905090565b60006108c2826119bc565b610901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f890613da9565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061094782610e50565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109af90613c69565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109d76119ca565b73ffffffffffffffffffffffffffffffffffffffff161480610a065750610a0581610a006119ca565b6117c6565b5b610a45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3c90613b49565b60405180910390fd5b610a508383836119d2565b505050565b6000600154905090565b610a6a838383611a84565b505050565b610a776119ca565b73ffffffffffffffffffffffffffffffffffffffff16610a95610ffb565b73ffffffffffffffffffffffffffffffffffffffff1614610aeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae290613be9565b60405180910390fd5b60026009541415610b31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2890613d69565b60405180910390fd5b6002600981905550610b428161203d565b600160098190555050565b6000610b5883610e66565b8210610b99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9090613a49565b60405180910390fd5b6000610ba3610a55565b905060008060005b83811015610d09576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610c9d57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cf55786841415610ce6578195505050505050610d45565b8380610cf19061416b565b9450505b508080610d019061416b565b915050610bab565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3c90613d29565b60405180910390fd5b92915050565b610d6683838360405180602001604052806000815250611625565b505050565b6000610d75610a55565b8210610db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dad90613ac9565b60405180910390fd5b819050919050565b610dc66119ca565b73ffffffffffffffffffffffffffffffffffffffff16610de4610ffb565b73ffffffffffffffffffffffffffffffffffffffff1614610e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3190613be9565b60405180910390fd5b8181600d9190610e4b929190612f22565b505050565b6000610e5b826122cb565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ece90613b89565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b610f576119ca565b73ffffffffffffffffffffffffffffffffffffffff16610f75610ffb565b73ffffffffffffffffffffffffffffffffffffffff1614610fcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc290613be9565b60405180910390fd5b610fd560006124ce565b565b7f000000000000000000000000000000000000000000000000000000000000000a81565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61102c612fa8565b611035826122cb565b9050919050565b60606003805461104b90614108565b80601f016020809104026020016040519081016040528092919081815260200182805461107790614108565b80156110c45780601f10611099576101008083540402835291602001916110c4565b820191906000526020600020905b8154815290600101906020018083116110a757829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461113c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113390613b29565b60405180910390fd5b600a54600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161119a91906139a5565b60206040518083038186803b1580156111b257600080fd5b505afa1580156111c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ea91906133da565b101561122b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122290613aa9565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000003e881611255610a55565b61125f9190613f09565b11156112a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129790613ba9565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000a816112cb3361172e565b6112d59190613f09565b1115611316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130d90613d09565b60405180910390fd5b6113203382612592565b50565b61132b6119ca565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611399576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139090613c29565b60405180910390fd5b80600760006113a66119ca565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166114536119ca565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114989190613a0c565b60405180910390a35050565b6114ac6119ca565b73ffffffffffffffffffffffffffffffffffffffff166114ca610ffb565b73ffffffffffffffffffffffffffffffffffffffff1614611520576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151790613be9565b60405180910390fd5b60026009541415611566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155d90613d69565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff164760405161159490613990565b60006040518083038185875af1925050503d80600081146115d1576040519150601f19603f3d011682016040523d82523d6000602084013e6115d6565b606091505b505090508061161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161190613c89565b60405180910390fd5b506001600981905550565b611630848484611a84565b61163c848484846125b0565b61167b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167290613ca9565b60405180910390fd5b50505050565b606061168c826119bc565b6116cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c290613c09565b60405180910390fd5b60006116d5612747565b905060008151116116f55760405180602001604052806000815250611720565b806116ff846127d9565b604051602001611710929190613961565b6040516020818303038152906040525b915050919050565b60085481565b60006117398261293a565b9050919050565b6117486119ca565b73ffffffffffffffffffffffffffffffffffffffff16611766610ffb565b73ffffffffffffffffffffffffffffffffffffffff16146117bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b390613be9565b60405180910390fd5b80600a8190555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6118626119ca565b73ffffffffffffffffffffffffffffffffffffffff16611880610ffb565b73ffffffffffffffffffffffffffffffffffffffff16146118d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cd90613be9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611946576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193d90613a69565b60405180910390fd5b61194f816124ce565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611a8f826122cb565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611ab66119ca565b73ffffffffffffffffffffffffffffffffffffffff161480611b125750611adb6119ca565b73ffffffffffffffffffffffffffffffffffffffff16611afa846108b7565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b2e5750611b2d8260000151611b286119ca565b6117c6565b5b905080611b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6790613c49565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd990613bc9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4990613ae9565b60405180910390fd5b611c5f8585856001612a23565b611c6f60008484600001516119d2565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611cdd9190613f90565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611d819190613ec3565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184611e879190613f09565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611fcd57611efd816119bc565b15611fcc576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46120358686866001612a29565b505050505050565b6000600854905060008211612087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207e90613b69565b60405180910390fd5b6000600183836120979190613f09565b6120a19190613fc4565b905060017f00000000000000000000000000000000000000000000000000000000000003e86120d09190613fc4565b8111156121075760017f00000000000000000000000000000000000000000000000000000000000003e86121049190613fc4565b90505b612110816119bc565b61214f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214690613d49565b60405180910390fd5b60008290505b8181116122b257600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561229f5760006121d2826122cb565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b80806122aa9061416b565b915050612155565b506001816122c09190613f09565b600881905550505050565b6122d3612fa8565b6122dc826119bc565b61231b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231290613a89565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000a831061237f5760017f000000000000000000000000000000000000000000000000000000000000000a846123729190613fc4565b61237c9190613f09565b90505b60008390505b81811061248d576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612479578093505050506124c9565b508080612485906140de565b915050612385565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c090613d89565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6125ac828260405180602001604052806000815250612a2f565b5050565b60006125d18473ffffffffffffffffffffffffffffffffffffffff16612f0f565b1561273a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026125fa6119ca565b8786866040518563ffffffff1660e01b815260040161261c94939291906139c0565b602060405180830381600087803b15801561263657600080fd5b505af192505050801561266757506040513d601f19601f820116820180604052508101906126649190613333565b60015b6126ea573d8060008114612697576040519150601f19603f3d011682016040523d82523d6000602084013e61269c565b606091505b506000815114156126e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d990613ca9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061273f565b600190505b949350505050565b6060600d805461275690614108565b80601f016020809104026020016040519081016040528092919081815260200182805461278290614108565b80156127cf5780601f106127a4576101008083540402835291602001916127cf565b820191906000526020600020905b8154815290600101906020018083116127b257829003601f168201915b5050505050905090565b60606000821415612821576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612935565b600082905060005b6000821461285357808061283c9061416b565b915050600a8261284c9190613f5f565b9150612829565b60008167ffffffffffffffff81111561286f5761286e6142a1565b5b6040519080825280601f01601f1916602001820160405280156128a15781602001600182028036833780820191505090505b5090505b6000851461292e576001826128ba9190613fc4565b9150600a856128c991906141b4565b60306128d59190613f09565b60f81b8183815181106128eb576128ea614272565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856129279190613f5f565b94506128a5565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a290613b09565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9d90613ce9565b60405180910390fd5b612aaf816119bc565b15612aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae690613cc9565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000a831115612b52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4990613dc9565b60405180910390fd5b612b5f6000858386612a23565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151612c5c9190613ec3565b6fffffffffffffffffffffffffffffffff168152602001858360200151612c839190613ec3565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015612ef257818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612e9260008884886125b0565b612ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec890613ca9565b60405180910390fd5b8180612edc9061416b565b9250508080612eea9061416b565b915050612e21565b5080600181905550612f076000878588612a29565b505050505050565b600080823b905060008111915050919050565b828054612f2e90614108565b90600052602060002090601f016020900481019282612f505760008555612f97565b82601f10612f6957803560ff1916838001178555612f97565b82800160010185558215612f97579182015b82811115612f96578235825591602001919060010190612f7b565b5b509050612fa49190612fe2565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612ffb576000816000905550600101612fe3565b5090565b600061301261300d84613e44565b613e1f565b90508281526020810184848401111561302e5761302d6142df565b5b61303984828561409c565b509392505050565b60008135905061305081614aa2565b92915050565b60008135905061306581614ab9565b92915050565b60008135905061307a81614ad0565b92915050565b60008151905061308f81614ad0565b92915050565b600082601f8301126130aa576130a96142d5565b5b81356130ba848260208601612fff565b91505092915050565b60008083601f8401126130d9576130d86142d5565b5b8235905067ffffffffffffffff8111156130f6576130f56142d0565b5b602083019150836001820283011115613112576131116142da565b5b9250929050565b60008135905061312881614ae7565b92915050565b60008151905061313d81614ae7565b92915050565b600060208284031215613159576131586142e9565b5b600061316784828501613041565b91505092915050565b60008060408385031215613187576131866142e9565b5b600061319585828601613041565b92505060206131a685828601613041565b9150509250929050565b6000806000606084860312156131c9576131c86142e9565b5b60006131d786828701613041565b93505060206131e886828701613041565b92505060406131f986828701613119565b9150509250925092565b6000806000806080858703121561321d5761321c6142e9565b5b600061322b87828801613041565b945050602061323c87828801613041565b935050604061324d87828801613119565b925050606085013567ffffffffffffffff81111561326e5761326d6142e4565b5b61327a87828801613095565b91505092959194509250565b6000806040838503121561329d5761329c6142e9565b5b60006132ab85828601613041565b92505060206132bc85828601613056565b9150509250929050565b600080604083850312156132dd576132dc6142e9565b5b60006132eb85828601613041565b92505060206132fc85828601613119565b9150509250929050565b60006020828403121561331c5761331b6142e9565b5b600061332a8482850161306b565b91505092915050565b600060208284031215613349576133486142e9565b5b600061335784828501613080565b91505092915050565b60008060208385031215613377576133766142e9565b5b600083013567ffffffffffffffff811115613395576133946142e4565b5b6133a1858286016130c3565b92509250509250929050565b6000602082840312156133c3576133c26142e9565b5b60006133d184828501613119565b91505092915050565b6000602082840312156133f0576133ef6142e9565b5b60006133fe8482850161312e565b91505092915050565b61341081613ff8565b82525050565b61341f81613ff8565b82525050565b61342e8161400a565b82525050565b600061343f82613e75565b6134498185613e8b565b93506134598185602086016140ab565b613462816142ee565b840191505092915050565b600061347882613e80565b6134828185613ea7565b93506134928185602086016140ab565b61349b816142ee565b840191505092915050565b60006134b182613e80565b6134bb8185613eb8565b93506134cb8185602086016140ab565b80840191505092915050565b60006134e4602283613ea7565b91506134ef826142ff565b604082019050919050565b6000613507602683613ea7565b91506135128261434e565b604082019050919050565b600061352a602a83613ea7565b91506135358261439d565b604082019050919050565b600061354d601083613ea7565b9150613558826143ec565b602082019050919050565b6000613570602383613ea7565b915061357b82614415565b604082019050919050565b6000613593602583613ea7565b915061359e82614464565b604082019050919050565b60006135b6603183613ea7565b91506135c1826144b3565b604082019050919050565b60006135d9601e83613ea7565b91506135e482614502565b602082019050919050565b60006135fc603983613ea7565b91506136078261452b565b604082019050919050565b600061361f601883613ea7565b915061362a8261457a565b602082019050919050565b6000613642602b83613ea7565b915061364d826145a3565b604082019050919050565b6000613665601283613ea7565b9150613670826145f2565b602082019050919050565b6000613688602683613ea7565b91506136938261461b565b604082019050919050565b60006136ab600583613eb8565b91506136b68261466a565b600582019050919050565b60006136ce602083613ea7565b91506136d982614693565b602082019050919050565b60006136f1602f83613ea7565b91506136fc826146bc565b604082019050919050565b6000613714601a83613ea7565b915061371f8261470b565b602082019050919050565b6000613737603283613ea7565b915061374282614734565b604082019050919050565b600061375a602283613ea7565b915061376582614783565b604082019050919050565b600061377d600083613e9c565b9150613788826147d2565b600082019050919050565b60006137a0601083613ea7565b91506137ab826147d5565b602082019050919050565b60006137c3603383613ea7565b91506137ce826147fe565b604082019050919050565b60006137e6601d83613ea7565b91506137f18261484d565b602082019050919050565b6000613809602183613ea7565b915061381482614876565b604082019050919050565b600061382c601683613ea7565b9150613837826148c5565b602082019050919050565b600061384f602e83613ea7565b915061385a826148ee565b604082019050919050565b6000613872602683613ea7565b915061387d8261493d565b604082019050919050565b6000613895601f83613ea7565b91506138a08261498c565b602082019050919050565b60006138b8602f83613ea7565b91506138c3826149b5565b604082019050919050565b60006138db602d83613ea7565b91506138e682614a04565b604082019050919050565b60006138fe602283613ea7565b915061390982614a53565b604082019050919050565b60408201600082015161392a6000850182613407565b50602082015161393d6020850182613952565b50505050565b61394c8161407e565b82525050565b61395b81614088565b82525050565b600061396d82856134a6565b915061397982846134a6565b91506139848261369e565b91508190509392505050565b600061399b82613770565b9150819050919050565b60006020820190506139ba6000830184613416565b92915050565b60006080820190506139d56000830187613416565b6139e26020830186613416565b6139ef6040830185613943565b8181036060830152613a018184613434565b905095945050505050565b6000602082019050613a216000830184613425565b92915050565b60006020820190508181036000830152613a41818461346d565b905092915050565b60006020820190508181036000830152613a62816134d7565b9050919050565b60006020820190508181036000830152613a82816134fa565b9050919050565b60006020820190508181036000830152613aa28161351d565b9050919050565b60006020820190508181036000830152613ac281613540565b9050919050565b60006020820190508181036000830152613ae281613563565b9050919050565b60006020820190508181036000830152613b0281613586565b9050919050565b60006020820190508181036000830152613b22816135a9565b9050919050565b60006020820190508181036000830152613b42816135cc565b9050919050565b60006020820190508181036000830152613b62816135ef565b9050919050565b60006020820190508181036000830152613b8281613612565b9050919050565b60006020820190508181036000830152613ba281613635565b9050919050565b60006020820190508181036000830152613bc281613658565b9050919050565b60006020820190508181036000830152613be28161367b565b9050919050565b60006020820190508181036000830152613c02816136c1565b9050919050565b60006020820190508181036000830152613c22816136e4565b9050919050565b60006020820190508181036000830152613c4281613707565b9050919050565b60006020820190508181036000830152613c628161372a565b9050919050565b60006020820190508181036000830152613c828161374d565b9050919050565b60006020820190508181036000830152613ca281613793565b9050919050565b60006020820190508181036000830152613cc2816137b6565b9050919050565b60006020820190508181036000830152613ce2816137d9565b9050919050565b60006020820190508181036000830152613d02816137fc565b9050919050565b60006020820190508181036000830152613d228161381f565b9050919050565b60006020820190508181036000830152613d4281613842565b9050919050565b60006020820190508181036000830152613d6281613865565b9050919050565b60006020820190508181036000830152613d8281613888565b9050919050565b60006020820190508181036000830152613da2816138ab565b9050919050565b60006020820190508181036000830152613dc2816138ce565b9050919050565b60006020820190508181036000830152613de2816138f1565b9050919050565b6000604082019050613dfe6000830184613914565b92915050565b6000602082019050613e196000830184613943565b92915050565b6000613e29613e3a565b9050613e35828261413a565b919050565b6000604051905090565b600067ffffffffffffffff821115613e5f57613e5e6142a1565b5b613e68826142ee565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613ece82614042565b9150613ed983614042565b9250826fffffffffffffffffffffffffffffffff03821115613efe57613efd6141e5565b5b828201905092915050565b6000613f148261407e565b9150613f1f8361407e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f5457613f536141e5565b5b828201905092915050565b6000613f6a8261407e565b9150613f758361407e565b925082613f8557613f84614214565b5b828204905092915050565b6000613f9b82614042565b9150613fa683614042565b925082821015613fb957613fb86141e5565b5b828203905092915050565b6000613fcf8261407e565b9150613fda8361407e565b925082821015613fed57613fec6141e5565b5b828203905092915050565b60006140038261405e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b838110156140c95780820151818401526020810190506140ae565b838111156140d8576000848401525b50505050565b60006140e98261407e565b915060008214156140fd576140fc6141e5565b5b600182039050919050565b6000600282049050600182168061412057607f821691505b6020821081141561413457614133614243565b5b50919050565b614143826142ee565b810181811067ffffffffffffffff82111715614162576141616142a1565b5b80604052505050565b60006141768261407e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141a9576141a86141e5565b5b600182019050919050565b60006141bf8261407e565b91506141ca8361407e565b9250826141da576141d9614214565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f75676820754469636300000000000000000000000000000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b614aab81613ff8565b8114614ab657600080fd5b50565b614ac28161400a565b8114614acd57600080fd5b50565b614ad981614016565b8114614ae457600080fd5b50565b614af08161407e565b8114614afb57600080fd5b5056fea2646970667358221220deffadf05db4b62874d905f6ce36ceef5ca52238ab26c9a020c0a51b679b949864736f6c63430008070033
Deployed Bytecode Sourcemap
40445:2136:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22333:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24209:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25872:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25393:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20746:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26778:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42170:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21413:848;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27011:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20923:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41745:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24018:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22783:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1363:94;;;;;;;;;;;;;:::i;:::-;;40510:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;712:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42423:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24378:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41039:454;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26158:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41971:191;;;;;;;;;;;;;:::i;:::-;;27259:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24553:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32132:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42302:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41859:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26517:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1612:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22333:386;22460:4;22513:25;22498:40;;;:11;:40;;;;:101;;;;22566:33;22551:48;;;:11;:48;;;;22498:101;:164;;;;22627:35;22612:50;;;:11;:50;;;;22498:164;:213;;;;22675:36;22699:11;22675:23;:36::i;:::-;22498:213;22482:229;;22333:386;;;:::o;24209:100::-;24263:13;24296:5;24289:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24209:100;:::o;25872:214::-;25940:7;25968:16;25976:7;25968;:16::i;:::-;25960:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26054:15;:24;26070:7;26054:24;;;;;;;;;;;;;;;;;;;;;26047:31;;25872:214;;;:::o;25393:413::-;25466:13;25482:24;25498:7;25482:15;:24::i;:::-;25466:40;;25531:5;25525:11;;:2;:11;;;;25517:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;25626:5;25610:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;25635:37;25652:5;25659:12;:10;:12::i;:::-;25635:16;:37::i;:::-;25610:62;25588:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;25770:28;25779:2;25783:7;25792:5;25770:8;:28::i;:::-;25455:351;25393:413;;:::o;20746:100::-;20799:7;20826:12;;20819:19;;20746:100;:::o;26778:162::-;26904:28;26914:4;26920:2;26924:7;26904:9;:28::i;:::-;26778:162;;;:::o;42170:124::-;943:12;:10;:12::i;:::-;932:23;;:7;:5;:7::i;:::-;:23;;;924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2876:1:::1;3472:7;;:19;;3464:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;2876:1;3605:7;:18;;;;42258:28:::2;42277:8;42258:18;:28::i;:::-;2832:1:::1;3784:7;:22;;;;42170:124:::0;:::o;21413:848::-;21522:7;21563:16;21573:5;21563:9;:16::i;:::-;21555:5;:24;21547:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;21629:22;21654:13;:11;:13::i;:::-;21629:38;;21678:19;21712:25;21766:9;21761:426;21785:14;21781:1;:18;21761:426;;;21821:31;21855:11;:14;21867:1;21855:14;;;;;;;;;;;21821:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21914:1;21888:28;;:9;:14;;;:28;;;21884:103;;21957:9;:14;;;21937:34;;21884:103;22026:5;22005:26;;:17;:26;;;22001:175;;;22071:5;22056:11;:20;22052:77;;;22108:1;22101:8;;;;;;;;;22052:77;22147:13;;;;;:::i;:::-;;;;22001:175;21806:381;21801:3;;;;;:::i;:::-;;;;21761:426;;;;22197:56;;;;;;;;;;:::i;:::-;;;;;;;;21413:848;;;;;:::o;27011:177::-;27141:39;27158:4;27164:2;27168:7;27141:39;;;;;;;;;;;;:16;:39::i;:::-;27011:177;;;:::o;20923:187::-;20990:7;21026:13;:11;:13::i;:::-;21018:5;:21;21010:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;21097:5;21090:12;;20923:187;;;:::o;41745:106::-;943:12;:10;:12::i;:::-;932:23;;:7;:5;:7::i;:::-;:23;;;924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41836:7:::1;;41820:13;:23;;;;;;;:::i;:::-;;41745:106:::0;;:::o;24018:124::-;24082:7;24109:20;24121:7;24109:11;:20::i;:::-;:25;;;24102:32;;24018:124;;;:::o;22783:221::-;22847:7;22892:1;22875:19;;:5;:19;;;;22867:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;22968:12;:19;22981:5;22968:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;22960:36;;22953:43;;22783:221;;;:::o;1363:94::-;943:12;:10;:12::i;:::-;932:23;;:7;:5;:7::i;:::-;:23;;;924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1428:21:::1;1446:1;1428:9;:21::i;:::-;1363:94::o:0;40510:48::-;;;:::o;712:87::-;758:7;785:6;;;;;;;;;;;778:13;;712:87;:::o;42423:155::-;42504:21;;:::i;:::-;42550:20;42562:7;42550:11;:20::i;:::-;42543:27;;42423:155;;;:::o;24378:104::-;24434:13;24467:7;24460:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24378:104;:::o;41039:454::-;40966:10;40953:23;;:9;:23;;;40945:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;41179:14:::1;;41140:13;;;;;;;;;;;:23;;;41164:10;41140:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;;41132:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;41261:14;41249:8;41233:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:42;;41225:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;41370:23;41358:8;41331:24;41344:10;41331:12;:24::i;:::-;:35;;;;:::i;:::-;:62;;41309:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;41454:31;41464:10;41476:8;41454:9;:31::i;:::-;41039:454:::0;:::o;26158:288::-;26265:12;:10;:12::i;:::-;26253:24;;:8;:24;;;;26245:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;26366:8;26321:18;:32;26340:12;:10;:12::i;:::-;26321:32;;;;;;;;;;;;;;;:42;26354:8;26321:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;26419:8;26390:48;;26405:12;:10;:12::i;:::-;26390:48;;;26429:8;26390:48;;;;;;:::i;:::-;;;;;;;;26158:288;;:::o;41971:191::-;943:12;:10;:12::i;:::-;932:23;;:7;:5;:7::i;:::-;:23;;;924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2876:1:::1;3472:7;;:19;;3464:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;2876:1;3605:7;:18;;;;42040:12:::2;42058:10;:15;;42081:21;42058:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42039:68;;;42126:7;42118:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;42028:134;2832:1:::1;3784:7;:22;;;;41971:191::o:0;27259:355::-;27418:28;27428:4;27434:2;27438:7;27418:9;:28::i;:::-;27479:48;27502:4;27508:2;27512:7;27521:5;27479:22;:48::i;:::-;27457:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;27259:355;;;;:::o;24553:436::-;24651:13;24704:16;24712:7;24704;:16::i;:::-;24682:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;24808:21;24832:10;:8;:10::i;:::-;24808:34;;24893:1;24875:7;24869:21;:25;:112;;;;;;;;;;;;;;;;;24930:7;24939:18;:7;:16;:18::i;:::-;24913:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24869:112;24853:128;;;24553:436;;;:::o;32132:43::-;;;;:::o;42302:113::-;42360:7;42387:20;42401:5;42387:13;:20::i;:::-;42380:27;;42302:113;;;:::o;41859:104::-;943:12;:10;:12::i;:::-;932:23;;:7;:5;:7::i;:::-;:23;;;924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41949:6:::1;41932:14;:23;;;;41859:104:::0;:::o;26517:194::-;26639:4;26668:18;:25;26687:5;26668:25;;;;;;;;;;;;;;;:35;26694:8;26668:35;;;;;;;;;;;;;;;;;;;;;;;;;26661:42;;26517:194;;;;:::o;1612:192::-;943:12;:10;:12::i;:::-;932:23;;:7;:5;:7::i;:::-;:23;;;924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1721:1:::1;1701:22;;:8;:22;;;;1693:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1777:19;1787:8;1777:9;:19::i;:::-;1612:192:::0;:::o;18670:157::-;18755:4;18794:25;18779:40;;;:11;:40;;;;18772:47;;18670:157;;;:::o;27869:111::-;27926:4;27960:12;;27950:7;:22;27943:29;;27869:111;;;:::o;95:98::-;148:7;175:10;168:17;;95:98;:::o;31928:196::-;32070:2;32043:15;:24;32059:7;32043:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32108:7;32104:2;32088:28;;32097:5;32088:28;;;;;;;;;;;;31928:196;;;:::o;30109:1701::-;30224:35;30262:20;30274:7;30262:11;:20::i;:::-;30224:58;;30295:22;30337:13;:18;;;30321:34;;:12;:10;:12::i;:::-;:34;;;:83;;;;30392:12;:10;:12::i;:::-;30368:36;;:20;30380:7;30368:11;:20::i;:::-;:36;;;30321:83;:146;;;;30417:50;30434:13;:18;;;30454:12;:10;:12::i;:::-;30417:16;:50::i;:::-;30321:146;30295:173;;30503:17;30481:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;30655:4;30633:26;;:13;:18;;;:26;;;30611:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;30758:1;30744:16;;:2;:16;;;;30736:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30815:43;30837:4;30843:2;30847:7;30856:1;30815:21;:43::i;:::-;30923:49;30940:1;30944:7;30953:13;:18;;;30923:8;:49::i;:::-;31015:1;30985:12;:18;30998:4;30985:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31055:1;31027:12;:16;31040:2;31027:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31090:43;;;;;;;;31105:2;31090:43;;;;;;31116:15;31090:43;;;;;31067:11;:20;31079:7;31067:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31373:19;31405:1;31395:7;:11;;;;:::i;:::-;31373:33;;31462:1;31421:43;;:11;:24;31433:11;31421:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;31417:288;;;31485:20;31493:11;31485:7;:20::i;:::-;31481:213;;;31553:125;;;;;;;;31590:13;:18;;;31553:125;;;;;;31631:13;:28;;;31553:125;;;;;31526:11;:24;31538:11;31526:24;;;;;;;;;;;:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31481:213;31417:288;31741:7;31737:2;31722:27;;31731:4;31722:27;;;;;;;;;;;;31760:42;31781:4;31787:2;31791:7;31800:1;31760:20;:42::i;:::-;30213:1597;;;30109:1701;;;:::o;32288:950::-;32354:25;32382:24;;32354:52;;32436:1;32425:8;:12;32417:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;32477:16;32527:1;32516:8;32496:17;:28;;;;:::i;:::-;:32;;;;:::i;:::-;32477:51;;32571:1;32554:14;:18;;;;:::i;:::-;32543:8;:29;32539:91;;;32617:1;32600:14;:18;;;;:::i;:::-;32589:29;;32539:91;32753:17;32761:8;32753:7;:17::i;:::-;32745:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32829:9;32841:17;32829:29;;32824:357;32865:8;32860:1;:13;32824:357;;32930:1;32899:33;;:11;:14;32911:1;32899:14;;;;;;;;;;;:19;;;;;;;;;;;;:33;;;32895:275;;;32953:31;32987:14;32999:1;32987:11;:14::i;:::-;32953:48;;33037:117;;;;;;;;33074:9;:14;;;33037:117;;;;;;33111:9;:24;;;33037:117;;;;;33020:11;:14;33032:1;33020:14;;;;;;;;;;;:134;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32934:236;32895:275;32875:3;;;;;:::i;:::-;;;;32824:357;;;;33229:1;33218:8;:12;;;;:::i;:::-;33191:24;:39;;;;32343:895;;32288:950;:::o;23286:670::-;23362:21;;:::i;:::-;23409:16;23417:7;23409;:16::i;:::-;23401:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23485:26;23537:12;23526:7;:23;23522:103;;23612:1;23597:12;23587:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;23566:47;;23522:103;23642:12;23657:7;23642:22;;23637:242;23674:18;23666:4;:26;23637:242;;23717:31;23751:11;:17;23763:4;23751:17;;;;;;;;;;;23717:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23813:1;23787:28;;:9;:14;;;:28;;;23783:85;;23843:9;23836:16;;;;;;;23783:85;23702:177;23694:6;;;;;:::i;:::-;;;;23637:242;;;;23891:57;;;;;;;;;;:::i;:::-;;;;;;;;23286:670;;;;:::o;1812:173::-;1868:16;1887:6;;;;;;;;;;;1868:25;;1913:8;1904:6;;:17;;;;;;;;;;;;;;;;;;1968:8;1937:40;;1958:8;1937:40;;;;;;;;;;;;1857:128;1812:173;:::o;27988:104::-;28057:27;28067:2;28071:8;28057:27;;;;;;;;;;;;:9;:27::i;:::-;27988:104;;:::o;33803:830::-;33958:4;33979:15;:2;:13;;;:15::i;:::-;33975:651;;;34044:2;34028:36;;;34065:12;:10;:12::i;:::-;34079:4;34085:7;34094:5;34028:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34011:560;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34304:1;34287:6;:13;:18;34283:273;;;34330:61;;;;;;;;;;:::i;:::-;;;;;;;;34283:273;34506:6;34500:13;34491:6;34487:2;34483:15;34476:38;34011:560;34174:45;;;34164:55;;;:6;:55;;;;34157:62;;;;;33975:651;34610:4;34603:11;;33803:830;;;;;;;:::o;41623:114::-;41683:13;41716;41709:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41623:114;:::o;36045:723::-;36101:13;36331:1;36322:5;:10;36318:53;;;36349:10;;;;;;;;;;;;;;;;;;;;;36318:53;36381:12;36396:5;36381:20;;36412:14;36437:78;36452:1;36444:4;:9;36437:78;;36470:8;;;;;:::i;:::-;;;;36501:2;36493:10;;;;;:::i;:::-;;;36437:78;;;36525:19;36557:6;36547:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36525:39;;36575:154;36591:1;36582:5;:10;36575:154;;36619:1;36609:11;;;;;:::i;:::-;;;36686:2;36678:5;:10;;;;:::i;:::-;36665:2;:24;;;;:::i;:::-;36652:39;;36635:6;36642;36635:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;36715:2;36706:11;;;;;:::i;:::-;;;36575:154;;;36753:6;36739:21;;;;;36045:723;;;;:::o;23012:266::-;23073:7;23132:1;23115:19;;:5;:19;;;;23093:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;23237:12;:19;23250:5;23237:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;23229:41;;23222:48;;23012:266;;;:::o;35121:159::-;;;;;:::o;35692:158::-;;;;;:::o;28455:1400::-;28578:20;28601:12;;28578:35;;28646:1;28632:16;;:2;:16;;;;28624:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;28831:21;28839:12;28831:7;:21::i;:::-;28830:22;28822:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;28917:12;28905:8;:24;;28897:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;28981:61;29011:1;29015:2;29019:12;29033:8;28981:21;:61::i;:::-;29055:30;29088:12;:16;29101:2;29088:16;;;;;;;;;;;;;;;29055:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29134:135;;;;;;;;29190:8;29160:11;:19;;;:39;;;;:::i;:::-;29134:135;;;;;;29249:8;29214:11;:24;;;:44;;;;:::i;:::-;29134:135;;;;;29115:12;:16;29128:2;29115:16;;;;;;;;;;;;;;;:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29308:43;;;;;;;;29323:2;29308:43;;;;;;29334:15;29308:43;;;;;29280:11;:25;29292:12;29280:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29364:20;29387:12;29364:35;;29417:9;29412:325;29436:8;29432:1;:12;29412:325;;;29496:12;29492:2;29471:38;;29488:1;29471:38;;;;;;;;;;;;29550:59;29581:1;29585:2;29589:12;29603:5;29550:22;:59::i;:::-;29524:172;;;;;;;;;;;;:::i;:::-;;;;;;;;;29711:14;;;;;:::i;:::-;;;;29446:3;;;;;:::i;:::-;;;;29412:325;;;;29764:12;29749;:27;;;;29787:60;29816:1;29820:2;29824:12;29838:8;29787:20;:60::i;:::-;28567:1288;;;28455:1400;;;:::o;11449:387::-;11509:4;11717:12;11784:7;11772:20;11764:28;;11827:1;11820:4;:8;11813:15;;;11449:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::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:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;707:137;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;850:141;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:122;;1122:79;;:::i;:::-;1081:122;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;1010:338;;;;:::o;1368:553::-;1426:8;1436:6;1486:3;1479:4;1471:6;1467:17;1463:27;1453:122;;1494:79;;:::i;:::-;1453:122;1607:6;1594:20;1584:30;;1637:18;1629:6;1626:30;1623:117;;;1659:79;;:::i;:::-;1623:117;1773:4;1765:6;1761:17;1749:29;;1827:3;1819:4;1811:6;1807:17;1797:8;1793:32;1790:41;1787:128;;;1834:79;;:::i;:::-;1787:128;1368:553;;;;;:::o;1927:139::-;1973:5;2011:6;1998:20;1989:29;;2027:33;2054:5;2027:33;:::i;:::-;1927:139;;;;:::o;2072:143::-;2129:5;2160:6;2154:13;2145:22;;2176:33;2203:5;2176:33;:::i;:::-;2072:143;;;;:::o;2221:329::-;2280:6;2329:2;2317:9;2308:7;2304:23;2300:32;2297:119;;;2335:79;;:::i;:::-;2297:119;2455:1;2480:53;2525:7;2516:6;2505:9;2501:22;2480:53;:::i;:::-;2470:63;;2426:117;2221:329;;;;:::o;2556:474::-;2624:6;2632;2681:2;2669:9;2660:7;2656:23;2652:32;2649:119;;;2687:79;;:::i;:::-;2649:119;2807:1;2832:53;2877:7;2868:6;2857:9;2853:22;2832:53;:::i;:::-;2822:63;;2778:117;2934:2;2960:53;3005:7;2996:6;2985:9;2981:22;2960:53;:::i;:::-;2950:63;;2905:118;2556:474;;;;;:::o;3036:619::-;3113:6;3121;3129;3178:2;3166:9;3157:7;3153:23;3149:32;3146:119;;;3184:79;;:::i;:::-;3146:119;3304:1;3329:53;3374:7;3365:6;3354:9;3350:22;3329:53;:::i;:::-;3319:63;;3275:117;3431:2;3457:53;3502:7;3493:6;3482:9;3478:22;3457:53;:::i;:::-;3447:63;;3402:118;3559:2;3585:53;3630:7;3621:6;3610:9;3606:22;3585:53;:::i;:::-;3575:63;;3530:118;3036:619;;;;;:::o;3661:943::-;3756:6;3764;3772;3780;3829:3;3817:9;3808:7;3804:23;3800:33;3797:120;;;3836:79;;:::i;:::-;3797:120;3956:1;3981:53;4026:7;4017:6;4006:9;4002:22;3981:53;:::i;:::-;3971:63;;3927:117;4083:2;4109:53;4154:7;4145:6;4134:9;4130:22;4109:53;:::i;:::-;4099:63;;4054:118;4211:2;4237:53;4282:7;4273:6;4262:9;4258:22;4237:53;:::i;:::-;4227:63;;4182:118;4367:2;4356:9;4352:18;4339:32;4398:18;4390:6;4387:30;4384:117;;;4420:79;;:::i;:::-;4384:117;4525:62;4579:7;4570:6;4559:9;4555:22;4525:62;:::i;:::-;4515:72;;4310:287;3661:943;;;;;;;:::o;4610:468::-;4675:6;4683;4732:2;4720:9;4711:7;4707:23;4703:32;4700:119;;;4738:79;;:::i;:::-;4700:119;4858:1;4883:53;4928:7;4919:6;4908:9;4904:22;4883:53;:::i;:::-;4873:63;;4829:117;4985:2;5011:50;5053:7;5044:6;5033:9;5029:22;5011:50;:::i;:::-;5001:60;;4956:115;4610:468;;;;;:::o;5084:474::-;5152:6;5160;5209:2;5197:9;5188:7;5184:23;5180:32;5177:119;;;5215:79;;:::i;:::-;5177:119;5335:1;5360:53;5405:7;5396:6;5385:9;5381:22;5360:53;:::i;:::-;5350:63;;5306:117;5462:2;5488:53;5533:7;5524:6;5513:9;5509:22;5488:53;:::i;:::-;5478:63;;5433:118;5084:474;;;;;:::o;5564:327::-;5622:6;5671:2;5659:9;5650:7;5646:23;5642:32;5639:119;;;5677:79;;:::i;:::-;5639:119;5797:1;5822:52;5866:7;5857:6;5846:9;5842:22;5822:52;:::i;:::-;5812:62;;5768:116;5564:327;;;;:::o;5897:349::-;5966:6;6015:2;6003:9;5994:7;5990:23;5986:32;5983:119;;;6021:79;;:::i;:::-;5983:119;6141:1;6166:63;6221:7;6212:6;6201:9;6197:22;6166:63;:::i;:::-;6156:73;;6112:127;5897:349;;;;:::o;6252:529::-;6323:6;6331;6380:2;6368:9;6359:7;6355:23;6351:32;6348:119;;;6386:79;;:::i;:::-;6348:119;6534:1;6523:9;6519:17;6506:31;6564:18;6556:6;6553:30;6550:117;;;6586:79;;:::i;:::-;6550:117;6699:65;6756:7;6747:6;6736:9;6732:22;6699:65;:::i;:::-;6681:83;;;;6477:297;6252:529;;;;;:::o;6787:329::-;6846:6;6895:2;6883:9;6874:7;6870:23;6866:32;6863:119;;;6901:79;;:::i;:::-;6863:119;7021:1;7046:53;7091:7;7082:6;7071:9;7067:22;7046:53;:::i;:::-;7036:63;;6992:117;6787:329;;;;:::o;7122:351::-;7192:6;7241:2;7229:9;7220:7;7216:23;7212:32;7209:119;;;7247:79;;:::i;:::-;7209:119;7367:1;7392:64;7448:7;7439:6;7428:9;7424:22;7392:64;:::i;:::-;7382:74;;7338:128;7122:351;;;;:::o;7479:108::-;7556:24;7574:5;7556:24;:::i;:::-;7551:3;7544:37;7479:108;;:::o;7593:118::-;7680:24;7698:5;7680:24;:::i;:::-;7675:3;7668:37;7593:118;;:::o;7717:109::-;7798:21;7813:5;7798:21;:::i;:::-;7793:3;7786:34;7717:109;;:::o;7832:360::-;7918:3;7946:38;7978:5;7946:38;:::i;:::-;8000:70;8063:6;8058:3;8000:70;:::i;:::-;7993:77;;8079:52;8124:6;8119:3;8112:4;8105:5;8101:16;8079:52;:::i;:::-;8156:29;8178:6;8156:29;:::i;:::-;8151:3;8147:39;8140:46;;7922:270;7832:360;;;;:::o;8198:364::-;8286:3;8314:39;8347:5;8314:39;:::i;:::-;8369:71;8433:6;8428:3;8369:71;:::i;:::-;8362:78;;8449:52;8494:6;8489:3;8482:4;8475:5;8471:16;8449:52;:::i;:::-;8526:29;8548:6;8526:29;:::i;:::-;8521:3;8517:39;8510:46;;8290:272;8198:364;;;;:::o;8568:377::-;8674:3;8702:39;8735:5;8702:39;:::i;:::-;8757:89;8839:6;8834:3;8757:89;:::i;:::-;8750:96;;8855:52;8900:6;8895:3;8888:4;8881:5;8877:16;8855:52;:::i;:::-;8932:6;8927:3;8923:16;8916:23;;8678:267;8568:377;;;;:::o;8951:366::-;9093:3;9114:67;9178:2;9173:3;9114:67;:::i;:::-;9107:74;;9190:93;9279:3;9190:93;:::i;:::-;9308:2;9303:3;9299:12;9292:19;;8951:366;;;:::o;9323:::-;9465:3;9486:67;9550:2;9545:3;9486:67;:::i;:::-;9479:74;;9562:93;9651:3;9562:93;:::i;:::-;9680:2;9675:3;9671:12;9664:19;;9323:366;;;:::o;9695:::-;9837:3;9858:67;9922:2;9917:3;9858:67;:::i;:::-;9851:74;;9934:93;10023:3;9934:93;:::i;:::-;10052:2;10047:3;10043:12;10036:19;;9695:366;;;:::o;10067:::-;10209:3;10230:67;10294:2;10289:3;10230:67;:::i;:::-;10223:74;;10306:93;10395:3;10306:93;:::i;:::-;10424:2;10419:3;10415:12;10408:19;;10067:366;;;:::o;10439:::-;10581:3;10602:67;10666:2;10661:3;10602:67;:::i;:::-;10595:74;;10678:93;10767:3;10678:93;:::i;:::-;10796:2;10791:3;10787:12;10780:19;;10439:366;;;:::o;10811:::-;10953:3;10974:67;11038:2;11033:3;10974:67;:::i;:::-;10967:74;;11050:93;11139:3;11050:93;:::i;:::-;11168:2;11163:3;11159:12;11152:19;;10811:366;;;:::o;11183:::-;11325:3;11346:67;11410:2;11405:3;11346:67;:::i;:::-;11339:74;;11422:93;11511:3;11422:93;:::i;:::-;11540:2;11535:3;11531:12;11524:19;;11183:366;;;:::o;11555:::-;11697:3;11718:67;11782:2;11777:3;11718:67;:::i;:::-;11711:74;;11794:93;11883:3;11794:93;:::i;:::-;11912:2;11907:3;11903:12;11896:19;;11555:366;;;:::o;11927:::-;12069:3;12090:67;12154:2;12149:3;12090:67;:::i;:::-;12083:74;;12166:93;12255:3;12166:93;:::i;:::-;12284:2;12279:3;12275:12;12268:19;;11927:366;;;:::o;12299:::-;12441:3;12462:67;12526:2;12521:3;12462:67;:::i;:::-;12455:74;;12538:93;12627:3;12538:93;:::i;:::-;12656:2;12651:3;12647:12;12640:19;;12299:366;;;:::o;12671:::-;12813:3;12834:67;12898:2;12893:3;12834:67;:::i;:::-;12827:74;;12910:93;12999:3;12910:93;:::i;:::-;13028:2;13023:3;13019:12;13012:19;;12671:366;;;:::o;13043:::-;13185:3;13206:67;13270:2;13265:3;13206:67;:::i;:::-;13199:74;;13282:93;13371:3;13282:93;:::i;:::-;13400:2;13395:3;13391:12;13384:19;;13043:366;;;:::o;13415:::-;13557:3;13578:67;13642:2;13637:3;13578:67;:::i;:::-;13571:74;;13654:93;13743:3;13654:93;:::i;:::-;13772:2;13767:3;13763:12;13756:19;;13415:366;;;:::o;13787:400::-;13947:3;13968:84;14050:1;14045:3;13968:84;:::i;:::-;13961:91;;14061:93;14150:3;14061:93;:::i;:::-;14179:1;14174:3;14170:11;14163:18;;13787:400;;;:::o;14193:366::-;14335:3;14356:67;14420:2;14415:3;14356:67;:::i;:::-;14349:74;;14432:93;14521:3;14432:93;:::i;:::-;14550:2;14545:3;14541:12;14534:19;;14193:366;;;:::o;14565:::-;14707:3;14728:67;14792:2;14787:3;14728:67;:::i;:::-;14721:74;;14804:93;14893:3;14804:93;:::i;:::-;14922:2;14917:3;14913:12;14906:19;;14565:366;;;:::o;14937:::-;15079:3;15100:67;15164:2;15159:3;15100:67;:::i;:::-;15093:74;;15176:93;15265:3;15176:93;:::i;:::-;15294:2;15289:3;15285:12;15278:19;;14937:366;;;:::o;15309:::-;15451:3;15472:67;15536:2;15531:3;15472:67;:::i;:::-;15465:74;;15548:93;15637:3;15548:93;:::i;:::-;15666:2;15661:3;15657:12;15650:19;;15309:366;;;:::o;15681:::-;15823:3;15844:67;15908:2;15903:3;15844:67;:::i;:::-;15837:74;;15920:93;16009:3;15920:93;:::i;:::-;16038:2;16033:3;16029:12;16022:19;;15681:366;;;:::o;16053:398::-;16212:3;16233:83;16314:1;16309:3;16233:83;:::i;:::-;16226:90;;16325:93;16414:3;16325:93;:::i;:::-;16443:1;16438:3;16434:11;16427:18;;16053:398;;;:::o;16457:366::-;16599:3;16620:67;16684:2;16679:3;16620:67;:::i;:::-;16613:74;;16696:93;16785:3;16696:93;:::i;:::-;16814:2;16809:3;16805:12;16798:19;;16457:366;;;:::o;16829:::-;16971:3;16992:67;17056:2;17051:3;16992:67;:::i;:::-;16985:74;;17068:93;17157:3;17068:93;:::i;:::-;17186:2;17181:3;17177:12;17170:19;;16829:366;;;:::o;17201:::-;17343:3;17364:67;17428:2;17423:3;17364:67;:::i;:::-;17357:74;;17440:93;17529:3;17440:93;:::i;:::-;17558:2;17553:3;17549:12;17542:19;;17201:366;;;:::o;17573:::-;17715:3;17736:67;17800:2;17795:3;17736:67;:::i;:::-;17729:74;;17812:93;17901:3;17812:93;:::i;:::-;17930:2;17925:3;17921:12;17914:19;;17573:366;;;:::o;17945:::-;18087:3;18108:67;18172:2;18167:3;18108:67;:::i;:::-;18101:74;;18184:93;18273:3;18184:93;:::i;:::-;18302:2;18297:3;18293:12;18286:19;;17945:366;;;:::o;18317:::-;18459:3;18480:67;18544:2;18539:3;18480:67;:::i;:::-;18473:74;;18556:93;18645:3;18556:93;:::i;:::-;18674:2;18669:3;18665:12;18658:19;;18317:366;;;:::o;18689:::-;18831:3;18852:67;18916:2;18911:3;18852:67;:::i;:::-;18845:74;;18928:93;19017:3;18928:93;:::i;:::-;19046:2;19041:3;19037:12;19030:19;;18689:366;;;:::o;19061:::-;19203:3;19224:67;19288:2;19283:3;19224:67;:::i;:::-;19217:74;;19300:93;19389:3;19300:93;:::i;:::-;19418:2;19413:3;19409:12;19402:19;;19061:366;;;:::o;19433:::-;19575:3;19596:67;19660:2;19655:3;19596:67;:::i;:::-;19589:74;;19672:93;19761:3;19672:93;:::i;:::-;19790:2;19785:3;19781:12;19774:19;;19433:366;;;:::o;19805:::-;19947:3;19968:67;20032:2;20027:3;19968:67;:::i;:::-;19961:74;;20044:93;20133:3;20044:93;:::i;:::-;20162:2;20157:3;20153:12;20146:19;;19805:366;;;:::o;20177:::-;20319:3;20340:67;20404:2;20399:3;20340:67;:::i;:::-;20333:74;;20416:93;20505:3;20416:93;:::i;:::-;20534:2;20529:3;20525:12;20518:19;;20177:366;;;:::o;20619:527::-;20778:4;20773:3;20769:14;20865:4;20858:5;20854:16;20848:23;20884:63;20941:4;20936:3;20932:14;20918:12;20884:63;:::i;:::-;20793:164;21049:4;21042:5;21038:16;21032:23;21068:61;21123:4;21118:3;21114:14;21100:12;21068:61;:::i;:::-;20967:172;20747:399;20619:527;;:::o;21152:118::-;21239:24;21257:5;21239:24;:::i;:::-;21234:3;21227:37;21152:118;;:::o;21276:105::-;21351:23;21368:5;21351:23;:::i;:::-;21346:3;21339:36;21276:105;;:::o;21387:701::-;21668:3;21690:95;21781:3;21772:6;21690:95;:::i;:::-;21683:102;;21802:95;21893:3;21884:6;21802:95;:::i;:::-;21795:102;;21914:148;22058:3;21914:148;:::i;:::-;21907:155;;22079:3;22072:10;;21387:701;;;;;:::o;22094:379::-;22278:3;22300:147;22443:3;22300:147;:::i;:::-;22293:154;;22464:3;22457:10;;22094:379;;;:::o;22479:222::-;22572:4;22610:2;22599:9;22595:18;22587:26;;22623:71;22691:1;22680:9;22676:17;22667:6;22623:71;:::i;:::-;22479:222;;;;:::o;22707:640::-;22902:4;22940:3;22929:9;22925:19;22917:27;;22954:71;23022:1;23011:9;23007:17;22998:6;22954:71;:::i;:::-;23035:72;23103:2;23092:9;23088:18;23079:6;23035:72;:::i;:::-;23117;23185:2;23174:9;23170:18;23161:6;23117:72;:::i;:::-;23236:9;23230:4;23226:20;23221:2;23210:9;23206:18;23199:48;23264:76;23335:4;23326:6;23264:76;:::i;:::-;23256:84;;22707:640;;;;;;;:::o;23353:210::-;23440:4;23478:2;23467:9;23463:18;23455:26;;23491:65;23553:1;23542:9;23538:17;23529:6;23491:65;:::i;:::-;23353:210;;;;:::o;23569:313::-;23682:4;23720:2;23709:9;23705:18;23697:26;;23769:9;23763:4;23759:20;23755:1;23744:9;23740:17;23733:47;23797:78;23870:4;23861:6;23797:78;:::i;:::-;23789:86;;23569:313;;;;:::o;23888:419::-;24054:4;24092:2;24081:9;24077:18;24069:26;;24141:9;24135:4;24131:20;24127:1;24116:9;24112:17;24105:47;24169:131;24295:4;24169:131;:::i;:::-;24161:139;;23888:419;;;:::o;24313:::-;24479:4;24517:2;24506:9;24502:18;24494:26;;24566:9;24560:4;24556:20;24552:1;24541:9;24537:17;24530:47;24594:131;24720:4;24594:131;:::i;:::-;24586:139;;24313:419;;;:::o;24738:::-;24904:4;24942:2;24931:9;24927:18;24919:26;;24991:9;24985:4;24981:20;24977:1;24966:9;24962:17;24955:47;25019:131;25145:4;25019:131;:::i;:::-;25011:139;;24738:419;;;:::o;25163:::-;25329:4;25367:2;25356:9;25352:18;25344:26;;25416:9;25410:4;25406:20;25402:1;25391:9;25387:17;25380:47;25444:131;25570:4;25444:131;:::i;:::-;25436:139;;25163:419;;;:::o;25588:::-;25754:4;25792:2;25781:9;25777:18;25769:26;;25841:9;25835:4;25831:20;25827:1;25816:9;25812:17;25805:47;25869:131;25995:4;25869:131;:::i;:::-;25861:139;;25588:419;;;:::o;26013:::-;26179:4;26217:2;26206:9;26202:18;26194:26;;26266:9;26260:4;26256:20;26252:1;26241:9;26237:17;26230:47;26294:131;26420:4;26294:131;:::i;:::-;26286:139;;26013:419;;;:::o;26438:::-;26604:4;26642:2;26631:9;26627:18;26619:26;;26691:9;26685:4;26681:20;26677:1;26666:9;26662:17;26655:47;26719:131;26845:4;26719:131;:::i;:::-;26711:139;;26438:419;;;:::o;26863:::-;27029:4;27067:2;27056:9;27052:18;27044:26;;27116:9;27110:4;27106:20;27102:1;27091:9;27087:17;27080:47;27144:131;27270:4;27144:131;:::i;:::-;27136:139;;26863:419;;;:::o;27288:::-;27454:4;27492:2;27481:9;27477:18;27469:26;;27541:9;27535:4;27531:20;27527:1;27516:9;27512:17;27505:47;27569:131;27695:4;27569:131;:::i;:::-;27561:139;;27288:419;;;:::o;27713:::-;27879:4;27917:2;27906:9;27902:18;27894:26;;27966:9;27960:4;27956:20;27952:1;27941:9;27937:17;27930:47;27994:131;28120:4;27994:131;:::i;:::-;27986:139;;27713:419;;;:::o;28138:::-;28304:4;28342:2;28331:9;28327:18;28319:26;;28391:9;28385:4;28381:20;28377:1;28366:9;28362:17;28355:47;28419:131;28545:4;28419:131;:::i;:::-;28411:139;;28138:419;;;:::o;28563:::-;28729:4;28767:2;28756:9;28752:18;28744:26;;28816:9;28810:4;28806:20;28802:1;28791:9;28787:17;28780:47;28844:131;28970:4;28844:131;:::i;:::-;28836:139;;28563:419;;;:::o;28988:::-;29154:4;29192:2;29181:9;29177:18;29169:26;;29241:9;29235:4;29231:20;29227:1;29216:9;29212:17;29205:47;29269:131;29395:4;29269:131;:::i;:::-;29261:139;;28988:419;;;:::o;29413:::-;29579:4;29617:2;29606:9;29602:18;29594:26;;29666:9;29660:4;29656:20;29652:1;29641:9;29637:17;29630:47;29694:131;29820:4;29694:131;:::i;:::-;29686:139;;29413:419;;;:::o;29838:::-;30004:4;30042:2;30031:9;30027:18;30019:26;;30091:9;30085:4;30081:20;30077:1;30066:9;30062:17;30055:47;30119:131;30245:4;30119:131;:::i;:::-;30111:139;;29838:419;;;:::o;30263:::-;30429:4;30467:2;30456:9;30452:18;30444:26;;30516:9;30510:4;30506:20;30502:1;30491:9;30487:17;30480:47;30544:131;30670:4;30544:131;:::i;:::-;30536:139;;30263:419;;;:::o;30688:::-;30854:4;30892:2;30881:9;30877:18;30869:26;;30941:9;30935:4;30931:20;30927:1;30916:9;30912:17;30905:47;30969:131;31095:4;30969:131;:::i;:::-;30961:139;;30688:419;;;:::o;31113:::-;31279:4;31317:2;31306:9;31302:18;31294:26;;31366:9;31360:4;31356:20;31352:1;31341:9;31337:17;31330:47;31394:131;31520:4;31394:131;:::i;:::-;31386:139;;31113:419;;;:::o;31538:::-;31704:4;31742:2;31731:9;31727:18;31719:26;;31791:9;31785:4;31781:20;31777:1;31766:9;31762:17;31755:47;31819:131;31945:4;31819:131;:::i;:::-;31811:139;;31538:419;;;:::o;31963:::-;32129:4;32167:2;32156:9;32152:18;32144:26;;32216:9;32210:4;32206:20;32202:1;32191:9;32187:17;32180:47;32244:131;32370:4;32244:131;:::i;:::-;32236:139;;31963:419;;;:::o;32388:::-;32554:4;32592:2;32581:9;32577:18;32569:26;;32641:9;32635:4;32631:20;32627:1;32616:9;32612:17;32605:47;32669:131;32795:4;32669:131;:::i;:::-;32661:139;;32388:419;;;:::o;32813:::-;32979:4;33017:2;33006:9;33002:18;32994:26;;33066:9;33060:4;33056:20;33052:1;33041:9;33037:17;33030:47;33094:131;33220:4;33094:131;:::i;:::-;33086:139;;32813:419;;;:::o;33238:::-;33404:4;33442:2;33431:9;33427:18;33419:26;;33491:9;33485:4;33481:20;33477:1;33466:9;33462:17;33455:47;33519:131;33645:4;33519:131;:::i;:::-;33511:139;;33238:419;;;:::o;33663:::-;33829:4;33867:2;33856:9;33852:18;33844:26;;33916:9;33910:4;33906:20;33902:1;33891:9;33887:17;33880:47;33944:131;34070:4;33944:131;:::i;:::-;33936:139;;33663:419;;;:::o;34088:::-;34254:4;34292:2;34281:9;34277:18;34269:26;;34341:9;34335:4;34331:20;34327:1;34316:9;34312:17;34305:47;34369:131;34495:4;34369:131;:::i;:::-;34361:139;;34088:419;;;:::o;34513:::-;34679:4;34717:2;34706:9;34702:18;34694:26;;34766:9;34760:4;34756:20;34752:1;34741:9;34737:17;34730:47;34794:131;34920:4;34794:131;:::i;:::-;34786:139;;34513:419;;;:::o;34938:::-;35104:4;35142:2;35131:9;35127:18;35119:26;;35191:9;35185:4;35181:20;35177:1;35166:9;35162:17;35155:47;35219:131;35345:4;35219:131;:::i;:::-;35211:139;;34938:419;;;:::o;35363:::-;35529:4;35567:2;35556:9;35552:18;35544:26;;35616:9;35610:4;35606:20;35602:1;35591:9;35587:17;35580:47;35644:131;35770:4;35644:131;:::i;:::-;35636:139;;35363:419;;;:::o;35788:::-;35954:4;35992:2;35981:9;35977:18;35969:26;;36041:9;36035:4;36031:20;36027:1;36016:9;36012:17;36005:47;36069:131;36195:4;36069:131;:::i;:::-;36061:139;;35788:419;;;:::o;36213:346::-;36368:4;36406:2;36395:9;36391:18;36383:26;;36419:133;36549:1;36538:9;36534:17;36525:6;36419:133;:::i;:::-;36213:346;;;;:::o;36565:222::-;36658:4;36696:2;36685:9;36681:18;36673:26;;36709:71;36777:1;36766:9;36762:17;36753:6;36709:71;:::i;:::-;36565:222;;;;:::o;36793:129::-;36827:6;36854:20;;:::i;:::-;36844:30;;36883:33;36911:4;36903:6;36883:33;:::i;:::-;36793:129;;;:::o;36928:75::-;36961:6;36994:2;36988:9;36978:19;;36928:75;:::o;37009:307::-;37070:4;37160:18;37152:6;37149:30;37146:56;;;37182:18;;:::i;:::-;37146:56;37220:29;37242:6;37220:29;:::i;:::-;37212:37;;37304:4;37298;37294:15;37286:23;;37009:307;;;:::o;37322:98::-;37373:6;37407:5;37401:12;37391:22;;37322:98;;;:::o;37426:99::-;37478:6;37512:5;37506:12;37496:22;;37426:99;;;:::o;37531:168::-;37614:11;37648:6;37643:3;37636:19;37688:4;37683:3;37679:14;37664:29;;37531:168;;;;:::o;37705:147::-;37806:11;37843:3;37828:18;;37705:147;;;;:::o;37858:169::-;37942:11;37976:6;37971:3;37964:19;38016:4;38011:3;38007:14;37992:29;;37858:169;;;;:::o;38033:148::-;38135:11;38172:3;38157:18;;38033:148;;;;:::o;38187:273::-;38227:3;38246:20;38264:1;38246:20;:::i;:::-;38241:25;;38280:20;38298:1;38280:20;:::i;:::-;38275:25;;38402:1;38366:34;38362:42;38359:1;38356:49;38353:75;;;38408:18;;:::i;:::-;38353:75;38452:1;38449;38445:9;38438:16;;38187:273;;;;:::o;38466:305::-;38506:3;38525:20;38543:1;38525:20;:::i;:::-;38520:25;;38559:20;38577:1;38559:20;:::i;:::-;38554:25;;38713:1;38645:66;38641:74;38638:1;38635:81;38632:107;;;38719:18;;:::i;:::-;38632:107;38763:1;38760;38756:9;38749:16;;38466:305;;;;:::o;38777:185::-;38817:1;38834:20;38852:1;38834:20;:::i;:::-;38829:25;;38868:20;38886:1;38868:20;:::i;:::-;38863:25;;38907:1;38897:35;;38912:18;;:::i;:::-;38897:35;38954:1;38951;38947:9;38942:14;;38777:185;;;;:::o;38968:191::-;39008:4;39028:20;39046:1;39028:20;:::i;:::-;39023:25;;39062:20;39080:1;39062:20;:::i;:::-;39057:25;;39101:1;39098;39095:8;39092:34;;;39106:18;;:::i;:::-;39092:34;39151:1;39148;39144:9;39136:17;;38968:191;;;;:::o;39165:::-;39205:4;39225:20;39243:1;39225:20;:::i;:::-;39220:25;;39259:20;39277:1;39259:20;:::i;:::-;39254:25;;39298:1;39295;39292:8;39289:34;;;39303:18;;:::i;:::-;39289:34;39348:1;39345;39341:9;39333:17;;39165:191;;;;:::o;39362:96::-;39399:7;39428:24;39446:5;39428:24;:::i;:::-;39417:35;;39362:96;;;:::o;39464:90::-;39498:7;39541:5;39534:13;39527:21;39516:32;;39464:90;;;:::o;39560:149::-;39596:7;39636:66;39629:5;39625:78;39614:89;;39560:149;;;:::o;39715:118::-;39752:7;39792:34;39785:5;39781:46;39770:57;;39715:118;;;:::o;39839:126::-;39876:7;39916:42;39909:5;39905:54;39894:65;;39839:126;;;:::o;39971:77::-;40008:7;40037:5;40026:16;;39971:77;;;:::o;40054:101::-;40090:7;40130:18;40123:5;40119:30;40108:41;;40054:101;;;:::o;40161:154::-;40245:6;40240:3;40235;40222:30;40307:1;40298:6;40293:3;40289:16;40282:27;40161:154;;;:::o;40321:307::-;40389:1;40399:113;40413:6;40410:1;40407:13;40399:113;;;40498:1;40493:3;40489:11;40483:18;40479:1;40474:3;40470:11;40463:39;40435:2;40432:1;40428:10;40423:15;;40399:113;;;40530:6;40527:1;40524:13;40521:101;;;40610:1;40601:6;40596:3;40592:16;40585:27;40521:101;40370:258;40321:307;;;:::o;40634:171::-;40673:3;40696:24;40714:5;40696:24;:::i;:::-;40687:33;;40742:4;40735:5;40732:15;40729:41;;;40750:18;;:::i;:::-;40729:41;40797:1;40790:5;40786:13;40779:20;;40634:171;;;:::o;40811:320::-;40855:6;40892:1;40886:4;40882:12;40872:22;;40939:1;40933:4;40929:12;40960:18;40950:81;;41016:4;41008:6;41004:17;40994:27;;40950:81;41078:2;41070:6;41067:14;41047:18;41044:38;41041:84;;;41097:18;;:::i;:::-;41041:84;40862:269;40811:320;;;:::o;41137:281::-;41220:27;41242:4;41220:27;:::i;:::-;41212:6;41208:40;41350:6;41338:10;41335:22;41314:18;41302:10;41299:34;41296:62;41293:88;;;41361:18;;:::i;:::-;41293:88;41401:10;41397:2;41390:22;41180:238;41137:281;;:::o;41424:233::-;41463:3;41486:24;41504:5;41486:24;:::i;:::-;41477:33;;41532:66;41525:5;41522:77;41519:103;;;41602:18;;:::i;:::-;41519:103;41649:1;41642:5;41638:13;41631:20;;41424:233;;;:::o;41663:176::-;41695:1;41712:20;41730:1;41712:20;:::i;:::-;41707:25;;41746:20;41764:1;41746:20;:::i;:::-;41741:25;;41785:1;41775:35;;41790:18;;:::i;:::-;41775:35;41831:1;41828;41824:9;41819:14;;41663:176;;;;:::o;41845:180::-;41893:77;41890:1;41883:88;41990:4;41987:1;41980:15;42014:4;42011:1;42004:15;42031:180;42079:77;42076:1;42069:88;42176:4;42173:1;42166:15;42200:4;42197:1;42190:15;42217:180;42265:77;42262:1;42255:88;42362:4;42359:1;42352:15;42386:4;42383:1;42376:15;42403:180;42451:77;42448:1;42441:88;42548:4;42545:1;42538:15;42572:4;42569:1;42562:15;42589:180;42637:77;42634:1;42627:88;42734:4;42731:1;42724:15;42758:4;42755:1;42748:15;42775:117;42884:1;42881;42874:12;42898:117;43007:1;43004;42997:12;43021:117;43130:1;43127;43120:12;43144:117;43253:1;43250;43243:12;43267:117;43376:1;43373;43366:12;43390:117;43499:1;43496;43489:12;43513:102;43554:6;43605:2;43601:7;43596:2;43589:5;43585:14;43581:28;43571:38;;43513:102;;;:::o;43621:221::-;43761:34;43757:1;43749:6;43745:14;43738:58;43830:4;43825:2;43817:6;43813:15;43806:29;43621:221;:::o;43848:225::-;43988:34;43984:1;43976:6;43972:14;43965:58;44057:8;44052:2;44044:6;44040:15;44033:33;43848:225;:::o;44079:229::-;44219:34;44215:1;44207:6;44203:14;44196:58;44288:12;44283:2;44275:6;44271:15;44264:37;44079:229;:::o;44314:166::-;44454:18;44450:1;44442:6;44438:14;44431:42;44314:166;:::o;44486:222::-;44626:34;44622:1;44614:6;44610:14;44603:58;44695:5;44690:2;44682:6;44678:15;44671:30;44486:222;:::o;44714:224::-;44854:34;44850:1;44842:6;44838:14;44831:58;44923:7;44918:2;44910:6;44906:15;44899:32;44714:224;:::o;44944:236::-;45084:34;45080:1;45072:6;45068:14;45061:58;45153:19;45148:2;45140:6;45136:15;45129:44;44944:236;:::o;45186:180::-;45326:32;45322:1;45314:6;45310:14;45303:56;45186:180;:::o;45372:244::-;45512:34;45508:1;45500:6;45496:14;45489:58;45581:27;45576:2;45568:6;45564:15;45557:52;45372:244;:::o;45622:174::-;45762:26;45758:1;45750:6;45746:14;45739:50;45622:174;:::o;45802:230::-;45942:34;45938:1;45930:6;45926:14;45919:58;46011:13;46006:2;45998:6;45994:15;45987:38;45802:230;:::o;46038:168::-;46178:20;46174:1;46166:6;46162:14;46155:44;46038:168;:::o;46212:225::-;46352:34;46348:1;46340:6;46336:14;46329:58;46421:8;46416:2;46408:6;46404:15;46397:33;46212:225;:::o;46443:155::-;46583:7;46579:1;46571:6;46567:14;46560:31;46443:155;:::o;46604:182::-;46744:34;46740:1;46732:6;46728:14;46721:58;46604:182;:::o;46792:234::-;46932:34;46928:1;46920:6;46916:14;46909:58;47001:17;46996:2;46988:6;46984:15;46977:42;46792:234;:::o;47032:176::-;47172:28;47168:1;47160:6;47156:14;47149:52;47032:176;:::o;47214:237::-;47354:34;47350:1;47342:6;47338:14;47331:58;47423:20;47418:2;47410:6;47406:15;47399:45;47214:237;:::o;47457:221::-;47597:34;47593:1;47585:6;47581:14;47574:58;47666:4;47661:2;47653:6;47649:15;47642:29;47457:221;:::o;47684:114::-;;:::o;47804:166::-;47944:18;47940:1;47932:6;47928:14;47921:42;47804:166;:::o;47976:238::-;48116:34;48112:1;48104:6;48100:14;48093:58;48185:21;48180:2;48172:6;48168:15;48161:46;47976:238;:::o;48220:179::-;48360:31;48356:1;48348:6;48344:14;48337:55;48220:179;:::o;48405:220::-;48545:34;48541:1;48533:6;48529:14;48522:58;48614:3;48609:2;48601:6;48597:15;48590:28;48405:220;:::o;48631:172::-;48771:24;48767:1;48759:6;48755:14;48748:48;48631:172;:::o;48809:233::-;48949:34;48945:1;48937:6;48933:14;48926:58;49018:16;49013:2;49005:6;49001:15;48994:41;48809:233;:::o;49048:225::-;49188:34;49184:1;49176:6;49172:14;49165:58;49257:8;49252:2;49244:6;49240:15;49233:33;49048:225;:::o;49279:181::-;49419:33;49415:1;49407:6;49403:14;49396:57;49279:181;:::o;49466:234::-;49606:34;49602:1;49594:6;49590:14;49583:58;49675:17;49670:2;49662:6;49658:15;49651:42;49466:234;:::o;49706:232::-;49846:34;49842:1;49834:6;49830:14;49823:58;49915:15;49910:2;49902:6;49898:15;49891:40;49706:232;:::o;49944:221::-;50084:34;50080:1;50072:6;50068:14;50061:58;50153:4;50148:2;50140:6;50136:15;50129:29;49944:221;:::o;50171:122::-;50244:24;50262:5;50244:24;:::i;:::-;50237:5;50234:35;50224:63;;50283:1;50280;50273:12;50224:63;50171:122;:::o;50299:116::-;50369:21;50384:5;50369:21;:::i;:::-;50362:5;50359:32;50349:60;;50405:1;50402;50395:12;50349:60;50299:116;:::o;50421:120::-;50493:23;50510:5;50493:23;:::i;:::-;50486:5;50483:34;50473:62;;50531:1;50528;50521:12;50473:62;50421:120;:::o;50547:122::-;50620:24;50638:5;50620:24;:::i;:::-;50613:5;50610:35;50600:63;;50659:1;50656;50649:12;50600:63;50547:122;:::o
Swarm Source
ipfs://deffadf05db4b62874d905f6ce36ceef5ca52238ab26c9a020c0a51b679b9498
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.