{
  "contractName": "TestTBTCToken",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_vendingMachine",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract ITokenRecipient",
          "name": "_spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_extraData",
          "type": "bytes"
        }
      ],
      "name": "approveAndCall",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "burnFrom",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "subtractedValue",
          "type": "uint256"
        }
      ],
      "name": "decreaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "addedValue",
          "type": "uint256"
        }
      ],
      "name": "increaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "forceMint",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "forceBurn",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "zeroBalance",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_newBalance",
          "type": "uint256"
        }
      ],
      "name": "resetBalance",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_newAllowance",
          "type": "uint256"
        }
      ],
      "name": "resetAllowance",
      "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\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract ITokenRecipient\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"approveAndCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"burnFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"forceBurn\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"forceMint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_newAllowance\",\"type\":\"uint256\"}],\"name\":\"resetAllowance\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newBalance\",\"type\":\"uint256\"}],\"name\":\"resetBalance\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"zeroBalance\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{\"allowance(address,address)\":{\"details\":\"See `IERC20.allowance`.\"},\"approve(address,uint256)\":{\"details\":\"See `IERC20.approve`.     * Requirements:     * - `spender` cannot be the zero address.\"},\"approveAndCall(address,uint256,bytes)\":{\"details\":\"The `_spender` should implement the `ITokenRecipient`                   interface to receive approval notifications.\",\"params\":{\"_extraData\":\"Extra information to send to the approved contract.\",\"_spender\":\"Address of contract authorized to spend.\",\"_value\":\"The max amount they can spend.\"},\"return\":\"true if the `_spender` was successfully approved and acted on         the approval, false (or revert) otherwise.\"},\"balanceOf(address)\":{\"details\":\"See `IERC20.balanceOf`.\"},\"burn(uint256)\":{\"details\":\"Destroys `amount` tokens from `msg.sender`, reducing the total supply.\",\"params\":{\"_amount\":\"The amount of tokens that will be burnt.\"}},\"burnFrom(address,uint256)\":{\"details\":\"Burns an amount of the token from the given account's balance.                  deducting from the sender's allowance for said account.                  Uses the internal _burn function.\",\"params\":{\"_account\":\"The account whose tokens will be burnt.\",\"_amount\":\"The amount of tokens that will be burnt.\"}},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`).     * Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei.     * > Note that this information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including `IERC20.balanceOf` and `IERC20.transfer`.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller.     * This is an alternative to `approve` that can be used as a mitigation for problems described in `IERC20.approve`.     * Emits an `Approval` event indicating the updated allowance.     * Requirements:     * - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"forceBurn(address,uint256)\":{\"details\":\"We can't call TBTCToken burn function from deposit Test becuase of ACL.                  This function bypasses ACL and can be called in Deposit tests.                  Burns an amount of the token of a given account                  deducting from the sender's allowance for said account.                  Bypasses ACL and can be called in Deposit tests\",\"params\":{\"_account\":\"The account whose tokens will be burnt.\",\"_amount\":\"The amount of tokens that will be burnt.\"}},\"forceMint(address,uint256)\":{\"details\":\"We can't call TBTCToken mint function from deposit Test becuase of ACL.                  This function bypasses ACL and can be called in Deposit tests                  Mints an amount of the token and assigns it to an account.                  Uses the internal _mint function.\",\"params\":{\"_account\":\"The account that will receive the created tokens.\",\"_amount\":\"The amount of tokens that will be created.\"}},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller.     * This is an alternative to `approve` that can be used as a mitigation for problems described in `IERC20.approve`.     * Emits an `Approval` event indicating the updated allowance.     * Requirements:     * - `spender` cannot be the zero address.\"},\"mint(address,uint256)\":{\"details\":\"Mints an amount of the token and assigns it to an account.                  Uses the internal _mint function.\",\"params\":{\"_account\":\"The account that will receive the created tokens.\",\"_amount\":\"The amount of tokens that will be created.\"}},\"name()\":{\"details\":\"Returns the name of the token.\"},\"resetAllowance(address,uint256)\":{\"details\":\"Uses exposed token functions to reset the allowance                        of a given account.\",\"params\":{\"_newAllowance\":\"New allowance to assign.\",\"_spender\":\"The allowed account.\"}},\"resetBalance(uint256)\":{\"details\":\"Uses exposed token functions to reset caller's balance.\",\"params\":{\"_newBalance\":\"New balance to assign to caller\"}},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See `IERC20.totalSupply`.\"},\"transfer(address,uint256)\":{\"details\":\"See `IERC20.transfer`.     * Requirements:     * - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See `IERC20.transferFrom`.     * Emits an `Approval` event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of `ERC20`;     * Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `value`. - the caller must have allowance for `sender`'s tokens of at least `amount`.\"},\"zeroBalance()\":{\"details\":\"Zeros out the balance of the calling address.                     Does nothing if address has zero balance.\"}}},\"userdoc\":{\"methods\":{\"approveAndCall(address,uint256,bytes)\":{\"notice\":\"Set allowance for other address and notify.                   Allows `_spender` to spend no more than `_value`                   tokens on your behalf and then ping the contract about                   it.\"}}}},\"settings\":{\"compilationTarget\":{\"/home/runner/work/tbtc/tbtc/solidity/contracts/test/system/TestTBTCToken.sol\":\"TestTBTCToken\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/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/system/TBTCToken.sol\":{\"keccak256\":\"0x167b07029df8d350996d7f82d853437d1a2562401eeac98037c2eb4c5f295319\",\"urls\":[\"bzz-raw://7d2601ac8dcd5d59b3e479a61262de2162c96ed7ad1cd161331e2e4500b8346a\",\"dweb:/ipfs/QmWVjBSvHFg9W5zsSxgdpNSYKgfLa28fr3mPjjKQaDBxmk\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/system/VendingMachineAuthority.sol\":{\"keccak256\":\"0x7ad8a2cee5e6bbc187d04b147dc0d2bc2ae12bb8c3680870be9013dd5543bfd6\",\"urls\":[\"bzz-raw://733f2370c788437b0034c40a8df07f4714009769ed8134a9c656e2a103996687\",\"dweb:/ipfs/Qma9LAGQDzyUvsbhLx3FUKRCx3FmnoZuMxG4SUdjLr8bRm\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/test/system/TestTBTCToken.sol\":{\"keccak256\":\"0xee4e7a620b4195ad090207272b849baed256c070ad210977fd3af70664a5fd0f\",\"urls\":[\"bzz-raw://65560ed1e0f1f196b0c9fa22d882ad8aca55df6a1b8fd362056ac98d9efeafca\",\"dweb:/ipfs/QmZSY2juTKoeS72VEGPis4wqdBRthqyGAWhRLEsJz7AZEq\"]},\"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\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b50604051620010df380380620010df8339818101604052602081101561003557600080fd5b50516040805180820182526004808252637442544360e01b60208381019182528451808601909552918452635442544360e01b9184019190915281518493849392909160129161008891600091906100db565b50815161009c9060019060208501906100db565b506002805460ff191660ff929092169190911790555050600680546001600160a01b0319166001600160a01b0392909216919091179055506101769050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061011c57805160ff1916838001178555610149565b82800160010185558215610149579182015b8281111561014957825182559160200191906001019061012e565b50610155929150610159565b5090565b61017391905b80821115610155576000815560010161015f565b90565b610f5980620001866000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80636a9d5c84116100ad578063a9059cbb11610071578063a9059cbb146103b9578063c27b7a24146103e5578063cae9ca5114610402578063dd62ed3e146104bd578063e2d6f634146104eb5761012c565b80636a9d5c841461030757806370a082311461033357806379cc67901461035957806395d89b4114610385578063a457c2d71461038d5761012c565b806339509351116100f4578063395093511461025c57806340899d651461028857806340c10f19146102b657806342966c68146102e25780634ed9af4c146102ff5761012c565b806306fdde0314610131578063095ea7b3146101ae57806318160ddd146101ee57806323b872dd14610208578063313ce5671461023e575b600080fd5b610139610517565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561017357818101518382015260200161015b565b50505050905090810190601f1680156101a05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101da600480360360408110156101c457600080fd5b506001600160a01b0381351690602001356105ad565b604080519115158252519081900360200190f35b6101f66105c3565b60408051918252519081900360200190f35b6101da6004803603606081101561021e57600080fd5b506001600160a01b038135811691602081013590911690604001356105c9565b610246610621565b6040805160ff9092168252519081900360200190f35b6101da6004803603604081101561027257600080fd5b506001600160a01b03813516906020013561062a565b6102b46004803603604081101561029e57600080fd5b506001600160a01b038135169060200135610666565b005b6101da600480360360408110156102cc57600080fd5b506001600160a01b038135169060200135610696565b6102b4600480360360208110156102f857600080fd5b50356106ec565b6102b46106f9565b6101da6004803603604081101561031d57600080fd5b506001600160a01b038135169060200135610716565b6101f66004803603602081101561034957600080fd5b50356001600160a01b0316610722565b6102b46004803603604081101561036f57600080fd5b506001600160a01b03813516906020013561073d565b61013961074b565b6101da600480360360408110156103a357600080fd5b506001600160a01b0381351690602001356107ab565b6101da600480360360408110156103cf57600080fd5b506001600160a01b0381351690602001356107e7565b6102b4600480360360208110156103fb57600080fd5b50356107f4565b6101da6004803603606081101561041857600080fd5b6001600160a01b038235169160208101359181019060608101604082013564010000000081111561044857600080fd5b82018360208201111561045a57600080fd5b8035906020019184600183028401116401000000008311171561047c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610820945050505050565b6101f6600480360360408110156104d357600080fd5b506001600160a01b0381358116916020013516610925565b6102b46004803603604081101561050157600080fd5b506001600160a01b038135169060200135610950565b60008054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105a35780601f10610578576101008083540402835291602001916105a3565b820191906000526020600020905b81548152906001019060200180831161058657829003601f168201915b5050505050905090565b60006105ba33848461095a565b50600192915050565b60055490565b60006105d6848484610a46565b6001600160a01b038416600090815260046020908152604080832033808552925290912054610616918691610611908663ffffffff610b8a16565b61095a565b5060015b9392505050565b60025460ff1690565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916105ba918590610611908663ffffffff610be716565b60006106723384610925565b905080156106865761068483826107ab565b505b61069083836105ad565b50505050565b6006546000906001600160a01b031633146106e25760405162461bcd60e51b8152600401808060200182810382526022815260200180610e546022913960400191505060405180910390fd5b6105ba8383610c41565b6106f63382610d33565b50565b600061070433610722565b905080156106f6576106f63382610d33565b60006105ba8383610c41565b6001600160a01b031660009081526003602052604090205490565b6107478282610e0e565b5050565b60018054604080516020601f600260001961010087891615020190951694909404938401819004810282018101909252828152606093909290918301828280156105a35780601f10610578576101008083540402835291602001916105a3565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916105ba918590610611908663ffffffff610b8a16565b60006105ba338484610a46565b60006107ff33610722565b90508015610811576108113382610950565b61081b3383610716565b505050565b600061082c84846105ad565b1561091b57604051638f4ffcb160e01b815233600482018181526024830186905230604484018190526080606485019081528651608486015286516001600160a01b038a1695638f4ffcb195948a94938a939192909160a490910190602085019080838360005b838110156108ab578181015183820152602001610893565b50505050905090810190601f1680156108d85780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156108fa57600080fd5b505af115801561090e573d6000803e3d6000fd5b505050506001905061061a565b5060009392505050565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b6107478282610d33565b6001600160a01b03831661099f5760405162461bcd60e51b8152600401808060200182810382526024815260200180610f016024913960400191505060405180910390fd5b6001600160a01b0382166109e45760405162461bcd60e51b8152600401808060200182810382526022815260200180610e996022913960400191505060405180910390fd5b6001600160a01b03808416600081815260046020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610a8b5760405162461bcd60e51b8152600401808060200182810382526025815260200180610edc6025913960400191505060405180910390fd5b6001600160a01b038216610ad05760405162461bcd60e51b8152600401808060200182810382526023815260200180610e766023913960400191505060405180910390fd5b6001600160a01b038316600090815260036020526040902054610af9908263ffffffff610b8a16565b6001600160a01b038085166000908152600360205260408082209390935590841681522054610b2e908263ffffffff610be716565b6001600160a01b0380841660008181526003602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600082821115610be1576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60008282018381101561061a576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b038216610c9c576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600554610caf908263ffffffff610be716565b6005556001600160a01b038216600090815260036020526040902054610cdb908263ffffffff610be716565b6001600160a01b03831660008181526003602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216610d785760405162461bcd60e51b8152600401808060200182810382526021815260200180610ebb6021913960400191505060405180910390fd5b600554610d8b908263ffffffff610b8a16565b6005556001600160a01b038216600090815260036020526040902054610db7908263ffffffff610b8a16565b6001600160a01b0383166000818152600360209081526040808320949094558351858152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35050565b610e188282610d33565b6001600160a01b038216600090815260046020908152604080832033808552925290912054610747918491610611908563ffffffff610b8a1656fe63616c6c6572206d757374206265207468652076656e64696e67206d616368696e6545524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a265627a7a7231582088ddd6e272935253c28b77ec01b53b5a0046789b2619af07bade304d0c0d744464736f6c63430005110032",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061012c5760003560e01c80636a9d5c84116100ad578063a9059cbb11610071578063a9059cbb146103b9578063c27b7a24146103e5578063cae9ca5114610402578063dd62ed3e146104bd578063e2d6f634146104eb5761012c565b80636a9d5c841461030757806370a082311461033357806379cc67901461035957806395d89b4114610385578063a457c2d71461038d5761012c565b806339509351116100f4578063395093511461025c57806340899d651461028857806340c10f19146102b657806342966c68146102e25780634ed9af4c146102ff5761012c565b806306fdde0314610131578063095ea7b3146101ae57806318160ddd146101ee57806323b872dd14610208578063313ce5671461023e575b600080fd5b610139610517565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561017357818101518382015260200161015b565b50505050905090810190601f1680156101a05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101da600480360360408110156101c457600080fd5b506001600160a01b0381351690602001356105ad565b604080519115158252519081900360200190f35b6101f66105c3565b60408051918252519081900360200190f35b6101da6004803603606081101561021e57600080fd5b506001600160a01b038135811691602081013590911690604001356105c9565b610246610621565b6040805160ff9092168252519081900360200190f35b6101da6004803603604081101561027257600080fd5b506001600160a01b03813516906020013561062a565b6102b46004803603604081101561029e57600080fd5b506001600160a01b038135169060200135610666565b005b6101da600480360360408110156102cc57600080fd5b506001600160a01b038135169060200135610696565b6102b4600480360360208110156102f857600080fd5b50356106ec565b6102b46106f9565b6101da6004803603604081101561031d57600080fd5b506001600160a01b038135169060200135610716565b6101f66004803603602081101561034957600080fd5b50356001600160a01b0316610722565b6102b46004803603604081101561036f57600080fd5b506001600160a01b03813516906020013561073d565b61013961074b565b6101da600480360360408110156103a357600080fd5b506001600160a01b0381351690602001356107ab565b6101da600480360360408110156103cf57600080fd5b506001600160a01b0381351690602001356107e7565b6102b4600480360360208110156103fb57600080fd5b50356107f4565b6101da6004803603606081101561041857600080fd5b6001600160a01b038235169160208101359181019060608101604082013564010000000081111561044857600080fd5b82018360208201111561045a57600080fd5b8035906020019184600183028401116401000000008311171561047c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610820945050505050565b6101f6600480360360408110156104d357600080fd5b506001600160a01b0381358116916020013516610925565b6102b46004803603604081101561050157600080fd5b506001600160a01b038135169060200135610950565b60008054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105a35780601f10610578576101008083540402835291602001916105a3565b820191906000526020600020905b81548152906001019060200180831161058657829003601f168201915b5050505050905090565b60006105ba33848461095a565b50600192915050565b60055490565b60006105d6848484610a46565b6001600160a01b038416600090815260046020908152604080832033808552925290912054610616918691610611908663ffffffff610b8a16565b61095a565b5060015b9392505050565b60025460ff1690565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916105ba918590610611908663ffffffff610be716565b60006106723384610925565b905080156106865761068483826107ab565b505b61069083836105ad565b50505050565b6006546000906001600160a01b031633146106e25760405162461bcd60e51b8152600401808060200182810382526022815260200180610e546022913960400191505060405180910390fd5b6105ba8383610c41565b6106f63382610d33565b50565b600061070433610722565b905080156106f6576106f63382610d33565b60006105ba8383610c41565b6001600160a01b031660009081526003602052604090205490565b6107478282610e0e565b5050565b60018054604080516020601f600260001961010087891615020190951694909404938401819004810282018101909252828152606093909290918301828280156105a35780601f10610578576101008083540402835291602001916105a3565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916105ba918590610611908663ffffffff610b8a16565b60006105ba338484610a46565b60006107ff33610722565b90508015610811576108113382610950565b61081b3383610716565b505050565b600061082c84846105ad565b1561091b57604051638f4ffcb160e01b815233600482018181526024830186905230604484018190526080606485019081528651608486015286516001600160a01b038a1695638f4ffcb195948a94938a939192909160a490910190602085019080838360005b838110156108ab578181015183820152602001610893565b50505050905090810190601f1680156108d85780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156108fa57600080fd5b505af115801561090e573d6000803e3d6000fd5b505050506001905061061a565b5060009392505050565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b6107478282610d33565b6001600160a01b03831661099f5760405162461bcd60e51b8152600401808060200182810382526024815260200180610f016024913960400191505060405180910390fd5b6001600160a01b0382166109e45760405162461bcd60e51b8152600401808060200182810382526022815260200180610e996022913960400191505060405180910390fd5b6001600160a01b03808416600081815260046020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610a8b5760405162461bcd60e51b8152600401808060200182810382526025815260200180610edc6025913960400191505060405180910390fd5b6001600160a01b038216610ad05760405162461bcd60e51b8152600401808060200182810382526023815260200180610e766023913960400191505060405180910390fd5b6001600160a01b038316600090815260036020526040902054610af9908263ffffffff610b8a16565b6001600160a01b038085166000908152600360205260408082209390935590841681522054610b2e908263ffffffff610be716565b6001600160a01b0380841660008181526003602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600082821115610be1576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60008282018381101561061a576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b038216610c9c576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600554610caf908263ffffffff610be716565b6005556001600160a01b038216600090815260036020526040902054610cdb908263ffffffff610be716565b6001600160a01b03831660008181526003602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216610d785760405162461bcd60e51b8152600401808060200182810382526021815260200180610ebb6021913960400191505060405180910390fd5b600554610d8b908263ffffffff610b8a16565b6005556001600160a01b038216600090815260036020526040902054610db7908263ffffffff610b8a16565b6001600160a01b0383166000818152600360209081526040808320949094558351858152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35050565b610e188282610d33565b6001600160a01b038216600090815260046020908152604080832033808552925290912054610747918491610611908563ffffffff610b8a1656fe63616c6c6572206d757374206265207468652076656e64696e67206d616368696e6545524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a265627a7a7231582088ddd6e272935253c28b77ec01b53b5a0046789b2619af07bade304d0c0d744464736f6c63430005110032",
  "sourceMap": "212:2921:45:-;;;254:146;8:9:-1;5:2;;;30:1;27;20:12;5:2;254:146:45;;;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;254:146:45;416:163:63;;;;;;;;;;;;-1:-1:-1;;;254:146:45;416:163:63;;;;;;;;;;;;;;;;;-1:-1:-1;;;416:163:63;;;;;;;504:12;;254:146:45;;;;416:163:63;;;790:2:27;;504:12:63;;-1:-1:-1;;416:163:63;504:12;:::i;:::-;-1:-1:-1;526:16:63;;;;:7;;:16;;;;;:::i;:::-;-1:-1:-1;552:9:63;:20;;-1:-1:-1;;552:20:63;;;;;;;;;;;;-1:-1:-1;;413:14:29;:32;;-1:-1:-1;;;;;;413:32:29;-1:-1:-1;;;;;413:32:29;;;;;;;;;;-1:-1:-1;212:2921:45;;-1:-1:-1;212:2921:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;212:2921:45;;;-1:-1:-1;212:2921:45;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;",
  "deployedSourceMap": "212:2921:45:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;212:2921:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;644:81:63;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;644:81:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2453:145:62;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2453:145:62;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1514:89;;;:::i;:::-;;;;;;;;;;;;;;;;3055:252;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;3055:252:62;;;;;;;;;;;;;;;;;:::i;1478:81:63:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3702:203:62;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;3702:203:62;;;;;;;;:::i;2838:293:45:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2838:293:45;;;;;;;;:::i;:::-;;1202:373:27;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1202:373:27;;;;;;;;:::i;2211:83::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2211:83:27;;:::i;2007:183:45:-;;;:::i;876:204::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;876:204:45;;;;;;;;:::i;1661:108:62:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1661:108:62;-1:-1:-1;;;;;1661:108:62;;:::i;1940:107:27:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1940:107:27;;;;;;;;:::i;838:85:63:-;;;:::i;4392:213:62:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;4392:213:62;;;;;;;;:::i;1972:153::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1972:153:62;;;;;;;;:::i;2340:250:45:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2340:250:45;;:::i;3046:477:27:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;3046:477:27;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;3046:477:27;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;3046:477:27;;;;;;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;3046:477:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;3046:477:27;;-1:-1:-1;3046:477:27;;-1:-1:-1;;;;;3046:477:27:i;2183:132:62:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2183:132:62;;;;;;;;;;:::i;1629:228:45:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1629:228:45;;;;;;;;:::i;644:81:63:-;713:5;706:12;;;;;;;;-1:-1:-1;;706:12:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;681:13;;706:12;;713:5;;706:12;;713:5;706:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;644:81;:::o;2453:145:62:-;2518:4;2534:36;2543:10;2555:7;2564:5;2534:8;:36::i;:::-;-1:-1:-1;2587:4:62;2453:145;;;;:::o;1514:89::-;1584:12;;1514:89;:::o;3055:252::-;3144:4;3160:36;3170:6;3178:9;3189:6;3160:9;:36::i;:::-;-1:-1:-1;;;;;3235:19:62;;;;;;:11;:19;;;;;;;;3223:10;3235:31;;;;;;;;;3206:73;;3215:6;;3235:43;;3271:6;3235:43;:35;:43;:::i;:::-;3206:8;:73::i;:::-;-1:-1:-1;3296:4:62;3055:252;;;;;;:::o;1478:81:63:-;1543:9;;;;1478:81;:::o;3702:203:62:-;3807:10;3782:4;3828:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;3828:32:62;;;;;;;;;;3782:4;;3798:79;;3819:7;;3828:48;;3865:10;3828:48;:36;:48;:::i;2838:293:45:-;2920:24;2947:31;2957:10;2969:8;2947:9;:31::i;:::-;2920:58;-1:-1:-1;2992:20:45;;2988:95;;3027:45;3045:8;3055:16;3027:17;:45::i;:::-;;2988:95;3092:32;3100:8;3110:13;3092:7;:32::i;:::-;;2838:293;;;:::o;1202:373:27:-;632:14:29;;1312:4:27;;-1:-1:-1;;;;;632:14:29;618:10;:28;597:109;;;;-1:-1:-1;;;597:109:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1523:24:27;1529:8;1539:7;1523:5;:24::i;2211:83::-;2261:26;2267:10;2279:7;2261:5;:26::i;:::-;2211:83;:::o;2007:183:45:-;2047:22;2072:21;2082:10;2072:9;:21::i;:::-;2047:46;-1:-1:-1;2107:18:45;;2103:81;;2140:33;2146:10;2158:14;2140:5;:33::i;876:204::-;946:4;1028:24;1034:8;1044:7;1028:5;:24::i;1661:108:62:-;-1:-1:-1;;;;;1744:18:62;1718:7;1744:18;;;:9;:18;;;;;;;1661:108::o;1940:107:27:-;2012:28;2022:8;2032:7;2012:9;:28::i;:::-;1940:107;;:::o;838:85:63:-;909:7;902:14;;;;;;;;-1:-1:-1;;902:14:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;877:13;;902:14;;909:7;;902:14;;909:7;902:14;;;;;;;;;;;;;;;;;;;;;;;;4392:213:62;4502:10;4477:4;4523:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;4523:32:62;;;;;;;;;;4477:4;;4493:84;;4514:7;;4523:53;;4560:15;4523:53;:36;:53;:::i;1972:153::-;2041:4;2057:40;2067:10;2079:9;2090:6;2057:9;:40::i;2340:250:45:-;2400:22;2425:21;2435:10;2425:9;:21::i;:::-;2400:46;-1:-1:-1;2459:18:45;;2456:84;;2492:37;2502:10;2514:14;2492:9;:37::i;:::-;2549:34;2559:10;2571:11;2549:9;:34::i;:::-;;2340:250;;:::o;3046:477:27:-;3183:4;3260:34;3276:8;3287:6;3260:7;:34::i;:::-;3256:239;;;3310:149;;-1:-1:-1;;;3310:149:27;;3352:10;3310:149;;;;;;;;;;;;3412:4;3310:149;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3310:24:27;;;;;3352:10;3380:6;;3412:4;3435:10;;3310:149;;;;;;;;;;;;;;;;-1:-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;3310:149:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3310:149:27;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3310:149:27;;;;3480:4;3473:11;;;;3256:239;-1:-1:-1;3511:5:27;3046:477;;;;;:::o;2183:132:62:-;-1:-1:-1;;;;;2281:18:62;;;2255:7;2281:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;2183:132::o;1629:228:45:-;1826:24;1832:8;1842:7;1826:5;:24::i;7117:329:62:-;-1:-1:-1;;;;;7209:19:62;;7201:68;;;;-1:-1:-1;;;7201:68:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7287:21:62;;7279:68;;;;-1:-1:-1;;;7279:68:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7358:18:62;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:35;;;7408:31;;;;;;;;;;;;;;;;;7117:329;;;:::o;5079:422::-;-1:-1:-1;;;;;5176:20:62;;5168:70;;;;-1:-1:-1;;;5168:70:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5256:23:62;;5248:71;;;;-1:-1:-1;;;5248:71:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5350:17:62;;;;;;:9;:17;;;;;;:29;;5372:6;5350:29;:21;:29;:::i;:::-;-1:-1:-1;;;;;5330:17:62;;;;;;;:9;:17;;;;;;:49;;;;5412:20;;;;;;;:32;;5437:6;5412:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;5389:20:62;;;;;;;:9;:20;;;;;;;;;:55;;;;5459:35;;;;;;;5389:20;;5459:35;;;;;;;;;;;;;5079:422;;;:::o;1274:179:60:-;1332:7;1364:1;1359;:6;;1351:49;;;;;-1:-1:-1;;;1351:49:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1422:5:60;;;1274:179::o;834:176::-;892:7;923:5;;;946:6;;;;938:46;;;;;-1:-1:-1;;;938:46:60;;;;;;;;;;;;;;;;;;;;;;;;;;;5771:302:62;-1:-1:-1;;;;;5846:21:62;;5838:65;;;;;-1:-1:-1;;;5838:65:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;5929:12;;:24;;5946:6;5929:24;:16;:24;:::i;:::-;5914:12;:39;-1:-1:-1;;;;;5984:18:62;;;;;;:9;:18;;;;;;:30;;6007:6;5984:30;:22;:30;:::i;:::-;-1:-1:-1;;;;;5963:18:62;;;;;;:9;:18;;;;;;;;:51;;;;6029:37;;;;;;;5963:18;;;;6029:37;;;;;;;;;;5771:302;;:::o;6392:300::-;-1:-1:-1;;;;;6466:21:62;;6458:67;;;;-1:-1:-1;;;6458:67:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6551:12;;:23;;6568:5;6551:23;:16;:23;:::i;:::-;6536:12;:38;-1:-1:-1;;;;;6605:18:62;;;;;;:9;:18;;;;;;:29;;6628:5;6605:29;:22;:29;:::i;:::-;-1:-1:-1;;;;;6584:18:62;;;;;;:9;:18;;;;;;;;:50;;;;6649:36;;;;;;;6584:18;;6649:36;;;;;;;;;;;6392:300;;:::o;7623:185::-;7694:22;7700:7;7709:6;7694:5;:22::i;:::-;-1:-1:-1;;;;;7756:20:62;;;;;;:11;:20;;;;;;;;7744:10;7756:32;;;;;;;;;7726:75;;7735:7;;7756:44;;7793:6;7756:44;:36;:44;:::i",
  "source": "pragma solidity 0.5.17;\n\nimport \"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\";\nimport \"openzeppelin-solidity/contracts/token/ERC20/ERC20Detailed.sol\";\nimport \"../../../contracts/system/TBTCToken.sol\";\n\ncontract TestTBTCToken is TBTCToken{\n\n    constructor(address _vendingMachine)\n        TBTCToken(_vendingMachine)\n    public {\n        // solium-disable-previous-line no-empty-blocks\n    }\n\n    /// @dev             We can't call TBTCToken mint function from deposit Test becuase of ACL.\n    ///                  This function bypasses ACL and can be called in Deposit tests\n    ///                  Mints an amount of the token and assigns it to an account.\n    ///                  Uses the internal _mint function.\n    /// @param _account  The account that will receive the created tokens.\n    /// @param _amount   The amount of tokens that will be created.\n    function forceMint(address _account, uint256 _amount) public returns (bool){\n        // NOTE: this is a public function with unchecked minting.\n        _mint(_account, _amount);\n        return true;\n    }\n\n    /// @dev             We can't call TBTCToken burn function from deposit Test becuase of ACL.\n    ///                  This function bypasses ACL and can be called in Deposit tests.\n    ///                  Burns an amount of the token of a given account\n    ///                  deducting from the sender's allowance for said account.\n    ///                  Bypasses ACL and can be called in Deposit tests\n    /// @param _account  The account whose tokens will be burnt.\n    /// @param _amount   The amount of tokens that will be burnt.\n    function forceBurn(address _account, uint256 _amount) public {\n        // NOTE: this uses internal function _burn instead of _burnFrom.\n        // This will bypass allowance check for now.\n        _burn(_account, _amount);\n    }\n\n    /// @dev                Zeros out the balance of the calling address.\n    ///                     Does nothing if address has zero balance.\n    function zeroBalance() public {\n        uint256 currentBalance = balanceOf(msg.sender);\n        if (currentBalance > 0){\n            _burn(msg.sender, currentBalance);\n        }\n    }\n\n    /// @dev                Uses exposed token functions to reset caller's balance.\n    /// @param _newBalance  New balance to assign to caller\n    function resetBalance(uint256 _newBalance) public {\n        uint256 currentBalance = balanceOf(msg.sender);\n        if(currentBalance > 0){\n            forceBurn(msg.sender, currentBalance);\n        }\n        forceMint(msg.sender, _newBalance);\n    }\n\n    /// @dev                   Uses exposed token functions to reset the allowance\n    ///                        of a given account.\n    /// @param _spender        The allowed account.\n    /// @param _newAllowance   New allowance to assign.\n    function resetAllowance(address _spender, uint256 _newAllowance) public {\n        uint256 currentAllowance = allowance(msg.sender, _spender);\n        if (currentAllowance > 0){\n            decreaseAllowance(_spender, currentAllowance);\n        }\n        approve(_spender, _newAllowance);\n    }\n}\n",
  "sourcePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/test/system/TestTBTCToken.sol",
  "ast": {
    "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/test/system/TestTBTCToken.sol",
    "exportedSymbols": {
      "TestTBTCToken": [
        11376
      ]
    },
    "id": 11377,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 11248,
        "literals": [
          "solidity",
          "0.5",
          ".17"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:45"
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol",
        "file": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol",
        "id": 11249,
        "nodeType": "ImportDirective",
        "scope": 11377,
        "sourceUnit": 17364,
        "src": "25:63:45",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20Detailed.sol",
        "file": "openzeppelin-solidity/contracts/token/ERC20/ERC20Detailed.sol",
        "id": 11250,
        "nodeType": "ImportDirective",
        "scope": 11377,
        "sourceUnit": 17422,
        "src": "89:71:45",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/system/TBTCToken.sol",
        "file": "../../../contracts/system/TBTCToken.sol",
        "id": 11251,
        "nodeType": "ImportDirective",
        "scope": 11377,
        "sourceUnit": 8562,
        "src": "161:49:45",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 11252,
              "name": "TBTCToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8561,
              "src": "238:9:45",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TBTCToken_$8561",
                "typeString": "contract TBTCToken"
              }
            },
            "id": 11253,
            "nodeType": "InheritanceSpecifier",
            "src": "238:9:45"
          }
        ],
        "contractDependencies": [
          8561,
          9150,
          17363,
          17421,
          17490
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 11376,
        "linearizedBaseContracts": [
          11376,
          8561,
          9150,
          17363,
          17421,
          17490
        ],
        "name": "TestTBTCToken",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 11261,
              "nodeType": "Block",
              "src": "337:63:45",
              "statements": []
            },
            "documentation": null,
            "id": 11262,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 11258,
                    "name": "_vendingMachine",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11255,
                    "src": "309:15:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 11259,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 11257,
                  "name": "TBTCToken",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8561,
                  "src": "299:9:45",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_TBTCToken_$8561_$",
                    "typeString": "type(contract TBTCToken)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "299:26:45"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11256,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11255,
                  "name": "_vendingMachine",
                  "nodeType": "VariableDeclaration",
                  "scope": 11262,
                  "src": "266:23:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11254,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "266:7:45",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "265:25:45"
            },
            "returnParameters": {
              "id": 11260,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "337:0:45"
            },
            "scope": 11376,
            "src": "254:146:45",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11278,
              "nodeType": "Block",
              "src": "951:129:45",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11272,
                        "name": "_account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11264,
                        "src": "1034:8:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11273,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11266,
                        "src": "1044:7:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 11271,
                      "name": "_mint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17249,
                      "src": "1028:5:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 11274,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1028:24:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11275,
                  "nodeType": "ExpressionStatement",
                  "src": "1028:24:45"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 11276,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1069:4:45",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 11270,
                  "id": 11277,
                  "nodeType": "Return",
                  "src": "1062:11:45"
                }
              ]
            },
            "documentation": "@dev             We can't call TBTCToken mint function from deposit Test becuase of ACL.\n                  This function bypasses ACL and can be called in Deposit tests\n                  Mints an amount of the token and assigns it to an account.\n                  Uses the internal _mint function.\n @param _account  The account that will receive the created tokens.\n @param _amount   The amount of tokens that will be created.",
            "id": 11279,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "forceMint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11267,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11264,
                  "name": "_account",
                  "nodeType": "VariableDeclaration",
                  "scope": 11279,
                  "src": "895:16:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11263,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "895:7:45",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11266,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 11279,
                  "src": "913:15:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11265,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "913:7:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "894:35:45"
            },
            "returnParameters": {
              "id": 11270,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11269,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 11279,
                  "src": "946:4:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 11268,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "946:4:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "945:6:45"
            },
            "scope": 11376,
            "src": "876:204:45",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11291,
              "nodeType": "Block",
              "src": "1690:167:45",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11287,
                        "name": "_account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11281,
                        "src": "1832:8:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11288,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11283,
                        "src": "1842:7:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 11286,
                      "name": "_burn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17292,
                      "src": "1826:5:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 11289,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1826:24:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11290,
                  "nodeType": "ExpressionStatement",
                  "src": "1826:24:45"
                }
              ]
            },
            "documentation": "@dev             We can't call TBTCToken burn function from deposit Test becuase of ACL.\n                  This function bypasses ACL and can be called in Deposit tests.\n                  Burns an amount of the token of a given account\n                  deducting from the sender's allowance for said account.\n                  Bypasses ACL and can be called in Deposit tests\n @param _account  The account whose tokens will be burnt.\n @param _amount   The amount of tokens that will be burnt.",
            "id": 11292,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "forceBurn",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11284,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11281,
                  "name": "_account",
                  "nodeType": "VariableDeclaration",
                  "scope": 11292,
                  "src": "1648:16:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11280,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1648:7:45",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11283,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 11292,
                  "src": "1666:15:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11282,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1666:7:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1647:35:45"
            },
            "returnParameters": {
              "id": 11285,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1690:0:45"
            },
            "scope": 11376,
            "src": "1629:228:45",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11313,
              "nodeType": "Block",
              "src": "2037:153:45",
              "statements": [
                {
                  "assignments": [
                    11296
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11296,
                      "name": "currentBalance",
                      "nodeType": "VariableDeclaration",
                      "scope": 11313,
                      "src": "2047:22:45",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 11295,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2047:7:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11301,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 11298,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18360,
                          "src": "2082:3:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 11299,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2082:10:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 11297,
                      "name": "balanceOf",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17007,
                      "src": "2072:9:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view returns (uint256)"
                      }
                    },
                    "id": 11300,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2072:21:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2047:46:45"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 11304,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 11302,
                      "name": "currentBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11296,
                      "src": "2107:14:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 11303,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2124:1:45",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "2107:18:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 11312,
                  "nodeType": "IfStatement",
                  "src": "2103:81:45",
                  "trueBody": {
                    "id": 11311,
                    "nodeType": "Block",
                    "src": "2126:58:45",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 11306,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18360,
                                "src": "2146:3:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 11307,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "2146:10:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 11308,
                              "name": "currentBalance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11296,
                              "src": "2158:14:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 11305,
                            "name": "_burn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17292,
                            "src": "2140:5:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 11309,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2140:33:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 11310,
                        "nodeType": "ExpressionStatement",
                        "src": "2140:33:45"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev                Zeros out the balance of the calling address.\n                     Does nothing if address has zero balance.",
            "id": 11314,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "zeroBalance",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11293,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2027:2:45"
            },
            "returnParameters": {
              "id": 11294,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2037:0:45"
            },
            "scope": 11376,
            "src": "2007:183:45",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11343,
              "nodeType": "Block",
              "src": "2390:200:45",
              "statements": [
                {
                  "assignments": [
                    11320
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11320,
                      "name": "currentBalance",
                      "nodeType": "VariableDeclaration",
                      "scope": 11343,
                      "src": "2400:22:45",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 11319,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2400:7:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11325,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 11322,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18360,
                          "src": "2435:3:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 11323,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2435:10:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 11321,
                      "name": "balanceOf",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17007,
                      "src": "2425:9:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view returns (uint256)"
                      }
                    },
                    "id": 11324,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2425:21:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2400:46:45"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 11328,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 11326,
                      "name": "currentBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11320,
                      "src": "2459:14:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 11327,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2476:1:45",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "2459:18:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 11336,
                  "nodeType": "IfStatement",
                  "src": "2456:84:45",
                  "trueBody": {
                    "id": 11335,
                    "nodeType": "Block",
                    "src": "2478:62:45",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 11330,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18360,
                                "src": "2502:3:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 11331,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "2502:10:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 11332,
                              "name": "currentBalance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11320,
                              "src": "2514:14:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 11329,
                            "name": "forceBurn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11292,
                            "src": "2492:9:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 11333,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2492:37:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 11334,
                        "nodeType": "ExpressionStatement",
                        "src": "2492:37:45"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 11338,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18360,
                          "src": "2559:3:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 11339,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2559:10:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11340,
                        "name": "_newBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11316,
                        "src": "2571:11:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 11337,
                      "name": "forceMint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11279,
                      "src": "2549:9:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) returns (bool)"
                      }
                    },
                    "id": 11341,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2549:34:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 11342,
                  "nodeType": "ExpressionStatement",
                  "src": "2549:34:45"
                }
              ]
            },
            "documentation": "@dev                Uses exposed token functions to reset caller's balance.\n @param _newBalance  New balance to assign to caller",
            "id": 11344,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "resetBalance",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11317,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11316,
                  "name": "_newBalance",
                  "nodeType": "VariableDeclaration",
                  "scope": 11344,
                  "src": "2362:19:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11315,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2362:7:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2361:21:45"
            },
            "returnParameters": {
              "id": 11318,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2390:0:45"
            },
            "scope": 11376,
            "src": "2340:250:45",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11374,
              "nodeType": "Block",
              "src": "2910:221:45",
              "statements": [
                {
                  "assignments": [
                    11352
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11352,
                      "name": "currentAllowance",
                      "nodeType": "VariableDeclaration",
                      "scope": 11374,
                      "src": "2920:24:45",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 11351,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2920:7:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11358,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 11354,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18360,
                          "src": "2957:3:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 11355,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2957:10:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11356,
                        "name": "_spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11346,
                        "src": "2969:8:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 11353,
                      "name": "allowance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17042,
                      "src": "2947:9:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address,address) view returns (uint256)"
                      }
                    },
                    "id": 11357,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2947:31:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2920:58:45"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 11361,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 11359,
                      "name": "currentAllowance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11352,
                      "src": "2992:16:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 11360,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3011:1:45",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "2992:20:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 11368,
                  "nodeType": "IfStatement",
                  "src": "2988:95:45",
                  "trueBody": {
                    "id": 11367,
                    "nodeType": "Block",
                    "src": "3013:70:45",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 11363,
                              "name": "_spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11346,
                              "src": "3045:8:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 11364,
                              "name": "currentAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11352,
                              "src": "3055:16:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 11362,
                            "name": "decreaseAllowance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17150,
                            "src": "3027:17:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,uint256) returns (bool)"
                            }
                          },
                          "id": 11365,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3027:45:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 11366,
                        "nodeType": "ExpressionStatement",
                        "src": "3027:45:45"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11370,
                        "name": "_spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11346,
                        "src": "3100:8:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11371,
                        "name": "_newAllowance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11348,
                        "src": "3110:13:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 11369,
                      "name": "approve",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17061,
                      "src": "3092:7:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) returns (bool)"
                      }
                    },
                    "id": 11372,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3092:32:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 11373,
                  "nodeType": "ExpressionStatement",
                  "src": "3092:32:45"
                }
              ]
            },
            "documentation": "@dev                   Uses exposed token functions to reset the allowance\n                        of a given account.\n @param _spender        The allowed account.\n @param _newAllowance   New allowance to assign.",
            "id": 11375,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "resetAllowance",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11349,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11346,
                  "name": "_spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 11375,
                  "src": "2862:16:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11345,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2862:7:45",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11348,
                  "name": "_newAllowance",
                  "nodeType": "VariableDeclaration",
                  "scope": 11375,
                  "src": "2880:21:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11347,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2880:7:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2861:41:45"
            },
            "returnParameters": {
              "id": 11350,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2910:0:45"
            },
            "scope": 11376,
            "src": "2838:293:45",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 11377,
        "src": "212:2921:45"
      }
    ],
    "src": "0:3134:45"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/test/system/TestTBTCToken.sol",
      "exportedSymbols": {
        "TestTBTCToken": [
          11376
        ]
      }
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "0.5",
            ".17"
          ]
        },
        "id": 11248,
        "name": "PragmaDirective",
        "src": "0:23:45"
      },
      {
        "attributes": {
          "SourceUnit": 17364,
          "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol",
          "file": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol",
          "scope": 11377,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 11249,
        "name": "ImportDirective",
        "src": "25:63:45"
      },
      {
        "attributes": {
          "SourceUnit": 17422,
          "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20Detailed.sol",
          "file": "openzeppelin-solidity/contracts/token/ERC20/ERC20Detailed.sol",
          "scope": 11377,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 11250,
        "name": "ImportDirective",
        "src": "89:71:45"
      },
      {
        "attributes": {
          "SourceUnit": 8562,
          "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/system/TBTCToken.sol",
          "file": "../../../contracts/system/TBTCToken.sol",
          "scope": 11377,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 11251,
        "name": "ImportDirective",
        "src": "161:49:45"
      },
      {
        "attributes": {
          "contractDependencies": [
            8561,
            9150,
            17363,
            17421,
            17490
          ],
          "contractKind": "contract",
          "documentation": null,
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            11376,
            8561,
            9150,
            17363,
            17421,
            17490
          ],
          "name": "TestTBTCToken",
          "scope": 11377
        },
        "children": [
          {
            "attributes": {
              "arguments": null
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "TBTCToken",
                  "referencedDeclaration": 8561,
                  "type": "contract TBTCToken"
                },
                "id": 11252,
                "name": "UserDefinedTypeName",
                "src": "238:9:45"
              }
            ],
            "id": 11253,
            "name": "InheritanceSpecifier",
            "src": "238:9:45"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": true,
              "kind": "constructor",
              "name": "",
              "scope": 11376,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_vendingMachine",
                      "scope": 11262,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 11254,
                        "name": "ElementaryTypeName",
                        "src": "266:7:45"
                      }
                    ],
                    "id": 11255,
                    "name": "VariableDeclaration",
                    "src": "266:23:45"
                  }
                ],
                "id": 11256,
                "name": "ParameterList",
                "src": "265:25:45"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 11260,
                "name": "ParameterList",
                "src": "337:0:45"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 8561,
                      "type": "type(contract TBTCToken)",
                      "value": "TBTCToken"
                    },
                    "id": 11257,
                    "name": "Identifier",
                    "src": "299:9:45"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 11255,
                      "type": "address",
                      "value": "_vendingMachine"
                    },
                    "id": 11258,
                    "name": "Identifier",
                    "src": "309:15:45"
                  }
                ],
                "id": 11259,
                "name": "ModifierInvocation",
                "src": "299:26:45"
              },
              {
                "attributes": {
                  "statements": [
                    null
                  ]
                },
                "children": [],
                "id": 11261,
                "name": "Block",
                "src": "337:63:45"
              }
            ],
            "id": 11262,
            "name": "FunctionDefinition",
            "src": "254:146:45"
          },
          {
            "attributes": {
              "documentation": "@dev             We can't call TBTCToken mint function from deposit Test becuase of ACL.\n                  This function bypasses ACL and can be called in Deposit tests\n                  Mints an amount of the token and assigns it to an account.\n                  Uses the internal _mint function.\n @param _account  The account that will receive the created tokens.\n @param _amount   The amount of tokens that will be created.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "forceMint",
              "scope": 11376,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_account",
                      "scope": 11279,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 11263,
                        "name": "ElementaryTypeName",
                        "src": "895:7:45"
                      }
                    ],
                    "id": 11264,
                    "name": "VariableDeclaration",
                    "src": "895:16:45"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_amount",
                      "scope": 11279,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 11265,
                        "name": "ElementaryTypeName",
                        "src": "913:7:45"
                      }
                    ],
                    "id": 11266,
                    "name": "VariableDeclaration",
                    "src": "913:15:45"
                  }
                ],
                "id": 11267,
                "name": "ParameterList",
                "src": "894:35:45"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 11279,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 11268,
                        "name": "ElementaryTypeName",
                        "src": "946:4:45"
                      }
                    ],
                    "id": 11269,
                    "name": "VariableDeclaration",
                    "src": "946:4:45"
                  }
                ],
                "id": 11270,
                "name": "ParameterList",
                "src": "945:6:45"
              },
              {
                "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_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 17249,
                              "type": "function (address,uint256)",
                              "value": "_mint"
                            },
                            "id": 11271,
                            "name": "Identifier",
                            "src": "1028:5:45"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 11264,
                              "type": "address",
                              "value": "_account"
                            },
                            "id": 11272,
                            "name": "Identifier",
                            "src": "1034:8:45"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 11266,
                              "type": "uint256",
                              "value": "_amount"
                            },
                            "id": 11273,
                            "name": "Identifier",
                            "src": "1044:7:45"
                          }
                        ],
                        "id": 11274,
                        "name": "FunctionCall",
                        "src": "1028:24:45"
                      }
                    ],
                    "id": 11275,
                    "name": "ExpressionStatement",
                    "src": "1028:24:45"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 11270
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "hexvalue": "74727565",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "subdenomination": null,
                          "token": "bool",
                          "type": "bool",
                          "value": "true"
                        },
                        "id": 11276,
                        "name": "Literal",
                        "src": "1069:4:45"
                      }
                    ],
                    "id": 11277,
                    "name": "Return",
                    "src": "1062:11:45"
                  }
                ],
                "id": 11278,
                "name": "Block",
                "src": "951:129:45"
              }
            ],
            "id": 11279,
            "name": "FunctionDefinition",
            "src": "876:204:45"
          },
          {
            "attributes": {
              "documentation": "@dev             We can't call TBTCToken burn function from deposit Test becuase of ACL.\n                  This function bypasses ACL and can be called in Deposit tests.\n                  Burns an amount of the token of a given account\n                  deducting from the sender's allowance for said account.\n                  Bypasses ACL and can be called in Deposit tests\n @param _account  The account whose tokens will be burnt.\n @param _amount   The amount of tokens that will be burnt.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "forceBurn",
              "scope": 11376,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_account",
                      "scope": 11292,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 11280,
                        "name": "ElementaryTypeName",
                        "src": "1648:7:45"
                      }
                    ],
                    "id": 11281,
                    "name": "VariableDeclaration",
                    "src": "1648:16:45"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_amount",
                      "scope": 11292,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 11282,
                        "name": "ElementaryTypeName",
                        "src": "1666:7:45"
                      }
                    ],
                    "id": 11283,
                    "name": "VariableDeclaration",
                    "src": "1666:15:45"
                  }
                ],
                "id": 11284,
                "name": "ParameterList",
                "src": "1647:35:45"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 11285,
                "name": "ParameterList",
                "src": "1690:0:45"
              },
              {
                "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_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 17292,
                              "type": "function (address,uint256)",
                              "value": "_burn"
                            },
                            "id": 11286,
                            "name": "Identifier",
                            "src": "1826:5:45"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 11281,
                              "type": "address",
                              "value": "_account"
                            },
                            "id": 11287,
                            "name": "Identifier",
                            "src": "1832:8:45"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 11283,
                              "type": "uint256",
                              "value": "_amount"
                            },
                            "id": 11288,
                            "name": "Identifier",
                            "src": "1842:7:45"
                          }
                        ],
                        "id": 11289,
                        "name": "FunctionCall",
                        "src": "1826:24:45"
                      }
                    ],
                    "id": 11290,
                    "name": "ExpressionStatement",
                    "src": "1826:24:45"
                  }
                ],
                "id": 11291,
                "name": "Block",
                "src": "1690:167:45"
              }
            ],
            "id": 11292,
            "name": "FunctionDefinition",
            "src": "1629:228:45"
          },
          {
            "attributes": {
              "documentation": "@dev                Zeros out the balance of the calling address.\n                     Does nothing if address has zero balance.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "zeroBalance",
              "scope": 11376,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 11293,
                "name": "ParameterList",
                "src": "2027:2:45"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 11294,
                "name": "ParameterList",
                "src": "2037:0:45"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        11296
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "currentBalance",
                          "scope": 11313,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 11295,
                            "name": "ElementaryTypeName",
                            "src": "2047:7:45"
                          }
                        ],
                        "id": 11296,
                        "name": "VariableDeclaration",
                        "src": "2047:22:45"
                      },
                      {
                        "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_payable",
                                  "typeString": "address payable"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 17007,
                              "type": "function (address) view returns (uint256)",
                              "value": "balanceOf"
                            },
                            "id": 11297,
                            "name": "Identifier",
                            "src": "2072:9:45"
                          },
                          {
                            "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": 11298,
                                "name": "Identifier",
                                "src": "2082:3:45"
                              }
                            ],
                            "id": 11299,
                            "name": "MemberAccess",
                            "src": "2082:10:45"
                          }
                        ],
                        "id": 11300,
                        "name": "FunctionCall",
                        "src": "2072:21:45"
                      }
                    ],
                    "id": 11301,
                    "name": "VariableDeclarationStatement",
                    "src": "2047:46:45"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": ">",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 11296,
                              "type": "uint256",
                              "value": "currentBalance"
                            },
                            "id": 11302,
                            "name": "Identifier",
                            "src": "2107:14:45"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 11303,
                            "name": "Literal",
                            "src": "2124:1:45"
                          }
                        ],
                        "id": 11304,
                        "name": "BinaryOperation",
                        "src": "2107:18:45"
                      },
                      {
                        "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_address_payable",
                                          "typeString": "address payable"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 17292,
                                      "type": "function (address,uint256)",
                                      "value": "_burn"
                                    },
                                    "id": 11305,
                                    "name": "Identifier",
                                    "src": "2140:5:45"
                                  },
                                  {
                                    "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": 11306,
                                        "name": "Identifier",
                                        "src": "2146:3:45"
                                      }
                                    ],
                                    "id": 11307,
                                    "name": "MemberAccess",
                                    "src": "2146:10:45"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 11296,
                                      "type": "uint256",
                                      "value": "currentBalance"
                                    },
                                    "id": 11308,
                                    "name": "Identifier",
                                    "src": "2158:14:45"
                                  }
                                ],
                                "id": 11309,
                                "name": "FunctionCall",
                                "src": "2140:33:45"
                              }
                            ],
                            "id": 11310,
                            "name": "ExpressionStatement",
                            "src": "2140:33:45"
                          }
                        ],
                        "id": 11311,
                        "name": "Block",
                        "src": "2126:58:45"
                      }
                    ],
                    "id": 11312,
                    "name": "IfStatement",
                    "src": "2103:81:45"
                  }
                ],
                "id": 11313,
                "name": "Block",
                "src": "2037:153:45"
              }
            ],
            "id": 11314,
            "name": "FunctionDefinition",
            "src": "2007:183:45"
          },
          {
            "attributes": {
              "documentation": "@dev                Uses exposed token functions to reset caller's balance.\n @param _newBalance  New balance to assign to caller",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "resetBalance",
              "scope": 11376,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_newBalance",
                      "scope": 11344,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 11315,
                        "name": "ElementaryTypeName",
                        "src": "2362:7:45"
                      }
                    ],
                    "id": 11316,
                    "name": "VariableDeclaration",
                    "src": "2362:19:45"
                  }
                ],
                "id": 11317,
                "name": "ParameterList",
                "src": "2361:21:45"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 11318,
                "name": "ParameterList",
                "src": "2390:0:45"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        11320
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "currentBalance",
                          "scope": 11343,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 11319,
                            "name": "ElementaryTypeName",
                            "src": "2400:7:45"
                          }
                        ],
                        "id": 11320,
                        "name": "VariableDeclaration",
                        "src": "2400:22:45"
                      },
                      {
                        "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_payable",
                                  "typeString": "address payable"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 17007,
                              "type": "function (address) view returns (uint256)",
                              "value": "balanceOf"
                            },
                            "id": 11321,
                            "name": "Identifier",
                            "src": "2425:9:45"
                          },
                          {
                            "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": 11322,
                                "name": "Identifier",
                                "src": "2435:3:45"
                              }
                            ],
                            "id": 11323,
                            "name": "MemberAccess",
                            "src": "2435:10:45"
                          }
                        ],
                        "id": 11324,
                        "name": "FunctionCall",
                        "src": "2425:21:45"
                      }
                    ],
                    "id": 11325,
                    "name": "VariableDeclarationStatement",
                    "src": "2400:46:45"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": ">",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 11320,
                              "type": "uint256",
                              "value": "currentBalance"
                            },
                            "id": 11326,
                            "name": "Identifier",
                            "src": "2459:14:45"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 11327,
                            "name": "Literal",
                            "src": "2476:1:45"
                          }
                        ],
                        "id": 11328,
                        "name": "BinaryOperation",
                        "src": "2459:18:45"
                      },
                      {
                        "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_address_payable",
                                          "typeString": "address payable"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 11292,
                                      "type": "function (address,uint256)",
                                      "value": "forceBurn"
                                    },
                                    "id": 11329,
                                    "name": "Identifier",
                                    "src": "2492:9:45"
                                  },
                                  {
                                    "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": 11330,
                                        "name": "Identifier",
                                        "src": "2502:3:45"
                                      }
                                    ],
                                    "id": 11331,
                                    "name": "MemberAccess",
                                    "src": "2502:10:45"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 11320,
                                      "type": "uint256",
                                      "value": "currentBalance"
                                    },
                                    "id": 11332,
                                    "name": "Identifier",
                                    "src": "2514:14:45"
                                  }
                                ],
                                "id": 11333,
                                "name": "FunctionCall",
                                "src": "2492:37:45"
                              }
                            ],
                            "id": 11334,
                            "name": "ExpressionStatement",
                            "src": "2492:37:45"
                          }
                        ],
                        "id": 11335,
                        "name": "Block",
                        "src": "2478:62:45"
                      }
                    ],
                    "id": 11336,
                    "name": "IfStatement",
                    "src": "2456:84:45"
                  },
                  {
                    "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_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 11279,
                              "type": "function (address,uint256) returns (bool)",
                              "value": "forceMint"
                            },
                            "id": 11337,
                            "name": "Identifier",
                            "src": "2549:9:45"
                          },
                          {
                            "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": 11338,
                                "name": "Identifier",
                                "src": "2559:3:45"
                              }
                            ],
                            "id": 11339,
                            "name": "MemberAccess",
                            "src": "2559:10:45"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 11316,
                              "type": "uint256",
                              "value": "_newBalance"
                            },
                            "id": 11340,
                            "name": "Identifier",
                            "src": "2571:11:45"
                          }
                        ],
                        "id": 11341,
                        "name": "FunctionCall",
                        "src": "2549:34:45"
                      }
                    ],
                    "id": 11342,
                    "name": "ExpressionStatement",
                    "src": "2549:34:45"
                  }
                ],
                "id": 11343,
                "name": "Block",
                "src": "2390:200:45"
              }
            ],
            "id": 11344,
            "name": "FunctionDefinition",
            "src": "2340:250:45"
          },
          {
            "attributes": {
              "documentation": "@dev                   Uses exposed token functions to reset the allowance\n                        of a given account.\n @param _spender        The allowed account.\n @param _newAllowance   New allowance to assign.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "resetAllowance",
              "scope": 11376,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_spender",
                      "scope": 11375,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 11345,
                        "name": "ElementaryTypeName",
                        "src": "2862:7:45"
                      }
                    ],
                    "id": 11346,
                    "name": "VariableDeclaration",
                    "src": "2862:16:45"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_newAllowance",
                      "scope": 11375,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 11347,
                        "name": "ElementaryTypeName",
                        "src": "2880:7:45"
                      }
                    ],
                    "id": 11348,
                    "name": "VariableDeclaration",
                    "src": "2880:21:45"
                  }
                ],
                "id": 11349,
                "name": "ParameterList",
                "src": "2861:41:45"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 11350,
                "name": "ParameterList",
                "src": "2910:0:45"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        11352
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "currentAllowance",
                          "scope": 11374,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 11351,
                            "name": "ElementaryTypeName",
                            "src": "2920:7:45"
                          }
                        ],
                        "id": 11352,
                        "name": "VariableDeclaration",
                        "src": "2920:24:45"
                      },
                      {
                        "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_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 17042,
                              "type": "function (address,address) view returns (uint256)",
                              "value": "allowance"
                            },
                            "id": 11353,
                            "name": "Identifier",
                            "src": "2947:9:45"
                          },
                          {
                            "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": 11354,
                                "name": "Identifier",
                                "src": "2957:3:45"
                              }
                            ],
                            "id": 11355,
                            "name": "MemberAccess",
                            "src": "2957:10:45"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 11346,
                              "type": "address",
                              "value": "_spender"
                            },
                            "id": 11356,
                            "name": "Identifier",
                            "src": "2969:8:45"
                          }
                        ],
                        "id": 11357,
                        "name": "FunctionCall",
                        "src": "2947:31:45"
                      }
                    ],
                    "id": 11358,
                    "name": "VariableDeclarationStatement",
                    "src": "2920:58:45"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": ">",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 11352,
                              "type": "uint256",
                              "value": "currentAllowance"
                            },
                            "id": 11359,
                            "name": "Identifier",
                            "src": "2992:16:45"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 11360,
                            "name": "Literal",
                            "src": "3011:1:45"
                          }
                        ],
                        "id": 11361,
                        "name": "BinaryOperation",
                        "src": "2992:20:45"
                      },
                      {
                        "children": [
                          {
                            "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"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 17150,
                                      "type": "function (address,uint256) returns (bool)",
                                      "value": "decreaseAllowance"
                                    },
                                    "id": 11362,
                                    "name": "Identifier",
                                    "src": "3027:17:45"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 11346,
                                      "type": "address",
                                      "value": "_spender"
                                    },
                                    "id": 11363,
                                    "name": "Identifier",
                                    "src": "3045:8:45"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 11352,
                                      "type": "uint256",
                                      "value": "currentAllowance"
                                    },
                                    "id": 11364,
                                    "name": "Identifier",
                                    "src": "3055:16:45"
                                  }
                                ],
                                "id": 11365,
                                "name": "FunctionCall",
                                "src": "3027:45:45"
                              }
                            ],
                            "id": 11366,
                            "name": "ExpressionStatement",
                            "src": "3027:45:45"
                          }
                        ],
                        "id": 11367,
                        "name": "Block",
                        "src": "3013:70:45"
                      }
                    ],
                    "id": 11368,
                    "name": "IfStatement",
                    "src": "2988:95:45"
                  },
                  {
                    "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"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 17061,
                              "type": "function (address,uint256) returns (bool)",
                              "value": "approve"
                            },
                            "id": 11369,
                            "name": "Identifier",
                            "src": "3092:7:45"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 11346,
                              "type": "address",
                              "value": "_spender"
                            },
                            "id": 11370,
                            "name": "Identifier",
                            "src": "3100:8:45"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 11348,
                              "type": "uint256",
                              "value": "_newAllowance"
                            },
                            "id": 11371,
                            "name": "Identifier",
                            "src": "3110:13:45"
                          }
                        ],
                        "id": 11372,
                        "name": "FunctionCall",
                        "src": "3092:32:45"
                      }
                    ],
                    "id": 11373,
                    "name": "ExpressionStatement",
                    "src": "3092:32:45"
                  }
                ],
                "id": 11374,
                "name": "Block",
                "src": "2910:221:45"
              }
            ],
            "id": 11375,
            "name": "FunctionDefinition",
            "src": "2838:293:45"
          }
        ],
        "id": 11376,
        "name": "ContractDefinition",
        "src": "212:2921:45"
      }
    ],
    "id": 11377,
    "name": "SourceUnit",
    "src": "0:3134:45"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.17+commit.d19bba13.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.3.4",
  "updatedAt": "2021-11-23T11:52:09.380Z",
  "devdoc": {
    "methods": {
      "allowance(address,address)": {
        "details": "See `IERC20.allowance`."
      },
      "approve(address,uint256)": {
        "details": "See `IERC20.approve`.     * Requirements:     * - `spender` cannot be the zero address."
      },
      "approveAndCall(address,uint256,bytes)": {
        "details": "The `_spender` should implement the `ITokenRecipient`                   interface to receive approval notifications.",
        "params": {
          "_extraData": "Extra information to send to the approved contract.",
          "_spender": "Address of contract authorized to spend.",
          "_value": "The max amount they can spend."
        },
        "return": "true if the `_spender` was successfully approved and acted on         the approval, false (or revert) otherwise."
      },
      "balanceOf(address)": {
        "details": "See `IERC20.balanceOf`."
      },
      "burn(uint256)": {
        "details": "Destroys `amount` tokens from `msg.sender`, reducing the total supply.",
        "params": {
          "_amount": "The amount of tokens that will be burnt."
        }
      },
      "burnFrom(address,uint256)": {
        "details": "Burns an amount of the token from the given account's balance.                  deducting from the sender's allowance for said account.                  Uses the internal _burn function.",
        "params": {
          "_account": "The account whose tokens will be burnt.",
          "_amount": "The amount of tokens that will be burnt."
        }
      },
      "decimals()": {
        "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`).     * Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei.     * > Note that this information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including `IERC20.balanceOf` and `IERC20.transfer`."
      },
      "decreaseAllowance(address,uint256)": {
        "details": "Atomically decreases the allowance granted to `spender` by the caller.     * This is an alternative to `approve` that can be used as a mitigation for problems described in `IERC20.approve`.     * Emits an `Approval` event indicating the updated allowance.     * Requirements:     * - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."
      },
      "forceBurn(address,uint256)": {
        "details": "We can't call TBTCToken burn function from deposit Test becuase of ACL.                  This function bypasses ACL and can be called in Deposit tests.                  Burns an amount of the token of a given account                  deducting from the sender's allowance for said account.                  Bypasses ACL and can be called in Deposit tests",
        "params": {
          "_account": "The account whose tokens will be burnt.",
          "_amount": "The amount of tokens that will be burnt."
        }
      },
      "forceMint(address,uint256)": {
        "details": "We can't call TBTCToken mint function from deposit Test becuase of ACL.                  This function bypasses ACL and can be called in Deposit tests                  Mints an amount of the token and assigns it to an account.                  Uses the internal _mint function.",
        "params": {
          "_account": "The account that will receive the created tokens.",
          "_amount": "The amount of tokens that will be created."
        }
      },
      "increaseAllowance(address,uint256)": {
        "details": "Atomically increases the allowance granted to `spender` by the caller.     * This is an alternative to `approve` that can be used as a mitigation for problems described in `IERC20.approve`.     * Emits an `Approval` event indicating the updated allowance.     * Requirements:     * - `spender` cannot be the zero address."
      },
      "mint(address,uint256)": {
        "details": "Mints an amount of the token and assigns it to an account.                  Uses the internal _mint function.",
        "params": {
          "_account": "The account that will receive the created tokens.",
          "_amount": "The amount of tokens that will be created."
        }
      },
      "name()": {
        "details": "Returns the name of the token."
      },
      "resetAllowance(address,uint256)": {
        "details": "Uses exposed token functions to reset the allowance                        of a given account.",
        "params": {
          "_newAllowance": "New allowance to assign.",
          "_spender": "The allowed account."
        }
      },
      "resetBalance(uint256)": {
        "details": "Uses exposed token functions to reset caller's balance.",
        "params": {
          "_newBalance": "New balance to assign to caller"
        }
      },
      "symbol()": {
        "details": "Returns the symbol of the token, usually a shorter version of the name."
      },
      "totalSupply()": {
        "details": "See `IERC20.totalSupply`."
      },
      "transfer(address,uint256)": {
        "details": "See `IERC20.transfer`.     * Requirements:     * - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`."
      },
      "transferFrom(address,address,uint256)": {
        "details": "See `IERC20.transferFrom`.     * Emits an `Approval` event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of `ERC20`;     * Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `value`. - the caller must have allowance for `sender`'s tokens of at least `amount`."
      },
      "zeroBalance()": {
        "details": "Zeros out the balance of the calling address.                     Does nothing if address has zero balance."
      }
    }
  },
  "userdoc": {
    "methods": {
      "approveAndCall(address,uint256,bytes)": {
        "notice": "Set allowance for other address and notify.                   Allows `_spender` to spend no more than `_value`                   tokens on your behalf and then ping the contract about                   it."
      }
    }
  }
}