{
  "contractName": "FundingScript",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_VendingMachine",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_TBTCToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_TBTCDepositToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_FeeRebateToken",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_extraData",
          "type": "bytes"
        }
      ],
      "name": "receiveApproval",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.17+commit.d19bba13\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_VendingMachine\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_TBTCToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_TBTCDepositToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_FeeRebateToken\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"receiveApproval\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Wrapper script for VendingMachine.unqualifiedDepositToTbtc This contract implements receiveApproval() and can therefore use approveAndCall(). This pattern combines TBTC Token approval and vendingMachine.unqualifiedDepositToTbtc() in a single transaction.\",\"methods\":{\"receiveApproval(address,uint256,address,bytes)\":{\"details\":\"Implements the approveAndCall receiver interface.\",\"params\":{\"_extraData\":\"Encoded function call to `VendingMachine.unqualifiedDepositToTbtc`.\",\"_from\":\"The owner of the token who approved them for transfer.\",\"_tokenId\":\"Approved TDT for the transfer.\"}}}},\"userdoc\":{\"methods\":{\"receiveApproval(address,uint256,address,bytes)\":{\"notice\":\"Receives approval for a TDT transfer, and calls `VendingMachine.unqualifiedDepositToTbtc` for a user.\"}},\"notice\":\"A one-click script for minting TBTC from an unqualified TDT.\"}},\"settings\":{\"compilationTarget\":{\"/home/runner/work/tbtc/tbtc/solidity/contracts/scripts/FundingScript.sol\":\"FundingScript\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/runner/work/tbtc/tbtc/solidity/contracts/DepositLog.sol\":{\"keccak256\":\"0xd2422abaf64bf2d28f4c0548bc31c3d0e4c5f3e4414486c149b773bea0c9db0a\",\"urls\":[\"bzz-raw://c4b0e3caea108ce67da5922906753dc1a1f87cee923e7c32260239150f2152bb\",\"dweb:/ipfs/QmcHcftf4M6ZyuFG725QiFGHuAtz6zDQZ9HCEaoP5Wb6Fd\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/Deposit.sol\":{\"keccak256\":\"0x4e25c6bfe874c5254659e99b5d87ad0bd6299468106c8f955e973a0431367dec\",\"urls\":[\"bzz-raw://c54c7e956fee91813946745f23d11062a9dd2c07d916979871f7468509295de4\",\"dweb:/ipfs/QmQ1qFjzq9uY7SmdUqzwNM7z8AAnCbji2joqkJYJSBaJyW\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositFunding.sol\":{\"keccak256\":\"0xe223f4e039e347d3eec8eea8d30d6f87f25ab3f8839e96b5da608c6a012db2c2\",\"urls\":[\"bzz-raw://48435948a4b232a3c610f7ac51e5c87a27aa10f92775bc95cd2068dd07b69a70\",\"dweb:/ipfs/Qmd7PeN1uovU8BqyrPuLkKf4U1DENt9S7hFr6G5cXFamim\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositLiquidation.sol\":{\"keccak256\":\"0x6ec98705ac0cfc20f2e94069ba88c74816c40283c47b3086cf619b69d8a15379\",\"urls\":[\"bzz-raw://981e7e1ababfe4bb7bb35251679f59d188348c416af29822794011a0e48f2cd3\",\"dweb:/ipfs/QmTpPQCYP3qzKdcMBLBZGRSM2X6rgR1CZmYDQ7SHP4pjrb\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositRedemption.sol\":{\"keccak256\":\"0xe40c0cbb443715c4f587b78f568348276fabae9a2f77645596367a1f65b1fae5\",\"urls\":[\"bzz-raw://310d07df39ad769b5ffca044a1a589686268d72ac36d568360da3a4a9ab16f93\",\"dweb:/ipfs/QmT9stQ2AVkF7i9nvDSTswhD6EkfNHVCtTmRENsVqYxwso\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositStates.sol\":{\"keccak256\":\"0x0b407fe4cfa56771c7cb0280e58c23e6c79089bb0f39ec9af83855103cfadce0\",\"urls\":[\"bzz-raw://b06c9ff8c10125cd7dcee7167fd081c95248c97c699a4dfc92bf65d68774f5f1\",\"dweb:/ipfs/QmcdTkj1XtJcPhF9pxr56xV4DW3SxGaaiE5PeGxbYVoHL3\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositUtils.sol\":{\"keccak256\":\"0xc18e532fc384f45567abcf7fbe7bccb885308d63ffeed41d9cf845573a289b98\",\"urls\":[\"bzz-raw://7250e8fce13326313e64d2f24e093bd51c9fdba939b8370f64a1fe820814275b\",\"dweb:/ipfs/QmVfX5w4xN6gxoqbdgPeeTbBvFtxxaNYWSknSY7JDtve2b\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/OutsourceDepositLogging.sol\":{\"keccak256\":\"0x8bddca84b4106ea5d865b5e19c0d49f3dc94a7e614c7403ae05074eda01d6ee9\",\"urls\":[\"bzz-raw://65b05f6e04ae46a16194db335ad21dd806d0b07ad571a126b6981896890c8a4c\",\"dweb:/ipfs/QmTF4RgELhXX7pooNKwW8qNY7Sr7dFY7vfueApjTMa99jt\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/interfaces/ITBTCSystem.sol\":{\"keccak256\":\"0xd8530ab1baddbdfbba6c1b03e547375afe79493b9948d645f94fc0da12ec953b\",\"urls\":[\"bzz-raw://713285a0a4d865a37f3770ce848c20f7277e1540c0a8aa43c2ae0966a7c3df9a\",\"dweb:/ipfs/QmaPiXxvySt9UDmQtVGidh8TQ4XJdxY2X61rEBd8346ELi\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/interfaces/ITokenRecipient.sol\":{\"keccak256\":\"0x4ac6830ad44d0b0d70ebabc60150e9c915c7c0bd0129ef868d5d2cd8da0c32bd\",\"urls\":[\"bzz-raw://a5c6465285add41f07a951f90405800a8802e323ea11e9c7bdb5625ce109c7f7\",\"dweb:/ipfs/QmRf7B4WxsS7gbSwUotgQM633BQc2ye7rhYC1RNVFamBfp\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/scripts/FundingScript.sol\":{\"keccak256\":\"0x7c6d90d97856a23bfe8c230718a72d94abec5f2dc47b6e4884588196dfe303ea\",\"urls\":[\"bzz-raw://e0cc2e02bdae0b26f708b757afc8dc21890acb4be179ba4b8ebeedc4d0455df8\",\"dweb:/ipfs/QmTajnmqtmS1bD7YWA5j6mqajWTkX79zWwRfzyiduwewQN\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/system/DepositFactoryAuthority.sol\":{\"keccak256\":\"0xd8e81ec58dea6a6bcc554e8c7e6c58898ab11a410c3f61224330cbe833992add\",\"urls\":[\"bzz-raw://9d2b23cf1e2f98eb77acf6ae62933e48494113e1d6091146459fd79a635f1dcf\",\"dweb:/ipfs/QmPK3nTmcrScDavDSXGHvonhfik3BJ55qhwSnUmhzL5QUE\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/system/FeeRebateToken.sol\":{\"keccak256\":\"0x3d9980b4b18be7e69364b93581d86d08dd2c66fc76b2f9f0af0b4911dc648318\",\"urls\":[\"bzz-raw://751dae1cd68c285a22b513d515074eb6704e11e00ba8196f360d47dc8551dd86\",\"dweb:/ipfs/QmRe5u8bjSd2CMvjgWMzpeea3VdcqEGwAP91zvjxgur8o8\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/system/TBTCConstants.sol\":{\"keccak256\":\"0x74833fb25cf9f24716d563c8fad0fd6172d03577dc85ab4271ca4754285ee915\",\"urls\":[\"bzz-raw://62d37b71546ea52f0c86170b588b021a488785e8570f904f0d2bcfecee93f6a7\",\"dweb:/ipfs/QmePuD631VYpEproKbap8cPXmWeb5mYjU6bwEWnxKCVWbz\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/system/TBTCDepositToken.sol\":{\"keccak256\":\"0xd9238bbd83f5352706426103a0708ad7c00ffbd90340a4b3bab03d2c5371e48b\",\"urls\":[\"bzz-raw://f1fc94f00aeabd49bd0f8ecf372213e83c949454c28fa672a46dd12d9a0b4311\",\"dweb:/ipfs/QmaCzqi2g4GSvzHDDES61FauDmdTGGyZrCkK1BdxpMqYa3\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/system/TBTCSystemAuthority.sol\":{\"keccak256\":\"0xc072c71402f122e3ae148000b95559169cb39b8752977817f4f88b372e7d77dd\",\"urls\":[\"bzz-raw://9c91b71602bf36f66d6ab24156777a2ef18c027f09055232011f9012387e6c70\",\"dweb:/ipfs/QmYAEZ8ithnhVcdCt76mqeJg6P8ZY3VejsV7pQNvMMFqc2\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/system/TBTCToken.sol\":{\"keccak256\":\"0x167b07029df8d350996d7f82d853437d1a2562401eeac98037c2eb4c5f295319\",\"urls\":[\"bzz-raw://7d2601ac8dcd5d59b3e479a61262de2162c96ed7ad1cd161331e2e4500b8346a\",\"dweb:/ipfs/QmWVjBSvHFg9W5zsSxgdpNSYKgfLa28fr3mPjjKQaDBxmk\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/system/VendingMachine.sol\":{\"keccak256\":\"0x26caaccd71277d1807d40553f4e7291307d4db9c292bc28a9d8cbee94b5c3e40\",\"urls\":[\"bzz-raw://b7ec73a87fe902bfc5d0fcda5fcc16d2dc025e685fc7b7876ec1a1da65cf0ede\",\"dweb:/ipfs/QmcBkU6Ze8T3ewqZZmUiniTKZkVaQTaNFejXXRgvfiTrPE\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/system/VendingMachineAuthority.sol\":{\"keccak256\":\"0x7ad8a2cee5e6bbc187d04b147dc0d2bc2ae12bb8c3680870be9013dd5543bfd6\",\"urls\":[\"bzz-raw://733f2370c788437b0034c40a8df07f4714009769ed8134a9c656e2a103996687\",\"dweb:/ipfs/Qma9LAGQDzyUvsbhLx3FUKRCx3FmnoZuMxG4SUdjLr8bRm\"]},\"@keep-network/keep-ecdsa/contracts/api/IBondedECDSAKeep.sol\":{\"keccak256\":\"0x8f1edc0a2dfb4d167d190989ebc1c4256664e50ec1f82dfaeb25fa5d4a76a35a\",\"urls\":[\"bzz-raw://e815868907cc082fee1e3964be7de12da2161863d68dd1532a74e3a97bacf533\",\"dweb:/ipfs/Qmd8DqutKSwxh38WWA1ydftNkiAxSD9sqxa7qf1asHKA8c\"]},\"@summa-tx/bitcoin-spv-sol/contracts/BTCUtils.sol\":{\"keccak256\":\"0x461cc52e40ba53e646f5c9505b992baa3d5b3c98ae5718561e61b3bc6c726d52\",\"urls\":[\"bzz-raw://90cf2e608b660671642a616ec044e2a39e8ceb7079315b6133ec978c47af9f98\",\"dweb:/ipfs/QmX4hyYS99RYWiQ7BwLXuvQpU5x62YbjJWLgYFwrPkYbzT\"]},\"@summa-tx/bitcoin-spv-sol/contracts/BytesLib.sol\":{\"keccak256\":\"0x43451fdb4c4d55c01122411a4cf89a5c544c2bd4b646ee1d1f306626275324bf\",\"urls\":[\"bzz-raw://db93f07c32fa294d416aaab1b19a205772f2a3fa573fd380e5641e7770193ccf\",\"dweb:/ipfs/QmVE4y8cFKWZGKEfTM9Q3YreAArpMTTALHNr2tcvcNDnbi\"]},\"@summa-tx/bitcoin-spv-sol/contracts/CheckBitcoinSigs.sol\":{\"keccak256\":\"0x2fcbfa2440f69e346d5e14d960b14498f6484f83713fe7cec1ecf4abea3835a1\",\"urls\":[\"bzz-raw://4a385ef55a53dd0dcd1b687a47dbf6785580883a0be0cb10c617c338a35f3a8b\",\"dweb:/ipfs/QmZp9AT146beL3SoETJCWsJ4zzAZQavy9oGCYPiwAofEtq\"]},\"@summa-tx/bitcoin-spv-sol/contracts/SafeMath.sol\":{\"keccak256\":\"0x22d34c04c68c2a77ee83e2ef3756f6e6bad6ad675560d777e612315d7eb83935\",\"urls\":[\"bzz-raw://b642c61be1d34e153e4f9cc139291fa26f4ecf31a3acc5b960aad20f4f689eeb\",\"dweb:/ipfs/QmWADdVTCSyvtgb76AxFFkAr9h9jbY57Mj5X6xiEqCqmMu\"]},\"@summa-tx/bitcoin-spv-sol/contracts/ValidateSPV.sol\":{\"keccak256\":\"0x9af3b3f36de63e95977f09548617989e391b3c511cf0383ee35cefd5da7d3bfd\",\"urls\":[\"bzz-raw://97ce025c7d18540e4c24578db61cc5e33828be8e9a82b5cb5f46c99212f75ed1\",\"dweb:/ipfs/QmRrdWnd95rgCZzeaNiU4KUcGe1j7oDBj7LatpXhUmjbEE\"]},\"openzeppelin-solidity/contracts/drafts/Counters.sol\":{\"keccak256\":\"0x5eb69360d3441ab2ee799bd7c007cccbffb0896f12b2dfe1456193e2aa180a11\",\"urls\":[\"bzz-raw://072e8b5a1b5acfc2acba9b6fb87d1dc57065aad44572617ad46b014074969eb3\",\"dweb:/ipfs/QmVTDHUriaxBJqiWCWgWC8vYaYYfXSz883LsowzTx1DcpK\"]},\"openzeppelin-solidity/contracts/introspection/ERC165.sol\":{\"keccak256\":\"0xac2eacd7e7762e275442f28f21d821544df5aae2ed7698af13be8c41b7005e2e\",\"urls\":[\"bzz-raw://8bdbefb642e7b08535c66bbf074e576cfef2300cdf910c1e0b211f6393833a28\",\"dweb:/ipfs/QmQhfx2Ufr8a2gFXm3KogL66xGgAuAWMwcamkWFKGG6Vya\"]},\"openzeppelin-solidity/contracts/introspection/IERC165.sol\":{\"keccak256\":\"0x661553e43d7c4fbb2de504e5999fd5c104d367488350ed5bf023031bd1ba5ac5\",\"urls\":[\"bzz-raw://b40442c5b350b57b88a081a1eacd2bac962d4ecc1f029f5447a18986f08f6f14\",\"dweb:/ipfs/QmV7wjtRf11ibUHh4g8JjuhMpy68pPhV95L2y46UBoRfsZ\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x4ccf2d7b51873db1ccfd54ca2adae5eac3b184f9699911ed4490438419f1c690\",\"urls\":[\"bzz-raw://d62d769b2219d5de39013093412623e624fa887f871826ea3bae6052ee893610\",\"dweb:/ipfs/QmV3yVktya1s617QmuzQR2CfuJgUi3dR2xEZY9ecmqZ2G1\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x852793a3c2f86d336a683b30d688ec3dcfc57451af5a2bf5975cda3b7191a901\",\"urls\":[\"bzz-raw://4f5b57664069671648fb81f55b0082faecdf1b2f159eec6b1fa6cef9b7d73bc5\",\"dweb:/ipfs/QmcyytaLs7zFdb4Uu7C5PmQRhQdB3wA3fUdkV6mkYfdDFH\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20Detailed.sol\":{\"keccak256\":\"0xc61b3603089b09a730d8ca72e9133a496cc4405da40e9b87c12f073245d774bf\",\"urls\":[\"bzz-raw://de8bb0003d53de236913f0e0102e7a9d015e02098f2495edd000f207fe2be2f4\",\"dweb:/ipfs/QmbtwNwAJEehWWL7yGGyyMoenQvcqtz91pqLgQPpLRoLYC\"]},\"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x90e8c2521653bbb1768b05889c5760031e688d9cd361f167489b89215e201b95\",\"urls\":[\"bzz-raw://d0abb99bb8bfc2bc0a89902b8ed1dc0442ad08cc78cee64c291b3df6a27bcccc\",\"dweb:/ipfs/QmP5NaEwZthQeM2ESz4WTT3osrP7jhbvu7ocbttBi2JAw6\"]},\"openzeppelin-solidity/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0xf151df411bbf4eaef1fc8e8480cd10c2cd985f1a36517e63981517610213efc1\",\"urls\":[\"bzz-raw://2a277b3cc3a1a03af5c039bc75cd16bb2d23b529cb2564cc0bea1b1e0eb4dd68\",\"dweb:/ipfs/QmNRxggY8qmjjuLnxggRqE8uBueuCktLwi9YYHagWoaEJ8\"]},\"openzeppelin-solidity/contracts/token/ERC721/ERC721Metadata.sol\":{\"keccak256\":\"0xe5e28b1a405164faa98f8ecd8ed2b00907b89e3d58b2b2bb8ac8b12bc5714489\",\"urls\":[\"bzz-raw://0d5d3f0caa7e7ec91f8a2894e1a6a3513a0c79aa91a498ebf8fdbdd07c12286f\",\"dweb:/ipfs/QmP7r4jQMRxXb5JHy5V9bgMz5FmTezcSDd7ivyzJN88pTR\"]},\"openzeppelin-solidity/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0xce48937a8007c580b8e2e35705738c922dd17540de89ebee6df06d2917a3f9fc\",\"urls\":[\"bzz-raw://1d117265103ee3efcd454d3aafb3e79a115f9bca6dec78a1229558eb30d14d05\",\"dweb:/ipfs/QmTm5Z1c7zzPiG3Cfj1eBMB23AeiEFGgvmTFQVaeEWXVCw\"]},\"openzeppelin-solidity/contracts/token/ERC721/IERC721Metadata.sol\":{\"keccak256\":\"0x2b2b99dc7fe8fcd1f9427d00822b99cbc683dc21f5dd7532bd7e2281fd2c2ca2\",\"urls\":[\"bzz-raw://a8024c00e34efaf328f9592e76823c79f25fa0f6006bdf4a1e7fea204afd4773\",\"dweb:/ipfs/QmZns9jTr7843njq3J2iL2LLoWXK5mdzN1bDGd9GL3ahhD\"]},\"openzeppelin-solidity/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xadbfb7028fb0f851dc848a48b9e54e7c89ffd2c2edc12fa4ba9bb383dfaa83d9\",\"urls\":[\"bzz-raw://90dceab42713246639100b87d6650037d68e4a2ab2dd4b5768c3ed35d6b3a4a0\",\"dweb:/ipfs/QmQ42UW5nchMoYP9bU9F1AJga5chG8j92fCPkURpiDKsCu\"]},\"openzeppelin-solidity/contracts/utils/Address.sol\":{\"keccak256\":\"0xf3358e5819ca73357abd6c90bdfffd0474af54364897f6b3e3234c4b71fbe9a1\",\"urls\":[\"bzz-raw://75ae8d04454d1511a2ed986cc8585736f05c5c25280683b3d24712a9f414a4bf\",\"dweb:/ipfs/Qmb3kNCoBUZdah1AgBBD4zMk898j5Qw8ahT1w5cCMYp5Y3\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b5060405161067e38038061067e8339818101604052608081101561003357600080fd5b50805160208201516040830151606090930151600180546001600160a01b039485166001600160a01b03199182161790915560008054938516938216939093179092556002805494841694831694909417909355600380549290931691161790556105db806100a36000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80638f4ffcb114610030575b600080fd5b6100f56004803603608081101561004657600080fd5b6001600160a01b03823581169260208101359260408201359092169181019060808101606082013564010000000081111561008057600080fd5b82018360208201111561009257600080fd5b803590602001918460018302840111640100000000831117156100b457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506100f7945050505050565b005b6002546001600160a01b031633146101405760405162461bcd60e51b815260040180806020018281038252602c815260200180610538602c913960400191505060405180910390fd5b600254604080516323b872dd60e01b81526001600160a01b03878116600483015230602483015260448201879052915191909216916323b872dd91606480830192600092919082900301818387803b15801561019b57600080fd5b505af11580156101af573d6000803e3d6000fd5b50506002546001546040805163095ea7b360e01b81526001600160a01b03928316600482015260248101899052905191909216935063095ea7b39250604480830192600092919082900301818387803b15801561020b57600080fd5b505af115801561021f573d6000803e3d6000fd5b50505050602081015160ff198116906001600160e01b03191663efa4b19960e01b1461027c5760405162461bcd60e51b81526004018080602001828103825260438152602001806105646043913960600191505060405180910390fd5b60015460405183516000926060926001600160a01b0390911691869190819060208401908083835b602083106102c35780518252601f1990920191602091820191016102a4565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610325576040519150601f19603f3d011682016040523d82523d6000602084013e61032a565b606091505b5090925090506044810180836103be5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561038357818101518382015260200161036b565b50505050905090810190601f1680156103b05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600054604080516370a0823160e01b815230600482015290516001600160a01b039092169163a9059cbb918b9184916370a08231916024808301926020929190829003018186803b15801561041357600080fd5b505afa158015610427573d6000803e3d6000fd5b505050506040513d602081101561043d57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561048e57600080fd5b505af11580156104a2573d6000803e3d6000fd5b505050506040513d60208110156104b857600080fd5b5050600354604080516323b872dd60e01b81523060048201526001600160a01b038b81166024830152604482018b9052915191909216916323b872dd91606480830192600092919082900301818387803b15801561051557600080fd5b505af1158015610529573d6000803e3d6000fd5b50505050505050505050505056fe4f6e6c7920746f6b656e20636f6e74726163742063616e2063616c6c2072656365697665417070726f76616c426164205f657874726144617461207369676e61747572652e2043616c6c206d75737420626520746f20756e7175616c69666965644465706f736974546f546274632ea265627a7a72315820b80c6d277346556cc47d4615d03940144de9415d7ce0fb71a2c11c4cc2283edd64736f6c63430005110032",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c80638f4ffcb114610030575b600080fd5b6100f56004803603608081101561004657600080fd5b6001600160a01b03823581169260208101359260408201359092169181019060808101606082013564010000000081111561008057600080fd5b82018360208201111561009257600080fd5b803590602001918460018302840111640100000000831117156100b457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506100f7945050505050565b005b6002546001600160a01b031633146101405760405162461bcd60e51b815260040180806020018281038252602c815260200180610538602c913960400191505060405180910390fd5b600254604080516323b872dd60e01b81526001600160a01b03878116600483015230602483015260448201879052915191909216916323b872dd91606480830192600092919082900301818387803b15801561019b57600080fd5b505af11580156101af573d6000803e3d6000fd5b50506002546001546040805163095ea7b360e01b81526001600160a01b03928316600482015260248101899052905191909216935063095ea7b39250604480830192600092919082900301818387803b15801561020b57600080fd5b505af115801561021f573d6000803e3d6000fd5b50505050602081015160ff198116906001600160e01b03191663efa4b19960e01b1461027c5760405162461bcd60e51b81526004018080602001828103825260438152602001806105646043913960600191505060405180910390fd5b60015460405183516000926060926001600160a01b0390911691869190819060208401908083835b602083106102c35780518252601f1990920191602091820191016102a4565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610325576040519150601f19603f3d011682016040523d82523d6000602084013e61032a565b606091505b5090925090506044810180836103be5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561038357818101518382015260200161036b565b50505050905090810190601f1680156103b05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600054604080516370a0823160e01b815230600482015290516001600160a01b039092169163a9059cbb918b9184916370a08231916024808301926020929190829003018186803b15801561041357600080fd5b505afa158015610427573d6000803e3d6000fd5b505050506040513d602081101561043d57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561048e57600080fd5b505af11580156104a2573d6000803e3d6000fd5b505050506040513d60208110156104b857600080fd5b5050600354604080516323b872dd60e01b81523060048201526001600160a01b038b81166024830152604482018b9052915191909216916323b872dd91606480830192600092919082900301818387803b15801561051557600080fd5b505af1158015610529573d6000803e3d6000fd5b50505050505050505050505056fe4f6e6c7920746f6b656e20636f6e74726163742063616e2063616c6c2072656365697665417070726f76616c426164205f657874726144617461207369676e61747572652e2043616c6c206d75737420626520746f20756e7175616c69666965644465706f736974546f546274632ea265627a7a72315820b80c6d277346556cc47d4615d03940144de9415d7ce0fb71a2c11c4cc2283edd64736f6c63430005110032",
  "sourceMap": "680:3017:16:-;;;863:384;8:9:-1;5:2;;;30:1;27;20:12;5:2;863:384:16;;;;;;;;;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;863:384:16;;;;;;;;;;;;;;;1027:14;:48;;-1:-1:-1;;;;;1027:48:16;;;-1:-1:-1;;;;;;1027:48:16;;;;;;;:14;1085:33;;;;;;;;;;;;;;;1128:16;:54;;;;;;;;;;;;;;;1192:14;:48;;;;;;;;;;;680:3017;;;;;;",
  "deployedSourceMap": "680:3017:16:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;680:3017:16;;;;;;;;;;;;;;;;;;;1659:2036;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;1659:2036:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;1659:2036:16;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1659:2036:16;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;1659:2036:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;1659:2036:16;;-1:-1:-1;1659:2036:16;;-1:-1:-1;;;;;1659:2036:16:i;:::-;;;1906:16;;-1:-1:-1;;;;;1906:16:16;1884:10;:39;1863:130;;;;-1:-1:-1;;;1863:130:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2004:16;;:61;;;-1:-1:-1;;;2004:61:16;;-1:-1:-1;;;;;2004:61:16;;;;;;;2049:4;2004:61;;;;;;;;;;;;:16;;;;;:29;;:61;;;;;:16;;:61;;;;;;;:16;;:61;;;5:2:-1;;;;30:1;27;20:12;5:2;2004:61:16;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;2075:16:16;;;2108:14;2075:59;;;-1:-1:-1;;;2075:59:16;;-1:-1:-1;;;;;2108:14:16;;;2075:59;;;;;;;;;;;;:16;;;;;-1:-1:-1;2075:24:16;;-1:-1:-1;2075:59:16;;;;;:16;;:59;;;;;;;:16;;:59;;;5:2:-1;;;;30:1;27;20:12;5:2;2075:59:16;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;;2317:4:16;2301:21;;2295:28;-1:-1:-1;;2291:44:16;;;-1:-1:-1;;;;;;2375:85:16;-1:-1:-1;;;2375:85:16;2354:199;;;;-1:-1:-1;;;2354:199:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3003:14;;2995:40;;;;2942:12;;2956:23;;-1:-1:-1;;;;;3003:14:16;;;;3024:10;;2995:40;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2995:40:16;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;-1:-1;2941:94:16;;-1:-1:-1;2941:94:16;-1:-1:-1;3421:4:16;3405:21;;;2941:94;3446:31;;;;-1:-1:-1;;;3446:31:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3446:31:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3549:9:16;;3575:34;;;-1:-1:-1;;;3575:34:16;;3603:4;3575:34;;;;;;-1:-1:-1;;;;;3549:9:16;;;;:18;;3568:5;;3549:9;;3575:19;;:34;;;;;;;;;;;;;;3549:9;3575:34;;;5:2:-1;;;;30:1;27;20:12;5:2;3575:34:16;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3575:34:16;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3575:34:16;3549:61;;;-1:-1:-1;;;;;;3549:61:16;;;;;;;-1:-1:-1;;;;;3549:61:16;;;;;;;;;;;;;;;;;;;;3575:34;;3549:61;;;;;;;-1:-1:-1;3549:61:16;;;;5:2:-1;;;;30:1;27;20:12;5:2;3549:61:16;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3549:61:16;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;3620:14:16;;:68;;;-1:-1:-1;;;3620:68:16;;3656:4;3620:68;;;;-1:-1:-1;;;;;3620:68:16;;;;;;;;;;;;;;;:14;;;;;:27;;:68;;;;;:14;;:68;;;;;;;:14;;:68;;;5:2:-1;;;;30:1;27;20:12;5:2;3620:68:16;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3620:68:16;;;;1659:2036;;;;;;;;:::o",
  "source": "pragma solidity 0.5.17;\n\nimport {ITokenRecipient} from \"../interfaces/ITokenRecipient.sol\";\nimport {TBTCDepositToken} from \"../system/TBTCDepositToken.sol\";\nimport {TBTCToken} from \"../system/TBTCToken.sol\";\nimport {FeeRebateToken} from \"../system/FeeRebateToken.sol\";\nimport {VendingMachine} from \"../system/VendingMachine.sol\";\n\n/// @notice A one-click script for minting TBTC from an unqualified TDT.\n/// @dev Wrapper script for VendingMachine.unqualifiedDepositToTbtc\n/// This contract implements receiveApproval() and can therefore use\n/// approveAndCall(). This pattern combines TBTC Token approval and\n/// vendingMachine.unqualifiedDepositToTbtc() in a single transaction.\ncontract FundingScript is ITokenRecipient {\n    TBTCToken tbtcToken;\n    VendingMachine vendingMachine;\n    TBTCDepositToken tbtcDepositToken;\n    FeeRebateToken feeRebateToken;\n\n    constructor(\n        address _VendingMachine,\n        address _TBTCToken,\n        address _TBTCDepositToken,\n        address _FeeRebateToken\n    ) public {\n        vendingMachine = VendingMachine(_VendingMachine);\n        tbtcToken = TBTCToken(_TBTCToken);\n        tbtcDepositToken = TBTCDepositToken(_TBTCDepositToken);\n        feeRebateToken = FeeRebateToken(_FeeRebateToken);\n    }\n\n    /// @notice Receives approval for a TDT transfer, and calls `VendingMachine.unqualifiedDepositToTbtc` for a user.\n    /// @dev Implements the approveAndCall receiver interface.\n    /// @param _from The owner of the token who approved them for transfer.\n    /// @param _tokenId Approved TDT for the transfer.\n    /// @param _extraData Encoded function call to `VendingMachine.unqualifiedDepositToTbtc`.\n    function receiveApproval(\n        address _from,\n        uint256 _tokenId,\n        address,\n        bytes memory _extraData\n    ) public {\n        // not external to allow bytes memory parameters\n        require(\n            msg.sender == address(tbtcDepositToken),\n            \"Only token contract can call receiveApproval\"\n        );\n\n        tbtcDepositToken.transferFrom(_from, address(this), _tokenId);\n        tbtcDepositToken.approve(address(vendingMachine), _tokenId);\n\n        // Verify _extraData is a call to unqualifiedDepositToTbtc.\n        bytes4 functionSignature;\n        assembly {\n            functionSignature := and(mload(add(_extraData, 0x20)), not(0xff))\n        }\n        require(\n            functionSignature ==\n                vendingMachine.unqualifiedDepositToTbtc.selector,\n            \"Bad _extraData signature. Call must be to unqualifiedDepositToTbtc.\"\n        );\n\n        // Call the VendingMachine.\n        // We could explictly encode the call to vending machine, but this would\n        // involve manually parsing _extraData and allocating variables.\n        // We capture the `returnData` in order to forward any nested revert message\n        // from the contract call.\n        /* solium-disable-next-line security/no-low-level-calls */\n        (bool success, bytes memory returnData) =\n            address(vendingMachine).call(_extraData);\n\n        string memory revertMessage;\n        assembly {\n            // A revert message is ABI-encoded as a call to Error(string).\n            // Slicing the Error() signature (4 bytes) and Data offset (4 bytes)\n            // leaves us with a pre-encoded string.\n            // We also slice off the ABI-coded length of returnData (32).\n            revertMessage := add(returnData, 0x44)\n        }\n\n        require(success, revertMessage);\n\n        // Transfer the TBTC and feeRebateToken to the user.\n        tbtcToken.transfer(_from, tbtcToken.balanceOf(address(this)));\n        feeRebateToken.transferFrom(address(this), _from, uint256(_tokenId));\n    }\n}\n",
  "sourcePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/scripts/FundingScript.sol",
  "ast": {
    "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/scripts/FundingScript.sol",
    "exportedSymbols": {
      "FundingScript": [
        6067
      ]
    },
    "id": 6068,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 5912,
        "literals": [
          "solidity",
          "0.5",
          ".17"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:16"
      },
      {
        "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/interfaces/ITokenRecipient.sol",
        "file": "../interfaces/ITokenRecipient.sol",
        "id": 5914,
        "nodeType": "ImportDirective",
        "scope": 6068,
        "sourceUnit": 5526,
        "src": "25:66:16",
        "symbolAliases": [
          {
            "foreign": 5913,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/system/TBTCDepositToken.sol",
        "file": "../system/TBTCDepositToken.sol",
        "id": 5916,
        "nodeType": "ImportDirective",
        "scope": 6068,
        "sourceUnit": 6845,
        "src": "92:64:16",
        "symbolAliases": [
          {
            "foreign": 5915,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/system/TBTCToken.sol",
        "file": "../system/TBTCToken.sol",
        "id": 5918,
        "nodeType": "ImportDirective",
        "scope": 6068,
        "sourceUnit": 8562,
        "src": "157:50:16",
        "symbolAliases": [
          {
            "foreign": 5917,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/system/FeeRebateToken.sol",
        "file": "../system/FeeRebateToken.sol",
        "id": 5920,
        "nodeType": "ImportDirective",
        "scope": 6068,
        "sourceUnit": 6301,
        "src": "208:60:16",
        "symbolAliases": [
          {
            "foreign": 5919,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/system/VendingMachine.sol",
        "file": "../system/VendingMachine.sol",
        "id": 5922,
        "nodeType": "ImportDirective",
        "scope": 6068,
        "sourceUnit": 9124,
        "src": "269:60:16",
        "symbolAliases": [
          {
            "foreign": 5921,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 5923,
              "name": "ITokenRecipient",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5525,
              "src": "706:15:16",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ITokenRecipient_$5525",
                "typeString": "contract ITokenRecipient"
              }
            },
            "id": 5924,
            "nodeType": "InheritanceSpecifier",
            "src": "706:15:16"
          }
        ],
        "contractDependencies": [
          5525
        ],
        "contractKind": "contract",
        "documentation": "@notice A one-click script for minting TBTC from an unqualified TDT.\n @dev Wrapper script for VendingMachine.unqualifiedDepositToTbtc\n This contract implements receiveApproval() and can therefore use\n approveAndCall(). This pattern combines TBTC Token approval and\n vendingMachine.unqualifiedDepositToTbtc() in a single transaction.",
        "fullyImplemented": true,
        "id": 6067,
        "linearizedBaseContracts": [
          6067,
          5525
        ],
        "name": "FundingScript",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 5926,
            "name": "tbtcToken",
            "nodeType": "VariableDeclaration",
            "scope": 6067,
            "src": "728:19:16",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_TBTCToken_$8561",
              "typeString": "contract TBTCToken"
            },
            "typeName": {
              "contractScope": null,
              "id": 5925,
              "name": "TBTCToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8561,
              "src": "728:9:16",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TBTCToken_$8561",
                "typeString": "contract TBTCToken"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 5928,
            "name": "vendingMachine",
            "nodeType": "VariableDeclaration",
            "scope": 6067,
            "src": "753:29:16",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_VendingMachine_$9123",
              "typeString": "contract VendingMachine"
            },
            "typeName": {
              "contractScope": null,
              "id": 5927,
              "name": "VendingMachine",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9123,
              "src": "753:14:16",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_VendingMachine_$9123",
                "typeString": "contract VendingMachine"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 5930,
            "name": "tbtcDepositToken",
            "nodeType": "VariableDeclaration",
            "scope": 6067,
            "src": "788:33:16",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_TBTCDepositToken_$6844",
              "typeString": "contract TBTCDepositToken"
            },
            "typeName": {
              "contractScope": null,
              "id": 5929,
              "name": "TBTCDepositToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6844,
              "src": "788:16:16",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TBTCDepositToken_$6844",
                "typeString": "contract TBTCDepositToken"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 5932,
            "name": "feeRebateToken",
            "nodeType": "VariableDeclaration",
            "scope": 6067,
            "src": "827:29:16",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_FeeRebateToken_$6300",
              "typeString": "contract FeeRebateToken"
            },
            "typeName": {
              "contractScope": null,
              "id": 5931,
              "name": "FeeRebateToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6300,
              "src": "827:14:16",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_FeeRebateToken_$6300",
                "typeString": "contract FeeRebateToken"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5967,
              "nodeType": "Block",
              "src": "1017:230:16",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5947,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 5943,
                      "name": "vendingMachine",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5928,
                      "src": "1027:14:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_VendingMachine_$9123",
                        "typeString": "contract VendingMachine"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 5945,
                          "name": "_VendingMachine",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5934,
                          "src": "1059:15:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 5944,
                        "name": "VendingMachine",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9123,
                        "src": "1044:14:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_VendingMachine_$9123_$",
                          "typeString": "type(contract VendingMachine)"
                        }
                      },
                      "id": 5946,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1044:31:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_VendingMachine_$9123",
                        "typeString": "contract VendingMachine"
                      }
                    },
                    "src": "1027:48:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_VendingMachine_$9123",
                      "typeString": "contract VendingMachine"
                    }
                  },
                  "id": 5948,
                  "nodeType": "ExpressionStatement",
                  "src": "1027:48:16"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5953,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 5949,
                      "name": "tbtcToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5926,
                      "src": "1085:9:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_TBTCToken_$8561",
                        "typeString": "contract TBTCToken"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 5951,
                          "name": "_TBTCToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5936,
                          "src": "1107:10:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 5950,
                        "name": "TBTCToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8561,
                        "src": "1097:9:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_TBTCToken_$8561_$",
                          "typeString": "type(contract TBTCToken)"
                        }
                      },
                      "id": 5952,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1097:21:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_TBTCToken_$8561",
                        "typeString": "contract TBTCToken"
                      }
                    },
                    "src": "1085:33:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_TBTCToken_$8561",
                      "typeString": "contract TBTCToken"
                    }
                  },
                  "id": 5954,
                  "nodeType": "ExpressionStatement",
                  "src": "1085:33:16"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5959,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 5955,
                      "name": "tbtcDepositToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5930,
                      "src": "1128:16:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_TBTCDepositToken_$6844",
                        "typeString": "contract TBTCDepositToken"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 5957,
                          "name": "_TBTCDepositToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5938,
                          "src": "1164:17:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 5956,
                        "name": "TBTCDepositToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6844,
                        "src": "1147:16:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_TBTCDepositToken_$6844_$",
                          "typeString": "type(contract TBTCDepositToken)"
                        }
                      },
                      "id": 5958,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1147:35:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_TBTCDepositToken_$6844",
                        "typeString": "contract TBTCDepositToken"
                      }
                    },
                    "src": "1128:54:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_TBTCDepositToken_$6844",
                      "typeString": "contract TBTCDepositToken"
                    }
                  },
                  "id": 5960,
                  "nodeType": "ExpressionStatement",
                  "src": "1128:54:16"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5965,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 5961,
                      "name": "feeRebateToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5932,
                      "src": "1192:14:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_FeeRebateToken_$6300",
                        "typeString": "contract FeeRebateToken"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 5963,
                          "name": "_FeeRebateToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5940,
                          "src": "1224:15:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 5962,
                        "name": "FeeRebateToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6300,
                        "src": "1209:14:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_FeeRebateToken_$6300_$",
                          "typeString": "type(contract FeeRebateToken)"
                        }
                      },
                      "id": 5964,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1209:31:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_FeeRebateToken_$6300",
                        "typeString": "contract FeeRebateToken"
                      }
                    },
                    "src": "1192:48:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_FeeRebateToken_$6300",
                      "typeString": "contract FeeRebateToken"
                    }
                  },
                  "id": 5966,
                  "nodeType": "ExpressionStatement",
                  "src": "1192:48:16"
                }
              ]
            },
            "documentation": null,
            "id": 5968,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5941,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5934,
                  "name": "_VendingMachine",
                  "nodeType": "VariableDeclaration",
                  "scope": 5968,
                  "src": "884:23:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5933,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "884:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5936,
                  "name": "_TBTCToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 5968,
                  "src": "917:18:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5935,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "917:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5938,
                  "name": "_TBTCDepositToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 5968,
                  "src": "945:25:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5937,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "945:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5940,
                  "name": "_FeeRebateToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 5968,
                  "src": "980:23:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5939,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "980:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "874:135:16"
            },
            "returnParameters": {
              "id": 5942,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1017:0:16"
            },
            "scope": 6067,
            "src": "863:384:16",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6065,
              "nodeType": "Block",
              "src": "1796:1899:16",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 5985,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 5980,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18360,
                            "src": "1884:3:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 5981,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1884:10:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5983,
                              "name": "tbtcDepositToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5930,
                              "src": "1906:16:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_TBTCDepositToken_$6844",
                                "typeString": "contract TBTCDepositToken"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_TBTCDepositToken_$6844",
                                "typeString": "contract TBTCDepositToken"
                              }
                            ],
                            "id": 5982,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1898:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 5984,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1898:25:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1884:39:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f6e6c7920746f6b656e20636f6e74726163742063616e2063616c6c2072656365697665417070726f76616c",
                        "id": 5986,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1937:46:16",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5ad58abfd7682657d2caeadc3413ef383abfb8158a9ea3126c46a6e085548c17",
                          "typeString": "literal_string \"Only token contract can call receiveApproval\""
                        },
                        "value": "Only token contract can call receiveApproval"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5ad58abfd7682657d2caeadc3413ef383abfb8158a9ea3126c46a6e085548c17",
                          "typeString": "literal_string \"Only token contract can call receiveApproval\""
                        }
                      ],
                      "id": 5979,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "1863:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5987,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1863:130:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5988,
                  "nodeType": "ExpressionStatement",
                  "src": "1863:130:16"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5992,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5970,
                        "src": "2034:5:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5994,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18480,
                            "src": "2049:4:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_FundingScript_$6067",
                              "typeString": "contract FundingScript"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_FundingScript_$6067",
                              "typeString": "contract FundingScript"
                            }
                          ],
                          "id": 5993,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2041:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 5995,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2041:13:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5996,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5972,
                        "src": "2056:8:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5989,
                        "name": "tbtcDepositToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5930,
                        "src": "2004:16:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_TBTCDepositToken_$6844",
                          "typeString": "contract TBTCDepositToken"
                        }
                      },
                      "id": 5991,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transferFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17730,
                      "src": "2004:29:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256) external"
                      }
                    },
                    "id": 5997,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2004:61:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5998,
                  "nodeType": "ExpressionStatement",
                  "src": "2004:61:16"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 6003,
                            "name": "vendingMachine",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5928,
                            "src": "2108:14:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_VendingMachine_$9123",
                              "typeString": "contract VendingMachine"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_VendingMachine_$9123",
                              "typeString": "contract VendingMachine"
                            }
                          ],
                          "id": 6002,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2100:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 6004,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2100:23:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6005,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5972,
                        "src": "2125:8:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5999,
                        "name": "tbtcDepositToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5930,
                        "src": "2075:16:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_TBTCDepositToken_$6844",
                          "typeString": "contract TBTCDepositToken"
                        }
                      },
                      "id": 6001,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "approve",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17638,
                      "src": "2075:24:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 6006,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2075:59:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6007,
                  "nodeType": "ExpressionStatement",
                  "src": "2075:59:16"
                },
                {
                  "assignments": [
                    6009
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6009,
                      "name": "functionSignature",
                      "nodeType": "VariableDeclaration",
                      "scope": 6065,
                      "src": "2213:24:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      },
                      "typeName": {
                        "id": 6008,
                        "name": "bytes4",
                        "nodeType": "ElementaryTypeName",
                        "src": "2213:6:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6010,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2213:24:16"
                },
                {
                  "externalReferences": [
                    {
                      "functionSignature": {
                        "declaration": 6009,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2270:17:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_extraData": {
                        "declaration": 5976,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2305:10:16",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 6011,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    functionSignature := and(mload(add(_extraData, 0x20)), not(0xff))\n}",
                  "src": "2247:98:16"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 6017,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 6013,
                          "name": "functionSignature",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6009,
                          "src": "2375:17:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 6014,
                              "name": "vendingMachine",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5928,
                              "src": "2412:14:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_VendingMachine_$9123",
                                "typeString": "contract VendingMachine"
                              }
                            },
                            "id": 6015,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "unqualifiedDepositToTbtc",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9037,
                            "src": "2412:39:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_payable_$_t_bytes4_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes4_$_t_uint8_$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (address payable,bytes4,bytes memory,bytes memory,bytes4,uint8,bytes memory,uint256,bytes memory) external"
                            }
                          },
                          "id": 6016,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "selector",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2412:48:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "2375:85:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "426164205f657874726144617461207369676e61747572652e2043616c6c206d75737420626520746f20756e7175616c69666965644465706f736974546f546274632e",
                        "id": 6018,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2474:69:16",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e8f1c139815d3d9bf053c98f56100988406f5cdd24f501fa26a57cf3f27c6dd3",
                          "typeString": "literal_string \"Bad _extraData signature. Call must be to unqualifiedDepositToTbtc.\""
                        },
                        "value": "Bad _extraData signature. Call must be to unqualifiedDepositToTbtc."
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e8f1c139815d3d9bf053c98f56100988406f5cdd24f501fa26a57cf3f27c6dd3",
                          "typeString": "literal_string \"Bad _extraData signature. Call must be to unqualifiedDepositToTbtc.\""
                        }
                      ],
                      "id": 6012,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "2354:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6019,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2354:199:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6020,
                  "nodeType": "ExpressionStatement",
                  "src": "2354:199:16"
                },
                {
                  "assignments": [
                    6022,
                    6024
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6022,
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 6065,
                      "src": "2942:12:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 6021,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "2942:4:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6024,
                      "name": "returnData",
                      "nodeType": "VariableDeclaration",
                      "scope": 6065,
                      "src": "2956:23:16",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 6023,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "2956:5:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6031,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6029,
                        "name": "_extraData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5976,
                        "src": "3024:10:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 6026,
                            "name": "vendingMachine",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5928,
                            "src": "3003:14:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_VendingMachine_$9123",
                              "typeString": "contract VendingMachine"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_VendingMachine_$9123",
                              "typeString": "contract VendingMachine"
                            }
                          ],
                          "id": 6025,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2995:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 6027,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2995:23:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 6028,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "call",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "2995:28:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                      }
                    },
                    "id": 6030,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2995:40:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2941:94:16"
                },
                {
                  "assignments": [
                    6033
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6033,
                      "name": "revertMessage",
                      "nodeType": "VariableDeclaration",
                      "scope": 6065,
                      "src": "3046:27:16",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 6032,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "3046:6:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6034,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3046:27:16"
                },
                {
                  "externalReferences": [
                    {
                      "revertMessage": {
                        "declaration": 6033,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3388:13:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "returnData": {
                        "declaration": 6024,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3409:10:16",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 6035,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    revertMessage := add(returnData, 0x44)\n}",
                  "src": "3083:353:16"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6037,
                        "name": "success",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6022,
                        "src": "3454:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6038,
                        "name": "revertMessage",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6033,
                        "src": "3463:13:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 6036,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "3446:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6039,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3446:31:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6040,
                  "nodeType": "ExpressionStatement",
                  "src": "3446:31:16"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6044,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5970,
                        "src": "3568:5:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 6048,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18480,
                                "src": "3603:4:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_FundingScript_$6067",
                                  "typeString": "contract FundingScript"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_FundingScript_$6067",
                                  "typeString": "contract FundingScript"
                                }
                              ],
                              "id": 6047,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3595:7:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 6049,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3595:13:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 6045,
                            "name": "tbtcToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5926,
                            "src": "3575:9:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_TBTCToken_$8561",
                              "typeString": "contract TBTCToken"
                            }
                          },
                          "id": 6046,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "balanceOf",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 17007,
                          "src": "3575:19:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) view external returns (uint256)"
                          }
                        },
                        "id": 6050,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3575:34:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 6041,
                        "name": "tbtcToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5926,
                        "src": "3549:9:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_TBTCToken_$8561",
                          "typeString": "contract TBTCToken"
                        }
                      },
                      "id": 6043,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17026,
                      "src": "3549:18:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 6051,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3549:61:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 6052,
                  "nodeType": "ExpressionStatement",
                  "src": "3549:61:16"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 6057,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18480,
                            "src": "3656:4:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_FundingScript_$6067",
                              "typeString": "contract FundingScript"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_FundingScript_$6067",
                              "typeString": "contract FundingScript"
                            }
                          ],
                          "id": 6056,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3648:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 6058,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3648:13:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6059,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5970,
                        "src": "3663:5:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 6061,
                            "name": "_tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5972,
                            "src": "3678:8:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 6060,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3670:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 6062,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3670:17:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 6053,
                        "name": "feeRebateToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5932,
                        "src": "3620:14:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_FeeRebateToken_$6300",
                          "typeString": "contract FeeRebateToken"
                        }
                      },
                      "id": 6055,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transferFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17730,
                      "src": "3620:27:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256) external"
                      }
                    },
                    "id": 6063,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3620:68:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6064,
                  "nodeType": "ExpressionStatement",
                  "src": "3620:68:16"
                }
              ]
            },
            "documentation": "@notice Receives approval for a TDT transfer, and calls `VendingMachine.unqualifiedDepositToTbtc` for a user.\n @dev Implements the approveAndCall receiver interface.\n @param _from The owner of the token who approved them for transfer.\n @param _tokenId Approved TDT for the transfer.\n @param _extraData Encoded function call to `VendingMachine.unqualifiedDepositToTbtc`.",
            "id": 6066,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "receiveApproval",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5977,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5970,
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 6066,
                  "src": "1693:13:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5969,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1693:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5972,
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 6066,
                  "src": "1716:16:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5971,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1716:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5974,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6066,
                  "src": "1742:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5973,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1742:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5976,
                  "name": "_extraData",
                  "nodeType": "VariableDeclaration",
                  "scope": 6066,
                  "src": "1759:23:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 5975,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1759:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1683:105:16"
            },
            "returnParameters": {
              "id": 5978,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1796:0:16"
            },
            "scope": 6067,
            "src": "1659:2036:16",
            "stateMutability": "nonpayable",
            "superFunction": 5524,
            "visibility": "public"
          }
        ],
        "scope": 6068,
        "src": "680:3017:16"
      }
    ],
    "src": "0:3698:16"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/scripts/FundingScript.sol",
      "exportedSymbols": {
        "FundingScript": [
          6067
        ]
      }
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "0.5",
            ".17"
          ]
        },
        "id": 5912,
        "name": "PragmaDirective",
        "src": "0:23:16"
      },
      {
        "attributes": {
          "SourceUnit": 5526,
          "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/interfaces/ITokenRecipient.sol",
          "file": "../interfaces/ITokenRecipient.sol",
          "scope": 6068,
          "symbolAliases": [
            {
              "foreign": 5913,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 5914,
        "name": "ImportDirective",
        "src": "25:66:16"
      },
      {
        "attributes": {
          "SourceUnit": 6845,
          "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/system/TBTCDepositToken.sol",
          "file": "../system/TBTCDepositToken.sol",
          "scope": 6068,
          "symbolAliases": [
            {
              "foreign": 5915,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 5916,
        "name": "ImportDirective",
        "src": "92:64:16"
      },
      {
        "attributes": {
          "SourceUnit": 8562,
          "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/system/TBTCToken.sol",
          "file": "../system/TBTCToken.sol",
          "scope": 6068,
          "symbolAliases": [
            {
              "foreign": 5917,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 5918,
        "name": "ImportDirective",
        "src": "157:50:16"
      },
      {
        "attributes": {
          "SourceUnit": 6301,
          "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/system/FeeRebateToken.sol",
          "file": "../system/FeeRebateToken.sol",
          "scope": 6068,
          "symbolAliases": [
            {
              "foreign": 5919,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 5920,
        "name": "ImportDirective",
        "src": "208:60:16"
      },
      {
        "attributes": {
          "SourceUnit": 9124,
          "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/system/VendingMachine.sol",
          "file": "../system/VendingMachine.sol",
          "scope": 6068,
          "symbolAliases": [
            {
              "foreign": 5921,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 5922,
        "name": "ImportDirective",
        "src": "269:60:16"
      },
      {
        "attributes": {
          "contractDependencies": [
            5525
          ],
          "contractKind": "contract",
          "documentation": "@notice A one-click script for minting TBTC from an unqualified TDT.\n @dev Wrapper script for VendingMachine.unqualifiedDepositToTbtc\n This contract implements receiveApproval() and can therefore use\n approveAndCall(). This pattern combines TBTC Token approval and\n vendingMachine.unqualifiedDepositToTbtc() in a single transaction.",
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            6067,
            5525
          ],
          "name": "FundingScript",
          "scope": 6068
        },
        "children": [
          {
            "attributes": {
              "arguments": null
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "ITokenRecipient",
                  "referencedDeclaration": 5525,
                  "type": "contract ITokenRecipient"
                },
                "id": 5923,
                "name": "UserDefinedTypeName",
                "src": "706:15:16"
              }
            ],
            "id": 5924,
            "name": "InheritanceSpecifier",
            "src": "706:15:16"
          },
          {
            "attributes": {
              "constant": false,
              "name": "tbtcToken",
              "scope": 6067,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "contract TBTCToken",
              "value": null,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "TBTCToken",
                  "referencedDeclaration": 8561,
                  "type": "contract TBTCToken"
                },
                "id": 5925,
                "name": "UserDefinedTypeName",
                "src": "728:9:16"
              }
            ],
            "id": 5926,
            "name": "VariableDeclaration",
            "src": "728:19:16"
          },
          {
            "attributes": {
              "constant": false,
              "name": "vendingMachine",
              "scope": 6067,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "contract VendingMachine",
              "value": null,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "VendingMachine",
                  "referencedDeclaration": 9123,
                  "type": "contract VendingMachine"
                },
                "id": 5927,
                "name": "UserDefinedTypeName",
                "src": "753:14:16"
              }
            ],
            "id": 5928,
            "name": "VariableDeclaration",
            "src": "753:29:16"
          },
          {
            "attributes": {
              "constant": false,
              "name": "tbtcDepositToken",
              "scope": 6067,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "contract TBTCDepositToken",
              "value": null,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "TBTCDepositToken",
                  "referencedDeclaration": 6844,
                  "type": "contract TBTCDepositToken"
                },
                "id": 5929,
                "name": "UserDefinedTypeName",
                "src": "788:16:16"
              }
            ],
            "id": 5930,
            "name": "VariableDeclaration",
            "src": "788:33:16"
          },
          {
            "attributes": {
              "constant": false,
              "name": "feeRebateToken",
              "scope": 6067,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "contract FeeRebateToken",
              "value": null,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "FeeRebateToken",
                  "referencedDeclaration": 6300,
                  "type": "contract FeeRebateToken"
                },
                "id": 5931,
                "name": "UserDefinedTypeName",
                "src": "827:14:16"
              }
            ],
            "id": 5932,
            "name": "VariableDeclaration",
            "src": "827:29:16"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": true,
              "kind": "constructor",
              "modifiers": [
                null
              ],
              "name": "",
              "scope": 6067,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_VendingMachine",
                      "scope": 5968,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 5933,
                        "name": "ElementaryTypeName",
                        "src": "884:7:16"
                      }
                    ],
                    "id": 5934,
                    "name": "VariableDeclaration",
                    "src": "884:23:16"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_TBTCToken",
                      "scope": 5968,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 5935,
                        "name": "ElementaryTypeName",
                        "src": "917:7:16"
                      }
                    ],
                    "id": 5936,
                    "name": "VariableDeclaration",
                    "src": "917:18:16"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_TBTCDepositToken",
                      "scope": 5968,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 5937,
                        "name": "ElementaryTypeName",
                        "src": "945:7:16"
                      }
                    ],
                    "id": 5938,
                    "name": "VariableDeclaration",
                    "src": "945:25:16"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_FeeRebateToken",
                      "scope": 5968,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 5939,
                        "name": "ElementaryTypeName",
                        "src": "980:7:16"
                      }
                    ],
                    "id": 5940,
                    "name": "VariableDeclaration",
                    "src": "980:23:16"
                  }
                ],
                "id": 5941,
                "name": "ParameterList",
                "src": "874:135:16"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 5942,
                "name": "ParameterList",
                "src": "1017:0:16"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "contract VendingMachine"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5928,
                              "type": "contract VendingMachine",
                              "value": "vendingMachine"
                            },
                            "id": 5943,
                            "name": "Identifier",
                            "src": "1027:14:16"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "contract VendingMachine",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9123,
                                  "type": "type(contract VendingMachine)",
                                  "value": "VendingMachine"
                                },
                                "id": 5944,
                                "name": "Identifier",
                                "src": "1044:14:16"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5934,
                                  "type": "address",
                                  "value": "_VendingMachine"
                                },
                                "id": 5945,
                                "name": "Identifier",
                                "src": "1059:15:16"
                              }
                            ],
                            "id": 5946,
                            "name": "FunctionCall",
                            "src": "1044:31:16"
                          }
                        ],
                        "id": 5947,
                        "name": "Assignment",
                        "src": "1027:48:16"
                      }
                    ],
                    "id": 5948,
                    "name": "ExpressionStatement",
                    "src": "1027:48:16"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "contract TBTCToken"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5926,
                              "type": "contract TBTCToken",
                              "value": "tbtcToken"
                            },
                            "id": 5949,
                            "name": "Identifier",
                            "src": "1085:9:16"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "contract TBTCToken",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8561,
                                  "type": "type(contract TBTCToken)",
                                  "value": "TBTCToken"
                                },
                                "id": 5950,
                                "name": "Identifier",
                                "src": "1097:9:16"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5936,
                                  "type": "address",
                                  "value": "_TBTCToken"
                                },
                                "id": 5951,
                                "name": "Identifier",
                                "src": "1107:10:16"
                              }
                            ],
                            "id": 5952,
                            "name": "FunctionCall",
                            "src": "1097:21:16"
                          }
                        ],
                        "id": 5953,
                        "name": "Assignment",
                        "src": "1085:33:16"
                      }
                    ],
                    "id": 5954,
                    "name": "ExpressionStatement",
                    "src": "1085:33:16"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "contract TBTCDepositToken"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5930,
                              "type": "contract TBTCDepositToken",
                              "value": "tbtcDepositToken"
                            },
                            "id": 5955,
                            "name": "Identifier",
                            "src": "1128:16:16"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "contract TBTCDepositToken",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 6844,
                                  "type": "type(contract TBTCDepositToken)",
                                  "value": "TBTCDepositToken"
                                },
                                "id": 5956,
                                "name": "Identifier",
                                "src": "1147:16:16"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5938,
                                  "type": "address",
                                  "value": "_TBTCDepositToken"
                                },
                                "id": 5957,
                                "name": "Identifier",
                                "src": "1164:17:16"
                              }
                            ],
                            "id": 5958,
                            "name": "FunctionCall",
                            "src": "1147:35:16"
                          }
                        ],
                        "id": 5959,
                        "name": "Assignment",
                        "src": "1128:54:16"
                      }
                    ],
                    "id": 5960,
                    "name": "ExpressionStatement",
                    "src": "1128:54:16"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "contract FeeRebateToken"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5932,
                              "type": "contract FeeRebateToken",
                              "value": "feeRebateToken"
                            },
                            "id": 5961,
                            "name": "Identifier",
                            "src": "1192:14:16"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "contract FeeRebateToken",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 6300,
                                  "type": "type(contract FeeRebateToken)",
                                  "value": "FeeRebateToken"
                                },
                                "id": 5962,
                                "name": "Identifier",
                                "src": "1209:14:16"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5940,
                                  "type": "address",
                                  "value": "_FeeRebateToken"
                                },
                                "id": 5963,
                                "name": "Identifier",
                                "src": "1224:15:16"
                              }
                            ],
                            "id": 5964,
                            "name": "FunctionCall",
                            "src": "1209:31:16"
                          }
                        ],
                        "id": 5965,
                        "name": "Assignment",
                        "src": "1192:48:16"
                      }
                    ],
                    "id": 5966,
                    "name": "ExpressionStatement",
                    "src": "1192:48:16"
                  }
                ],
                "id": 5967,
                "name": "Block",
                "src": "1017:230:16"
              }
            ],
            "id": 5968,
            "name": "FunctionDefinition",
            "src": "863:384:16"
          },
          {
            "attributes": {
              "documentation": "@notice Receives approval for a TDT transfer, and calls `VendingMachine.unqualifiedDepositToTbtc` for a user.\n @dev Implements the approveAndCall receiver interface.\n @param _from The owner of the token who approved them for transfer.\n @param _tokenId Approved TDT for the transfer.\n @param _extraData Encoded function call to `VendingMachine.unqualifiedDepositToTbtc`.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "receiveApproval",
              "scope": 6067,
              "stateMutability": "nonpayable",
              "superFunction": 5524,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_from",
                      "scope": 6066,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 5969,
                        "name": "ElementaryTypeName",
                        "src": "1693:7:16"
                      }
                    ],
                    "id": 5970,
                    "name": "VariableDeclaration",
                    "src": "1693:13:16"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_tokenId",
                      "scope": 6066,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 5971,
                        "name": "ElementaryTypeName",
                        "src": "1716:7:16"
                      }
                    ],
                    "id": 5972,
                    "name": "VariableDeclaration",
                    "src": "1716:16:16"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 6066,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 5973,
                        "name": "ElementaryTypeName",
                        "src": "1742:7:16"
                      }
                    ],
                    "id": 5974,
                    "name": "VariableDeclaration",
                    "src": "1742:7:16"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_extraData",
                      "scope": 6066,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 5975,
                        "name": "ElementaryTypeName",
                        "src": "1759:5:16"
                      }
                    ],
                    "id": 5976,
                    "name": "VariableDeclaration",
                    "src": "1759:23:16"
                  }
                ],
                "id": 5977,
                "name": "ParameterList",
                "src": "1683:105:16"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 5978,
                "name": "ParameterList",
                "src": "1796:0:16"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_5ad58abfd7682657d2caeadc3413ef383abfb8158a9ea3126c46a6e085548c17",
                                  "typeString": "literal_string \"Only token contract can call receiveApproval\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 5979,
                            "name": "Identifier",
                            "src": "1863:7:16"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "sender",
                                  "referencedDeclaration": null,
                                  "type": "address payable"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 18360,
                                      "type": "msg",
                                      "value": "msg"
                                    },
                                    "id": 5980,
                                    "name": "Identifier",
                                    "src": "1884:3:16"
                                  }
                                ],
                                "id": 5981,
                                "name": "MemberAccess",
                                "src": "1884:10:16"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "address",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_TBTCDepositToken_$6844",
                                          "typeString": "contract TBTCDepositToken"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(address)",
                                      "value": "address"
                                    },
                                    "id": 5982,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "1898:7:16"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5930,
                                      "type": "contract TBTCDepositToken",
                                      "value": "tbtcDepositToken"
                                    },
                                    "id": 5983,
                                    "name": "Identifier",
                                    "src": "1906:16:16"
                                  }
                                ],
                                "id": 5984,
                                "name": "FunctionCall",
                                "src": "1898:25:16"
                              }
                            ],
                            "id": 5985,
                            "name": "BinaryOperation",
                            "src": "1884:39:16"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4f6e6c7920746f6b656e20636f6e74726163742063616e2063616c6c2072656365697665417070726f76616c",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Only token contract can call receiveApproval\"",
                              "value": "Only token contract can call receiveApproval"
                            },
                            "id": 5986,
                            "name": "Literal",
                            "src": "1937:46:16"
                          }
                        ],
                        "id": 5987,
                        "name": "FunctionCall",
                        "src": "1863:130:16"
                      }
                    ],
                    "id": 5988,
                    "name": "ExpressionStatement",
                    "src": "1863:130:16"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "transferFrom",
                              "referencedDeclaration": 17730,
                              "type": "function (address,address,uint256) external"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5930,
                                  "type": "contract TBTCDepositToken",
                                  "value": "tbtcDepositToken"
                                },
                                "id": 5989,
                                "name": "Identifier",
                                "src": "2004:16:16"
                              }
                            ],
                            "id": 5991,
                            "name": "MemberAccess",
                            "src": "2004:29:16"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5970,
                              "type": "address",
                              "value": "_from"
                            },
                            "id": 5992,
                            "name": "Identifier",
                            "src": "2034:5:16"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "address",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_FundingScript_$6067",
                                      "typeString": "contract FundingScript"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)",
                                  "value": "address"
                                },
                                "id": 5993,
                                "name": "ElementaryTypeNameExpression",
                                "src": "2041:7:16"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 18480,
                                  "type": "contract FundingScript",
                                  "value": "this"
                                },
                                "id": 5994,
                                "name": "Identifier",
                                "src": "2049:4:16"
                              }
                            ],
                            "id": 5995,
                            "name": "FunctionCall",
                            "src": "2041:13:16"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5972,
                              "type": "uint256",
                              "value": "_tokenId"
                            },
                            "id": 5996,
                            "name": "Identifier",
                            "src": "2056:8:16"
                          }
                        ],
                        "id": 5997,
                        "name": "FunctionCall",
                        "src": "2004:61:16"
                      }
                    ],
                    "id": 5998,
                    "name": "ExpressionStatement",
                    "src": "2004:61:16"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "approve",
                              "referencedDeclaration": 17638,
                              "type": "function (address,uint256) external"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5930,
                                  "type": "contract TBTCDepositToken",
                                  "value": "tbtcDepositToken"
                                },
                                "id": 5999,
                                "name": "Identifier",
                                "src": "2075:16:16"
                              }
                            ],
                            "id": 6001,
                            "name": "MemberAccess",
                            "src": "2075:24:16"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "address",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_VendingMachine_$9123",
                                      "typeString": "contract VendingMachine"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)",
                                  "value": "address"
                                },
                                "id": 6002,
                                "name": "ElementaryTypeNameExpression",
                                "src": "2100:7:16"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5928,
                                  "type": "contract VendingMachine",
                                  "value": "vendingMachine"
                                },
                                "id": 6003,
                                "name": "Identifier",
                                "src": "2108:14:16"
                              }
                            ],
                            "id": 6004,
                            "name": "FunctionCall",
                            "src": "2100:23:16"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5972,
                              "type": "uint256",
                              "value": "_tokenId"
                            },
                            "id": 6005,
                            "name": "Identifier",
                            "src": "2125:8:16"
                          }
                        ],
                        "id": 6006,
                        "name": "FunctionCall",
                        "src": "2075:59:16"
                      }
                    ],
                    "id": 6007,
                    "name": "ExpressionStatement",
                    "src": "2075:59:16"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        6009
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "functionSignature",
                          "scope": 6065,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bytes4",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes4",
                              "type": "bytes4"
                            },
                            "id": 6008,
                            "name": "ElementaryTypeName",
                            "src": "2213:6:16"
                          }
                        ],
                        "id": 6009,
                        "name": "VariableDeclaration",
                        "src": "2213:24:16"
                      }
                    ],
                    "id": 6010,
                    "name": "VariableDeclarationStatement",
                    "src": "2213:24:16"
                  },
                  {
                    "attributes": {
                      "externalReferences": [
                        {
                          "functionSignature": {
                            "declaration": 6009,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2270:17:16",
                            "valueSize": 1
                          }
                        },
                        {
                          "_extraData": {
                            "declaration": 5976,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2305:10:16",
                            "valueSize": 1
                          }
                        }
                      ],
                      "operations": "{\n    functionSignature := and(mload(add(_extraData, 0x20)), not(0xff))\n}"
                    },
                    "children": [],
                    "id": 6011,
                    "name": "InlineAssembly",
                    "src": "2247:98:16"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_e8f1c139815d3d9bf053c98f56100988406f5cdd24f501fa26a57cf3f27c6dd3",
                                  "typeString": "literal_string \"Bad _extraData signature. Call must be to unqualifiedDepositToTbtc.\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 6012,
                            "name": "Identifier",
                            "src": "2354:7:16"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 6009,
                                  "type": "bytes4",
                                  "value": "functionSignature"
                                },
                                "id": 6013,
                                "name": "Identifier",
                                "src": "2375:17:16"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "selector",
                                  "referencedDeclaration": null,
                                  "type": "bytes4"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "unqualifiedDepositToTbtc",
                                      "referencedDeclaration": 9037,
                                      "type": "function (address payable,bytes4,bytes memory,bytes memory,bytes4,uint8,bytes memory,uint256,bytes memory) external"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 5928,
                                          "type": "contract VendingMachine",
                                          "value": "vendingMachine"
                                        },
                                        "id": 6014,
                                        "name": "Identifier",
                                        "src": "2412:14:16"
                                      }
                                    ],
                                    "id": 6015,
                                    "name": "MemberAccess",
                                    "src": "2412:39:16"
                                  }
                                ],
                                "id": 6016,
                                "name": "MemberAccess",
                                "src": "2412:48:16"
                              }
                            ],
                            "id": 6017,
                            "name": "BinaryOperation",
                            "src": "2375:85:16"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "426164205f657874726144617461207369676e61747572652e2043616c6c206d75737420626520746f20756e7175616c69666965644465706f736974546f546274632e",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Bad _extraData signature. Call must be to unqualifiedDepositToTbtc.\"",
                              "value": "Bad _extraData signature. Call must be to unqualifiedDepositToTbtc."
                            },
                            "id": 6018,
                            "name": "Literal",
                            "src": "2474:69:16"
                          }
                        ],
                        "id": 6019,
                        "name": "FunctionCall",
                        "src": "2354:199:16"
                      }
                    ],
                    "id": 6020,
                    "name": "ExpressionStatement",
                    "src": "2354:199:16"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        6022,
                        6024
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "success",
                          "scope": 6065,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bool",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bool",
                              "type": "bool"
                            },
                            "id": 6021,
                            "name": "ElementaryTypeName",
                            "src": "2942:4:16"
                          }
                        ],
                        "id": 6022,
                        "name": "VariableDeclaration",
                        "src": "2942:12:16"
                      },
                      {
                        "attributes": {
                          "constant": false,
                          "name": "returnData",
                          "scope": 6065,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "bytes",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes",
                              "type": "bytes"
                            },
                            "id": 6023,
                            "name": "ElementaryTypeName",
                            "src": "2956:5:16"
                          }
                        ],
                        "id": 6024,
                        "name": "VariableDeclaration",
                        "src": "2956:23:16"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple(bool,bytes memory)",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "call",
                              "referencedDeclaration": null,
                              "type": "function (bytes memory) payable returns (bool,bytes memory)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "address",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_VendingMachine_$9123",
                                          "typeString": "contract VendingMachine"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(address)",
                                      "value": "address"
                                    },
                                    "id": 6025,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "2995:7:16"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5928,
                                      "type": "contract VendingMachine",
                                      "value": "vendingMachine"
                                    },
                                    "id": 6026,
                                    "name": "Identifier",
                                    "src": "3003:14:16"
                                  }
                                ],
                                "id": 6027,
                                "name": "FunctionCall",
                                "src": "2995:23:16"
                              }
                            ],
                            "id": 6028,
                            "name": "MemberAccess",
                            "src": "2995:28:16"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5976,
                              "type": "bytes memory",
                              "value": "_extraData"
                            },
                            "id": 6029,
                            "name": "Identifier",
                            "src": "3024:10:16"
                          }
                        ],
                        "id": 6030,
                        "name": "FunctionCall",
                        "src": "2995:40:16"
                      }
                    ],
                    "id": 6031,
                    "name": "VariableDeclarationStatement",
                    "src": "2941:94:16"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        6033
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "revertMessage",
                          "scope": 6065,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "string",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "string",
                              "type": "string"
                            },
                            "id": 6032,
                            "name": "ElementaryTypeName",
                            "src": "3046:6:16"
                          }
                        ],
                        "id": 6033,
                        "name": "VariableDeclaration",
                        "src": "3046:27:16"
                      }
                    ],
                    "id": 6034,
                    "name": "VariableDeclarationStatement",
                    "src": "3046:27:16"
                  },
                  {
                    "attributes": {
                      "externalReferences": [
                        {
                          "revertMessage": {
                            "declaration": 6033,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3388:13:16",
                            "valueSize": 1
                          }
                        },
                        {
                          "returnData": {
                            "declaration": 6024,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3409:10:16",
                            "valueSize": 1
                          }
                        }
                      ],
                      "operations": "{\n    revertMessage := add(returnData, 0x44)\n}"
                    },
                    "children": [],
                    "id": 6035,
                    "name": "InlineAssembly",
                    "src": "3083:353:16"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 6036,
                            "name": "Identifier",
                            "src": "3446:7:16"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6022,
                              "type": "bool",
                              "value": "success"
                            },
                            "id": 6037,
                            "name": "Identifier",
                            "src": "3454:7:16"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6033,
                              "type": "string memory",
                              "value": "revertMessage"
                            },
                            "id": 6038,
                            "name": "Identifier",
                            "src": "3463:13:16"
                          }
                        ],
                        "id": 6039,
                        "name": "FunctionCall",
                        "src": "3446:31:16"
                      }
                    ],
                    "id": 6040,
                    "name": "ExpressionStatement",
                    "src": "3446:31:16"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bool",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "transfer",
                              "referencedDeclaration": 17026,
                              "type": "function (address,uint256) external returns (bool)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5926,
                                  "type": "contract TBTCToken",
                                  "value": "tbtcToken"
                                },
                                "id": 6041,
                                "name": "Identifier",
                                "src": "3549:9:16"
                              }
                            ],
                            "id": 6043,
                            "name": "MemberAccess",
                            "src": "3549:18:16"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5970,
                              "type": "address",
                              "value": "_from"
                            },
                            "id": 6044,
                            "name": "Identifier",
                            "src": "3568:5:16"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "balanceOf",
                                  "referencedDeclaration": 17007,
                                  "type": "function (address) view external returns (uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5926,
                                      "type": "contract TBTCToken",
                                      "value": "tbtcToken"
                                    },
                                    "id": 6045,
                                    "name": "Identifier",
                                    "src": "3575:9:16"
                                  }
                                ],
                                "id": 6046,
                                "name": "MemberAccess",
                                "src": "3575:19:16"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "address",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_FundingScript_$6067",
                                          "typeString": "contract FundingScript"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(address)",
                                      "value": "address"
                                    },
                                    "id": 6047,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "3595:7:16"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 18480,
                                      "type": "contract FundingScript",
                                      "value": "this"
                                    },
                                    "id": 6048,
                                    "name": "Identifier",
                                    "src": "3603:4:16"
                                  }
                                ],
                                "id": 6049,
                                "name": "FunctionCall",
                                "src": "3595:13:16"
                              }
                            ],
                            "id": 6050,
                            "name": "FunctionCall",
                            "src": "3575:34:16"
                          }
                        ],
                        "id": 6051,
                        "name": "FunctionCall",
                        "src": "3549:61:16"
                      }
                    ],
                    "id": 6052,
                    "name": "ExpressionStatement",
                    "src": "3549:61:16"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "transferFrom",
                              "referencedDeclaration": 17730,
                              "type": "function (address,address,uint256) external"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5932,
                                  "type": "contract FeeRebateToken",
                                  "value": "feeRebateToken"
                                },
                                "id": 6053,
                                "name": "Identifier",
                                "src": "3620:14:16"
                              }
                            ],
                            "id": 6055,
                            "name": "MemberAccess",
                            "src": "3620:27:16"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "address",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_FundingScript_$6067",
                                      "typeString": "contract FundingScript"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)",
                                  "value": "address"
                                },
                                "id": 6056,
                                "name": "ElementaryTypeNameExpression",
                                "src": "3648:7:16"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 18480,
                                  "type": "contract FundingScript",
                                  "value": "this"
                                },
                                "id": 6057,
                                "name": "Identifier",
                                "src": "3656:4:16"
                              }
                            ],
                            "id": 6058,
                            "name": "FunctionCall",
                            "src": "3648:13:16"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5970,
                              "type": "address",
                              "value": "_from"
                            },
                            "id": 6059,
                            "name": "Identifier",
                            "src": "3663:5:16"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint256",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(uint256)",
                                  "value": "uint256"
                                },
                                "id": 6060,
                                "name": "ElementaryTypeNameExpression",
                                "src": "3670:7:16"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5972,
                                  "type": "uint256",
                                  "value": "_tokenId"
                                },
                                "id": 6061,
                                "name": "Identifier",
                                "src": "3678:8:16"
                              }
                            ],
                            "id": 6062,
                            "name": "FunctionCall",
                            "src": "3670:17:16"
                          }
                        ],
                        "id": 6063,
                        "name": "FunctionCall",
                        "src": "3620:68:16"
                      }
                    ],
                    "id": 6064,
                    "name": "ExpressionStatement",
                    "src": "3620:68:16"
                  }
                ],
                "id": 6065,
                "name": "Block",
                "src": "1796:1899:16"
              }
            ],
            "id": 6066,
            "name": "FunctionDefinition",
            "src": "1659:2036:16"
          }
        ],
        "id": 6067,
        "name": "ContractDefinition",
        "src": "680:3017:16"
      }
    ],
    "id": 6068,
    "name": "SourceUnit",
    "src": "0:3698:16"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.17+commit.d19bba13.Emscripten.clang"
  },
  "networks": {
    "3": {
      "events": {},
      "links": {},
      "address": "0x8263D60A8B84Ca87a49b6CF221782483a6D990e8",
      "transactionHash": "0x5f76bd9a503c3e375ac9e981f833a4a5f24fec85f2c4573ac84519f3ae5e7aa8"
    }
  },
  "schemaVersion": "3.3.4",
  "updatedAt": "2021-11-23T12:01:17.317Z",
  "networkType": "ethereum",
  "devdoc": {
    "details": "Wrapper script for VendingMachine.unqualifiedDepositToTbtc This contract implements receiveApproval() and can therefore use approveAndCall(). This pattern combines TBTC Token approval and vendingMachine.unqualifiedDepositToTbtc() in a single transaction.",
    "methods": {
      "receiveApproval(address,uint256,address,bytes)": {
        "details": "Implements the approveAndCall receiver interface.",
        "params": {
          "_extraData": "Encoded function call to `VendingMachine.unqualifiedDepositToTbtc`.",
          "_from": "The owner of the token who approved them for transfer.",
          "_tokenId": "Approved TDT for the transfer."
        }
      }
    }
  },
  "userdoc": {
    "methods": {
      "receiveApproval(address,uint256,address,bytes)": {
        "notice": "Receives approval for a TDT transfer, and calls `VendingMachine.unqualifiedDepositToTbtc` for a user."
      }
    },
    "notice": "A one-click script for minting TBTC from an unqualified TDT."
  }
}