creation_sourcecode: {{
    "language": "Solidity",
    "sources": {
      "NFTMultisender.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.19;\n\ninterface IERC721 {\n    function approve(address to, uint256 tokenId) external;\n    function isApprovedForAll(address owner, address operator) external view returns (bool);\n    function getApproved(uint256 tokenId) external view returns (address);\n    function safeTransferFrom(address from, address to, uint256 tokenId) external;\n}\n\ncontract NFTMultisender {\n\n    function multisendNFTs(\n        address NFTaddress, \n        uint256[] calldata tokenIds, \n        address[] calldata addresses) \n        external {\n        require(tokenIds.length > 0, \"Length is zero\");\n        require(tokenIds.length == addresses.length, \"Lengths do not match\");\n        \n        IERC721 nftContract = IERC721(NFTaddress);\n\n        for( uint256 i = 0; i < tokenIds.length; i++){\n            address approvedAddress = nftContract.getApproved(tokenIds[i]);\n            bool isApprovedForAll = nftContract.isApprovedForAll(msg.sender, address(this));\n            require(approvedAddress == address(this) || isApprovedForAll, \"Contract not approved to transfer this token\");\n\n            nftContract.safeTransferFrom(msg.sender, addresses[i], tokenIds[i]);\n        }\n    }\n\n}"
      }
    },
    "settings": {
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "outputSelection": {
        "*": {
          "*": [
            "evm.bytecode",
            "evm.deployedBytecode",
            "devdoc",
            "userdoc",
            "metadata",
            "abi"
          ]
        }
      }
    }
  }}