// SPDX-License-Identifier: UNLICENSED pragma solidity =0.8.18; import "./ERC721PermitUpgradeable.sol"; import "./ERC721PausableUpgradeable.sol"; import "./SeizablePosition.sol"; import "./ERC721Guard.sol"; /** * @notice Guarded and seizable NFT issued upon liquidity provision. */ abstract contract ERC721Security is ERC721PermitUpgradeable, ERC721PausableUpgradeable, SeizablePosition, ERC721Guard { /** * @notice Initializer for extended contracts. */ function __ERC721Security_init(string memory name_, string memory symbol_, string memory version_) internal onlyInitializing { __ERC165_init_unchained(); __Context_init_unchained(); __SomaContract_init_unchained(); __Accessible_init_unchained(); __Multicall_init_unchained(); __Pausable_init_unchained(); __Guardable__init_unchained(); __SeizablePosition_init_unchained(); __ERC721Guard_init_unchained(); __ERC721Pausable_init_unchained(); __ERC721Security_init_unchained(); __ERC721Enumerable_init_unchained(); __ERC721_init_unchained(name_, symbol_); __ERC721PermitUpgradeable_init_unchained(name_, version_); } /** * @notice Unchained initializer. */ function __ERC721Security_init_unchained() internal onlyInitializing {} /** * @notice Returns a boolean indicating if the contracts are paused. */ function paused() public view virtual override(PausableUpgradeable, SomaContractUpgradeable) returns (bool) { return super.paused(); } /** * @notice Checks if ERC721Guard inherits a given contract interface. * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721PermitUpgradeable, ERC721Upgradeable, SeizablePosition, ERC721Guard) returns (bool) { return super.supportsInterface(interfaceId); } function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721EnumerableUpgradeable, ERC721PausableUpgradeable, ERC721Guard) { super._beforeTokenTransfer(from, to, tokenId); } function _seize(address from, address to, uint256 tokenId) internal override { _transfer(from, to, tokenId); } function _bypassValidate() internal virtual override returns (bool) { return seizeInProgress ? true : false; } uint256[50] private __gap; }